From c56026b70b13b709b5b02b3dd819eef551df3d69 Mon Sep 17 00:00:00 2001 From: Davide Di Pumpo Date: Thu, 30 Oct 2025 11:25:33 +0100 Subject: [PATCH 1/2] refactor: simplify BaseProps type definition by removing unnecessary generic parameters --- .../src/components/OmegaForm/OmegaFormInput.vue | 2 +- .../src/components/OmegaForm/OmegaFormStuff.ts | 16 ++++++---------- .../src/components/OmegaForm/useOmegaForm.ts | 2 +- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/vue-components/src/components/OmegaForm/OmegaFormInput.vue b/packages/vue-components/src/components/OmegaForm/OmegaFormInput.vue index 3bc6c3f92a..4e8b9d2472 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaFormInput.vue +++ b/packages/vue-components/src/components/OmegaForm/OmegaFormInput.vue @@ -35,7 +35,7 @@ if (!form) { } defineProps< - BaseProps & DefaultTypeProps + BaseProps & DefaultTypeProps >() defineSlots<{ diff --git a/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts b/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts index cab49bb1c7..9b2189ccf8 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts +++ b/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts @@ -7,19 +7,15 @@ import { getTransformationFrom, useIntl } from "../../utils" import { type OmegaFieldInternalApi } from "./InputProps" import { type OF, type OmegaFormReturn } from "./useOmegaForm" -export type Leaves = T extends ReadonlyArray ? Leaves & {} +export type Leaves = T extends ReadonlyArray + ? Leaves & {} : { [K in keyof T]: T[K] extends string | boolean | number | null | undefined | symbol | bigint ? `${Path extends "" ? "" : `${Path}.`}${K & string}` : Leaves & {} }[keyof T] -// Helper type to make array indices flexible - accepts both [number] and numeric literals [0], [1], etc. -// 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> = { +export type BaseProps = { /** * Will fallback to i18n when not specified. * Can also be provided via #label slot for custom HTML labels. @@ -28,7 +24,7 @@ export type BaseProps = DeepKeys> = { label?: string validators?: FieldValidators // Use FlexibleArrayPath: if name contains [], just use TName; otherwise intersect with Leaves - name: FlexibleArrayPath extends never ? Leaves : TName + name: Leaves /** * Optional class to apply to the input element. * - If a string is provided, it will be used instead of the general class @@ -60,7 +56,7 @@ export type OmegaInputPropsBase< meta: MetaRecord i18nNamespace?: string } -} & BaseProps> +} & BaseProps export type OmegaInputProps< From extends Record, @@ -71,7 +67,7 @@ export type OmegaInputProps< meta: MetaRecord i18nNamespace?: string } -} & BaseProps> +} & BaseProps export type OmegaArrayProps< From extends Record, diff --git a/packages/vue-components/src/components/OmegaForm/useOmegaForm.ts b/packages/vue-components/src/components/OmegaForm/useOmegaForm.ts index d771a20efb..6f7dbcf525 100644 --- a/packages/vue-components/src/components/OmegaForm/useOmegaForm.ts +++ b/packages/vue-components/src/components/OmegaForm/useOmegaForm.ts @@ -228,7 +228,7 @@ export interface OmegaFormReturn< >, never > - & BaseProps + & BaseProps & TypeProps & Partial<{}> > From 2126e20cc031c0322aef6aa4d70e1f96b96775b9 Mon Sep 17 00:00:00 2001 From: Davide Di Pumpo Date: Thu, 30 Oct 2025 11:34:00 +0100 Subject: [PATCH 2/2] chore --- .changeset/shy-carpets-stick.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/shy-carpets-stick.md diff --git a/.changeset/shy-carpets-stick.md b/.changeset/shy-carpets-stick.md new file mode 100644 index 0000000000..ab6de5fa6f --- /dev/null +++ b/.changeset/shy-carpets-stick.md @@ -0,0 +1,5 @@ +--- +"@effect-app/vue-components": patch +--- + +fixes leaves recursion