diff --git a/.changeset/brown-meals-cross.md b/.changeset/brown-meals-cross.md new file mode 100644 index 0000000000..9517f20dab --- /dev/null +++ b/.changeset/brown-meals-cross.md @@ -0,0 +1,5 @@ +--- +"@effect-app/vue-components": patch +--- + +restore Leaves typing for omegaform input diff --git a/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts b/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts index b735b774ca..2700a8be77 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts +++ b/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts @@ -15,16 +15,16 @@ export type Leaves = T extends ReadonlyArray = T extends `${infer Before}[number]${infer After}` - ? T | `${Before}[${number}]${FlexibleArrayPath}` - : T +// Simplified: if there's a [] in the path, just use TName to avoid excessive type complexity +export type FlexibleArrayPath = T extends `${string}[${string}]${string}` ? T + : never export type BaseProps = DeepKeys> = { /** Will fallback to i18n when not specified */ label?: string validators?: FieldValidators - // disabled FlexibleArrayPath as it causes excessive complexity in type resolution inside user projects - name: TName // & FlexibleArrayPath> + // Use FlexibleArrayPath: if name contains [], just use TName; otherwise intersect with Leaves + name: FlexibleArrayPath extends never ? Leaves : TName } export type TypesWithOptions = "radio" | "select" | "multiple" | "autocomplete" | "autocompletemultiple" diff --git a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue index b70a3880b2..73bf17a33d 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue +++ b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue @@ -30,7 +30,6 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { useStore } from "@tanstack/vue-form" -import { defineSlots } from "vue" import { usePreventClose } from "./blockDialog" import { getOmegaStore } from "./getOmegaStore" import { type DefaultTypeProps, type OmegaFormApi, type OmegaFormState } from "./OmegaFormStuff"