@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,13 +1,13 @@
1
- import { a as useI18n } from "./ioc-BRFP3w6U.mjs";
1
+ import { a as useI18n } from "./ioc-CbjgKkoq.mjs";
2
2
  import { useLocale } from "vuetify";
3
3
  import { d as deepmerge } from "./index-B2cQuM3q.mjs";
4
- import { a as useSlot, s as stripUndefinedValuesFromObject, j as asAbsInt } from "./utils-C_uOac-v.mjs";
5
- import { C as ControlMenu } from "./index-CzhpetTi.mjs";
6
- import { u as useScopedDisplay } from "./display-DtPqxGxo.mjs";
7
- import { d as debounce, c as convertToUnit, u as useRender, f as forwardRefs, I as IN_BROWSER } from "./vendor-nhtio-vuetifiable-Qm2uuc7r.mjs";
8
- import { c as controlButtonBarEmits, m as makeControlButtonBarProps } from "./props-BBBc7J1q.mjs";
4
+ import { a as useSlot, s as stripUndefinedValuesFromObject, j as asAbsInt } from "./utils-Dh8-g-7s.mjs";
5
+ import { C as ControlMenu } from "./index-lUBFKgIk.mjs";
6
+ import { u as useScopedDisplay } from "./display-2uHLu-iA.mjs";
7
+ import { d as debounce, c as convertToUnit, u as useRender, f as forwardRefs, I as IN_BROWSER } from "./vendor-nhtio-vuetifiable-CRAkpWr4.mjs";
8
+ import { c as controlButtonBarEmits, m as makeControlButtonBarProps } from "./props-BPO1G4n5.mjs";
9
9
  import { defineComponent, toRefs, computed, ref, cloneVNode, mergeProps, h, onMounted, watch, onUnmounted } from "vue";
10
- import { V as VListItem } from "./VListItem-TG9oZPkm.mjs";
10
+ import { V as VListItem } from "./VListItem-B2LElOLe.mjs";
11
11
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
12
12
  const cloneForMenu = (vnode) => {
13
13
  const updatedProps = stripUndefinedValuesFromObject({
@@ -347,4 +347,4 @@ const ControlButtonBar = defineComponent({
347
347
  export {
348
348
  ControlButtonBar as C
349
349
  };
350
- //# sourceMappingURL=index-Cp6PZ6jr.mjs.map
350
+ //# sourceMappingURL=index-DHeWMCWw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-Cp6PZ6jr.mjs","sources":["../src/private/control-button-bar/index.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Control Button Bar Component\n|--------------------------------------------------------------------------\n|\n| An intelligent, responsive toolbar component that automatically handles\n| button overflow with dropdown menus. Uses container-aware responsive\n| breakpoints to adapt to any layout constraint, providing seamless UX\n| across devices and contexts.\n|\n*/\n\nimport { useI18n } from '../ioc'\nimport { useLocale } from 'vuetify'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { ControlMenu } from '../control-menu'\nimport { useScopedDisplay } from '../ux/display'\nimport { VListItem } from 'vuetify/components/VList'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { IN_BROWSER } from '@nhtio/vuetifiable/util/globals'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { convertToUnit } from '@nhtio/vuetifiable/util/helpers'\nimport { forwardRefs } from '@nhtio/vuetifiable/composables/forwardRefs'\nimport { makeControlButtonBarProps, controlButtonBarEmits } from './props'\nimport { stripUndefinedValuesFromObject, asAbsInt } from '../common/utils'\nimport {\n computed,\n ref,\n h,\n defineComponent,\n onMounted,\n onUnmounted,\n toRefs,\n mergeProps,\n cloneVNode,\n watch,\n} from 'vue'\nimport type { WatchStopHandle, SlotsType, VNode } from 'vue'\nimport type { ControlButtonBarOverflowMenuButtonProps } from './props'\n\nexport type { ControlButtonBarProps } from './props'\n\nconst SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && 'MutationObserver' in window\n\nconst cloneForMenu = (vnode: VNode) => {\n const updatedProps = stripUndefinedValuesFromObject({\n ...vnode.props,\n 'id': undefined,\n 'aria-controls': undefined,\n ...mergeProps(\n {\n class: vnode.props?.class ? vnode.props.class : undefined,\n },\n {\n class: ['mx-0'],\n }\n ),\n // we are adding a custom prop to identify that this button is rendered in the menu\n // if the component supports it, it can use this prop to adjust its styling/behavior\n 'inOverflowMenu': true,\n })\n return cloneVNode(vnode, updatedProps)\n}\n\n/**\n * Slot types for the ControlButtonBar component.\n *\n * @public\n */\nexport type ControlButtonBarSlots = {\n /** Content to prepend to the overflow menu */\n 'prepend-menu'?: () => any\n /** Content to append to the overflow menu */\n 'append-menu'?: () => any\n}\n\n/**\n * A responsive toolbar component that automatically handles button overflow with dropdown menus.\n *\n * Features:\n * - Container-aware responsive behavior using useScopedDisplay\n * - Automatic overflow detection with visual jumping reduction\n * - RTL support with intelligent menu positioning\n * - MutationObserver for dynamic content changes\n * - Customizable gap spacing and justification\n * - Performance-optimized with debounced calculations\n *\n * @example\n * ```vue\n * <ControlButtonBar\n * :buttons=\"[\n * h(VBtn, { text: 'Columns' }),\n * h(VBtn, { text: 'Filters' }),\n * h(VBtn, { text: 'Sorting' })\n * ]\"\n * justification=\"center\"\n * :gap=\"2\"\n * />\n * ```\n *\n * @public\n */\nexport const ControlButtonBar = defineComponent({\n name: 'ControlButtonBar',\n inheritAttrs: false,\n props: makeControlButtonBarProps(),\n emits: controlButtonBarEmits,\n slots: Object as SlotsType<ControlButtonBarSlots>,\n setup(props, { attrs, slots }) {\n const t = useI18n()\n const { isRtl } = useLocale()\n const {\n buttons,\n justification,\n gap,\n overflowMenuButtonOptions,\n class: className,\n style,\n } = toRefs(props)\n const prependMenuSlot = useSlot<ControlButtonBarSlots>('prepend-menu', slots)\n const appendMenuSlot = useSlot<ControlButtonBarSlots>('append-menu', slots)\n const normalizedOverflowMenuButtonOptions = computed<ControlButtonBarOverflowMenuButtonProps>(\n () =>\n deepmerge(\n {\n cta: t('general.more'),\n },\n stripUndefinedValuesFromObject({\n cta: overflowMenuButtonOptions.value.cta,\n }),\n {\n activator: stripUndefinedValuesFromObject({\n color: overflowMenuButtonOptions.value.color,\n density: overflowMenuButtonOptions.value.density,\n size: overflowMenuButtonOptions.value.size,\n }),\n }\n )\n )\n const containerRef = ref<HTMLDivElement | null>(null)\n const wrapperRef = ref<HTMLDivElement | null>(null)\n const overflowMenuWrapperRef = ref<HTMLElement | null>(null)\n const overflowMenuButtonRef = ref<ControlMenu | null>(null)\n const overflowMenuButtonIsOpen = computed(() => {\n if (!overflowMenuButtonRef.value) return false\n return overflowMenuButtonRef.value.isOpen\n })\n const usableButtons = computed(() => Array.from(buttons.value).map((btn) => cloneVNode(btn)))\n const clonedButtons = computed(() =>\n !overflowMenuButtonIsOpen.value\n ? []\n : Array.from(buttons.value).map((btn) => cloneForMenu(btn))\n )\n const { width: containerWidth, intersecting, xs } = useScopedDisplay(containerRef)\n const { width: wrapperWidth } = useScopedDisplay(wrapperRef)\n const { width: overflowMenuWrapperWidth, height: overflowMenuWrapperHeight } =\n useScopedDisplay(overflowMenuWrapperRef)\n const containerProps = computed(() =>\n mergeProps(\n {\n class: attrs.class || {},\n style: attrs.style || {},\n },\n {\n class: className.value,\n style: style.value,\n },\n {\n class: ['w-100', 'position-relative', 'r-control-button-bar'],\n role: 'toolbar',\n style: {\n transition: 'opacity 0.2s ease, transform 0.2s ease',\n },\n }\n )\n )\n const overflowedButtonIndexes = ref<number[]>([])\n const lastVisibleButtonEndOffset = ref<number | null>(null)\n const showOverflowMenu = computed(\n () => buttons.value.length > 1 && overflowedButtonIndexes.value.length > 0\n )\n const overflowMenuPosition = computed<'right' | 'left'>(() =>\n isRtl.value\n ? justification.value === 'start'\n ? 'left'\n : 'right'\n : justification.value === 'start'\n ? 'right'\n : 'left'\n )\n const computeOverflowedButtonIndexes = debounce(() => {\n // if there is no container, wrapper, or overflow menu wrapper, we cannot compute overflow\n if (!containerRef.value || !wrapperRef.value || !overflowMenuWrapperRef.value) return\n // if the container is not intersecting (visible), do not compute overflow\n if (!intersecting.value) return\n // if there are less than 2 buttons, then there cannot be any overflow\n if (buttons.value.length < 2) {\n overflowedButtonIndexes.value = []\n return\n }\n // we have 2 values to compare against\n // if none of the buttons extend beyond the wrapper's total width, then there is no overflow\n // otherwise anything that is beyond the wrapper's width minus the overflow button's width\n // is considered overflowed and will be set to 0 opacity + pointer-events: none and then\n // duplicated into the overflow menu\n const wrapperEl = wrapperRef.value\n const buttonWrappers = Array.from(wrapperEl.children) as HTMLDivElement[]\n const currentWrapperWidth = containerWidth.value\n const availableWidthWithOverflowMenu = containerWidth.value - overflowMenuWrapperWidth.value\n\n const buttonWrapperIndexAndOffsets = buttonWrappers.map((wrapper, index) => ({\n index,\n left: wrapper.offsetLeft,\n right: wrapper.offsetLeft + wrapper.offsetWidth,\n }))\n\n // Check if any buttons overflow the wrapper when the menu is visible\n const buttonsOverflowingWrapperIfMenuVisisble = buttonWrapperIndexAndOffsets.filter(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value\n ? left < overflowMenuWrapperWidth.value\n : right > availableWidthWithOverflowMenu\n )\n\n // if no buttons overflow the wrapper when the menu is visible, exit early\n if (buttonsOverflowingWrapperIfMenuVisisble.length === 0) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // check if any of the buttons overflow the wrapper if the menu is not visible\n const someOutsideContainer = buttonsOverflowingWrapperIfMenuVisisble.some(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value ? left < 0 : right > currentWrapperWidth\n )\n // if none of the buttons overflow the wrapper if the menu is not visible, exit early\n if (!someOutsideContainer) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // otherwise, the buttons that overflow the wrapper when the menu is visible are the ones that are overflowed\n overflowedButtonIndexes.value = buttonsOverflowingWrapperIfMenuVisisble.map(\n ({ index }) => index\n )\n\n // in order to make the overflow menu button flow more naturally,\n // we're going to reposition it based on the position of the first hidden button\n const computedHiddenButtons = buttonsOverflowingWrapperIfMenuVisisble.sort((a, b) => {\n if ('left' === overflowMenuPosition.value) {\n return b.right - a.right\n } else {\n return a.left - b.left\n }\n })\n\n const firstHiddenButton = computedHiddenButtons[0]\n if (!firstHiddenButton) {\n lastVisibleButtonEndOffset.value = null\n return\n }\n lastVisibleButtonEndOffset.value =\n 'left' === overflowMenuPosition.value ? firstHiddenButton.right : firstHiddenButton.left\n }, 50)\n const wrapperMutationObserverHandler = (entries: MutationRecord[]) => {\n if (entries.some((e) => e.type === 'childList')) {\n queueMicrotask(() => computeOverflowedButtonIndexes())\n }\n }\n const wrapperObserver = (is: HTMLDivElement | null, was: HTMLDivElement | null | undefined) => {\n if (was && wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n }\n if (is && wrapperMutationObserver) {\n wrapperMutationObserver.observe(is, {\n childList: true,\n subtree: false,\n attributes: false,\n characterData: false,\n })\n }\n }\n const closeOverflowMenu = () => {\n if (overflowMenuButtonRef.value) {\n overflowMenuButtonRef.value.close()\n }\n }\n const wrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'overflow-x-hidden',\n 'w-100',\n 'r-control-button-bar__wrapper',\n {\n 'justify-start': justification.value === 'start',\n 'justify-end': justification.value === 'end',\n },\n ],\n }))\n const overflowMenuWrapperOffsets = computed(() => {\n if (lastVisibleButtonEndOffset.value === null || xs.value) {\n return stripUndefinedValuesFromObject({\n left: 'left' === overflowMenuPosition.value ? 0 : undefined,\n right: 'right' === overflowMenuPosition.value ? 0 : undefined,\n })\n } else {\n return stripUndefinedValuesFromObject({\n left:\n 'left' === overflowMenuPosition.value\n ? // add 8px to account for the 8px gap on the left side of the button\n convertToUnit(\n lastVisibleButtonEndOffset.value - overflowMenuWrapperWidth.value + 8,\n 'px'\n )\n : // remove 8px to account for the 8px gap on the right side of the button\n convertToUnit(lastVisibleButtonEndOffset.value - 8, 'px'),\n })\n }\n })\n const overflowMenuWrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'align-center',\n 'r-control-button-bar__overflow-menu',\n 'position-absolute',\n {\n [`ps-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`pe-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n ],\n style: {\n ...overflowMenuWrapperOffsets.value,\n ...stripUndefinedValuesFromObject({\n top: `calc(50% - ${convertToUnit(overflowMenuWrapperHeight.value / 2)})`,\n opacity: showOverflowMenu.value ? 1 : 0,\n pointerEvents: showOverflowMenu.value ? undefined : 'none',\n zIndex: showOverflowMenu.value ? 1 : undefined,\n }),\n },\n }))\n const watchStopHandles: WatchStopHandle[] = []\n let wrapperMutationObserver: MutationObserver | undefined\n useRender(() =>\n h(\n 'div',\n {\n ref: containerRef,\n ...containerProps.value,\n },\n [\n h(\n 'div',\n {\n ref: wrapperRef,\n ...wrapperProps.value,\n },\n Array.from(usableButtons.value).map((btnVNode, btnIndex) =>\n h(\n 'div',\n {\n key: `button-wrapper-${btnIndex}`,\n dataBtnIndex: btnIndex,\n class: {\n [`me-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`ms-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n style: stripUndefinedValuesFromObject({\n opacity: overflowedButtonIndexes.value.includes(btnIndex) ? 0 : 1,\n pointerEvents: overflowedButtonIndexes.value.includes(btnIndex)\n ? 'none'\n : undefined,\n }),\n },\n btnVNode\n )\n )\n ),\n h(\n 'div',\n { ref: overflowMenuWrapperRef, ...overflowMenuWrapperProps.value },\n h(\n ControlMenu,\n { ref: overflowMenuButtonRef, ...normalizedOverflowMenuButtonOptions.value },\n () => [\n prependMenuSlot ? prependMenuSlot() : null,\n ...Array.from(overflowedButtonIndexes.value).map((btnIndex) =>\n h(VListItem, { key: `overflowed-button-${btnIndex}` }, () =>\n h(\n 'div',\n { class: ['w-100', 'd-flex', 'justify-center'] },\n clonedButtons.value[btnIndex] || null\n )\n )\n ),\n appendMenuSlot ? appendMenuSlot() : null,\n ]\n )\n ),\n ]\n )\n )\n onMounted(() => {\n watchStopHandles.push(\n watch(containerWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(justification, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(intersecting, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(wrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuWrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuPosition, computeOverflowedButtonIndexes, { immediate: true })\n )\n if (SUPPORTS_MUTATION_OBSERVER) {\n wrapperMutationObserver = new MutationObserver(wrapperMutationObserverHandler)\n }\n watchStopHandles.push(watch(wrapperRef, wrapperObserver, { immediate: true }))\n computeOverflowedButtonIndexes.immediate()\n })\n onUnmounted(() => {\n // close the menu if it is open\n closeOverflowMenu()\n // clear all of the watch stop handles\n watchStopHandles.forEach((stopHandle) => stopHandle())\n watchStopHandles.splice(0, watchStopHandles.length)\n // disconnect & cleanup the mutation observer\n if (wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n wrapperMutationObserver = undefined\n }\n })\n return forwardRefs(\n {\n overflowMenuPosition,\n lastVisibleButtonEndOffset,\n overflowed: showOverflowMenu,\n reflow: computeOverflowedButtonIndexes,\n close: closeOverflowMenu,\n buttons: buttons,\n usableButtons: usableButtons,\n clonedButtons: clonedButtons,\n },\n containerRef,\n wrapperRef,\n overflowMenuWrapperRef\n )\n },\n})\n\n/**\n * Component instance type for ControlButtonBar.\n *\n * @public\n */\nexport type ControlButtonBar = InstanceType<typeof ControlButtonBar>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-DHeWMCWw.mjs","sources":["../src/private/control-button-bar/index.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Control Button Bar Component\n|--------------------------------------------------------------------------\n|\n| An intelligent, responsive toolbar component that automatically handles\n| button overflow with dropdown menus. Uses container-aware responsive\n| breakpoints to adapt to any layout constraint, providing seamless UX\n| across devices and contexts.\n|\n*/\n\nimport { useI18n } from '../ioc'\nimport { useLocale } from 'vuetify'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { ControlMenu } from '../control-menu'\nimport { useScopedDisplay } from '../ux/display'\nimport { VListItem } from 'vuetify/components/VList'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { IN_BROWSER } from '@nhtio/vuetifiable/util/globals'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { convertToUnit } from '@nhtio/vuetifiable/util/helpers'\nimport { forwardRefs } from '@nhtio/vuetifiable/composables/forwardRefs'\nimport { makeControlButtonBarProps, controlButtonBarEmits } from './props'\nimport { stripUndefinedValuesFromObject, asAbsInt } from '../common/utils'\nimport {\n computed,\n ref,\n h,\n defineComponent,\n onMounted,\n onUnmounted,\n toRefs,\n mergeProps,\n cloneVNode,\n watch,\n} from 'vue'\nimport type { WatchStopHandle, SlotsType, VNode } from 'vue'\nimport type { ControlButtonBarOverflowMenuButtonProps } from './props'\n\nexport type { ControlButtonBarProps } from './props'\n\nconst SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && 'MutationObserver' in window\n\nconst cloneForMenu = (vnode: VNode) => {\n const updatedProps = stripUndefinedValuesFromObject({\n ...vnode.props,\n 'id': undefined,\n 'aria-controls': undefined,\n ...mergeProps(\n {\n class: vnode.props?.class ? vnode.props.class : undefined,\n },\n {\n class: ['mx-0'],\n }\n ),\n // we are adding a custom prop to identify that this button is rendered in the menu\n // if the component supports it, it can use this prop to adjust its styling/behavior\n 'inOverflowMenu': true,\n })\n return cloneVNode(vnode, updatedProps)\n}\n\n/**\n * Slot types for the ControlButtonBar component.\n *\n * @public\n */\nexport type ControlButtonBarSlots = {\n /** Content to prepend to the overflow menu */\n 'prepend-menu'?: () => any\n /** Content to append to the overflow menu */\n 'append-menu'?: () => any\n}\n\n/**\n * A responsive toolbar component that automatically handles button overflow with dropdown menus.\n *\n * Features:\n * - Container-aware responsive behavior using useScopedDisplay\n * - Automatic overflow detection with visual jumping reduction\n * - RTL support with intelligent menu positioning\n * - MutationObserver for dynamic content changes\n * - Customizable gap spacing and justification\n * - Performance-optimized with debounced calculations\n *\n * @example\n * ```vue\n * <ControlButtonBar\n * :buttons=\"[\n * h(VBtn, { text: 'Columns' }),\n * h(VBtn, { text: 'Filters' }),\n * h(VBtn, { text: 'Sorting' })\n * ]\"\n * justification=\"center\"\n * :gap=\"2\"\n * />\n * ```\n *\n * @public\n */\nexport const ControlButtonBar = defineComponent({\n name: 'ControlButtonBar',\n inheritAttrs: false,\n props: makeControlButtonBarProps(),\n emits: controlButtonBarEmits,\n slots: Object as SlotsType<ControlButtonBarSlots>,\n setup(props, { attrs, slots }) {\n const t = useI18n()\n const { isRtl } = useLocale()\n const {\n buttons,\n justification,\n gap,\n overflowMenuButtonOptions,\n class: className,\n style,\n } = toRefs(props)\n const prependMenuSlot = useSlot<ControlButtonBarSlots>('prepend-menu', slots)\n const appendMenuSlot = useSlot<ControlButtonBarSlots>('append-menu', slots)\n const normalizedOverflowMenuButtonOptions = computed<ControlButtonBarOverflowMenuButtonProps>(\n () =>\n deepmerge(\n {\n cta: t('general.more'),\n },\n stripUndefinedValuesFromObject({\n cta: overflowMenuButtonOptions.value.cta,\n }),\n {\n activator: stripUndefinedValuesFromObject({\n color: overflowMenuButtonOptions.value.color,\n density: overflowMenuButtonOptions.value.density,\n size: overflowMenuButtonOptions.value.size,\n }),\n }\n )\n )\n const containerRef = ref<HTMLDivElement | null>(null)\n const wrapperRef = ref<HTMLDivElement | null>(null)\n const overflowMenuWrapperRef = ref<HTMLElement | null>(null)\n const overflowMenuButtonRef = ref<ControlMenu | null>(null)\n const overflowMenuButtonIsOpen = computed(() => {\n if (!overflowMenuButtonRef.value) return false\n return overflowMenuButtonRef.value.isOpen\n })\n const usableButtons = computed(() => Array.from(buttons.value).map((btn) => cloneVNode(btn)))\n const clonedButtons = computed(() =>\n !overflowMenuButtonIsOpen.value\n ? []\n : Array.from(buttons.value).map((btn) => cloneForMenu(btn))\n )\n const { width: containerWidth, intersecting, xs } = useScopedDisplay(containerRef)\n const { width: wrapperWidth } = useScopedDisplay(wrapperRef)\n const { width: overflowMenuWrapperWidth, height: overflowMenuWrapperHeight } =\n useScopedDisplay(overflowMenuWrapperRef)\n const containerProps = computed(() =>\n mergeProps(\n {\n class: attrs.class || {},\n style: attrs.style || {},\n },\n {\n class: className.value,\n style: style.value,\n },\n {\n class: ['w-100', 'position-relative', 'r-control-button-bar'],\n role: 'toolbar',\n style: {\n transition: 'opacity 0.2s ease, transform 0.2s ease',\n },\n }\n )\n )\n const overflowedButtonIndexes = ref<number[]>([])\n const lastVisibleButtonEndOffset = ref<number | null>(null)\n const showOverflowMenu = computed(\n () => buttons.value.length > 1 && overflowedButtonIndexes.value.length > 0\n )\n const overflowMenuPosition = computed<'right' | 'left'>(() =>\n isRtl.value\n ? justification.value === 'start'\n ? 'left'\n : 'right'\n : justification.value === 'start'\n ? 'right'\n : 'left'\n )\n const computeOverflowedButtonIndexes = debounce(() => {\n // if there is no container, wrapper, or overflow menu wrapper, we cannot compute overflow\n if (!containerRef.value || !wrapperRef.value || !overflowMenuWrapperRef.value) return\n // if the container is not intersecting (visible), do not compute overflow\n if (!intersecting.value) return\n // if there are less than 2 buttons, then there cannot be any overflow\n if (buttons.value.length < 2) {\n overflowedButtonIndexes.value = []\n return\n }\n // we have 2 values to compare against\n // if none of the buttons extend beyond the wrapper's total width, then there is no overflow\n // otherwise anything that is beyond the wrapper's width minus the overflow button's width\n // is considered overflowed and will be set to 0 opacity + pointer-events: none and then\n // duplicated into the overflow menu\n const wrapperEl = wrapperRef.value\n const buttonWrappers = Array.from(wrapperEl.children) as HTMLDivElement[]\n const currentWrapperWidth = containerWidth.value\n const availableWidthWithOverflowMenu = containerWidth.value - overflowMenuWrapperWidth.value\n\n const buttonWrapperIndexAndOffsets = buttonWrappers.map((wrapper, index) => ({\n index,\n left: wrapper.offsetLeft,\n right: wrapper.offsetLeft + wrapper.offsetWidth,\n }))\n\n // Check if any buttons overflow the wrapper when the menu is visible\n const buttonsOverflowingWrapperIfMenuVisisble = buttonWrapperIndexAndOffsets.filter(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value\n ? left < overflowMenuWrapperWidth.value\n : right > availableWidthWithOverflowMenu\n )\n\n // if no buttons overflow the wrapper when the menu is visible, exit early\n if (buttonsOverflowingWrapperIfMenuVisisble.length === 0) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // check if any of the buttons overflow the wrapper if the menu is not visible\n const someOutsideContainer = buttonsOverflowingWrapperIfMenuVisisble.some(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value ? left < 0 : right > currentWrapperWidth\n )\n // if none of the buttons overflow the wrapper if the menu is not visible, exit early\n if (!someOutsideContainer) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // otherwise, the buttons that overflow the wrapper when the menu is visible are the ones that are overflowed\n overflowedButtonIndexes.value = buttonsOverflowingWrapperIfMenuVisisble.map(\n ({ index }) => index\n )\n\n // in order to make the overflow menu button flow more naturally,\n // we're going to reposition it based on the position of the first hidden button\n const computedHiddenButtons = buttonsOverflowingWrapperIfMenuVisisble.sort((a, b) => {\n if ('left' === overflowMenuPosition.value) {\n return b.right - a.right\n } else {\n return a.left - b.left\n }\n })\n\n const firstHiddenButton = computedHiddenButtons[0]\n if (!firstHiddenButton) {\n lastVisibleButtonEndOffset.value = null\n return\n }\n lastVisibleButtonEndOffset.value =\n 'left' === overflowMenuPosition.value ? firstHiddenButton.right : firstHiddenButton.left\n }, 50)\n const wrapperMutationObserverHandler = (entries: MutationRecord[]) => {\n if (entries.some((e) => e.type === 'childList')) {\n queueMicrotask(() => computeOverflowedButtonIndexes())\n }\n }\n const wrapperObserver = (is: HTMLDivElement | null, was: HTMLDivElement | null | undefined) => {\n if (was && wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n }\n if (is && wrapperMutationObserver) {\n wrapperMutationObserver.observe(is, {\n childList: true,\n subtree: false,\n attributes: false,\n characterData: false,\n })\n }\n }\n const closeOverflowMenu = () => {\n if (overflowMenuButtonRef.value) {\n overflowMenuButtonRef.value.close()\n }\n }\n const wrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'overflow-x-hidden',\n 'w-100',\n 'r-control-button-bar__wrapper',\n {\n 'justify-start': justification.value === 'start',\n 'justify-end': justification.value === 'end',\n },\n ],\n }))\n const overflowMenuWrapperOffsets = computed(() => {\n if (lastVisibleButtonEndOffset.value === null || xs.value) {\n return stripUndefinedValuesFromObject({\n left: 'left' === overflowMenuPosition.value ? 0 : undefined,\n right: 'right' === overflowMenuPosition.value ? 0 : undefined,\n })\n } else {\n return stripUndefinedValuesFromObject({\n left:\n 'left' === overflowMenuPosition.value\n ? // add 8px to account for the 8px gap on the left side of the button\n convertToUnit(\n lastVisibleButtonEndOffset.value - overflowMenuWrapperWidth.value + 8,\n 'px'\n )\n : // remove 8px to account for the 8px gap on the right side of the button\n convertToUnit(lastVisibleButtonEndOffset.value - 8, 'px'),\n })\n }\n })\n const overflowMenuWrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'align-center',\n 'r-control-button-bar__overflow-menu',\n 'position-absolute',\n {\n [`ps-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`pe-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n ],\n style: {\n ...overflowMenuWrapperOffsets.value,\n ...stripUndefinedValuesFromObject({\n top: `calc(50% - ${convertToUnit(overflowMenuWrapperHeight.value / 2)})`,\n opacity: showOverflowMenu.value ? 1 : 0,\n pointerEvents: showOverflowMenu.value ? undefined : 'none',\n zIndex: showOverflowMenu.value ? 1 : undefined,\n }),\n },\n }))\n const watchStopHandles: WatchStopHandle[] = []\n let wrapperMutationObserver: MutationObserver | undefined\n useRender(() =>\n h(\n 'div',\n {\n ref: containerRef,\n ...containerProps.value,\n },\n [\n h(\n 'div',\n {\n ref: wrapperRef,\n ...wrapperProps.value,\n },\n Array.from(usableButtons.value).map((btnVNode, btnIndex) =>\n h(\n 'div',\n {\n key: `button-wrapper-${btnIndex}`,\n dataBtnIndex: btnIndex,\n class: {\n [`me-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`ms-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n style: stripUndefinedValuesFromObject({\n opacity: overflowedButtonIndexes.value.includes(btnIndex) ? 0 : 1,\n pointerEvents: overflowedButtonIndexes.value.includes(btnIndex)\n ? 'none'\n : undefined,\n }),\n },\n btnVNode\n )\n )\n ),\n h(\n 'div',\n { ref: overflowMenuWrapperRef, ...overflowMenuWrapperProps.value },\n h(\n ControlMenu,\n { ref: overflowMenuButtonRef, ...normalizedOverflowMenuButtonOptions.value },\n () => [\n prependMenuSlot ? prependMenuSlot() : null,\n ...Array.from(overflowedButtonIndexes.value).map((btnIndex) =>\n h(VListItem, { key: `overflowed-button-${btnIndex}` }, () =>\n h(\n 'div',\n { class: ['w-100', 'd-flex', 'justify-center'] },\n clonedButtons.value[btnIndex] || null\n )\n )\n ),\n appendMenuSlot ? appendMenuSlot() : null,\n ]\n )\n ),\n ]\n )\n )\n onMounted(() => {\n watchStopHandles.push(\n watch(containerWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(justification, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(intersecting, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(wrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuWrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuPosition, computeOverflowedButtonIndexes, { immediate: true })\n )\n if (SUPPORTS_MUTATION_OBSERVER) {\n wrapperMutationObserver = new MutationObserver(wrapperMutationObserverHandler)\n }\n watchStopHandles.push(watch(wrapperRef, wrapperObserver, { immediate: true }))\n computeOverflowedButtonIndexes.immediate()\n })\n onUnmounted(() => {\n // close the menu if it is open\n closeOverflowMenu()\n // clear all of the watch stop handles\n watchStopHandles.forEach((stopHandle) => stopHandle())\n watchStopHandles.splice(0, watchStopHandles.length)\n // disconnect & cleanup the mutation observer\n if (wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n wrapperMutationObserver = undefined\n }\n })\n return forwardRefs(\n {\n overflowMenuPosition,\n lastVisibleButtonEndOffset,\n overflowed: showOverflowMenu,\n reflow: computeOverflowedButtonIndexes,\n close: closeOverflowMenu,\n buttons: buttons,\n usableButtons: usableButtons,\n clonedButtons: clonedButtons,\n },\n containerRef,\n wrapperRef,\n overflowMenuWrapperRef\n )\n },\n})\n\n/**\n * Component instance type for ControlButtonBar.\n *\n * @public\n */\nexport type ControlButtonBar = InstanceType<typeof ControlButtonBar>\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { a as useI18n, e as useCron } from "./ioc-BRFP3w6U.mjs";
2
- import { S as SvgIcon } from "./index-CfWOKNEo.mjs";
3
- import { m as mdiRefreshAuto } from "./mdi-B06yTfXf.mjs";
4
- import { C as ControlMenu } from "./index-CzhpetTi.mjs";
5
- import { p as printfExports } from "./http-BCXJjieC.mjs";
6
- import { m as makeControlMenuControlButtonProps } from "./props-CWgQDMLq.mjs";
1
+ import { a as useI18n, e as useCron } from "./ioc-CbjgKkoq.mjs";
2
+ import { S as SvgIcon } from "./index-dcZGsFwf.mjs";
3
+ import { m as mdiRefreshAuto } from "./mdi-Kxmy15-q.mjs";
4
+ import { C as ControlMenu } from "./index-lUBFKgIk.mjs";
5
+ import { p as printfExports } from "./http-pGFfofl9.mjs";
6
+ import { m as makeControlMenuControlButtonProps } from "./props-B2HHemO2.mjs";
7
7
  import { defineComponent, toRefs, ref, computed, watch, onBeforeUnmount, h } from "vue";
8
- import { V as VListItem } from "./VListItem-TG9oZPkm.mjs";
8
+ import { V as VListItem } from "./VListItem-B2LElOLe.mjs";
9
9
  const AutoRefeshController = defineComponent({
10
10
  name: "AutoRefeshController",
11
11
  props: makeControlMenuControlButtonProps(),
@@ -85,4 +85,4 @@ const AutoRefeshController = defineComponent({
85
85
  export {
86
86
  AutoRefeshController as A
87
87
  };
88
- //# sourceMappingURL=index-Bux_9EQY.mjs.map
88
+ //# sourceMappingURL=index-DiBGKnUB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-Bux_9EQY.mjs","sources":["../src/private/autorefresh-controller/index.ts"],"sourcesContent":["import { useI18n } from '../ioc'\nimport { useCron } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { mdiRefreshAuto } from '@mdi/js'\nimport { ControlMenu } from '../control-menu'\nimport { printf as format } from 'fast-printf'\nimport { VListItem } from 'vuetify/components/VList'\nimport { makeControlMenuControlButtonProps } from '../control-menu/props'\nimport { defineComponent, h, toRefs, ref, watch, computed, onBeforeUnmount } from 'vue'\nimport type { ControlMenuProps } from '../control-menu/props'\n\nexport const AutoRefeshController = defineComponent({\n name: 'AutoRefeshController',\n props: makeControlMenuControlButtonProps(),\n emits: ['triggered'],\n setup(props, { emit }) {\n const { color, density, size } = toRefs(props)\n const t = useI18n()\n const cron = useCron()\n const crontab = ref<string | null>(null)\n const options = [\n { crontab: null, label: t('general.off') },\n { crontab: '*/5 * * * * *', label: format('5%s', t('abbreviations.seconds')) },\n { crontab: '*/10 * * * * *', label: format('10%s', t('abbreviations.seconds')) },\n { crontab: '*/30 * * * * *', label: format('30%s', t('abbreviations.seconds')) },\n { crontab: '* * * * *', label: format('1%s', t('abbreviations.minutes')) },\n { crontab: '*/5 * * * *', label: format('5%s', t('abbreviations.minutes')) },\n { crontab: '*/15 * * * *', label: format('15%s', t('abbreviations.minutes')) },\n { crontab: '*/30 * * * *', label: format('30%s', t('abbreviations.minutes')) },\n { crontab: '0 * * * *', label: format('1%s', t('abbreviations.hours')) },\n { crontab: '0 */2 * * *', label: format('2%s', t('abbreviations.hours')) },\n { crontab: '0 */3 * * *', label: format('3%s', t('abbreviations.hours')) },\n { crontab: '0 */4 * * *', label: format('4%s', t('abbreviations.hours')) },\n { crontab: '0 */6 * * *', label: format('6%s', t('abbreviations.hours')) },\n { crontab: '0 */8 * * *', label: format('8%s', t('abbreviations.hours')) },\n { crontab: '0 */12 * * *', label: format('12%s', t('abbreviations.hours')) },\n ]\n const currentOption = computed(() => {\n return options.find((opt) => opt.crontab === crontab.value) || options[0]\n })\n const doTrigger = () => {\n emit('triggered')\n }\n watch(\n crontab,\n (is, was) => {\n if (cron) {\n if (was) {\n cron.$off(was, doTrigger)\n }\n if (is) {\n cron.$on(is, doTrigger)\n }\n }\n },\n { immediate: true }\n )\n onBeforeUnmount(() => {\n if (cron && crontab.value) {\n cron.$off(crontab.value, doTrigger)\n }\n })\n const controlMenuBindings = computed<ControlMenuProps>(() => ({\n icon: h(SvgIcon, { d: mdiRefreshAuto }),\n cta: currentOption.value.label,\n activator: {\n color: color.value,\n density: density.value,\n size: size.value,\n // dividePrependIcon: true,\n },\n }))\n return () =>\n h(ControlMenu, controlMenuBindings.value, () =>\n options.map((o) =>\n h(VListItem, {\n title: o.label,\n onClick: () => {\n crontab.value = o.crontab\n },\n active: o.crontab === crontab.value,\n })\n )\n )\n },\n})\n"],"names":["format"],"mappings":"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"}
1
+ {"version":3,"file":"index-DiBGKnUB.mjs","sources":["../src/private/autorefresh-controller/index.ts"],"sourcesContent":["import { useI18n } from '../ioc'\nimport { useCron } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { mdiRefreshAuto } from '@mdi/js'\nimport { ControlMenu } from '../control-menu'\nimport { printf as format } from 'fast-printf'\nimport { VListItem } from 'vuetify/components/VList'\nimport { makeControlMenuControlButtonProps } from '../control-menu/props'\nimport { defineComponent, h, toRefs, ref, watch, computed, onBeforeUnmount } from 'vue'\nimport type { ControlMenuProps } from '../control-menu/props'\n\nexport const AutoRefeshController = defineComponent({\n name: 'AutoRefeshController',\n props: makeControlMenuControlButtonProps(),\n emits: ['triggered'],\n setup(props, { emit }) {\n const { color, density, size } = toRefs(props)\n const t = useI18n()\n const cron = useCron()\n const crontab = ref<string | null>(null)\n const options = [\n { crontab: null, label: t('general.off') },\n { crontab: '*/5 * * * * *', label: format('5%s', t('abbreviations.seconds')) },\n { crontab: '*/10 * * * * *', label: format('10%s', t('abbreviations.seconds')) },\n { crontab: '*/30 * * * * *', label: format('30%s', t('abbreviations.seconds')) },\n { crontab: '* * * * *', label: format('1%s', t('abbreviations.minutes')) },\n { crontab: '*/5 * * * *', label: format('5%s', t('abbreviations.minutes')) },\n { crontab: '*/15 * * * *', label: format('15%s', t('abbreviations.minutes')) },\n { crontab: '*/30 * * * *', label: format('30%s', t('abbreviations.minutes')) },\n { crontab: '0 * * * *', label: format('1%s', t('abbreviations.hours')) },\n { crontab: '0 */2 * * *', label: format('2%s', t('abbreviations.hours')) },\n { crontab: '0 */3 * * *', label: format('3%s', t('abbreviations.hours')) },\n { crontab: '0 */4 * * *', label: format('4%s', t('abbreviations.hours')) },\n { crontab: '0 */6 * * *', label: format('6%s', t('abbreviations.hours')) },\n { crontab: '0 */8 * * *', label: format('8%s', t('abbreviations.hours')) },\n { crontab: '0 */12 * * *', label: format('12%s', t('abbreviations.hours')) },\n ]\n const currentOption = computed(() => {\n return options.find((opt) => opt.crontab === crontab.value) || options[0]\n })\n const doTrigger = () => {\n emit('triggered')\n }\n watch(\n crontab,\n (is, was) => {\n if (cron) {\n if (was) {\n cron.$off(was, doTrigger)\n }\n if (is) {\n cron.$on(is, doTrigger)\n }\n }\n },\n { immediate: true }\n )\n onBeforeUnmount(() => {\n if (cron && crontab.value) {\n cron.$off(crontab.value, doTrigger)\n }\n })\n const controlMenuBindings = computed<ControlMenuProps>(() => ({\n icon: h(SvgIcon, { d: mdiRefreshAuto }),\n cta: currentOption.value.label,\n activator: {\n color: color.value,\n density: density.value,\n size: size.value,\n // dividePrependIcon: true,\n },\n }))\n return () =>\n h(ControlMenu, controlMenuBindings.value, () =>\n options.map((o) =>\n h(VListItem, {\n title: o.label,\n onClick: () => {\n crontab.value = o.crontab\n },\n active: o.crontab === crontab.value,\n })\n )\n )\n },\n})\n"],"names":["format"],"mappings":"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"}
@@ -1,57 +1,57 @@
1
- import { S as SvgIcon, s as svgPathToIconValue } from "./index-CfWOKNEo.mjs";
2
- import { u as useAlert } from "./alert-X_y7N0k5.mjs";
1
+ import { S as SvgIcon, s as svgPathToIconValue } from "./index-dcZGsFwf.mjs";
2
+ import { u as useAlert } from "./alert-BXbhLNkg.mjs";
3
3
  import { d as deepmerge } from "./index-B2cQuM3q.mjs";
4
4
  import { n as numeral } from "./numeral-DmC5bR5g.mjs";
5
- import { p as printfExports } from "./http-BCXJjieC.mjs";
6
- import { u as useScopedDisplay } from "./display-DtPqxGxo.mjs";
7
- import { m as makeControlButtonProps, C as ControlButton, u as useMountedInBrowser } from "./index-BSGSQUvi.mjs";
8
- import { h as getDefaultsForPropFactory, e as emitsFactory, s as stripUndefinedValuesFromObject, p as propsAndEmitsFactory, f as isHTMLElement, q as typeAndFormatToResourcefulFieldType, i as isObject, R as ResourcefulFieldType, t as toUnreactive, j as asAbsInt, k as getOxfordizedListParts } from "./utils-C_uOac-v.mjs";
9
- import { a as useI18n, k as useBrowser, c as useHttp } from "./ioc-BRFP3w6U.mjs";
5
+ import { p as printfExports } from "./http-pGFfofl9.mjs";
6
+ import { u as useScopedDisplay } from "./display-2uHLu-iA.mjs";
7
+ import { m as makeControlButtonProps, C as ControlButton, u as useMountedInBrowser } from "./index-C7w5RPS8.mjs";
8
+ import { h as getDefaultsForPropFactory, e as emitsFactory, s as stripUndefinedValuesFromObject, p as propsAndEmitsFactory, f as isHTMLElement, q as typeAndFormatToResourcefulFieldType, i as isObject, R as ResourcefulFieldType, t as toUnreactive, j as asAbsInt, k as getOxfordizedListParts } from "./utils-Dh8-g-7s.mjs";
9
+ import { a as useI18n, k as useBrowser, c as useHttp } from "./ioc-CbjgKkoq.mjs";
10
10
  import { D as DateTime } from "./vendor-nhtio-millicron-BXT4ATVX.mjs";
11
- import { o as useScopeId, u as useDelay, n as makeDelayProps, C as mdiContentSave, d as mdiClose, a1 as mdiMagnify, a as mdiMenuUp, b as mdiMenuDown, T as mdiEyeOff, a2 as mdiMouseOff, _ as mdiDrag, U as mdiEye, a3 as mdiContentSaveCheck, V as VCard, a4 as mdiFileQuestion, a5 as mdiFileFind, a6 as mdiFileTable, a7 as mdiInformationSlabCircle, J as mdiCheckboxMarked, I as mdiCheckboxBlankOutline, a8 as mdiFileDownload, a9 as mdiFileCancel, aa as mdiFileCheck, H as mdiCheckboxIntermediateVariant, ab as mdiSortAscending, ac as mdiSortDescending, ad as mdiCancel, ae as mdiCloseThick, af as mdiCheckCircle, ag as mdiCloseCircle, ah as mdiHelpCircle, ai as mdiPlaylistPlay, aj as mdiCardPlusOutline, ak as mdiFilterPlus, al as mdiSetNone, am as mdiVectorLink, an as mdiAlertCircle, Z as mdiDelete, ao as mdiNotificationClearAll, ap as mdiUnfoldLessVertical, aq as mdiDotsHorizontal, ar as mdiThumbUp, G as mdiPlus, as as mdiBackupRestore, at as mdiPound, au as mdiPageLast, g as mdiChevronRight, h as mdiChevronLeft, av as mdiPageFirst, aw as mdiEyeOffOutline, ax as mdiSort, ay as mdiCheckboxOutline, az as mdiCheckboxMultipleOutline, aA as mdiCheckboxMultipleBlank, aB as mdiCheckboxMultipleBlankOutline, aC as mdiViewColumnOutline, aD as mdiFilter, aE as mdiPencilBoxMultipleOutline, aF as mdiInformationBox, l as mdiRefresh, aG as mdiDatabase, aH as mdiFormatListBulletedSquare } from "./mdi-B06yTfXf.mjs";
12
- import { B as Buffer, u as utils, w as writeFileSync } from "./vendor-xlsx-BeYuj8cp.mjs";
13
- import { F as FormWithValidation } from "./validation-D1FwcMNA.mjs";
11
+ import { o as useScopeId, u as useDelay, n as makeDelayProps, C as mdiContentSave, d as mdiClose, a1 as mdiMagnify, a as mdiMenuUp, b as mdiMenuDown, T as mdiEyeOff, a2 as mdiMouseOff, _ as mdiDrag, U as mdiEye, a3 as mdiContentSaveCheck, V as VCard, a4 as mdiFileQuestion, a5 as mdiFileFind, a6 as mdiFileTable, a7 as mdiInformationSlabCircle, J as mdiCheckboxMarked, I as mdiCheckboxBlankOutline, a8 as mdiFileDownload, a9 as mdiFileCancel, aa as mdiFileCheck, H as mdiCheckboxIntermediateVariant, ab as mdiSortAscending, ac as mdiSortDescending, ad as mdiCancel, ae as mdiCloseThick, af as mdiCheckCircle, ag as mdiCloseCircle, ah as mdiHelpCircle, ai as mdiPlaylistPlay, aj as mdiCardPlusOutline, ak as mdiFilterPlus, al as mdiSetNone, am as mdiVectorLink, an as mdiAlertCircle, Z as mdiDelete, ao as mdiNotificationClearAll, ap as mdiUnfoldLessVertical, aq as mdiDotsHorizontal, ar as mdiThumbUp, G as mdiPlus, as as mdiBackupRestore, at as mdiPound, au as mdiPageLast, g as mdiChevronRight, h as mdiChevronLeft, av as mdiPageFirst, aw as mdiEyeOffOutline, ax as mdiSort, ay as mdiCheckboxOutline, az as mdiCheckboxMultipleOutline, aA as mdiCheckboxMultipleBlank, aB as mdiCheckboxMultipleBlankOutline, aC as mdiViewColumnOutline, aD as mdiFilter, aE as mdiPencilBoxMultipleOutline, aF as mdiInformationBox, l as mdiRefresh, aG as mdiDatabase, aH as mdiFormatListBulletedSquare } from "./mdi-Kxmy15-q.mjs";
12
+ import { B as Buffer, u as utils, w as writeFileSync } from "./vendor-xlsx-B1NmWxyx.mjs";
13
+ import { F as FormWithValidation } from "./validation-DBLJZW1_.mjs";
14
14
  import { g as getDefaultExportFromCjs } from "./_commonjsHelpers-CUmg6egw.mjs";
15
15
  import { k as validator, j as encode, V as ValidationError, i as decode, d as decode$1 } from "./vendor-nhtio-lucid-resourceful-Bc8uNS08.mjs";
16
- import { a as propsFactory$1, b as pick, d as debounce, u as useRender$1, g as makeComponentProps$1, e as IconValue, o as omit$1, k as makeVInputProps, D as makeVBtnToggleProps, E as makeVDataTableServerProps$1, q as makeElevationProps$1, r as makeDensityProps$1, F as makeThemeProps$1, h as makeVTextFieldProps, G as makeVariantProps$1, H as makeRoundedProps$1, J as makePositionProps, K as makeDimensionProps, L as makeBorderProps$1, s as makeVCardProps, t as throttle } from "./vendor-nhtio-vuetifiable-Qm2uuc7r.mjs";
16
+ import { a as propsFactory$1, b as pick, d as debounce, u as useRender$1, g as makeComponentProps$1, e as IconValue, o as omit$1, l as makeVInputProps, D as makeVBtnToggleProps, E as makeVDataTableServerProps$1, q as makeElevationProps$1, r as makeDensityProps$1, F as makeThemeProps$1, i as makeVTextFieldProps, G as makeVariantProps$1, H as makeRoundedProps$1, J as makePositionProps, K as makeDimensionProps, L as makeBorderProps$1, s as makeVCardProps, t as throttle } from "./vendor-nhtio-vuetifiable-CRAkpWr4.mjs";
17
17
  import { f as formatBigNumber } from "./big_number_formatter-Dwx4Jjuu.mjs";
18
18
  import { shallowRef, computed, onMounted, watch, onBeforeUnmount, watchEffect, onScopeDispose, ref, toRef, nextTick, readonly, createElementVNode, Fragment, createVNode, mergeProps, Transition, h, defineComponent, toRefs, toRaw, warn, provide, normalizeStyle, normalizeClass, withDirectives, vShow, triggerRef, onBeforeUpdate, inject, capitalize, toValue, createTextVNode, withModifiers, toDisplayString, cloneVNode } from "vue";
19
- import { S as Sortable, o as ordinal } from "./index-BobM-vEI.mjs";
20
- import { u as useHttpElements, e as extractErrorCode } from "./http-Cxynx5pW.mjs";
21
- import { b as ResourcefulRecordBusEmitter, a as ResourcefulRecordForm } from "./form-zBaGUnUi.mjs";
22
- import { r as renderDefaultResourcefulRecordForm } from "./renderers-BD7CrBqo.mjs";
19
+ import { S as Sortable, o as ordinal } from "./index-BitVUrFg.mjs";
20
+ import { u as useHttpElements, e as extractErrorCode } from "./http-BbIZXN2x.mjs";
21
+ import { b as ResourcefulRecordBusEmitter, a as ResourcefulRecordForm } from "./form-JY-hIKBm.mjs";
22
+ import { r as renderDefaultResourcefulRecordForm } from "./renderers-Dowye4Bl.mjs";
23
23
  import { ResourcefulRecordScopedDisplaySymbol, ResourcefulRecordScopedBusConsumerSymbol, ResourcefulIndexScopedDisplaySymbol } from "./symbols.mjs";
24
- import { aZ as isOn, bg as callEvent, Z as convertToUnit, b7 as CircularBuffer, P as useToggleScope, U as clamp, g as genericComponent, p as propsFactory, C as useRtl, j as provideTheme, l as useBorder, k as useBackgroundColor, n as useElevation, Y as useDisplay, r as useRounded, bb as useRouter, u as useProxiedModel, bj as toPhysical, ad as provideDefaults, f as useRender, a as VImg, i as VDefaultsProvider, s as makeThemeProps, t as makeTagProps, v as makeRoundedProps, y as makeElevationProps, ab as makeDisplayProps, A as makeComponentProps, B as makeBorderProps, c as VBtn, d as VIcon, V as VProgressLinear, b as VProgressCircular, a8 as useResizeObserver, as as MaybeTransition, aI as makeTransitionProps, x as makeLocationProps, E as omit, aw as makeVBtnProps, bk as VBtnToggle, T as useLocale$1, at as createRange, S as makeVariantProps, _ as makeSizeProps, an as makeDensityProps, M as IconValue$1, aT as keyValues, N as getCurrentInstance, bl as defineFunctionalComponent, aq as consoleError, ap as wrapInArray, be as isPrimitive, ac as deepEqual, bm as getObjectValueByPath, bn as isEmpty, $ as useLoader, a2 as LoaderSlot, a$ as makeLoaderProps, ao as EventProp, az as pick$1, af as useDensity, bf as getPropertyFromItem } from "./display-CdPzCNpa.mjs";
25
- import { a as useLayoutItem, m as makeLayoutItemProps } from "./clipboard-DRlt84JQ.mjs";
26
- import { x as useSsrBoot, E as VList, b as VToolbar, V as VTextField, d as VToolbarItems, a as VDivider, w as VSelect, l as VLabel, L as VToolbarTitle, h as VAutocomplete, M as VAlert, f as VInput, D as DevErrorAlert, t as VCheckboxBtn, J as makeFilterProps, A as useFilter, F as VVirtualScroll } from "./common-Pv2k5d5L.mjs";
27
- import { V as VContainer, a as VRow, b as VCol } from "./VRow-cmYZqXOu.mjs";
28
- import { V as VListItem } from "./VListItem-TG9oZPkm.mjs";
29
- import { V as VCheckbox, R as RBooleanField } from "./boolean-BxVw3woA.mjs";
30
- import { V as VChip } from "./VChip-1IMgN2NW.mjs";
31
- import { V as VEmptyState, s as stringify } from "./VEmptyState-B5x_wEth.mjs";
24
+ import { aZ as isOn, bg as callEvent, Z as convertToUnit, b7 as CircularBuffer, P as useToggleScope, U as clamp, g as genericComponent, p as propsFactory, C as useRtl, j as provideTheme, l as useBorder, k as useBackgroundColor, n as useElevation, Y as useDisplay, r as useRounded, bb as useRouter, u as useProxiedModel, bj as toPhysical, ad as provideDefaults, f as useRender, a as VImg, i as VDefaultsProvider, s as makeThemeProps, t as makeTagProps, v as makeRoundedProps, y as makeElevationProps, ab as makeDisplayProps, A as makeComponentProps, B as makeBorderProps, c as VBtn, d as VIcon, V as VProgressLinear, b as VProgressCircular, a8 as useResizeObserver, as as MaybeTransition, aI as makeTransitionProps, x as makeLocationProps, E as omit, aw as makeVBtnProps, bk as VBtnToggle, T as useLocale$1, at as createRange, S as makeVariantProps, _ as makeSizeProps, an as makeDensityProps, M as IconValue$1, aT as keyValues, N as getCurrentInstance, bl as defineFunctionalComponent, aq as consoleError, ap as wrapInArray, be as isPrimitive, ac as deepEqual, bm as getObjectValueByPath, bn as isEmpty, $ as useLoader, a2 as LoaderSlot, a$ as makeLoaderProps, ao as EventProp, az as pick$1, af as useDensity, bf as getPropertyFromItem } from "./display-D19CpJw_.mjs";
25
+ import { a as useLayoutItem, m as makeLayoutItemProps } from "./clipboard-B4T3iSwL.mjs";
26
+ import { x as useSsrBoot, E as VList, b as VToolbar, V as VTextField, d as VToolbarItems, a as VDivider, w as VSelect, l as VLabel, L as VToolbarTitle, f as VAutocomplete, M as VAlert, g as VInput, D as DevErrorAlert, t as VCheckboxBtn, J as makeFilterProps, A as useFilter, F as VVirtualScroll } from "./common-crxptQS0.mjs";
27
+ import { V as VContainer, a as VRow, b as VCol } from "./VRow-7oNLItQM.mjs";
28
+ import { V as VListItem } from "./VListItem-B2LElOLe.mjs";
29
+ import { V as VCheckbox, R as RBooleanField } from "./boolean-BoaSL5pb.mjs";
30
+ import { V as VChip } from "./VChip-BslsWQfv.mjs";
31
+ import { V as VEmptyState, s as stringify } from "./VEmptyState-DSkV3rdW.mjs";
32
32
  import { l } from "./vendor-nhtio-tiny-typed-emitter-COEPsB0Y.mjs";
33
- import { A as AutoRefeshController } from "./index-Bux_9EQY.mjs";
33
+ import { A as AutoRefeshController } from "./index-DiBGKnUB.mjs";
34
34
  import { w as warningSvg } from "./warning-CwVFcGgs.mjs";
35
- import { V as VSheet } from "./VSheet-D_4R07YK.mjs";
36
- import { V as VBadge, R as RStringField } from "./string-CcynWgei.mjs";
37
- import { a as VSpacer } from "./VDatePicker-D3Y6VAGq.mjs";
38
- import { V as VDialog } from "./VDialog-uKUuB6Ni.mjs";
35
+ import { V as VSheet } from "./VSheet-DqbTSvsm.mjs";
36
+ import { V as VBadge, R as RStringField } from "./string-DOIj21u5.mjs";
37
+ import { a as VSpacer } from "./VDatePicker-QkOhEsiJ.mjs";
38
+ import { V as VDialog } from "./VDialog-CYWIsqyU.mjs";
39
39
  import { e as errorSvg } from "./question-CpfZrjl2.mjs";
40
40
  import { useLocale, useDisplay as useDisplay$1 } from "vuetify";
41
- import { R as RBigIntField } from "./bigint-BMjZO-KA.mjs";
42
- import { R as RDateTimeField } from "./date_time-DUPA8gK_.mjs";
43
- import { R as RDateField } from "./date-CUv4AD1k.mjs";
44
- import { R as RIntegerField } from "./integer-BWKYSF5I.mjs";
45
- import { R as RNumberField } from "./number-CV-ilUSy.mjs";
46
- import { R as RUnsignedIntegerField } from "./unsigned_integer-D0FzKzNU.mjs";
47
- import "./enum-B2yaUE-A.mjs";
48
- import { V as VMenu, m as makeVMenuProps } from "./VMenu-DbIG2Qhi.mjs";
49
- import { C as ControlMenu } from "./index-CzhpetTi.mjs";
50
- import { m as makeControlMenuControlButtonProps, a as makeControlMenuProps } from "./props-CWgQDMLq.mjs";
51
- import { m as makeResourcefulIndexActionsProps, u as useTableActions, V as VTooltip, b as useBulkActions, a as isResourcefulIndexFunctionAction, c as canPerformBulkActionForRecords, i as isResourcefulIndexUrlAction } from "./actions-eZjKpI2f.mjs";
52
- import { V as VHover } from "./VHover-DaqmIqJM.mjs";
53
- import { C as ControlButtonBar } from "./index-Cp6PZ6jr.mjs";
54
- import { m as makeControlButtonBarProps, a as defaultControlButtonBarOverflowMenuButtonProps } from "./props-BBBc7J1q.mjs";
41
+ import { R as RBigIntField } from "./bigint-S8oJ2u2Y.mjs";
42
+ import { R as RDateTimeField } from "./date_time-C2eWcsmU.mjs";
43
+ import { R as RDateField } from "./date-BaVQ-B5p.mjs";
44
+ import { R as RIntegerField } from "./integer-DGV22mIh.mjs";
45
+ import { R as RNumberField } from "./number-ChyJi9k7.mjs";
46
+ import { R as RUnsignedIntegerField } from "./unsigned_integer-cQWXKTHG.mjs";
47
+ import "./enum-BshWH7_8.mjs";
48
+ import { V as VMenu, m as makeVMenuProps } from "./VMenu-CahiNXXZ.mjs";
49
+ import { C as ControlMenu } from "./index-lUBFKgIk.mjs";
50
+ import { m as makeControlMenuControlButtonProps, a as makeControlMenuProps } from "./props-B2HHemO2.mjs";
51
+ import { m as makeResourcefulIndexActionsProps, u as useTableActions, V as VTooltip, b as useBulkActions, a as isResourcefulIndexFunctionAction, c as canPerformBulkActionForRecords, i as isResourcefulIndexUrlAction } from "./actions-nnJGlDWx.mjs";
52
+ import { V as VHover } from "./VHover-B2PK8R1R.mjs";
53
+ import { C as ControlButtonBar } from "./index-DHeWMCWw.mjs";
54
+ import { m as makeControlButtonBarProps, a as defaultControlButtonBarOverflowMenuButtonProps } from "./props-BPO1G4n5.mjs";
55
55
  function getPrefixedEventHandlers(attrs, suffix, getData) {
56
56
  return Object.keys(attrs).filter((key) => isOn(key) && key.endsWith(suffix)).reduce((acc, key) => {
57
57
  acc[key.slice(0, -suffix.length)] = (event) => callEvent(attrs[key], event, getData(event));
@@ -12890,4 +12890,4 @@ export {
12890
12890
  ExportFormat as b,
12891
12891
  ExportScope as c
12892
12892
  };
12893
- //# sourceMappingURL=index-CV-VR5ZN.mjs.map
12893
+ //# sourceMappingURL=index-Dl9jfPgI.mjs.map