@nhtio/lucid-resourceful-vue-components 0.1.0-master-36a05f8e → 0.1.0-master-0d659775

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 (117) hide show
  1. package/{VRadioGroup-4EZRfNoO.mjs → VRadioGroup-lC_c6Ath.mjs} +2 -2
  2. package/{VRadioGroup-4EZRfNoO.mjs.map → VRadioGroup-lC_c6Ath.mjs.map} +1 -1
  3. package/{actions-Cl683OMq.mjs → actions-CXhEUJp6.mjs} +6 -6
  4. package/{actions-Cl683OMq.mjs.map → actions-CXhEUJp6.mjs.map} +1 -1
  5. package/{alert-BX9BkYd9.mjs → alert-B0j6GH3V.mjs} +6 -6
  6. package/{alert-BX9BkYd9.mjs.map → alert-B0j6GH3V.mjs.map} +1 -1
  7. package/{bigint-Cutiv42Q.mjs → bigint-DXS_rVbG.mjs} +5 -5
  8. package/{bigint-Cutiv42Q.mjs.map → bigint-DXS_rVbG.mjs.map} +1 -1
  9. package/{boolean-D6WyXCcY.mjs → boolean-J55jiDD7.mjs} +7 -7
  10. package/{boolean-D6WyXCcY.mjs.map → boolean-J55jiDD7.mjs.map} +1 -1
  11. package/{clipboard-C0t7KXsZ.mjs → clipboard-C6YTX8YB.mjs} +4 -4
  12. package/{clipboard-C0t7KXsZ.mjs.map → clipboard-C6YTX8YB.mjs.map} +1 -1
  13. package/{common-CCR70s0E.mjs → common-a_cd4SQg.mjs} +9 -9
  14. package/{common-CCR70s0E.mjs.map → common-a_cd4SQg.mjs.map} +1 -1
  15. package/components/autorefresh_controller.mjs +1 -1
  16. package/components/control_button.mjs +1 -1
  17. package/components/control_button_bar.mjs +2 -2
  18. package/components/control_menu.mjs +1 -1
  19. package/components/custom_field.mjs +1 -1
  20. package/components/exporter.mjs +1 -1
  21. package/components/fields/bigint.mjs +1 -1
  22. package/components/fields/boolean.mjs +1 -1
  23. package/components/fields/date.mjs +1 -1
  24. package/components/fields/date_time.mjs +1 -1
  25. package/components/fields/enum.mjs +1 -1
  26. package/components/fields/integer.mjs +1 -1
  27. package/components/fields/number.mjs +1 -1
  28. package/components/fields/string.mjs +1 -1
  29. package/components/fields/unsigned_integer.mjs +1 -1
  30. package/components/fields.mjs +9 -9
  31. package/components/form_with_validation.mjs +1 -1
  32. package/components/resourceful_alerter.mjs +1 -1
  33. package/components/resourceful_index.mjs +1 -1
  34. package/components/resourceful_record.mjs +2 -2
  35. package/components/resourceful_record_default_form.mjs +1 -1
  36. package/components/resourceful_record_form.mjs +1 -1
  37. package/components/sortable.mjs +1 -1
  38. package/components/svg_icon.mjs +1 -1
  39. package/components/timezone_picker.mjs +1 -1
  40. package/components.mjs +23 -23
  41. package/composables.mjs +11 -11
  42. package/{custom-B9c_7nfV.mjs → custom-CgyU3A_B.mjs} +4 -4
  43. package/{custom-B9c_7nfV.mjs.map → custom-CgyU3A_B.mjs.map} +1 -1
  44. package/{date-B2SWnGCI.mjs → date-B8edF8kU.mjs} +119 -72
  45. package/date-B8edF8kU.mjs.map +1 -0
  46. package/{date_time-CDwBSOoF.mjs → date_time-BNsYnH-e.mjs} +272 -187
  47. package/date_time-BNsYnH-e.mjs.map +1 -0
  48. package/{display-C5mRsn7Z.mjs → display-pfXaBUr6.mjs} +3 -3
  49. package/{display-C5mRsn7Z.mjs.map → display-pfXaBUr6.mjs.map} +1 -1
  50. package/{enum-DWYdxtym.mjs → enum-DoxJn16e.mjs} +6 -6
  51. package/{enum-DWYdxtym.mjs.map → enum-DoxJn16e.mjs.map} +1 -1
  52. package/{exceptions-Cc9ucZ7k.mjs → exceptions-BeFuVcrH.mjs} +2 -2
  53. package/{exceptions-Cc9ucZ7k.mjs.map → exceptions-BeFuVcrH.mjs.map} +1 -1
  54. package/exceptions.mjs +2 -2
  55. package/factories.mjs +1 -1
  56. package/{field_composer-BKt9bYLY.mjs → field_composer-CPqM1aSV.mjs} +3 -3
  57. package/{field_composer-BKt9bYLY.mjs.map → field_composer-CPqM1aSV.mjs.map} +1 -1
  58. package/{form-UkVPEtmH.mjs → form-BkQlevYR.mjs} +13 -13
  59. package/{form-UkVPEtmH.mjs.map → form-BkQlevYR.mjs.map} +1 -1
  60. package/{guards-DH0cjg4V.mjs → guards-D0G8CU2m.mjs} +2 -2
  61. package/{guards-DH0cjg4V.mjs.map → guards-D0G8CU2m.mjs.map} +1 -1
  62. package/guards.mjs +4 -4
  63. package/helpers.mjs +12 -12
  64. package/{http-DF04z-RO.mjs → http-C15bx-Gn.mjs} +2 -2
  65. package/{http-DF04z-RO.mjs.map → http-C15bx-Gn.mjs.map} +1 -1
  66. package/{http-I0AHP1E0.mjs → http-ChBUYgv8.mjs} +2 -2
  67. package/{http-I0AHP1E0.mjs.map → http-ChBUYgv8.mjs.map} +1 -1
  68. package/http.mjs +1 -1
  69. package/{index-qrLo5NeU.mjs → index-BEXQjukb.mjs} +2 -1
  70. package/{index-qrLo5NeU.mjs.map → index-BEXQjukb.mjs.map} +1 -1
  71. package/{index-CdM957SL.mjs → index-BcDX9w4T.mjs} +6 -6
  72. package/{index-CdM957SL.mjs.map → index-BcDX9w4T.mjs.map} +1 -1
  73. package/{index-DrnPA6Ix.mjs → index-CHELe70a.mjs} +5 -5
  74. package/{index-DrnPA6Ix.mjs.map → index-CHELe70a.mjs.map} +1 -1
  75. package/{index-CPEwoqSn.mjs → index-CduefDwU.mjs} +3 -3
  76. package/{index-CPEwoqSn.mjs.map → index-CduefDwU.mjs.map} +1 -1
  77. package/{index-BYW_4VLZ.mjs → index-CvhhGjZn.mjs} +3 -3
  78. package/{index-BYW_4VLZ.mjs.map → index-CvhhGjZn.mjs.map} +1 -1
  79. package/{index-BDy60Kot.mjs → index-DGWcBN5e.mjs} +10 -10
  80. package/{index-BDy60Kot.mjs.map → index-DGWcBN5e.mjs.map} +1 -1
  81. package/{index-BLHeTLWJ.mjs → index-DHoLuRuJ.mjs} +3 -3
  82. package/{index-BLHeTLWJ.mjs.map → index-DHoLuRuJ.mjs.map} +1 -1
  83. package/{index-Bv_WlNae.mjs → index-DLzoBhUb.mjs} +3 -3
  84. package/{index-Bv_WlNae.mjs.map → index-DLzoBhUb.mjs.map} +1 -1
  85. package/{index-CQL3B-1I.mjs → index-DcCK7tW-.mjs} +31 -31
  86. package/{index-CQL3B-1I.mjs.map → index-DcCK7tW-.mjs.map} +1 -1
  87. package/{index-DocX_tDZ.mjs → index-De0W4KPF.mjs} +6 -6
  88. package/{index-DocX_tDZ.mjs.map → index-De0W4KPF.mjs.map} +1 -1
  89. package/{index-CHv5OSeQ.mjs → index-M6jQfE3a.mjs} +2 -2
  90. package/{index-CHv5OSeQ.mjs.map → index-M6jQfE3a.mjs.map} +1 -1
  91. package/index.mjs +37 -37
  92. package/{integer-Bt_AlHXh.mjs → integer-BWdmDp7S.mjs} +2 -2
  93. package/{integer-Bt_AlHXh.mjs.map → integer-BWdmDp7S.mjs.map} +1 -1
  94. package/{ioc-kp39kvzE.mjs → ioc-Q-KAX6x1.mjs} +2 -2
  95. package/{ioc-kp39kvzE.mjs.map → ioc-Q-KAX6x1.mjs.map} +1 -1
  96. package/ioc.mjs +1 -1
  97. package/{number-Dm-VOsTt.mjs → number-Chf-qQs7.mjs} +6 -6
  98. package/number-Chf-qQs7.mjs.map +1 -0
  99. package/package.json +1 -1
  100. package/private/fields/date_time.d.ts +46 -46
  101. package/{props-BD6dI7C6.mjs → props-eYGYq1uo.mjs} +3 -3
  102. package/{props-BD6dI7C6.mjs.map → props-eYGYq1uo.mjs.map} +1 -1
  103. package/{props-CLREBMsk.mjs → props-fFnbtBgH.mjs} +3 -3
  104. package/{props-CLREBMsk.mjs.map → props-fFnbtBgH.mjs.map} +1 -1
  105. package/{renderers-52Fmk2vb.mjs → renderers-bwWUs06k.mjs} +13 -13
  106. package/{renderers-52Fmk2vb.mjs.map → renderers-bwWUs06k.mjs.map} +1 -1
  107. package/{string-CLObNFFq.mjs → string-D-UsgMTx.mjs} +5 -5
  108. package/{string-CLObNFFq.mjs.map → string-D-UsgMTx.mjs.map} +1 -1
  109. package/{unsigned_integer-BE8JsE5A.mjs → unsigned_integer-7R2vw_Qn.mjs} +3 -3
  110. package/{unsigned_integer-BE8JsE5A.mjs.map → unsigned_integer-7R2vw_Qn.mjs.map} +1 -1
  111. package/{utils-CtD3mjq0.mjs → utils-DehfJ8pT.mjs} +2 -2
  112. package/{utils-CtD3mjq0.mjs.map → utils-DehfJ8pT.mjs.map} +1 -1
  113. package/{validation-AYuAZgi0.mjs → validation-41gHTtyY.mjs} +6 -6
  114. package/{validation-AYuAZgi0.mjs.map → validation-41gHTtyY.mjs.map} +1 -1
  115. package/date-B2SWnGCI.mjs.map +0 -1
  116. package/date_time-CDwBSOoF.mjs.map +0 -1
  117. package/number-Dm-VOsTt.mjs.map +0 -1
@@ -1,11 +1,11 @@
1
- import { a as useI18n } from "./ioc-kp39kvzE.mjs";
1
+ import { a as useI18n } from "./ioc-Q-KAX6x1.mjs";
2
2
  import { useLocale } from "vuetify";
3
3
  import { d as deepmerge } from "./index-DGAy0amb.mjs";
4
- import { a as useSlot, s as stripUndefinedValuesFromObject, j as asAbsInt } from "./utils-CtD3mjq0.mjs";
5
- import { C as ControlMenu } from "./index-DrnPA6Ix.mjs";
6
- import { u as useScopedDisplay } from "./display-C5mRsn7Z.mjs";
4
+ import { a as useSlot, s as stripUndefinedValuesFromObject, j as asAbsInt } from "./utils-DehfJ8pT.mjs";
5
+ import { C as ControlMenu } from "./index-CHELe70a.mjs";
6
+ import { u as useScopedDisplay } from "./display-pfXaBUr6.mjs";
7
7
  import { d as debounce, j as convertToUnit, u as useRender, i as forwardRefs, I as IN_BROWSER } from "./vendor-nhtio-vuetifiable-CS-KbH1h.mjs";
8
- import { c as controlButtonBarEmits, m as makeControlButtonBarProps } from "./props-BD6dI7C6.mjs";
8
+ import { c as controlButtonBarEmits, m as makeControlButtonBarProps } from "./props-eYGYq1uo.mjs";
9
9
  import { defineComponent, toRefs, computed, ref, cloneVNode, mergeProps, h, onMounted, watch, onUnmounted } from "vue";
10
10
  import { V as VListItem } from "./VListItem-DojRgtpe.mjs";
11
11
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
@@ -351,4 +351,4 @@ const ControlButtonBar = defineComponent({
351
351
  export {
352
352
  ControlButtonBar as C
353
353
  };
354
- //# sourceMappingURL=index-CdM957SL.mjs.map
354
+ //# sourceMappingURL=index-BcDX9w4T.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CdM957SL.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 style: {\n paddingBottom: '5px',\n marginBottom: '-5px',\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 as any,\n wrapperRef as any,\n overflowMenuWrapperRef as any\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-BcDX9w4T.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 style: {\n paddingBottom: '5px',\n marginBottom: '-5px',\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 as any,\n wrapperRef as any,\n overflowMenuWrapperRef as any\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,12 +1,12 @@
1
1
  import { useDisplay } from "vuetify";
2
- import { S as SvgIcon } from "./index-CPEwoqSn.mjs";
2
+ import { S as SvgIcon } from "./index-CduefDwU.mjs";
3
3
  import { d as deepmerge } from "./index-DGAy0amb.mjs";
4
- import { a as useSlot } from "./utils-CtD3mjq0.mjs";
4
+ import { a as useSlot } from "./utils-DehfJ8pT.mjs";
5
5
  import { n as numeral } from "./numeral-DmC5bR5g.mjs";
6
6
  import { k as mdiMenuUp, g as mdiMenuDown, V as VCard } from "./mdi-jw9Ee7p6.mjs";
7
- import { C as ControlButton } from "./index-BLHeTLWJ.mjs";
7
+ import { C as ControlButton } from "./index-DHoLuRuJ.mjs";
8
8
  import { u as useRender } from "./vendor-nhtio-vuetifiable-CS-KbH1h.mjs";
9
- import { m as makeControlMenuProps, d as defaultActivatorValues } from "./props-CLREBMsk.mjs";
9
+ import { m as makeControlMenuProps, d as defaultActivatorValues } from "./props-fFnbtBgH.mjs";
10
10
  import { defineComponent, toRefs, ref, computed, h } from "vue";
11
11
  import { V as VMenu } from "./VMenu-D2biKkpd.mjs";
12
12
  const ControlMenu = defineComponent({
@@ -123,4 +123,4 @@ const ControlMenu = defineComponent({
123
123
  export {
124
124
  ControlMenu as C
125
125
  };
126
- //# sourceMappingURL=index-DrnPA6Ix.mjs.map
126
+ //# sourceMappingURL=index-CHELe70a.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-DrnPA6Ix.mjs","sources":["../src/private/control-menu/index.ts"],"sourcesContent":["import { useDisplay } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { default as numeral } from 'numeral'\nimport { VMenu } from 'vuetify/components/VMenu'\nimport { VCard } from 'vuetify/components/VCard'\nimport { mdiMenuUp, mdiMenuDown } from '@mdi/js'\nimport { ControlButton } from '../control-button'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { makeControlMenuProps, defaultActivatorValues } from './props'\nimport { defineComponent, h, computed, toRefs, ref, SlotsType } from 'vue'\nimport type { ControlButtonProps, ControlButtonState } from '../control-button/props'\n\ntype ControMenuButtonSlots = {\n prepend: (state: ControlButtonState) => any\n cta: (state: ControlButtonState) => any\n append: (state: ControlButtonState) => any\n default: (args: { close: () => void }) => any\n}\n\nexport const ControlMenu = defineComponent({\n name: 'ControlMenu',\n props: makeControlMenuProps(),\n slots: Object as SlotsType<ControMenuButtonSlots>,\n setup(props, { slots }) {\n const {\n icon,\n cta,\n count,\n countFormat,\n activator,\n color,\n badgeColor,\n inOverflowMenu,\n disabled,\n noPadding,\n } = toRefs(props)\n const prependSlot = useSlot<ControMenuButtonSlots>('prepend', slots)\n const ctaSlot = useSlot<ControMenuButtonSlots>('cta', slots)\n const appendSlot = useSlot<ControMenuButtonSlots>('append', slots)\n const defaultSlot = useSlot<ControMenuButtonSlots>('default', slots)\n const { height } = useDisplay()\n const open = ref(false)\n const anchor = ref<ControlButton | null>(null)\n const vMenuBindings = computed(() => ({\n 'modelValue': open.value,\n 'onUpdate:modelValue': (value: boolean) => (open.value = value),\n 'closeOnBack': false,\n 'closeOnContentClick': false,\n 'contentClass': 'resourceful-option-menu-content',\n 'minWidth': 300,\n 'location': 'bottom start' as const,\n 'target': anchor.value ? anchor.value.$el : undefined,\n 'submenu': inOverflowMenu.value,\n }))\n const formattedCount = computed(() => numeral(count.value).format(countFormat.value))\n const showCount = computed(() => {\n const num = Number(count.value)\n return !Number.isNaN(num) && Math.abs(num) > 0\n })\n const menuPanelCardBindings = computed(() => ({\n color: color.value,\n minWidth: 300,\n minHeight: 20,\n maxHeight: Math.min(height.value - 200, 400),\n }))\n const doOpenMenu = () => (open.value = true)\n const close = () => (open.value = false)\n const controlButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(defaultActivatorValues, activator.value, {\n ref: anchor,\n prependIcon: icon.value,\n cta: cta.value,\n appendIcon: () => h(SvgIcon, { d: open.value ? mdiMenuUp : mdiMenuDown }),\n divideAppendIcon: true,\n badge: {\n color: badgeColor.value,\n content: showCount.value ? formattedCount.value : undefined,\n },\n class: inOverflowMenu.value ? [] : noPadding.value ? ['my-2', 'me-2'] : ['ma-2'],\n inOverflowMenu: inOverflowMenu.value,\n state: {\n disabled: disabled.value,\n },\n })\n )\n useRender(() =>\n h(\n 'div',\n {\n class: [{ 'w-100': inOverflowMenu.value }],\n },\n h(VMenu, vMenuBindings.value, {\n activator: ({ props: activatorProps }: { props: Record<string, any> }) =>\n h(\n ControlButton,\n {\n ...controlButtonBindings.value,\n ...activatorProps,\n inOverflowMenu: inOverflowMenu.value,\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n {\n cta: ctaSlot\n ? (state: ControlButtonState) =>\n ctaSlot({\n ...state,\n close,\n })\n : null,\n prepend: prependSlot\n ? (state: ControlButtonState) =>\n prependSlot({\n ...state,\n close,\n })\n : null,\n append: appendSlot\n ? (state: ControlButtonState) =>\n appendSlot({\n ...state,\n close,\n })\n : null,\n }\n ),\n default: () =>\n h(VCard, menuPanelCardBindings.value, () =>\n defaultSlot ? defaultSlot({ close }) : null\n ),\n })\n )\n )\n return {\n isOpen: open,\n open: doOpenMenu,\n close,\n }\n },\n})\n\nexport type ControlMenu = InstanceType<typeof ControlMenu>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-CHELe70a.mjs","sources":["../src/private/control-menu/index.ts"],"sourcesContent":["import { useDisplay } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { default as numeral } from 'numeral'\nimport { VMenu } from 'vuetify/components/VMenu'\nimport { VCard } from 'vuetify/components/VCard'\nimport { mdiMenuUp, mdiMenuDown } from '@mdi/js'\nimport { ControlButton } from '../control-button'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { makeControlMenuProps, defaultActivatorValues } from './props'\nimport { defineComponent, h, computed, toRefs, ref, SlotsType } from 'vue'\nimport type { ControlButtonProps, ControlButtonState } from '../control-button/props'\n\ntype ControMenuButtonSlots = {\n prepend: (state: ControlButtonState) => any\n cta: (state: ControlButtonState) => any\n append: (state: ControlButtonState) => any\n default: (args: { close: () => void }) => any\n}\n\nexport const ControlMenu = defineComponent({\n name: 'ControlMenu',\n props: makeControlMenuProps(),\n slots: Object as SlotsType<ControMenuButtonSlots>,\n setup(props, { slots }) {\n const {\n icon,\n cta,\n count,\n countFormat,\n activator,\n color,\n badgeColor,\n inOverflowMenu,\n disabled,\n noPadding,\n } = toRefs(props)\n const prependSlot = useSlot<ControMenuButtonSlots>('prepend', slots)\n const ctaSlot = useSlot<ControMenuButtonSlots>('cta', slots)\n const appendSlot = useSlot<ControMenuButtonSlots>('append', slots)\n const defaultSlot = useSlot<ControMenuButtonSlots>('default', slots)\n const { height } = useDisplay()\n const open = ref(false)\n const anchor = ref<ControlButton | null>(null)\n const vMenuBindings = computed(() => ({\n 'modelValue': open.value,\n 'onUpdate:modelValue': (value: boolean) => (open.value = value),\n 'closeOnBack': false,\n 'closeOnContentClick': false,\n 'contentClass': 'resourceful-option-menu-content',\n 'minWidth': 300,\n 'location': 'bottom start' as const,\n 'target': anchor.value ? anchor.value.$el : undefined,\n 'submenu': inOverflowMenu.value,\n }))\n const formattedCount = computed(() => numeral(count.value).format(countFormat.value))\n const showCount = computed(() => {\n const num = Number(count.value)\n return !Number.isNaN(num) && Math.abs(num) > 0\n })\n const menuPanelCardBindings = computed(() => ({\n color: color.value,\n minWidth: 300,\n minHeight: 20,\n maxHeight: Math.min(height.value - 200, 400),\n }))\n const doOpenMenu = () => (open.value = true)\n const close = () => (open.value = false)\n const controlButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(defaultActivatorValues, activator.value, {\n ref: anchor,\n prependIcon: icon.value,\n cta: cta.value,\n appendIcon: () => h(SvgIcon, { d: open.value ? mdiMenuUp : mdiMenuDown }),\n divideAppendIcon: true,\n badge: {\n color: badgeColor.value,\n content: showCount.value ? formattedCount.value : undefined,\n },\n class: inOverflowMenu.value ? [] : noPadding.value ? ['my-2', 'me-2'] : ['ma-2'],\n inOverflowMenu: inOverflowMenu.value,\n state: {\n disabled: disabled.value,\n },\n })\n )\n useRender(() =>\n h(\n 'div',\n {\n class: [{ 'w-100': inOverflowMenu.value }],\n },\n h(VMenu, vMenuBindings.value, {\n activator: ({ props: activatorProps }: { props: Record<string, any> }) =>\n h(\n ControlButton,\n {\n ...controlButtonBindings.value,\n ...activatorProps,\n inOverflowMenu: inOverflowMenu.value,\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n {\n cta: ctaSlot\n ? (state: ControlButtonState) =>\n ctaSlot({\n ...state,\n close,\n })\n : null,\n prepend: prependSlot\n ? (state: ControlButtonState) =>\n prependSlot({\n ...state,\n close,\n })\n : null,\n append: appendSlot\n ? (state: ControlButtonState) =>\n appendSlot({\n ...state,\n close,\n })\n : null,\n }\n ),\n default: () =>\n h(VCard, menuPanelCardBindings.value, () =>\n defaultSlot ? defaultSlot({ close }) : null\n ),\n })\n )\n )\n return {\n isOpen: open,\n open: doOpenMenu,\n close,\n }\n },\n})\n\nexport type ControlMenu = InstanceType<typeof ControlMenu>\n"],"names":[],"mappings":";;;;;;;;;;;AAqBO,MAAM,cAAc,gBAAgB;AAAA,EACzC,MAAM;AAAA,EACN,OAAO,qBAAA;AAAA,EACP,OAAO;AAAA,EACP,MAAM,OAAO,EAAE,SAAS;AACtB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,OAAO,KAAK;AAChB,UAAM,cAAc,QAA+B,WAAW,KAAK;AACnE,UAAM,UAAU,QAA+B,OAAO,KAAK;AAC3D,UAAM,aAAa,QAA+B,UAAU,KAAK;AACjE,UAAM,cAAc,QAA+B,WAAW,KAAK;AACnE,UAAM,EAAE,OAAA,IAAW,WAAA;AACnB,UAAM,OAAO,IAAI,KAAK;AACtB,UAAM,SAAS,IAA0B,IAAI;AAC7C,UAAM,gBAAgB,SAAS,OAAO;AAAA,MACpC,cAAc,KAAK;AAAA,MACnB,uBAAuB,CAAC,UAAoB,KAAK,QAAQ;AAAA,MACzD,eAAe;AAAA,MACf,uBAAuB;AAAA,MACvB,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU,OAAO,QAAQ,OAAO,MAAM,MAAM;AAAA,MAC5C,WAAW,eAAe;AAAA,IAAA,EAC1B;AACF,UAAM,iBAAiB,SAAS,MAAM,QAAQ,MAAM,KAAK,EAAE,OAAO,YAAY,KAAK,CAAC;AACpF,UAAM,YAAY,SAAS,MAAM;AAC/B,YAAM,MAAM,OAAO,MAAM,KAAK;AAC9B,aAAO,CAAC,OAAO,MAAM,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI;AAAA,IAC/C,CAAC;AACD,UAAM,wBAAwB,SAAS,OAAO;AAAA,MAC5C,OAAO,MAAM;AAAA,MACb,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW,KAAK,IAAI,OAAO,QAAQ,KAAK,GAAG;AAAA,IAAA,EAC3C;AACF,UAAM,aAAa,MAAO,KAAK,QAAQ;AACvC,UAAM,QAAQ,MAAO,KAAK,QAAQ;AAClC,UAAM,wBAAwB;AAAA,MAA6B,MACzD,UAAU,wBAAwB,UAAU,OAAO;AAAA,QACjD,KAAK;AAAA,QACL,aAAa,KAAK;AAAA,QAClB,KAAK,IAAI;AAAA,QACT,YAAY,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,QAAQ,YAAY,aAAa;AAAA,QACxE,kBAAkB;AAAA,QAClB,OAAO;AAAA,UACL,OAAO,WAAW;AAAA,UAClB,SAAS,UAAU,QAAQ,eAAe,QAAQ;AAAA,QAAA;AAAA,QAEpD,OAAO,eAAe,QAAQ,CAAA,IAAK,UAAU,QAAQ,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM;AAAA,QAC/E,gBAAgB,eAAe;AAAA,QAC/B,OAAO;AAAA,UACL,UAAU,SAAS;AAAA,QAAA;AAAA,MACrB,CACD;AAAA,IAAA;AAEH;AAAA,MAAU,MACR;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO,CAAC,EAAE,SAAS,eAAe,OAAO;AAAA,QAAA;AAAA,QAE3C,EAAE,OAAO,cAAc,OAAO;AAAA,UAC5B,WAAW,CAAC,EAAE,OAAO,qBACnB;AAAA,YACE;AAAA,YACA;AAAA,cACE,GAAG,sBAAsB;AAAA,cACzB,GAAG;AAAA,cACH,gBAAgB,eAAe;AAAA,YAAA;AAAA;AAAA,YAGjC;AAAA,cACE,KAAK,UACD,CAAC,UACC,QAAQ;AAAA,gBACN,GAAG;AAAA,gBACH;AAAA,cAAA,CACD,IACH;AAAA,cACJ,SAAS,cACL,CAAC,UACC,YAAY;AAAA,gBACV,GAAG;AAAA,gBACH;AAAA,cAAA,CACD,IACH;AAAA,cACJ,QAAQ,aACJ,CAAC,UACC,WAAW;AAAA,gBACT,GAAG;AAAA,gBACH;AAAA,cAAA,CACD,IACH;AAAA,YAAA;AAAA,UACN;AAAA,UAEJ,SAAS,MACP;AAAA,YAAE;AAAA,YAAO,sBAAsB;AAAA,YAAO,MACpC,cAAc,YAAY,EAAE,MAAA,CAAO,IAAI;AAAA,UAAA;AAAA,QACzC,CACH;AAAA,MAAA;AAAA,IACH;AAEF,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;"}
@@ -1,6 +1,6 @@
1
- import { k as useBrowser } from "./ioc-kp39kvzE.mjs";
1
+ import { k as useBrowser } from "./ioc-Q-KAX6x1.mjs";
2
2
  import { defineComponent, toRefs, h } from "vue";
3
- import { s as stripUndefinedValuesFromObject } from "./utils-CtD3mjq0.mjs";
3
+ import { s as stripUndefinedValuesFromObject } from "./utils-DehfJ8pT.mjs";
4
4
  const SvgIcon = defineComponent({
5
5
  name: "SvgIcon",
6
6
  props: {
@@ -38,4 +38,4 @@ export {
38
38
  SvgIcon as S,
39
39
  svgPathToIconValue as s
40
40
  };
41
- //# sourceMappingURL=index-CPEwoqSn.mjs.map
41
+ //# sourceMappingURL=index-CduefDwU.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CPEwoqSn.mjs","sources":["../src/private/svg-icon/index.ts"],"sourcesContent":["import { useBrowser } from '../ioc'\nimport { defineComponent, h, toRefs } from 'vue'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport type { PropType, ComponentPublicInstance } from 'vue'\nimport type { IconValue } from '@nhtio/vuetifiable/composables/icons'\n\nexport const SvgIcon = defineComponent({\n name: 'SvgIcon',\n props: {\n d: {\n type: String as PropType<string>,\n required: true,\n },\n width: {\n type: [Number, String] as PropType<number | string | undefined>,\n default: undefined,\n },\n height: {\n type: [Number, String] as PropType<number | string | undefined>,\n default: undefined,\n },\n },\n setup(props) {\n const { d, width, height } = toRefs(props)\n const browser = useBrowser()\n return () =>\n h(\n 'svg',\n stripUndefinedValuesFromObject({\n xmlns: 'http://www.w3.org/2000/svg',\n xmlnsXlink: 'http://www.w3.org/1999/xlink',\n viewBox: '0 0 24 24',\n width:\n (width.value ?? (browser.browsers.safari && browser.platforms.ios))\n ? '100%'\n : undefined,\n height:\n (height.value ?? (browser.browsers.safari && browser.platforms.ios))\n ? '100%'\n : undefined,\n }),\n [h('path', { fill: 'currentColor', d: d.value })]\n )\n },\n})\n\nexport type SvgIcon = typeof SvgIcon & ComponentPublicInstance\n\nexport const svgPathToIconValue = (\n d: string,\n width?: number | string,\n height?: number | string\n): IconValue => h(SvgIcon, { d, width, height }) as unknown as IconValue\n"],"names":[],"mappings":";;;AAMO,MAAM,UAAU,gBAAgB;AAAA,EACrC,MAAM;AAAA,EACN,OAAO;AAAA,IACL,GAAG;AAAA,MACD,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,MAAM,OAAO;AACX,UAAM,EAAE,GAAG,OAAO,OAAA,IAAW,OAAO,KAAK;AACzC,UAAM,UAAU,WAAA;AAChB,WAAO,MACL;AAAA,MACE;AAAA,MACA,+BAA+B;AAAA,QAC7B,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,OACG,MAAM,UAAU,QAAQ,SAAS,UAAU,QAAQ,UAAU,OAC1D,SACA;AAAA,QACN,QACG,OAAO,UAAU,QAAQ,SAAS,UAAU,QAAQ,UAAU,OAC3D,SACA;AAAA,MAAA,CACP;AAAA,MACD,CAAC,EAAE,QAAQ,EAAE,MAAM,gBAAgB,GAAG,EAAE,OAAO,CAAC;AAAA,IAAA;AAAA,EAEtD;AACF,CAAC;AAIM,MAAM,qBAAqB,CAChC,GACA,OACA,WACc,EAAE,SAAS,EAAE,GAAG,OAAO,OAAA,CAAQ;"}
1
+ {"version":3,"file":"index-CduefDwU.mjs","sources":["../src/private/svg-icon/index.ts"],"sourcesContent":["import { useBrowser } from '../ioc'\nimport { defineComponent, h, toRefs } from 'vue'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport type { PropType, ComponentPublicInstance } from 'vue'\nimport type { IconValue } from '@nhtio/vuetifiable/composables/icons'\n\nexport const SvgIcon = defineComponent({\n name: 'SvgIcon',\n props: {\n d: {\n type: String as PropType<string>,\n required: true,\n },\n width: {\n type: [Number, String] as PropType<number | string | undefined>,\n default: undefined,\n },\n height: {\n type: [Number, String] as PropType<number | string | undefined>,\n default: undefined,\n },\n },\n setup(props) {\n const { d, width, height } = toRefs(props)\n const browser = useBrowser()\n return () =>\n h(\n 'svg',\n stripUndefinedValuesFromObject({\n xmlns: 'http://www.w3.org/2000/svg',\n xmlnsXlink: 'http://www.w3.org/1999/xlink',\n viewBox: '0 0 24 24',\n width:\n (width.value ?? (browser.browsers.safari && browser.platforms.ios))\n ? '100%'\n : undefined,\n height:\n (height.value ?? (browser.browsers.safari && browser.platforms.ios))\n ? '100%'\n : undefined,\n }),\n [h('path', { fill: 'currentColor', d: d.value })]\n )\n },\n})\n\nexport type SvgIcon = typeof SvgIcon & ComponentPublicInstance\n\nexport const svgPathToIconValue = (\n d: string,\n width?: number | string,\n height?: number | string\n): IconValue => h(SvgIcon, { d, width, height }) as unknown as IconValue\n"],"names":[],"mappings":";;;AAMO,MAAM,UAAU,gBAAgB;AAAA,EACrC,MAAM;AAAA,EACN,OAAO;AAAA,IACL,GAAG;AAAA,MACD,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,MAAM,OAAO;AACX,UAAM,EAAE,GAAG,OAAO,OAAA,IAAW,OAAO,KAAK;AACzC,UAAM,UAAU,WAAA;AAChB,WAAO,MACL;AAAA,MACE;AAAA,MACA,+BAA+B;AAAA,QAC7B,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,OACG,MAAM,UAAU,QAAQ,SAAS,UAAU,QAAQ,UAAU,OAC1D,SACA;AAAA,QACN,QACG,OAAO,UAAU,QAAQ,SAAS,UAAU,QAAQ,UAAU,OAC3D,SACA;AAAA,MAAA,CACP;AAAA,MACD,CAAC,EAAE,QAAQ,EAAE,MAAM,gBAAgB,GAAG,EAAE,OAAO,CAAC;AAAA,IAAA;AAAA,EAEtD;AACF,CAAC;AAIM,MAAM,qBAAqB,CAChC,GACA,OACA,WACc,EAAE,SAAS,EAAE,GAAG,OAAO,OAAA,CAAQ;"}
@@ -1,6 +1,6 @@
1
- import { d as decode, e as encode } from "./index-qrLo5NeU.mjs";
1
+ import { d as decode, e as encode } from "./index-BEXQjukb.mjs";
2
2
  import { d as deepmerge } from "./index-DGAy0amb.mjs";
3
- import { e as emitsFactory, h as getDefaultsForPropFactory, s as stripUndefinedValuesFromObject } from "./utils-CtD3mjq0.mjs";
3
+ import { e as emitsFactory, h as getDefaultsForPropFactory, s as stripUndefinedValuesFromObject } from "./utils-DehfJ8pT.mjs";
4
4
  import { g as getDefaultExportFromCjs } from "./_commonjsHelpers-CUmg6egw.mjs";
5
5
  import { defineComponent, toRefs, computed, toRaw, h, shallowReactive, watch, nextTick, ref, onMounted, onBeforeUnmount } from "vue";
6
6
  import { p as propsFactory, d as debounce } from "./vendor-nhtio-vuetifiable-CS-KbH1h.mjs";
@@ -3225,4 +3225,4 @@ export {
3225
3225
  ordinal as o,
3226
3226
  useSortableProps as u
3227
3227
  };
3228
- //# sourceMappingURL=index-BYW_4VLZ.mjs.map
3228
+ //# sourceMappingURL=index-CvhhGjZn.mjs.map