@nhtio/lucid-resourceful-vue-components 0.1.0-master-e14740ea → 1.20251107.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 (137) hide show
  1. package/{VBtn-DhfYEt9V.mjs → VBtn-C_58hP1L.mjs} +7 -7
  2. package/{VBtn-DhfYEt9V.mjs.map → VBtn-C_58hP1L.mjs.map} +1 -1
  3. package/{VDatePicker-D0OTAyvJ.mjs → VDatePicker-CKxKmuCC.mjs} +165 -165
  4. package/{VDatePicker-D0OTAyvJ.mjs.map → VDatePicker-CKxKmuCC.mjs.map} +1 -1
  5. package/{VEmptyState-BFrXSTJ-.mjs → VEmptyState-CjqRy_Xt.mjs} +40 -40
  6. package/{VEmptyState-BFrXSTJ-.mjs.map → VEmptyState-CjqRy_Xt.mjs.map} +1 -1
  7. package/{VHover-DLvOmsjv.mjs → VHover-D-sydp3P.mjs} +3 -3
  8. package/{VHover-DLvOmsjv.mjs.map → VHover-D-sydp3P.mjs.map} +1 -1
  9. package/{VListItem-LNaoM8S4.mjs → VListItem-DNNkp2dc.mjs} +55 -55
  10. package/{VListItem-LNaoM8S4.mjs.map → VListItem-DNNkp2dc.mjs.map} +1 -1
  11. package/{VMenu-9rTbTKtH.mjs → VMenu-oGwvgLV1.mjs} +28 -28
  12. package/{VMenu-9rTbTKtH.mjs.map → VMenu-oGwvgLV1.mjs.map} +1 -1
  13. package/{VPicker-BGuRD0KW.mjs → VPicker-EfRj-X6U.mjs} +4 -4
  14. package/{VPicker-BGuRD0KW.mjs.map → VPicker-EfRj-X6U.mjs.map} +1 -1
  15. package/{VRadioGroup-Dx_wEqzl.mjs → VRadioGroup-CDf6CGwX.mjs} +21 -21
  16. package/{VRadioGroup-Dx_wEqzl.mjs.map → VRadioGroup-CDf6CGwX.mjs.map} +1 -1
  17. package/{VRow-DaLdbIGw.mjs → VRow-Da2fdUPu.mjs} +17 -17
  18. package/{VRow-DaLdbIGw.mjs.map → VRow-Da2fdUPu.mjs.map} +1 -1
  19. package/{VSheet-DnIfs-1c.mjs → VSheet-DdygPJlo.mjs} +13 -13
  20. package/{VSheet-DnIfs-1c.mjs.map → VSheet-DdygPJlo.mjs.map} +1 -1
  21. package/{actions-8bWGsB-p.mjs → actions-5gxlWcWt.mjs} +14 -14
  22. package/{actions-8bWGsB-p.mjs.map → actions-5gxlWcWt.mjs.map} +1 -1
  23. package/{alert-IW1AIWZw.mjs → alert-C6Dxm9jn.mjs} +13 -13
  24. package/{alert-IW1AIWZw.mjs.map → alert-C6Dxm9jn.mjs.map} +1 -1
  25. package/{bigint-Jmfa2L4S.mjs → bigint-CqXe_geE.mjs} +6 -6
  26. package/{bigint-Jmfa2L4S.mjs.map → bigint-CqXe_geE.mjs.map} +1 -1
  27. package/{boolean-BEY7eBxf.mjs → boolean-BaevWx3k.mjs} +39 -39
  28. package/{boolean-BEY7eBxf.mjs.map → boolean-BaevWx3k.mjs.map} +1 -1
  29. package/{clipboard-BoKd7mFG.mjs → clipboard-CGd9vMCV.mjs} +51 -51
  30. package/{clipboard-BoKd7mFG.mjs.map → clipboard-CGd9vMCV.mjs.map} +1 -1
  31. package/{colorUtils-DmtKYNgW.mjs → colorUtils-BdpqbLZS.mjs} +3 -3
  32. package/{colorUtils-DmtKYNgW.mjs.map → colorUtils-BdpqbLZS.mjs.map} +1 -1
  33. package/{common-BeDAn4wu.mjs → common-DrsZRUoj.mjs} +8881 -8880
  34. package/common-DrsZRUoj.mjs.map +1 -0
  35. package/common.css +1 -1
  36. package/{component-CjPpW_A2.mjs → component-DhEJuSE6.mjs} +2 -2
  37. package/{component-CjPpW_A2.mjs.map → component-DhEJuSE6.mjs.map} +1 -1
  38. package/components/autorefresh_controller.mjs +1 -1
  39. package/components/control_button.mjs +1 -1
  40. package/components/control_button_bar.mjs +2 -2
  41. package/components/control_menu.mjs +1 -1
  42. package/components/custom_field.mjs +1 -1
  43. package/components/exporter.mjs +1 -1
  44. package/components/fields/bigint.mjs +1 -1
  45. package/components/fields/boolean.mjs +1 -1
  46. package/components/fields/date.mjs +1 -1
  47. package/components/fields/date_time.mjs +1 -1
  48. package/components/fields/enum.mjs +1 -1
  49. package/components/fields/integer.mjs +1 -1
  50. package/components/fields/number.mjs +1 -1
  51. package/components/fields/string.mjs +1 -1
  52. package/components/fields/unsigned_integer.mjs +1 -1
  53. package/components/fields.mjs +9 -9
  54. package/components/form_with_validation.mjs +1 -1
  55. package/components/resourceful_alerter.mjs +1 -1
  56. package/components/resourceful_index.mjs +1 -1
  57. package/components/resourceful_record.mjs +2 -2
  58. package/components/resourceful_record_default_form.mjs +1 -1
  59. package/components/resourceful_record_form.mjs +1 -1
  60. package/components/sortable.mjs +1 -1
  61. package/components/svg_icon.mjs +1 -1
  62. package/components/timezone_picker.mjs +1 -1
  63. package/components.mjs +23 -23
  64. package/composables.mjs +8 -8
  65. package/{console-CRXioSFP.mjs → console-Dgoi3FwV.mjs} +2 -2
  66. package/{console-CRXioSFP.mjs.map → console-Dgoi3FwV.mjs.map} +1 -1
  67. package/{custom-Y1WJVKP9.mjs → custom-CXFDPB_N.mjs} +17 -17
  68. package/{custom-Y1WJVKP9.mjs.map → custom-CXFDPB_N.mjs.map} +1 -1
  69. package/{date-BxEeCNWD.mjs → date-BXNqToRH.mjs} +21 -21
  70. package/{date-BxEeCNWD.mjs.map → date-BXNqToRH.mjs.map} +1 -1
  71. package/{date_time-6kpv7eDF.mjs → date_time-DuRO8DS4.mjs} +299 -299
  72. package/{date_time-6kpv7eDF.mjs.map → date_time-DuRO8DS4.mjs.map} +1 -1
  73. package/{display-CO0pTIEs.mjs → display-BL-pquAI.mjs} +41 -41
  74. package/{display-CO0pTIEs.mjs.map → display-BL-pquAI.mjs.map} +1 -1
  75. package/{display-kAyhIPBH.mjs → display-DCHGPqrW.mjs} +7 -7
  76. package/{display-kAyhIPBH.mjs.map → display-DCHGPqrW.mjs.map} +1 -1
  77. package/{display-DvzWa1QO.mjs → display-TF26EjNQ.mjs} +40 -40
  78. package/{display-DvzWa1QO.mjs.map → display-TF26EjNQ.mjs.map} +1 -1
  79. package/{elevation-CMzO50xm.mjs → elevation-j7bb-vGU.mjs} +81 -81
  80. package/{elevation-CMzO50xm.mjs.map → elevation-j7bb-vGU.mjs.map} +1 -1
  81. package/{enum-noYU2Cqh.mjs → enum-CRgh6TfR.mjs} +22 -22
  82. package/{enum-noYU2Cqh.mjs.map → enum-CRgh6TfR.mjs.map} +1 -1
  83. package/factories.mjs +1 -1
  84. package/{field_composer-DpJx0Oz1.mjs → field_composer-CjKCvP50.mjs} +7 -7
  85. package/{field_composer-DpJx0Oz1.mjs.map → field_composer-CjKCvP50.mjs.map} +1 -1
  86. package/{form-CDLcDPyU.mjs → form-CFjPqvRf.mjs} +45 -45
  87. package/{form-CDLcDPyU.mjs.map → form-CFjPqvRf.mjs.map} +1 -1
  88. package/{guards-B99p3BPj.mjs → guards-Cby4QwzY.mjs} +2 -2
  89. package/{guards-B99p3BPj.mjs.map → guards-Cby4QwzY.mjs.map} +1 -1
  90. package/guards.mjs +4 -4
  91. package/helpers.mjs +6 -6
  92. package/{index-bXmNb9jX.mjs → index-B8OnsqN1.mjs} +10 -10
  93. package/{index-bXmNb9jX.mjs.map → index-B8OnsqN1.mjs.map} +1 -1
  94. package/{index-BaWthszI.mjs → index-C-PCfO1S.mjs} +2 -2
  95. package/{index-BaWthszI.mjs.map → index-C-PCfO1S.mjs.map} +1 -1
  96. package/{index-C9UuBVyI.mjs → index-CZg-HOo9.mjs} +12 -12
  97. package/{index-C9UuBVyI.mjs.map → index-CZg-HOo9.mjs.map} +1 -1
  98. package/{index-B2rKM3mR.mjs → index-ChVCZ8iE.mjs} +21 -21
  99. package/{index-B2rKM3mR.mjs.map → index-ChVCZ8iE.mjs.map} +1 -1
  100. package/{index-CzI9mHIx.mjs → index-Cou5qTHe.mjs} +13 -13
  101. package/{index-CzI9mHIx.mjs.map → index-Cou5qTHe.mjs.map} +1 -1
  102. package/{index-Bi050X9r.mjs → index-DM8E6faO.mjs} +8 -8
  103. package/{index-Bi050X9r.mjs.map → index-DM8E6faO.mjs.map} +1 -1
  104. package/{index-CIvylvfa.mjs → index-DSLt7-cJ.mjs} +43 -43
  105. package/{index-CIvylvfa.mjs.map → index-DSLt7-cJ.mjs.map} +1 -1
  106. package/{index-slHxe6b-.mjs → index-VpcXNOpn.mjs} +2 -2
  107. package/{index-slHxe6b-.mjs.map → index-VpcXNOpn.mjs.map} +1 -1
  108. package/{index-BUpccfIz.mjs → index-fiZltUBs.mjs} +3 -3
  109. package/{index-BUpccfIz.mjs.map → index-fiZltUBs.mjs.map} +1 -1
  110. package/index.mjs +31 -31
  111. package/{integer-BIJ4_I8y.mjs → integer-Dy0xpFif.mjs} +5 -5
  112. package/{integer-BIJ4_I8y.mjs.map → integer-Dy0xpFif.mjs.map} +1 -1
  113. package/{mdi-CqMJqgQi.mjs → mdi-BQSh-ess.mjs} +54 -54
  114. package/{mdi-CqMJqgQi.mjs.map → mdi-BQSh-ess.mjs.map} +1 -1
  115. package/{number-z_LAINPM.mjs → number-DWCew87L.mjs} +101 -101
  116. package/{number-z_LAINPM.mjs.map → number-DWCew87L.mjs.map} +1 -1
  117. package/package.json +38 -38
  118. package/{position-Ai5XksAO.mjs → position-B9VPkbhU.mjs} +2 -2
  119. package/{position-Ai5XksAO.mjs.map → position-B9VPkbhU.mjs.map} +1 -1
  120. package/{props-p4f5Pa5h.mjs → props-Cjpc9pre.mjs} +4 -4
  121. package/{props-p4f5Pa5h.mjs.map → props-Cjpc9pre.mjs.map} +1 -1
  122. package/{props-BYX22zcE.mjs → props-DQlQ6VDP.mjs} +6 -6
  123. package/{props-BYX22zcE.mjs.map → props-DQlQ6VDP.mjs.map} +1 -1
  124. package/{renderers-BKUvrrVm.mjs → renderers-hznWrh2D.mjs} +13 -13
  125. package/{renderers-BKUvrrVm.mjs.map → renderers-hznWrh2D.mjs.map} +1 -1
  126. package/{string-Dmr8SRMf.mjs → string-BTd_Gwx-.mjs} +136 -136
  127. package/{string-Dmr8SRMf.mjs.map → string-BTd_Gwx-.mjs.map} +1 -1
  128. package/{unsigned_integer-BliPiCXO.mjs → unsigned_integer-CfxxFKrO.mjs} +4 -4
  129. package/{unsigned_integer-BliPiCXO.mjs.map → unsigned_integer-CfxxFKrO.mjs.map} +1 -1
  130. package/useRender-CfNJA_8a.mjs +9 -0
  131. package/{useRender-BD1xw5zG.mjs.map → useRender-CfNJA_8a.mjs.map} +1 -1
  132. package/{utils-DqXWb-4f.mjs → utils-D3ZGaTyv.mjs} +48 -48
  133. package/{utils-DqXWb-4f.mjs.map → utils-D3ZGaTyv.mjs.map} +1 -1
  134. package/{validation-DS3tTSk5.mjs → validation-BobMyGeq.mjs} +4 -4
  135. package/{validation-DS3tTSk5.mjs.map → validation-BobMyGeq.mjs.map} +1 -1
  136. package/common-BeDAn4wu.mjs.map +0 -1
  137. package/useRender-BD1xw5zG.mjs +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"enum-noYU2Cqh.mjs","sources":["../src/private/fields/enum.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Enum Field\n|--------------------------------------------------------------------------\n|\n| A comprehensive field component for enum/enumeration values with dynamic choice\n| loading support and professional UX features. Automatically adapts between single\n| field editing, multiple selection management, and read-only display through the\n| unified field composer architecture.\n|\n| ## Supported Values:\n| - string: Text-based enum values (e.g., \"active\", \"pending\", \"completed\")\n| - number: Numeric enum values (e.g., 1, 2, 3 for status codes)\n| - bigint: Large integer enum values for high-precision scenarios\n|\n| ## Rendering Variants (renderAs):\n| - select: Default autocomplete dropdown with search and filtering\n| - radio: VRadioGroup for explicit choice with visual radio buttons\n|\n| ## Dynamic Choice Loading:\n| - Supports static choices via the `choices` prop\n| - Enables dynamic loading via `doRefreshChoices` callback prop\n| - Parent component controls loading logic, timing, and error handling\n| - Field triggers initial load on mount via watch with immediate: true\n| - Future support for manual refresh via exposed refresh() method\n|\n| ## Choice Management:\n| - Choices are expected as objects with `value` and `label` properties\n| - Value can be string, number, or bigint matching the field's data type\n| - Label provides human-readable display text for the enum value\n| - Stringifier automatically maps values to labels for display\n| - Fallback to String(value) when choice not found in list\n|\n| ## Operational Modes:\n|\n| ### Single Mode (multiple: false, renderMode: 'edit')\n| Direct enum control with chosen render variant (select or radio) for\n| selecting a single value from the available choices.\n|\n| ### Multiple Mode (multiple: true, renderMode: 'edit')\n| RMultipleField with sophisticated chip management showing labeled chips,\n| full dialog interface for enum array management with search and filtering.\n|\n| ### Read Mode (renderMode: 'read')\n| Clean text presentation with Oxford comma formatting for arrays, showing\n| localized labels for each enum value.\n|\n| ## Real-World Use Cases:\n| - Status fields (draft/published/archived)\n| - Priority levels (low/medium/high/critical)\n| - User roles (admin/editor/viewer)\n| - Category selection from predefined list\n| - Configuration options loaded from API\n| - Dynamic form fields based on external data\n|\n| ## Integration Pattern:\n| Parent components handle choice loading via HTTP, caching, and error handling\n| while the field focuses solely on rendering and value management. This clean\n| separation enables flexible data loading strategies without coupling the field\n| to specific HTTP implementations.\n|\n*/\n\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VRadio } from 'vuetify/components/VRadio'\nimport { useFieldComposer } from './field_composer'\nimport { VInputPublicProps } from '../filtration/common'\nimport { SvgIcon, svgPathToIconValue } from '../svg-icon'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { VRadioGroup } from 'vuetify/components/VRadioGroup'\nimport { VAutocomplete } from 'vuetify/components/VAutocomplete'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { omit, pick, throttle } from '@nhtio/vuetifiable/util/helpers'\nimport { makeVInputProps } from '@nhtio/vuetifiable/components/VInput/VInput'\nimport { makeVFieldProps } from '@nhtio/vuetifiable/components/VField/VField'\nimport { makeCommonResourcefulFieldProps, commonEmitsValidators } from './common'\nimport { makeVRadioGroupProps } from '@nhtio/vuetifiable/components/VRadioGroup/VRadioGroup'\nimport { h, defineComponent, toRefs, computed, ref, watch, shallowRef, triggerRef } from 'vue'\nimport { makeVAutocompleteProps } from '@nhtio/vuetifiable/components/VAutocomplete/VAutocomplete'\nimport {\n mdiClose,\n mdiMenuDown,\n mdiCircleSlice8,\n mdiCheckboxBlankCircleOutline,\n mdiRefresh,\n} from '@mdi/js'\nimport type { VInput } from 'vuetify/components/VInput'\nimport type { SingleFieldRenderer } from './field_composer'\nimport type { ExtractSlotDefinitions } from '../common/types'\nimport type { LooseRequired } from '@vue/shared/dist/shared.d.ts'\nimport type { CommonResourcefulFieldPublicProps, RFieldStringifier } from './common'\nimport type {\n PropType,\n ExtractPublicPropTypes,\n ToRefs,\n SlotsType,\n ComponentPublicInstance,\n} from 'vue'\n\ntype VInputSlots = ExtractSlotDefinitions<typeof VInput.slots>\ntype VAutocompletePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVAutocompleteProps>>\ntype VRadioGroupPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVRadioGroupProps>>\n\n/**\n * Supported enum field values representing any enumerable type.\n * Includes string for text-based enums (most common), number for numeric\n * status codes or identifiers, and bigint for high-precision scenarios\n * requiring large integer enum values.\n *\n * @example\n * ```typescript\n * // String-based status enum\n * type Status = \"draft\" | \"published\" | \"archived\"\n * const status: REnumFieldValue = \"published\"\n *\n * // Numeric priority enum\n * enum Priority { Low = 1, Medium = 2, High = 3, Critical = 4 }\n * const priority: REnumFieldValue = Priority.High // 3\n *\n * // BigInt identifier enum\n * const largeId: REnumFieldValue = 9007199254740991n\n * ```\n */\nexport type REnumFieldValue = string | number | bigint\n\n/**\n * Rendering variants for enum fields that determine the UI control type.\n * Each variant provides different user interaction patterns while maintaining\n * consistent enum value selection logic.\n *\n * - `select`: Default autocomplete dropdown with search, filtering, and keyboard navigation\n * - `radio`: VRadioGroup for explicit choice scenarios with visual radio button controls\n *\n * @example\n * ```typescript\n * // Status dropdown with search\n * <REnumField renderAs=\"select\" v-model=\"status\" :choices=\"statusChoices\" />\n *\n * // Priority radio buttons for explicit selection\n * <REnumField renderAs=\"radio\" v-model=\"priority\" :choices=\"priorityChoices\" />\n *\n * // Multiple selection (select works best)\n * <REnumField multiple v-model=\"categories\" :choices=\"categoryChoices\" />\n * ```\n */\nexport const REnumFieldRenderable = ['select', 'radio'] as const\n\n/**\n * Union type for enum field rendering variants. Used for the renderAs prop\n * to specify which UI control should be used for enum value interaction.\n */\nexport type REnumFieldRenderable = (typeof REnumFieldRenderable)[number]\n\nexport type REnumFieldLoadedChoice = {\n value: string | number | bigint\n title: string\n}\n\nconst isValidREnumFieldValue = (\n value: REnumFieldValue | REnumFieldValue[] | null | undefined\n): boolean => {\n if (\n 'undefined' === typeof value ||\n (!Array.isArray(value) &&\n (typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint'))\n )\n return true\n if (Array.isArray(value)) {\n return value.every(\n (v) => 'string' === typeof v || 'number' === typeof v || 'bigint' === typeof v\n )\n }\n return false\n}\n\nconst { makeProps: makeREnumFieldProps, emits: REnumFieldEmits } = propsAndEmitsFactory(\n {\n ...pick(makeVInputProps(), [\n 'focused',\n 'disabled',\n 'error',\n 'errorMessages',\n 'maxErrors',\n 'name',\n 'label',\n 'readonly',\n 'validateOn',\n 'theme',\n 'width',\n 'maxWidth',\n 'minWidth',\n 'density',\n 'class',\n 'style',\n 'id',\n 'baseColor',\n 'color',\n 'glow',\n 'iconColor',\n 'hideDetails',\n 'hint',\n 'persistentHint',\n 'messages',\n 'direction',\n ]),\n ...pick(\n makeVFieldProps({\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n }),\n ['variant', 'clearIcon', 'clearable']\n ),\n modelValue: {\n type: [String, Number, BigInt, Array] as PropType<\n REnumFieldValue | REnumFieldValue[] | null | undefined\n >,\n default: undefined,\n },\n renderAs: {\n type: String as PropType<REnumFieldRenderable>,\n default: 'select',\n },\n iconForSelectedRadio: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiCircleSlice8 }),\n },\n iconForUnselectedRadio: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiCheckboxBlankCircleOutline }),\n },\n selectMenuIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiMenuDown }),\n },\n ripple: {\n type: Boolean,\n default: false,\n },\n ...omit(makeCommonResourcefulFieldProps(), ['variant']),\n doRefreshChoices: {\n type: Function as PropType<(() => Promise<REnumFieldLoadedChoice[]>) | undefined>,\n default: undefined,\n },\n },\n {\n 'update:modelValue': (value: REnumFieldValue | REnumFieldValue[] | null | undefined) =>\n isValidREnumFieldValue(value),\n 'update:model-value': (value: REnumFieldValue | REnumFieldValue[] | null | undefined) =>\n isValidREnumFieldValue(value),\n ...commonEmitsValidators,\n },\n 'REnumField'\n)\n\n/**\n * Factory function that creates comprehensive props for the REnumField component.\n * Combines VInput props with enum-specific options for dynamic choice loading,\n * rendering variants, icon customization, and unified field architecture integration.\n *\n * @returns Props definition object for use with defineComponent\n *\n * @example\n * ```typescript\n * // Basic enum field props\n * const props = makeREnumFieldProps()\n *\n * // Access specific prop configurations\n * console.log(props.renderAs) // Rendering variant prop\n * console.log(props.doRefreshChoices) // Dynamic loading callback prop\n * console.log(props.multiple) // Multiple selection mode prop\n * ```\n */\nexport { makeREnumFieldProps }\n\n/**\n * Public props interface for the REnumField component. Includes all VInput\n * props plus enum field-specific options for dynamic choice loading,\n * rendering variants, icon customization, and unified field architecture features.\n *\n * @example\n * ```typescript\n * // Component props typing\n * interface MyComponentProps {\n * enumFieldProps: REnumFieldProps\n * }\n *\n * // Programmatic prop construction\n * const fieldProps: REnumFieldProps = {\n * renderAs: 'select',\n * choices: [\n * { value: 'draft', label: 'Draft' },\n * { value: 'published', label: 'Published' },\n * ],\n * doRefreshChoices: async () => {\n * // Load choices from API\n * },\n * multiple: false,\n * label: 'Status',\n * // ... other VInput props\n * }\n * ```\n */\nexport type REnumFieldProps = ExtractPublicPropTypes<ReturnType<typeof makeREnumFieldProps>>\n\n/**\n * Comprehensive enum field component with dynamic choice loading support and\n * multiple rendering variants. Automatically adapts between single field editing,\n * multiple selection management, and read-only display through the unified field\n * composer architecture.\n *\n * Supports configurable rendering as autocomplete dropdown or radio group, with\n * dynamic choice loading via callback prop for flexible data fetching strategies.\n * Parent components control loading logic while the field focuses on rendering.\n *\n * @example\n * ```vue\n * <!-- Static choices with select dropdown -->\n * <REnumField\n * v-model=\"status\"\n * renderAs=\"select\"\n * :choices=\"[\n * { value: 'draft', label: 'Draft' },\n * { value: 'published', label: 'Published' },\n * { value: 'archived', label: 'Archived' }\n * ]\"\n * label=\"Status\"\n * />\n *\n * <!-- Dynamic loading with radio buttons -->\n * <REnumField\n * v-model=\"category\"\n * renderAs=\"radio\"\n * :choices=\"categoryChoices\"\n * :doRefreshChoices=\"loadCategories\"\n * label=\"Category\"\n * />\n *\n * <!-- Multiple selection with search -->\n * <REnumField\n * v-model=\"tags\"\n * multiple\n * :choices=\"tagChoices\"\n * :doRefreshChoices=\"loadTags\"\n * label=\"Tags\"\n * />\n *\n * <!-- Clearable enum field -->\n * <REnumField\n * v-model=\"priority\"\n * :choices=\"priorityChoices\"\n * clearable\n * label=\"Priority (Optional)\"\n * />\n * ```\n */\nexport const REnumField = defineComponent({\n name: 'REnumField',\n props: makeREnumFieldProps(),\n emits: REnumFieldEmits,\n slots: Object as SlotsType<VInputSlots>,\n setup(props, { emit, slots }) {\n const {\n focused,\n disabled,\n error,\n errorMessages,\n maxErrors,\n name,\n label,\n readonly,\n validateOn,\n theme,\n width,\n maxWidth,\n minWidth,\n density,\n class: className,\n style,\n id,\n baseColor,\n color,\n glow,\n iconColor,\n hideDetails,\n hint,\n persistentHint,\n messages,\n direction,\n modelValue,\n renderAs,\n renderMode,\n multiple,\n choices: passedChoices,\n to,\n href,\n menuIcon,\n active,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n noValuesText,\n selectMenuIcon,\n ripple,\n iconForSelectedRadio,\n iconForUnselectedRadio,\n dirty,\n onBlur,\n onChange,\n onInput,\n clearable,\n doRefreshChoices,\n } = toRefs(props)\n const externalChoices = shallowRef<any[] | undefined>(undefined)\n const refreshingChoices = ref(false)\n const handleRefreshChoices = async () => {\n refreshingChoices.value = true\n if (doRefreshChoices.value && typeof doRefreshChoices.value === 'function') {\n try {\n const results = await doRefreshChoices.value()\n externalChoices.value = results.map((r) => ({ value: r.value, label: r.title }))\n triggerRef(externalChoices)\n } catch {\n // Ignore errors from refresh\n externalChoices.value = undefined\n triggerRef(externalChoices)\n }\n }\n refreshingChoices.value = false\n }\n const callRefreshChoices = throttle(handleRefreshChoices, 300)\n const choices = computed(() => passedChoices.value ?? externalChoices.value)\n const commonProps: ToRefs<LooseRequired<Readonly<CommonResourcefulFieldPublicProps>>> = {\n style,\n label,\n density,\n renderMode,\n multiple,\n to,\n href,\n menuIcon,\n active,\n theme,\n disabled,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n focused,\n noValuesText,\n 'allowUnspecifiedChoices': ref(false),\n 'choices': choices,\n 'class': className,\n 'onUpdate:focused': toRefs(props)['onUpdate:focused'],\n 'onClick:append': toRefs(props)['onClick:append'],\n 'onClick:appendInner': toRefs(props)['onClick:appendInner'],\n 'onClick:clear': toRefs(props)['onClick:clear'],\n 'onClick:prependInner': toRefs(props)['onClick:prependInner'],\n 'onClick:prepend': toRefs(props)['onClick:prepend'],\n 'onMousedown:control': toRefs(props)['onMousedown:control'],\n 'onClick:control': toRefs(props)['onClick:control'],\n error,\n errorMessages,\n dirty,\n onBlur,\n onChange,\n onInput,\n }\n const stringifier = computed<RFieldStringifier<REnumFieldValue>>(() => {\n return (val: REnumFieldValue) => {\n const choice = choices.value?.find((c) => c.value === val)\n if (!choice) {\n return String(val)\n }\n return choice.label\n }\n })\n const commonFieldBindings = computed<VInputPublicProps>(() => ({\n focused: focused.value,\n disabled: disabled.value,\n error: error.value,\n errorMessages: errorMessages.value,\n maxErrors: maxErrors.value,\n name: name.value,\n label: label.value,\n readonly: readonly.value,\n validateOn: validateOn.value,\n theme: theme.value,\n width: width.value,\n maxWidth: maxWidth.value,\n minWidth: minWidth.value,\n density: density.value,\n class: className.value,\n style: style.value,\n id: id.value,\n baseColor: baseColor.value,\n color: color.value,\n glow: glow.value,\n iconColor: iconColor.value,\n hideDetails: hideDetails.value,\n hint: hint.value,\n persistentHint: persistentHint.value,\n messages: messages.value,\n direction: direction.value,\n dirty: dirty.value,\n onBlur: onBlur.value,\n onChange: onChange.value,\n onInput: onInput.value,\n }))\n const vAutocompleteFieldBindings = computed<VAutocompletePublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n ...commonFieldBindings.value,\n active: active.value,\n disabled: commonFieldBindings.value.disabled || undefined,\n items: choices.value,\n clearable: clearable.value,\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n density: density.value,\n itemTitle: 'label',\n itemValue: 'value',\n variant: variant.value,\n menuIcon: selectMenuIcon.value,\n prefix: prefix.value,\n persistentPlaceholder: persistentPlaceholder.value,\n suffix: suffix.value,\n role: role.value,\n }) satisfies VAutocompletePublicProps\n )\n const vRadioGroupFieldBindings = computed<VRadioGroupPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n ...commonFieldBindings.value,\n density: density.value,\n falseIcon: iconForUnselectedRadio.value,\n trueIcon: iconForSelectedRadio.value,\n ripple: ripple.value,\n }) satisfies VRadioGroupPublicProps\n )\n const singleFieldRenderer: SingleFieldRenderer = ({ props: fieldBindings, isMultiAdd }) => {\n const renderableVAutocompleteFieldBindings = {\n ...vAutocompleteFieldBindings.value,\n ...fieldBindings,\n class: isMultiAdd ? [] : vAutocompleteFieldBindings.value.class,\n }\n const renderableVRadioGroupFieldBindings = {\n ...vRadioGroupFieldBindings.value,\n ...fieldBindings,\n class: isMultiAdd ? [] : vRadioGroupFieldBindings.value.class,\n }\n switch (renderAs.value) {\n case 'radio':\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n return h(VRadioGroup, renderableVRadioGroupFieldBindings, {\n ...slots,\n default: () =>\n Array.from(choices.value || []).map((i) =>\n h(\n VRadio,\n {\n value: i.value,\n },\n {\n label: () => i.label,\n }\n )\n ),\n append: (...args: any[]) => [\n // @ts-ignore\n slots['append'] ? slots['append'](...args) : null,\n typeof doRefreshChoices.value === 'function'\n ? h(\n VBtn,\n {\n icon: true,\n loading: refreshingChoices.value,\n disabled: disabled.value,\n density: 'compact',\n class: 'ms-2',\n onClick: (e: MouseEvent) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n callRefreshChoices()\n },\n },\n () => h(VIcon, { icon: svgPathToIconValue(mdiRefresh) })\n )\n : null,\n ],\n })\n default:\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n return h(VAutocomplete, renderableVAutocompleteFieldBindings, {\n ...slots,\n 'append-inner': (...args: any[]) => [\n // @ts-ignore\n slots['append-inner'] ? slots['append-inner'](...args) : null,\n typeof doRefreshChoices.value === 'function'\n ? h(\n VBtn,\n {\n icon: true,\n loading: refreshingChoices.value,\n disabled: disabled.value,\n density: 'compact',\n class: 'ms-2',\n onClick: (e: MouseEvent) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n callRefreshChoices()\n },\n },\n () => h(VIcon, { icon: svgPathToIconValue(mdiRefresh) })\n )\n : null,\n ],\n })\n }\n }\n watch(\n doRefreshChoices,\n (newVal) => {\n if (newVal && typeof newVal === 'function') {\n handleRefreshChoices()\n }\n },\n { immediate: true }\n )\n const { composed } = useFieldComposer(\n commonProps,\n stringifier,\n singleFieldRenderer,\n emit,\n props['onUpdate:modelValue'],\n props['onUpdate:model-value'],\n modelValue,\n props.modelValue,\n false,\n false,\n () => {},\n callRefreshChoices\n )\n return composed\n },\n})\n\n/**\n * Component type for the REnumField. Represents the complete enum field\n * component with dynamic choice loading support, multiple rendering variants,\n * and unified field architecture integration. Use this type for component\n * references, template refs, and programmatic component manipulation.\n *\n * @example\n * ```typescript\n * // Template ref typing\n * const enumFieldRef = ref<REnumField>()\n *\n * // Component type checking\n * const isEnumField = (component: unknown): component is REnumField => {\n * return component?.name === 'REnumField'\n * }\n *\n * // Programmatic component usage\n * const createEnumField = (): REnumField => {\n * return REnumField\n * }\n * ```\n */\nexport type REnumField = typeof REnumField & ComponentPublicInstance\n"],"names":["REnumFieldRenderable","isValidREnumFieldValue","value","v","makeREnumFieldProps","REnumFieldEmits","propsAndEmitsFactory","pick","makeVInputProps","makeVFieldProps","h","SvgIcon","mdiClose","IconValue","mdiCircleSlice8","mdiCheckboxBlankCircleOutline","mdiMenuDown","omit","makeCommonResourcefulFieldProps","commonEmitsValidators","REnumField","defineComponent","props","emit","slots","focused","disabled","error","errorMessages","maxErrors","name","label","readonly","validateOn","theme","width","maxWidth","minWidth","density","className","style","id","baseColor","color","glow","iconColor","hideDetails","hint","persistentHint","messages","direction","modelValue","renderAs","renderMode","multiple","passedChoices","to","href","menuIcon","active","variant","prefix","persistentPlaceholder","suffix","role","noValuesText","selectMenuIcon","ripple","iconForSelectedRadio","iconForUnselectedRadio","dirty","onBlur","onChange","onInput","clearable","doRefreshChoices","toRefs","externalChoices","shallowRef","refreshingChoices","ref","handleRefreshChoices","results","r","triggerRef","callRefreshChoices","throttle","choices","computed","commonProps","stringifier","val","choice","c","commonFieldBindings","vAutocompleteFieldBindings","stripUndefinedValuesFromObject","vRadioGroupFieldBindings","singleFieldRenderer","fieldBindings","isMultiAdd","renderableVAutocompleteFieldBindings","renderableVRadioGroupFieldBindings","VRadioGroup","i","VRadio","args","VBtn","e","VIcon","svgPathToIconValue","mdiRefresh","VAutocomplete","watch","newVal","composed","useFieldComposer"],"mappings":"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"}
1
+ {"version":3,"file":"enum-CRgh6TfR.mjs","sources":["../src/private/fields/enum.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Enum Field\n|--------------------------------------------------------------------------\n|\n| A comprehensive field component for enum/enumeration values with dynamic choice\n| loading support and professional UX features. Automatically adapts between single\n| field editing, multiple selection management, and read-only display through the\n| unified field composer architecture.\n|\n| ## Supported Values:\n| - string: Text-based enum values (e.g., \"active\", \"pending\", \"completed\")\n| - number: Numeric enum values (e.g., 1, 2, 3 for status codes)\n| - bigint: Large integer enum values for high-precision scenarios\n|\n| ## Rendering Variants (renderAs):\n| - select: Default autocomplete dropdown with search and filtering\n| - radio: VRadioGroup for explicit choice with visual radio buttons\n|\n| ## Dynamic Choice Loading:\n| - Supports static choices via the `choices` prop\n| - Enables dynamic loading via `doRefreshChoices` callback prop\n| - Parent component controls loading logic, timing, and error handling\n| - Field triggers initial load on mount via watch with immediate: true\n| - Future support for manual refresh via exposed refresh() method\n|\n| ## Choice Management:\n| - Choices are expected as objects with `value` and `label` properties\n| - Value can be string, number, or bigint matching the field's data type\n| - Label provides human-readable display text for the enum value\n| - Stringifier automatically maps values to labels for display\n| - Fallback to String(value) when choice not found in list\n|\n| ## Operational Modes:\n|\n| ### Single Mode (multiple: false, renderMode: 'edit')\n| Direct enum control with chosen render variant (select or radio) for\n| selecting a single value from the available choices.\n|\n| ### Multiple Mode (multiple: true, renderMode: 'edit')\n| RMultipleField with sophisticated chip management showing labeled chips,\n| full dialog interface for enum array management with search and filtering.\n|\n| ### Read Mode (renderMode: 'read')\n| Clean text presentation with Oxford comma formatting for arrays, showing\n| localized labels for each enum value.\n|\n| ## Real-World Use Cases:\n| - Status fields (draft/published/archived)\n| - Priority levels (low/medium/high/critical)\n| - User roles (admin/editor/viewer)\n| - Category selection from predefined list\n| - Configuration options loaded from API\n| - Dynamic form fields based on external data\n|\n| ## Integration Pattern:\n| Parent components handle choice loading via HTTP, caching, and error handling\n| while the field focuses solely on rendering and value management. This clean\n| separation enables flexible data loading strategies without coupling the field\n| to specific HTTP implementations.\n|\n*/\n\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VRadio } from 'vuetify/components/VRadio'\nimport { useFieldComposer } from './field_composer'\nimport { VInputPublicProps } from '../filtration/common'\nimport { SvgIcon, svgPathToIconValue } from '../svg-icon'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { VRadioGroup } from 'vuetify/components/VRadioGroup'\nimport { VAutocomplete } from 'vuetify/components/VAutocomplete'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { omit, pick, throttle } from '@nhtio/vuetifiable/util/helpers'\nimport { makeVInputProps } from '@nhtio/vuetifiable/components/VInput/VInput'\nimport { makeVFieldProps } from '@nhtio/vuetifiable/components/VField/VField'\nimport { makeCommonResourcefulFieldProps, commonEmitsValidators } from './common'\nimport { makeVRadioGroupProps } from '@nhtio/vuetifiable/components/VRadioGroup/VRadioGroup'\nimport { h, defineComponent, toRefs, computed, ref, watch, shallowRef, triggerRef } from 'vue'\nimport { makeVAutocompleteProps } from '@nhtio/vuetifiable/components/VAutocomplete/VAutocomplete'\nimport {\n mdiClose,\n mdiMenuDown,\n mdiCircleSlice8,\n mdiCheckboxBlankCircleOutline,\n mdiRefresh,\n} from '@mdi/js'\nimport type { VInput } from 'vuetify/components/VInput'\nimport type { SingleFieldRenderer } from './field_composer'\nimport type { ExtractSlotDefinitions } from '../common/types'\nimport type { LooseRequired } from '@vue/shared/dist/shared.d.ts'\nimport type { CommonResourcefulFieldPublicProps, RFieldStringifier } from './common'\nimport type {\n PropType,\n ExtractPublicPropTypes,\n ToRefs,\n SlotsType,\n ComponentPublicInstance,\n} from 'vue'\n\ntype VInputSlots = ExtractSlotDefinitions<typeof VInput.slots>\ntype VAutocompletePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVAutocompleteProps>>\ntype VRadioGroupPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVRadioGroupProps>>\n\n/**\n * Supported enum field values representing any enumerable type.\n * Includes string for text-based enums (most common), number for numeric\n * status codes or identifiers, and bigint for high-precision scenarios\n * requiring large integer enum values.\n *\n * @example\n * ```typescript\n * // String-based status enum\n * type Status = \"draft\" | \"published\" | \"archived\"\n * const status: REnumFieldValue = \"published\"\n *\n * // Numeric priority enum\n * enum Priority { Low = 1, Medium = 2, High = 3, Critical = 4 }\n * const priority: REnumFieldValue = Priority.High // 3\n *\n * // BigInt identifier enum\n * const largeId: REnumFieldValue = 9007199254740991n\n * ```\n */\nexport type REnumFieldValue = string | number | bigint\n\n/**\n * Rendering variants for enum fields that determine the UI control type.\n * Each variant provides different user interaction patterns while maintaining\n * consistent enum value selection logic.\n *\n * - `select`: Default autocomplete dropdown with search, filtering, and keyboard navigation\n * - `radio`: VRadioGroup for explicit choice scenarios with visual radio button controls\n *\n * @example\n * ```typescript\n * // Status dropdown with search\n * <REnumField renderAs=\"select\" v-model=\"status\" :choices=\"statusChoices\" />\n *\n * // Priority radio buttons for explicit selection\n * <REnumField renderAs=\"radio\" v-model=\"priority\" :choices=\"priorityChoices\" />\n *\n * // Multiple selection (select works best)\n * <REnumField multiple v-model=\"categories\" :choices=\"categoryChoices\" />\n * ```\n */\nexport const REnumFieldRenderable = ['select', 'radio'] as const\n\n/**\n * Union type for enum field rendering variants. Used for the renderAs prop\n * to specify which UI control should be used for enum value interaction.\n */\nexport type REnumFieldRenderable = (typeof REnumFieldRenderable)[number]\n\nexport type REnumFieldLoadedChoice = {\n value: string | number | bigint\n title: string\n}\n\nconst isValidREnumFieldValue = (\n value: REnumFieldValue | REnumFieldValue[] | null | undefined\n): boolean => {\n if (\n 'undefined' === typeof value ||\n (!Array.isArray(value) &&\n (typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint'))\n )\n return true\n if (Array.isArray(value)) {\n return value.every(\n (v) => 'string' === typeof v || 'number' === typeof v || 'bigint' === typeof v\n )\n }\n return false\n}\n\nconst { makeProps: makeREnumFieldProps, emits: REnumFieldEmits } = propsAndEmitsFactory(\n {\n ...pick(makeVInputProps(), [\n 'focused',\n 'disabled',\n 'error',\n 'errorMessages',\n 'maxErrors',\n 'name',\n 'label',\n 'readonly',\n 'validateOn',\n 'theme',\n 'width',\n 'maxWidth',\n 'minWidth',\n 'density',\n 'class',\n 'style',\n 'id',\n 'baseColor',\n 'color',\n 'glow',\n 'iconColor',\n 'hideDetails',\n 'hint',\n 'persistentHint',\n 'messages',\n 'direction',\n ]),\n ...pick(\n makeVFieldProps({\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n }),\n ['variant', 'clearIcon', 'clearable']\n ),\n modelValue: {\n type: [String, Number, BigInt, Array] as PropType<\n REnumFieldValue | REnumFieldValue[] | null | undefined\n >,\n default: undefined,\n },\n renderAs: {\n type: String as PropType<REnumFieldRenderable>,\n default: 'select',\n },\n iconForSelectedRadio: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiCircleSlice8 }),\n },\n iconForUnselectedRadio: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiCheckboxBlankCircleOutline }),\n },\n selectMenuIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiMenuDown }),\n },\n ripple: {\n type: Boolean,\n default: false,\n },\n ...omit(makeCommonResourcefulFieldProps(), ['variant']),\n doRefreshChoices: {\n type: Function as PropType<(() => Promise<REnumFieldLoadedChoice[]>) | undefined>,\n default: undefined,\n },\n },\n {\n 'update:modelValue': (value: REnumFieldValue | REnumFieldValue[] | null | undefined) =>\n isValidREnumFieldValue(value),\n 'update:model-value': (value: REnumFieldValue | REnumFieldValue[] | null | undefined) =>\n isValidREnumFieldValue(value),\n ...commonEmitsValidators,\n },\n 'REnumField'\n)\n\n/**\n * Factory function that creates comprehensive props for the REnumField component.\n * Combines VInput props with enum-specific options for dynamic choice loading,\n * rendering variants, icon customization, and unified field architecture integration.\n *\n * @returns Props definition object for use with defineComponent\n *\n * @example\n * ```typescript\n * // Basic enum field props\n * const props = makeREnumFieldProps()\n *\n * // Access specific prop configurations\n * console.log(props.renderAs) // Rendering variant prop\n * console.log(props.doRefreshChoices) // Dynamic loading callback prop\n * console.log(props.multiple) // Multiple selection mode prop\n * ```\n */\nexport { makeREnumFieldProps }\n\n/**\n * Public props interface for the REnumField component. Includes all VInput\n * props plus enum field-specific options for dynamic choice loading,\n * rendering variants, icon customization, and unified field architecture features.\n *\n * @example\n * ```typescript\n * // Component props typing\n * interface MyComponentProps {\n * enumFieldProps: REnumFieldProps\n * }\n *\n * // Programmatic prop construction\n * const fieldProps: REnumFieldProps = {\n * renderAs: 'select',\n * choices: [\n * { value: 'draft', label: 'Draft' },\n * { value: 'published', label: 'Published' },\n * ],\n * doRefreshChoices: async () => {\n * // Load choices from API\n * },\n * multiple: false,\n * label: 'Status',\n * // ... other VInput props\n * }\n * ```\n */\nexport type REnumFieldProps = ExtractPublicPropTypes<ReturnType<typeof makeREnumFieldProps>>\n\n/**\n * Comprehensive enum field component with dynamic choice loading support and\n * multiple rendering variants. Automatically adapts between single field editing,\n * multiple selection management, and read-only display through the unified field\n * composer architecture.\n *\n * Supports configurable rendering as autocomplete dropdown or radio group, with\n * dynamic choice loading via callback prop for flexible data fetching strategies.\n * Parent components control loading logic while the field focuses on rendering.\n *\n * @example\n * ```vue\n * <!-- Static choices with select dropdown -->\n * <REnumField\n * v-model=\"status\"\n * renderAs=\"select\"\n * :choices=\"[\n * { value: 'draft', label: 'Draft' },\n * { value: 'published', label: 'Published' },\n * { value: 'archived', label: 'Archived' }\n * ]\"\n * label=\"Status\"\n * />\n *\n * <!-- Dynamic loading with radio buttons -->\n * <REnumField\n * v-model=\"category\"\n * renderAs=\"radio\"\n * :choices=\"categoryChoices\"\n * :doRefreshChoices=\"loadCategories\"\n * label=\"Category\"\n * />\n *\n * <!-- Multiple selection with search -->\n * <REnumField\n * v-model=\"tags\"\n * multiple\n * :choices=\"tagChoices\"\n * :doRefreshChoices=\"loadTags\"\n * label=\"Tags\"\n * />\n *\n * <!-- Clearable enum field -->\n * <REnumField\n * v-model=\"priority\"\n * :choices=\"priorityChoices\"\n * clearable\n * label=\"Priority (Optional)\"\n * />\n * ```\n */\nexport const REnumField = defineComponent({\n name: 'REnumField',\n props: makeREnumFieldProps(),\n emits: REnumFieldEmits,\n slots: Object as SlotsType<VInputSlots>,\n setup(props, { emit, slots }) {\n const {\n focused,\n disabled,\n error,\n errorMessages,\n maxErrors,\n name,\n label,\n readonly,\n validateOn,\n theme,\n width,\n maxWidth,\n minWidth,\n density,\n class: className,\n style,\n id,\n baseColor,\n color,\n glow,\n iconColor,\n hideDetails,\n hint,\n persistentHint,\n messages,\n direction,\n modelValue,\n renderAs,\n renderMode,\n multiple,\n choices: passedChoices,\n to,\n href,\n menuIcon,\n active,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n noValuesText,\n selectMenuIcon,\n ripple,\n iconForSelectedRadio,\n iconForUnselectedRadio,\n dirty,\n onBlur,\n onChange,\n onInput,\n clearable,\n doRefreshChoices,\n } = toRefs(props)\n const externalChoices = shallowRef<any[] | undefined>(undefined)\n const refreshingChoices = ref(false)\n const handleRefreshChoices = async () => {\n refreshingChoices.value = true\n if (doRefreshChoices.value && typeof doRefreshChoices.value === 'function') {\n try {\n const results = await doRefreshChoices.value()\n externalChoices.value = results.map((r) => ({ value: r.value, label: r.title }))\n triggerRef(externalChoices)\n } catch {\n // Ignore errors from refresh\n externalChoices.value = undefined\n triggerRef(externalChoices)\n }\n }\n refreshingChoices.value = false\n }\n const callRefreshChoices = throttle(handleRefreshChoices, 300)\n const choices = computed(() => passedChoices.value ?? externalChoices.value)\n const commonProps: ToRefs<LooseRequired<Readonly<CommonResourcefulFieldPublicProps>>> = {\n style,\n label,\n density,\n renderMode,\n multiple,\n to,\n href,\n menuIcon,\n active,\n theme,\n disabled,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n focused,\n noValuesText,\n 'allowUnspecifiedChoices': ref(false),\n 'choices': choices,\n 'class': className,\n 'onUpdate:focused': toRefs(props)['onUpdate:focused'],\n 'onClick:append': toRefs(props)['onClick:append'],\n 'onClick:appendInner': toRefs(props)['onClick:appendInner'],\n 'onClick:clear': toRefs(props)['onClick:clear'],\n 'onClick:prependInner': toRefs(props)['onClick:prependInner'],\n 'onClick:prepend': toRefs(props)['onClick:prepend'],\n 'onMousedown:control': toRefs(props)['onMousedown:control'],\n 'onClick:control': toRefs(props)['onClick:control'],\n error,\n errorMessages,\n dirty,\n onBlur,\n onChange,\n onInput,\n }\n const stringifier = computed<RFieldStringifier<REnumFieldValue>>(() => {\n return (val: REnumFieldValue) => {\n const choice = choices.value?.find((c) => c.value === val)\n if (!choice) {\n return String(val)\n }\n return choice.label\n }\n })\n const commonFieldBindings = computed<VInputPublicProps>(() => ({\n focused: focused.value,\n disabled: disabled.value,\n error: error.value,\n errorMessages: errorMessages.value,\n maxErrors: maxErrors.value,\n name: name.value,\n label: label.value,\n readonly: readonly.value,\n validateOn: validateOn.value,\n theme: theme.value,\n width: width.value,\n maxWidth: maxWidth.value,\n minWidth: minWidth.value,\n density: density.value,\n class: className.value,\n style: style.value,\n id: id.value,\n baseColor: baseColor.value,\n color: color.value,\n glow: glow.value,\n iconColor: iconColor.value,\n hideDetails: hideDetails.value,\n hint: hint.value,\n persistentHint: persistentHint.value,\n messages: messages.value,\n direction: direction.value,\n dirty: dirty.value,\n onBlur: onBlur.value,\n onChange: onChange.value,\n onInput: onInput.value,\n }))\n const vAutocompleteFieldBindings = computed<VAutocompletePublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n ...commonFieldBindings.value,\n active: active.value,\n disabled: commonFieldBindings.value.disabled || undefined,\n items: choices.value,\n clearable: clearable.value,\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n density: density.value,\n itemTitle: 'label',\n itemValue: 'value',\n variant: variant.value,\n menuIcon: selectMenuIcon.value,\n prefix: prefix.value,\n persistentPlaceholder: persistentPlaceholder.value,\n suffix: suffix.value,\n role: role.value,\n }) satisfies VAutocompletePublicProps\n )\n const vRadioGroupFieldBindings = computed<VRadioGroupPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n ...commonFieldBindings.value,\n density: density.value,\n falseIcon: iconForUnselectedRadio.value,\n trueIcon: iconForSelectedRadio.value,\n ripple: ripple.value,\n }) satisfies VRadioGroupPublicProps\n )\n const singleFieldRenderer: SingleFieldRenderer = ({ props: fieldBindings, isMultiAdd }) => {\n const renderableVAutocompleteFieldBindings = {\n ...vAutocompleteFieldBindings.value,\n ...fieldBindings,\n class: isMultiAdd ? [] : vAutocompleteFieldBindings.value.class,\n }\n const renderableVRadioGroupFieldBindings = {\n ...vRadioGroupFieldBindings.value,\n ...fieldBindings,\n class: isMultiAdd ? [] : vRadioGroupFieldBindings.value.class,\n }\n switch (renderAs.value) {\n case 'radio':\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n return h(VRadioGroup, renderableVRadioGroupFieldBindings, {\n ...slots,\n default: () =>\n Array.from(choices.value || []).map((i) =>\n h(\n VRadio,\n {\n value: i.value,\n },\n {\n label: () => i.label,\n }\n )\n ),\n append: (...args: any[]) => [\n // @ts-ignore\n slots['append'] ? slots['append'](...args) : null,\n typeof doRefreshChoices.value === 'function'\n ? h(\n VBtn,\n {\n icon: true,\n loading: refreshingChoices.value,\n disabled: disabled.value,\n density: 'compact',\n class: 'ms-2',\n onClick: (e: MouseEvent) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n callRefreshChoices()\n },\n },\n () => h(VIcon, { icon: svgPathToIconValue(mdiRefresh) })\n )\n : null,\n ],\n })\n default:\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n return h(VAutocomplete, renderableVAutocompleteFieldBindings, {\n ...slots,\n 'append-inner': (...args: any[]) => [\n // @ts-ignore\n slots['append-inner'] ? slots['append-inner'](...args) : null,\n typeof doRefreshChoices.value === 'function'\n ? h(\n VBtn,\n {\n icon: true,\n loading: refreshingChoices.value,\n disabled: disabled.value,\n density: 'compact',\n class: 'ms-2',\n onClick: (e: MouseEvent) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n callRefreshChoices()\n },\n },\n () => h(VIcon, { icon: svgPathToIconValue(mdiRefresh) })\n )\n : null,\n ],\n })\n }\n }\n watch(\n doRefreshChoices,\n (newVal) => {\n if (newVal && typeof newVal === 'function') {\n handleRefreshChoices()\n }\n },\n { immediate: true }\n )\n const { composed } = useFieldComposer(\n commonProps,\n stringifier,\n singleFieldRenderer,\n emit,\n props['onUpdate:modelValue'],\n props['onUpdate:model-value'],\n modelValue,\n props.modelValue,\n false,\n false,\n () => {},\n callRefreshChoices\n )\n return composed\n },\n})\n\n/**\n * Component type for the REnumField. Represents the complete enum field\n * component with dynamic choice loading support, multiple rendering variants,\n * and unified field architecture integration. Use this type for component\n * references, template refs, and programmatic component manipulation.\n *\n * @example\n * ```typescript\n * // Template ref typing\n * const enumFieldRef = ref<REnumField>()\n *\n * // Component type checking\n * const isEnumField = (component: unknown): component is REnumField => {\n * return component?.name === 'REnumField'\n * }\n *\n * // Programmatic component usage\n * const createEnumField = (): REnumField => {\n * return REnumField\n * }\n * ```\n */\nexport type REnumField = typeof REnumField & ComponentPublicInstance\n"],"names":["REnumFieldRenderable","isValidREnumFieldValue","value","v","makeREnumFieldProps","REnumFieldEmits","propsAndEmitsFactory","pick","makeVInputProps","makeVFieldProps","h","SvgIcon","mdiClose","IconValue","mdiCircleSlice8","mdiCheckboxBlankCircleOutline","mdiMenuDown","omit","makeCommonResourcefulFieldProps","commonEmitsValidators","REnumField","defineComponent","props","emit","slots","focused","disabled","error","errorMessages","maxErrors","name","label","readonly","validateOn","theme","width","maxWidth","minWidth","density","className","style","id","baseColor","color","glow","iconColor","hideDetails","hint","persistentHint","messages","direction","modelValue","renderAs","renderMode","multiple","passedChoices","to","href","menuIcon","active","variant","prefix","persistentPlaceholder","suffix","role","noValuesText","selectMenuIcon","ripple","iconForSelectedRadio","iconForUnselectedRadio","dirty","onBlur","onChange","onInput","clearable","doRefreshChoices","toRefs","externalChoices","shallowRef","refreshingChoices","ref","handleRefreshChoices","results","r","triggerRef","callRefreshChoices","throttle","choices","computed","commonProps","stringifier","val","choice","c","commonFieldBindings","vAutocompleteFieldBindings","stripUndefinedValuesFromObject","vRadioGroupFieldBindings","singleFieldRenderer","fieldBindings","isMultiAdd","renderableVAutocompleteFieldBindings","renderableVRadioGroupFieldBindings","VRadioGroup","i","VRadio","args","VBtn","e","VIcon","svgPathToIconValue","mdiRefresh","VAutocomplete","watch","newVal","composed","useFieldComposer"],"mappings":"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"}
package/factories.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { e as o, g as r, f as e, d as p, p as t } from "./utils-DqXWb-4f.mjs";
1
+ import { e as o, g as r, f as e, d as p, p as t } from "./utils-D3ZGaTyv.mjs";
2
2
  export {
3
3
  o as emitsFactory,
4
4
  r as getCamelAndMaybeKebabPropKeysFor,
@@ -1,8 +1,8 @@
1
- import { u as X, R as Y, k as Z } from "./common-BeDAn4wu.mjs";
1
+ import { u as X, R as Y, l as Z } from "./common-DrsZRUoj.mjs";
2
2
  import { d as _ } from "./index-DXdh_Con.mjs";
3
3
  import { computed as u, toValue as n, h as C } from "vue";
4
- import { s as V, t as k } from "./utils-DqXWb-4f.mjs";
5
- const ne = (e, r, i, g, m, h, y, U, s = !1, o = !1, I = () => {
4
+ import { s as V, t as g } from "./utils-D3ZGaTyv.mjs";
5
+ const ne = (e, r, i, k, m, h, y, U, s = !1, o = !1, I = () => {
6
6
  }, M) => {
7
7
  const {
8
8
  renderMode: R,
@@ -26,7 +26,7 @@ const ne = (e, r, i, g, m, h, y, U, s = !1, o = !1, I = () => {
26
26
  role: E,
27
27
  focused: G
28
28
  } = e, p = u(() => A.value === !0), { localState: a, setLocalState: t, getLocalState: H, recomputeLocalState: J } = X(
29
- g,
29
+ k,
30
30
  m,
31
31
  h,
32
32
  p,
@@ -109,16 +109,16 @@ const ne = (e, r, i, g, m, h, y, U, s = !1, o = !1, I = () => {
109
109
  if (R.value === "read")
110
110
  return C(Y, K.value);
111
111
  if (p.value) {
112
- const f = k(i);
112
+ const f = g(i);
113
113
  return C(Z, Q.value, {
114
114
  "single-variant": (...W) => f(...W)
115
115
  });
116
116
  } else
117
- return k(i)(...l);
117
+ return g(i)(...l);
118
118
  }
119
119
  };
120
120
  };
121
121
  export {
122
122
  ne as u
123
123
  };
124
- //# sourceMappingURL=field_composer-DpJx0Oz1.mjs.map
124
+ //# sourceMappingURL=field_composer-CjKCvP50.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"field_composer-DpJx0Oz1.mjs","sources":["../src/private/fields/field_composer.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Field Composer\n|--------------------------------------------------------------------------\n|\n| A sophisticated composable that unifies field rendering across three distinct\n| operational modes: single field editing, multiple selection management, and\n| read-only display. This composer eliminates boilerplate by automatically \n| handling state management, event binding, and mode switching.\n|\n| KEY CAPABILITIES:\n| - Unified field interface across single/multiple/read modes\n| - Automatic state management with local state synchronization\n| - Type-safe slot argument mapping for consistent interfaces\n| - Complete event handling delegation with proper prop binding\n| - Seamless integration with RMultipleField and RReadModeRenderer\n| - Generic type support for any data type via RFieldStringifier\n|\n| ARCHITECTURE:\n| - Single renderer: Focus only on individual field logic\n| - Composer: Handles all mode complexity and state orchestration\n| - Consistent slot args: Same interface whether standalone or in multiple field\n| - Smart bindings: Automatic prop/event mapping with type safety\n|\n| USAGE PATTERN:\n| Individual field components become trivial - just provide the single field\n| renderer and stringifier, and get multiple selection + read mode for free.\n*/\n\nimport { useLocalState } from './common'\nimport { deepmerge } from 'deepmerge-ts'\nimport { computed, h, toValue } from 'vue'\nimport { RMultipleField } from './multiple'\nimport { RReadModeRenderer } from './read_mode_renderer'\nimport { stripUndefinedValuesFromObject, toUnreactive } from '../common/utils'\nimport type { VNode, MaybeRef, Ref, ToRefs } from 'vue'\nimport type { LooseRequired } from '@vue/shared/dist/shared.d.ts'\nimport type { RReadModeRendererPublicProps } from './read_mode_renderer'\nimport type { RMultipleFieldProps, SingleVariantSlotArgs } from './multiple'\nimport type {\n CommonResourcefulFieldPublicProps,\n EmitWithUpdateModelValue,\n LocalStateModelValue,\n RFieldStringifier,\n} from './common'\n\n/**\n * Extended RMultipleField props that include optional event handlers.\n * This type combines the base multiple field props with all possible\n * click and interaction event handlers for complete event delegation.\n *\n * Used internally to ensure type safety when binding events from the\n * composer options to the underlying RMultipleField component.\n */\ntype RMultipleFieldPropsWithEvents = RMultipleFieldProps & {\n 'onClick:append'?: ((e: MouseEvent) => void) | undefined\n 'onClick:appendInner'?: ((e: MouseEvent) => void) | undefined\n 'onClick:clear'?: ((e: MouseEvent) => void) | undefined\n 'onClick:prependInner'?: ((e: MouseEvent) => void) | undefined\n 'onClick:prepend'?: ((e: MouseEvent) => void) | undefined\n 'onMousedown:control'?: ((e: MouseEvent) => void) | undefined\n 'onClick:control'?: ((e: MouseEvent) => void) | undefined\n}\n\nexport type SingleFieldRenderer = MaybeRef<(...args: SingleVariantSlotArgs) => VNode>\n\n/**\n * A sophisticated composable that unifies field rendering across three operational modes:\n * single field editing, multiple selection management, and read-only display.\n *\n * This composer eliminates the complexity of managing different field states by providing\n * a unified interface. Individual field components only need to implement their single\n * field renderer, and the composer automatically handles multiple selection and read mode.\n *\n * ## Operational Modes\n *\n * 1. **Single Mode** (`multiple: false`, `renderMode: 'edit'`): Direct single field rendering\n * 2. **Multiple Mode** (`multiple: true`, `renderMode: 'edit'`): RMultipleField with single renderer as slot\n * 3. **Read Mode** (`renderMode: 'read'`): RReadModeRenderer with Oxford comma formatting\n *\n * ## Key Benefits\n *\n * - **Unified Configuration**: All options consolidated in commonProps - no separate option objects\n * - **Unified State Management**: Automatic local state sync with proper emit handling\n * - **Consistent Interface**: Same slot args pattern across all modes\n * - **Type Safety**: Full generic type propagation with proper TypeScript support\n * - **Event Delegation**: Complete event handling with prop binding automation\n * - **Zero Boilerplate**: Individual fields become trivial to implement\n *\n * ## Simplified Architecture\n *\n * ```typescript\n * // Individual field becomes this simple:\n * const { composed } = useFieldComposer(\n * toRefs(props), // All options unified in commonProps!\n * stringifier,\n * singleRenderer, // Just focus on single field logic!\n * emit,\n * // ... standard parameters\n * )\n * return () => composed()\n * ```\n *\n * @template T - The data type managed by the field (string, number, User, etc.)\n * @param commonProps - Reactive common field properties including all mode options (renderMode, multiple, variant, theme, to, href, events, etc.)\n * @param stringifier - Function to convert values to display format (supports VNode + string)\n * @param singleFieldRenderer - The core field renderer using SingleVariantSlotArgs interface\n * @param emit - Vue emit function for modelValue updates\n * @param onUpdateModelValueCamelProp - Optional camelCase prop event handler\n * @param onUpdateModelValueKebabProp - Optional kebab-case prop event handler\n * @param modelValueRef - Reactive reference to the current model value\n * @param modelValueProp - The initial model value prop\n * @param nullIsValue - Whether null should be treated as a valid value (default: false)\n * @param undefinedIsValue - Whether undefined should be treated as a valid value (default: false)\n * @param onChange - Optional callback for state change tracking\n * @returns Object with state management functions and the composed renderer\n *\n * @example\n * ```typescript\n * // String field implementation with unified props\n * export const RStringField = defineComponent({\n * name: 'RStringField',\n * props: {\n * ...makeCommonResourcefulFieldProps(),\n * // Add any field-specific props here\n * },\n * emits: commonEmits,\n * setup(props, { emit }) {\n * const stringStringifier: RFieldStringifier<string> = (val) => val || ''\n * const stringRenderer = ({ props }: SingleVariantSlotArgs<string>[0]) =>\n * h(VTextField, props)\n *\n * const { composed } = useFieldComposer(\n * toRefs(props), // All mode options included automatically!\n * stringStringifier,\n * stringRenderer,\n * emit,\n * props['onUpdate:modelValue'],\n * props['onUpdate:model-value'],\n * toRef(props, 'modelValue'),\n * props.modelValue,\n * false, // nullIsValue - null is not a valid string value\n * false // undefinedIsValue - undefined is not a valid string value\n * )\n *\n * return () => composed()\n * }\n * })\n * ```\n */\nexport const useFieldComposer = <T>(\n commonProps: ToRefs<LooseRequired<Readonly<CommonResourcefulFieldPublicProps>>>,\n stringifier: MaybeRef<RFieldStringifier<T>>,\n singleFieldRenderer: MaybeRef<(...args: SingleVariantSlotArgs) => VNode>,\n emit: EmitWithUpdateModelValue<T>,\n onUpdateModelValueCamelProp: ((val: T | T[] | null | undefined) => void) | undefined,\n onUpdateModelValueKebabProp: ((val: T | T[] | null | undefined) => void) | undefined,\n modelValueRef: Ref<T | T[] | null | undefined>,\n modelValueProp: T | T[] | null | undefined,\n nullIsValue: MaybeRef<boolean> = false,\n undefinedIsValue: MaybeRef<boolean> = false,\n onChange: (\n is: LocalStateModelValue<T>,\n was?: LocalStateModelValue<T> | undefined\n ) => void = () => {},\n callRefreshChoices?: () => void | Promise<void>\n) => {\n const {\n renderMode,\n multiple,\n choices,\n allowUnspecifiedChoices,\n label,\n density,\n class: className,\n style,\n to,\n href,\n menuIcon,\n active,\n theme,\n disabled,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n focused,\n } = commonProps\n const isMultiple = computed(() => multiple.value === true)\n const { localState, setLocalState, getLocalState, recomputeLocalState } = useLocalState(\n emit,\n onUpdateModelValueCamelProp,\n onUpdateModelValueKebabProp,\n isMultiple,\n modelValueRef,\n modelValueProp,\n onChange\n )\n const rReadModeRendererBindings = computed<RReadModeRendererPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n stringifier: toValue(stringifier),\n modelValue: localState.value,\n label: label.value,\n density: density.value,\n class: className.value,\n style: style.value,\n to: to.value,\n href: href.value,\n nullIsValue: toValue(nullIsValue),\n undefinedIsValue: toValue(undefinedIsValue),\n callRefreshChoices,\n }) satisfies RReadModeRendererPublicProps\n )\n const multipleVariantBindings = computed<RMultipleFieldPropsWithEvents>(\n () =>\n stripUndefinedValuesFromObject(\n deepmerge(\n {\n stringifier: toValue(stringifier),\n menuIcon: menuIcon.value,\n class: className.value,\n style: style.value,\n active: active.value,\n theme: theme.value,\n disabled: disabled.value,\n variant: variant.value,\n prefix: prefix.value,\n persistentPlaceholder: persistentPlaceholder.value,\n suffix: suffix.value,\n role: role.value,\n focused: focused.value,\n choices: choices.value,\n allowUnspecifiedChoices: allowUnspecifiedChoices.value,\n density: density.value,\n nullIsValue: toValue(nullIsValue),\n undefinedIsValue: toValue(undefinedIsValue),\n },\n {\n 'onUpdate:modelValue': (val: LocalStateModelValue<T>) => setLocalState(val),\n 'onUpdate:focused': commonProps['onUpdate:focused'].value,\n 'onClick:append': commonProps['onClick:append'].value,\n 'onClick:appendInner': commonProps['onClick:appendInner'].value,\n 'onClick:clear': commonProps['onClick:clear'].value,\n 'onClick:prependInner': commonProps['onClick:prependInner'].value,\n 'onClick:prepend': commonProps['onClick:prepend'].value,\n 'onMousedown:control': commonProps['onMousedown:control'].value,\n 'onClick:control': commonProps['onClick:control'].value,\n },\n {\n modelValue: localState.value,\n }\n ) as RMultipleFieldPropsWithEvents\n ) satisfies RMultipleFieldPropsWithEvents\n )\n const singleVariantRendererArgs = computed<SingleVariantSlotArgs<T>>(() => [\n {\n props: {\n 'modelValue': Array.isArray(localState.value) ? localState.value[0] : localState.value,\n 'onUpdate:model-value': (val: T | null | undefined) => setLocalState(val),\n 'onUpdate:modelValue': (val: T | null | undefined) => setLocalState(val),\n },\n add: () => {},\n isMultiAdd: false,\n },\n ])\n const composed = () => {\n const currentSingleVariantRendererArgs = singleVariantRendererArgs.value\n if (!Array.isArray(currentSingleVariantRendererArgs)) return null\n if ('read' === renderMode.value) {\n return h(RReadModeRenderer, rReadModeRendererBindings.value)\n } else if (isMultiple.value) {\n const singleVariant = toUnreactive(singleFieldRenderer)\n return h(RMultipleField, multipleVariantBindings.value, {\n 'single-variant': (...args: SingleVariantSlotArgs<T>) => singleVariant(...args),\n })\n } else {\n const singleVariant = toUnreactive(singleFieldRenderer)\n return singleVariant(...currentSingleVariantRendererArgs)\n }\n }\n return {\n localState,\n setLocalState,\n getLocalState,\n recomputeLocalState,\n composed,\n }\n}\n"],"names":["useFieldComposer","commonProps","stringifier","singleFieldRenderer","emit","onUpdateModelValueCamelProp","onUpdateModelValueKebabProp","modelValueRef","modelValueProp","nullIsValue","undefinedIsValue","onChange","callRefreshChoices","renderMode","multiple","choices","allowUnspecifiedChoices","label","density","className","style","to","href","menuIcon","active","theme","disabled","variant","prefix","persistentPlaceholder","suffix","role","focused","isMultiple","computed","localState","setLocalState","getLocalState","recomputeLocalState","useLocalState","rReadModeRendererBindings","stripUndefinedValuesFromObject","toValue","multipleVariantBindings","deepmerge","val","singleVariantRendererArgs","currentSingleVariantRendererArgs","h","RReadModeRenderer","singleVariant","toUnreactive","RMultipleField","args"],"mappings":"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"}
1
+ {"version":3,"file":"field_composer-CjKCvP50.mjs","sources":["../src/private/fields/field_composer.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Field Composer\n|--------------------------------------------------------------------------\n|\n| A sophisticated composable that unifies field rendering across three distinct\n| operational modes: single field editing, multiple selection management, and\n| read-only display. This composer eliminates boilerplate by automatically \n| handling state management, event binding, and mode switching.\n|\n| KEY CAPABILITIES:\n| - Unified field interface across single/multiple/read modes\n| - Automatic state management with local state synchronization\n| - Type-safe slot argument mapping for consistent interfaces\n| - Complete event handling delegation with proper prop binding\n| - Seamless integration with RMultipleField and RReadModeRenderer\n| - Generic type support for any data type via RFieldStringifier\n|\n| ARCHITECTURE:\n| - Single renderer: Focus only on individual field logic\n| - Composer: Handles all mode complexity and state orchestration\n| - Consistent slot args: Same interface whether standalone or in multiple field\n| - Smart bindings: Automatic prop/event mapping with type safety\n|\n| USAGE PATTERN:\n| Individual field components become trivial - just provide the single field\n| renderer and stringifier, and get multiple selection + read mode for free.\n*/\n\nimport { useLocalState } from './common'\nimport { deepmerge } from 'deepmerge-ts'\nimport { computed, h, toValue } from 'vue'\nimport { RMultipleField } from './multiple'\nimport { RReadModeRenderer } from './read_mode_renderer'\nimport { stripUndefinedValuesFromObject, toUnreactive } from '../common/utils'\nimport type { VNode, MaybeRef, Ref, ToRefs } from 'vue'\nimport type { LooseRequired } from '@vue/shared/dist/shared.d.ts'\nimport type { RReadModeRendererPublicProps } from './read_mode_renderer'\nimport type { RMultipleFieldProps, SingleVariantSlotArgs } from './multiple'\nimport type {\n CommonResourcefulFieldPublicProps,\n EmitWithUpdateModelValue,\n LocalStateModelValue,\n RFieldStringifier,\n} from './common'\n\n/**\n * Extended RMultipleField props that include optional event handlers.\n * This type combines the base multiple field props with all possible\n * click and interaction event handlers for complete event delegation.\n *\n * Used internally to ensure type safety when binding events from the\n * composer options to the underlying RMultipleField component.\n */\ntype RMultipleFieldPropsWithEvents = RMultipleFieldProps & {\n 'onClick:append'?: ((e: MouseEvent) => void) | undefined\n 'onClick:appendInner'?: ((e: MouseEvent) => void) | undefined\n 'onClick:clear'?: ((e: MouseEvent) => void) | undefined\n 'onClick:prependInner'?: ((e: MouseEvent) => void) | undefined\n 'onClick:prepend'?: ((e: MouseEvent) => void) | undefined\n 'onMousedown:control'?: ((e: MouseEvent) => void) | undefined\n 'onClick:control'?: ((e: MouseEvent) => void) | undefined\n}\n\nexport type SingleFieldRenderer = MaybeRef<(...args: SingleVariantSlotArgs) => VNode>\n\n/**\n * A sophisticated composable that unifies field rendering across three operational modes:\n * single field editing, multiple selection management, and read-only display.\n *\n * This composer eliminates the complexity of managing different field states by providing\n * a unified interface. Individual field components only need to implement their single\n * field renderer, and the composer automatically handles multiple selection and read mode.\n *\n * ## Operational Modes\n *\n * 1. **Single Mode** (`multiple: false`, `renderMode: 'edit'`): Direct single field rendering\n * 2. **Multiple Mode** (`multiple: true`, `renderMode: 'edit'`): RMultipleField with single renderer as slot\n * 3. **Read Mode** (`renderMode: 'read'`): RReadModeRenderer with Oxford comma formatting\n *\n * ## Key Benefits\n *\n * - **Unified Configuration**: All options consolidated in commonProps - no separate option objects\n * - **Unified State Management**: Automatic local state sync with proper emit handling\n * - **Consistent Interface**: Same slot args pattern across all modes\n * - **Type Safety**: Full generic type propagation with proper TypeScript support\n * - **Event Delegation**: Complete event handling with prop binding automation\n * - **Zero Boilerplate**: Individual fields become trivial to implement\n *\n * ## Simplified Architecture\n *\n * ```typescript\n * // Individual field becomes this simple:\n * const { composed } = useFieldComposer(\n * toRefs(props), // All options unified in commonProps!\n * stringifier,\n * singleRenderer, // Just focus on single field logic!\n * emit,\n * // ... standard parameters\n * )\n * return () => composed()\n * ```\n *\n * @template T - The data type managed by the field (string, number, User, etc.)\n * @param commonProps - Reactive common field properties including all mode options (renderMode, multiple, variant, theme, to, href, events, etc.)\n * @param stringifier - Function to convert values to display format (supports VNode + string)\n * @param singleFieldRenderer - The core field renderer using SingleVariantSlotArgs interface\n * @param emit - Vue emit function for modelValue updates\n * @param onUpdateModelValueCamelProp - Optional camelCase prop event handler\n * @param onUpdateModelValueKebabProp - Optional kebab-case prop event handler\n * @param modelValueRef - Reactive reference to the current model value\n * @param modelValueProp - The initial model value prop\n * @param nullIsValue - Whether null should be treated as a valid value (default: false)\n * @param undefinedIsValue - Whether undefined should be treated as a valid value (default: false)\n * @param onChange - Optional callback for state change tracking\n * @returns Object with state management functions and the composed renderer\n *\n * @example\n * ```typescript\n * // String field implementation with unified props\n * export const RStringField = defineComponent({\n * name: 'RStringField',\n * props: {\n * ...makeCommonResourcefulFieldProps(),\n * // Add any field-specific props here\n * },\n * emits: commonEmits,\n * setup(props, { emit }) {\n * const stringStringifier: RFieldStringifier<string> = (val) => val || ''\n * const stringRenderer = ({ props }: SingleVariantSlotArgs<string>[0]) =>\n * h(VTextField, props)\n *\n * const { composed } = useFieldComposer(\n * toRefs(props), // All mode options included automatically!\n * stringStringifier,\n * stringRenderer,\n * emit,\n * props['onUpdate:modelValue'],\n * props['onUpdate:model-value'],\n * toRef(props, 'modelValue'),\n * props.modelValue,\n * false, // nullIsValue - null is not a valid string value\n * false // undefinedIsValue - undefined is not a valid string value\n * )\n *\n * return () => composed()\n * }\n * })\n * ```\n */\nexport const useFieldComposer = <T>(\n commonProps: ToRefs<LooseRequired<Readonly<CommonResourcefulFieldPublicProps>>>,\n stringifier: MaybeRef<RFieldStringifier<T>>,\n singleFieldRenderer: MaybeRef<(...args: SingleVariantSlotArgs) => VNode>,\n emit: EmitWithUpdateModelValue<T>,\n onUpdateModelValueCamelProp: ((val: T | T[] | null | undefined) => void) | undefined,\n onUpdateModelValueKebabProp: ((val: T | T[] | null | undefined) => void) | undefined,\n modelValueRef: Ref<T | T[] | null | undefined>,\n modelValueProp: T | T[] | null | undefined,\n nullIsValue: MaybeRef<boolean> = false,\n undefinedIsValue: MaybeRef<boolean> = false,\n onChange: (\n is: LocalStateModelValue<T>,\n was?: LocalStateModelValue<T> | undefined\n ) => void = () => {},\n callRefreshChoices?: () => void | Promise<void>\n) => {\n const {\n renderMode,\n multiple,\n choices,\n allowUnspecifiedChoices,\n label,\n density,\n class: className,\n style,\n to,\n href,\n menuIcon,\n active,\n theme,\n disabled,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n focused,\n } = commonProps\n const isMultiple = computed(() => multiple.value === true)\n const { localState, setLocalState, getLocalState, recomputeLocalState } = useLocalState(\n emit,\n onUpdateModelValueCamelProp,\n onUpdateModelValueKebabProp,\n isMultiple,\n modelValueRef,\n modelValueProp,\n onChange\n )\n const rReadModeRendererBindings = computed<RReadModeRendererPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n stringifier: toValue(stringifier),\n modelValue: localState.value,\n label: label.value,\n density: density.value,\n class: className.value,\n style: style.value,\n to: to.value,\n href: href.value,\n nullIsValue: toValue(nullIsValue),\n undefinedIsValue: toValue(undefinedIsValue),\n callRefreshChoices,\n }) satisfies RReadModeRendererPublicProps\n )\n const multipleVariantBindings = computed<RMultipleFieldPropsWithEvents>(\n () =>\n stripUndefinedValuesFromObject(\n deepmerge(\n {\n stringifier: toValue(stringifier),\n menuIcon: menuIcon.value,\n class: className.value,\n style: style.value,\n active: active.value,\n theme: theme.value,\n disabled: disabled.value,\n variant: variant.value,\n prefix: prefix.value,\n persistentPlaceholder: persistentPlaceholder.value,\n suffix: suffix.value,\n role: role.value,\n focused: focused.value,\n choices: choices.value,\n allowUnspecifiedChoices: allowUnspecifiedChoices.value,\n density: density.value,\n nullIsValue: toValue(nullIsValue),\n undefinedIsValue: toValue(undefinedIsValue),\n },\n {\n 'onUpdate:modelValue': (val: LocalStateModelValue<T>) => setLocalState(val),\n 'onUpdate:focused': commonProps['onUpdate:focused'].value,\n 'onClick:append': commonProps['onClick:append'].value,\n 'onClick:appendInner': commonProps['onClick:appendInner'].value,\n 'onClick:clear': commonProps['onClick:clear'].value,\n 'onClick:prependInner': commonProps['onClick:prependInner'].value,\n 'onClick:prepend': commonProps['onClick:prepend'].value,\n 'onMousedown:control': commonProps['onMousedown:control'].value,\n 'onClick:control': commonProps['onClick:control'].value,\n },\n {\n modelValue: localState.value,\n }\n ) as RMultipleFieldPropsWithEvents\n ) satisfies RMultipleFieldPropsWithEvents\n )\n const singleVariantRendererArgs = computed<SingleVariantSlotArgs<T>>(() => [\n {\n props: {\n 'modelValue': Array.isArray(localState.value) ? localState.value[0] : localState.value,\n 'onUpdate:model-value': (val: T | null | undefined) => setLocalState(val),\n 'onUpdate:modelValue': (val: T | null | undefined) => setLocalState(val),\n },\n add: () => {},\n isMultiAdd: false,\n },\n ])\n const composed = () => {\n const currentSingleVariantRendererArgs = singleVariantRendererArgs.value\n if (!Array.isArray(currentSingleVariantRendererArgs)) return null\n if ('read' === renderMode.value) {\n return h(RReadModeRenderer, rReadModeRendererBindings.value)\n } else if (isMultiple.value) {\n const singleVariant = toUnreactive(singleFieldRenderer)\n return h(RMultipleField, multipleVariantBindings.value, {\n 'single-variant': (...args: SingleVariantSlotArgs<T>) => singleVariant(...args),\n })\n } else {\n const singleVariant = toUnreactive(singleFieldRenderer)\n return singleVariant(...currentSingleVariantRendererArgs)\n }\n }\n return {\n localState,\n setLocalState,\n getLocalState,\n recomputeLocalState,\n composed,\n }\n}\n"],"names":["useFieldComposer","commonProps","stringifier","singleFieldRenderer","emit","onUpdateModelValueCamelProp","onUpdateModelValueKebabProp","modelValueRef","modelValueProp","nullIsValue","undefinedIsValue","onChange","callRefreshChoices","renderMode","multiple","choices","allowUnspecifiedChoices","label","density","className","style","to","href","menuIcon","active","theme","disabled","variant","prefix","persistentPlaceholder","suffix","role","focused","isMultiple","computed","localState","setLocalState","getLocalState","recomputeLocalState","useLocalState","rReadModeRendererBindings","stripUndefinedValuesFromObject","toValue","multipleVariantBindings","deepmerge","val","singleVariantRendererArgs","currentSingleVariantRendererArgs","h","RReadModeRenderer","singleVariant","toUnreactive","RMultipleField","args"],"mappings":"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"}
@@ -1,27 +1,27 @@
1
1
  import { useDefaults as Ht } from "vuetify";
2
- import { A as $t, B as $e, m as Wt, D as zt } from "./common-BeDAn4wu.mjs";
3
- import { u as Gt } from "./display-kAyhIPBH.mjs";
4
- import { u as Kt } from "./validation-DS3tTSk5.mjs";
2
+ import { A as $t, B as $e, b as Wt, D as zt } from "./common-DrsZRUoj.mjs";
3
+ import { u as Gt } from "./display-DCHGPqrW.mjs";
4
+ import { u as Kt } from "./validation-BobMyGeq.mjs";
5
5
  import { a as Jt, b as Qt, c as Xt, E as Yt } from "./exceptions-Bzt_Bw5_.mjs";
6
6
  import { v as s, i as Ve, h as Zt } from "./encoding-C1W2Cp3X-DzgQRCVx.mjs";
7
7
  import { l as ea } from "./index-CFtnmFDF.mjs";
8
- import { u as q } from "./useRender-BD1xw5zG.mjs";
9
- import { E as b, p as me, F as We, T as ze, S as ta, U as aa, L as ra, f as ye, x as na, d as et, i as U, h as oa, y as ia, s as C, r as je, q as ua, g as sa, v as la, z as ca } from "./utils-DqXWb-4f.mjs";
10
- import { m as K } from "./component-CjPpW_A2.mjs";
11
- import { g as J, p as da, a as tt, I as ce, m as fa, u as ma, b as ya } from "./elevation-CMzO50xm.mjs";
12
- import { i as xe, f as Ge, g as Be, h as pa, m as va, w as ha, j as ba, x as ga, y as Aa, b as Sa, k as Ra, R as Oa, p as Ea, l as Ca, E as Fa, c as ka, A as Pa, B as Va, n as ja, D as Ba, F as Ia, e as wa, L as xa } from "./display-CO0pTIEs.mjs";
13
- import { m as Ta, u as Da } from "./position-Ai5XksAO.mjs";
14
- import { d as Ma } from "./props-p4f5Pa5h.mjs";
15
- import { d as V, a as _a, C as le } from "./index-bXmNb9jX.mjs";
16
- import { h as Ua, g as qa, e as La, d as Na, f as Ha } from "./guards-B99p3BPj.mjs";
8
+ import { u as q } from "./useRender-CfNJA_8a.mjs";
9
+ import { E as b, p as me, F as We, T as ze, S as ta, U as aa, L as ra, f as ye, w as na, d as et, i as U, h as oa, x as ia, s as C, r as je, q as ua, g as sa, v as la, A as ca } from "./utils-D3ZGaTyv.mjs";
10
+ import { m as K } from "./component-DhEJuSE6.mjs";
11
+ import { g as J, p as da, a as tt, I as ce, m as fa, u as ma, b as ya } from "./elevation-j7bb-vGU.mjs";
12
+ import { i as xe, f as Ge, g as Be, h as pa, m as va, w as ha, j as ba, x as ga, y as Aa, b as Sa, k as Ra, R as Oa, p as Ea, l as Ca, E as Fa, c as ka, A as Pa, B as Va, n as ja, D as Ba, F as wa, e as Ia, L as xa } from "./display-BL-pquAI.mjs";
13
+ import { m as Ta, u as Da } from "./position-B9VPkbhU.mjs";
14
+ import { d as Ma } from "./props-Cjpc9pre.mjs";
15
+ import { d as V, a as _a, C as le } from "./index-B8OnsqN1.mjs";
16
+ import { h as Ua, g as qa, e as La, d as Na, f as Ha } from "./guards-Cby4QwzY.mjs";
17
17
  import { watch as v, computed as S, toValue as $a, shallowRef as Wa, triggerRef as Ke, warn as de, nextTick as at, h as P, defineComponent as za, ref as Ga, inject as Ka, provide as Ja, toRefs as Qa } from "vue";
18
18
  import { ResourcefulRecordScopedDisplaySymbol as Xa, ResourcefulRecordFormScopedDisplaySymbol as Ya } from "./symbols.mjs";
19
19
  import { l as Za, a as er } from "./ioc-Du_Tgg-1.mjs";
20
- import { S as ke } from "./index-BaWthszI.mjs";
21
- import { d as tr } from "./index-slHxe6b-.mjs";
20
+ import { S as ke } from "./index-C-PCfO1S.mjs";
21
+ import { d as tr } from "./index-VpcXNOpn.mjs";
22
22
  import { L as ar } from "./http-Crw0XAYj.mjs";
23
- import { I as rr, j as nr, J as or } from "./mdi-CqMJqgQi.mjs";
24
- import { V as ir } from "./VSheet-DnIfs-1c.mjs";
23
+ import { I as rr, h as nr, J as or } from "./mdi-BQSh-ess.mjs";
24
+ import { V as ir } from "./VSheet-DdygPJlo.mjs";
25
25
  const cn = ["read", "create", "update"];
26
26
  class rt {
27
27
  #e;
@@ -294,19 +294,19 @@ J()({
294
294
  } = Va(e), {
295
295
  positionClasses: B
296
296
  } = Da(e), {
297
- roundedClasses: I
297
+ roundedClasses: w
298
298
  } = ja(e), k = Ba(e, t);
299
299
  return q(() => {
300
- const c = e.link !== !1 && k.isLink.value, w = !e.disabled && e.link !== !1 && (e.link || k.isClickable.value), Q = c ? "a" : e.tag, X = !!(a.title || e.title != null), Y = !!(a.subtitle || e.subtitle != null), Z = X || Y, ee = !!(a.append || e.appendAvatar || e.appendIcon), te = !!(a.prepend || e.prependAvatar || e.prependIcon), ae = !!(a.image || e.image), re = Z || te || ee, ne = !!(a.text || e.text != null);
300
+ const c = e.link !== !1 && k.isLink.value, I = !e.disabled && e.link !== !1 && (e.link || k.isClickable.value), Q = c ? "a" : e.tag, X = !!(a.title || e.title != null), Y = !!(a.subtitle || e.subtitle != null), Z = X || Y, ee = !!(a.append || e.appendAvatar || e.appendIcon), te = !!(a.prepend || e.prependAvatar || e.prependIcon), ae = !!(a.image || e.image), re = Z || te || ee, ne = !!(a.text || e.text != null);
301
301
  return ta(b(Q, ra({
302
302
  class: ["v-card", {
303
303
  "v-card--disabled": e.disabled,
304
304
  "v-card--flat": e.flat,
305
305
  "v-card--hover": e.hover && !(e.disabled || e.flat),
306
- "v-card--link": w
307
- }, u.value, i.value, d.value, p.value, h.value, R.value, B.value, I.value, y.value, e.class],
306
+ "v-card--link": I
307
+ }, u.value, i.value, d.value, p.value, h.value, R.value, B.value, w.value, y.value, e.class],
308
308
  style: [l.value, m.value, F.value, e.style],
309
- onClick: w && k.navigate,
309
+ onClick: I && k.navigate,
310
310
  tabindex: e.disabled ? -1 : void 0
311
311
  }, k.linkProps), {
312
312
  default: () => {
@@ -323,7 +323,7 @@ J()({
323
323
  src: e.image
324
324
  }
325
325
  }
326
- }, a.image) : b(wa, {
326
+ }, a.image) : b(Ia, {
327
327
  key: "image-img",
328
328
  cover: !0,
329
329
  src: e.image
@@ -356,9 +356,9 @@ J()({
356
356
  }
357
357
  }), (L = a.default) == null ? void 0 : L.call(a), a.actions && b(dr, null, {
358
358
  default: a.actions
359
- }), Ia(w, "v-card")];
359
+ }), wa(I, "v-card")];
360
360
  }
361
- }), [[aa("ripple"), w && e.ripple]]);
361
+ }), [[aa("ripple"), I && e.ripple]]);
362
362
  }), {};
363
363
  }
364
364
  });
@@ -810,7 +810,7 @@ const {
810
810
  );
811
811
  var dt = (e) => {
812
812
  throw TypeError(e);
813
- }, Te = (e, t, a) => t.has(e) || dt("Cannot " + a), O = (e, t, a) => (Te(e, t, "read from private field"), a ? a.call(e) : t.get(e)), T = (e, t, a) => t.has(e) ? dt("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, a), j = (e, t, a, u) => (Te(e, t, "write to private field"), u ? u.call(e, a) : t.set(e, a), a), Ie = (e, t, a) => (Te(e, t, "access private method"), a), W, _, D, fe, z, G, Xe, we;
813
+ }, Te = (e, t, a) => t.has(e) || dt("Cannot " + a), O = (e, t, a) => (Te(e, t, "read from private field"), a ? a.call(e) : t.get(e)), T = (e, t, a) => t.has(e) ? dt("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, a), j = (e, t, a, u) => (Te(e, t, "write to private field"), u ? u.call(e, a) : t.set(e, a), a), we = (e, t, a) => (Te(e, t, "access private method"), a), W, _, D, fe, z, G, Xe, Ie;
814
814
  class kr {
815
815
  /**
816
816
  * Create a new Runner instance
@@ -889,7 +889,7 @@ class kr {
889
889
  * ```
890
890
  */
891
891
  async run(...t) {
892
- return Ie(this, G, we).call(this, !1, t);
892
+ return we(this, G, Ie).call(this, !1, t);
893
893
  }
894
894
  /**
895
895
  * Execute hook handlers in reverse order (last registered handler runs first).
@@ -907,7 +907,7 @@ class kr {
907
907
  * ```
908
908
  */
909
909
  async runReverse(...t) {
910
- return Ie(this, G, we).call(this, !0, t);
910
+ return we(this, G, Ie).call(this, !0, t);
911
911
  }
912
912
  /**
913
913
  * Execute all collected cleanup handlers in reverse order.
@@ -951,12 +951,12 @@ W = /* @__PURE__ */ new WeakMap(), _ = /* @__PURE__ */ new WeakMap(), D = /* @__
951
951
  */
952
952
  Xe = function(e) {
953
953
  return !O(this, fe).includes(e);
954
- }, we = async function(e, t) {
954
+ }, Ie = async function(e, t) {
955
955
  if (O(this, D) !== "idle" || (j(this, D, "cleanup_pending"), O(this, z)))
956
956
  return;
957
957
  const a = e ? Array.from(O(this, W)).reverse() : O(this, W);
958
958
  for (let u of a)
959
- if (Ie(this, G, Xe).call(this, u.name)) {
959
+ if (we(this, G, Xe).call(this, u.name)) {
960
960
  const i = await (typeof u == "function" ? u(...t) : u.handle(this.action, ...t));
961
961
  typeof i == "function" && O(this, _).push(i);
962
962
  }
@@ -1242,7 +1242,7 @@ const An = (e, t, a) => S(
1242
1242
  disabled: d.value || l.value
1243
1243
  },
1244
1244
  onClick: R
1245
- })), I = S(() => ({
1245
+ })), w = S(() => ({
1246
1246
  ...t.value,
1247
1247
  ...C({
1248
1248
  cta: F("general.refresh"),
@@ -1268,7 +1268,7 @@ const An = (e, t, a) => S(
1268
1268
  onClick: m
1269
1269
  }));
1270
1270
  return S(
1271
- () => e.value === "read" || p.value ? [P(le, I.value)] : [
1271
+ () => e.value === "read" || p.value ? [P(le, w.value)] : [
1272
1272
  P(le, k.value),
1273
1273
  P(le, {
1274
1274
  ...B.value,
@@ -1335,7 +1335,7 @@ const An = (e, t, a) => S(
1335
1335
  })
1336
1336
  ), !0;
1337
1337
  }
1338
- }, Ir = (e, t, a, u, i, d = async () => {
1338
+ }, wr = (e, t, a, u, i, d = async () => {
1339
1339
  }) => {
1340
1340
  const l = Wa(
1341
1341
  Ye(e.value, d)
@@ -1357,7 +1357,7 @@ const An = (e, t, a) => S(
1357
1357
  100
1358
1358
  );
1359
1359
  v(e, y, { immediate: !0 }), v(u, p, { immediate: !0, deep: !0 });
1360
- }, wr = (e, t, a, u, i, d, l, y, p, m, h, R, F, B, I, k) => {
1360
+ }, Ir = (e, t, a, u, i, d, l, y, p, m, h, R, F, B, w, k) => {
1361
1361
  const c = new Pr();
1362
1362
  return Object.entries(ct).forEach(([o]) => {
1363
1363
  const n = o;
@@ -1486,7 +1486,7 @@ const An = (e, t, a) => S(
1486
1486
  },
1487
1487
  { immediate: !0 }
1488
1488
  ), v(
1489
- I,
1489
+ w,
1490
1490
  (o, n) => {
1491
1491
  Array.isArray(n) && n.forEach((r) => {
1492
1492
  c.remove("state:errorBag", r);
@@ -1762,10 +1762,10 @@ const An = (e, t, a) => S(
1762
1762
  callOnSubmitted: R,
1763
1763
  callOnSuccess: F,
1764
1764
  callOnFailure: B,
1765
- callOnException: I,
1765
+ callOnException: w,
1766
1766
  callOnSubmittingStateChange: k,
1767
1767
  callOnValidatingStateChange: c,
1768
- callOnTouchedStateChange: w,
1768
+ callOnTouchedStateChange: I,
1769
1769
  callOnDirtyStateChange: Q,
1770
1770
  callOnValidStateChange: X,
1771
1771
  callOnPendingStateChange: Y,
@@ -1812,25 +1812,25 @@ const An = (e, t, a) => S(
1812
1812
  onStatePending: Vt,
1813
1813
  onStateErrors: jt,
1814
1814
  onStateErrorBag: Bt,
1815
- onStateSubmitCount: It
1816
- } = wr(
1815
+ onStateSubmitCount: wt
1816
+ } = Ir(
1817
1817
  e,
1818
1818
  a,
1819
1819
  h,
1820
1820
  R,
1821
1821
  F,
1822
1822
  B,
1823
- I,
1823
+ w,
1824
1824
  k,
1825
1825
  c,
1826
- w,
1826
+ I,
1827
1827
  Q,
1828
1828
  X,
1829
1829
  Y,
1830
1830
  Z,
1831
1831
  ee,
1832
1832
  te
1833
- ), wt = xr(
1833
+ ), It = xr(
1834
1834
  De,
1835
1835
  Me,
1836
1836
  St,
@@ -1883,7 +1883,7 @@ const An = (e, t, a) => S(
1883
1883
  } = Kt(
1884
1884
  n,
1885
1885
  Ue,
1886
- wt,
1886
+ It,
1887
1887
  p,
1888
1888
  m,
1889
1889
  _e,
@@ -1928,7 +1928,7 @@ const An = (e, t, a) => S(
1928
1928
  doRefreshChoices: o.value
1929
1929
  })
1930
1930
  );
1931
- Ir(d, vt, ht, Ce, H), v(
1931
+ wr(d, vt, ht, Ce, H), v(
1932
1932
  L,
1933
1933
  (A, g) => {
1934
1934
  Je(g) && (g.off("doFormSubmit", qe), g.off("doResetForm", Fe), g.off("setFieldValue", oe), g.off("setValues", H), g.off("setFieldTouched", ie), g.off("setTouched", $), g.off("validate", ue), g.off("validateField", se), g.off("forceUpdateSchema", Le), g.off("forceUpdateInitialValues", Ne)), Je(A) && (A.on("doFormSubmit", qe), A.on("doResetForm", Fe), A.on("setFieldValue", oe), A.on("setValues", H), A.on("setFieldTouched", ie), A.on("setTouched", $), A.on("validate", ue), A.on("validateField", se), A.on("forceUpdateSchema", Le), A.on("forceUpdateInitialValues", Ne));
@@ -1970,7 +1970,7 @@ const An = (e, t, a) => S(
1970
1970
  g.reset();
1971
1971
  });
1972
1972
  };
1973
- return v(ve, jt), v(he, Bt), v(be, Et), v(ge, Ct), v(Ae, Ft), v(Se, kt), v(Re, Pt), v(Oe, Vt), v(Ee, It), {
1973
+ return v(ve, jt), v(he, Bt), v(be, Et), v(ge, Ct), v(Ae, Ft), v(Se, kt), v(Re, Pt), v(Oe, Vt), v(Ee, wt), {
1974
1974
  formErrors: ve,
1975
1975
  formErrorBag: he,
1976
1976
  formIsSubmitting: be,
@@ -2009,4 +2009,4 @@ export {
2009
2009
  gn as r,
2010
2010
  Fn as u
2011
2011
  };
2012
- //# sourceMappingURL=form-CDLcDPyU.mjs.map
2012
+ //# sourceMappingURL=form-CFjPqvRf.mjs.map