<script setup lang="ts">
import { ref } from "vue";
const props = defineProps({
  parameter: {
    type: Object,
    required: true,
    validator(value: Record<string, never>) {
      return "number" === value["type"] || "integer" === value["type"];
    },
  },
  required: Boolean,
  parameterName: {
    type: String,
    required: true,
  },
  modelValue: {
    type: Number,
  },
  helpId: {
    type: String,
  },
});

const emit = defineEmits<{
  (e: "update:modelValue", value: number | undefined): void;
}>();

const numberInput = ref<HTMLInputElement | undefined>(undefined);

function updateValue() {
  emit("update:modelValue", Number(numberInput.value?.value));
}
</script>

<template>
  <input
    class="form-control"
    type="number"
    ref="numberInput"
    :max="props.parameter['maximum']"
    :min="props.parameter['minimum']"
    step="1"
    :value="props.modelValue"
    :required="props.required"
    :aria-describedby="props.helpId"
    @input="updateValue"
  />
</template>

<style scoped></style>