<script lang="ts">
    export let id: string;
    export let value: number;

    export let negative = false;

    export let defaultValue = 0;

    if (typeof value === "undefined") {
        value = defaultValue;
    }

    function inputInteger(event: Event & {currentTarget: (EventTarget & HTMLInputElement)}) {
        let newValue = event.currentTarget.value;

        if (newValue.startsWith("0") && newValue.length > 1) {
            newValue = newValue.slice(1, newValue.length)
        }

        if (newValue != "" && !isNaN(Number(newValue))) {
            value = Number(newValue);
        }
        else if (negative && newValue.startsWith("-")) {
            if (isNaN(Number(newValue.slice(1, newValue.length)))) {
                event.currentTarget.value = value.toString();
            }
        }
        else if (newValue === "") {
            event.currentTarget.value = defaultValue.toString();
            value = defaultValue;
        }
        else {
            event.currentTarget.value = value.toString();
        }
    }
</script>

<input {id} type="text" class="digitInput" style="--valuelen: {value.toString().length + 3}ch" on:input|preventDefault={inputInteger} {value}>

<style>
    .digitInput {
        width: var(--valuelen);
        padding-left: 1ch;
    }
</style>