@nhtio/lucid-resourceful-vue-components 0.1.0-master-ebe57eab → 0.1.0-master-fd238c08

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 (147) hide show
  1. package/{VChip-1IMgN2NW.mjs → VChip-BslsWQfv.mjs} +2 -2
  2. package/{VChip-1IMgN2NW.mjs.map → VChip-BslsWQfv.mjs.map} +1 -1
  3. package/{VDatePicker-D3Y6VAGq.mjs → VDatePicker-QkOhEsiJ.mjs} +4 -4
  4. package/{VDatePicker-D3Y6VAGq.mjs.map → VDatePicker-QkOhEsiJ.mjs.map} +1 -1
  5. package/{VDialog-uKUuB6Ni.mjs → VDialog-CYWIsqyU.mjs} +3 -3
  6. package/{VDialog-uKUuB6Ni.mjs.map → VDialog-CYWIsqyU.mjs.map} +1 -1
  7. package/{VEmptyState-B5x_wEth.mjs → VEmptyState-DSkV3rdW.mjs} +2 -2
  8. package/{VEmptyState-B5x_wEth.mjs.map → VEmptyState-DSkV3rdW.mjs.map} +1 -1
  9. package/{VHover-DaqmIqJM.mjs → VHover-B2PK8R1R.mjs} +3 -3
  10. package/{VHover-DaqmIqJM.mjs.map → VHover-B2PK8R1R.mjs.map} +1 -1
  11. package/{VListItem-TG9oZPkm.mjs → VListItem-B2LElOLe.mjs} +3 -3
  12. package/{VListItem-TG9oZPkm.mjs.map → VListItem-B2LElOLe.mjs.map} +1 -1
  13. package/{VMenu-DbIG2Qhi.mjs → VMenu-CahiNXXZ.mjs} +3 -3
  14. package/{VMenu-DbIG2Qhi.mjs.map → VMenu-CahiNXXZ.mjs.map} +1 -1
  15. package/{VPicker-kVsex0W4.mjs → VPicker-DC_wz1Zr.mjs} +4 -4
  16. package/{VPicker-kVsex0W4.mjs.map → VPicker-DC_wz1Zr.mjs.map} +1 -1
  17. package/{VRadioGroup-DrU5JyGR.mjs → VRadioGroup-DMKik9Cu.mjs} +4 -4
  18. package/{VRadioGroup-DrU5JyGR.mjs.map → VRadioGroup-DMKik9Cu.mjs.map} +1 -1
  19. package/{VRow-cmYZqXOu.mjs → VRow-7oNLItQM.mjs} +2 -2
  20. package/{VRow-cmYZqXOu.mjs.map → VRow-7oNLItQM.mjs.map} +1 -1
  21. package/{VSheet-D_4R07YK.mjs → VSheet-DqbTSvsm.mjs} +2 -2
  22. package/{VSheet-D_4R07YK.mjs.map → VSheet-DqbTSvsm.mjs.map} +1 -1
  23. package/{actions-eZjKpI2f.mjs → actions-nnJGlDWx.mjs} +12 -12
  24. package/{actions-eZjKpI2f.mjs.map → actions-nnJGlDWx.mjs.map} +1 -1
  25. package/{alert-X_y7N0k5.mjs → alert-BXbhLNkg.mjs} +11 -11
  26. package/{alert-X_y7N0k5.mjs.map → alert-BXbhLNkg.mjs.map} +1 -1
  27. package/{bigint-BMjZO-KA.mjs → bigint-S8oJ2u2Y.mjs} +7 -7
  28. package/{bigint-BMjZO-KA.mjs.map → bigint-S8oJ2u2Y.mjs.map} +1 -1
  29. package/{boolean-BxVw3woA.mjs → boolean-BoaSL5pb.mjs} +10 -10
  30. package/{boolean-BxVw3woA.mjs.map → boolean-BoaSL5pb.mjs.map} +1 -1
  31. package/{clipboard-DRlt84JQ.mjs → clipboard-B4T3iSwL.mjs} +7 -7
  32. package/{clipboard-DRlt84JQ.mjs.map → clipboard-B4T3iSwL.mjs.map} +1 -1
  33. package/{common-Pv2k5d5L.mjs → common-crxptQS0.mjs} +15 -15
  34. package/{common-Pv2k5d5L.mjs.map → common-crxptQS0.mjs.map} +1 -1
  35. package/components/autorefresh_controller.mjs +1 -1
  36. package/components/control_button.mjs +1 -1
  37. package/components/control_button_bar.mjs +2 -2
  38. package/components/control_menu.mjs +1 -1
  39. package/components/custom_field.mjs +1 -1
  40. package/components/exporter.mjs +1 -1
  41. package/components/fields/bigint.mjs +1 -1
  42. package/components/fields/boolean.mjs +1 -1
  43. package/components/fields/date.mjs +1 -1
  44. package/components/fields/date_time.mjs +1 -1
  45. package/components/fields/enum.mjs +1 -1
  46. package/components/fields/integer.mjs +1 -1
  47. package/components/fields/number.mjs +1 -1
  48. package/components/fields/string.mjs +1 -1
  49. package/components/fields/unsigned_integer.mjs +1 -1
  50. package/components/fields.mjs +9 -9
  51. package/components/form_with_validation.mjs +1 -1
  52. package/components/resourceful_alerter.mjs +1 -1
  53. package/components/resourceful_index.mjs +1 -1
  54. package/components/resourceful_record.mjs +2 -2
  55. package/components/resourceful_record_default_form.mjs +1 -1
  56. package/components/resourceful_record_form.mjs +1 -1
  57. package/components/sortable.mjs +1 -1
  58. package/components/svg_icon.mjs +1 -1
  59. package/components/timezone_picker.mjs +1 -1
  60. package/components.mjs +23 -23
  61. package/composables.mjs +11 -11
  62. package/{custom-CorsNQ6V.mjs → custom-1zSxQhfh.mjs} +7 -7
  63. package/{custom-CorsNQ6V.mjs.map → custom-1zSxQhfh.mjs.map} +1 -1
  64. package/{date-CUv4AD1k.mjs → date-BaVQ-B5p.mjs} +10 -10
  65. package/{date-CUv4AD1k.mjs.map → date-BaVQ-B5p.mjs.map} +1 -1
  66. package/{date_time-DUPA8gK_.mjs → date_time-C2eWcsmU.mjs} +18 -18
  67. package/{date_time-DUPA8gK_.mjs.map → date_time-C2eWcsmU.mjs.map} +1 -1
  68. package/{display-DtPqxGxo.mjs → display-2uHLu-iA.mjs} +4 -4
  69. package/{display-DtPqxGxo.mjs.map → display-2uHLu-iA.mjs.map} +1 -1
  70. package/{display-CdPzCNpa.mjs → display-D19CpJw_.mjs} +3 -3
  71. package/{display-CdPzCNpa.mjs.map → display-D19CpJw_.mjs.map} +1 -1
  72. package/{enum-B2yaUE-A.mjs → enum-BshWH7_8.mjs} +9 -9
  73. package/{enum-B2yaUE-A.mjs.map → enum-BshWH7_8.mjs.map} +1 -1
  74. package/{exceptions-BYmapqhE.mjs → exceptions-K8eRFe_u.mjs} +2 -2
  75. package/{exceptions-BYmapqhE.mjs.map → exceptions-K8eRFe_u.mjs.map} +1 -1
  76. package/exceptions.mjs +2 -2
  77. package/factories.d.ts +1 -0
  78. package/factories.mjs +4 -2
  79. package/{field_composer-CUv8W3Tg.mjs → field_composer-BZoOWQ1U.mjs} +3 -3
  80. package/{field_composer-CUv8W3Tg.mjs.map → field_composer-BZoOWQ1U.mjs.map} +1 -1
  81. package/{form-zBaGUnUi.mjs → form-JY-hIKBm.mjs} +15 -16
  82. package/form-JY-hIKBm.mjs.map +1 -0
  83. package/{guards-DaiwJBYO.mjs → guards-DZPvWy_4.mjs} +3 -3
  84. package/guards-DZPvWy_4.mjs.map +1 -0
  85. package/guards.mjs +4 -4
  86. package/helpers.mjs +9 -9
  87. package/{http-Cxynx5pW.mjs → http-BbIZXN2x.mjs} +2 -2
  88. package/{http-Cxynx5pW.mjs.map → http-BbIZXN2x.mjs.map} +1 -1
  89. package/{http-BCXJjieC.mjs → http-pGFfofl9.mjs} +6 -3
  90. package/http-pGFfofl9.mjs.map +1 -0
  91. package/http.mjs +1 -1
  92. package/{index-BobM-vEI.mjs → index-BitVUrFg.mjs} +3 -3
  93. package/{index-BobM-vEI.mjs.map → index-BitVUrFg.mjs.map} +1 -1
  94. package/{index-BSGSQUvi.mjs → index-C7w5RPS8.mjs} +6 -6
  95. package/{index-BSGSQUvi.mjs.map → index-C7w5RPS8.mjs.map} +1 -1
  96. package/{index-1tiFk-z8.mjs → index-CZJ2FcjP.mjs} +2 -2
  97. package/{index-1tiFk-z8.mjs.map → index-CZJ2FcjP.mjs.map} +1 -1
  98. package/{index-Cp6PZ6jr.mjs → index-DHeWMCWw.mjs} +8 -8
  99. package/{index-Cp6PZ6jr.mjs.map → index-DHeWMCWw.mjs.map} +1 -1
  100. package/{index-Bux_9EQY.mjs → index-DiBGKnUB.mjs} +8 -8
  101. package/{index-Bux_9EQY.mjs.map → index-DiBGKnUB.mjs.map} +1 -1
  102. package/{index-CV-VR5ZN.mjs → index-Dl9jfPgI.mjs} +43 -43
  103. package/{index-CV-VR5ZN.mjs.map → index-Dl9jfPgI.mjs.map} +1 -1
  104. package/{index-otVKzohl.mjs → index-Dy1kohCE.mjs} +28 -19
  105. package/index-Dy1kohCE.mjs.map +1 -0
  106. package/{index-DGYeadWj.mjs → index-JGVXuda6.mjs} +4 -4
  107. package/{index-DGYeadWj.mjs.map → index-JGVXuda6.mjs.map} +1 -1
  108. package/{index-CfWOKNEo.mjs → index-dcZGsFwf.mjs} +3 -3
  109. package/{index-CfWOKNEo.mjs.map → index-dcZGsFwf.mjs.map} +1 -1
  110. package/{index-CzhpetTi.mjs → index-lUBFKgIk.mjs} +8 -8
  111. package/{index-CzhpetTi.mjs.map → index-lUBFKgIk.mjs.map} +1 -1
  112. package/index.mjs +40 -38
  113. package/{integer-BWKYSF5I.mjs → integer-DGV22mIh.mjs} +3 -3
  114. package/{integer-BWKYSF5I.mjs.map → integer-DGV22mIh.mjs.map} +1 -1
  115. package/{ioc-BRFP3w6U.mjs → ioc-CbjgKkoq.mjs} +2 -2
  116. package/{ioc-BRFP3w6U.mjs.map → ioc-CbjgKkoq.mjs.map} +1 -1
  117. package/ioc.mjs +1 -1
  118. package/{mdi-B06yTfXf.mjs → mdi-Kxmy15-q.mjs} +2 -2
  119. package/{mdi-B06yTfXf.mjs.map → mdi-Kxmy15-q.mjs.map} +1 -1
  120. package/{number-CV-ilUSy.mjs → number-ChyJi9k7.mjs} +8 -8
  121. package/{number-CV-ilUSy.mjs.map → number-ChyJi9k7.mjs.map} +1 -1
  122. package/package.json +38 -38
  123. package/private/resourceful-record/index.d.ts +9 -0
  124. package/private/resourceful-record/props.d.ts +4 -0
  125. package/private/services/browser.d.ts +2 -0
  126. package/{props-CWgQDMLq.mjs → props-B2HHemO2.mjs} +4 -4
  127. package/{props-CWgQDMLq.mjs.map → props-B2HHemO2.mjs.map} +1 -1
  128. package/{props-BBBc7J1q.mjs → props-BPO1G4n5.mjs} +4 -4
  129. package/{props-BBBc7J1q.mjs.map → props-BPO1G4n5.mjs.map} +1 -1
  130. package/{renderers-BD7CrBqo.mjs → renderers-Dowye4Bl.mjs} +14 -14
  131. package/{renderers-BD7CrBqo.mjs.map → renderers-Dowye4Bl.mjs.map} +1 -1
  132. package/{string-CcynWgei.mjs → string-DOIj21u5.mjs} +13 -13
  133. package/{string-CcynWgei.mjs.map → string-DOIj21u5.mjs.map} +1 -1
  134. package/{unsigned_integer-D0FzKzNU.mjs → unsigned_integer-cQWXKTHG.mjs} +4 -4
  135. package/{unsigned_integer-D0FzKzNU.mjs.map → unsigned_integer-cQWXKTHG.mjs.map} +1 -1
  136. package/{utils-C_uOac-v.mjs → utils-Dh8-g-7s.mjs} +2 -2
  137. package/{utils-C_uOac-v.mjs.map → utils-Dh8-g-7s.mjs.map} +1 -1
  138. package/{validation-D1FwcMNA.mjs → validation-DBLJZW1_.mjs} +6 -6
  139. package/{validation-D1FwcMNA.mjs.map → validation-DBLJZW1_.mjs.map} +1 -1
  140. package/{vendor-nhtio-vuetifiable-Qm2uuc7r.mjs → vendor-nhtio-vuetifiable-CRAkpWr4.mjs} +7 -7
  141. package/{vendor-nhtio-vuetifiable-Qm2uuc7r.mjs.map → vendor-nhtio-vuetifiable-CRAkpWr4.mjs.map} +1 -1
  142. package/{vendor-xlsx-BeYuj8cp.mjs → vendor-xlsx-B1NmWxyx.mjs} +2 -2
  143. package/{vendor-xlsx-BeYuj8cp.mjs.map → vendor-xlsx-B1NmWxyx.mjs.map} +1 -1
  144. package/form-zBaGUnUi.mjs.map +0 -1
  145. package/guards-DaiwJBYO.mjs.map +0 -1
  146. package/http-BCXJjieC.mjs.map +0 -1
  147. package/index-otVKzohl.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
- import { a as propsFactory } from "./vendor-nhtio-vuetifiable-Qm2uuc7r.mjs";
1
+ import { a as propsFactory } from "./vendor-nhtio-vuetifiable-CRAkpWr4.mjs";
2
2
  import { defineComponent, toRefs, computed, camelize, h } from "vue";
3
- import { m as makeRIntegerFieldProps, R as RIntegerField } from "./integer-BWKYSF5I.mjs";
4
- import { r as rNumberFieldEmits } from "./number-CV-ilUSy.mjs";
3
+ import { m as makeRIntegerFieldProps, R as RIntegerField } from "./integer-DGV22mIh.mjs";
4
+ import { r as rNumberFieldEmits } from "./number-ChyJi9k7.mjs";
5
5
  const makeRUnsignedIntegerFieldProps = propsFactory(
6
6
  {
7
7
  ...makeRIntegerFieldProps()
@@ -46,4 +46,4 @@ const RUnsignedIntegerField = defineComponent({
46
46
  export {
47
47
  RUnsignedIntegerField as R
48
48
  };
49
- //# sourceMappingURL=unsigned_integer-D0FzKzNU.mjs.map
49
+ //# sourceMappingURL=unsigned_integer-cQWXKTHG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsigned_integer-D0FzKzNU.mjs","sources":["../src/private/fields/unsigned_integer.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Unsigned Integer Field\n|--------------------------------------------------------------------------\n|\n| A specialized unsigned integer input field component that wraps RIntegerField with\n| non-negative constraints and automatic min/max normalization for positive values only.\n|\n| **Key Features:**\n| - **Unsigned-Only Input**: Enforces min ≥ 0 through constraint normalization\n| - **RIntegerField Foundation**: Inherits integer constraints (precision: 0, step: 1)\n| - **Smart Constraint Normalization**: Automatically corrects negative min/max values\n| - **Clean Layered Architecture**: Builds on integer field with minimal additional logic\n| - **Multiple Mode**: Chip-based interface for unsigned integer arrays with formatted display\n| - **Read Mode**: Professional display with Oxford comma lists for multiple values\n| - **Advanced Controls**: Custom increment/decrement buttons with smart icon adaptation\n| - **Numeral.js Integration**: Professional formatting (thousands separators, custom patterns)\n|\n| **Inherited Features from RIntegerField:**\n| - Integer-only constraints (precision: 0, step: 1)\n| - Custom control variants (default, stacked, split, hidden)\n| - Icon customization (increment, decrement, collapse, expand)\n| - Min/max validation with visual feedback\n| - Advanced accessibility (keyboard navigation, ARIA support)\n| - Mobile-optimized touch controls\n| - Theme integration and zero custom CSS\n|\n| **Unsigned-Specific Behavior:**\n| - Forces `min ≥ 0` regardless of user input\n| - Negative min values automatically become 0\n| - Negative max values are ignored (set to undefined)\n| - Positive min/max constraints are preserved\n| - No silent value transformation - uses constraint validation instead\n|\n| **Usage Examples:**\n| ```vue\n| <!-- Single unsigned integer input -->\n| <RUnsignedIntegerField\n| v-model=\"quantity\"\n| label=\"Item Count\"\n| format=\"0,0\"\n| :min=\"1\"\n| :max=\"999999\"\n| control-variant=\"split\"\n| />\n|\n| <!-- Multiple unsigned integers -->\n| <RUnsignedIntegerField\n| v-model=\"ratings\"\n| multiple\n| label=\"Star Ratings\"\n| format=\"0,0\"\n| :min=\"1\"\n| :max=\"5\"\n| />\n|\n| <!-- Read-only display -->\n| <RUnsignedIntegerField\n| v-model=\"counts\"\n| multiple\n| label=\"Item Counts\"\n| format=\"0,0\"\n| render-mode=\"read\"\n| />\n| ```\n|\n| The component provides a clean API for unsigned integer input while automatically\n| handling constraint normalization and inheriting all advanced features from the\n| underlying RIntegerField and RNumberField implementations.\n*/\n\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { defineComponent, toRefs, computed, camelize, h } from 'vue'\nimport {\n RIntegerField,\n makeRIntegerFieldProps,\n rIntegerFieldEmits as rUnsignedIntegerFieldEmits,\n} from './integer'\nimport type { VNumberInputSlots } from './number'\nimport type { RIntegerFieldProps } from './integer'\nimport type { ExtractPublicPropTypes, SlotsType, ComponentPublicInstance } from 'vue'\n\n/**\n * Factory function to create props for RUnsignedIntegerField components.\n *\n * Creates a specialized prop set based on RIntegerField props with automatic\n * unsigned constraint normalization. Inherits all integer field capabilities\n * while ensuring non-negative behavior through smart min/max processing.\n *\n * **Inherited Props from RIntegerField:**\n * - **Core props**: min, max, format, controlVariant (with unsigned normalization)\n * - **Icon props**: incrementIcon, decrementIcon, collapseIcon, expandIcon\n * - **Common field props**: multiple, renderMode, choices, validation\n * - **Vuetify props**: variant, density, color, theme, etc.\n *\n * **Automatic Constraints:**\n * - `precision`: Always 0 (inherited from RIntegerField)\n * - `step`: Always 1 (inherited from RIntegerField)\n * - `min`: Always ≥ 0 (unsigned constraint normalization)\n * - `max`: Undefined if negative (unsigned constraint normalization)\n *\n * @example\n * ```typescript\n * const MyUnsignedIntegerField = defineComponent({\n * props: makeRUnsignedIntegerFieldProps(),\n * // ... component implementation\n * })\n * ```\n *\n * @returns Props factory for RUnsignedIntegerField components\n * @public\n */\nexport const makeRUnsignedIntegerFieldProps = propsFactory(\n {\n ...makeRIntegerFieldProps(),\n },\n 'RUnsignedIntegerField'\n)\n\n/**\n * Event emitters for RUnsignedIntegerField components.\n *\n * Inherits all event signatures from RIntegerField to ensure perfect compatibility\n * and consistent behavior across numeric field variants. All events maintain\n * the same parameter types and validation patterns while respecting unsigned constraints.\n *\n * **Available Events:**\n * - `update:modelValue`: Emitted when unsigned integer value(s) change\n * - `update:model-value`: Kebab-case variant of modelValue update\n * - `update:focused`: Emitted when focus state changes\n * - `click:append`: Emitted when append slot is clicked\n * - `click:appendInner`: Emitted when append-inner slot is clicked\n * - `click:clear`: Emitted when clear action is triggered\n * - `click:prependInner`: Emitted when prepend-inner slot is clicked\n * - `click:prepend`: Emitted when prepend slot is clicked\n * - `mousedown:control`: Emitted when control area receives mousedown\n * - `click:control`: Emitted when control area is clicked\n *\n * @example\n * ```vue\n * <RUnsignedIntegerField\n * v-model=\"quantity\"\n * @update:modelValue=\"handleQuantityChange\"\n * @click:clear=\"handleClear\"\n * />\n * ```\n *\n * @public\n */\nexport { rUnsignedIntegerFieldEmits }\n\n/**\n * Public props interface for RUnsignedIntegerField components.\n *\n * Provides type-safe access to all available props with unsigned integer constraints.\n * Based on RIntegerField props with automatic min/max normalization for non-negative values.\n *\n * **Key Props:**\n * - `modelValue`: The current unsigned integer value(s) - number | number[] | null | undefined\n * - `multiple`: Enable array input mode with chips\n * - `format`: Numeral.js format string (e.g., \"0,0\", \"#,##0\")\n * - `min`/`max`: Unsigned integer range validation (automatically normalized)\n * - `controlVariant`: Control button layout style\n * - `renderMode`: Display mode (\"edit\" | \"read\")\n *\n * **Automatic Constraints:**\n * - `precision`: Always 0 (no decimals, inherited from RIntegerField)\n * - `step`: Always 1 (whole number increments, inherited from RIntegerField)\n * - `min`: Always ≥ 0 (negative values become 0)\n * - `max`: Undefined if negative (negative values ignored)\n *\n * **Constraint Examples:**\n * ```typescript\n * // User input: min: -5, max: -10\n * // Normalized: min: 0, max: undefined\n *\n * // User input: min: 10, max: 100\n * // Preserved: min: 10, max: 100\n * ```\n *\n * @example\n * ```typescript\n * const props: RUnsignedIntegerFieldProps = {\n * modelValue: 42,\n * format: \"0,0\",\n * min: 1,\n * max: 999999,\n * controlVariant: \"split\"\n * }\n * ```\n *\n * @public\n */\nexport type RUnsignedIntegerFieldProps = ExtractPublicPropTypes<\n ReturnType<typeof makeRUnsignedIntegerFieldProps>\n>\n\n/**\n * Specialized unsigned integer input field component with automatic constraint normalization.\n *\n * A professional unsigned integer field that wraps RIntegerField with non-negative constraints,\n * providing a clean API for positive whole number input while inheriting all advanced features\n * like custom controls, numeral.js formatting, and unified field composer architecture.\n *\n * **Core Features:**\n * - **Unsigned-Only Input**: Automatically enforces min ≥ 0 through constraint normalization\n * - **RIntegerField Foundation**: Inherits integer constraints (precision: 0, step: 1)\n * - **Smart Constraint Normalization**: Automatically corrects negative min/max values\n * - **Clean Layered Architecture**: Builds on integer field with minimal additional logic\n * - **Advanced Formatting**: Numeral.js integration for thousands separators and custom patterns\n * - **Custom Controls**: Fully customizable increment/decrement buttons with smart icons\n * - **Multiple Mode**: Chip-based interface for unsigned integer arrays with formatted display\n * - **Read Mode**: Professional display with Oxford comma lists for multiple values\n * - **Smart Validation**: Min/max boundary checking with visual feedback (non-negative only)\n * - **Perfect Accessibility**: Full keyboard navigation and screen reader support\n *\n * **Inherited from RIntegerField:**\n * - **Integer Constraints**: precision: 0, step: 1 for whole numbers only\n * - **Control Variants**: default, stacked, split, hidden with adaptive icons\n * - **Icon Customization**: increment, decrement, collapse, expand icons\n * - **Advanced Validation**: Boundary checking with disabled state management\n * - **Mobile Optimization**: Touch-friendly controls with proper sizing\n * - **Theme Integration**: Pure Vuetify styling with zero custom CSS\n * - **Event System**: Complete event forwarding with type safety\n * - **Slot System**: Full slot inheritance for maximum customization\n *\n * **Unsigned-Specific Behavior:**\n * - Forces `min ≥ 0` regardless of user input (negative mins become 0)\n * - Ignores negative `max` values (sets to undefined for no upper limit)\n * - Preserves positive min/max constraints (respects user intent)\n * - Uses constraint validation instead of silent value transformation\n * - No Math.abs on input - better UX through validation feedback\n *\n * **Architecture Excellence:**\n * ```typescript\n * // Three-layer architecture:\n * RNumberField (engine) → RIntegerField (integer constraints) → RUnsignedIntegerField (unsigned constraints)\n *\n * // Maximum code reuse: ~98% inherited, ~2% unsigned-specific logic\n * ```\n *\n * **Constraint Normalization Examples:**\n * - Input: `min: -5, max: -10` → Normalized: `min: 0, max: undefined`\n * - Input: `min: 10, max: 100` → Preserved: `min: 10, max: 100`\n * - Input: `min: -1, max: 50` → Normalized: `min: 0, max: 50`\n *\n * **Formatting Examples:**\n * - Basic: `format=\"0,0\"` → `1,234,567`\n * - No separators: `format=\"0\"` → `1234567`\n * - Ordinals: `format=\"0o\"` → `1st, 2nd, 3rd`\n * - Bytes: `format=\"0b\"` → `1KB, 2MB, 3GB`\n *\n * @example\n * ```vue\n * <!-- Single unsigned integer input -->\n * <RUnsignedIntegerField\n * v-model=\"quantity\"\n * label=\"Item Count\"\n * format=\"0,0\"\n * :min=\"1\"\n * :max=\"999999\"\n * control-variant=\"split\"\n * />\n *\n * <!-- Multiple unsigned integers -->\n * <RUnsignedIntegerField\n * v-model=\"ratings\"\n * multiple\n * label=\"Star Ratings\"\n * format=\"0,0\"\n * :min=\"1\"\n * :max=\"5\"\n * />\n *\n * <!-- Read-only display -->\n * <RUnsignedIntegerField\n * v-model=\"counts\"\n * multiple\n * label=\"Item Counts\"\n * format=\"0,0\"\n * render-mode=\"read\"\n * />\n *\n * <!-- Automatic constraint normalization -->\n * <RUnsignedIntegerField\n * v-model=\"value\"\n * label=\"Positive Value\"\n * :min=\"-10\"\n * :max=\"-5\"\n * <!-- Becomes: min: 0, max: undefined -->\n * />\n * ```\n *\n * **Use Cases:**\n * - **Quantity Fields**: Product counts, inventory numbers\n * - **Rating Systems**: Star ratings, score systems (1-5, 1-10)\n * - **Count Fields**: User counts, item totals, statistics\n * - **ID Fields**: Positive integer identifiers\n * - **Index Fields**: Array indices, page numbers\n *\n * **Performance:**\n * - Minimal overhead through efficient constraint normalization\n * - Optimal re-rendering through computed prop aggregation\n * - Maximum code reuse from underlying integer field implementation\n * - Lazy evaluation of constraints for better performance\n *\n * @public\n */\nexport const RUnsignedIntegerField = defineComponent({\n name: 'RUnsignedIntegerField',\n props: makeRUnsignedIntegerFieldProps(),\n emits: rUnsignedIntegerFieldEmits,\n slots: Object as SlotsType<VNumberInputSlots>,\n setup(props, { emit, slots }) {\n const all = toRefs(props)\n const computedProps = computed(() =>\n Object.assign({}, ...Object.entries(all).map(([k, v]) => ({ [k]: v.value })))\n )\n const normalizedComputedMin = computed(() =>\n 'number' === typeof computedProps.value.min && computedProps.value.min >= 0\n ? computedProps.value.min\n : 0\n )\n const normalizedComputedMax = computed(() =>\n 'number' === typeof computedProps.value.max && computedProps.value.max >= 0\n ? computedProps.value.max\n : undefined\n )\n const computedEventForwarders = computed(() =>\n Object.assign(\n {},\n ...Object.keys(rUnsignedIntegerFieldEmits).map((k) => {\n const onKey = camelize(`on-${k}`)\n const boundEmit = emit.bind(null, k as any)\n return { [onKey]: boundEmit }\n })\n )\n )\n const rNumberFieldBindings = computed<RIntegerFieldProps>(() => ({\n ...computedProps.value,\n min: normalizedComputedMin.value,\n max: normalizedComputedMax.value,\n ...computedEventForwarders.value,\n }))\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n return () => h(RIntegerField, rNumberFieldBindings.value, slots)\n },\n})\n\n/**\n * Type definition for the RUnsignedIntegerField component instance.\n *\n * Provides type-safe access to the component's public interface, including\n * all props, slots, emits, and exposed methods. Useful for programmatic\n * component creation and advanced TypeScript integration.\n *\n * @example\n * ```typescript\n * import type { RUnsignedIntegerField } from './unsigned_integer'\n *\n * // Component reference typing\n * const unsignedIntegerFieldRef = ref<InstanceType<RUnsignedIntegerField>>()\n *\n * // Programmatic component creation\n * const UnsignedIntegerFieldComponent: RUnsignedIntegerField = defineComponent({\n * // ... implementation\n * })\n * ```\n *\n * @public\n */\nexport type RUnsignedIntegerField = typeof RUnsignedIntegerField & ComponentPublicInstance\n"],"names":["rUnsignedIntegerFieldEmits"],"mappings":";;;;AAgHO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,IACE,GAAG,uBAAA;AAAA,EAAuB;AAAA,EAE5B;AACF;AA+LO,MAAM,wBAAwB,gBAAgB;AAAA,EACnD,MAAM;AAAA,EACN,OAAO,+BAAA;AAAA,EACP,OAAOA;AAAAA,EACP,OAAO;AAAA,EACP,MAAM,OAAO,EAAE,MAAM,SAAS;AAC5B,UAAM,MAAM,OAAO,KAAK;AACxB,UAAM,gBAAgB;AAAA,MAAS,MAC7B,OAAO,OAAO,CAAA,GAAI,GAAG,OAAO,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,MAAA,EAAQ,CAAC;AAAA,IAAA;AAE9E,UAAM,wBAAwB;AAAA,MAAS,MACrC,aAAa,OAAO,cAAc,MAAM,OAAO,cAAc,MAAM,OAAO,IACtE,cAAc,MAAM,MACpB;AAAA,IAAA;AAEN,UAAM,wBAAwB;AAAA,MAAS,MACrC,aAAa,OAAO,cAAc,MAAM,OAAO,cAAc,MAAM,OAAO,IACtE,cAAc,MAAM,MACpB;AAAA,IAAA;AAEN,UAAM,0BAA0B;AAAA,MAAS,MACvC,OAAO;AAAA,QACL,CAAA;AAAA,QACA,GAAG,OAAO,KAAKA,iBAA0B,EAAE,IAAI,CAAC,MAAM;AACpD,gBAAM,QAAQ,SAAS,MAAM,CAAC,EAAE;AAChC,gBAAM,YAAY,KAAK,KAAK,MAAM,CAAQ;AAC1C,iBAAO,EAAE,CAAC,KAAK,GAAG,UAAA;AAAA,QACpB,CAAC;AAAA,MAAA;AAAA,IACH;AAEF,UAAM,uBAAuB,SAA6B,OAAO;AAAA,MAC/D,GAAG,cAAc;AAAA,MACjB,KAAK,sBAAsB;AAAA,MAC3B,KAAK,sBAAsB;AAAA,MAC3B,GAAG,wBAAwB;AAAA,IAAA,EAC3B;AAEF,WAAO,MAAM,EAAE,eAAe,qBAAqB,OAAO,KAAK;AAAA,EACjE;AACF,CAAC;"}
1
+ {"version":3,"file":"unsigned_integer-cQWXKTHG.mjs","sources":["../src/private/fields/unsigned_integer.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Unsigned Integer Field\n|--------------------------------------------------------------------------\n|\n| A specialized unsigned integer input field component that wraps RIntegerField with\n| non-negative constraints and automatic min/max normalization for positive values only.\n|\n| **Key Features:**\n| - **Unsigned-Only Input**: Enforces min ≥ 0 through constraint normalization\n| - **RIntegerField Foundation**: Inherits integer constraints (precision: 0, step: 1)\n| - **Smart Constraint Normalization**: Automatically corrects negative min/max values\n| - **Clean Layered Architecture**: Builds on integer field with minimal additional logic\n| - **Multiple Mode**: Chip-based interface for unsigned integer arrays with formatted display\n| - **Read Mode**: Professional display with Oxford comma lists for multiple values\n| - **Advanced Controls**: Custom increment/decrement buttons with smart icon adaptation\n| - **Numeral.js Integration**: Professional formatting (thousands separators, custom patterns)\n|\n| **Inherited Features from RIntegerField:**\n| - Integer-only constraints (precision: 0, step: 1)\n| - Custom control variants (default, stacked, split, hidden)\n| - Icon customization (increment, decrement, collapse, expand)\n| - Min/max validation with visual feedback\n| - Advanced accessibility (keyboard navigation, ARIA support)\n| - Mobile-optimized touch controls\n| - Theme integration and zero custom CSS\n|\n| **Unsigned-Specific Behavior:**\n| - Forces `min ≥ 0` regardless of user input\n| - Negative min values automatically become 0\n| - Negative max values are ignored (set to undefined)\n| - Positive min/max constraints are preserved\n| - No silent value transformation - uses constraint validation instead\n|\n| **Usage Examples:**\n| ```vue\n| <!-- Single unsigned integer input -->\n| <RUnsignedIntegerField\n| v-model=\"quantity\"\n| label=\"Item Count\"\n| format=\"0,0\"\n| :min=\"1\"\n| :max=\"999999\"\n| control-variant=\"split\"\n| />\n|\n| <!-- Multiple unsigned integers -->\n| <RUnsignedIntegerField\n| v-model=\"ratings\"\n| multiple\n| label=\"Star Ratings\"\n| format=\"0,0\"\n| :min=\"1\"\n| :max=\"5\"\n| />\n|\n| <!-- Read-only display -->\n| <RUnsignedIntegerField\n| v-model=\"counts\"\n| multiple\n| label=\"Item Counts\"\n| format=\"0,0\"\n| render-mode=\"read\"\n| />\n| ```\n|\n| The component provides a clean API for unsigned integer input while automatically\n| handling constraint normalization and inheriting all advanced features from the\n| underlying RIntegerField and RNumberField implementations.\n*/\n\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { defineComponent, toRefs, computed, camelize, h } from 'vue'\nimport {\n RIntegerField,\n makeRIntegerFieldProps,\n rIntegerFieldEmits as rUnsignedIntegerFieldEmits,\n} from './integer'\nimport type { VNumberInputSlots } from './number'\nimport type { RIntegerFieldProps } from './integer'\nimport type { ExtractPublicPropTypes, SlotsType, ComponentPublicInstance } from 'vue'\n\n/**\n * Factory function to create props for RUnsignedIntegerField components.\n *\n * Creates a specialized prop set based on RIntegerField props with automatic\n * unsigned constraint normalization. Inherits all integer field capabilities\n * while ensuring non-negative behavior through smart min/max processing.\n *\n * **Inherited Props from RIntegerField:**\n * - **Core props**: min, max, format, controlVariant (with unsigned normalization)\n * - **Icon props**: incrementIcon, decrementIcon, collapseIcon, expandIcon\n * - **Common field props**: multiple, renderMode, choices, validation\n * - **Vuetify props**: variant, density, color, theme, etc.\n *\n * **Automatic Constraints:**\n * - `precision`: Always 0 (inherited from RIntegerField)\n * - `step`: Always 1 (inherited from RIntegerField)\n * - `min`: Always ≥ 0 (unsigned constraint normalization)\n * - `max`: Undefined if negative (unsigned constraint normalization)\n *\n * @example\n * ```typescript\n * const MyUnsignedIntegerField = defineComponent({\n * props: makeRUnsignedIntegerFieldProps(),\n * // ... component implementation\n * })\n * ```\n *\n * @returns Props factory for RUnsignedIntegerField components\n * @public\n */\nexport const makeRUnsignedIntegerFieldProps = propsFactory(\n {\n ...makeRIntegerFieldProps(),\n },\n 'RUnsignedIntegerField'\n)\n\n/**\n * Event emitters for RUnsignedIntegerField components.\n *\n * Inherits all event signatures from RIntegerField to ensure perfect compatibility\n * and consistent behavior across numeric field variants. All events maintain\n * the same parameter types and validation patterns while respecting unsigned constraints.\n *\n * **Available Events:**\n * - `update:modelValue`: Emitted when unsigned integer value(s) change\n * - `update:model-value`: Kebab-case variant of modelValue update\n * - `update:focused`: Emitted when focus state changes\n * - `click:append`: Emitted when append slot is clicked\n * - `click:appendInner`: Emitted when append-inner slot is clicked\n * - `click:clear`: Emitted when clear action is triggered\n * - `click:prependInner`: Emitted when prepend-inner slot is clicked\n * - `click:prepend`: Emitted when prepend slot is clicked\n * - `mousedown:control`: Emitted when control area receives mousedown\n * - `click:control`: Emitted when control area is clicked\n *\n * @example\n * ```vue\n * <RUnsignedIntegerField\n * v-model=\"quantity\"\n * @update:modelValue=\"handleQuantityChange\"\n * @click:clear=\"handleClear\"\n * />\n * ```\n *\n * @public\n */\nexport { rUnsignedIntegerFieldEmits }\n\n/**\n * Public props interface for RUnsignedIntegerField components.\n *\n * Provides type-safe access to all available props with unsigned integer constraints.\n * Based on RIntegerField props with automatic min/max normalization for non-negative values.\n *\n * **Key Props:**\n * - `modelValue`: The current unsigned integer value(s) - number | number[] | null | undefined\n * - `multiple`: Enable array input mode with chips\n * - `format`: Numeral.js format string (e.g., \"0,0\", \"#,##0\")\n * - `min`/`max`: Unsigned integer range validation (automatically normalized)\n * - `controlVariant`: Control button layout style\n * - `renderMode`: Display mode (\"edit\" | \"read\")\n *\n * **Automatic Constraints:**\n * - `precision`: Always 0 (no decimals, inherited from RIntegerField)\n * - `step`: Always 1 (whole number increments, inherited from RIntegerField)\n * - `min`: Always ≥ 0 (negative values become 0)\n * - `max`: Undefined if negative (negative values ignored)\n *\n * **Constraint Examples:**\n * ```typescript\n * // User input: min: -5, max: -10\n * // Normalized: min: 0, max: undefined\n *\n * // User input: min: 10, max: 100\n * // Preserved: min: 10, max: 100\n * ```\n *\n * @example\n * ```typescript\n * const props: RUnsignedIntegerFieldProps = {\n * modelValue: 42,\n * format: \"0,0\",\n * min: 1,\n * max: 999999,\n * controlVariant: \"split\"\n * }\n * ```\n *\n * @public\n */\nexport type RUnsignedIntegerFieldProps = ExtractPublicPropTypes<\n ReturnType<typeof makeRUnsignedIntegerFieldProps>\n>\n\n/**\n * Specialized unsigned integer input field component with automatic constraint normalization.\n *\n * A professional unsigned integer field that wraps RIntegerField with non-negative constraints,\n * providing a clean API for positive whole number input while inheriting all advanced features\n * like custom controls, numeral.js formatting, and unified field composer architecture.\n *\n * **Core Features:**\n * - **Unsigned-Only Input**: Automatically enforces min ≥ 0 through constraint normalization\n * - **RIntegerField Foundation**: Inherits integer constraints (precision: 0, step: 1)\n * - **Smart Constraint Normalization**: Automatically corrects negative min/max values\n * - **Clean Layered Architecture**: Builds on integer field with minimal additional logic\n * - **Advanced Formatting**: Numeral.js integration for thousands separators and custom patterns\n * - **Custom Controls**: Fully customizable increment/decrement buttons with smart icons\n * - **Multiple Mode**: Chip-based interface for unsigned integer arrays with formatted display\n * - **Read Mode**: Professional display with Oxford comma lists for multiple values\n * - **Smart Validation**: Min/max boundary checking with visual feedback (non-negative only)\n * - **Perfect Accessibility**: Full keyboard navigation and screen reader support\n *\n * **Inherited from RIntegerField:**\n * - **Integer Constraints**: precision: 0, step: 1 for whole numbers only\n * - **Control Variants**: default, stacked, split, hidden with adaptive icons\n * - **Icon Customization**: increment, decrement, collapse, expand icons\n * - **Advanced Validation**: Boundary checking with disabled state management\n * - **Mobile Optimization**: Touch-friendly controls with proper sizing\n * - **Theme Integration**: Pure Vuetify styling with zero custom CSS\n * - **Event System**: Complete event forwarding with type safety\n * - **Slot System**: Full slot inheritance for maximum customization\n *\n * **Unsigned-Specific Behavior:**\n * - Forces `min ≥ 0` regardless of user input (negative mins become 0)\n * - Ignores negative `max` values (sets to undefined for no upper limit)\n * - Preserves positive min/max constraints (respects user intent)\n * - Uses constraint validation instead of silent value transformation\n * - No Math.abs on input - better UX through validation feedback\n *\n * **Architecture Excellence:**\n * ```typescript\n * // Three-layer architecture:\n * RNumberField (engine) → RIntegerField (integer constraints) → RUnsignedIntegerField (unsigned constraints)\n *\n * // Maximum code reuse: ~98% inherited, ~2% unsigned-specific logic\n * ```\n *\n * **Constraint Normalization Examples:**\n * - Input: `min: -5, max: -10` → Normalized: `min: 0, max: undefined`\n * - Input: `min: 10, max: 100` → Preserved: `min: 10, max: 100`\n * - Input: `min: -1, max: 50` → Normalized: `min: 0, max: 50`\n *\n * **Formatting Examples:**\n * - Basic: `format=\"0,0\"` → `1,234,567`\n * - No separators: `format=\"0\"` → `1234567`\n * - Ordinals: `format=\"0o\"` → `1st, 2nd, 3rd`\n * - Bytes: `format=\"0b\"` → `1KB, 2MB, 3GB`\n *\n * @example\n * ```vue\n * <!-- Single unsigned integer input -->\n * <RUnsignedIntegerField\n * v-model=\"quantity\"\n * label=\"Item Count\"\n * format=\"0,0\"\n * :min=\"1\"\n * :max=\"999999\"\n * control-variant=\"split\"\n * />\n *\n * <!-- Multiple unsigned integers -->\n * <RUnsignedIntegerField\n * v-model=\"ratings\"\n * multiple\n * label=\"Star Ratings\"\n * format=\"0,0\"\n * :min=\"1\"\n * :max=\"5\"\n * />\n *\n * <!-- Read-only display -->\n * <RUnsignedIntegerField\n * v-model=\"counts\"\n * multiple\n * label=\"Item Counts\"\n * format=\"0,0\"\n * render-mode=\"read\"\n * />\n *\n * <!-- Automatic constraint normalization -->\n * <RUnsignedIntegerField\n * v-model=\"value\"\n * label=\"Positive Value\"\n * :min=\"-10\"\n * :max=\"-5\"\n * <!-- Becomes: min: 0, max: undefined -->\n * />\n * ```\n *\n * **Use Cases:**\n * - **Quantity Fields**: Product counts, inventory numbers\n * - **Rating Systems**: Star ratings, score systems (1-5, 1-10)\n * - **Count Fields**: User counts, item totals, statistics\n * - **ID Fields**: Positive integer identifiers\n * - **Index Fields**: Array indices, page numbers\n *\n * **Performance:**\n * - Minimal overhead through efficient constraint normalization\n * - Optimal re-rendering through computed prop aggregation\n * - Maximum code reuse from underlying integer field implementation\n * - Lazy evaluation of constraints for better performance\n *\n * @public\n */\nexport const RUnsignedIntegerField = defineComponent({\n name: 'RUnsignedIntegerField',\n props: makeRUnsignedIntegerFieldProps(),\n emits: rUnsignedIntegerFieldEmits,\n slots: Object as SlotsType<VNumberInputSlots>,\n setup(props, { emit, slots }) {\n const all = toRefs(props)\n const computedProps = computed(() =>\n Object.assign({}, ...Object.entries(all).map(([k, v]) => ({ [k]: v.value })))\n )\n const normalizedComputedMin = computed(() =>\n 'number' === typeof computedProps.value.min && computedProps.value.min >= 0\n ? computedProps.value.min\n : 0\n )\n const normalizedComputedMax = computed(() =>\n 'number' === typeof computedProps.value.max && computedProps.value.max >= 0\n ? computedProps.value.max\n : undefined\n )\n const computedEventForwarders = computed(() =>\n Object.assign(\n {},\n ...Object.keys(rUnsignedIntegerFieldEmits).map((k) => {\n const onKey = camelize(`on-${k}`)\n const boundEmit = emit.bind(null, k as any)\n return { [onKey]: boundEmit }\n })\n )\n )\n const rNumberFieldBindings = computed<RIntegerFieldProps>(() => ({\n ...computedProps.value,\n min: normalizedComputedMin.value,\n max: normalizedComputedMax.value,\n ...computedEventForwarders.value,\n }))\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n return () => h(RIntegerField, rNumberFieldBindings.value, slots)\n },\n})\n\n/**\n * Type definition for the RUnsignedIntegerField component instance.\n *\n * Provides type-safe access to the component's public interface, including\n * all props, slots, emits, and exposed methods. Useful for programmatic\n * component creation and advanced TypeScript integration.\n *\n * @example\n * ```typescript\n * import type { RUnsignedIntegerField } from './unsigned_integer'\n *\n * // Component reference typing\n * const unsignedIntegerFieldRef = ref<InstanceType<RUnsignedIntegerField>>()\n *\n * // Programmatic component creation\n * const UnsignedIntegerFieldComponent: RUnsignedIntegerField = defineComponent({\n * // ... implementation\n * })\n * ```\n *\n * @public\n */\nexport type RUnsignedIntegerField = typeof RUnsignedIntegerField & ComponentPublicInstance\n"],"names":["rUnsignedIntegerFieldEmits"],"mappings":";;;;AAgHO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,IACE,GAAG,uBAAA;AAAA,EAAuB;AAAA,EAE5B;AACF;AA+LO,MAAM,wBAAwB,gBAAgB;AAAA,EACnD,MAAM;AAAA,EACN,OAAO,+BAAA;AAAA,EACP,OAAOA;AAAAA,EACP,OAAO;AAAA,EACP,MAAM,OAAO,EAAE,MAAM,SAAS;AAC5B,UAAM,MAAM,OAAO,KAAK;AACxB,UAAM,gBAAgB;AAAA,MAAS,MAC7B,OAAO,OAAO,CAAA,GAAI,GAAG,OAAO,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,MAAA,EAAQ,CAAC;AAAA,IAAA;AAE9E,UAAM,wBAAwB;AAAA,MAAS,MACrC,aAAa,OAAO,cAAc,MAAM,OAAO,cAAc,MAAM,OAAO,IACtE,cAAc,MAAM,MACpB;AAAA,IAAA;AAEN,UAAM,wBAAwB;AAAA,MAAS,MACrC,aAAa,OAAO,cAAc,MAAM,OAAO,cAAc,MAAM,OAAO,IACtE,cAAc,MAAM,MACpB;AAAA,IAAA;AAEN,UAAM,0BAA0B;AAAA,MAAS,MACvC,OAAO;AAAA,QACL,CAAA;AAAA,QACA,GAAG,OAAO,KAAKA,iBAA0B,EAAE,IAAI,CAAC,MAAM;AACpD,gBAAM,QAAQ,SAAS,MAAM,CAAC,EAAE;AAChC,gBAAM,YAAY,KAAK,KAAK,MAAM,CAAQ;AAC1C,iBAAO,EAAE,CAAC,KAAK,GAAG,UAAA;AAAA,QACpB,CAAC;AAAA,MAAA;AAAA,IACH;AAEF,UAAM,uBAAuB,SAA6B,OAAO;AAAA,MAC/D,GAAG,cAAc;AAAA,MACjB,KAAK,sBAAsB;AAAA,MAC3B,KAAK,sBAAsB;AAAA,MAC3B,GAAG,wBAAwB;AAAA,IAAA,EAC3B;AAEF,WAAO,MAAM,EAAE,eAAe,qBAAqB,OAAO,KAAK;AAAA,EACjE;AACF,CAAC;"}
@@ -1,5 +1,5 @@
1
1
  import { j as encode } from "./vendor-nhtio-lucid-resourceful-Bc8uNS08.mjs";
2
- import { a as propsFactory, n as getCurrentInstanceName, A as getCurrentInstance, d as debounce, t as throttle } from "./vendor-nhtio-vuetifiable-Qm2uuc7r.mjs";
2
+ import { a as propsFactory, h as getCurrentInstanceName, A as getCurrentInstance, d as debounce, t as throttle } from "./vendor-nhtio-vuetifiable-CRAkpWr4.mjs";
3
3
  import { toRaw, toValue, ref, toRef, computed, warn, nextTick } from "vue";
4
4
  const isObject = (value) => {
5
5
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -407,4 +407,4 @@ export {
407
407
  toUnreactive as t,
408
408
  useFocus as u
409
409
  };
410
- //# sourceMappingURL=utils-C_uOac-v.mjs.map
410
+ //# sourceMappingURL=utils-Dh8-g-7s.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils-C_uOac-v.mjs","sources":["../src/private/common/guards.ts","../node_modules/.pnpm/case-anything@3.1.2/node_modules/case-anything/dist/utils.js","../node_modules/.pnpm/case-anything@3.1.2/node_modules/case-anything/dist/core.js","../src/private/common/factories.ts","../src/private/common/utils.ts"],"sourcesContent":["/**\n * Type guard to check if a value is a plain object (not null, not array)\n * @param value - The value to check\n * @returns True if the value is a plain object, false otherwise\n */\nexport const isObject = (value: unknown): value is { [key: string]: unknown } => {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport const isHTMLElement = (value: unknown): value is HTMLElement => {\n if ('undefined' === typeof HTMLElement) return false\n return value instanceof HTMLElement\n}\n","// Latin-1 Supplement\n// upper case ranges\n// [À-ÖØ-ß]\n// lower case ranges\n// [à-öø-ÿ]\nexport const magicSplit = /^[a-zà-öø-ÿа-я]+|[A-ZÀ-ÖØ-ßА-Я][a-zà-öø-ÿа-я]+|[a-zà-öø-ÿа-я]+|[0-9]+|[A-ZÀ-ÖØ-ßА-Я]+(?![a-zà-öø-ÿа-я])/g;\nexport const spaceSplit = /\\S+/g;\n/**\n * A string.matchAll function that will return an array of \"string parts\" and the indexes at which it split each part\n */\nexport function getPartsAndIndexes(string, splitRegex) {\n const result = { parts: [], prefixes: [] };\n const matches = string.matchAll(splitRegex);\n let lastWordEndIndex = 0;\n for (const match of matches) {\n if (typeof match.index !== 'number')\n continue;\n const word = match[0];\n result.parts.push(word);\n const prefix = string.slice(lastWordEndIndex, match.index).trim();\n result.prefixes.push(prefix);\n lastWordEndIndex = match.index + word.length;\n }\n const tail = string.slice(lastWordEndIndex).trim();\n if (tail) {\n result.parts.push('');\n result.prefixes.push(tail);\n }\n return result;\n}\n/**\n * A function that splits a string on words and returns an array of words.\n * - It can prefix each word with a given character\n * - It can strip or keep special characters, this affects the logic for adding a prefix as well\n */\nexport function splitAndPrefix(string, options) {\n const { keepSpecialCharacters = false, keep, prefix = '' } = options || {};\n const normalString = string.trim().normalize('NFC');\n const hasSpaces = normalString.includes(' ');\n const split = hasSpaces ? spaceSplit : magicSplit;\n const partsAndIndexes = getPartsAndIndexes(normalString, split);\n return partsAndIndexes.parts\n .map((_part, i) => {\n let foundPrefix = partsAndIndexes.prefixes[i] || '';\n let part = _part;\n if (keepSpecialCharacters === false) {\n if (keep) {\n part = part\n .normalize('NFD')\n .replace(new RegExp(`[^a-zA-ZØßø0-9${keep.join('')}]`, 'g'), '');\n }\n if (!keep) {\n part = part.normalize('NFD').replace(/[^a-zA-ZØßø0-9]/g, '');\n foundPrefix = '';\n }\n }\n if (keep && foundPrefix) {\n foundPrefix = foundPrefix.replace(new RegExp(`[^${keep.join('')}]`, 'g'), '');\n }\n // the first word doesn't need a prefix, so only return the found prefix\n if (i === 0) {\n // console.log(`foundPrefix → `, foundPrefix)\n return foundPrefix + part;\n }\n if (!foundPrefix && !part)\n return '';\n if (!hasSpaces) {\n // return the found prefix OR fall back to a given prefix\n return (foundPrefix || prefix) + part;\n }\n // space based sentence was split on spaces, so only return found prefixes\n if (!foundPrefix && prefix.match(/\\s/)) {\n // in this case we have no more found prefix, it was trimmed, but we're looking to add a space\n // so let's return that space\n return ' ' + part;\n }\n return (foundPrefix || prefix) + part;\n })\n .filter(Boolean);\n}\n/**\n * Capitalises a single word\n * @returns the word with the first character in uppercase and the rest in lowercase\n */\nexport function capitaliseWord(string) {\n const match = string.matchAll(magicSplit).next().value;\n const firstLetterIndex = match ? match.index : 0;\n return (string.slice(0, firstLetterIndex + 1).toUpperCase() +\n string.slice(firstLetterIndex + 1).toLowerCase());\n}\n","import { capitaliseWord, magicSplit, splitAndPrefix } from './utils.js';\n/**\n * # 🐪 camelCase\n * converts a string to camelCase\n * - first lowercase then all capitalised\n * - *strips away* special characters by default\n *\n * @example\n * camelCase('$catDog') === 'catDog'\n * @example\n * camelCase('$catDog', { keepSpecialCharacters: true }) === '$catDog'\n */\nexport function camelCase(string, options) {\n return splitAndPrefix(string, options).reduce((result, word, index) => {\n return index === 0 || !(word[0] || '').match(magicSplit)\n ? result + word.toLowerCase()\n : result + capitaliseWord(word);\n }, '');\n}\n/**\n * # 🐫 PascalCase\n * converts a string to PascalCase (also called UpperCamelCase)\n * - all capitalised\n * - *strips away* special characters by default\n *\n * @example\n * pascalCase('$catDog') === 'CatDog'\n * @example\n * pascalCase('$catDog', { keepSpecialCharacters: true }) === '$CatDog'\n */\nexport function pascalCase(string, options) {\n return splitAndPrefix(string, options).reduce((result, word) => {\n return result + capitaliseWord(word);\n }, '');\n}\n/**\n * # 🐫 UpperCamelCase\n * converts a string to UpperCamelCase (also called PascalCase)\n * - all capitalised\n * - *strips away* special characters by default\n *\n * @example\n * upperCamelCase('$catDog') === 'CatDog'\n * @example\n * upperCamelCase('$catDog', { keepSpecialCharacters: true }) === '$CatDog'\n */\nexport const upperCamelCase = pascalCase;\n/**\n * # 🥙 kebab-case\n * converts a string to kebab-case\n * - hyphenated lowercase\n * - *strips away* special characters by default\n *\n * @example\n * kebabCase('$catDog') === 'cat-dog'\n * @example\n * kebabCase('$catDog', { keepSpecialCharacters: true }) === '$cat-dog'\n */\nexport function kebabCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '-' })\n .join('')\n .toLowerCase();\n}\n/**\n * # 🐍 snake_case\n * converts a string to snake_case\n * - underscored lowercase\n * - *strips away* special characters by default\n *\n * @example\n * snakeCase('$catDog') === 'cat_dog'\n * @example\n * snakeCase('$catDog', { keepSpecialCharacters: true }) === '$cat_dog'\n */\nexport function snakeCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '_' })\n .join('')\n .toLowerCase();\n}\n/**\n * # 📣 CONSTANT_CASE\n * converts a string to CONSTANT_CASE\n * - underscored uppercase\n * - *strips away* special characters by default\n *\n * @example\n * constantCase('$catDog') === 'CAT_DOG'\n * @example\n * constantCase('$catDog', { keepSpecialCharacters: true }) === '$CAT_DOG'\n */\nexport function constantCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '_' })\n .join('')\n .toUpperCase();\n}\n/**\n * # 🚂 Train-Case\n * converts strings to Train-Case\n * - hyphenated & capitalised\n * - *strips away* special characters by default\n *\n * @example\n * trainCase('$catDog') === 'Cat-Dog'\n * @example\n * trainCase('$catDog', { keepSpecialCharacters: true }) === '$Cat-Dog'\n */\nexport function trainCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '-' })\n .map((word) => capitaliseWord(word))\n .join('');\n}\n/**\n * # 🕊 Ada_Case\n * converts a string to Ada_Case\n * - underscored & capitalised\n * - *strips away* special characters by default\n *\n * @example\n * adaCase('$catDog') === 'Cat_Dog'\n * @example\n * adaCase('$catDog', { keepSpecialCharacters: true }) === '$Cat_Dog'\n */\nexport function adaCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '_' })\n .map((part) => capitaliseWord(part))\n .join('');\n}\n/**\n * # 👔 COBOL-CASE\n * converts a string to COBOL-CASE\n * - hyphenated uppercase\n * - *strips away* special characters by default\n *\n * @example\n * cobolCase('$catDog') === 'CAT-DOG'\n * @example\n * cobolCase('$catDog', { keepSpecialCharacters: true }) === '$CAT-DOG'\n */\nexport function cobolCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '-' })\n .join('')\n .toUpperCase();\n}\n/**\n * # 📍 Dot.notation\n * converts a string to dot.notation\n * - adds dots, does not change casing\n * - *strips away* special characters by default\n *\n * @example\n * dotNotation('$catDog') === 'cat.Dog'\n * @example\n * dotNotation('$catDog', { keepSpecialCharacters: true }) === '$cat.Dog'\n */\nexport function dotNotation(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '.' }).join('');\n}\n/**\n * # 📂 Path/case\n * converts a string to path/case\n * - adds slashes, does not change casing\n * - *keeps* special characters by default\n *\n * @example\n * pathCase('$catDog') === '$cat/Dog'\n * @example\n * pathCase('$catDog', { keepSpecialCharacters: false }) === 'cat/Dog'\n */\nexport function pathCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, options).reduce((result, word, i) => {\n const prefix = i === 0 || word[0] === '/' ? '' : '/';\n return result + prefix + word;\n }, '');\n}\n/**\n * # 🛰 Space case\n * converts a string to space case\n * - adds spaces, does not change casing\n * - *keeps* special characters by default\n *\n * @example\n * spaceCase('$catDog') === '$cat Dog'\n * @example\n * spaceCase('$catDog', { keepSpecialCharacters: false }) === 'cat Dog'\n */\nexport function spaceCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' }).join('');\n}\n/**\n * # 🏛 Capital Case\n * converts a string to Capital Case\n * - capitalizes words and adds spaces\n * - *keeps* special characters by default\n *\n * @example\n * capitalCase('$catDog') === '$Cat Dog'\n * @example\n * capitalCase('$catDog', { keepSpecialCharacters: false }) === 'Cat Dog'\n *\n * ⟪ if you do not want to add spaces, use `pascalCase()` ⟫\n */\nexport function capitalCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' }).reduce((result, word) => {\n return result + capitaliseWord(word);\n }, '');\n}\n/**\n * # 🔡 lower case\n * converts a string to lower case\n * - makes words lowercase and adds spaces\n * - *keeps* special characters by default\n *\n * @example\n * lowerCase('$catDog') === '$cat dog'\n * @example\n * lowerCase('$catDog', { keepSpecialCharacters: false }) === 'cat dog'\n *\n * ⟪ if you do not want to add spaces, use the native JS `toLowerCase()` ⟫\n */\nexport function lowerCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' })\n .join('')\n .toLowerCase();\n}\n/**\n * # 🔠 UPPER CASE\n * converts a string to UPPER CASE\n * - makes words upper case and adds spaces\n * - *keeps* special characters by default\n *\n * @example\n * upperCase('$catDog') === '$CAT DOG'\n * @example\n * upperCase('$catDog', { keepSpecialCharacters: false }) === 'CAT DOG'\n *\n * ⟪ if you do not want to add spaces, use the native JS `toUpperCase()` ⟫\n */\nexport function upperCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' })\n .join('')\n .toUpperCase();\n}\n","/* eslint-disable vue/prefer-import-from-vue */\nimport { getDefaultsForPropFactory } from './utils'\nimport { camelCase, kebabCase } from 'case-anything'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport type { Merge } from 'type-fest'\nimport type { IfAny } from '@vue/shared'\nimport type { ExtractPublicDefaultPropTypes } from './utils'\nimport type { ComponentObjectPropsOptions, PropType, Prop, ExtractPublicPropTypes } from 'vue'\n/**\n * Interface for emit validator functions that return boolean values.\n * Used as input to the emitsFactory to define validation logic for Vue component emits.\n *\n * @example\n * ```typescript\n * const validators: EmitValidators = {\n * 'update:value': (newValue: string) => typeof newValue === 'string',\n * 'error': (error: Error) => error instanceof Error\n * }\n * ```\n */\ninterface EmitValidators {\n [key: string]: (...args: any[]) => boolean\n}\n\n/**\n * Mapped type that transforms emit validator functions to emit functions.\n * Converts functions that return `boolean` to functions that return `void`,\n * while preserving parameter types through conditional type inference.\n *\n * @template T - The emit validators object type\n *\n * @example\n * ```typescript\n * type Input = { save: (data: string) => boolean }\n * type Output = EmitFunctions<Input> // { save: (data: string) => void }\n * ```\n */\ntype EmitFunctions<T extends EmitValidators> = {\n [K in keyof T]: T[K] extends (...args: infer P) => boolean ? (...args: P) => void : never\n}\n\nexport type CastToEmitValidators<T extends EmitFunctions<EmitValidators>> = {\n [K in keyof T]: T[K] extends (...args: infer P) => void ? (...args: P) => boolean : never\n}\n\n/**\n * Type helper that generates emit handler prop types from emit validators.\n * Creates both camelCase and kebab-case variants for each emit.\n */\nexport type EmitHandlerProps<E extends EmitValidators> = {\n [K in keyof E as `on${Capitalize<string & K>}`]?: PropType<EmitFunctions<E>[K] | undefined>\n} & {\n [K in keyof E as K extends `${infer Prefix}:${infer Suffix}`\n ? `on${Capitalize<Prefix>}:${Suffix}`\n : never]?: PropType<EmitFunctions<E>[K] | undefined>\n}\n\ntype PartialKeys<T> = { [P in keyof T]?: unknown }\n\ntype InferPropType<T> = [T] extends [null]\n ? any // null & true would fail to infer\n : [T] extends [{ type: null | true }]\n ? // As TS issue https://github.com/Microsoft/TypeScript/issues/14829\n // somehow `ObjectConstructor` when inferred from { (): T } becomes `any`\n // `BooleanConstructor` when inferred from PropConstructor(with PropMethod) becomes `Boolean`\n any\n : [T] extends [ObjectConstructor | { type: ObjectConstructor }]\n ? Record<string, any>\n : [T] extends [BooleanConstructor | { type: BooleanConstructor }]\n ? boolean\n : [T] extends [DateConstructor | { type: DateConstructor }]\n ? Date\n : [T] extends [(infer U)[] | { type: (infer U)[] }]\n ? U extends DateConstructor\n ? Date | InferPropType<U>\n : InferPropType<U>\n : [T] extends [Prop<infer V, infer D>]\n ? unknown extends V\n ? IfAny<V, V, D>\n : V\n : T\n\ntype MergeTypeDefault<T, D, P = InferPropType<T>> = unknown extends D ? P : P | D\ntype MergeDefault<T, D, P = InferPropType<T>> = unknown extends D ? P : NonNullable<P> | D\n\ntype AppendDefault<T extends ComponentObjectPropsOptions, D extends PartialKeys<T>> = {\n [P in keyof T]-?: unknown extends D[P]\n ? T[P]\n : T[P] extends Record<string, unknown>\n ? Omit<T[P], 'type' | 'default'> & {\n type: PropType<MergeTypeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n : {\n type: PropType<MergeTypeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n}\n\nexport type PropFactory<PropsOptions extends ComponentObjectPropsOptions> = <\n Defaults extends PartialKeys<PropsOptions> = {},\n>(\n defaults?: Defaults\n) => AppendDefault<PropsOptions, Defaults>\n\n/**\n * Factory function that converts emit validator functions to Vue-compatible emit functions.\n *\n * This utility solves the TypeScript integration challenge with Vue's emit system:\n * - Vue expects emit functions to return `void`\n * - Developers want validator functions that return `boolean` for validation logic\n * - This factory preserves runtime validation while providing correct TypeScript types\n *\n * @template T - The type of the validators object\n * @param validators - Object containing validator functions that return boolean\n * @returns The same object cast to have emit functions that return void\n *\n * @example\n * ```typescript\n * // Define validators with actual validation logic\n * const validators = {\n * 'update:modelValue': (value: string[]) => Array.isArray(value),\n * 'error': (error: unknown) => true, // Always allow error emissions\n * 'save': (data: SaveData) => data && typeof data.id === 'string'\n * }\n *\n * // Use in Vue component\n * export default defineComponent({\n * emits: emitsFactory(validators),\n * setup(props, { emit }) {\n * // emit functions are properly typed as (...args) => void\n * emit('update:modelValue', ['item1', 'item2'])\n * emit('error', new Error('Something went wrong'))\n * }\n * })\n * ```\n */\nexport const emitsFactory = <T extends EmitValidators>(validators: T): EmitFunctions<T> => {\n // Return the original validators but cast the type to emit functions\n return validators as unknown as EmitFunctions<T>\n}\n\nexport const getCamelAndMaybeKebabPropKeysFor = (key: string): { camel: string; kebab: string } => {\n const camelPropKey = key\n .split(':')\n .map((p, i) => (i === 0 ? camelCase(['on', p].join('_')) : camelCase(p)))\n .join(':')\n const maybeKebabPropKey = key\n .split(':')\n .map((p, i) => (i === 0 ? camelCase(['on', p].join('_')) : kebabCase(p)))\n .join(':')\n return { camel: camelPropKey, kebab: maybeKebabPropKey }\n}\n\n/**\n * Factory function that creates both props and emits for Vue components with automatic\n * emit handler prop generation.\n *\n * This utility automatically generates corresponding prop handlers for each emit event,\n * supporting both camelCase and kebab-case naming conventions to maximize template\n * syntax flexibility. For each emit, it creates props that allow users to bind handlers\n * using either `:onEventName` or `@event-name` syntax.\n *\n * The returned `makeProps` function includes full TypeScript support for both the original\n * props and the automatically generated emit handler props, ensuring type safety throughout\n * component development.\n *\n * @template P - The type of the component props object\n * @template E - The type of the emit validators object\n * @param props - Component props object that will be extended with emit handler props\n * @param emits - Object containing emit validator functions\n * @param source - Source identifier for the props factory (used for debugging/tooling)\n * @returns Object containing makeProps and emits functions\n * @returns makeProps - Props factory function that includes original props + emit handler props with full TypeScript support\n * @returns emits - Emit functions converted from validators with proper void return types\n *\n * @example\n * ```typescript\n * // Define your component props and emits\n * const componentProps = {\n * value: String,\n * disabled: Boolean\n * }\n *\n * const componentEmits = {\n * 'update:modelValue': (value: string) => typeof value === 'string',\n * 'item:selected': (item: Item) => item && typeof item.id === 'string'\n * }\n *\n * // Create factories\n * const { makeProps, emits } = propsAndEmitsFactory(\n * componentProps,\n * componentEmits,\n * 'MyComponent'\n * )\n *\n * // makeProps() returns props with full TypeScript intellisense for:\n * // - Original props: value, disabled\n * // - Generated emit handlers: onUpdate:modelValue, onUpdateModelValue, onItem:selected, onItemSelected\n * export default defineComponent({\n * props: makeProps(),\n * emits,\n * setup(props, { emit }) {\n * // All props are properly typed including emit handlers\n * props.onUpdateModelValue?.(newValue)\n * emit('update:modelValue', newValue)\n * }\n * })\n *\n * // Template supports both syntaxes:\n * // <MyComponent :onUpdate:modelValue=\"handler\" />\n * // <MyComponent :onUpdate:model-value=\"handler\" />\n * // <MyComponent :onItem:selected=\"handler\" />\n * // <MyComponent :onItem:item-selected=\"handler\" />\n * ```\n */\nexport const propsAndEmitsFactory = <\n P extends ComponentObjectPropsOptions,\n E extends EmitValidators,\n>(\n props: P,\n emits: E,\n source: string\n): {\n makeProps: PropFactory<Merge<P, EmitHandlerProps<E>>>\n emits: EmitFunctions<E>\n} => {\n const makeEmits = emitsFactory(emits)\n for (const key in emits) {\n const { camel: camelPropKey, kebab: maybeKebabPropKey } = getCamelAndMaybeKebabPropKeysFor(key)\n if ('undefined' === typeof props[camelPropKey]) {\n // @ts-ignore\n props[camelPropKey] = {\n type: Function as PropType<EmitFunctions<E>[typeof key] | undefined>,\n default: undefined,\n }\n }\n if ('undefined' === typeof props[maybeKebabPropKey]) {\n // @ts-ignore\n props[maybeKebabPropKey] = {\n type: Function as PropType<EmitFunctions<E>[typeof key] | undefined>,\n default: undefined,\n }\n }\n }\n const makeProps = propsFactory(props as unknown as Merge<P, EmitHandlerProps<E>>, source)\n return {\n makeProps,\n emits: makeEmits,\n }\n}\n\nexport const propsAndDefaultsFactory = <P extends ComponentObjectPropsOptions>(\n props: P,\n source: string\n): { factory: PropFactory<P>; defaults: ExtractPublicDefaultPropTypes<P> } => {\n const factory = propsFactory(props, source) as PropFactory<P>\n const defaults = getDefaultsForPropFactory(factory as any) as ExtractPublicDefaultPropTypes<P>\n return { factory, defaults }\n}\n\nexport type ExtractPublicPropTypesFromFactory<T extends PropFactory<any>> = ExtractPublicPropTypes<\n ReturnType<T>\n>\n\nexport type ExtractPublicPropTypesFromUnknownFactory<T extends (...args: any) => any> =\n ExtractPublicPropTypes<ReturnType<T>>\n\n/**\n * Transforms emit validators or emit functions into hookable event types.\n *\n * Each event gets converted to a tuple with two signatures:\n * 1. Hook handler signature - receives the original event parameters\n * 2. Cleanup function signature - receives Error | null plus the original parameters\n *\n * @template T - The emit validators or emit functions object type\n *\n * @example\n * ```typescript\n * const emits = {\n * saving: (model: BaseModel) => true,\n * finding: (query: QueryBuilder) => true\n * }\n *\n * type Events = HookableEvents<typeof emits>\n * // {\n * // saving: [\n * // [BaseModel], // for hook handler\n * // [error: Error | null, BaseModel], // for cleanup function\n * // ],\n * // finding: [\n * // [QueryBuilder], // for hook handler\n * // [error: Error | null, QueryBuilder], // for cleanup function\n * // ]\n * // }\n * ```\n */\nexport type HookableEvents<T extends EmitValidators | EmitFunctions<EmitValidators>> = {\n [K in keyof T]: T[K] extends (...args: infer P) => boolean | void\n ? [callbackArgs: [...P], cleanupCallbackArgs: [error: Error | null, ...P]]\n : never\n}\n","import { isObject } from './guards'\nimport { encode } from '@nhtio/lucid-resourceful/encoding'\nimport { getCamelAndMaybeKebabPropKeysFor } from './factories'\nimport { debounce, throttle } from '@nhtio/vuetifiable/util/helpers'\nimport { toRaw, toValue, ref, toRef, computed, warn, nextTick } from 'vue'\nimport {\n getCurrentInstanceName,\n getCurrentInstance,\n} from '@nhtio/vuetifiable/util/getCurrentInstance'\nimport type { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport type {\n ExtractPublicPropTypes,\n ExtractDefaultPropTypes,\n MaybeRefOrGetter,\n Slot,\n VNode,\n PropType,\n Ref,\n} from 'vue'\n\nexport type ObjectStrippedOfUndefinedValues<T extends Record<string, any>> = {\n [K in keyof T as T[K] extends undefined ? never : K]: T[K] extends undefined ? never : T[K]\n}\n\n/**\n * Removes all properties with `undefined` values from an object.\n * This is useful for cleaning up objects before passing them to APIs or components\n * that should not receive undefined values.\n *\n * @template T - The type of the input object\n * @param obj - The object to process\n * @returns A new object with all undefined values removed\n *\n * @example\n * ```typescript\n * const input = { a: 1, b: undefined, c: 'hello', d: undefined }\n * const result = stripUndefinedValuesFromObject(input)\n * // result: { a: 1, c: 'hello' }\n * ```\n */\nexport const stripUndefinedValuesFromObject = <T extends Record<string, any>>(\n obj: T\n): ObjectStrippedOfUndefinedValues<T> => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => value !== undefined)\n ) as ObjectStrippedOfUndefinedValues<T>\n}\n\n/**\n * Extract default values for properties that are both public and have defaults.\n * This ensures we only get defaults for props that are actually exposed to consumers.\n *\n * This type intersects the keys from both `ExtractDefaultPropTypes` and `ExtractPublicPropTypes`\n * to create a type that only includes properties that are:\n * - Public (exposed to component consumers)\n * - Have default values defined\n * - Are not nullable/undefined\n *\n * @template O - The props object type to extract from\n *\n * @example\n * ```typescript\n * type MyProps = {\n * publicWithDefault: { type: StringConstructor, default: 'hello' }\n * publicRequired: { type: NumberConstructor, required: true }\n * privateWithDefault: { type: BooleanConstructor, default: false, __internal: true }\n * }\n *\n * type Defaults = ExtractPublicDefaultPropTypes<MyProps>\n * // Result: { publicWithDefault: string }\n * ```\n */\nexport type ExtractPublicDefaultPropTypes<O> = {\n [K in keyof ExtractDefaultPropTypes<O> & keyof ExtractPublicPropTypes<O>]: NonNullable<\n ExtractDefaultPropTypes<O>[K]\n >\n}\n\n/**\n * Type representing the return value of a Vuetifiable props factory function.\n * This is used to constrain the generic parameter in `getDefaultsForPropFactory`.\n */\nexport type PropFactory = ReturnType<typeof propsFactory>\n\n/**\n * Extracts default values from a Vuetifiable props factory and returns them as a runtime object.\n * This is useful for getting default prop values for component initialization or testing.\n *\n * The function handles different types of default values:\n * - Primitive defaults (string, number, boolean) are returned as-is\n * - Reference type defaults (Object, Array, etc.) defined as functions are called to get fresh instances\n * - Props without defaults are completely excluded from the result\n * - The result is cleaned to ensure no undefined values slip through\n *\n * Type safety is enforced at both compile-time (via NonNullable) and runtime (via stripUndefinedValuesFromObject).\n *\n * @template T - The props factory type, constrained to `PropFactory`\n * @template ExtractedPublicProperties - The extracted public properties with non-nullable defaults\n * @param factory - The Vuetifiable props factory function\n * @returns A clean object containing only the default values for public props that have defaults, guaranteed to be free of undefined values\n *\n * @example\n * ```typescript\n * const myPropsFactory = propsFactory({\n * title: { type: String, default: 'Hello World' },\n * items: { type: Array, default: () => [] },\n * settings: { type: Object, default: () => ({ theme: 'dark' }) },\n * count: { type: Number, default: 0 },\n * enabled: { type: Boolean }, // no default - will be excluded\n * internal: { type: String, default: 'secret', __internal: true } // private - will be excluded\n * }, 'MyComponent')\n *\n * const defaults = getDefaultsForPropFactory(myPropsFactory)\n * // Result: { title: 'Hello World', items: [], settings: { theme: 'dark' }, count: 0 }\n * // Note: 'enabled' and 'internal' are not included - no defaults or not public\n * ```\n */\nexport const getDefaultsForPropFactory = <\n T extends PropFactory = PropFactory,\n ExtractedPublicProperties = ExtractPublicDefaultPropTypes<T>,\n>(\n factory: T\n): ExtractedPublicProperties => {\n const ret: Partial<ExtractedPublicProperties> = {}\n const generated = factory()\n\n Object.entries(generated).forEach(([key, value]) => {\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n value !== null &&\n 'default' in value\n ) {\n // Handle reference type defaults that are functions (Object, Array, etc.)\n const isReferenceType =\n typeof value.type === 'function' && ['Object', 'Array'].includes(value.type.name)\n\n if (isReferenceType && typeof value.default === 'function') {\n ret[key as keyof ExtractedPublicProperties] = value.default()\n } else {\n // Handle primitive defaults or non-function reference defaults\n ret[key as keyof ExtractedPublicProperties] = (value as any).default\n }\n }\n // Props without defaults are simply omitted (no undefined assignment)\n })\n\n // Strip any undefined values that might have slipped through\n return stripUndefinedValuesFromObject(ret) as ExtractedPublicProperties\n}\n\n/**\n * Converts a value to an absolute integer, with fallback handling.\n * This utility is useful for sanitizing numeric inputs that should always be positive integers.\n *\n * @param value - The value to convert (number or string)\n * @param fallback - The fallback value to use if conversion fails (default: 0)\n * @returns An absolute integer value\n *\n * @example\n * ```typescript\n * asAbsInt(42) // 42\n * asAbsInt(-15) // 15\n * asAbsInt('10') // 10\n * asAbsInt('-5') // 5\n * asAbsInt('invalid') // 0 (fallback)\n * asAbsInt('abc', 10) // 10 (custom fallback)\n * asAbsInt(3.7) // 4 (rounded then made absolute)\n * ```\n */\nexport const asAbsInt = (value: number | string, fallback: number = 0): number => {\n const num = typeof value === 'number' ? value : Number.parseInt(value as string, 10)\n return Number.isNaN(num) ? Math.abs(Math.round(fallback)) : Math.abs(Math.round(num))\n}\n\n/**\n * Generates unique HTML element identifiers using high-quality encoding for collision resistance.\n * This function creates valid HTML IDs by combining a prefix with an encoded, sanitized suffix\n * derived from namespace, timestamp, and random data.\n *\n * The function ensures HTML ID validity by automatically fixing invalid prefixes and uses\n * a robust encoding system to generate high-quality pseudo-random suffixes with excellent\n * collision resistance properties.\n *\n * @param prefix - The prefix for the identifier. Will be prepended with 'p' if it doesn't start with a letter\n * @param namespace - A namespace string to include in the uniqueness calculation\n * @param unprefixedLength - Length of the encoded suffix (default: 8)\n * @param glue - Character(s) used to join prefix and suffix (default: '_')\n * @returns A valid HTML element ID guaranteed to start with a letter\n *\n * @example\n * ```typescript\n * makeIdentifier('btn', 'header') // 'btn_a8f9c2d1'\n * makeIdentifier('123nav', 'menu') // 'p123nav_b7e4f8a9' (prefix auto-fixed)\n * makeIdentifier('form', 'login', 12, '-') // 'form-c9d8e7f6a5b4'\n * makeIdentifier('', 'fallback') // 'p_d6c5b4a3'\n * ```\n */\nexport const makeIdentifier = (\n prefix: string,\n namespace: string,\n unprefixedLength: number = 8,\n glue: string = '_'\n) => {\n if (!prefix.match(/^[a-zA-Z]+$/)) {\n prefix = 'p' + prefix\n }\n const encoded = encode(`${prefix}:${namespace}:${new Date().getTime()}:${Math.random()}`)\n const unprefixed = encoded.replace(/[^a-zA-Z0-9]/g, '').slice(0, unprefixedLength)\n return [prefix, unprefixed].filter(Boolean).join(glue)\n}\n\nexport const getOxfordizedListParts = (items: string[]): { head: string; tail: string } => {\n if (items.length === 0) {\n return { head: '', tail: '' }\n } else if (items.length === 1) {\n return { head: items[0], tail: '' }\n } else if (items.length === 2) {\n return { head: items[0], tail: items[1] }\n } else {\n const head = items.slice(0, -1).join(', ')\n const tail = items[items.length - 1]\n return { head, tail }\n }\n}\n\n/**\n * Recursively converts reactive Vue values to plain JavaScript equivalents.\n * Removes all Vue reactivity (reactive, ref, computed) from nested data structures.\n * Handles objects, arrays, primitives, and any other value types safely.\n *\n * The function gracefully handles edge cases by using a try-catch block around Vue's\n * internal APIs. If `toRaw` or `toValue` throw an error (unlikely but possible), it\n * safely degrades to return the original value unchanged. Due to Vue's internal\n * architecture, the original value is very unlikely to contain reactivity in error cases.\n *\n * @template T - The type of the input value\n * @param value - A reactive value, ref, getter, or plain value to convert\n * @returns A completely plain (non-reactive) deep copy of the input, or the original value if conversion fails\n *\n * @example\n * ```typescript\n * const reactiveData = reactive({ user: { name: 'John' }, items: [1, 2, 3] })\n * const plainData = toUnreactive(reactiveData)\n * // Result: Plain object with no Vue reactivity\n *\n * const reactiveArray = reactive([1, 2, { nested: 'value' }])\n * const plainArray = toUnreactive(reactiveArray)\n * // Result: Plain array with plain objects\n *\n * const primitiveRef = ref(42)\n * const plainPrimitive = toUnreactive(primitiveRef)\n * // Result: 42 (plain number)\n * ```\n */\nexport const toUnreactive = <T = any>(value: MaybeRefOrGetter<T>): T => {\n if ('function' === typeof value) {\n // If the function name starts with \"on\", we need to just return it as-is\n // This will fix the bug where event handlers are called by `toValue` unintentionally\n if (value.name.startsWith('on')) {\n return value as unknown as T\n }\n }\n try {\n const stripped = toRaw(toValue(value))\n if (isObject(stripped)) {\n const keys = Object.keys(stripped) as Array<keyof T>\n return Object.assign({}, ...keys.map((k) => ({ [k]: toUnreactive(stripped[k]) }))) as T\n } else if (Array.isArray(stripped)) {\n return Array.from(stripped).map((item) => toUnreactive(item)) as any\n }\n return stripped\n } catch {\n return value as T\n }\n}\n\nexport const isNotEmpty = (value: MaybeRefOrGetter<any>): boolean => {\n const resolved = toUnreactive(value)\n return resolved !== null && resolved !== undefined && resolved !== ''\n}\n\nexport interface FocusProps {\n 'focused': boolean\n 'onUpdate:focused': ((focused: boolean) => any) | undefined\n}\n\nexport const useFocus = (props: FocusProps, name = getCurrentInstanceName()) => {\n const isFocused = ref(props.focused)\n const focusClasses = toRef(() => {\n return {\n [`${name}--focused`]: isFocused.value,\n }\n })\n\n function focus() {\n isFocused.value = true\n }\n\n function blur() {\n isFocused.value = false\n }\n\n return { focusClasses, isFocused, focus, blur }\n}\n\nexport const useSlot = <\n D extends Record<string, Slot> = Record<string, Slot>,\n N extends keyof D = keyof D,\n>(\n slot: N,\n slots: any\n): D[N] | undefined => {\n return slots[slot] as D[N] | undefined\n}\n\nconst extractTextFromVNode = (vnode: VNode): string => {\n // Handle text nodes\n if (typeof vnode.children === 'string') {\n return vnode.children\n }\n // Handle array of children (multiple VNodes)\n if (Array.isArray(vnode.children)) {\n return vnode.children\n .map((child) => {\n // If child is a string, return it\n if (typeof child === 'string') {\n return child\n }\n // If child is a VNode, recursively extract text\n if (child && typeof child === 'object') {\n return extractTextFromVNode(child as VNode)\n }\n return ''\n })\n .join('')\n }\n // Handle slots (if children is an object with slot functions)\n if (vnode.children && typeof vnode.children === 'object') {\n // For Vue 3, slots are stored as functions in the children object\n const slots = vnode.children as Record<string, any>\n // Try to get default slot content\n if (typeof slots.default === 'function') {\n const slotContent = slots.default()\n if (Array.isArray(slotContent)) {\n return slotContent\n .map((child) => {\n if (typeof child === 'string') {\n return child\n }\n if (child && typeof child === 'object') {\n return extractTextFromVNode(child)\n }\n return ''\n })\n .join('')\n }\n }\n }\n // If no text content found, return empty string\n return ''\n}\n\n/**\n * Converts a string or VNode to a plain string representation.\n * This utility is essential for handling mixed content types where both plain text\n * and rich VNode content need to be converted to string format for contexts that\n * only accept text (like HTML attributes, tooltips, accessibility labels, etc.).\n *\n * The function provides a safe and comprehensive way to extract meaningful text\n * content from Vue's VNode structures while maintaining backwards compatibility\n * with simple string inputs.\n *\n * @param input - Either a plain string or a Vue VNode to convert\n * @returns A plain string representation of the input content\n *\n * @example\n * ```typescript\n * // String input - returned as-is\n * getStringOrVNodeAsString('Hello World') // 'Hello World'\n *\n * // VNode with text content\n * const textNode = h('span', 'Hello VNode')\n * getStringOrVNodeAsString(textNode) // 'Hello VNode'\n *\n * // Complex VNode with nested content\n * const complexNode = h('div', [\n * h('span', 'Name: '),\n * h('strong', 'John Doe'),\n * h('span', ' (Admin)')\n * ])\n * getStringOrVNodeAsString(complexNode) // 'Name: John Doe (Admin)'\n *\n * // Usage in component context for title attributes\n * const result = props.stringifier(item) // Could be string or VNode\n * h('span', {\n * title: getStringOrVNodeAsString(result) // Always string for HTML attribute\n * }, result) // Rich content rendered here\n * ```\n */\nexport const getStringOrVNodeAsString = (input: string | VNode): string => {\n if (typeof input === 'string') {\n return input\n }\n if (input && typeof input === 'object') {\n return extractTextFromVNode(input)\n }\n return ''\n}\n\n/**\n * Merges CSS classes from multiple sources into a single array suitable for Vue's class binding.\n * This utility is designed for component development where you need to combine built-in component\n * classes with user-provided class additions (not overrides) while maintaining Vue's flexible\n * class binding format.\n *\n * The function preserves the exact structure expected by Vue's class binding system and handles\n * deep flattening of nested arrays while maintaining object references for conditional classes.\n * All input formats are normalized into a consistent output format that Vue can process efficiently.\n *\n * @param original - The base classes (typically from component internals)\n * @param additional - User-provided classes to add to the base classes\n * @param more - Additional class sources to merge (supports unlimited arguments)\n * @returns A flattened array of strings and conditional class objects ready for Vue's class binding\n *\n * @example\n * ```typescript\n * // Component usage - merging internal classes with user classes\n * const componentClasses = ['btn', 'btn-primary']\n * const userClasses = 'btn-large'\n * const conditionalClasses = { 'btn-disabled': isDisabled }\n *\n * const finalClasses = mergeClasses(componentClasses, userClasses, conditionalClasses)\n * // Result: ['btn', 'btn-primary', 'btn-large', { 'btn-disabled': true }]\n *\n * // In Vue component template\n * h('button', { class: mergeClasses(baseClasses, props.class) })\n *\n * // Complex nested structure flattening\n * const nestedClasses = [\n * 'base',\n * ['nested-1', { 'conditional-1': true }],\n * [['deeply-nested', 'another'], { 'conditional-2': false }]\n * ]\n * const flattened = mergeClasses(nestedClasses)\n * // Result: ['base', 'nested-1', { 'conditional-1': true }, 'deeply-nested', 'another', { 'conditional-2': false }]\n * ```\n */\nexport const mergeClasses = (\n original: string | undefined | Array<string | { [key: string]: boolean }>,\n additional: string | undefined | Array<string | { [key: string]: boolean }>,\n ...more: Array<string | undefined | Array<string | { [key: string]: boolean }>>\n): Array<string | { [key: string]: boolean }> => {\n const ret: Array<string | { [key: string]: boolean }> = []\n const handleEntry = (\n entry:\n | string\n | undefined\n | { [key: string]: boolean }\n | Array<string | { [key: string]: boolean }>\n ) => {\n if ('string' === typeof entry) {\n ret.push(entry)\n } else if ('object' === typeof entry && !Array.isArray(entry) && null !== entry) {\n ret.push(entry)\n } else if (Array.isArray(entry)) {\n entry.forEach((e) => handleEntry(e))\n }\n }\n handleEntry(original)\n handleEntry(additional)\n more.forEach((e) => handleEntry(e))\n return ret\n}\n\nexport function toKebabCase(str = '') {\n if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str)!\n const kebab = str\n .replace(/[^a-z]/gi, '-')\n .replace(/\\B([A-Z])/g, '-$1')\n .toLowerCase()\n toKebabCase.cache.set(str, kebab)\n return kebab\n}\ntoKebabCase.cache = new Map<string, string>()\n\ntype InnerVal<T> = T extends any[] ? Readonly<T> : T\nexport type EventProp<T extends any[] = any[], F = (...args: T) => void> = F\nexport const EventProp = <T extends any[] = any[]>() => [Function, Array] as PropType<EventProp<T>>\n\nexport const useProxiedModel = <\n Props extends object & {\n [key in Prop as `onUpdate:${Prop}`]: EventProp | undefined\n },\n Prop extends Extract<keyof Props, string>,\n Inner = Props[Prop],\n>(\n props: Props,\n prop: Prop,\n defaultValue?: Props[Prop],\n transformIn: (value?: Props[Prop]) => Inner = (v: any) => v,\n transformOut: (value: Inner) => Props[Prop] = (v: any) => v\n) => {\n const vm = getCurrentInstance('useProxiedModel')\n const internal = ref(props[prop] !== undefined ? props[prop] : defaultValue) as Ref<Props[Prop]>\n const kebabProp = toKebabCase(prop)\n const checkKebab = kebabProp !== prop\n const isControlled = checkKebab\n ? computed(() => {\n void props[prop]\n return !!(\n (vm.vnode.props?.hasOwnProperty(prop) || vm.vnode.props?.hasOwnProperty(kebabProp)) &&\n (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) ||\n vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`))\n )\n })\n : computed(() => {\n void props[prop]\n return !!(\n vm.vnode.props?.hasOwnProperty(prop) && vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`)\n )\n })\n const model = computed({\n get(): any {\n const externalValue = props[prop]\n return transformIn(isControlled.value ? externalValue : internal.value)\n },\n set(internalValue) {\n const newValue = transformOut(internalValue)\n const value = toRaw(isControlled.value ? props[prop] : internal.value)\n if (value === newValue || transformIn(value) === internalValue) {\n return\n }\n internal.value = newValue\n vm?.emit(`update:${prop}`, newValue)\n },\n }) as any as Ref<InnerVal<Inner>> & { readonly externalValue: Props[Prop] }\n\n Object.defineProperty(model, 'externalValue', {\n get: () => (isControlled.value ? props[prop] : internal.value),\n })\n\n return model\n}\n\nexport const ResourcefulFieldType = [\n 'string',\n 'date',\n 'dateTime',\n 'binary',\n 'number',\n 'integer',\n 'bigint',\n 'unsignedInteger',\n 'boolean',\n] as const\nexport type ResourcefulFieldType = (typeof ResourcefulFieldType)[number]\n\nexport const typeAndFormatToResourcefulFieldType = (\n type: string,\n format: string | undefined\n): ResourcefulFieldType => {\n // types will be from one of the primitive types found here:\n // https://spec.openapis.org/oas/v3.0.0.html#dataTypeFormat\n switch (type) {\n case 'boolean':\n return 'boolean' as const\n case 'integer': {\n switch (format) {\n case 'int32':\n return 'integer' as const\n case 'int64':\n return 'bigint' as const\n default:\n return 'unsignedInteger' as const\n }\n }\n case 'string': {\n switch (format) {\n case 'date':\n return 'date' as const\n case 'date-time':\n return 'dateTime' as const\n case 'binary':\n return 'binary' as const\n default:\n return 'string' as const\n }\n }\n case 'number':\n return 'number' as const\n default:\n return 'string' as const\n }\n}\n\n/**\n * Options for {@link usePassthroughHook} that control when and how a fallback is executed\n * and how the produced handler is scheduled.\n *\n * The passthrough hook builds an invoker for a given event that respects component props\n * (onX prop handlers), attribute listeners, and optional \"callOnX\" hook arrays before\n * falling back to your own handler. These options allow you to customize that behavior.\n *\n * @typeParam P - Tuple of the event argument types\n * @property fallback Optional function called when there are no bound handlers and no\n * registered call-on hooks for the event. Receives the original\n * event arguments. May be async.\n * @property debounceMs If set (> 0), the produced handler will be debounced by the given\n * milliseconds.\n * @property throttleMs If set (> 0), the produced handler will be throttled by the given\n * milliseconds.\n * @property immediate Controls when the produced handler runs when neither debounce nor\n * throttle is used:\n * - undefined (default): run on the next Vue tick (nextTick)\n * - false: run synchronously in the current tick\n * - true: run as a microtask (queueMicrotask)\n */\nexport type UsePassthroughHookOptions<P extends any[]> = {\n fallback?: (...args: P) => void | Promise<void>\n debounceMs?: number\n throttleMs?: number\n immediate?: boolean\n}\n\n/**\n * Builds an event invoker that respects component-bound handlers and hook arrays\n * before calling a fallback.\n *\n * This composable makes it easy to implement events that can be handled via:\n * - Prop/attribute handlers (onEventName in camelCase or kebab-case)\n * - Optional \"callOnEventName\" hook arrays defined on component props\n * - A provided fallback function when nothing else is registered\n *\n * The returned function mirrors the event's argument signature. You can also\n * debounce or throttle the produced handler, and control its scheduling\n * (microtask, next tick, or immediate) via {@link UsePassthroughHookOptions}.\n *\n * Event name lookup supports both camel and kebab notations for handlers, e.g.:\n * - update:modelValue → onUpdateModelValue (camel) and onUpdate:modelValue (kebab)\n * - item:selected → onItemSelected (camel) and onItem:selected (kebab)\n *\n * @typeParam Props - Component props type including potential onX handlers and callOnX arrays\n * @typeParam Events - Map of event names to their function signatures\n * @typeParam E - Concrete event name (key of Events)\n * @typeParam P - Tuple of the event argument types (derived from Events[E])\n * @param event Event name (e.g., 'update:modelValue')\n * @param emit Vue emit function used when a handler is present\n * @param callOnKey Name of the prop key that may contain hook array(s), like 'callOnSaving'\n * @param props Component props object (checked for onX handlers and callOn arrays)\n * @param attrs Component attrs object (checked for onX handlers passed via attributes)\n * @param options Behavior controls for fallback and scheduling\n * @returns A function with signature (...args: P) => Promise\\<void\\> | void to invoke the event\n */\nexport const usePassthroughHook = <\n Props extends {\n [key: string]: (...args: any[]) => any\n },\n Events extends {\n [key: string]: (...args: any[]) => any\n },\n E extends Extract<keyof Events, string>,\n P extends any[] = Parameters<Events[E]>,\n>(\n event: E,\n emit: (...args: any[]) => void,\n callOnKey: Extract<keyof Props, `callOn${string}`> | undefined | null,\n props: Props,\n attrs: Record<string, unknown>,\n options: UsePassthroughHookOptions<P> = {}\n) => {\n if (\n 'number' === typeof options.debounceMs &&\n 'number' === typeof options.throttleMs &&\n options.debounceMs > 0 &&\n options.throttleMs > 0\n ) {\n warn('usePassthroughHook: debounceMs and throttleMs are both set.')\n }\n const { camel, kebab } = getCamelAndMaybeKebabPropKeysFor(event) as {\n camel: any\n kebab: any\n }\n const doHook = async (...args: P) => {\n // if the `on${event}` props are set to functions, emit as normal\n if (\n 'function' === typeof props[camel] ||\n 'function' === typeof props[kebab] ||\n 'function' === typeof attrs[camel] ||\n 'function' === typeof attrs[kebab]\n ) {\n emit(event, ...args)\n return\n }\n // if there are `callOn${event}` hooks, do not run the fallback\n if ('string' !== typeof callOnKey || !(callOnKey in props)) return\n const callOns = props[callOnKey] as any\n if (Array.isArray(callOns) && callOns.length > 0) {\n return\n }\n const fallback = options.fallback ?? (() => {})\n await fallback(...args)\n }\n let callHook = doHook\n if ('number' === typeof options.debounceMs && options.debounceMs > 0) {\n callHook = debounce(callHook, options.debounceMs) as unknown as typeof doHook\n }\n if ('number' === typeof options.throttleMs && options.throttleMs > 0) {\n callHook = throttle(callHook, options.throttleMs) as unknown as typeof doHook\n }\n switch (true) {\n case 'undefined' === typeof options.immediate:\n callHook = async (...args: P) => {\n await nextTick()\n return await doHook(...args)\n }\n break\n\n case options.immediate:\n callHook = async (...args: P) => {\n return await new Promise<void>((rslv) => {\n queueMicrotask(() => doHook(...args).then(rslv))\n })\n }\n break\n }\n return callHook\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[1,2]}
1
+ {"version":3,"file":"utils-Dh8-g-7s.mjs","sources":["../src/private/common/guards.ts","../node_modules/.pnpm/case-anything@3.1.2/node_modules/case-anything/dist/utils.js","../node_modules/.pnpm/case-anything@3.1.2/node_modules/case-anything/dist/core.js","../src/private/common/factories.ts","../src/private/common/utils.ts"],"sourcesContent":["/**\n * Type guard to check if a value is a plain object (not null, not array)\n * @param value - The value to check\n * @returns True if the value is a plain object, false otherwise\n */\nexport const isObject = (value: unknown): value is { [key: string]: unknown } => {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport const isHTMLElement = (value: unknown): value is HTMLElement => {\n if ('undefined' === typeof HTMLElement) return false\n return value instanceof HTMLElement\n}\n","// Latin-1 Supplement\n// upper case ranges\n// [À-ÖØ-ß]\n// lower case ranges\n// [à-öø-ÿ]\nexport const magicSplit = /^[a-zà-öø-ÿа-я]+|[A-ZÀ-ÖØ-ßА-Я][a-zà-öø-ÿа-я]+|[a-zà-öø-ÿа-я]+|[0-9]+|[A-ZÀ-ÖØ-ßА-Я]+(?![a-zà-öø-ÿа-я])/g;\nexport const spaceSplit = /\\S+/g;\n/**\n * A string.matchAll function that will return an array of \"string parts\" and the indexes at which it split each part\n */\nexport function getPartsAndIndexes(string, splitRegex) {\n const result = { parts: [], prefixes: [] };\n const matches = string.matchAll(splitRegex);\n let lastWordEndIndex = 0;\n for (const match of matches) {\n if (typeof match.index !== 'number')\n continue;\n const word = match[0];\n result.parts.push(word);\n const prefix = string.slice(lastWordEndIndex, match.index).trim();\n result.prefixes.push(prefix);\n lastWordEndIndex = match.index + word.length;\n }\n const tail = string.slice(lastWordEndIndex).trim();\n if (tail) {\n result.parts.push('');\n result.prefixes.push(tail);\n }\n return result;\n}\n/**\n * A function that splits a string on words and returns an array of words.\n * - It can prefix each word with a given character\n * - It can strip or keep special characters, this affects the logic for adding a prefix as well\n */\nexport function splitAndPrefix(string, options) {\n const { keepSpecialCharacters = false, keep, prefix = '' } = options || {};\n const normalString = string.trim().normalize('NFC');\n const hasSpaces = normalString.includes(' ');\n const split = hasSpaces ? spaceSplit : magicSplit;\n const partsAndIndexes = getPartsAndIndexes(normalString, split);\n return partsAndIndexes.parts\n .map((_part, i) => {\n let foundPrefix = partsAndIndexes.prefixes[i] || '';\n let part = _part;\n if (keepSpecialCharacters === false) {\n if (keep) {\n part = part\n .normalize('NFD')\n .replace(new RegExp(`[^a-zA-ZØßø0-9${keep.join('')}]`, 'g'), '');\n }\n if (!keep) {\n part = part.normalize('NFD').replace(/[^a-zA-ZØßø0-9]/g, '');\n foundPrefix = '';\n }\n }\n if (keep && foundPrefix) {\n foundPrefix = foundPrefix.replace(new RegExp(`[^${keep.join('')}]`, 'g'), '');\n }\n // the first word doesn't need a prefix, so only return the found prefix\n if (i === 0) {\n // console.log(`foundPrefix → `, foundPrefix)\n return foundPrefix + part;\n }\n if (!foundPrefix && !part)\n return '';\n if (!hasSpaces) {\n // return the found prefix OR fall back to a given prefix\n return (foundPrefix || prefix) + part;\n }\n // space based sentence was split on spaces, so only return found prefixes\n if (!foundPrefix && prefix.match(/\\s/)) {\n // in this case we have no more found prefix, it was trimmed, but we're looking to add a space\n // so let's return that space\n return ' ' + part;\n }\n return (foundPrefix || prefix) + part;\n })\n .filter(Boolean);\n}\n/**\n * Capitalises a single word\n * @returns the word with the first character in uppercase and the rest in lowercase\n */\nexport function capitaliseWord(string) {\n const match = string.matchAll(magicSplit).next().value;\n const firstLetterIndex = match ? match.index : 0;\n return (string.slice(0, firstLetterIndex + 1).toUpperCase() +\n string.slice(firstLetterIndex + 1).toLowerCase());\n}\n","import { capitaliseWord, magicSplit, splitAndPrefix } from './utils.js';\n/**\n * # 🐪 camelCase\n * converts a string to camelCase\n * - first lowercase then all capitalised\n * - *strips away* special characters by default\n *\n * @example\n * camelCase('$catDog') === 'catDog'\n * @example\n * camelCase('$catDog', { keepSpecialCharacters: true }) === '$catDog'\n */\nexport function camelCase(string, options) {\n return splitAndPrefix(string, options).reduce((result, word, index) => {\n return index === 0 || !(word[0] || '').match(magicSplit)\n ? result + word.toLowerCase()\n : result + capitaliseWord(word);\n }, '');\n}\n/**\n * # 🐫 PascalCase\n * converts a string to PascalCase (also called UpperCamelCase)\n * - all capitalised\n * - *strips away* special characters by default\n *\n * @example\n * pascalCase('$catDog') === 'CatDog'\n * @example\n * pascalCase('$catDog', { keepSpecialCharacters: true }) === '$CatDog'\n */\nexport function pascalCase(string, options) {\n return splitAndPrefix(string, options).reduce((result, word) => {\n return result + capitaliseWord(word);\n }, '');\n}\n/**\n * # 🐫 UpperCamelCase\n * converts a string to UpperCamelCase (also called PascalCase)\n * - all capitalised\n * - *strips away* special characters by default\n *\n * @example\n * upperCamelCase('$catDog') === 'CatDog'\n * @example\n * upperCamelCase('$catDog', { keepSpecialCharacters: true }) === '$CatDog'\n */\nexport const upperCamelCase = pascalCase;\n/**\n * # 🥙 kebab-case\n * converts a string to kebab-case\n * - hyphenated lowercase\n * - *strips away* special characters by default\n *\n * @example\n * kebabCase('$catDog') === 'cat-dog'\n * @example\n * kebabCase('$catDog', { keepSpecialCharacters: true }) === '$cat-dog'\n */\nexport function kebabCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '-' })\n .join('')\n .toLowerCase();\n}\n/**\n * # 🐍 snake_case\n * converts a string to snake_case\n * - underscored lowercase\n * - *strips away* special characters by default\n *\n * @example\n * snakeCase('$catDog') === 'cat_dog'\n * @example\n * snakeCase('$catDog', { keepSpecialCharacters: true }) === '$cat_dog'\n */\nexport function snakeCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '_' })\n .join('')\n .toLowerCase();\n}\n/**\n * # 📣 CONSTANT_CASE\n * converts a string to CONSTANT_CASE\n * - underscored uppercase\n * - *strips away* special characters by default\n *\n * @example\n * constantCase('$catDog') === 'CAT_DOG'\n * @example\n * constantCase('$catDog', { keepSpecialCharacters: true }) === '$CAT_DOG'\n */\nexport function constantCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '_' })\n .join('')\n .toUpperCase();\n}\n/**\n * # 🚂 Train-Case\n * converts strings to Train-Case\n * - hyphenated & capitalised\n * - *strips away* special characters by default\n *\n * @example\n * trainCase('$catDog') === 'Cat-Dog'\n * @example\n * trainCase('$catDog', { keepSpecialCharacters: true }) === '$Cat-Dog'\n */\nexport function trainCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '-' })\n .map((word) => capitaliseWord(word))\n .join('');\n}\n/**\n * # 🕊 Ada_Case\n * converts a string to Ada_Case\n * - underscored & capitalised\n * - *strips away* special characters by default\n *\n * @example\n * adaCase('$catDog') === 'Cat_Dog'\n * @example\n * adaCase('$catDog', { keepSpecialCharacters: true }) === '$Cat_Dog'\n */\nexport function adaCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '_' })\n .map((part) => capitaliseWord(part))\n .join('');\n}\n/**\n * # 👔 COBOL-CASE\n * converts a string to COBOL-CASE\n * - hyphenated uppercase\n * - *strips away* special characters by default\n *\n * @example\n * cobolCase('$catDog') === 'CAT-DOG'\n * @example\n * cobolCase('$catDog', { keepSpecialCharacters: true }) === '$CAT-DOG'\n */\nexport function cobolCase(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '-' })\n .join('')\n .toUpperCase();\n}\n/**\n * # 📍 Dot.notation\n * converts a string to dot.notation\n * - adds dots, does not change casing\n * - *strips away* special characters by default\n *\n * @example\n * dotNotation('$catDog') === 'cat.Dog'\n * @example\n * dotNotation('$catDog', { keepSpecialCharacters: true }) === '$cat.Dog'\n */\nexport function dotNotation(string, options) {\n return splitAndPrefix(string, { ...options, prefix: '.' }).join('');\n}\n/**\n * # 📂 Path/case\n * converts a string to path/case\n * - adds slashes, does not change casing\n * - *keeps* special characters by default\n *\n * @example\n * pathCase('$catDog') === '$cat/Dog'\n * @example\n * pathCase('$catDog', { keepSpecialCharacters: false }) === 'cat/Dog'\n */\nexport function pathCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, options).reduce((result, word, i) => {\n const prefix = i === 0 || word[0] === '/' ? '' : '/';\n return result + prefix + word;\n }, '');\n}\n/**\n * # 🛰 Space case\n * converts a string to space case\n * - adds spaces, does not change casing\n * - *keeps* special characters by default\n *\n * @example\n * spaceCase('$catDog') === '$cat Dog'\n * @example\n * spaceCase('$catDog', { keepSpecialCharacters: false }) === 'cat Dog'\n */\nexport function spaceCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' }).join('');\n}\n/**\n * # 🏛 Capital Case\n * converts a string to Capital Case\n * - capitalizes words and adds spaces\n * - *keeps* special characters by default\n *\n * @example\n * capitalCase('$catDog') === '$Cat Dog'\n * @example\n * capitalCase('$catDog', { keepSpecialCharacters: false }) === 'Cat Dog'\n *\n * ⟪ if you do not want to add spaces, use `pascalCase()` ⟫\n */\nexport function capitalCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' }).reduce((result, word) => {\n return result + capitaliseWord(word);\n }, '');\n}\n/**\n * # 🔡 lower case\n * converts a string to lower case\n * - makes words lowercase and adds spaces\n * - *keeps* special characters by default\n *\n * @example\n * lowerCase('$catDog') === '$cat dog'\n * @example\n * lowerCase('$catDog', { keepSpecialCharacters: false }) === 'cat dog'\n *\n * ⟪ if you do not want to add spaces, use the native JS `toLowerCase()` ⟫\n */\nexport function lowerCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' })\n .join('')\n .toLowerCase();\n}\n/**\n * # 🔠 UPPER CASE\n * converts a string to UPPER CASE\n * - makes words upper case and adds spaces\n * - *keeps* special characters by default\n *\n * @example\n * upperCase('$catDog') === '$CAT DOG'\n * @example\n * upperCase('$catDog', { keepSpecialCharacters: false }) === 'CAT DOG'\n *\n * ⟪ if you do not want to add spaces, use the native JS `toUpperCase()` ⟫\n */\nexport function upperCase(string, options = { keepSpecialCharacters: true }) {\n return splitAndPrefix(string, { ...options, prefix: ' ' })\n .join('')\n .toUpperCase();\n}\n","/* eslint-disable vue/prefer-import-from-vue */\nimport { getDefaultsForPropFactory } from './utils'\nimport { camelCase, kebabCase } from 'case-anything'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport type { Merge } from 'type-fest'\nimport type { IfAny } from '@vue/shared'\nimport type { ExtractPublicDefaultPropTypes } from './utils'\nimport type { ComponentObjectPropsOptions, PropType, Prop, ExtractPublicPropTypes } from 'vue'\n/**\n * Interface for emit validator functions that return boolean values.\n * Used as input to the emitsFactory to define validation logic for Vue component emits.\n *\n * @example\n * ```typescript\n * const validators: EmitValidators = {\n * 'update:value': (newValue: string) => typeof newValue === 'string',\n * 'error': (error: Error) => error instanceof Error\n * }\n * ```\n */\ninterface EmitValidators {\n [key: string]: (...args: any[]) => boolean\n}\n\n/**\n * Mapped type that transforms emit validator functions to emit functions.\n * Converts functions that return `boolean` to functions that return `void`,\n * while preserving parameter types through conditional type inference.\n *\n * @template T - The emit validators object type\n *\n * @example\n * ```typescript\n * type Input = { save: (data: string) => boolean }\n * type Output = EmitFunctions<Input> // { save: (data: string) => void }\n * ```\n */\ntype EmitFunctions<T extends EmitValidators> = {\n [K in keyof T]: T[K] extends (...args: infer P) => boolean ? (...args: P) => void : never\n}\n\nexport type CastToEmitValidators<T extends EmitFunctions<EmitValidators>> = {\n [K in keyof T]: T[K] extends (...args: infer P) => void ? (...args: P) => boolean : never\n}\n\n/**\n * Type helper that generates emit handler prop types from emit validators.\n * Creates both camelCase and kebab-case variants for each emit.\n */\nexport type EmitHandlerProps<E extends EmitValidators> = {\n [K in keyof E as `on${Capitalize<string & K>}`]?: PropType<EmitFunctions<E>[K] | undefined>\n} & {\n [K in keyof E as K extends `${infer Prefix}:${infer Suffix}`\n ? `on${Capitalize<Prefix>}:${Suffix}`\n : never]?: PropType<EmitFunctions<E>[K] | undefined>\n}\n\ntype PartialKeys<T> = { [P in keyof T]?: unknown }\n\ntype InferPropType<T> = [T] extends [null]\n ? any // null & true would fail to infer\n : [T] extends [{ type: null | true }]\n ? // As TS issue https://github.com/Microsoft/TypeScript/issues/14829\n // somehow `ObjectConstructor` when inferred from { (): T } becomes `any`\n // `BooleanConstructor` when inferred from PropConstructor(with PropMethod) becomes `Boolean`\n any\n : [T] extends [ObjectConstructor | { type: ObjectConstructor }]\n ? Record<string, any>\n : [T] extends [BooleanConstructor | { type: BooleanConstructor }]\n ? boolean\n : [T] extends [DateConstructor | { type: DateConstructor }]\n ? Date\n : [T] extends [(infer U)[] | { type: (infer U)[] }]\n ? U extends DateConstructor\n ? Date | InferPropType<U>\n : InferPropType<U>\n : [T] extends [Prop<infer V, infer D>]\n ? unknown extends V\n ? IfAny<V, V, D>\n : V\n : T\n\ntype MergeTypeDefault<T, D, P = InferPropType<T>> = unknown extends D ? P : P | D\ntype MergeDefault<T, D, P = InferPropType<T>> = unknown extends D ? P : NonNullable<P> | D\n\ntype AppendDefault<T extends ComponentObjectPropsOptions, D extends PartialKeys<T>> = {\n [P in keyof T]-?: unknown extends D[P]\n ? T[P]\n : T[P] extends Record<string, unknown>\n ? Omit<T[P], 'type' | 'default'> & {\n type: PropType<MergeTypeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n : {\n type: PropType<MergeTypeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n}\n\nexport type PropFactory<PropsOptions extends ComponentObjectPropsOptions> = <\n Defaults extends PartialKeys<PropsOptions> = {},\n>(\n defaults?: Defaults\n) => AppendDefault<PropsOptions, Defaults>\n\n/**\n * Factory function that converts emit validator functions to Vue-compatible emit functions.\n *\n * This utility solves the TypeScript integration challenge with Vue's emit system:\n * - Vue expects emit functions to return `void`\n * - Developers want validator functions that return `boolean` for validation logic\n * - This factory preserves runtime validation while providing correct TypeScript types\n *\n * @template T - The type of the validators object\n * @param validators - Object containing validator functions that return boolean\n * @returns The same object cast to have emit functions that return void\n *\n * @example\n * ```typescript\n * // Define validators with actual validation logic\n * const validators = {\n * 'update:modelValue': (value: string[]) => Array.isArray(value),\n * 'error': (error: unknown) => true, // Always allow error emissions\n * 'save': (data: SaveData) => data && typeof data.id === 'string'\n * }\n *\n * // Use in Vue component\n * export default defineComponent({\n * emits: emitsFactory(validators),\n * setup(props, { emit }) {\n * // emit functions are properly typed as (...args) => void\n * emit('update:modelValue', ['item1', 'item2'])\n * emit('error', new Error('Something went wrong'))\n * }\n * })\n * ```\n */\nexport const emitsFactory = <T extends EmitValidators>(validators: T): EmitFunctions<T> => {\n // Return the original validators but cast the type to emit functions\n return validators as unknown as EmitFunctions<T>\n}\n\nexport const getCamelAndMaybeKebabPropKeysFor = (key: string): { camel: string; kebab: string } => {\n const camelPropKey = key\n .split(':')\n .map((p, i) => (i === 0 ? camelCase(['on', p].join('_')) : camelCase(p)))\n .join(':')\n const maybeKebabPropKey = key\n .split(':')\n .map((p, i) => (i === 0 ? camelCase(['on', p].join('_')) : kebabCase(p)))\n .join(':')\n return { camel: camelPropKey, kebab: maybeKebabPropKey }\n}\n\n/**\n * Factory function that creates both props and emits for Vue components with automatic\n * emit handler prop generation.\n *\n * This utility automatically generates corresponding prop handlers for each emit event,\n * supporting both camelCase and kebab-case naming conventions to maximize template\n * syntax flexibility. For each emit, it creates props that allow users to bind handlers\n * using either `:onEventName` or `@event-name` syntax.\n *\n * The returned `makeProps` function includes full TypeScript support for both the original\n * props and the automatically generated emit handler props, ensuring type safety throughout\n * component development.\n *\n * @template P - The type of the component props object\n * @template E - The type of the emit validators object\n * @param props - Component props object that will be extended with emit handler props\n * @param emits - Object containing emit validator functions\n * @param source - Source identifier for the props factory (used for debugging/tooling)\n * @returns Object containing makeProps and emits functions\n * @returns makeProps - Props factory function that includes original props + emit handler props with full TypeScript support\n * @returns emits - Emit functions converted from validators with proper void return types\n *\n * @example\n * ```typescript\n * // Define your component props and emits\n * const componentProps = {\n * value: String,\n * disabled: Boolean\n * }\n *\n * const componentEmits = {\n * 'update:modelValue': (value: string) => typeof value === 'string',\n * 'item:selected': (item: Item) => item && typeof item.id === 'string'\n * }\n *\n * // Create factories\n * const { makeProps, emits } = propsAndEmitsFactory(\n * componentProps,\n * componentEmits,\n * 'MyComponent'\n * )\n *\n * // makeProps() returns props with full TypeScript intellisense for:\n * // - Original props: value, disabled\n * // - Generated emit handlers: onUpdate:modelValue, onUpdateModelValue, onItem:selected, onItemSelected\n * export default defineComponent({\n * props: makeProps(),\n * emits,\n * setup(props, { emit }) {\n * // All props are properly typed including emit handlers\n * props.onUpdateModelValue?.(newValue)\n * emit('update:modelValue', newValue)\n * }\n * })\n *\n * // Template supports both syntaxes:\n * // <MyComponent :onUpdate:modelValue=\"handler\" />\n * // <MyComponent :onUpdate:model-value=\"handler\" />\n * // <MyComponent :onItem:selected=\"handler\" />\n * // <MyComponent :onItem:item-selected=\"handler\" />\n * ```\n */\nexport const propsAndEmitsFactory = <\n P extends ComponentObjectPropsOptions,\n E extends EmitValidators,\n>(\n props: P,\n emits: E,\n source: string\n): {\n makeProps: PropFactory<Merge<P, EmitHandlerProps<E>>>\n emits: EmitFunctions<E>\n} => {\n const makeEmits = emitsFactory(emits)\n for (const key in emits) {\n const { camel: camelPropKey, kebab: maybeKebabPropKey } = getCamelAndMaybeKebabPropKeysFor(key)\n if ('undefined' === typeof props[camelPropKey]) {\n // @ts-ignore\n props[camelPropKey] = {\n type: Function as PropType<EmitFunctions<E>[typeof key] | undefined>,\n default: undefined,\n }\n }\n if ('undefined' === typeof props[maybeKebabPropKey]) {\n // @ts-ignore\n props[maybeKebabPropKey] = {\n type: Function as PropType<EmitFunctions<E>[typeof key] | undefined>,\n default: undefined,\n }\n }\n }\n const makeProps = propsFactory(props as unknown as Merge<P, EmitHandlerProps<E>>, source)\n return {\n makeProps,\n emits: makeEmits,\n }\n}\n\nexport const propsAndDefaultsFactory = <P extends ComponentObjectPropsOptions>(\n props: P,\n source: string\n): { factory: PropFactory<P>; defaults: ExtractPublicDefaultPropTypes<P> } => {\n const factory = propsFactory(props, source) as PropFactory<P>\n const defaults = getDefaultsForPropFactory(factory as any) as ExtractPublicDefaultPropTypes<P>\n return { factory, defaults }\n}\n\nexport type ExtractPublicPropTypesFromFactory<T extends PropFactory<any>> = ExtractPublicPropTypes<\n ReturnType<T>\n>\n\nexport type ExtractPublicPropTypesFromUnknownFactory<T extends (...args: any) => any> =\n ExtractPublicPropTypes<ReturnType<T>>\n\n/**\n * Transforms emit validators or emit functions into hookable event types.\n *\n * Each event gets converted to a tuple with two signatures:\n * 1. Hook handler signature - receives the original event parameters\n * 2. Cleanup function signature - receives Error | null plus the original parameters\n *\n * @template T - The emit validators or emit functions object type\n *\n * @example\n * ```typescript\n * const emits = {\n * saving: (model: BaseModel) => true,\n * finding: (query: QueryBuilder) => true\n * }\n *\n * type Events = HookableEvents<typeof emits>\n * // {\n * // saving: [\n * // [BaseModel], // for hook handler\n * // [error: Error | null, BaseModel], // for cleanup function\n * // ],\n * // finding: [\n * // [QueryBuilder], // for hook handler\n * // [error: Error | null, QueryBuilder], // for cleanup function\n * // ]\n * // }\n * ```\n */\nexport type HookableEvents<T extends EmitValidators | EmitFunctions<EmitValidators>> = {\n [K in keyof T]: T[K] extends (...args: infer P) => boolean | void\n ? [callbackArgs: [...P], cleanupCallbackArgs: [error: Error | null, ...P]]\n : never\n}\n","import { isObject } from './guards'\nimport { encode } from '@nhtio/lucid-resourceful/encoding'\nimport { getCamelAndMaybeKebabPropKeysFor } from './factories'\nimport { debounce, throttle } from '@nhtio/vuetifiable/util/helpers'\nimport { toRaw, toValue, ref, toRef, computed, warn, nextTick } from 'vue'\nimport {\n getCurrentInstanceName,\n getCurrentInstance,\n} from '@nhtio/vuetifiable/util/getCurrentInstance'\nimport type { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport type {\n ExtractPublicPropTypes,\n ExtractDefaultPropTypes,\n MaybeRefOrGetter,\n Slot,\n VNode,\n PropType,\n Ref,\n} from 'vue'\n\nexport type ObjectStrippedOfUndefinedValues<T extends Record<string, any>> = {\n [K in keyof T as T[K] extends undefined ? never : K]: T[K] extends undefined ? never : T[K]\n}\n\n/**\n * Removes all properties with `undefined` values from an object.\n * This is useful for cleaning up objects before passing them to APIs or components\n * that should not receive undefined values.\n *\n * @template T - The type of the input object\n * @param obj - The object to process\n * @returns A new object with all undefined values removed\n *\n * @example\n * ```typescript\n * const input = { a: 1, b: undefined, c: 'hello', d: undefined }\n * const result = stripUndefinedValuesFromObject(input)\n * // result: { a: 1, c: 'hello' }\n * ```\n */\nexport const stripUndefinedValuesFromObject = <T extends Record<string, any>>(\n obj: T\n): ObjectStrippedOfUndefinedValues<T> => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => value !== undefined)\n ) as ObjectStrippedOfUndefinedValues<T>\n}\n\n/**\n * Extract default values for properties that are both public and have defaults.\n * This ensures we only get defaults for props that are actually exposed to consumers.\n *\n * This type intersects the keys from both `ExtractDefaultPropTypes` and `ExtractPublicPropTypes`\n * to create a type that only includes properties that are:\n * - Public (exposed to component consumers)\n * - Have default values defined\n * - Are not nullable/undefined\n *\n * @template O - The props object type to extract from\n *\n * @example\n * ```typescript\n * type MyProps = {\n * publicWithDefault: { type: StringConstructor, default: 'hello' }\n * publicRequired: { type: NumberConstructor, required: true }\n * privateWithDefault: { type: BooleanConstructor, default: false, __internal: true }\n * }\n *\n * type Defaults = ExtractPublicDefaultPropTypes<MyProps>\n * // Result: { publicWithDefault: string }\n * ```\n */\nexport type ExtractPublicDefaultPropTypes<O> = {\n [K in keyof ExtractDefaultPropTypes<O> & keyof ExtractPublicPropTypes<O>]: NonNullable<\n ExtractDefaultPropTypes<O>[K]\n >\n}\n\n/**\n * Type representing the return value of a Vuetifiable props factory function.\n * This is used to constrain the generic parameter in `getDefaultsForPropFactory`.\n */\nexport type PropFactory = ReturnType<typeof propsFactory>\n\n/**\n * Extracts default values from a Vuetifiable props factory and returns them as a runtime object.\n * This is useful for getting default prop values for component initialization or testing.\n *\n * The function handles different types of default values:\n * - Primitive defaults (string, number, boolean) are returned as-is\n * - Reference type defaults (Object, Array, etc.) defined as functions are called to get fresh instances\n * - Props without defaults are completely excluded from the result\n * - The result is cleaned to ensure no undefined values slip through\n *\n * Type safety is enforced at both compile-time (via NonNullable) and runtime (via stripUndefinedValuesFromObject).\n *\n * @template T - The props factory type, constrained to `PropFactory`\n * @template ExtractedPublicProperties - The extracted public properties with non-nullable defaults\n * @param factory - The Vuetifiable props factory function\n * @returns A clean object containing only the default values for public props that have defaults, guaranteed to be free of undefined values\n *\n * @example\n * ```typescript\n * const myPropsFactory = propsFactory({\n * title: { type: String, default: 'Hello World' },\n * items: { type: Array, default: () => [] },\n * settings: { type: Object, default: () => ({ theme: 'dark' }) },\n * count: { type: Number, default: 0 },\n * enabled: { type: Boolean }, // no default - will be excluded\n * internal: { type: String, default: 'secret', __internal: true } // private - will be excluded\n * }, 'MyComponent')\n *\n * const defaults = getDefaultsForPropFactory(myPropsFactory)\n * // Result: { title: 'Hello World', items: [], settings: { theme: 'dark' }, count: 0 }\n * // Note: 'enabled' and 'internal' are not included - no defaults or not public\n * ```\n */\nexport const getDefaultsForPropFactory = <\n T extends PropFactory = PropFactory,\n ExtractedPublicProperties = ExtractPublicDefaultPropTypes<T>,\n>(\n factory: T\n): ExtractedPublicProperties => {\n const ret: Partial<ExtractedPublicProperties> = {}\n const generated = factory()\n\n Object.entries(generated).forEach(([key, value]) => {\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n value !== null &&\n 'default' in value\n ) {\n // Handle reference type defaults that are functions (Object, Array, etc.)\n const isReferenceType =\n typeof value.type === 'function' && ['Object', 'Array'].includes(value.type.name)\n\n if (isReferenceType && typeof value.default === 'function') {\n ret[key as keyof ExtractedPublicProperties] = value.default()\n } else {\n // Handle primitive defaults or non-function reference defaults\n ret[key as keyof ExtractedPublicProperties] = (value as any).default\n }\n }\n // Props without defaults are simply omitted (no undefined assignment)\n })\n\n // Strip any undefined values that might have slipped through\n return stripUndefinedValuesFromObject(ret) as ExtractedPublicProperties\n}\n\n/**\n * Converts a value to an absolute integer, with fallback handling.\n * This utility is useful for sanitizing numeric inputs that should always be positive integers.\n *\n * @param value - The value to convert (number or string)\n * @param fallback - The fallback value to use if conversion fails (default: 0)\n * @returns An absolute integer value\n *\n * @example\n * ```typescript\n * asAbsInt(42) // 42\n * asAbsInt(-15) // 15\n * asAbsInt('10') // 10\n * asAbsInt('-5') // 5\n * asAbsInt('invalid') // 0 (fallback)\n * asAbsInt('abc', 10) // 10 (custom fallback)\n * asAbsInt(3.7) // 4 (rounded then made absolute)\n * ```\n */\nexport const asAbsInt = (value: number | string, fallback: number = 0): number => {\n const num = typeof value === 'number' ? value : Number.parseInt(value as string, 10)\n return Number.isNaN(num) ? Math.abs(Math.round(fallback)) : Math.abs(Math.round(num))\n}\n\n/**\n * Generates unique HTML element identifiers using high-quality encoding for collision resistance.\n * This function creates valid HTML IDs by combining a prefix with an encoded, sanitized suffix\n * derived from namespace, timestamp, and random data.\n *\n * The function ensures HTML ID validity by automatically fixing invalid prefixes and uses\n * a robust encoding system to generate high-quality pseudo-random suffixes with excellent\n * collision resistance properties.\n *\n * @param prefix - The prefix for the identifier. Will be prepended with 'p' if it doesn't start with a letter\n * @param namespace - A namespace string to include in the uniqueness calculation\n * @param unprefixedLength - Length of the encoded suffix (default: 8)\n * @param glue - Character(s) used to join prefix and suffix (default: '_')\n * @returns A valid HTML element ID guaranteed to start with a letter\n *\n * @example\n * ```typescript\n * makeIdentifier('btn', 'header') // 'btn_a8f9c2d1'\n * makeIdentifier('123nav', 'menu') // 'p123nav_b7e4f8a9' (prefix auto-fixed)\n * makeIdentifier('form', 'login', 12, '-') // 'form-c9d8e7f6a5b4'\n * makeIdentifier('', 'fallback') // 'p_d6c5b4a3'\n * ```\n */\nexport const makeIdentifier = (\n prefix: string,\n namespace: string,\n unprefixedLength: number = 8,\n glue: string = '_'\n) => {\n if (!prefix.match(/^[a-zA-Z]+$/)) {\n prefix = 'p' + prefix\n }\n const encoded = encode(`${prefix}:${namespace}:${new Date().getTime()}:${Math.random()}`)\n const unprefixed = encoded.replace(/[^a-zA-Z0-9]/g, '').slice(0, unprefixedLength)\n return [prefix, unprefixed].filter(Boolean).join(glue)\n}\n\nexport const getOxfordizedListParts = (items: string[]): { head: string; tail: string } => {\n if (items.length === 0) {\n return { head: '', tail: '' }\n } else if (items.length === 1) {\n return { head: items[0], tail: '' }\n } else if (items.length === 2) {\n return { head: items[0], tail: items[1] }\n } else {\n const head = items.slice(0, -1).join(', ')\n const tail = items[items.length - 1]\n return { head, tail }\n }\n}\n\n/**\n * Recursively converts reactive Vue values to plain JavaScript equivalents.\n * Removes all Vue reactivity (reactive, ref, computed) from nested data structures.\n * Handles objects, arrays, primitives, and any other value types safely.\n *\n * The function gracefully handles edge cases by using a try-catch block around Vue's\n * internal APIs. If `toRaw` or `toValue` throw an error (unlikely but possible), it\n * safely degrades to return the original value unchanged. Due to Vue's internal\n * architecture, the original value is very unlikely to contain reactivity in error cases.\n *\n * @template T - The type of the input value\n * @param value - A reactive value, ref, getter, or plain value to convert\n * @returns A completely plain (non-reactive) deep copy of the input, or the original value if conversion fails\n *\n * @example\n * ```typescript\n * const reactiveData = reactive({ user: { name: 'John' }, items: [1, 2, 3] })\n * const plainData = toUnreactive(reactiveData)\n * // Result: Plain object with no Vue reactivity\n *\n * const reactiveArray = reactive([1, 2, { nested: 'value' }])\n * const plainArray = toUnreactive(reactiveArray)\n * // Result: Plain array with plain objects\n *\n * const primitiveRef = ref(42)\n * const plainPrimitive = toUnreactive(primitiveRef)\n * // Result: 42 (plain number)\n * ```\n */\nexport const toUnreactive = <T = any>(value: MaybeRefOrGetter<T>): T => {\n if ('function' === typeof value) {\n // If the function name starts with \"on\", we need to just return it as-is\n // This will fix the bug where event handlers are called by `toValue` unintentionally\n if (value.name.startsWith('on')) {\n return value as unknown as T\n }\n }\n try {\n const stripped = toRaw(toValue(value))\n if (isObject(stripped)) {\n const keys = Object.keys(stripped) as Array<keyof T>\n return Object.assign({}, ...keys.map((k) => ({ [k]: toUnreactive(stripped[k]) }))) as T\n } else if (Array.isArray(stripped)) {\n return Array.from(stripped).map((item) => toUnreactive(item)) as any\n }\n return stripped\n } catch {\n return value as T\n }\n}\n\nexport const isNotEmpty = (value: MaybeRefOrGetter<any>): boolean => {\n const resolved = toUnreactive(value)\n return resolved !== null && resolved !== undefined && resolved !== ''\n}\n\nexport interface FocusProps {\n 'focused': boolean\n 'onUpdate:focused': ((focused: boolean) => any) | undefined\n}\n\nexport const useFocus = (props: FocusProps, name = getCurrentInstanceName()) => {\n const isFocused = ref(props.focused)\n const focusClasses = toRef(() => {\n return {\n [`${name}--focused`]: isFocused.value,\n }\n })\n\n function focus() {\n isFocused.value = true\n }\n\n function blur() {\n isFocused.value = false\n }\n\n return { focusClasses, isFocused, focus, blur }\n}\n\nexport const useSlot = <\n D extends Record<string, Slot> = Record<string, Slot>,\n N extends keyof D = keyof D,\n>(\n slot: N,\n slots: any\n): D[N] | undefined => {\n return slots[slot] as D[N] | undefined\n}\n\nconst extractTextFromVNode = (vnode: VNode): string => {\n // Handle text nodes\n if (typeof vnode.children === 'string') {\n return vnode.children\n }\n // Handle array of children (multiple VNodes)\n if (Array.isArray(vnode.children)) {\n return vnode.children\n .map((child) => {\n // If child is a string, return it\n if (typeof child === 'string') {\n return child\n }\n // If child is a VNode, recursively extract text\n if (child && typeof child === 'object') {\n return extractTextFromVNode(child as VNode)\n }\n return ''\n })\n .join('')\n }\n // Handle slots (if children is an object with slot functions)\n if (vnode.children && typeof vnode.children === 'object') {\n // For Vue 3, slots are stored as functions in the children object\n const slots = vnode.children as Record<string, any>\n // Try to get default slot content\n if (typeof slots.default === 'function') {\n const slotContent = slots.default()\n if (Array.isArray(slotContent)) {\n return slotContent\n .map((child) => {\n if (typeof child === 'string') {\n return child\n }\n if (child && typeof child === 'object') {\n return extractTextFromVNode(child)\n }\n return ''\n })\n .join('')\n }\n }\n }\n // If no text content found, return empty string\n return ''\n}\n\n/**\n * Converts a string or VNode to a plain string representation.\n * This utility is essential for handling mixed content types where both plain text\n * and rich VNode content need to be converted to string format for contexts that\n * only accept text (like HTML attributes, tooltips, accessibility labels, etc.).\n *\n * The function provides a safe and comprehensive way to extract meaningful text\n * content from Vue's VNode structures while maintaining backwards compatibility\n * with simple string inputs.\n *\n * @param input - Either a plain string or a Vue VNode to convert\n * @returns A plain string representation of the input content\n *\n * @example\n * ```typescript\n * // String input - returned as-is\n * getStringOrVNodeAsString('Hello World') // 'Hello World'\n *\n * // VNode with text content\n * const textNode = h('span', 'Hello VNode')\n * getStringOrVNodeAsString(textNode) // 'Hello VNode'\n *\n * // Complex VNode with nested content\n * const complexNode = h('div', [\n * h('span', 'Name: '),\n * h('strong', 'John Doe'),\n * h('span', ' (Admin)')\n * ])\n * getStringOrVNodeAsString(complexNode) // 'Name: John Doe (Admin)'\n *\n * // Usage in component context for title attributes\n * const result = props.stringifier(item) // Could be string or VNode\n * h('span', {\n * title: getStringOrVNodeAsString(result) // Always string for HTML attribute\n * }, result) // Rich content rendered here\n * ```\n */\nexport const getStringOrVNodeAsString = (input: string | VNode): string => {\n if (typeof input === 'string') {\n return input\n }\n if (input && typeof input === 'object') {\n return extractTextFromVNode(input)\n }\n return ''\n}\n\n/**\n * Merges CSS classes from multiple sources into a single array suitable for Vue's class binding.\n * This utility is designed for component development where you need to combine built-in component\n * classes with user-provided class additions (not overrides) while maintaining Vue's flexible\n * class binding format.\n *\n * The function preserves the exact structure expected by Vue's class binding system and handles\n * deep flattening of nested arrays while maintaining object references for conditional classes.\n * All input formats are normalized into a consistent output format that Vue can process efficiently.\n *\n * @param original - The base classes (typically from component internals)\n * @param additional - User-provided classes to add to the base classes\n * @param more - Additional class sources to merge (supports unlimited arguments)\n * @returns A flattened array of strings and conditional class objects ready for Vue's class binding\n *\n * @example\n * ```typescript\n * // Component usage - merging internal classes with user classes\n * const componentClasses = ['btn', 'btn-primary']\n * const userClasses = 'btn-large'\n * const conditionalClasses = { 'btn-disabled': isDisabled }\n *\n * const finalClasses = mergeClasses(componentClasses, userClasses, conditionalClasses)\n * // Result: ['btn', 'btn-primary', 'btn-large', { 'btn-disabled': true }]\n *\n * // In Vue component template\n * h('button', { class: mergeClasses(baseClasses, props.class) })\n *\n * // Complex nested structure flattening\n * const nestedClasses = [\n * 'base',\n * ['nested-1', { 'conditional-1': true }],\n * [['deeply-nested', 'another'], { 'conditional-2': false }]\n * ]\n * const flattened = mergeClasses(nestedClasses)\n * // Result: ['base', 'nested-1', { 'conditional-1': true }, 'deeply-nested', 'another', { 'conditional-2': false }]\n * ```\n */\nexport const mergeClasses = (\n original: string | undefined | Array<string | { [key: string]: boolean }>,\n additional: string | undefined | Array<string | { [key: string]: boolean }>,\n ...more: Array<string | undefined | Array<string | { [key: string]: boolean }>>\n): Array<string | { [key: string]: boolean }> => {\n const ret: Array<string | { [key: string]: boolean }> = []\n const handleEntry = (\n entry:\n | string\n | undefined\n | { [key: string]: boolean }\n | Array<string | { [key: string]: boolean }>\n ) => {\n if ('string' === typeof entry) {\n ret.push(entry)\n } else if ('object' === typeof entry && !Array.isArray(entry) && null !== entry) {\n ret.push(entry)\n } else if (Array.isArray(entry)) {\n entry.forEach((e) => handleEntry(e))\n }\n }\n handleEntry(original)\n handleEntry(additional)\n more.forEach((e) => handleEntry(e))\n return ret\n}\n\nexport function toKebabCase(str = '') {\n if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str)!\n const kebab = str\n .replace(/[^a-z]/gi, '-')\n .replace(/\\B([A-Z])/g, '-$1')\n .toLowerCase()\n toKebabCase.cache.set(str, kebab)\n return kebab\n}\ntoKebabCase.cache = new Map<string, string>()\n\ntype InnerVal<T> = T extends any[] ? Readonly<T> : T\nexport type EventProp<T extends any[] = any[], F = (...args: T) => void> = F\nexport const EventProp = <T extends any[] = any[]>() => [Function, Array] as PropType<EventProp<T>>\n\nexport const useProxiedModel = <\n Props extends object & {\n [key in Prop as `onUpdate:${Prop}`]: EventProp | undefined\n },\n Prop extends Extract<keyof Props, string>,\n Inner = Props[Prop],\n>(\n props: Props,\n prop: Prop,\n defaultValue?: Props[Prop],\n transformIn: (value?: Props[Prop]) => Inner = (v: any) => v,\n transformOut: (value: Inner) => Props[Prop] = (v: any) => v\n) => {\n const vm = getCurrentInstance('useProxiedModel')\n const internal = ref(props[prop] !== undefined ? props[prop] : defaultValue) as Ref<Props[Prop]>\n const kebabProp = toKebabCase(prop)\n const checkKebab = kebabProp !== prop\n const isControlled = checkKebab\n ? computed(() => {\n void props[prop]\n return !!(\n (vm.vnode.props?.hasOwnProperty(prop) || vm.vnode.props?.hasOwnProperty(kebabProp)) &&\n (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) ||\n vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`))\n )\n })\n : computed(() => {\n void props[prop]\n return !!(\n vm.vnode.props?.hasOwnProperty(prop) && vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`)\n )\n })\n const model = computed({\n get(): any {\n const externalValue = props[prop]\n return transformIn(isControlled.value ? externalValue : internal.value)\n },\n set(internalValue) {\n const newValue = transformOut(internalValue)\n const value = toRaw(isControlled.value ? props[prop] : internal.value)\n if (value === newValue || transformIn(value) === internalValue) {\n return\n }\n internal.value = newValue\n vm?.emit(`update:${prop}`, newValue)\n },\n }) as any as Ref<InnerVal<Inner>> & { readonly externalValue: Props[Prop] }\n\n Object.defineProperty(model, 'externalValue', {\n get: () => (isControlled.value ? props[prop] : internal.value),\n })\n\n return model\n}\n\nexport const ResourcefulFieldType = [\n 'string',\n 'date',\n 'dateTime',\n 'binary',\n 'number',\n 'integer',\n 'bigint',\n 'unsignedInteger',\n 'boolean',\n] as const\nexport type ResourcefulFieldType = (typeof ResourcefulFieldType)[number]\n\nexport const typeAndFormatToResourcefulFieldType = (\n type: string,\n format: string | undefined\n): ResourcefulFieldType => {\n // types will be from one of the primitive types found here:\n // https://spec.openapis.org/oas/v3.0.0.html#dataTypeFormat\n switch (type) {\n case 'boolean':\n return 'boolean' as const\n case 'integer': {\n switch (format) {\n case 'int32':\n return 'integer' as const\n case 'int64':\n return 'bigint' as const\n default:\n return 'unsignedInteger' as const\n }\n }\n case 'string': {\n switch (format) {\n case 'date':\n return 'date' as const\n case 'date-time':\n return 'dateTime' as const\n case 'binary':\n return 'binary' as const\n default:\n return 'string' as const\n }\n }\n case 'number':\n return 'number' as const\n default:\n return 'string' as const\n }\n}\n\n/**\n * Options for {@link usePassthroughHook} that control when and how a fallback is executed\n * and how the produced handler is scheduled.\n *\n * The passthrough hook builds an invoker for a given event that respects component props\n * (onX prop handlers), attribute listeners, and optional \"callOnX\" hook arrays before\n * falling back to your own handler. These options allow you to customize that behavior.\n *\n * @typeParam P - Tuple of the event argument types\n * @property fallback Optional function called when there are no bound handlers and no\n * registered call-on hooks for the event. Receives the original\n * event arguments. May be async.\n * @property debounceMs If set (> 0), the produced handler will be debounced by the given\n * milliseconds.\n * @property throttleMs If set (> 0), the produced handler will be throttled by the given\n * milliseconds.\n * @property immediate Controls when the produced handler runs when neither debounce nor\n * throttle is used:\n * - undefined (default): run on the next Vue tick (nextTick)\n * - false: run synchronously in the current tick\n * - true: run as a microtask (queueMicrotask)\n */\nexport type UsePassthroughHookOptions<P extends any[]> = {\n fallback?: (...args: P) => void | Promise<void>\n debounceMs?: number\n throttleMs?: number\n immediate?: boolean\n}\n\n/**\n * Builds an event invoker that respects component-bound handlers and hook arrays\n * before calling a fallback.\n *\n * This composable makes it easy to implement events that can be handled via:\n * - Prop/attribute handlers (onEventName in camelCase or kebab-case)\n * - Optional \"callOnEventName\" hook arrays defined on component props\n * - A provided fallback function when nothing else is registered\n *\n * The returned function mirrors the event's argument signature. You can also\n * debounce or throttle the produced handler, and control its scheduling\n * (microtask, next tick, or immediate) via {@link UsePassthroughHookOptions}.\n *\n * Event name lookup supports both camel and kebab notations for handlers, e.g.:\n * - update:modelValue → onUpdateModelValue (camel) and onUpdate:modelValue (kebab)\n * - item:selected → onItemSelected (camel) and onItem:selected (kebab)\n *\n * @typeParam Props - Component props type including potential onX handlers and callOnX arrays\n * @typeParam Events - Map of event names to their function signatures\n * @typeParam E - Concrete event name (key of Events)\n * @typeParam P - Tuple of the event argument types (derived from Events[E])\n * @param event Event name (e.g., 'update:modelValue')\n * @param emit Vue emit function used when a handler is present\n * @param callOnKey Name of the prop key that may contain hook array(s), like 'callOnSaving'\n * @param props Component props object (checked for onX handlers and callOn arrays)\n * @param attrs Component attrs object (checked for onX handlers passed via attributes)\n * @param options Behavior controls for fallback and scheduling\n * @returns A function with signature (...args: P) => Promise\\<void\\> | void to invoke the event\n */\nexport const usePassthroughHook = <\n Props extends {\n [key: string]: (...args: any[]) => any\n },\n Events extends {\n [key: string]: (...args: any[]) => any\n },\n E extends Extract<keyof Events, string>,\n P extends any[] = Parameters<Events[E]>,\n>(\n event: E,\n emit: (...args: any[]) => void,\n callOnKey: Extract<keyof Props, `callOn${string}`> | undefined | null,\n props: Props,\n attrs: Record<string, unknown>,\n options: UsePassthroughHookOptions<P> = {}\n) => {\n if (\n 'number' === typeof options.debounceMs &&\n 'number' === typeof options.throttleMs &&\n options.debounceMs > 0 &&\n options.throttleMs > 0\n ) {\n warn('usePassthroughHook: debounceMs and throttleMs are both set.')\n }\n const { camel, kebab } = getCamelAndMaybeKebabPropKeysFor(event) as {\n camel: any\n kebab: any\n }\n const doHook = async (...args: P) => {\n // if the `on${event}` props are set to functions, emit as normal\n if (\n 'function' === typeof props[camel] ||\n 'function' === typeof props[kebab] ||\n 'function' === typeof attrs[camel] ||\n 'function' === typeof attrs[kebab]\n ) {\n emit(event, ...args)\n return\n }\n // if there are `callOn${event}` hooks, do not run the fallback\n if ('string' !== typeof callOnKey || !(callOnKey in props)) return\n const callOns = props[callOnKey] as any\n if (Array.isArray(callOns) && callOns.length > 0) {\n return\n }\n const fallback = options.fallback ?? (() => {})\n await fallback(...args)\n }\n let callHook = doHook\n if ('number' === typeof options.debounceMs && options.debounceMs > 0) {\n callHook = debounce(callHook, options.debounceMs) as unknown as typeof doHook\n }\n if ('number' === typeof options.throttleMs && options.throttleMs > 0) {\n callHook = throttle(callHook, options.throttleMs) as unknown as typeof doHook\n }\n switch (true) {\n case 'undefined' === typeof options.immediate:\n callHook = async (...args: P) => {\n await nextTick()\n return await doHook(...args)\n }\n break\n\n case options.immediate:\n callHook = async (...args: P) => {\n return await new Promise<void>((rslv) => {\n queueMicrotask(() => doHook(...args).then(rslv))\n })\n }\n break\n }\n return callHook\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[1,2]}
@@ -1,8 +1,8 @@
1
- import { p as process$1, n as getCurrentInstanceName, u as useRender, d as debounce } from "./vendor-nhtio-vuetifiable-Qm2uuc7r.mjs";
1
+ import { p as process$1, h as getCurrentInstanceName, u as useRender, d as debounce } from "./vendor-nhtio-vuetifiable-CRAkpWr4.mjs";
2
2
  import { ref, reactive, computed, toValue, unref, onMounted, isRef, watch, provide, readonly, watchEffect, nextTick, shallowRef, warn, getCurrentInstance, onUnmounted, defineComponent, toRefs, h, onBeforeUnmount, toRef, triggerRef } from "vue";
3
- import { a as useI18n, u as useIoC, l as dotCtor } from "./ioc-BRFP3w6U.mjs";
4
- import { p as propsAndEmitsFactory, i as isObject$1, s as stripUndefinedValuesFromObject, t as toUnreactive } from "./utils-C_uOac-v.mjs";
5
- import { u as useScopedDisplay } from "./display-DtPqxGxo.mjs";
3
+ import { a as useI18n, u as useIoC, l as dotCtor } from "./ioc-CbjgKkoq.mjs";
4
+ import { p as propsAndEmitsFactory, i as isObject$1, s as stripUndefinedValuesFromObject, t as toUnreactive } from "./utils-Dh8-g-7s.mjs";
5
+ import { u as useScopedDisplay } from "./display-2uHLu-iA.mjs";
6
6
  import { d as deepmerge } from "./index-B2cQuM3q.mjs";
7
7
  import { k as validator, V as ValidationError, j as encode } from "./vendor-nhtio-lucid-resourceful-Bc8uNS08.mjs";
8
8
  function dset(obj, keys, val) {
@@ -789,7 +789,7 @@ async function installDevtoolsPlugin(app) {
789
789
  if (!isClient) {
790
790
  return;
791
791
  }
792
- const devtools = await import("./index-1tiFk-z8.mjs");
792
+ const devtools = await import("./index-CZJ2FcjP.mjs");
793
793
  devtools.setupDevtoolsPlugin({
794
794
  id: "vee-validate-devtools-plugin",
795
795
  label: "VeeValidate Plugin",
@@ -2728,4 +2728,4 @@ export {
2728
2728
  isValidationError as i,
2729
2729
  useValidation as u
2730
2730
  };
2731
- //# sourceMappingURL=validation-D1FwcMNA.mjs.map
2731
+ //# sourceMappingURL=validation-DBLJZW1_.mjs.map