@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 +1 @@
1
- {"version":3,"file":"clipboard-DRlt84JQ.mjs","sources":["../node_modules/.pnpm/vuetify@3.10.9_typescript@5.9.3_vue@3.5.24_typescript@5.9.3_/node_modules/vuetify/lib/composables/layout.js","../node_modules/.pnpm/vuetify@3.10.9_typescript@5.9.3_vue@3.5.24_typescript@5.9.3_/node_modules/vuetify/lib/components/VSnackbar/VSnackbar.js","../src/private/ux/clipboard.ts"],"sourcesContent":["// Composables\nimport { useResizeObserver } from \"./resizeObserver.js\"; // Utilities\nimport { computed, inject, onActivated, onBeforeUnmount, onDeactivated, onMounted, provide, reactive, ref, shallowRef, toRef, useId } from 'vue';\nimport { consoleWarn, convertToUnit, findChildrenWithProvide, getCurrentInstance, propsFactory } from \"../util/index.js\"; // Types\nexport const VuetifyLayoutKey = Symbol.for('vuetify:layout');\nexport const VuetifyLayoutItemKey = Symbol.for('vuetify:layout-item');\nconst ROOT_ZINDEX = 1000;\nexport const makeLayoutProps = propsFactory({\n overlaps: {\n type: Array,\n default: () => []\n },\n fullHeight: Boolean\n}, 'layout');\n\n// Composables\nexport const makeLayoutItemProps = propsFactory({\n name: {\n type: String\n },\n order: {\n type: [Number, String],\n default: 0\n },\n absolute: Boolean\n}, 'layout-item');\nexport function useLayout() {\n const layout = inject(VuetifyLayoutKey);\n if (!layout) throw new Error('[Vuetify] Could not find injected layout');\n return {\n getLayoutItem: layout.getLayoutItem,\n mainRect: layout.mainRect,\n mainStyles: layout.mainStyles\n };\n}\nexport function useLayoutItem(options) {\n const layout = inject(VuetifyLayoutKey);\n if (!layout) throw new Error('[Vuetify] Could not find injected layout');\n const id = options.id ?? `layout-item-${useId()}`;\n const vm = getCurrentInstance('useLayoutItem');\n provide(VuetifyLayoutItemKey, {\n id\n });\n const isKeptAlive = shallowRef(false);\n onDeactivated(() => isKeptAlive.value = true);\n onActivated(() => isKeptAlive.value = false);\n const {\n layoutItemStyles,\n layoutItemScrimStyles\n } = layout.register(vm, {\n ...options,\n active: computed(() => isKeptAlive.value ? false : options.active.value),\n id\n });\n onBeforeUnmount(() => layout.unregister(id));\n return {\n layoutItemStyles,\n layoutRect: layout.layoutRect,\n layoutItemScrimStyles\n };\n}\nconst generateLayers = (layout, positions, layoutSizes, activeItems) => {\n let previousLayer = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n };\n const layers = [{\n id: '',\n layer: {\n ...previousLayer\n }\n }];\n for (const id of layout) {\n const position = positions.get(id);\n const amount = layoutSizes.get(id);\n const active = activeItems.get(id);\n if (!position || !amount || !active) continue;\n const layer = {\n ...previousLayer,\n [position.value]: parseInt(previousLayer[position.value], 10) + (active.value ? parseInt(amount.value, 10) : 0)\n };\n layers.push({\n id,\n layer\n });\n previousLayer = layer;\n }\n return layers;\n};\nexport function createLayout(props) {\n const parentLayout = inject(VuetifyLayoutKey, null);\n const rootZIndex = computed(() => parentLayout ? parentLayout.rootZIndex.value - 100 : ROOT_ZINDEX);\n const registered = ref([]);\n const positions = reactive(new Map());\n const layoutSizes = reactive(new Map());\n const priorities = reactive(new Map());\n const activeItems = reactive(new Map());\n const disabledTransitions = reactive(new Map());\n const {\n resizeRef,\n contentRect: layoutRect\n } = useResizeObserver();\n const computedOverlaps = computed(() => {\n const map = new Map();\n const overlaps = props.overlaps ?? [];\n for (const overlap of overlaps.filter(item => item.includes(':'))) {\n const [top, bottom] = overlap.split(':');\n if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue;\n const topPosition = positions.get(top);\n const bottomPosition = positions.get(bottom);\n const topAmount = layoutSizes.get(top);\n const bottomAmount = layoutSizes.get(bottom);\n if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue;\n map.set(bottom, {\n position: topPosition.value,\n amount: parseInt(topAmount.value, 10)\n });\n map.set(top, {\n position: bottomPosition.value,\n amount: -parseInt(bottomAmount.value, 10)\n });\n }\n return map;\n });\n const layers = computed(() => {\n const uniquePriorities = [...new Set([...priorities.values()].map(p => p.value))].sort((a, b) => a - b);\n const layout = [];\n for (const p of uniquePriorities) {\n const items = registered.value.filter(id => priorities.get(id)?.value === p);\n layout.push(...items);\n }\n return generateLayers(layout, positions, layoutSizes, activeItems);\n });\n const transitionsEnabled = computed(() => {\n return !Array.from(disabledTransitions.values()).some(ref => ref.value);\n });\n const mainRect = computed(() => {\n return layers.value[layers.value.length - 1].layer;\n });\n const mainStyles = toRef(() => {\n return {\n '--v-layout-left': convertToUnit(mainRect.value.left),\n '--v-layout-right': convertToUnit(mainRect.value.right),\n '--v-layout-top': convertToUnit(mainRect.value.top),\n '--v-layout-bottom': convertToUnit(mainRect.value.bottom),\n ...(transitionsEnabled.value ? undefined : {\n transition: 'none'\n })\n };\n });\n const items = computed(() => {\n return layers.value.slice(1).map((_ref, index) => {\n let {\n id\n } = _ref;\n const {\n layer\n } = layers.value[index];\n const size = layoutSizes.get(id);\n const position = positions.get(id);\n return {\n id,\n ...layer,\n size: Number(size.value),\n position: position.value\n };\n });\n });\n const getLayoutItem = id => {\n return items.value.find(item => item.id === id);\n };\n const rootVm = getCurrentInstance('createLayout');\n const isMounted = shallowRef(false);\n onMounted(() => {\n isMounted.value = true;\n });\n provide(VuetifyLayoutKey, {\n register: (vm, _ref2) => {\n let {\n id,\n order,\n position,\n layoutSize,\n elementSize,\n active,\n disableTransitions,\n absolute\n } = _ref2;\n priorities.set(id, order);\n positions.set(id, position);\n layoutSizes.set(id, layoutSize);\n activeItems.set(id, active);\n disableTransitions && disabledTransitions.set(id, disableTransitions);\n const instances = findChildrenWithProvide(VuetifyLayoutItemKey, rootVm?.vnode);\n const instanceIndex = instances.indexOf(vm);\n if (instanceIndex > -1) registered.value.splice(instanceIndex, 0, id);else registered.value.push(id);\n const index = computed(() => items.value.findIndex(i => i.id === id));\n const zIndex = computed(() => rootZIndex.value + layers.value.length * 2 - index.value * 2);\n const layoutItemStyles = computed(() => {\n const isHorizontal = position.value === 'left' || position.value === 'right';\n const isOppositeHorizontal = position.value === 'right';\n const isOppositeVertical = position.value === 'bottom';\n const size = elementSize.value ?? layoutSize.value;\n const unit = size === 0 ? '%' : 'px';\n const styles = {\n [position.value]: 0,\n zIndex: zIndex.value,\n transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -(size === 0 ? 100 : size)) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}${unit})`,\n position: absolute.value || rootZIndex.value !== ROOT_ZINDEX ? 'absolute' : 'fixed',\n ...(transitionsEnabled.value ? undefined : {\n transition: 'none'\n })\n };\n if (!isMounted.value) return styles;\n const item = items.value[index.value];\n if (!item) consoleWarn(`[Vuetify] Could not find layout item \"${id}\"`);\n const overlap = computedOverlaps.value.get(id);\n if (overlap) {\n item[overlap.position] += overlap.amount;\n }\n return {\n ...styles,\n height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,\n left: isOppositeHorizontal ? undefined : `${item.left}px`,\n right: isOppositeHorizontal ? `${item.right}px` : undefined,\n top: position.value !== 'bottom' ? `${item.top}px` : undefined,\n bottom: position.value !== 'top' ? `${item.bottom}px` : undefined,\n width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : elementSize.value ? `${elementSize.value}px` : undefined\n };\n });\n const layoutItemScrimStyles = computed(() => ({\n zIndex: zIndex.value - 1\n }));\n return {\n layoutItemStyles,\n layoutItemScrimStyles,\n zIndex\n };\n },\n unregister: id => {\n priorities.delete(id);\n positions.delete(id);\n layoutSizes.delete(id);\n activeItems.delete(id);\n disabledTransitions.delete(id);\n registered.value = registered.value.filter(v => v !== id);\n },\n mainRect,\n mainStyles,\n getLayoutItem,\n items,\n layoutRect,\n rootZIndex\n });\n const layoutClasses = toRef(() => ['v-layout', {\n 'v-layout--full-height': props.fullHeight\n }]);\n const layoutStyles = toRef(() => ({\n zIndex: parentLayout ? rootZIndex.value : undefined,\n position: parentLayout ? 'relative' : undefined,\n overflow: parentLayout ? 'hidden' : undefined\n }));\n return {\n layoutClasses,\n layoutStyles,\n getLayoutItem,\n items,\n layoutRect,\n layoutRef: resizeRef\n };\n}\n//# sourceMappingURL=layout.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VSnackbar.css\";\n\n// Components\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VOverlay } from \"../VOverlay/index.js\";\nimport { makeVOverlayProps } from \"../VOverlay/VOverlay.js\";\nimport { VProgressLinear } from \"../VProgressLinear/index.js\"; // Composables\nimport { useLayout } from \"../../composables/index.js\";\nimport { forwardRefs } from \"../../composables/forwardRefs.js\";\nimport { VuetifyLayoutKey } from \"../../composables/layout.js\";\nimport { makeLocationProps } from \"../../composables/location.js\";\nimport { makePositionProps, usePosition } from \"../../composables/position.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { useScopeId } from \"../../composables/scopeId.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { genOverlays, makeVariantProps, useVariant } from \"../../composables/variant.js\"; // Utilities\nimport { computed, inject, mergeProps, nextTick, onMounted, onScopeDispose, ref, shallowRef, watch, watchEffect } from 'vue';\nimport { genericComponent, omit, propsFactory, refElement, useRender } from \"../../util/index.js\"; // Types\nfunction useCountdown(milliseconds) {\n const time = shallowRef(milliseconds());\n let timer = -1;\n function clear() {\n clearInterval(timer);\n }\n function reset() {\n clear();\n nextTick(() => time.value = milliseconds());\n }\n function start(el) {\n const style = el ? getComputedStyle(el) : {\n transitionDuration: 0.2\n };\n const interval = parseFloat(style.transitionDuration) * 1000 || 200;\n clear();\n if (time.value <= 0) return;\n const startTime = performance.now();\n timer = window.setInterval(() => {\n const elapsed = performance.now() - startTime + interval;\n time.value = Math.max(milliseconds() - elapsed, 0);\n if (time.value <= 0) clear();\n }, interval);\n }\n onScopeDispose(clear);\n return {\n clear,\n time,\n start,\n reset\n };\n}\nexport const makeVSnackbarProps = propsFactory({\n /* @deprecated */\n multiLine: Boolean,\n text: String,\n timer: [Boolean, String],\n timeout: {\n type: [Number, String],\n default: 5000\n },\n vertical: Boolean,\n ...makeLocationProps({\n location: 'bottom'\n }),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeVariantProps(),\n ...makeThemeProps(),\n ...omit(makeVOverlayProps({\n transition: 'v-snackbar-transition'\n }), ['persistent', 'noClickAnimation', 'scrim', 'scrollStrategy', 'stickToTarget'])\n}, 'VSnackbar');\nexport const VSnackbar = genericComponent()({\n name: 'VSnackbar',\n props: makeVSnackbarProps(),\n emits: {\n 'update:modelValue': v => true\n },\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const isActive = useProxiedModel(props, 'modelValue');\n const {\n positionClasses\n } = usePosition(props);\n const {\n scopeId\n } = useScopeId();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n colorClasses,\n colorStyles,\n variantClasses\n } = useVariant(props);\n const {\n roundedClasses\n } = useRounded(props);\n const countdown = useCountdown(() => Number(props.timeout));\n const overlay = ref();\n const timerRef = ref();\n const isHovering = shallowRef(false);\n const startY = shallowRef(0);\n const mainStyles = ref();\n const hasLayout = inject(VuetifyLayoutKey, undefined);\n useToggleScope(() => !!hasLayout, () => {\n const layout = useLayout();\n watchEffect(() => {\n mainStyles.value = layout.mainStyles.value;\n });\n });\n watch(isActive, startTimeout);\n watch(() => props.timeout, startTimeout);\n onMounted(() => {\n if (isActive.value) startTimeout();\n });\n let activeTimeout = -1;\n function startTimeout() {\n countdown.reset();\n window.clearTimeout(activeTimeout);\n const timeout = Number(props.timeout);\n if (!isActive.value || timeout === -1) return;\n const element = refElement(timerRef.value);\n countdown.start(element);\n activeTimeout = window.setTimeout(() => {\n isActive.value = false;\n }, timeout);\n }\n function clearTimeout() {\n countdown.reset();\n window.clearTimeout(activeTimeout);\n }\n function onPointerenter() {\n isHovering.value = true;\n clearTimeout();\n }\n function onPointerleave() {\n isHovering.value = false;\n startTimeout();\n }\n function onTouchstart(event) {\n startY.value = event.touches[0].clientY;\n }\n function onTouchend(event) {\n if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {\n isActive.value = false;\n }\n }\n function onAfterLeave() {\n if (isHovering.value) onPointerleave();\n }\n const locationClasses = computed(() => {\n return props.location.split(' ').reduce((acc, loc) => {\n acc[`v-snackbar--${loc}`] = true;\n return acc;\n }, {});\n });\n useRender(() => {\n const overlayProps = VOverlay.filterProps(props);\n const hasContent = !!(slots.default || slots.text || props.text);\n return _createVNode(VOverlay, _mergeProps({\n \"ref\": overlay,\n \"class\": ['v-snackbar', {\n 'v-snackbar--active': isActive.value,\n 'v-snackbar--multi-line': props.multiLine && !props.vertical,\n 'v-snackbar--timer': !!props.timer,\n 'v-snackbar--vertical': props.vertical\n }, locationClasses.value, positionClasses.value, props.class],\n \"style\": [mainStyles.value, props.style]\n }, overlayProps, {\n \"modelValue\": isActive.value,\n \"onUpdate:modelValue\": $event => isActive.value = $event,\n \"contentProps\": mergeProps({\n class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],\n style: [colorStyles.value],\n onPointerenter,\n onPointerleave\n }, overlayProps.contentProps),\n \"persistent\": true,\n \"noClickAnimation\": true,\n \"scrim\": false,\n \"scrollStrategy\": \"none\",\n \"_disableGlobalStack\": true,\n \"onTouchstartPassive\": onTouchstart,\n \"onTouchend\": onTouchend,\n \"onAfterLeave\": onAfterLeave\n }, scopeId), {\n default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && _createElementVNode(\"div\", {\n \"key\": \"timer\",\n \"class\": \"v-snackbar__timer\"\n }, [_createVNode(VProgressLinear, {\n \"ref\": timerRef,\n \"color\": typeof props.timer === 'string' ? props.timer : 'info',\n \"max\": props.timeout,\n \"modelValue\": countdown.time.value\n }, null)]), hasContent && _createElementVNode(\"div\", {\n \"key\": \"content\",\n \"class\": \"v-snackbar__content\",\n \"role\": \"status\",\n \"aria-live\": \"polite\"\n }, [slots.text?.() ?? props.text, slots.default?.()]), slots.actions && _createVNode(VDefaultsProvider, {\n \"defaults\": {\n VBtn: {\n variant: 'text',\n ripple: false,\n slim: true\n }\n }\n }, {\n default: () => [_createElementVNode(\"div\", {\n \"class\": \"v-snackbar__actions\"\n }, [slots.actions({\n isActive\n })])]\n })],\n activator: slots.activator\n });\n });\n return forwardRefs({}, overlay);\n }\n});\n//# sourceMappingURL=VSnackbar.js.map","import { ref, h } from 'vue'\nimport { useI18n } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { toUnreactive } from '../common/utils'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VSnackbar } from 'vuetify/components/VSnackbar'\nimport { IN_BROWSER } from '@nhtio/vuetifiable/util/globals'\nimport { mdiCheckboxMarkedCircleOutline, mdiAlert } from '@mdi/js'\nimport { makeVSnackbarProps } from '@nhtio/vuetifiable/components/VSnackbar/VSnackbar'\nimport type { MaybeRef, ExtractPublicPropTypes } from 'vue'\n\n/**\n * Copies text to the system clipboard using multiple fallback strategies for maximum compatibility.\n *\n * This function implements a progressive enhancement approach with three fallback methods:\n * 1. Modern Clipboard API (preferred) - Most secure, requires HTTPS/localhost\n * 2. Document.execCommand('copy') - Legacy browser support\n * 3. Manual prompt fallback - Ultimate compatibility when all else fails\n *\n * @param text - The text content to copy to clipboard\n * @param onSuccess - Optional callback executed when copy operation succeeds\n * @param onFailure - Optional callback executed when copy operation fails, receives error details\n *\n * @example\n * ```typescript\n * // Basic usage\n * copyToClipboard('Hello World!')\n *\n * // With callbacks\n * copyToClipboard(\n * 'Important data',\n * () => console.log('Copied successfully!'),\n * (error) => console.error('Copy failed:', error.message)\n * )\n *\n * // In Vue component with user feedback\n * const handleCopy = (text: string) => {\n * copyToClipboard(\n * text,\n * () => showNotification('Copied to clipboard!'),\n * (error) => showNotification(`Copy failed: ${error.message}`)\n * )\n * }\n * ```\n *\n * @remarks\n * - Clipboard API requires secure context (HTTPS or localhost)\n * - execCommand fallback works in older browsers but is deprecated\n * - Manual prompt ensures functionality even in restricted environments\n * - SSR-safe with proper browser environment detection\n *\n * @public\n */\nexport const copyToClipboard = (\n text: string,\n onSuccess?: () => void,\n onFailure?: (error: Error) => void\n): void => {\n // If not in a browser environment, we cannot access the clipboard\n if (!IN_BROWSER) {\n onFailure?.(new Error('Not in a browser environment'))\n return\n }\n\n // Method 1: Modern Clipboard API (most secure and reliable)\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n onSuccess?.()\n })\n .catch((err) => {\n onFailure?.(new Error(`Clipboard API failed: ${err.message}`))\n })\n return\n }\n\n // Method 2: execCommand fallback (for older browsers)\n const textArea = document.createElement('textarea')\n textArea.value = text\n\n // Make the textarea invisible but still selectable\n textArea.style.position = 'fixed'\n textArea.style.top = '0'\n textArea.style.left = '0'\n textArea.style.width = '2em'\n textArea.style.height = '2em'\n textArea.style.padding = '0'\n textArea.style.border = 'none'\n textArea.style.outline = 'none'\n textArea.style.boxShadow = 'none'\n textArea.style.background = 'transparent'\n\n document.body.appendChild(textArea)\n textArea.focus()\n textArea.select()\n\n try {\n const successful = document.execCommand('copy')\n document.body.removeChild(textArea)\n\n if (successful) {\n onSuccess?.()\n } else {\n onFailure?.(new Error('execCommand copy failed'))\n }\n } catch (err) {\n document.body.removeChild(textArea)\n\n // Method 3: Prompt user to copy manually (ultimate fallback)\n try {\n prompt('Copy to clipboard: Ctrl+C / Cmd+C, Enter', text)\n // We can't know if the user actually copied, so we call success optimistically\n onSuccess?.()\n } catch (promptErr) {\n onFailure?.(new Error(`All copy methods failed: ${err}`))\n }\n }\n}\n\nexport type VSnackbarPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVSnackbarProps>>\n\nexport type ClipboardComposableOptions = Pick<\n VSnackbarPublicProps,\n 'timeout' | 'timer' | 'variant' | 'location' | 'tile' | 'variant'\n>\n\nconst successIcon = h(SvgIcon, { d: mdiCheckboxMarkedCircleOutline })\nconst failureIcon = h(SvgIcon, { d: mdiAlert })\n\n/**\n * Vue composable for clipboard operations with integrated visual feedback via Vuetify snackbars.\n *\n * This composable provides a complete clipboard solution that combines the robust `copyToClipboard`\n * utility with automatic user feedback through customizable success/error snackbars. It uses Vue's\n * render functions to provide maximum flexibility in how and where feedback is displayed.\n *\n * @param options - Configuration options extending VSnackbar props (reactive or static)\n * @returns Object containing copy function and render function for feedback UI\n *\n * @example\n * Basic usage with default styling:\n * ```vue\n * <template>\n * <v-btn @click=\"copy('Hello World!')\">Copy Text</v-btn>\n * <component :is=\"renderClipboardFeedback()\" />\n * </template>\n *\n * <script setup>\n * const { copy, renderClipboardFeedback } = useClipboard()\n * </script>\n * ```\n *\n * @example\n * With custom snackbar configuration:\n * ```vue\n * <template>\n * <v-btn @click=\"copy(selectedText)\">Copy Selection</v-btn>\n * <component :is=\"renderClipboardFeedback()\" />\n * </template>\n *\n * <script setup>\n * const { copy, renderClipboardFeedback } = useClipboard({\n * timeout: 8000,\n * location: 'top',\n * variant: 'outlined'\n * })\n * </script>\n * ```\n *\n * @example\n * Reactive configuration with computed options:\n * ```vue\n * <script setup>\n * const isDarkMode = ref(true)\n * const snackbarOptions = computed(() => ({\n * timeout: isDarkMode.value ? 6000 : 4000,\n * variant: isDarkMode.value ? 'outlined' : 'elevated'\n * }))\n *\n * const { copy, renderClipboardFeedback } = useClipboard(snackbarOptions)\n * </script>\n * ```\n *\n * @remarks\n * - Automatically validates timeout values to ensure good UX (4-10 second range)\n * - Provides mutual exclusion between success and error snackbars\n * - Uses headless UI pattern allowing flexible integration into any component hierarchy\n * - Supports all VSnackbar props for complete customization control\n * - Integrates with i18n system for internationalized feedback messages\n * - Built on the robust `copyToClipboard` utility with comprehensive browser fallbacks\n *\n * @public\n */\nexport const useClipboard = (options: MaybeRef<ClipboardComposableOptions> = {}) => {\n const t = useI18n()\n const showingSuccessSnackbar = ref(false)\n const getFixedOptions = () => {\n const opts = toUnreactive(options)\n if ('timeout' in opts && 'undefined' !== typeof opts.timeout && opts.timeout !== null) {\n const numericTimeout = Number.parseInt(opts.timeout.toString())\n if (Number.isNaN(numericTimeout) || numericTimeout < 4000 || numericTimeout > 10000) {\n opts.timeout = 5000\n }\n } else {\n opts.timeout = 5000\n }\n return opts\n }\n const renderSuccessSnackbar = () =>\n h(\n VSnackbar,\n {\n modelValue: showingSuccessSnackbar.value,\n color: 'success',\n ...getFixedOptions(),\n ...{\n 'onUpdate:modelValue': (value: boolean) => (showingSuccessSnackbar.value = value),\n },\n },\n () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start'] }, [\n h(VIcon, { class: ['me-2', 'flex-grow-0'], icon: () => successIcon }),\n h(\n 'span',\n { class: ['flex-grow-1', 'text-center'] },\n t('resourceful.clipboard.copiedToClipboard')\n ),\n ])\n )\n const showingFailureSnackbar = ref(false)\n const renderFailureSnackbar = () =>\n h(\n VSnackbar,\n {\n modelValue: showingFailureSnackbar.value,\n color: 'error',\n ...getFixedOptions(),\n ...{\n 'onUpdate:modelValue': (value: boolean) => (showingFailureSnackbar.value = value),\n },\n },\n () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start'] }, [\n h(VIcon, { class: ['me-2', 'flex-grow-0'], icon: () => failureIcon }),\n h(\n 'span',\n { class: ['flex-grow-1', 'text-center'] },\n t('resourceful.clipboard.copyFailed')\n ),\n ])\n )\n const renderClipboardFeedback = () =>\n showingSuccessSnackbar.value\n ? renderSuccessSnackbar()\n : showingFailureSnackbar.value\n ? renderFailureSnackbar()\n : null\n const copyWithFeedback = (text: string) => {\n copyToClipboard(\n text,\n () => {\n showingSuccessSnackbar.value = true\n showingFailureSnackbar.value = false\n },\n () => {\n showingFailureSnackbar.value = true\n showingSuccessSnackbar.value = false\n }\n )\n }\n return {\n copy: copyWithFeedback,\n renderClipboardFeedback,\n }\n}\n"],"names":["_createVNode","_mergeProps","_createElementVNode"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"clipboard-B4T3iSwL.mjs","sources":["../node_modules/.pnpm/vuetify@3.10.9_typescript@5.9.3_vue@3.5.24_typescript@5.9.3_/node_modules/vuetify/lib/composables/layout.js","../node_modules/.pnpm/vuetify@3.10.9_typescript@5.9.3_vue@3.5.24_typescript@5.9.3_/node_modules/vuetify/lib/components/VSnackbar/VSnackbar.js","../src/private/ux/clipboard.ts"],"sourcesContent":["// Composables\nimport { useResizeObserver } from \"./resizeObserver.js\"; // Utilities\nimport { computed, inject, onActivated, onBeforeUnmount, onDeactivated, onMounted, provide, reactive, ref, shallowRef, toRef, useId } from 'vue';\nimport { consoleWarn, convertToUnit, findChildrenWithProvide, getCurrentInstance, propsFactory } from \"../util/index.js\"; // Types\nexport const VuetifyLayoutKey = Symbol.for('vuetify:layout');\nexport const VuetifyLayoutItemKey = Symbol.for('vuetify:layout-item');\nconst ROOT_ZINDEX = 1000;\nexport const makeLayoutProps = propsFactory({\n overlaps: {\n type: Array,\n default: () => []\n },\n fullHeight: Boolean\n}, 'layout');\n\n// Composables\nexport const makeLayoutItemProps = propsFactory({\n name: {\n type: String\n },\n order: {\n type: [Number, String],\n default: 0\n },\n absolute: Boolean\n}, 'layout-item');\nexport function useLayout() {\n const layout = inject(VuetifyLayoutKey);\n if (!layout) throw new Error('[Vuetify] Could not find injected layout');\n return {\n getLayoutItem: layout.getLayoutItem,\n mainRect: layout.mainRect,\n mainStyles: layout.mainStyles\n };\n}\nexport function useLayoutItem(options) {\n const layout = inject(VuetifyLayoutKey);\n if (!layout) throw new Error('[Vuetify] Could not find injected layout');\n const id = options.id ?? `layout-item-${useId()}`;\n const vm = getCurrentInstance('useLayoutItem');\n provide(VuetifyLayoutItemKey, {\n id\n });\n const isKeptAlive = shallowRef(false);\n onDeactivated(() => isKeptAlive.value = true);\n onActivated(() => isKeptAlive.value = false);\n const {\n layoutItemStyles,\n layoutItemScrimStyles\n } = layout.register(vm, {\n ...options,\n active: computed(() => isKeptAlive.value ? false : options.active.value),\n id\n });\n onBeforeUnmount(() => layout.unregister(id));\n return {\n layoutItemStyles,\n layoutRect: layout.layoutRect,\n layoutItemScrimStyles\n };\n}\nconst generateLayers = (layout, positions, layoutSizes, activeItems) => {\n let previousLayer = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n };\n const layers = [{\n id: '',\n layer: {\n ...previousLayer\n }\n }];\n for (const id of layout) {\n const position = positions.get(id);\n const amount = layoutSizes.get(id);\n const active = activeItems.get(id);\n if (!position || !amount || !active) continue;\n const layer = {\n ...previousLayer,\n [position.value]: parseInt(previousLayer[position.value], 10) + (active.value ? parseInt(amount.value, 10) : 0)\n };\n layers.push({\n id,\n layer\n });\n previousLayer = layer;\n }\n return layers;\n};\nexport function createLayout(props) {\n const parentLayout = inject(VuetifyLayoutKey, null);\n const rootZIndex = computed(() => parentLayout ? parentLayout.rootZIndex.value - 100 : ROOT_ZINDEX);\n const registered = ref([]);\n const positions = reactive(new Map());\n const layoutSizes = reactive(new Map());\n const priorities = reactive(new Map());\n const activeItems = reactive(new Map());\n const disabledTransitions = reactive(new Map());\n const {\n resizeRef,\n contentRect: layoutRect\n } = useResizeObserver();\n const computedOverlaps = computed(() => {\n const map = new Map();\n const overlaps = props.overlaps ?? [];\n for (const overlap of overlaps.filter(item => item.includes(':'))) {\n const [top, bottom] = overlap.split(':');\n if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue;\n const topPosition = positions.get(top);\n const bottomPosition = positions.get(bottom);\n const topAmount = layoutSizes.get(top);\n const bottomAmount = layoutSizes.get(bottom);\n if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue;\n map.set(bottom, {\n position: topPosition.value,\n amount: parseInt(topAmount.value, 10)\n });\n map.set(top, {\n position: bottomPosition.value,\n amount: -parseInt(bottomAmount.value, 10)\n });\n }\n return map;\n });\n const layers = computed(() => {\n const uniquePriorities = [...new Set([...priorities.values()].map(p => p.value))].sort((a, b) => a - b);\n const layout = [];\n for (const p of uniquePriorities) {\n const items = registered.value.filter(id => priorities.get(id)?.value === p);\n layout.push(...items);\n }\n return generateLayers(layout, positions, layoutSizes, activeItems);\n });\n const transitionsEnabled = computed(() => {\n return !Array.from(disabledTransitions.values()).some(ref => ref.value);\n });\n const mainRect = computed(() => {\n return layers.value[layers.value.length - 1].layer;\n });\n const mainStyles = toRef(() => {\n return {\n '--v-layout-left': convertToUnit(mainRect.value.left),\n '--v-layout-right': convertToUnit(mainRect.value.right),\n '--v-layout-top': convertToUnit(mainRect.value.top),\n '--v-layout-bottom': convertToUnit(mainRect.value.bottom),\n ...(transitionsEnabled.value ? undefined : {\n transition: 'none'\n })\n };\n });\n const items = computed(() => {\n return layers.value.slice(1).map((_ref, index) => {\n let {\n id\n } = _ref;\n const {\n layer\n } = layers.value[index];\n const size = layoutSizes.get(id);\n const position = positions.get(id);\n return {\n id,\n ...layer,\n size: Number(size.value),\n position: position.value\n };\n });\n });\n const getLayoutItem = id => {\n return items.value.find(item => item.id === id);\n };\n const rootVm = getCurrentInstance('createLayout');\n const isMounted = shallowRef(false);\n onMounted(() => {\n isMounted.value = true;\n });\n provide(VuetifyLayoutKey, {\n register: (vm, _ref2) => {\n let {\n id,\n order,\n position,\n layoutSize,\n elementSize,\n active,\n disableTransitions,\n absolute\n } = _ref2;\n priorities.set(id, order);\n positions.set(id, position);\n layoutSizes.set(id, layoutSize);\n activeItems.set(id, active);\n disableTransitions && disabledTransitions.set(id, disableTransitions);\n const instances = findChildrenWithProvide(VuetifyLayoutItemKey, rootVm?.vnode);\n const instanceIndex = instances.indexOf(vm);\n if (instanceIndex > -1) registered.value.splice(instanceIndex, 0, id);else registered.value.push(id);\n const index = computed(() => items.value.findIndex(i => i.id === id));\n const zIndex = computed(() => rootZIndex.value + layers.value.length * 2 - index.value * 2);\n const layoutItemStyles = computed(() => {\n const isHorizontal = position.value === 'left' || position.value === 'right';\n const isOppositeHorizontal = position.value === 'right';\n const isOppositeVertical = position.value === 'bottom';\n const size = elementSize.value ?? layoutSize.value;\n const unit = size === 0 ? '%' : 'px';\n const styles = {\n [position.value]: 0,\n zIndex: zIndex.value,\n transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -(size === 0 ? 100 : size)) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}${unit})`,\n position: absolute.value || rootZIndex.value !== ROOT_ZINDEX ? 'absolute' : 'fixed',\n ...(transitionsEnabled.value ? undefined : {\n transition: 'none'\n })\n };\n if (!isMounted.value) return styles;\n const item = items.value[index.value];\n if (!item) consoleWarn(`[Vuetify] Could not find layout item \"${id}\"`);\n const overlap = computedOverlaps.value.get(id);\n if (overlap) {\n item[overlap.position] += overlap.amount;\n }\n return {\n ...styles,\n height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,\n left: isOppositeHorizontal ? undefined : `${item.left}px`,\n right: isOppositeHorizontal ? `${item.right}px` : undefined,\n top: position.value !== 'bottom' ? `${item.top}px` : undefined,\n bottom: position.value !== 'top' ? `${item.bottom}px` : undefined,\n width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : elementSize.value ? `${elementSize.value}px` : undefined\n };\n });\n const layoutItemScrimStyles = computed(() => ({\n zIndex: zIndex.value - 1\n }));\n return {\n layoutItemStyles,\n layoutItemScrimStyles,\n zIndex\n };\n },\n unregister: id => {\n priorities.delete(id);\n positions.delete(id);\n layoutSizes.delete(id);\n activeItems.delete(id);\n disabledTransitions.delete(id);\n registered.value = registered.value.filter(v => v !== id);\n },\n mainRect,\n mainStyles,\n getLayoutItem,\n items,\n layoutRect,\n rootZIndex\n });\n const layoutClasses = toRef(() => ['v-layout', {\n 'v-layout--full-height': props.fullHeight\n }]);\n const layoutStyles = toRef(() => ({\n zIndex: parentLayout ? rootZIndex.value : undefined,\n position: parentLayout ? 'relative' : undefined,\n overflow: parentLayout ? 'hidden' : undefined\n }));\n return {\n layoutClasses,\n layoutStyles,\n getLayoutItem,\n items,\n layoutRect,\n layoutRef: resizeRef\n };\n}\n//# sourceMappingURL=layout.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VSnackbar.css\";\n\n// Components\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VOverlay } from \"../VOverlay/index.js\";\nimport { makeVOverlayProps } from \"../VOverlay/VOverlay.js\";\nimport { VProgressLinear } from \"../VProgressLinear/index.js\"; // Composables\nimport { useLayout } from \"../../composables/index.js\";\nimport { forwardRefs } from \"../../composables/forwardRefs.js\";\nimport { VuetifyLayoutKey } from \"../../composables/layout.js\";\nimport { makeLocationProps } from \"../../composables/location.js\";\nimport { makePositionProps, usePosition } from \"../../composables/position.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { useScopeId } from \"../../composables/scopeId.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { genOverlays, makeVariantProps, useVariant } from \"../../composables/variant.js\"; // Utilities\nimport { computed, inject, mergeProps, nextTick, onMounted, onScopeDispose, ref, shallowRef, watch, watchEffect } from 'vue';\nimport { genericComponent, omit, propsFactory, refElement, useRender } from \"../../util/index.js\"; // Types\nfunction useCountdown(milliseconds) {\n const time = shallowRef(milliseconds());\n let timer = -1;\n function clear() {\n clearInterval(timer);\n }\n function reset() {\n clear();\n nextTick(() => time.value = milliseconds());\n }\n function start(el) {\n const style = el ? getComputedStyle(el) : {\n transitionDuration: 0.2\n };\n const interval = parseFloat(style.transitionDuration) * 1000 || 200;\n clear();\n if (time.value <= 0) return;\n const startTime = performance.now();\n timer = window.setInterval(() => {\n const elapsed = performance.now() - startTime + interval;\n time.value = Math.max(milliseconds() - elapsed, 0);\n if (time.value <= 0) clear();\n }, interval);\n }\n onScopeDispose(clear);\n return {\n clear,\n time,\n start,\n reset\n };\n}\nexport const makeVSnackbarProps = propsFactory({\n /* @deprecated */\n multiLine: Boolean,\n text: String,\n timer: [Boolean, String],\n timeout: {\n type: [Number, String],\n default: 5000\n },\n vertical: Boolean,\n ...makeLocationProps({\n location: 'bottom'\n }),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeVariantProps(),\n ...makeThemeProps(),\n ...omit(makeVOverlayProps({\n transition: 'v-snackbar-transition'\n }), ['persistent', 'noClickAnimation', 'scrim', 'scrollStrategy', 'stickToTarget'])\n}, 'VSnackbar');\nexport const VSnackbar = genericComponent()({\n name: 'VSnackbar',\n props: makeVSnackbarProps(),\n emits: {\n 'update:modelValue': v => true\n },\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const isActive = useProxiedModel(props, 'modelValue');\n const {\n positionClasses\n } = usePosition(props);\n const {\n scopeId\n } = useScopeId();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n colorClasses,\n colorStyles,\n variantClasses\n } = useVariant(props);\n const {\n roundedClasses\n } = useRounded(props);\n const countdown = useCountdown(() => Number(props.timeout));\n const overlay = ref();\n const timerRef = ref();\n const isHovering = shallowRef(false);\n const startY = shallowRef(0);\n const mainStyles = ref();\n const hasLayout = inject(VuetifyLayoutKey, undefined);\n useToggleScope(() => !!hasLayout, () => {\n const layout = useLayout();\n watchEffect(() => {\n mainStyles.value = layout.mainStyles.value;\n });\n });\n watch(isActive, startTimeout);\n watch(() => props.timeout, startTimeout);\n onMounted(() => {\n if (isActive.value) startTimeout();\n });\n let activeTimeout = -1;\n function startTimeout() {\n countdown.reset();\n window.clearTimeout(activeTimeout);\n const timeout = Number(props.timeout);\n if (!isActive.value || timeout === -1) return;\n const element = refElement(timerRef.value);\n countdown.start(element);\n activeTimeout = window.setTimeout(() => {\n isActive.value = false;\n }, timeout);\n }\n function clearTimeout() {\n countdown.reset();\n window.clearTimeout(activeTimeout);\n }\n function onPointerenter() {\n isHovering.value = true;\n clearTimeout();\n }\n function onPointerleave() {\n isHovering.value = false;\n startTimeout();\n }\n function onTouchstart(event) {\n startY.value = event.touches[0].clientY;\n }\n function onTouchend(event) {\n if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {\n isActive.value = false;\n }\n }\n function onAfterLeave() {\n if (isHovering.value) onPointerleave();\n }\n const locationClasses = computed(() => {\n return props.location.split(' ').reduce((acc, loc) => {\n acc[`v-snackbar--${loc}`] = true;\n return acc;\n }, {});\n });\n useRender(() => {\n const overlayProps = VOverlay.filterProps(props);\n const hasContent = !!(slots.default || slots.text || props.text);\n return _createVNode(VOverlay, _mergeProps({\n \"ref\": overlay,\n \"class\": ['v-snackbar', {\n 'v-snackbar--active': isActive.value,\n 'v-snackbar--multi-line': props.multiLine && !props.vertical,\n 'v-snackbar--timer': !!props.timer,\n 'v-snackbar--vertical': props.vertical\n }, locationClasses.value, positionClasses.value, props.class],\n \"style\": [mainStyles.value, props.style]\n }, overlayProps, {\n \"modelValue\": isActive.value,\n \"onUpdate:modelValue\": $event => isActive.value = $event,\n \"contentProps\": mergeProps({\n class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],\n style: [colorStyles.value],\n onPointerenter,\n onPointerleave\n }, overlayProps.contentProps),\n \"persistent\": true,\n \"noClickAnimation\": true,\n \"scrim\": false,\n \"scrollStrategy\": \"none\",\n \"_disableGlobalStack\": true,\n \"onTouchstartPassive\": onTouchstart,\n \"onTouchend\": onTouchend,\n \"onAfterLeave\": onAfterLeave\n }, scopeId), {\n default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && _createElementVNode(\"div\", {\n \"key\": \"timer\",\n \"class\": \"v-snackbar__timer\"\n }, [_createVNode(VProgressLinear, {\n \"ref\": timerRef,\n \"color\": typeof props.timer === 'string' ? props.timer : 'info',\n \"max\": props.timeout,\n \"modelValue\": countdown.time.value\n }, null)]), hasContent && _createElementVNode(\"div\", {\n \"key\": \"content\",\n \"class\": \"v-snackbar__content\",\n \"role\": \"status\",\n \"aria-live\": \"polite\"\n }, [slots.text?.() ?? props.text, slots.default?.()]), slots.actions && _createVNode(VDefaultsProvider, {\n \"defaults\": {\n VBtn: {\n variant: 'text',\n ripple: false,\n slim: true\n }\n }\n }, {\n default: () => [_createElementVNode(\"div\", {\n \"class\": \"v-snackbar__actions\"\n }, [slots.actions({\n isActive\n })])]\n })],\n activator: slots.activator\n });\n });\n return forwardRefs({}, overlay);\n }\n});\n//# sourceMappingURL=VSnackbar.js.map","import { ref, h } from 'vue'\nimport { useI18n } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { toUnreactive } from '../common/utils'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VSnackbar } from 'vuetify/components/VSnackbar'\nimport { IN_BROWSER } from '@nhtio/vuetifiable/util/globals'\nimport { mdiCheckboxMarkedCircleOutline, mdiAlert } from '@mdi/js'\nimport { makeVSnackbarProps } from '@nhtio/vuetifiable/components/VSnackbar/VSnackbar'\nimport type { MaybeRef, ExtractPublicPropTypes } from 'vue'\n\n/**\n * Copies text to the system clipboard using multiple fallback strategies for maximum compatibility.\n *\n * This function implements a progressive enhancement approach with three fallback methods:\n * 1. Modern Clipboard API (preferred) - Most secure, requires HTTPS/localhost\n * 2. Document.execCommand('copy') - Legacy browser support\n * 3. Manual prompt fallback - Ultimate compatibility when all else fails\n *\n * @param text - The text content to copy to clipboard\n * @param onSuccess - Optional callback executed when copy operation succeeds\n * @param onFailure - Optional callback executed when copy operation fails, receives error details\n *\n * @example\n * ```typescript\n * // Basic usage\n * copyToClipboard('Hello World!')\n *\n * // With callbacks\n * copyToClipboard(\n * 'Important data',\n * () => console.log('Copied successfully!'),\n * (error) => console.error('Copy failed:', error.message)\n * )\n *\n * // In Vue component with user feedback\n * const handleCopy = (text: string) => {\n * copyToClipboard(\n * text,\n * () => showNotification('Copied to clipboard!'),\n * (error) => showNotification(`Copy failed: ${error.message}`)\n * )\n * }\n * ```\n *\n * @remarks\n * - Clipboard API requires secure context (HTTPS or localhost)\n * - execCommand fallback works in older browsers but is deprecated\n * - Manual prompt ensures functionality even in restricted environments\n * - SSR-safe with proper browser environment detection\n *\n * @public\n */\nexport const copyToClipboard = (\n text: string,\n onSuccess?: () => void,\n onFailure?: (error: Error) => void\n): void => {\n // If not in a browser environment, we cannot access the clipboard\n if (!IN_BROWSER) {\n onFailure?.(new Error('Not in a browser environment'))\n return\n }\n\n // Method 1: Modern Clipboard API (most secure and reliable)\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n onSuccess?.()\n })\n .catch((err) => {\n onFailure?.(new Error(`Clipboard API failed: ${err.message}`))\n })\n return\n }\n\n // Method 2: execCommand fallback (for older browsers)\n const textArea = document.createElement('textarea')\n textArea.value = text\n\n // Make the textarea invisible but still selectable\n textArea.style.position = 'fixed'\n textArea.style.top = '0'\n textArea.style.left = '0'\n textArea.style.width = '2em'\n textArea.style.height = '2em'\n textArea.style.padding = '0'\n textArea.style.border = 'none'\n textArea.style.outline = 'none'\n textArea.style.boxShadow = 'none'\n textArea.style.background = 'transparent'\n\n document.body.appendChild(textArea)\n textArea.focus()\n textArea.select()\n\n try {\n const successful = document.execCommand('copy')\n document.body.removeChild(textArea)\n\n if (successful) {\n onSuccess?.()\n } else {\n onFailure?.(new Error('execCommand copy failed'))\n }\n } catch (err) {\n document.body.removeChild(textArea)\n\n // Method 3: Prompt user to copy manually (ultimate fallback)\n try {\n prompt('Copy to clipboard: Ctrl+C / Cmd+C, Enter', text)\n // We can't know if the user actually copied, so we call success optimistically\n onSuccess?.()\n } catch (promptErr) {\n onFailure?.(new Error(`All copy methods failed: ${err}`))\n }\n }\n}\n\nexport type VSnackbarPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVSnackbarProps>>\n\nexport type ClipboardComposableOptions = Pick<\n VSnackbarPublicProps,\n 'timeout' | 'timer' | 'variant' | 'location' | 'tile' | 'variant'\n>\n\nconst successIcon = h(SvgIcon, { d: mdiCheckboxMarkedCircleOutline })\nconst failureIcon = h(SvgIcon, { d: mdiAlert })\n\n/**\n * Vue composable for clipboard operations with integrated visual feedback via Vuetify snackbars.\n *\n * This composable provides a complete clipboard solution that combines the robust `copyToClipboard`\n * utility with automatic user feedback through customizable success/error snackbars. It uses Vue's\n * render functions to provide maximum flexibility in how and where feedback is displayed.\n *\n * @param options - Configuration options extending VSnackbar props (reactive or static)\n * @returns Object containing copy function and render function for feedback UI\n *\n * @example\n * Basic usage with default styling:\n * ```vue\n * <template>\n * <v-btn @click=\"copy('Hello World!')\">Copy Text</v-btn>\n * <component :is=\"renderClipboardFeedback()\" />\n * </template>\n *\n * <script setup>\n * const { copy, renderClipboardFeedback } = useClipboard()\n * </script>\n * ```\n *\n * @example\n * With custom snackbar configuration:\n * ```vue\n * <template>\n * <v-btn @click=\"copy(selectedText)\">Copy Selection</v-btn>\n * <component :is=\"renderClipboardFeedback()\" />\n * </template>\n *\n * <script setup>\n * const { copy, renderClipboardFeedback } = useClipboard({\n * timeout: 8000,\n * location: 'top',\n * variant: 'outlined'\n * })\n * </script>\n * ```\n *\n * @example\n * Reactive configuration with computed options:\n * ```vue\n * <script setup>\n * const isDarkMode = ref(true)\n * const snackbarOptions = computed(() => ({\n * timeout: isDarkMode.value ? 6000 : 4000,\n * variant: isDarkMode.value ? 'outlined' : 'elevated'\n * }))\n *\n * const { copy, renderClipboardFeedback } = useClipboard(snackbarOptions)\n * </script>\n * ```\n *\n * @remarks\n * - Automatically validates timeout values to ensure good UX (4-10 second range)\n * - Provides mutual exclusion between success and error snackbars\n * - Uses headless UI pattern allowing flexible integration into any component hierarchy\n * - Supports all VSnackbar props for complete customization control\n * - Integrates with i18n system for internationalized feedback messages\n * - Built on the robust `copyToClipboard` utility with comprehensive browser fallbacks\n *\n * @public\n */\nexport const useClipboard = (options: MaybeRef<ClipboardComposableOptions> = {}) => {\n const t = useI18n()\n const showingSuccessSnackbar = ref(false)\n const getFixedOptions = () => {\n const opts = toUnreactive(options)\n if ('timeout' in opts && 'undefined' !== typeof opts.timeout && opts.timeout !== null) {\n const numericTimeout = Number.parseInt(opts.timeout.toString())\n if (Number.isNaN(numericTimeout) || numericTimeout < 4000 || numericTimeout > 10000) {\n opts.timeout = 5000\n }\n } else {\n opts.timeout = 5000\n }\n return opts\n }\n const renderSuccessSnackbar = () =>\n h(\n VSnackbar,\n {\n modelValue: showingSuccessSnackbar.value,\n color: 'success',\n ...getFixedOptions(),\n ...{\n 'onUpdate:modelValue': (value: boolean) => (showingSuccessSnackbar.value = value),\n },\n },\n () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start'] }, [\n h(VIcon, { class: ['me-2', 'flex-grow-0'], icon: () => successIcon }),\n h(\n 'span',\n { class: ['flex-grow-1', 'text-center'] },\n t('resourceful.clipboard.copiedToClipboard')\n ),\n ])\n )\n const showingFailureSnackbar = ref(false)\n const renderFailureSnackbar = () =>\n h(\n VSnackbar,\n {\n modelValue: showingFailureSnackbar.value,\n color: 'error',\n ...getFixedOptions(),\n ...{\n 'onUpdate:modelValue': (value: boolean) => (showingFailureSnackbar.value = value),\n },\n },\n () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start'] }, [\n h(VIcon, { class: ['me-2', 'flex-grow-0'], icon: () => failureIcon }),\n h(\n 'span',\n { class: ['flex-grow-1', 'text-center'] },\n t('resourceful.clipboard.copyFailed')\n ),\n ])\n )\n const renderClipboardFeedback = () =>\n showingSuccessSnackbar.value\n ? renderSuccessSnackbar()\n : showingFailureSnackbar.value\n ? renderFailureSnackbar()\n : null\n const copyWithFeedback = (text: string) => {\n copyToClipboard(\n text,\n () => {\n showingSuccessSnackbar.value = true\n showingFailureSnackbar.value = false\n },\n () => {\n showingFailureSnackbar.value = true\n showingSuccessSnackbar.value = false\n }\n )\n }\n return {\n copy: copyWithFeedback,\n renderClipboardFeedback,\n }\n}\n"],"names":["_createVNode","_mergeProps","_createElementVNode"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,18 +1,18 @@
1
- import { W as nullifyTransforms, K as animate, p as forwardRefs, L as getScrollParent, r as VDialogTransition, z as createSimpleFunctional, X as mdiLeadPencil, V as VCard, Y as mdiListBoxOutline, G as mdiPlus, d as mdiClose, a as mdiMenuUp, b as mdiMenuDown, Z as mdiDelete, _ as mdiDrag, $ as mdiInformation, a0 as mdiBug } from "./mdi-B06yTfXf.mjs";
1
+ import { W as nullifyTransforms, K as animate, p as forwardRefs, L as getScrollParent, r as VDialogTransition, z as createSimpleFunctional, X as mdiLeadPencil, V as VCard, Y as mdiListBoxOutline, G as mdiPlus, d as mdiClose, a as mdiMenuUp, b as mdiMenuDown, Z as mdiDelete, _ as mdiDrag, $ as mdiInformation, a0 as mdiBug } from "./mdi-Kxmy15-q.mjs";
2
2
  import { useDisplay as useDisplay$1, useTheme } from "vuetify";
3
- import { S as SvgIcon } from "./index-CfWOKNEo.mjs";
3
+ import { S as SvgIcon } from "./index-dcZGsFwf.mjs";
4
4
  import { d as deepmerge } from "./index-B2cQuM3q.mjs";
5
- import { b as pick$1, B as makeVListItemProps, C as makeVComboboxProps, c as convertToUnit$1, l as filterInputAttrs$1, u as useRender$1, f as forwardRefs$1, d as debounce$1, a as propsFactory$1, j as makeVFieldProps$1, k as makeVInputProps$1 } from "./vendor-nhtio-vuetifiable-Qm2uuc7r.mjs";
5
+ import { b as pick$1, B as makeVListItemProps, C as makeVComboboxProps, c as convertToUnit$1, n as filterInputAttrs$1, u as useRender$1, f as forwardRefs$1, d as debounce$1, a as propsFactory$1, k as makeVFieldProps$1, l as makeVInputProps$1 } from "./vendor-nhtio-vuetifiable-CRAkpWr4.mjs";
6
6
  import { i as decode, j as encode } from "./vendor-nhtio-lucid-resourceful-Bc8uNS08.mjs";
7
- import { a as useI18n } from "./ioc-BRFP3w6U.mjs";
8
- import { p as propsAndEmitsFactory, t as toUnreactive, n as getStringOrVNodeAsString, s as stripUndefinedValuesFromObject, l as isNotEmpty, u as useFocus$1, a as useSlot, g as getCamelAndMaybeKebabPropKeysFor } from "./utils-C_uOac-v.mjs";
7
+ import { a as useI18n } from "./ioc-CbjgKkoq.mjs";
8
+ import { p as propsAndEmitsFactory, t as toUnreactive, n as getStringOrVNodeAsString, s as stripUndefinedValuesFromObject, l as isNotEmpty, u as useFocus$1, a as useSlot, g as getCamelAndMaybeKebabPropKeysFor } from "./utils-Dh8-g-7s.mjs";
9
9
  import { createElementVNode, normalizeStyle, normalizeClass, shallowRef, onMounted, toRef, readonly, computed, createVNode, withDirectives, vShow, mergeProps, watchEffect, ref, useId, provide, onScopeDispose, Fragment, inject, nextTick, unref, onBeforeMount, onBeforeUnmount, watch, cloneVNode, toValue, createTextVNode, defineComponent as defineComponent$1, toRefs, h, triggerRef } from "vue";
10
- import { u as useNestedItem, b as useList, c as useNestedGroupActivator, d as createList, V as VListItem, e as useNested, m as makeNestedProps, f as VListItemSubtitle, a as VListItemTitle } from "./VListItem-TG9oZPkm.mjs";
11
- import { S as Sortable } from "./index-BobM-vEI.mjs";
12
- import { g as genericComponent, p as propsFactory, f as useRender, s as makeThemeProps, A as makeComponentProps, ao as EventProp, i as VDefaultsProvider, aJ as defineComponent, as as MaybeTransition, bd as VExpandTransition, t as makeTagProps, M as IconValue, av as useTextColor, j as provideTheme, Z as convertToUnit, be as isPrimitive, az as pick, ac as deepEqual, bf as getPropertyFromItem, E as omit, k as useBackgroundColor, l as useBorder, af as useDensity, m as useDimension, n as useElevation, r as useRounded, ad as provideDefaults, S as makeVariantProps, v as makeRoundedProps, y as makeElevationProps, z as makeDimensionProps, an as makeDensityProps, B as makeBorderProps, F as focusChild, u as useProxiedModel, ae as Ripple, L as filterInputAttrs, d as VIcon, ap as wrapInArray, ba as matchesSelector, T as useLocale, bg as callEvent, aI as makeTransitionProps, H as VSlideYTransition, bh as getCurrentInstanceName, N as getCurrentInstance, P as useToggleScope, C as useRtl, $ as useLoader, a4 as PREFERS_REDUCED_MOTION, ax as standardEasing, a2 as LoaderSlot, aj as VExpandXTransition, a$ as makeLoaderProps, I as Intersect, a8 as useResizeObserver, Y as useDisplay, aF as debounce, U as clamp, e as IN_BROWSER, bi as camelizeProps, ak as VAvatar, aC as ensureValidVNode, aE as checkPrintable, a as VImg, aB as noop, O as useVariant, o as useLocation, q as usePosition, R as genOverlays, c as VBtn, w as makePositionProps, x as makeLocationProps } from "./display-CdPzCNpa.mjs";
13
- import { V as VMenu } from "./VMenu-DbIG2Qhi.mjs";
14
- import { V as VChip } from "./VChip-1IMgN2NW.mjs";
15
- import { V as VDialog, m as makeVDialogProps } from "./VDialog-uKUuB6Ni.mjs";
10
+ import { u as useNestedItem, b as useList, c as useNestedGroupActivator, d as createList, V as VListItem, e as useNested, m as makeNestedProps, f as VListItemSubtitle, a as VListItemTitle } from "./VListItem-B2LElOLe.mjs";
11
+ import { S as Sortable } from "./index-BitVUrFg.mjs";
12
+ import { g as genericComponent, p as propsFactory, f as useRender, s as makeThemeProps, A as makeComponentProps, ao as EventProp, i as VDefaultsProvider, aJ as defineComponent, as as MaybeTransition, bd as VExpandTransition, t as makeTagProps, M as IconValue, av as useTextColor, j as provideTheme, Z as convertToUnit, be as isPrimitive, az as pick, ac as deepEqual, bf as getPropertyFromItem, E as omit, k as useBackgroundColor, l as useBorder, af as useDensity, m as useDimension, n as useElevation, r as useRounded, ad as provideDefaults, S as makeVariantProps, v as makeRoundedProps, y as makeElevationProps, z as makeDimensionProps, an as makeDensityProps, B as makeBorderProps, F as focusChild, u as useProxiedModel, ae as Ripple, L as filterInputAttrs, d as VIcon, ap as wrapInArray, ba as matchesSelector, T as useLocale, bg as callEvent, aI as makeTransitionProps, H as VSlideYTransition, bh as getCurrentInstanceName, N as getCurrentInstance, P as useToggleScope, C as useRtl, $ as useLoader, a4 as PREFERS_REDUCED_MOTION, ax as standardEasing, a2 as LoaderSlot, aj as VExpandXTransition, a$ as makeLoaderProps, I as Intersect, a8 as useResizeObserver, Y as useDisplay, aF as debounce, U as clamp, e as IN_BROWSER, bi as camelizeProps, ak as VAvatar, aC as ensureValidVNode, aE as checkPrintable, a as VImg, aB as noop, O as useVariant, o as useLocation, q as usePosition, R as genOverlays, c as VBtn, w as makePositionProps, x as makeLocationProps } from "./display-D19CpJw_.mjs";
13
+ import { V as VMenu } from "./VMenu-CahiNXXZ.mjs";
14
+ import { V as VChip } from "./VChip-BslsWQfv.mjs";
15
+ import { V as VDialog, m as makeVDialogProps } from "./VDialog-CYWIsqyU.mjs";
16
16
  const makeVLabelProps = propsFactory({
17
17
  text: String,
18
18
  onClick: EventProp(),
@@ -5116,9 +5116,9 @@ export {
5116
5116
  commonEmitsValidators as c,
5117
5117
  VToolbarItems as d,
5118
5118
  VBottomSheet as e,
5119
- VInput as f,
5120
- VField as g,
5121
- VAutocomplete as h,
5119
+ VAutocomplete as f,
5120
+ VInput as g,
5121
+ VField as h,
5122
5122
  RMultipleField as i,
5123
5123
  VSelectionControl as j,
5124
5124
  makeVSelectionControlProps as k,
@@ -5138,4 +5138,4 @@ export {
5138
5138
  useItems as y,
5139
5139
  transformItem$1 as z
5140
5140
  };
5141
- //# sourceMappingURL=common-Pv2k5d5L.mjs.map
5141
+ //# sourceMappingURL=common-crxptQS0.mjs.map