@nhtio/lucid-resourceful-vue-components 0.1.0-master-e14740ea → 0.1.0-master-dc6af70b

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 (156) hide show
  1. package/{VBtn-DhfYEt9V.mjs → VBtn-CEYzcx0y.mjs} +8 -8
  2. package/{VBtn-DhfYEt9V.mjs.map → VBtn-CEYzcx0y.mjs.map} +1 -1
  3. package/{VDatePicker-D0OTAyvJ.mjs → VDatePicker-BHcvHHhM.mjs} +133 -133
  4. package/{VDatePicker-D0OTAyvJ.mjs.map → VDatePicker-BHcvHHhM.mjs.map} +1 -1
  5. package/{VEmptyState-BFrXSTJ-.mjs → VEmptyState-CkYtN0q5.mjs} +84 -84
  6. package/{VEmptyState-BFrXSTJ-.mjs.map → VEmptyState-CkYtN0q5.mjs.map} +1 -1
  7. package/{VHover-DLvOmsjv.mjs → VHover-Bj6QrQff.mjs} +3 -3
  8. package/{VHover-DLvOmsjv.mjs.map → VHover-Bj6QrQff.mjs.map} +1 -1
  9. package/{VListItem-LNaoM8S4.mjs → VListItem-BnxAmKd_.mjs} +55 -55
  10. package/{VListItem-LNaoM8S4.mjs.map → VListItem-BnxAmKd_.mjs.map} +1 -1
  11. package/{VMenu-9rTbTKtH.mjs → VMenu-BSB7YSpb.mjs} +28 -28
  12. package/{VMenu-9rTbTKtH.mjs.map → VMenu-BSB7YSpb.mjs.map} +1 -1
  13. package/{VPicker-BGuRD0KW.mjs → VPicker-DMOVvCIE.mjs} +5 -5
  14. package/{VPicker-BGuRD0KW.mjs.map → VPicker-DMOVvCIE.mjs.map} +1 -1
  15. package/{VRadioGroup-Dx_wEqzl.mjs → VRadioGroup-ByydeX8x.mjs} +21 -21
  16. package/{VRadioGroup-Dx_wEqzl.mjs.map → VRadioGroup-ByydeX8x.mjs.map} +1 -1
  17. package/{VRow-DaLdbIGw.mjs → VRow-Dmn82Xaa.mjs} +18 -18
  18. package/{VRow-DaLdbIGw.mjs.map → VRow-Dmn82Xaa.mjs.map} +1 -1
  19. package/{VSheet-DnIfs-1c.mjs → VSheet-B9ALb0PQ.mjs} +14 -14
  20. package/{VSheet-DnIfs-1c.mjs.map → VSheet-B9ALb0PQ.mjs.map} +1 -1
  21. package/{actions-8bWGsB-p.mjs → actions-BEmdy8bu.mjs} +11 -11
  22. package/{actions-8bWGsB-p.mjs.map → actions-BEmdy8bu.mjs.map} +1 -1
  23. package/{alert-IW1AIWZw.mjs → alert-DftADRGk.mjs} +13 -13
  24. package/{alert-IW1AIWZw.mjs.map → alert-DftADRGk.mjs.map} +1 -1
  25. package/{bigint-Jmfa2L4S.mjs → bigint-DiC37zMo.mjs} +6 -6
  26. package/{bigint-Jmfa2L4S.mjs.map → bigint-DiC37zMo.mjs.map} +1 -1
  27. package/{boolean-BEY7eBxf.mjs → boolean-DZDryWHA.mjs} +74 -74
  28. package/{boolean-BEY7eBxf.mjs.map → boolean-DZDryWHA.mjs.map} +1 -1
  29. package/{clipboard-BoKd7mFG.mjs → clipboard--JAZokR3.mjs} +14 -14
  30. package/{clipboard-BoKd7mFG.mjs.map → clipboard--JAZokR3.mjs.map} +1 -1
  31. package/{colorUtils-DmtKYNgW.mjs → colorUtils-I1lKouL3.mjs} +3 -3
  32. package/{colorUtils-DmtKYNgW.mjs.map → colorUtils-I1lKouL3.mjs.map} +1 -1
  33. package/{common-BeDAn4wu.mjs → common-BDwb9uGU.mjs} +8881 -8880
  34. package/common-BDwb9uGU.mjs.map +1 -0
  35. package/{component-CjPpW_A2.mjs → component-C-qp70Rp.mjs} +2 -2
  36. package/{component-CjPpW_A2.mjs.map → component-C-qp70Rp.mjs.map} +1 -1
  37. package/components/autorefresh_controller.mjs +1 -1
  38. package/components/control_button.mjs +1 -1
  39. package/components/control_button_bar.mjs +2 -2
  40. package/components/control_menu.mjs +1 -1
  41. package/components/custom_field.mjs +1 -1
  42. package/components/exporter.mjs +1 -1
  43. package/components/fields/bigint.mjs +1 -1
  44. package/components/fields/boolean.mjs +1 -1
  45. package/components/fields/date.mjs +1 -1
  46. package/components/fields/date_time.mjs +1 -1
  47. package/components/fields/enum.mjs +1 -1
  48. package/components/fields/integer.mjs +1 -1
  49. package/components/fields/number.mjs +1 -1
  50. package/components/fields/string.mjs +1 -1
  51. package/components/fields/unsigned_integer.mjs +1 -1
  52. package/components/fields.mjs +9 -9
  53. package/components/form_with_validation.mjs +1 -1
  54. package/components/resourceful_alerter.mjs +1 -1
  55. package/components/resourceful_index.mjs +1 -1
  56. package/components/resourceful_record.mjs +2 -2
  57. package/components/resourceful_record_default_form.mjs +1 -1
  58. package/components/resourceful_record_form.mjs +1 -1
  59. package/components/sortable.mjs +1 -1
  60. package/components/svg_icon.mjs +1 -1
  61. package/components/timezone_picker.mjs +1 -1
  62. package/components.mjs +23 -23
  63. package/composables.mjs +11 -11
  64. package/{console-CRXioSFP.mjs → console-CAez8ceh.mjs} +2 -2
  65. package/{console-CRXioSFP.mjs.map → console-CAez8ceh.mjs.map} +1 -1
  66. package/{custom-Y1WJVKP9.mjs → custom-Tm6_792A.mjs} +12 -12
  67. package/{custom-Y1WJVKP9.mjs.map → custom-Tm6_792A.mjs.map} +1 -1
  68. package/{date-BxEeCNWD.mjs → date-CxaBVvlO.mjs} +10 -10
  69. package/{date-BxEeCNWD.mjs.map → date-CxaBVvlO.mjs.map} +1 -1
  70. package/{date_time-6kpv7eDF.mjs → date_time-DhABUkGT.mjs} +169 -169
  71. package/{date_time-6kpv7eDF.mjs.map → date_time-DhABUkGT.mjs.map} +1 -1
  72. package/{display-DvzWa1QO.mjs → display-BdjbLG1_.mjs} +32 -32
  73. package/{display-DvzWa1QO.mjs.map → display-BdjbLG1_.mjs.map} +1 -1
  74. package/{display-CO0pTIEs.mjs → display-DPktlWOz.mjs} +42 -42
  75. package/{display-CO0pTIEs.mjs.map → display-DPktlWOz.mjs.map} +1 -1
  76. package/{display-kAyhIPBH.mjs → display-DazBkrbZ.mjs} +7 -7
  77. package/{display-kAyhIPBH.mjs.map → display-DazBkrbZ.mjs.map} +1 -1
  78. package/{elevation-CMzO50xm.mjs → elevation-DFBVIqom.mjs} +56 -56
  79. package/{elevation-CMzO50xm.mjs.map → elevation-DFBVIqom.mjs.map} +1 -1
  80. package/{enum-noYU2Cqh.mjs → enum-KB4xPkOL.mjs} +9 -9
  81. package/{enum-noYU2Cqh.mjs.map → enum-KB4xPkOL.mjs.map} +1 -1
  82. package/factories.mjs +1 -1
  83. package/{field_composer-DpJx0Oz1.mjs → field_composer-CLJuJevf.mjs} +7 -7
  84. package/{field_composer-DpJx0Oz1.mjs.map → field_composer-CLJuJevf.mjs.map} +1 -1
  85. package/{form-CDLcDPyU.mjs → form-9YRVcrxM.mjs} +17 -17
  86. package/{form-CDLcDPyU.mjs.map → form-9YRVcrxM.mjs.map} +1 -1
  87. package/{guards-B99p3BPj.mjs → guards-BrpRx6ly.mjs} +2 -2
  88. package/{guards-B99p3BPj.mjs.map → guards-BrpRx6ly.mjs.map} +1 -1
  89. package/guards.mjs +4 -4
  90. package/helpers.mjs +6 -6
  91. package/{index-B2rKM3mR.mjs → index-BaOM0Cyz.mjs} +8 -8
  92. package/{index-B2rKM3mR.mjs.map → index-BaOM0Cyz.mjs.map} +1 -1
  93. package/{index-C9UuBVyI.mjs → index-BkjiQEyJ.mjs} +12 -12
  94. package/{index-C9UuBVyI.mjs.map → index-BkjiQEyJ.mjs.map} +1 -1
  95. package/{index-slHxe6b-.mjs → index-Bs4A8qUO.mjs} +2 -2
  96. package/{index-slHxe6b-.mjs.map → index-Bs4A8qUO.mjs.map} +1 -1
  97. package/{index-BUpccfIz.mjs → index-BsazeUn6.mjs} +3 -3
  98. package/{index-BUpccfIz.mjs.map → index-BsazeUn6.mjs.map} +1 -1
  99. package/{index-BaWthszI.mjs → index-CWwCXXNl.mjs} +2 -2
  100. package/{index-BaWthszI.mjs.map → index-CWwCXXNl.mjs.map} +1 -1
  101. package/{index-Bi050X9r.mjs → index-DBXOwXpe.mjs} +6 -6
  102. package/{index-Bi050X9r.mjs.map → index-DBXOwXpe.mjs.map} +1 -1
  103. package/{index-CzI9mHIx.mjs → index-DDobJ49b.mjs} +7 -7
  104. package/{index-CzI9mHIx.mjs.map → index-DDobJ49b.mjs.map} +1 -1
  105. package/{index-CIvylvfa.mjs → index-DwOjHbRP.mjs} +44 -44
  106. package/{index-CIvylvfa.mjs.map → index-DwOjHbRP.mjs.map} +1 -1
  107. package/{index-bXmNb9jX.mjs → index-UxsEIZVi.mjs} +4 -4
  108. package/{index-bXmNb9jX.mjs.map → index-UxsEIZVi.mjs.map} +1 -1
  109. package/index.mjs +47 -47
  110. package/{integer-BIJ4_I8y.mjs → integer-uzh0nwpb.mjs} +3 -3
  111. package/{integer-BIJ4_I8y.mjs.map → integer-uzh0nwpb.mjs.map} +1 -1
  112. package/{mdi-CqMJqgQi.mjs → mdi-C9DbASEx.mjs} +40 -40
  113. package/{mdi-CqMJqgQi.mjs.map → mdi-C9DbASEx.mjs.map} +1 -1
  114. package/{number-z_LAINPM.mjs → number-CfHLDQFY.mjs} +28 -28
  115. package/{number-z_LAINPM.mjs.map → number-CfHLDQFY.mjs.map} +1 -1
  116. package/package.json +46 -46
  117. package/{position-Ai5XksAO.mjs → position-CPuNp03H.mjs} +2 -2
  118. package/{position-Ai5XksAO.mjs.map → position-CPuNp03H.mjs.map} +1 -1
  119. package/{props-BYX22zcE.mjs → props-Cq9daNwa.mjs} +4 -4
  120. package/{props-BYX22zcE.mjs.map → props-Cq9daNwa.mjs.map} +1 -1
  121. package/{props-p4f5Pa5h.mjs → props-KPFuptNy.mjs} +8 -8
  122. package/{props-p4f5Pa5h.mjs.map → props-KPFuptNy.mjs.map} +1 -1
  123. package/{renderers-BKUvrrVm.mjs → renderers-COT3aAu3.mjs} +13 -13
  124. package/{renderers-BKUvrrVm.mjs.map → renderers-COT3aAu3.mjs.map} +1 -1
  125. package/{string-Dmr8SRMf.mjs → string-DvwPf_Ob.mjs} +61 -61
  126. package/{string-Dmr8SRMf.mjs.map → string-DvwPf_Ob.mjs.map} +1 -1
  127. package/{unsigned_integer-BliPiCXO.mjs → unsigned_integer-C9nrNAn_.mjs} +4 -4
  128. package/{unsigned_integer-BliPiCXO.mjs.map → unsigned_integer-C9nrNAn_.mjs.map} +1 -1
  129. package/useRender-Dpj9Jrbr.mjs +9 -0
  130. package/{useRender-BD1xw5zG.mjs.map → useRender-Dpj9Jrbr.mjs.map} +1 -1
  131. package/{utils-DqXWb-4f.mjs → utils-DxV2ZNaE.mjs} +10 -10
  132. package/{utils-DqXWb-4f.mjs.map → utils-DxV2ZNaE.mjs.map} +1 -1
  133. package/{validation-DS3tTSk5.mjs → validation-CZ6xx4aX.mjs} +4 -4
  134. package/{validation-DS3tTSk5.mjs.map → validation-CZ6xx4aX.mjs.map} +1 -1
  135. package/VBtn.css +0 -1
  136. package/VDatePicker.css +0 -1
  137. package/VEmptyState.css +0 -1
  138. package/VListItem.css +0 -1
  139. package/VMenu.css +0 -1
  140. package/VPicker.css +0 -1
  141. package/VRadioGroup.css +0 -1
  142. package/VSheet.css +0 -1
  143. package/actions.css +0 -1
  144. package/boolean.css +0 -1
  145. package/clipboard.css +0 -1
  146. package/common-BeDAn4wu.mjs.map +0 -1
  147. package/common.css +0 -1
  148. package/date_time.css +0 -1
  149. package/display.css +0 -1
  150. package/display2.css +0 -1
  151. package/elevation.css +0 -1
  152. package/index.css +0 -1
  153. package/mdi.css +0 -1
  154. package/number.css +0 -1
  155. package/string.css +0 -1
  156. 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-KB4xPkOL.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, b as e, a as p, p as t } from "./utils-DxV2ZNaE.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-BDwb9uGU.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-DxV2ZNaE.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-CLJuJevf.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-CLJuJevf.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-BDwb9uGU.mjs";
3
+ import { u as Gt } from "./display-DazBkrbZ.mjs";
4
+ import { u as Kt } from "./validation-CZ6xx4aX.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-Dpj9Jrbr.mjs";
9
+ import { E as b, p as me, F as We, T as ze, S as ta, U as aa, L as ra, b as ye, x as na, a 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, A as ca } from "./utils-DxV2ZNaE.mjs";
10
+ import { m as K } from "./component-C-qp70Rp.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-DFBVIqom.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-DPktlWOz.mjs";
13
+ import { m as Ta, u as Da } from "./position-CPuNp03H.mjs";
14
+ import { d as Ma } from "./props-KPFuptNy.mjs";
15
+ import { d as V, a as _a, C as le } from "./index-UxsEIZVi.mjs";
16
+ import { h as Ua, g as qa, e as La, d as Na, f as Ha } from "./guards-BrpRx6ly.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-CWwCXXNl.mjs";
21
+ import { d as tr } from "./index-Bs4A8qUO.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, j as nr, J as or } from "./mdi-C9DbASEx.mjs";
24
+ import { V as ir } from "./VSheet-B9ALb0PQ.mjs";
25
25
  const cn = ["read", "create", "update"];
26
26
  class rt {
27
27
  #e;
@@ -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-9YRVcrxM.mjs.map