@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
@@ -1 +1 @@
1
- {"version":3,"file":"examples.es.js","sources":["../src/examples/components/IconButton.vue","../src/examples/TestFormTemplate.vue","../src/examples/TestForm.vue","../src/examples/TestFormTemplate.testcases.ts"],"sourcesContent":["<script lang=\"ts\" setup>\ninterface Props {\n icon: 'plus' | 'minus'\n color?: 'blue' | 'red'\n}\ninterface Emits {\n (e: 'click'): void\n}\nconst {\n icon,\n color = 'blue',\n} = defineProps<Props>();\ndefineEmits<Emits>();\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800\"\n :class=\"{\n 'bg-blue-200 hover:bg-blue-300': color === 'blue',\n 'bg-red-200 hover:bg-red-300': color === 'red',\n }\"\n @click=\"$emit('click')\"\n >\n <svg v-if=\"icon === 'plus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n <svg v-if=\"icon === 'minus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14\" />\n </svg>\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport type { GetMetadataType } from '@/types/GetMetadataType';\nimport DynamicFormTemplate from '@/components/DynamicFormTemplate.vue';\nimport { defineMetadata } from '@/core/defineMetadata';\nimport IconButton from './components/IconButton.vue';\n\nexport type Metadata = GetMetadataType<typeof metadata>;\n\nexport interface Props {\n /**\n * Free to decide what attributes you want to pass internally between your templates.\n * You can add any attribute to a <slot /> and then it will be accessible in props.slotProps.\n */\n slotProps?: {\n hideLabel?: boolean\n /** Example on how to keep track of the levels */\n level?: number\n /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */\n belowChoiceField?: boolean\n }\n}\n\ndefineProps<Props>();\n\nconst metadata = defineMetadata<\n {\n text: string\n textBoundByVModel: string\n select: string\n selectBoundByVModel: string\n checkbox: boolean\n checkboxBoundByVModel: boolean\n heading: never\n },\n {\n description?: string\n options?: { key: string, value: string }[]\n fullWidth?: boolean\n disabled?: boolean\n }\n>();\n</script>\n\n<template>\n <DynamicFormTemplate :metadata-configuration=\"metadata\">\n <template #heading=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, canAddItems, addItem, canRemoveItems, removeItem }\">\n <div class=\"mt-4\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <h3 v-if=\"label\" class=\"flex text-xl font-bold gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </h3>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n </div>\n </template>\n\n <template #choice=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required }\">\n <div class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center\" :class=\"{ 'text-gray-500': disabled, 'after:content-[\\'*\\'] after:-ml-0.5 after:text-red-500': required }\">\n {{ label }}\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" :below-choice-field=\"true\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem }\">\n <!-- In case we're below a choice field, the first array item is not automatically added, so show a label with buttons -->\n <div v-if=\"slotProps?.belowChoiceField\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <!-- In case the array has multiple fields, just show those fields, no extra label -->\n <slot v-else-if=\"fieldMetadata.children?.length\" />\n <!-- In case we show an input directly, show a label and buttons -->\n <div v-else class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label :for=\"`${fieldMetadata.path}[0]`\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-2 items-center\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </label>\n <slot :hide-label=\"true\" />\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, canRemoveItems, addItem, removeItem }\">\n <!-- In case we have multiple children, this is a grouped field and we adjust how it is displayed -->\n <div v-if=\"fieldMetadata.children?.length\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span v-if=\"!slotProps?.hideLabel\" class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" color=\"red\" @click=\"removeItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <!-- Otherwise load only the slot with the input -->\n <div v-else class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label v-if=\"!slotProps?.hideLabel\" :for=\"fieldMetadata.path\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n </label>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex flex-col grow\">\n <slot />\n </div>\n <IconButton :class=\"{ invisible: !canRemoveItems }\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #select-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #selectBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #checkbox-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :checked=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange(($event.target as HTMLInputElement).checked)\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #checkboxBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #textBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #default-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @input=\"handleChange\"\n @blur=\"handleBlur\"\n >\n </template>\n </DynamicFormTemplate>\n</template>\n","<script setup lang=\"ts\">\nimport type { Metadata } from './TestFormTemplate.vue';\n\nimport type { DynamicFormSettings } from '@/types/DynamicFormSettings';\nimport { computed, ref } from 'vue';\nimport DynamicForm from '../components/DynamicForm.vue';\nimport { useDynamicForm } from '../core/useDynamicForm';\nimport TestFormTemplate from './TestFormTemplate.vue';\n\nexport interface Props {\n metadata: Metadata[]\n settings?: DynamicFormSettings\n showDebugState?: boolean\n}\n\nconst { metadata, settings: _settings, showDebugState = false } = defineProps<Props>();\n\nconst { values, handleSubmit, errors, meta } = useDynamicForm();\nconst manualValues = ref();\nconst editMode = ref(true);\nconst isSubmitted = ref(false);\n\n// Add edit mode functionality to the form. In case we're not in edit mode, disable all items.\nconst metadataWithEdit = computed(() => metadata?.map(x => mapEachMetadataItem(x, (item) => {\n item.computedProps = item.computedProps ?? [];\n item.computedProps?.push((thisField) => {\n // Re-compute the disabled property of each field, when editMode changes\n if (!editMode.value)\n thisField.disabled = true;\n });\n return item;\n})));\n\nconst settings = computed(() => ({\n analytics: true,\n messages: {\n required: '{field} is required',\n minOccurs: 'At least {min} items required',\n choiceMinOccurs: 'The following fields need to occur at least {min} time(s): {field}',\n minLength: 'The minimum length of {field} is {length}',\n maxLength: 'The maximum length of {field} is {length}',\n length: '{field} must be exactly {length} characters',\n pattern: '{field} does not match the required pattern',\n minInclusive: '{field} must be at least {min}',\n maxInclusive: '{field} must be at most {max}',\n minExclusive: '{field} must be greater than {min}',\n maxExclusive: '{field} must be less than {max}',\n enumeration: '{field} must be one of the allowed values',\n whiteSpace: '{field} contains invalid whitespace (mode: {mode})',\n fractionDigits: '{field} may have at most {digits} decimal place(s)',\n totalDigits: '{field} may have at most {digits} significant digit(s)',\n },\n ...(_settings ?? {}),\n}));\n\nfunction submit(e?: Event) {\n handleSubmit(\n (_values) => {\n isSubmitted.value = true;\n },\n ({ errors: _errors }) => {\n isSubmitted.value = false;\n },\n )(e);\n};\n\nfunction mapEachMetadataItem(metadata: Metadata, callbackFunc: (item: Metadata) => Metadata) {\n if (!metadata || !callbackFunc)\n return metadata;\n\n metadata = callbackFunc?.({ ...metadata });\n metadata.children = metadata?.children?.map(x => mapEachMetadataItem(x, callbackFunc));\n metadata.choice = metadata?.choice?.map(x => mapEachMetadataItem(x, callbackFunc));\n return metadata;\n}\n</script>\n\n<template>\n <form @submit=\"submit\">\n <div class=\"flex justify-end gap-2\">\n <button v-if=\"!editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\" @click=\"editMode = true\">\n Edit\n </button>\n <button v-if=\"editMode\" type=\"submit\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\">\n Submit\n </button>\n <button v-if=\"editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded\" data-testid=\"cancel\" @click=\"editMode = false\">\n Cancel\n </button>\n </div>\n <div v-if=\"Object.values(errors).length\" data-testid=\"errors\" class=\"col-12 text-red-600\">\n Errors:\n <ul>\n <li v-for=\"(error, key) in errors\" :key=\"key\">\n <span v-html=\"error\" />\n </li>\n </ul>\n </div>\n <DynamicForm\n :template=\"TestFormTemplate\"\n :metadata=\"metadataWithEdit\"\n :settings\n @update:model-value=\"manualValues = $event\"\n />\n <span v-if=\"isSubmitted\" data-testid=\"isSubmitted\" />\n <pre v-if=\"showDebugState\" class=\"bg-gray-100 p-4 rounded-lg text-sm overflow-auto\">\nIsDirty: {{ meta.dirty }}\nPending: {{ meta.pending }}\nTouched: {{ meta.touched }}\nValid: {{ meta.valid }}\nSubmitted: {{ isSubmitted }}\n\n// form values:\n{{ JSON.stringify(values, null, 2) }}\n </pre>\n </form>\n</template>\n","import type { Metadata } from './TestFormTemplate.vue';\nimport type { DynamicFormSettings } from '@/types/DynamicFormSettings';\n\nimport { defineComponent, h, markRaw } from 'vue';\nimport TestForm from './TestForm.vue';\n\nexport const defaultTestCase = createTestCase([{\n name: 'text',\n type: 'text',\n fieldOptions: { label: 'Text Input' },\n path: 'with.custom.structure',\n restriction: { maxLength: 10 },\n}]);\n\nexport const arrayTestCase = createTestCase([{\n fieldOptions: { label: 'Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Optional field (max 3)' }, minOccurs: 0, maxOccurs: 3 },\n { fieldOptions: { label: 'Required field (max 3)' }, maxOccurs: 3 },\n { fieldOptions: { label: '2 Fields required' }, minOccurs: 2, maxOccurs: 4 },\n { fieldOptions: { label: 'Section (2 sections required)' }, type: 'heading', minOccurs: 2, maxOccurs: 4, fullWidth: true, children: [\n { fieldOptions: { label: 'Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' }, type: 'select', options: [\n { key: 'option1', value: 'Option 1' },\n { key: 'option2', value: 'Option 2' },\n { key: 'option3', value: 'Option 3' },\n ] },\n { fieldOptions: { label: 'Nested field 3' }, type: 'checkbox' },\n ] },\n ],\n}]);\n\nexport const groupTestCase = createTestCase([{\n fieldOptions: { label: 'Grouped Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Optional group' }, minOccurs: 0, description: `The group is optional, therefore the children will only be required once 1 value is filled in.\n \nYou can test it by filling in one of the fields.`, children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n ],\n}, {\n fieldOptions: { label: 'Grouped Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n { fieldOptions: { label: 'Optional group' }, minOccurs: 0, maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n ],\n}]);\n\nexport const choiceTestCase = createTestCase([\n {\n fieldOptions: { label: 'Choice Fields (minOccurs 1, maxOccurs 1)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Simple Choice Field' }, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' } },\n { fieldOptions: { label: 'Nested Field 2' } },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Grouped Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, children: [{ fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true }, { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true }] },\n { fieldOptions: { label: 'Nested Field 2' }, children: [{ fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true }, { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true }] },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Array Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, maxOccurs: 3 },\n { fieldOptions: { label: 'Nested Field 2' }, maxOccurs: 3 },\n ] },\n ],\n },\n]);\n\nexport const individualTestCase = createTestCase(\n [{\n name: 'items',\n type: 'text',\n fieldOptions: { label: 'Items' },\n maxOccurs: 3,\n attributes: [{ name: 'lang', type: 'text', minOccurs: 0 }],\n }],\n {\n // validateOnValueUpdate: false,\n // validateOnValueUpdateAfterSubmit: false,\n // validateWhenInError: true,\n // validateOnBlur: true,\n },\n);\n\nexport function createTestCase(\n metadata: Metadata[],\n settings?: DynamicFormSettings,\n) {\n return markRaw(defineComponent({\n render: () => h(TestForm, { metadata, settings, showDebugState: true }),\n }));\n}\n"],"names":["_createElementBlock","color","$emit","icon","_openBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","metadata","defineMetadata","_createBlock","DynamicFormTemplate","_unref","fieldMetadata","errorMessage","label","disabled","canAddItems","addItem","canRemoveItems","removeItem","_normalizeClass","_createTextVNode","_toDisplayString","IconButton","_hoisted_3","_renderSlot","_ctx","slotProps","_withCtx","required","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_22","_createVNode","_hoisted_23","_hoisted_24","value","handleBlur","handleChange","_Fragment","optionKey","optionValue","_hoisted_26","$event","_hoisted_28","_vModelSelect","_vModelCheckbox","_vModelText","values","handleSubmit","errors","meta","useDynamicForm","manualValues","ref","editMode","isSubmitted","metadataWithEdit","computed","__props","x","mapEachMetadataItem","item","thisField","settings","submit","e","_values","_errors","callbackFunc","_renderList","error","key","DynamicForm","TestFormTemplate","showDebugState","defaultTestCase","createTestCase","arrayTestCase","groupTestCase","choiceTestCase","individualTestCase","markRaw","defineComponent","h","TestForm"],"mappings":"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"}
1
+ {"version":3,"file":"examples.es.js","sources":["../src/utils/mapEachMetadataItem.ts","../src/examples/components/IconButton.vue","../src/examples/TestFormTemplate.vue","../src/examples/TestForm.vue","../src/examples/__tests__/TestFormTemplate.testcases.ts"],"sourcesContent":["import type { FieldMetadata } from '@/types/FieldMetadata';\n\n/**\n * Recursively walks a `FieldMetadata` tree (visiting `children` and `choice`) and applies\n * `callbackFunc` to every node, returning the transformed tree.\n *\n * The callback receives a shallow clone of each node, so mutations inside the callback do not\n * affect the original metadata. `children` and `choice` on the returned node are replaced with\n * the recursively-mapped results after the callback runs.\n */\nexport function mapEachMetadataItem<\n ExtendedFieldTypes extends string = string,\n ExtendedProperties extends object = object,\n>(\n metadata: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n callbackFunc: (item: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>) => FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n): FieldMetadata<ExtendedFieldTypes, ExtendedProperties> {\n if (!metadata || !callbackFunc)\n return metadata;\n\n metadata = callbackFunc?.({ ...metadata });\n metadata.children = metadata?.children?.map(x => mapEachMetadataItem(x, callbackFunc));\n metadata.choice = metadata?.choice?.map(x => mapEachMetadataItem(x, callbackFunc));\n return metadata;\n}\n","<script lang=\"ts\" setup>\ninterface Props {\n icon: 'plus' | 'minus'\n color?: 'blue' | 'red'\n}\ninterface Emits {\n (e: 'click'): void\n}\nconst {\n icon,\n color = 'blue',\n} = defineProps<Props>();\ndefineEmits<Emits>();\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800 cursor-pointer\"\n :class=\"{\n 'bg-blue-200 hover:bg-blue-300': color === 'blue',\n 'bg-red-200 hover:bg-red-300': color === 'red',\n }\"\n @click=\"$emit('click')\"\n >\n <svg v-if=\"icon === 'plus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n <svg v-if=\"icon === 'minus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14\" />\n </svg>\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport type { GetMetadataType } from '@/types/GetMetadataType';\nimport DynamicFormTemplate from '@/components/DynamicFormTemplate.vue';\nimport { defineMetadata } from '@/core/defineMetadata';\nimport IconButton from './components/IconButton.vue';\n\nexport type Metadata = GetMetadataType<typeof metadata>;\n\nconst metadata = defineMetadata<\n {\n text: string\n textBoundByVModel: string\n select: string\n selectBoundByVModel: string\n checkbox: boolean\n checkboxBoundByVModel: boolean\n heading: never\n group: never\n },\n {\n description?: string\n options?: { key: string, value: string }[]\n fullWidth?: boolean\n disabled?: boolean\n hidden?: boolean\n },\n /**\n * Free to decide what attributes you want to pass internally between your templates.\n * You can add any attribute to a <slot /> and then it will be accessible in props.slotProps.\n */\n {\n hideLabel?: boolean\n /** Example on how to keep track of the levels */\n level?: number\n /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */\n belowChoiceField?: boolean\n hidden?: boolean\n }\n>();\n</script>\n\n<template>\n <DynamicFormTemplate :metadata-configuration=\"metadata\">\n <template #heading=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, canAddItems, addItem, canRemoveItems, removeItem, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"mt-4\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <h3 v-if=\"label\" class=\"flex text-xl font-bold gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </h3>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n </div>\n </template>\n\n <template #heading-array>\n <!-- Don't show any extra elements for the heading -->\n <slot />\n </template>\n\n <template #default-choice=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center\" :class=\"{ 'text-gray-500': disabled, 'after:content-[\\'*\\'] after:-ml-0.5 after:text-red-500': required }\">\n {{ label }}\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" :below-choice-field=\"true\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label :for=\"`${fieldMetadata.path}[0]`\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-2 items-center\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </label>\n <slot :hide-label=\"true\" />\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canRemoveItems, removeItem, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label v-if=\"!slotProps?.hideLabel\" :for=\"fieldMetadata.path\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n </label>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex flex-col grow\">\n <slot />\n </div>\n <IconButton :class=\"{ invisible: !canRemoveItems }\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #group-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, slotProps }\">\n <template v-if=\"fieldMetadata.hidden\" />\n <!-- In case we're below a choice field, the first array item is not automatically added, so show a label with buttons -->\n <div v-else-if=\"slotProps?.belowChoiceField\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <!-- In case we show an input directly, show a label and buttons -->\n <slot v-else />\n </template>\n\n <template #group=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, canRemoveItems, addItem, removeItem, slotProps }\">\n <!-- In case of a grouped field we render the field differently -->\n <div v-if=\"!fieldMetadata.hidden\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span v-if=\"!slotProps?.hideLabel\" class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" color=\"red\" @click=\"removeItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #select-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #selectBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #checkbox-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :checked=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange(($event.target as HTMLInputElement).checked)\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #checkboxBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #textBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #default-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @input=\"handleChange\"\n @blur=\"handleBlur\"\n >\n </template>\n </DynamicFormTemplate>\n</template>\n","<script setup lang=\"ts\">\nimport type { GenericObject } from 'vee-validate';\n\nimport type { Metadata } from './TestFormTemplate.vue';\nimport type { DynamicFormSettings } from '@/types/DynamicFormSettings';\nimport { computed, ref } from 'vue';\nimport { checkTreeHasValue } from '@/utils/checkTreeHasValue';\nimport { mapEachMetadataItem } from '@/utils/mapEachMetadataItem';\nimport DynamicForm from '../components/DynamicForm.vue';\nimport { useDynamicForm } from '../core/useDynamicForm';\nimport TestFormTemplate from './TestFormTemplate.vue';\n\nexport interface Props {\n metadata: Metadata[]\n settings?: DynamicFormSettings\n showDebugState?: boolean\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n}\n\nconst { metadata, settings: _settings, initialEdit = true, hideFieldsWithoutValue = false, showDebugState = false, initialValues } = defineProps<Props>();\n\nconst { values, handleSubmit, errors, meta } = useDynamicForm({\n initialValues,\n});\nconst manualValues = ref();\nconst editMode = ref(initialEdit);\nconst isSubmitted = ref(false);\n\n// Add edit mode functionality to the form. In case we're not in edit mode, disable all items.\nconst metadataWithEdit = computed(() => metadata?.map(x => mapEachMetadataItem(x, (item) => {\n item.computedProps = item.computedProps ?? [];\n\n // Disable all fields when not in edit mode\n item.computedProps.push((thisField) => {\n if (!editMode.value)\n thisField.disabled = true;\n });\n\n if (hideFieldsWithoutValue) {\n // In view mode, hide fields that have no value\n item.computedProps.push((thisField, fieldValue) => {\n if (!editMode.value && !checkTreeHasValue(fieldValue.value))\n thisField.hidden = true;\n });\n\n // In view mode, hide a parent field when all of its children are hidden\n item.computedProps.push((thisField, _fieldValue, childFields) => {\n if (!editMode.value && childFields.value.length > 0 && childFields.value.every(c => c.hidden))\n thisField.hidden = true;\n });\n }\n\n return item;\n})));\n\nconst settings = computed(() => ({\n analytics: true,\n messages: {\n required: '{field} is required',\n minOccurs: 'At least {min} items required',\n choiceMinOccurs: 'The following fields need to occur at least {min} time(s): {field}',\n minLength: 'The minimum length of {field} is {length}',\n maxLength: 'The maximum length of {field} is {length}',\n length: '{field} must be exactly {length} characters',\n pattern: '{field} does not match the required pattern',\n minInclusive: '{field} must be at least {min}',\n maxInclusive: '{field} must be at most {max}',\n minExclusive: '{field} must be greater than {min}',\n maxExclusive: '{field} must be less than {max}',\n enumeration: '{field} must be one of the allowed values',\n whiteSpace: '{field} contains invalid whitespace (mode: {mode})',\n fractionDigits: '{field} may have at most {digits} decimal place(s)',\n totalDigits: '{field} may have at most {digits} significant digit(s)',\n },\n ...(_settings ?? {}),\n}));\n\nfunction submit(e?: Event) {\n handleSubmit(\n (_values) => {\n isSubmitted.value = true;\n editMode.value = false;\n },\n ({ errors: _errors }) => {\n isSubmitted.value = false;\n },\n )(e);\n};\n</script>\n\n<template>\n <form @submit.prevent=\"submit\">\n <div class=\"flex justify-end gap-2\">\n <button v-if=\"!editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\" @click=\"editMode = true\">\n Edit\n </button>\n <button v-if=\"editMode\" type=\"submit\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\">\n Submit\n </button>\n <button v-if=\"editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded\" data-testid=\"cancel\" @click=\"editMode = false\">\n Cancel\n </button>\n </div>\n <div v-if=\"Object.values(errors).length\" data-testid=\"errors\" class=\"col-12 text-red-600\">\n Errors:\n <ul>\n <li v-for=\"(error, key) in errors\" :key=\"key\">\n <span v-html=\"error\" />\n </li>\n </ul>\n </div>\n <DynamicForm\n :template=\"TestFormTemplate\"\n :metadata=\"metadataWithEdit\"\n :settings\n @update:model-value=\"manualValues = $event\"\n />\n <span v-if=\"isSubmitted\" data-testid=\"isSubmitted\" />\n <pre v-if=\"showDebugState\" class=\"bg-gray-100 p-4 rounded-lg text-sm overflow-auto\">\nIsDirty: {{ meta.dirty }}\nPending: {{ meta.pending }}\nTouched: {{ meta.touched }}\nValid: {{ meta.valid }}\nSubmitted: {{ isSubmitted }}\n\n// form values:\n{{ JSON.stringify(values, null, 2) }}\n </pre>\n </form>\n</template>\n","import type { GenericObject } from 'vee-validate';\nimport type { Metadata } from '@/examples/TestFormTemplate.vue';\n\nimport type { DynamicFormSettings } from '@/types/DynamicFormSettings';\nimport { defineComponent, h, markRaw } from 'vue';\nimport TestForm from '@/examples/TestForm.vue';\n\nexport const defaultTestCase = createTestCase([{\n name: 'text',\n type: 'text',\n fieldOptions: { label: 'Text Input' },\n path: 'with.custom.structure',\n restriction: { maxLength: 10 },\n}]);\n\nexport const arrayTestCase = createTestCase([{\n fieldOptions: { label: 'Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Optional field (max 3)' }, minOccurs: 0, maxOccurs: 3 },\n { fieldOptions: { label: 'Required field (max 3)' }, maxOccurs: 3 },\n { fieldOptions: { label: '2 Fields required' }, minOccurs: 2, maxOccurs: 4 },\n { fieldOptions: { label: 'Section (2 sections required)' }, type: 'heading', minOccurs: 2, maxOccurs: 4, fullWidth: true, children: [\n { fieldOptions: { label: 'Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' }, type: 'select', options: [\n { key: 'option1', value: 'Option 1' },\n { key: 'option2', value: 'Option 2' },\n { key: 'option3', value: 'Option 3' },\n ] },\n { fieldOptions: { label: 'Nested field 3' }, type: 'checkbox' },\n ] },\n ],\n}]);\n\nexport const groupTestCase = createTestCase([{\n fieldOptions: { label: 'Grouped Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, description: `The group is optional, therefore the children will only be required once 1 value is filled in.\n \nYou can test it by filling in one of the fields.`, children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n ],\n}, {\n fieldOptions: { label: 'Grouped Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n ],\n}]);\n\nexport const choiceTestCase = createTestCase([\n {\n fieldOptions: { label: 'Choice Fields (minOccurs 1, maxOccurs 1)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Simple Choice Field' }, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' } },\n { fieldOptions: { label: 'Nested Field 2' } },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Grouped Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Nested Field 2' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Array Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, maxOccurs: 3 },\n { fieldOptions: { label: 'Nested Field 2' }, maxOccurs: 3 },\n ] },\n ],\n },\n]);\n\nexport const childFieldsTestCase = createTestCase([\n {\n fieldOptions: { label: 'Personal Info' },\n type: 'heading',\n name: 'person',\n description: 'Only showing the fields that have a value. Click edit to change.',\n fullWidth: true,\n children: [\n { name: 'firstName', fieldOptions: { label: 'First Name' } },\n { name: 'lastName', fieldOptions: { label: 'Last Name' } },\n { name: 'email', fieldOptions: { label: 'Email' } },\n ],\n },\n {\n fieldOptions: { label: 'Address' },\n type: 'heading',\n name: 'address',\n fullWidth: true,\n children: [\n { name: 'street', fieldOptions: { label: 'Street' }, minOccurs: 0 },\n { name: 'city', fieldOptions: { label: 'City' }, minOccurs: 0 },\n { name: 'country', fieldOptions: { label: 'Country' }, minOccurs: 0 },\n ],\n },\n], undefined, {\n initialEdit: false,\n hideFieldsWithoutValue: true,\n initialValues: {\n person: {\n firstName: 'Jack',\n lastName: 'Smit',\n },\n },\n});\n\nexport const individualTestCase = createTestCase(\n [{\n name: 'items',\n type: 'text',\n fieldOptions: { label: 'Items' },\n maxOccurs: 3,\n attributes: [{ name: 'lang', type: 'text', minOccurs: 0 }],\n }],\n {\n // validateOnValueUpdate: false,\n // validateOnValueUpdateAfterSubmit: false,\n // validateWhenInError: true,\n // validateOnBlur: true,\n },\n);\n\nexport function createTestCase(\n metadata: Metadata[],\n settings?: DynamicFormSettings,\n testCaseConfig: {\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n } = {},\n) {\n return markRaw(defineComponent({\n render: () => h(TestForm, { ...testCaseConfig, metadata, settings, showDebugState: true }),\n }));\n}\n"],"names":["mapEachMetadataItem","metadata","callbackFunc","x","_createElementBlock","color","$emit","icon","_openBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","defineMetadata","_createBlock","DynamicFormTemplate","_unref","fieldMetadata","errorMessage","label","disabled","canAddItems","addItem","canRemoveItems","removeItem","slotProps","_normalizeClass","_createTextVNode","_toDisplayString","IconButton","_hoisted_3","_renderSlot","_ctx","_withCtx","required","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_createVNode","_hoisted_15","_hoisted_16","_Fragment","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","value","handleBlur","handleChange","optionKey","optionValue","_hoisted_26","$event","_hoisted_28","_vModelSelect","_vModelCheckbox","_vModelText","values","handleSubmit","errors","meta","useDynamicForm","__props","manualValues","ref","editMode","isSubmitted","metadataWithEdit","computed","item","thisField","fieldValue","checkTreeHasValue","_fieldValue","childFields","c","settings","submit","e","_values","_errors","_renderList","error","key","DynamicForm","TestFormTemplate","showDebugState","defaultTestCase","createTestCase","arrayTestCase","groupTestCase","choiceTestCase","childFieldsTestCase","individualTestCase","testCaseConfig","markRaw","defineComponent","h","TestForm"],"mappings":"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"}
@@ -4,12 +4,14 @@ import type { InternalFieldMetadata } from '../types/InternalFieldMetadata';
4
4
  export interface Emit {
5
5
  (e: 'update:modelValue', value: unknown): void;
6
6
  (e: 'blur', event?: Event | undefined, shouldValidate?: boolean | undefined): void;
7
+ (e: 'update:computedField', field: InternalFieldMetadata<FieldMetadata>): void;
7
8
  }
8
9
  declare const _default: <InternalMetadata extends InternalFieldMetadata<FieldMetadata>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
9
10
  props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
10
11
  readonly "onUpdate:modelValue"?: ((value: unknown) => any) | undefined;
12
+ readonly "onUpdate:computedField"?: ((field: InternalFieldMetadata<FieldMetadata>) => any) | undefined;
11
13
  readonly onBlur?: ((event?: Event | undefined, shouldValidate?: boolean | undefined) => any) | undefined;
12
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue" | "onBlur"> & DynamicFormItemProps<InternalMetadata> & Partial<{}>> & import("vue").PublicProps;
14
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue" | "onUpdate:computedField" | "onBlur"> & DynamicFormItemProps<InternalMetadata> & Partial<{}>> & import("vue").PublicProps;
13
15
  expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
14
16
  attrs: any;
15
17
  slots: {};
@@ -3,11 +3,13 @@ import type { FieldMetadata } from '../types/FieldMetadata';
3
3
  import type { InternalFieldMetadata } from '../types/InternalFieldMetadata';
4
4
  export interface Emit {
5
5
  (e: 'update:modelValue', value: unknown): void;
6
+ (e: 'update:computedField', field: InternalFieldMetadata<FieldMetadata>): void;
6
7
  }
7
8
  declare const _default: <InternalMetadata extends InternalFieldMetadata<FieldMetadata>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
8
9
  props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
9
10
  readonly "onUpdate:modelValue"?: ((value: unknown) => any) | undefined;
10
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue"> & DynamicFormItemProps<InternalMetadata> & Partial<{}>> & import("vue").PublicProps;
11
+ readonly "onUpdate:computedField"?: ((field: InternalFieldMetadata<FieldMetadata>) => any) | undefined;
12
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue" | "onUpdate:computedField"> & DynamicFormItemProps<InternalMetadata> & Partial<{}>> & import("vue").PublicProps;
11
13
  expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
12
14
  attrs: any;
13
15
  slots: {};
@@ -3,11 +3,13 @@ import type { FieldMetadata } from '../types/FieldMetadata';
3
3
  import type { InternalFieldMetadata } from '../types/InternalFieldMetadata';
4
4
  export interface Emit {
5
5
  (e: 'update:modelValue', value: unknown): void;
6
+ (e: 'update:computedField', field: InternalFieldMetadata<FieldMetadata>): void;
6
7
  }
7
8
  declare const _default: <InternalMetadata extends InternalFieldMetadata<FieldMetadata>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
8
9
  props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
9
10
  readonly "onUpdate:modelValue"?: ((value: unknown) => any) | undefined;
10
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue"> & DynamicFormItemProps<InternalMetadata> & Partial<{}>> & import("vue").PublicProps;
11
+ readonly "onUpdate:computedField"?: ((field: InternalFieldMetadata<FieldMetadata>) => any) | undefined;
12
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue" | "onUpdate:computedField"> & DynamicFormItemProps<InternalMetadata> & Partial<{}>> & import("vue").PublicProps;
11
13
  expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
12
14
  attrs: any;
13
15
  slots: {};
@@ -1,6 +1,6 @@
1
1
  import type { FieldContext as _FieldContext } from 'vee-validate';
2
2
  import type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue';
3
- import type { FieldMetadata } from '../types/FieldMetadata';
3
+ import type { ReadOnlyFieldType } from '../types/FieldMetadata';
4
4
  import type { MetadataConfiguration } from '../types/MetadataConfiguration';
5
5
  export interface FieldContext<TValue = unknown> extends _FieldContext<TValue> {
6
6
  /**
@@ -16,65 +16,56 @@ export interface DynamicFormConfigurationProps<TMetadataConfiguration extends Me
16
16
  */
17
17
  metadataConfiguration: TMetadataConfiguration;
18
18
  }
19
- export interface LimitedFieldContext {
19
+ export interface LimitedFieldContext<TValue = unknown> {
20
+ value: ComputedRef<TValue>;
20
21
  errors: Ref<string[]>;
21
22
  errorMessage: Ref<string | undefined>;
22
23
  label?: MaybeRefOrGetter<string | undefined>;
23
24
  }
24
25
  /**
25
- * We define the attributes here instead of the props. This way the user don't see them
26
- * when using the DynamicFormConfiguration component.
27
- * The attributes will be passed internally by the other components of the library.
26
+ * Props passed to the template component by the library internals.
27
+ * Defined as an interface (rather than actual props) so they don't appear in the
28
+ * public prop signature of the user-facing DynamicFormTemplate component.
28
29
  */
29
30
  export interface Attributes<TMetadataConfiguration extends MetadataConfiguration> {
30
- type: TMetadataConfiguration['fieldTypes'][number] | 'default' | 'array' | 'choice';
31
- /**
32
- * The metadata that you configured for this field
33
- */
34
- fieldMetadata: FieldMetadata<TMetadataConfiguration['fieldTypes'][number], TMetadataConfiguration['extendedProperties']>;
35
- /**
36
- * Indicates if a field is required.
37
- */
31
+ type: TMetadataConfiguration['fieldTypes'][number] | 'default' | 'default-array' | 'default-array-item' | 'default-choice';
32
+ /** The metadata you configured for this field. */
33
+ fieldMetadata: ReadOnlyFieldType<TMetadataConfiguration['fieldTypes'][number], TMetadataConfiguration['extendedProperties']>;
34
+ /** Whether the field is required. */
38
35
  required: boolean;
39
- /**
40
- * Indicates whether a field is disabled
41
- */
36
+ /** Whether the field is disabled (maxOccurs = 0). */
42
37
  disabled: boolean;
43
- /**
44
- * If the field is part of an arrayField, this is its index in the array
45
- */
38
+ /** The position of this item within its parent, that can be its position in the children or choice collection or its index in an array field. */
46
39
  index: number;
47
40
  /**
48
- * If the field is part of an arrayField, this boolean lets you know whether
49
- * new items can be added. For example: when the maxOccurs is 2 and there are already
50
- * 2 items, this will be false.
41
+ * Whether a new array item can be added.
42
+ * False when the current count has already reached maxOccurs.
51
43
  */
52
44
  canAddItems: boolean;
53
45
  /**
54
- * If the field is part of an arrayField, this boolean lets you konw whether
55
- * an item can be removed. For example: when the minOccurs is 2 and there are already
56
- * 2 items, this will be false.
46
+ * Whether an array item can be removed.
47
+ * False when the current count has already reached minOccurs.
57
48
  */
58
49
  canRemoveItems: boolean;
59
- /**
60
- * if the field is part of an arrayField, this method will add another item.
61
- */
50
+ /** Adds a new item to the parent array field. */
62
51
  addItem: () => void;
52
+ /** Removes this item from the parent array field. */
53
+ removeItem: () => void;
63
54
  /**
64
- * if the field is part of an arrayField, this method will remove an item.
55
+ * The user defined properties that are passed between templates by adding attributes on the <slot /> elements.
56
+ * With these properties you can set values that can be read by components "living" further down the tree.
65
57
  */
66
- removeItem: () => void;
58
+ slotProps: TMetadataConfiguration['slotProperties'];
67
59
  }
68
60
  export interface ItemAttributes<TMetadataConfiguration extends MetadataConfiguration, FieldType extends string = string> extends Attributes<TMetadataConfiguration> {
69
61
  /**
70
- * The extended Vee-Validate context, coming from the useField.
71
- * A computed hasValue is added, indicating whether the current field or any of its children
72
- * has a value.
62
+ * The extended vee-validate field context from useField.
63
+ * Includes a `hasValue` computed that is true when this field or any descendant has a value.
73
64
  */
74
65
  fieldContext: FieldContext<FieldType extends keyof TMetadataConfiguration['valueTypes'] ? TMetadataConfiguration['valueTypes'][FieldType] : unknown>;
75
66
  }
76
67
  export interface ArrayChoiceAttributes<TMetadataConfiguration extends MetadataConfiguration> extends Attributes<TMetadataConfiguration> {
77
- fieldContext: LimitedFieldContext;
68
+ fieldContext: LimitedFieldContext<unknown[]>;
78
69
  }
79
70
  declare const _default: <TMetadataConfiguration extends MetadataConfiguration>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
80
71
  props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, never> & DynamicFormConfigurationProps<TMetadataConfiguration> & Partial<{}>> & import("vue").PublicProps;
@@ -85,10 +76,12 @@ declare const _default: <TMetadataConfiguration extends MetadataConfiguration>(_
85
76
  } & {
86
77
  'default-input': (props: ItemAttributes<TMetadataConfiguration, string>) => any;
87
78
  } & {
88
- array: (props: ArrayChoiceAttributes<TMetadataConfiguration>) => any;
79
+ 'default-array': (props: ArrayChoiceAttributes<TMetadataConfiguration>) => any;
80
+ } & {
81
+ 'default-array-item': (props: ItemAttributes<TMetadataConfiguration, string>) => any;
89
82
  } & {
90
- choice: (props: ArrayChoiceAttributes<TMetadataConfiguration>) => any;
91
- } & { [K in TMetadataConfiguration["fieldTypes"][number]]: (props: ItemAttributes<TMetadataConfiguration, K>) => any; } & { [K_1 in `${TMetadataConfiguration["fieldTypes"][number]}-input`]: (props: ItemAttributes<TMetadataConfiguration, K_1 extends `${infer FieldType}-input` ? FieldType : never>) => any; };
83
+ 'default-choice': (props: ArrayChoiceAttributes<TMetadataConfiguration>) => any;
84
+ } & { [K in TMetadataConfiguration["fieldTypes"][number]]: (props: ItemAttributes<TMetadataConfiguration, K>) => any; } & { [K_1 in `${TMetadataConfiguration["fieldTypes"][number]}-input`]: (props: ItemAttributes<TMetadataConfiguration, K_1 extends `${infer FieldType}-input` ? FieldType : never>) => any; } & { [K_2 in `${TMetadataConfiguration["fieldTypes"][number]}-array`]: (props: ArrayChoiceAttributes<TMetadataConfiguration>) => any; } & { [K_3 in `${TMetadataConfiguration["fieldTypes"][number]}-array-item`]: (props: ItemAttributes<TMetadataConfiguration, K_3 extends `${infer FieldType}-input` ? FieldType : never>) => any; } & { [K_4 in `${TMetadataConfiguration["fieldTypes"][number]}-choice`]: (props: ArrayChoiceAttributes<TMetadataConfiguration>) => any; };
92
85
  emit: {};
93
86
  }>) => import("vue").VNode & {
94
87
  __ctx?: Awaited<typeof __VLS_setup>;
@@ -0,0 +1 @@
1
+ import '../../core/validation';
@@ -25,9 +25,10 @@
25
25
  * }
26
26
  * >();
27
27
  */
28
- export declare function defineMetadata<const FieldValueTypes extends Record<string, any>, ExtendedFieldProperties extends object = object>(): {
29
- fieldTypes: readonly ("default" | Exclude<keyof FieldValueTypes, "children" | "choice" | "array" | "input">)[];
28
+ export declare function defineMetadata<const FieldValueTypes extends Record<string, any>, ExtendedFieldProperties extends object = object, SlotProperties extends object = object>(): {
29
+ fieldTypes: readonly ("default" | Exclude<keyof FieldValueTypes, "children" | "choice" | "input" | "array">)[];
30
30
  extendedProperties: ExtendedFieldProperties;
31
+ slotProperties: SlotProperties;
31
32
  valueTypes: FieldValueTypes & {
32
33
  default: string;
33
34
  };
@@ -1,6 +1,7 @@
1
1
  import type { PartialDeep } from 'type-fest';
2
2
  import type { FlattenAndSetPathsType, FormContext, GenericObject, Path, PathValue } from 'vee-validate';
3
3
  import type { MaybeRef, MaybeRefOrGetter, Ref } from 'vue';
4
+ import { useValidatePartialForm } from '../core/useValidatePartialForm';
4
5
  export interface FormOptions<TValues extends GenericObject> {
5
6
  initialValues?: PartialDeep<TValues> | undefined | null;
6
7
  initialErrors?: FlattenAndSetPathsType<TValues, string | undefined>;
@@ -11,4 +12,5 @@ export interface FormOptions<TValues extends GenericObject> {
11
12
  }
12
13
  export declare function useDynamicForm<TValues extends GenericObject = GenericObject>(opts?: FormOptions<TValues>): FormContext<TValues> & {
13
14
  useFieldValue: <TPath extends Path<TValues>>(path?: MaybeRefOrGetter<TPath>) => Ref<PathValue<TValues, TPath>>;
15
+ validateSection: ReturnType<typeof useValidatePartialForm>['validateSection'];
14
16
  };
@@ -0,0 +1,4 @@
1
+ import type { FormValidationResult, GenericObject } from 'vee-validate';
2
+ export declare function useValidatePartialForm(): {
3
+ validateSection: (sectionPath: string) => Promise<FormValidationResult<GenericObject>>;
4
+ };
@@ -1,9 +1,13 @@
1
+ import type { GenericObject } from 'vee-validate';
1
2
  import type { Metadata } from './TestFormTemplate.vue';
2
3
  import type { DynamicFormSettings } from '../types/DynamicFormSettings';
3
4
  export interface Props {
4
5
  metadata: Metadata[];
5
6
  settings?: DynamicFormSettings;
6
7
  showDebugState?: boolean;
8
+ initialEdit?: boolean;
9
+ hideFieldsWithoutValue?: boolean;
10
+ initialValues?: GenericObject;
7
11
  }
8
12
  declare const _default: import("vue").DefineComponent<Props, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
13
  export default _default;
@@ -1,20 +1,7 @@
1
1
  import type { GetMetadataType } from '../types/GetMetadataType';
2
2
  export type Metadata = GetMetadataType<typeof metadata>;
3
- export interface Props {
4
- /**
5
- * Free to decide what attributes you want to pass internally between your templates.
6
- * You can add any attribute to a <slot /> and then it will be accessible in props.slotProps.
7
- */
8
- slotProps?: {
9
- hideLabel?: boolean;
10
- /** Example on how to keep track of the levels */
11
- level?: number;
12
- /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */
13
- belowChoiceField?: boolean;
14
- };
15
- }
16
3
  declare const metadata: {
17
- fieldTypes: readonly ("default" | "checkbox" | "select" | "text" | "textBoundByVModel" | "selectBoundByVModel" | "checkboxBoundByVModel" | "heading")[];
4
+ fieldTypes: readonly ("default" | "checkbox" | "select" | "text" | "textBoundByVModel" | "selectBoundByVModel" | "checkboxBoundByVModel" | "heading" | "group")[];
18
5
  extendedProperties: {
19
6
  description?: string;
20
7
  options?: {
@@ -23,6 +10,15 @@ declare const metadata: {
23
10
  }[];
24
11
  fullWidth?: boolean;
25
12
  disabled?: boolean;
13
+ hidden?: boolean;
14
+ };
15
+ slotProperties: {
16
+ hideLabel?: boolean;
17
+ /** Example on how to keep track of the levels */
18
+ level?: number;
19
+ /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */
20
+ belowChoiceField?: boolean;
21
+ hidden?: boolean;
26
22
  };
27
23
  valueTypes: {
28
24
  text: string;
@@ -32,40 +28,45 @@ declare const metadata: {
32
28
  checkbox: boolean;
33
29
  checkboxBoundByVModel: boolean;
34
30
  heading: never;
31
+ group: never;
35
32
  } & {
36
33
  default: string;
37
34
  };
38
35
  };
39
36
  declare var __VLS_21: {
40
37
  level: number;
41
- }, __VLS_24: {
38
+ }, __VLS_24: {}, __VLS_27: {
42
39
  level: number;
43
40
  belowChoiceField: boolean;
44
- }, __VLS_34: {
45
- level: number;
46
- }, __VLS_36: {}, __VLS_45: {
41
+ }, __VLS_37: {
47
42
  hideLabel: boolean;
48
- }, __VLS_62: {
43
+ }, __VLS_40: {}, __VLS_49: {}, __VLS_59: {
44
+ level: number;
45
+ }, __VLS_61: {}, __VLS_78: {
49
46
  level: number;
50
- }, __VLS_64: {}, __VLS_73: {};
47
+ }, __VLS_80: {};
51
48
  type __VLS_Slots = {} & {
52
49
  default?: (props: typeof __VLS_21) => any;
53
50
  } & {
54
51
  default?: (props: typeof __VLS_24) => any;
55
52
  } & {
56
- default?: (props: typeof __VLS_34) => any;
53
+ default?: (props: typeof __VLS_27) => any;
54
+ } & {
55
+ default?: (props: typeof __VLS_37) => any;
56
+ } & {
57
+ default?: (props: typeof __VLS_40) => any;
57
58
  } & {
58
- default?: (props: typeof __VLS_36) => any;
59
+ attributes?: (props: typeof __VLS_49) => any;
59
60
  } & {
60
- default?: (props: typeof __VLS_45) => any;
61
+ default?: (props: typeof __VLS_59) => any;
61
62
  } & {
62
- default?: (props: typeof __VLS_62) => any;
63
+ default?: (props: typeof __VLS_61) => any;
63
64
  } & {
64
- default?: (props: typeof __VLS_64) => any;
65
+ default?: (props: typeof __VLS_78) => any;
65
66
  } & {
66
- attributes?: (props: typeof __VLS_73) => any;
67
+ attributes?: (props: typeof __VLS_80) => any;
67
68
  };
68
- declare const __VLS_component: import("vue").DefineComponent<Props, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
69
+ declare const __VLS_component: import("vue").DefineComponent<{}, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
69
70
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
70
71
  export default _default;
71
72
  type __VLS_WithSlots<T, S> = T & {
@@ -1,8 +1,14 @@
1
- import type { Metadata } from './TestFormTemplate.vue';
2
- import type { DynamicFormSettings } from '../types/DynamicFormSettings';
1
+ import type { GenericObject } from 'vee-validate';
2
+ import type { Metadata } from '../../examples/TestFormTemplate.vue';
3
+ import type { DynamicFormSettings } from '../../types/DynamicFormSettings';
3
4
  export declare const defaultTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
4
5
  export declare const arrayTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
5
6
  export declare const groupTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
6
7
  export declare const choiceTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
8
+ export declare const childFieldsTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
7
9
  export declare const individualTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
8
- export declare function createTestCase(metadata: Metadata[], settings?: DynamicFormSettings): import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
10
+ export declare function createTestCase(metadata: Metadata[], settings?: DynamicFormSettings, testCaseConfig?: {
11
+ initialEdit?: boolean;
12
+ hideFieldsWithoutValue?: boolean;
13
+ initialValues?: GenericObject;
14
+ }): import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
@@ -1,3 +1,3 @@
1
- export * from './TestFormTemplate.testcases';
1
+ export * from './__tests__/TestFormTemplate.testcases';
2
2
  export { default as TestFormTemplate } from './TestFormTemplate.vue';
3
3
  export { type Metadata } from './TestFormTemplate.vue';
@@ -5,7 +5,7 @@ export { default as DynamicFormItemChoice } from './components/DynamicFormItemCh
5
5
  export { default as DynamicFormTemplate } from './components/DynamicFormTemplate.vue';
6
6
  export * from './core/defineMetadata';
7
7
  export * from './core/useDynamicForm';
8
- export * from './core/useFieldArrayExtended';
8
+ export * from './core/useValidatePartialForm';
9
9
  export * from './core/validation';
10
10
  export * from './types/DynamicFormItemProps';
11
11
  export * from './types/DynamicFormSettings';