diff --git a/.changeset/omegaform-between-localization.md b/.changeset/omegaform-between-localization.md new file mode 100644 index 000000000..7bb347b0c --- /dev/null +++ b/.changeset/omegaform-between-localization.md @@ -0,0 +1,5 @@ +--- +"@effect-app/vue-components": patch +--- + +Localize `S.isBetween` validation failures: the violated side now maps to the `validation.number.min` / `validation.number.max` messages instead of falling back to the English default formatter. Also fixes the inverted `isExclusive` flag on the min/max messages for `isGreaterThan[OrEqualTo]` / `isLessThan[OrEqualTo]` (inclusive checks now say "at least/at most", strict ones "greater/less than"). diff --git a/.changeset/omegaform-vnumber-input.md b/.changeset/omegaform-vnumber-input.md new file mode 100644 index 000000000..72e0ffa69 --- /dev/null +++ b/.changeset/omegaform-vnumber-input.md @@ -0,0 +1,5 @@ +--- +"@effect-app/vue-components": minor +--- + +OmegaForm number fields now render Vuetify 4's `v-number-input` instead of `v-text-field type="number"` (`range` keeps its `v-slider`). Precision is schema-driven (`S.Int` → 0, plain numbers → free decimals), controls default to the stacked variant, and any `VNumberInput` prop (`precision`, `step`, `control-variant`, `decimal-separator`, ...) can be overridden per field via attrs. Schema `min`/`max` are exposed to assistive tech as spinbutton ARIA bounds but are deliberately not passed as component props, so out-of-range values keep reaching schema validation and show its localized error instead of being silently clamped. diff --git a/.nvmrc b/.nvmrc index e85bf595b..b6f5ce1e9 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.12 +v22.23 diff --git a/packages/vue-components/src/components/OmegaForm/InputProps.ts b/packages/vue-components/src/components/OmegaForm/InputProps.ts index eaec0cf14..a67a6b540 100644 --- a/packages/vue-components/src/components/OmegaForm/InputProps.ts +++ b/packages/vue-components/src/components/OmegaForm/InputProps.ts @@ -36,6 +36,7 @@ export type InputProps, TName extends Deep maxLength?: number | false max?: number | false min?: number | false + refinement?: "int" errorMessages: string[] error: boolean label: string diff --git a/packages/vue-components/src/components/OmegaForm/OmegaInputVuetify.vue b/packages/vue-components/src/components/OmegaForm/OmegaInputVuetify.vue index b78221509..6e677a4a4 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaInputVuetify.vue +++ b/packages/vue-components/src/components/OmegaForm/OmegaInputVuetify.vue @@ -87,20 +87,51 @@ /> - + + + + - +