@bach.software/vue-dynamic-form 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/examples.cjs.js +4 -4
  2. package/dist/examples.cjs.js.map +1 -1
  3. package/dist/examples.es.js +325 -265
  4. package/dist/examples.es.js.map +1 -1
  5. package/dist/src/components/DynamicFormItem.vue.d.ts +3 -1
  6. package/dist/src/components/DynamicFormItemArray.vue.d.ts +3 -1
  7. package/dist/src/components/DynamicFormItemChoice.vue.d.ts +3 -1
  8. package/dist/src/components/DynamicFormTemplate.vue.d.ts +30 -37
  9. package/dist/src/core/__tests__/validation.test.d.ts +1 -0
  10. package/dist/src/core/defineMetadata.d.ts +3 -2
  11. package/dist/src/core/useDynamicForm.d.ts +2 -0
  12. package/dist/src/core/useValidatePartialForm.d.ts +4 -0
  13. package/dist/src/examples/TestForm.vue.d.ts +4 -0
  14. package/dist/src/examples/TestFormTemplate.vue.d.ts +28 -27
  15. package/dist/src/examples/{TestFormTemplate.testcases.d.ts → __tests__/TestFormTemplate.testcases.d.ts} +9 -3
  16. package/dist/src/examples/index.d.ts +1 -1
  17. package/dist/src/index.d.ts +1 -1
  18. package/dist/src/types/FieldMetadata.d.ts +24 -2
  19. package/dist/src/types/InternalFieldMetadata.d.ts +7 -1
  20. package/dist/src/types/MetadataConfiguration.d.ts +1 -0
  21. package/dist/src/utils/__tests__/createValidation.test.d.ts +1 -0
  22. package/dist/src/utils/__tests__/mapEachMetadataItem.test.d.ts +16 -0
  23. package/dist/src/utils/__tests__/splitValidationFunctions.test.d.ts +1 -0
  24. package/dist/src/utils/hashField.d.ts +7 -0
  25. package/dist/src/utils/mapEachMetadataItem.d.ts +10 -0
  26. package/dist/tsconfig.tsbuildinfo +1 -1
  27. package/dist/useDynamicForm-C6-0mGw4.js +737 -0
  28. package/dist/useDynamicForm-C6-0mGw4.js.map +1 -0
  29. package/dist/useDynamicForm-SHyV1lLH.cjs +6 -0
  30. package/dist/useDynamicForm-SHyV1lLH.cjs.map +1 -0
  31. package/dist/vue-dynamic-form.cjs.js +1 -1
  32. package/dist/vue-dynamic-form.es.js +6 -6
  33. package/package.json +1 -1
  34. package/dist/src/core/validation.test.d.ts +0 -1
  35. package/dist/src/utils/createValidation.test.d.ts +0 -1
  36. package/dist/useDynamicForm-3E1RNkVq.cjs +0 -6
  37. package/dist/useDynamicForm-3E1RNkVq.cjs.map +0 -1
  38. package/dist/useDynamicForm-B6YN35Qb.js +0 -684
  39. package/dist/useDynamicForm-B6YN35Qb.js.map +0 -1
  40. /package/dist/src/components/{DynamicForm.test.d.ts → __tests__/DynamicForm.test.d.ts} +0 -0
  41. /package/dist/src/components/{DynamicFormItem.analytics.test.d.ts → __tests__/DynamicFormItem.analytics.test.d.ts} +0 -0
  42. /package/dist/src/components/{DynamicFormItem.logic.test.d.ts → __tests__/DynamicFormItem.logic.test.d.ts} +0 -0
  43. /package/dist/src/components/{DynamicFormItem.test-helpers.d.ts → __tests__/DynamicFormItem.test-helpers.d.ts} +0 -0
  44. /package/dist/src/components/{DynamicFormItem.validation.test.d.ts → __tests__/DynamicFormItem.validation.test.d.ts} +0 -0
  45. /package/dist/src/components/{DynamicFormItemArray.logic.test.d.ts → __tests__/DynamicFormItemArray.logic.test.d.ts} +0 -0
  46. /package/dist/src/components/{DynamicFormItemArray.validation.test.d.ts → __tests__/DynamicFormItemArray.validation.test.d.ts} +0 -0
  47. /package/dist/src/components/{DynamicFormItemChoice.logic.test.d.ts → __tests__/DynamicFormItemChoice.logic.test.d.ts} +0 -0
  48. /package/dist/src/components/{DynamicFormItemChoice.validation.test.d.ts → __tests__/DynamicFormItemChoice.validation.test.d.ts} +0 -0
  49. /package/dist/src/{examples/DynamicForm.test.d.ts → core/__tests__/useValidatePartialForm.test.d.ts} +0 -0
  50. /package/dist/src/{test-setup.d.ts → examples/__tests__/DynamicForm.test.d.ts} +0 -0
  51. /package/dist/src/{utils/checkTreeHasValue.test.d.ts → tests/test-setup.d.ts} +0 -0
  52. /package/dist/src/utils/{normalizePath.test.d.ts → __tests__/checkTreeHasValue.test.d.ts} +0 -0
  53. /package/dist/src/utils/{overridePath.test.d.ts → __tests__/normalizePath.test.d.ts} +0 -0
  54. /package/dist/src/utils/{resolveMessage.test.d.ts → __tests__/overridePath.test.d.ts} +0 -0
  55. /package/dist/src/utils/{setInPath.test.d.ts → __tests__/resolveMessage.test.d.ts} +0 -0
  56. /package/dist/src/utils/{splitValidationFunctions.test.d.ts → __tests__/setInPath.test.d.ts} +0 -0
@@ -15,6 +15,19 @@ export type FieldMetadata<ExtendedFieldTypes extends string = string, ExtendedPr
15
15
  * The maximal occurrence of a value.
16
16
  */
17
17
  maxOccurs?: number;
18
+ /**
19
+ * Controls whether the array automatically pre-fills empty placeholder items up to `minOccurs`
20
+ * when the form is first rendered and the array is still empty.
21
+ *
22
+ * Defaults to `true` — omitting this property has the same effect as setting it to `true`.
23
+ * Set it explicitly to `false` to suppress auto-filling, which is useful when you want the
24
+ * user to explicitly add the first item themselves even though `minOccurs` is 1 or higher.
25
+ *
26
+ * @example
27
+ * // Will NOT auto-add an initial item, even though minOccurs is 1:
28
+ * { name: 'emails', type: 'text', maxOccurs: 5, minOccurs: 1, autoAddMinOccurs: false }
29
+ */
30
+ autoAddMinOccurs?: boolean;
18
31
  /**
19
32
  * Simple restrictions to the data, these are available in XSD and can be applied easily.
20
33
  * For more advance validation use the validation property.
@@ -158,14 +171,23 @@ export type FieldMetadata<ExtendedFieldTypes extends string = string, ExtendedPr
158
171
  * is re-computed every time the value changes. If you don't use it, a change in value will not re-trigger the reactivity of the computed.
159
172
  * @returns A transformed FieldMetadata
160
173
  */
161
- computedProps?: ((thisField: ComputedPropsType<FieldMetadata<ExtendedFieldTypes, ExtendedProperties>>, fieldValue: Ref<unknown>) => void)[];
174
+ computedProps?: ((thisField: ComputedPropsFieldType<ExtendedFieldTypes, ExtendedProperties>, fieldValue: Ref<unknown>, childFields: Ref<ReadOnlyFieldType<ExtendedFieldTypes, ExtendedProperties>[]>) => void)[];
162
175
  /**
163
176
  * Normally the computedProps are not re-calculate if a child value changes. If you need this functionality, you can enable this by
164
177
  * setting this property to true.
165
178
  */
166
179
  computeOnChildValueChange?: boolean;
167
180
  } & ExtendedProperties;
168
- export type ComputedPropsType<T> = Omit<T, 'name' | 'path' | 'children' | 'choice' | 'attributes' | 'fieldOptions' | 'computedProps' | 'maxOccurs'> & Readonly<{
181
+ export type ComputedPropsFieldType<ExtendedFieldTypes extends string = string, ExtendedProperties extends object = object> = Omit<FieldMetadata<ExtendedFieldTypes, ExtendedProperties>, 'name' | 'path' | 'parent' | 'children' | 'choice' | 'attributes' | 'fieldOptions' | 'computedProps' | 'maxOccurs' | 'isComplexType' | 'computeOnChildValueChange'> & Readonly<{
182
+ name: string;
183
+ path: string;
184
+ parent: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>;
185
+ }>;
186
+ export type ReadOnlyFieldType<ExtendedFieldTypes extends string = string, ExtendedProperties extends object = object> = Readonly<Omit<FieldMetadata<ExtendedFieldTypes, ExtendedProperties>, 'name' | 'path' | 'children' | 'choice'> & {
169
187
  name: string;
170
188
  path: string;
189
+ children: ReadOnlyFieldType<ExtendedFieldTypes, ExtendedProperties>[];
190
+ choice: ReadOnlyFieldType<ExtendedFieldTypes, ExtendedProperties>[];
171
191
  }>;
192
+ export type ComputedPropsFieldOf<T extends FieldMetadata<any, any>> = T extends FieldMetadata<infer FT, infer EP> ? ComputedPropsFieldType<FT, EP> : never;
193
+ export type ReadOnlyFieldOf<T extends FieldMetadata<any, any>> = T extends FieldMetadata<infer FT, infer EP> ? ReadOnlyFieldType<FT, EP> : never;
@@ -1,3 +1,9 @@
1
1
  import type { FieldMetadata } from '../types/FieldMetadata.js';
2
2
  import type { RequireOnly } from '../types/RequireOnly.js';
3
- export type InternalFieldMetadata<Metadata extends FieldMetadata> = RequireOnly<Metadata, 'name' | 'type' | 'minOccurs' | 'maxOccurs'>;
3
+ export type InternalFieldMetadata<Metadata extends FieldMetadata> = RequireOnly<Metadata, 'name' | 'type' | 'minOccurs' | 'maxOccurs'> & {
4
+ /**
5
+ * Internal hash computed by the system to track meaningful changes to the computed field.
6
+ * Do not set this manually — it is overwritten after every computedProps run.
7
+ */
8
+ _hash?: string;
9
+ };
@@ -1,5 +1,6 @@
1
1
  export interface MetadataConfiguration {
2
2
  fieldTypes: readonly string[];
3
3
  extendedProperties: object;
4
+ slotProperties: object;
4
5
  valueTypes: Record<string, any>;
5
6
  }
@@ -0,0 +1 @@
1
+ import '../../core/validation';
@@ -0,0 +1,16 @@
1
+ import type { GetMetadataType } from '../../types/GetMetadataType';
2
+ export type TestMetadata = GetMetadataType<typeof _metadata>;
3
+ declare const _metadata: {
4
+ fieldTypes: readonly ("default" | "text")[];
5
+ extendedProperties: {
6
+ visited?: boolean;
7
+ visitOrder?: number;
8
+ };
9
+ slotProperties: object;
10
+ valueTypes: {
11
+ text: string;
12
+ } & {
13
+ default: string;
14
+ };
15
+ };
16
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { FieldMetadata } from '../types/FieldMetadata';
2
+ /**
3
+ * Creates a deterministic hash of all mutable field properties (those that computedProps can change).
4
+ * Excludes structural/immutable properties: name, path, children, choice, attributes,
5
+ * fieldOptions, computedProps, maxOccurs, parent, and _hash itself.
6
+ */
7
+ export declare function hashField(field: FieldMetadata): string;
@@ -0,0 +1,10 @@
1
+ import type { FieldMetadata } from '../types/FieldMetadata';
2
+ /**
3
+ * Recursively walks a `FieldMetadata` tree (visiting `children` and `choice`) and applies
4
+ * `callbackFunc` to every node, returning the transformed tree.
5
+ *
6
+ * The callback receives a shallow clone of each node, so mutations inside the callback do not
7
+ * affect the original metadata. `children` and `choice` on the returned node are replaced with
8
+ * the recursively-mapped results after the callback runs.
9
+ */
10
+ export declare function mapEachMetadataItem<ExtendedFieldTypes extends string = string, ExtendedProperties extends object = object>(metadata: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>, callbackFunc: (item: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>) => FieldMetadata<ExtendedFieldTypes, ExtendedProperties>): FieldMetadata<ExtendedFieldTypes, ExtendedProperties>;