@enos5/enos-vue-default 1.16.8 → 1.18.0

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 (33) hide show
  1. package/README.md +66 -0
  2. package/dist/{code-Uq_sE9rw.js → code-mFVfv-JF.js} +2 -2
  3. package/dist/{code-Uq_sE9rw.js.map → code-mFVfv-JF.js.map} +1 -1
  4. package/dist/components/FloatingActionHint.vue.d.ts +20 -0
  5. package/dist/components/SidebarMenuButton.vue.d.ts +1 -1
  6. package/dist/components/TableColumnVisibility.vue.d.ts +81 -0
  7. package/dist/components/TableList.vue.d.ts +83 -0
  8. package/dist/components/TableListForm.vue.d.ts +10 -1
  9. package/dist/{default-BrvQoVVs.js → default-CXSE-CfC.js} +2 -2
  10. package/dist/{default-BrvQoVVs.js.map → default-CXSE-CfC.js.map} +1 -1
  11. package/dist/{dom-CyNQy3FR.js → dom-CFK7rsQj.js} +2 -2
  12. package/dist/{dom-CyNQy3FR.js.map → dom-CFK7rsQj.js.map} +1 -1
  13. package/dist/exports.d.ts +1 -0
  14. package/dist/{image-BPy4dcSt.js → image-BKHRC93C.js} +2 -2
  15. package/dist/{image-BPy4dcSt.js.map → image-BKHRC93C.js.map} +1 -1
  16. package/dist/index.docs.d.ts +1 -0
  17. package/dist/index.js +2 -2
  18. package/dist/index.node.js +2 -2
  19. package/dist/{link-BNLldsh6.js → link-6m9FnJyE.js} +2 -2
  20. package/dist/{link-BNLldsh6.js.map → link-6m9FnJyE.js.map} +1 -1
  21. package/dist/{lists-CCw-difh.js → lists-Dm_2IIm_.js} +2 -2
  22. package/dist/{lists-CCw-difh.js.map → lists-Dm_2IIm_.js.map} +1 -1
  23. package/dist/{plugin-BXdUiTUI.js → plugin-CkWJbkrp.js} +903 -468
  24. package/dist/plugin-CkWJbkrp.js.map +1 -0
  25. package/dist/{silver-6SQnxErw.js → silver-Ck5Nmwm5.js} +2 -2
  26. package/dist/{silver-6SQnxErw.js.map → silver-Ck5Nmwm5.js.map} +1 -1
  27. package/dist/styles.css +85 -27
  28. package/dist/{table-eUIcL87o.js → table-BaMYTIbc.js} +2 -2
  29. package/dist/{table-eUIcL87o.js.map → table-BaMYTIbc.js.map} +1 -1
  30. package/dist/{tinymce-_FcmnBzR.js → tinymce-B_nz3bjz.js} +2 -2
  31. package/dist/{tinymce-_FcmnBzR.js.map → tinymce-B_nz3bjz.js.map} +1 -1
  32. package/package.json +36 -36
  33. package/dist/plugin-BXdUiTUI.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { Fragment, Teleport, Transition, cloneVNode, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, h, inject, isVNode, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onUnmounted, openBlock, provide, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toHandlers, unref, useAttrs, useSlots, vModelCheckbox, vModelText, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
1
+ import { Fragment, Teleport, Transition, cloneVNode, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, h, inject, isVNode, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onUnmounted, openBlock, provide, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toHandlers, unref, useAttrs, useSlots, vModelCheckbox, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
2
2
  import { CheckIcon, ChevronDownIcon, ChevronUpIcon, ExclamationCircleIcon, ExclamationTriangleIcon, EyeDropperIcon, LockClosedIcon, PencilSquareIcon, PhotoIcon, XMarkIcon } from "@heroicons/vue/24/outline";
3
3
  import Editor from "@tinymce/tinymce-vue";
4
4
  import { useI18n } from "vue-i18n";
@@ -36,18 +36,18 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
36
36
  }) : target, mod));
37
37
  //#endregion
38
38
  //#region src/components/CardTabs.vue
39
- var _hoisted_1$38 = { class: "border-b border-neutral-200 bg-neutral-50/80 p-2 dark:border-neutral-800 dark:bg-neutral-900/80" };
40
- var _hoisted_2$21 = {
39
+ var _hoisted_1$40 = { class: "border-b border-neutral-200 bg-neutral-50/80 p-2 dark:border-neutral-800 dark:bg-neutral-900/80" };
40
+ var _hoisted_2$23 = {
41
41
  role: "tablist",
42
42
  class: "flex overflow-hidden rounded-lg bg-white shadow-sm ring-1 ring-neutral-200 dark:bg-neutral-950 dark:ring-neutral-800"
43
43
  };
44
- var _hoisted_3$16 = [
44
+ var _hoisted_3$18 = [
45
45
  "aria-selected",
46
46
  "tabindex",
47
47
  "onClick",
48
48
  "onKeydown"
49
49
  ];
50
- var _sfc_main$40 = {
50
+ var _sfc_main$41 = {
51
51
  __name: "CardTabs",
52
52
  props: {
53
53
  tabs: {
@@ -106,7 +106,7 @@ var _sfc_main$40 = {
106
106
  focusTabAtIndex(targetIndex);
107
107
  };
108
108
  return (_ctx, _cache) => {
109
- return openBlock(), createElementBlock("div", _hoisted_1$38, [createElementVNode("div", _hoisted_2$21, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab, index) => {
109
+ return openBlock(), createElementBlock("div", _hoisted_1$40, [createElementVNode("div", _hoisted_2$23, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab, index) => {
110
110
  return openBlock(), createElementBlock("button", {
111
111
  key: tab.value,
112
112
  ref_for: true,
@@ -123,22 +123,22 @@ var _sfc_main$40 = {
123
123
  ]),
124
124
  onClick: ($event) => activateTab(tab.value),
125
125
  onKeydown: ($event) => onTabKeydown($event, index)
126
- }, toDisplayString(tab.label), 47, _hoisted_3$16);
126
+ }, toDisplayString(tab.label), 47, _hoisted_3$18);
127
127
  }), 128))])]);
128
128
  };
129
129
  }
130
130
  };
131
131
  //#endregion
132
132
  //#region src/components/Card.vue
133
- var _hoisted_1$37 = {
133
+ var _hoisted_1$39 = {
134
134
  key: 0,
135
135
  class: "mb-4"
136
136
  };
137
- var _hoisted_2$20 = {
137
+ var _hoisted_2$22 = {
138
138
  key: 1,
139
139
  class: "mb-4 text-xl font-semibold tracking-tight text-neutral-950 dark:text-neutral-50"
140
140
  };
141
- var _sfc_main$39 = {
141
+ var _sfc_main$40 = {
142
142
  __name: "Card",
143
143
  props: {
144
144
  title: {
@@ -198,13 +198,13 @@ var _sfc_main$39 = {
198
198
  __props.overflowClass,
199
199
  { "sticky top-6 self-start": __props.sticky },
200
200
  __props.cardClass
201
- ]) }, [__props.tabs.length > 0 ? (openBlock(), createBlock(_sfc_main$40, {
201
+ ]) }, [__props.tabs.length > 0 ? (openBlock(), createBlock(_sfc_main$41, {
202
202
  key: 0,
203
203
  tabs: __props.tabs,
204
204
  "active-tab": __props.activeTab,
205
205
  "onUpdate:activeTab": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:activeTab", $event)),
206
206
  onTabClick: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("tab-click", $event))
207
- }, null, 8, ["tabs", "active-tab"])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(__props.paddingClass) }, [_ctx.$slots.customTitle ? (openBlock(), createElementBlock("div", _hoisted_1$37, [renderSlot(_ctx.$slots, "customTitle")])) : __props.title ? (openBlock(), createElementBlock("h3", _hoisted_2$20, toDisplayString(__props.title), 1)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(["relative", __props.tabs.length > 0 ? "overflow-hidden" : "overflow-visible"]) }, [createVNode(Transition, {
207
+ }, null, 8, ["tabs", "active-tab"])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(__props.paddingClass) }, [_ctx.$slots.customTitle ? (openBlock(), createElementBlock("div", _hoisted_1$39, [renderSlot(_ctx.$slots, "customTitle")])) : __props.title ? (openBlock(), createElementBlock("h3", _hoisted_2$22, toDisplayString(__props.title), 1)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(["relative", __props.tabs.length > 0 ? "overflow-hidden" : "overflow-visible"]) }, [createVNode(Transition, {
208
208
  "enter-active-class": "transition-all duration-200 ease-in-out",
209
209
  "enter-from-class": slideDirection.value === "right" ? "translate-x-full opacity-0" : "-translate-x-full opacity-0",
210
210
  "enter-to-class": "translate-x-0 opacity-100",
@@ -228,7 +228,7 @@ var _sfc_main$39 = {
228
228
  };
229
229
  //#endregion
230
230
  //#region src/components/Divider.vue
231
- var _sfc_main$38 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
231
+ var _sfc_main$39 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
232
232
  __name: "Divider",
233
233
  setup(__props) {
234
234
  return (_ctx, _cache) => {
@@ -238,7 +238,7 @@ var _sfc_main$38 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
238
238
  });
239
239
  //#endregion
240
240
  //#region src/components/ActionCard.vue
241
- var _sfc_main$37 = {
241
+ var _sfc_main$38 = {
242
242
  __name: "ActionCard",
243
243
  props: {
244
244
  title: {
@@ -253,11 +253,11 @@ var _sfc_main$37 = {
253
253
  setup(__props) {
254
254
  const slots = useSlots();
255
255
  return (_ctx, _cache) => {
256
- return openBlock(), createBlock(_sfc_main$39, {
256
+ return openBlock(), createBlock(_sfc_main$40, {
257
257
  title: __props.title,
258
258
  "content-class": __props.actionsClass
259
259
  }, {
260
- default: withCtx(() => [renderSlot(_ctx.$slots, "default"), unref(slots).danger ? (openBlock(), createBlock(_sfc_main$38, {
260
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default"), unref(slots).danger ? (openBlock(), createBlock(_sfc_main$39, {
261
261
  key: 0,
262
262
  class: "mt-6 pt-4"
263
263
  }, {
@@ -271,8 +271,8 @@ var _sfc_main$37 = {
271
271
  };
272
272
  //#endregion
273
273
  //#region src/components/ActionMessage.vue
274
- var _hoisted_1$36 = { class: "text-sm text-gray-600" };
275
- var _sfc_main$36 = {
274
+ var _hoisted_1$38 = { class: "text-sm text-gray-600" };
275
+ var _sfc_main$37 = {
276
276
  __name: "ActionMessage",
277
277
  props: { on: Boolean },
278
278
  setup(__props) {
@@ -282,7 +282,7 @@ var _sfc_main$36 = {
282
282
  "leave-from-class": "opacity-100",
283
283
  "leave-to-class": "opacity-0"
284
284
  }, {
285
- default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_1$36, [renderSlot(_ctx.$slots, "default")], 512), [[vShow, __props.on]])]),
285
+ default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_1$38, [renderSlot(_ctx.$slots, "default")], 512), [[vShow, __props.on]])]),
286
286
  _: 3
287
287
  })]);
288
288
  };
@@ -297,37 +297,37 @@ var _plugin_vue_export_helper_default = (sfc, props) => {
297
297
  };
298
298
  //#endregion
299
299
  //#region src/components/SectionTitle.vue
300
- var _sfc_main$35 = {};
301
- var _hoisted_1$35 = { class: "md:col-span-1 flex justify-between" };
302
- var _hoisted_2$19 = { class: "px-4 sm:px-0" };
303
- var _hoisted_3$15 = { class: "text-xl font-semibold tracking-tight text-neutral-950 dark:text-neutral-50" };
304
- var _hoisted_4$11 = { class: "mt-1 max-w-2xl text-sm text-neutral-600 dark:text-neutral-200" };
305
- var _hoisted_5$8 = { class: "px-4 sm:px-0" };
300
+ var _sfc_main$36 = {};
301
+ var _hoisted_1$37 = { class: "md:col-span-1 flex justify-between" };
302
+ var _hoisted_2$21 = { class: "px-4 sm:px-0" };
303
+ var _hoisted_3$17 = { class: "text-xl font-semibold tracking-tight text-neutral-950 dark:text-neutral-50" };
304
+ var _hoisted_4$12 = { class: "mt-1 max-w-2xl text-sm text-neutral-600 dark:text-neutral-200" };
305
+ var _hoisted_5$9 = { class: "px-4 sm:px-0" };
306
306
  function _sfc_render(_ctx, _cache) {
307
- return openBlock(), createElementBlock("div", _hoisted_1$35, [createElementVNode("div", _hoisted_2$19, [createElementVNode("h3", _hoisted_3$15, [renderSlot(_ctx.$slots, "title")]), createElementVNode("p", _hoisted_4$11, [renderSlot(_ctx.$slots, "description")])]), createElementVNode("div", _hoisted_5$8, [renderSlot(_ctx.$slots, "aside")])]);
307
+ return openBlock(), createElementBlock("div", _hoisted_1$37, [createElementVNode("div", _hoisted_2$21, [createElementVNode("h3", _hoisted_3$17, [renderSlot(_ctx.$slots, "title")]), createElementVNode("p", _hoisted_4$12, [renderSlot(_ctx.$slots, "description")])]), createElementVNode("div", _hoisted_5$9, [renderSlot(_ctx.$slots, "aside")])]);
308
308
  }
309
- var SectionTitle_default = /*#__PURE__*/ _plugin_vue_export_helper_default(_sfc_main$35, [["render", _sfc_render]]);
309
+ var SectionTitle_default = /*#__PURE__*/ _plugin_vue_export_helper_default(_sfc_main$36, [["render", _sfc_render]]);
310
310
  //#endregion
311
311
  //#region src/components/ActionSection.vue
312
- var _hoisted_1$34 = { class: "md:grid md:grid-cols-3 md:gap-6" };
313
- var _hoisted_2$18 = { class: "mt-5 md:mt-0 md:col-span-2" };
314
- var _hoisted_3$14 = { class: "rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6" };
315
- var _sfc_main$34 = {
312
+ var _hoisted_1$36 = { class: "md:grid md:grid-cols-3 md:gap-6" };
313
+ var _hoisted_2$20 = { class: "mt-5 md:mt-0 md:col-span-2" };
314
+ var _hoisted_3$16 = { class: "rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6" };
315
+ var _sfc_main$35 = {
316
316
  __name: "ActionSection",
317
317
  setup(__props) {
318
318
  return (_ctx, _cache) => {
319
- return openBlock(), createElementBlock("div", _hoisted_1$34, [createVNode(SectionTitle_default, null, {
319
+ return openBlock(), createElementBlock("div", _hoisted_1$36, [createVNode(SectionTitle_default, null, {
320
320
  title: withCtx(() => [renderSlot(_ctx.$slots, "title")]),
321
321
  description: withCtx(() => [renderSlot(_ctx.$slots, "description")]),
322
322
  _: 3
323
- }), createElementVNode("div", _hoisted_2$18, [createElementVNode("div", _hoisted_3$14, [renderSlot(_ctx.$slots, "content")])])]);
323
+ }), createElementVNode("div", _hoisted_2$20, [createElementVNode("div", _hoisted_3$16, [renderSlot(_ctx.$slots, "content")])])]);
324
324
  };
325
325
  }
326
326
  };
327
327
  //#endregion
328
328
  //#region src/components/Badge.vue
329
- var _hoisted_1$33 = { class: "sr-only" };
330
- var _sfc_main$33 = {
329
+ var _hoisted_1$35 = { class: "sr-only" };
330
+ var _sfc_main$34 = {
331
331
  __name: "Badge",
332
332
  props: {
333
333
  type: {
@@ -431,7 +431,7 @@ var _sfc_main$33 = {
431
431
  return __props.type === "dot" ? (openBlock(), createElementBlock("span", {
432
432
  key: 0,
433
433
  class: normalizeClass(["inline-flex items-center justify-center w-6 h-6 rounded-full", colorClasses[__props.color].bg])
434
- }, [createElementVNode("span", { class: normalizeClass(["w-2 h-2 rounded-full", colorClasses[__props.color].dot]) }, null, 2), createElementVNode("span", _hoisted_1$33, [renderSlot(_ctx.$slots, "default")])], 2)) : (openBlock(), createElementBlock("span", {
434
+ }, [createElementVNode("span", { class: normalizeClass(["w-2 h-2 rounded-full", colorClasses[__props.color].dot]) }, null, 2), createElementVNode("span", _hoisted_1$35, [renderSlot(_ctx.$slots, "default")])], 2)) : (openBlock(), createElementBlock("span", {
435
435
  key: 1,
436
436
  class: normalizeClass(["inline-flex items-center font-medium", [
437
437
  colorClasses[__props.color].bg,
@@ -445,8 +445,8 @@ var _sfc_main$33 = {
445
445
  };
446
446
  //#endregion
447
447
  //#region src/components/Button.vue
448
- var _hoisted_1$32 = ["type", "disabled"];
449
- var _sfc_main$32 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
448
+ var _hoisted_1$34 = ["type", "disabled"];
449
+ var _sfc_main$33 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
450
450
  __name: "Button",
451
451
  props: {
452
452
  type: {
@@ -509,14 +509,14 @@ var _sfc_main$32 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
509
509
  type: __props.type,
510
510
  disabled: __props.disabled,
511
511
  class: buttonClasses.value
512
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$32);
512
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$34);
513
513
  };
514
514
  }
515
515
  });
516
516
  //#endregion
517
517
  //#region src/components/Checkbox.vue
518
- var _hoisted_1$31 = ["value"];
519
- var _sfc_main$31 = {
518
+ var _hoisted_1$33 = ["value"];
519
+ var _sfc_main$32 = {
520
520
  __name: "Checkbox",
521
521
  props: {
522
522
  checked: {
@@ -546,18 +546,18 @@ var _sfc_main$31 = {
546
546
  type: "checkbox",
547
547
  value: __props.value,
548
548
  class: "rounded border-neutral-300 text-neutral-900 shadow-sm focus:ring-neutral-900 dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-100 dark:focus:ring-neutral-100"
549
- }, null, 8, _hoisted_1$31)), [[vModelCheckbox, proxyChecked.value]]);
549
+ }, null, 8, _hoisted_1$33)), [[vModelCheckbox, proxyChecked.value]]);
550
550
  };
551
551
  }
552
552
  };
553
553
  //#endregion
554
554
  //#region src/components/CheckboxInput.vue
555
- var _hoisted_1$30 = [
555
+ var _hoisted_1$32 = [
556
556
  "name",
557
557
  "checked",
558
558
  "disabled"
559
559
  ];
560
- var _sfc_main$30 = {
560
+ var _sfc_main$31 = {
561
561
  __name: "CheckboxInput",
562
562
  props: {
563
563
  modelValue: {
@@ -637,7 +637,7 @@ var _sfc_main$30 = {
637
637
  onChange,
638
638
  onFocus: handleFocus,
639
639
  onBlur: handleBlur
640
- }, null, 40, _hoisted_1$30),
640
+ }, null, 40, _hoisted_1$32),
641
641
  createElementVNode("span", { class: normalizeClass([
642
642
  "inline-flex h-4 w-4 items-center justify-center border text-[10px] font-bold leading-none",
643
643
  props.ui.control,
@@ -651,20 +651,20 @@ var _sfc_main$30 = {
651
651
  };
652
652
  //#endregion
653
653
  //#region src/components/TextInput.vue
654
- var _hoisted_1$29 = [
654
+ var _hoisted_1$31 = [
655
655
  "type",
656
656
  "value",
657
657
  "disabled"
658
658
  ];
659
- var _hoisted_2$17 = ["aria-label"];
660
- var _hoisted_3$13 = {
659
+ var _hoisted_2$19 = ["aria-label"];
660
+ var _hoisted_3$15 = {
661
661
  key: 0,
662
662
  class: "h-5 w-5",
663
663
  fill: "none",
664
664
  stroke: "currentColor",
665
665
  viewBox: "0 0 24 24"
666
666
  };
667
- var _hoisted_4$10 = {
667
+ var _hoisted_4$11 = {
668
668
  key: 1,
669
669
  class: "h-5 w-5",
670
670
  fill: "none",
@@ -672,7 +672,7 @@ var _hoisted_4$10 = {
672
672
  viewBox: "0 0 24 24"
673
673
  };
674
674
  var DEFAULT_MAX_LENGTH$1 = 254;
675
- var _sfc_main$29 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
675
+ var _sfc_main$30 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
676
676
  __name: "TextInput",
677
677
  props: {
678
678
  modelValue: {
@@ -748,19 +748,19 @@ var _sfc_main$29 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
748
748
  onInput: _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event.target.value)),
749
749
  onBlur: _cache[1] || (_cache[1] = ($event) => emit("blur", $event)),
750
750
  onWheel: handleWheel
751
- }), null, 16, _hoisted_1$29),
751
+ }), null, 16, _hoisted_1$31),
752
752
  isPasswordField.value ? (openBlock(), createElementBlock("button", {
753
753
  key: 1,
754
754
  type: "button",
755
755
  class: normalizeClass(["absolute inset-y-0 right-0 flex items-center pr-3 text-neutral-400 transition-colors hover:text-neutral-700 focus:outline-none dark:text-neutral-200 dark:hover:text-neutral-50", props.ui.trailingAction]),
756
756
  "aria-label": revealed.value ? "Hide password" : "Show password",
757
757
  onClick: toggleVisibility
758
- }, [revealed.value ? (openBlock(), createElementBlock("svg", _hoisted_3$13, [..._cache[2] || (_cache[2] = [createElementVNode("path", {
758
+ }, [revealed.value ? (openBlock(), createElementBlock("svg", _hoisted_3$15, [..._cache[2] || (_cache[2] = [createElementVNode("path", {
759
759
  "stroke-linecap": "round",
760
760
  "stroke-linejoin": "round",
761
761
  "stroke-width": "2",
762
762
  d: "M13.875 18.825A10.05 10.05 0 0112 19c-5 0-9.27-3.11-11-7 1.01-2.27 2.78-4.1 5-5.32m3.08-1.3A9.96 9.96 0 0112 5c5 0 9.27 3.11 11 7a11.03 11.03 0 01-4.16 4.91M15 12a3 3 0 00-3-3m0 0a3 3 0 00-2.94 3.59M3 3l18 18"
763
- }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_4$10, [..._cache[3] || (_cache[3] = [createElementVNode("path", {
763
+ }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_4$11, [..._cache[3] || (_cache[3] = [createElementVNode("path", {
764
764
  "stroke-linecap": "round",
765
765
  "stroke-linejoin": "round",
766
766
  "stroke-width": "2",
@@ -770,16 +770,16 @@ var _sfc_main$29 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
770
770
  "stroke-linejoin": "round",
771
771
  "stroke-width": "2",
772
772
  d: "M2.458 12C3.732 7.943 7.523 5 12 5s8.268 2.943 9.542 7c-1.274 4.057-5.065 7-9.542 7S3.732 16.057 2.458 12z"
773
- }, null, -1)])]))], 10, _hoisted_2$17)) : createCommentVNode("", true)
773
+ }, null, -1)])]))], 10, _hoisted_2$19)) : createCommentVNode("", true)
774
774
  ], 2);
775
775
  };
776
776
  }
777
777
  });
778
778
  //#endregion
779
779
  //#region src/components/TextArea.vue
780
- var _hoisted_1$28 = ["value", "disabled"];
780
+ var _hoisted_1$30 = ["value", "disabled"];
781
781
  var DEFAULT_MAX_LENGTH = 1e3;
782
- var _sfc_main$28 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
782
+ var _sfc_main$29 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
783
783
  __name: "TextArea",
784
784
  props: {
785
785
  modelValue: String,
@@ -850,30 +850,30 @@ var _sfc_main$28 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
850
850
  value: props.modelValue,
851
851
  disabled: props.disabled,
852
852
  onInput: updateValue
853
- }), null, 16, _hoisted_1$28)], 2);
853
+ }), null, 16, _hoisted_1$30)], 2);
854
854
  };
855
855
  }
856
856
  });
857
857
  //#endregion
858
858
  //#region src/components/CustomSelect.vue
859
- var _hoisted_1$27 = { class: "flex h-5 shrink-0 items-center gap-1" };
860
- var _hoisted_2$16 = ["placeholder"];
861
- var _hoisted_3$12 = [
859
+ var _hoisted_1$29 = { class: "flex h-5 shrink-0 items-center gap-1" };
860
+ var _hoisted_2$18 = ["placeholder"];
861
+ var _hoisted_3$14 = [
862
862
  "data-option-value",
863
863
  "onClick",
864
864
  "onFocus",
865
865
  "onKeydown"
866
866
  ];
867
- var _hoisted_4$9 = {
867
+ var _hoisted_4$10 = {
868
868
  key: 0,
869
869
  class: "flex items-center gap-3"
870
870
  };
871
- var _hoisted_5$7 = [
871
+ var _hoisted_5$8 = [
872
872
  "checked",
873
873
  "disabled",
874
874
  "onChange"
875
875
  ];
876
- var _sfc_main$27 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
876
+ var _sfc_main$28 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
877
877
  __name: "CustomSelect",
878
878
  props: {
879
879
  modelValue: {
@@ -1603,7 +1603,7 @@ var _sfc_main$27 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
1603
1603
  class: normalizeClass(triggerValueClasses.value),
1604
1604
  style: normalizeStyle(darkTextStyle.value),
1605
1605
  onPointerdown: handleTriggerValuePointerDown
1606
- }, toDisplayString(displayText.value), 39), createElementVNode("div", _hoisted_1$27, [canClearSelection.value ? (openBlock(), createElementBlock("button", {
1606
+ }, toDisplayString(displayText.value), 39), createElementVNode("div", _hoisted_1$29, [canClearSelection.value ? (openBlock(), createElementBlock("button", {
1607
1607
  key: 0,
1608
1608
  type: "button",
1609
1609
  class: normalizeClass(clearButtonClasses.value),
@@ -1641,7 +1641,7 @@ var _sfc_main$27 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
1641
1641
  class: normalizeClass(searchInputClasses.value),
1642
1642
  onClick: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"])),
1643
1643
  onKeydown: _cache[3] || (_cache[3] = withModifiers(() => {}, ["stop"]))
1644
- }, null, 42, _hoisted_2$16)), [[vModelText, searchQuery.value]]) : createCommentVNode("", true),
1644
+ }, null, 42, _hoisted_2$18)), [[vModelText, searchQuery.value]]) : createCommentVNode("", true),
1645
1645
  selectedDeletedOption.value ? (openBlock(), createElementBlock("div", {
1646
1646
  key: 1,
1647
1647
  class: normalizeClass([
@@ -1665,7 +1665,7 @@ var _sfc_main$27 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
1665
1665
  onClick: withModifiers(($event) => __props.multiple ? toggleMultipleOption(option) : selectOption(option), ["stop"]),
1666
1666
  onFocus: ($event) => highlightedOptionValue.value = String(optionValue(option) ?? ""),
1667
1667
  onKeydown: ($event) => handleOptionKeydown($event, option)
1668
- }, [__props.multiple ? (openBlock(), createElementBlock("div", _hoisted_4$9, [createElementVNode("input", {
1668
+ }, [__props.multiple ? (openBlock(), createElementBlock("div", _hoisted_4$10, [createElementVNode("input", {
1669
1669
  type: "checkbox",
1670
1670
  class: normalizeClass(["h-4 w-4 rounded border-neutral-300 text-neutral-900 focus:ring-neutral-900", props.ui.optionControl]),
1671
1671
  checked: optionIsSelected(option),
@@ -1673,14 +1673,14 @@ var _sfc_main$27 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
1673
1673
  tabindex: "-1",
1674
1674
  onClick: _cache[4] || (_cache[4] = withModifiers(() => {}, ["stop"])),
1675
1675
  onChange: withModifiers(($event) => toggleMultipleOption(option), ["stop"])
1676
- }, null, 42, _hoisted_5$7), createElementVNode("span", {
1676
+ }, null, 42, _hoisted_5$8), createElementVNode("span", {
1677
1677
  class: "shrink-0 whitespace-nowrap",
1678
1678
  style: normalizeStyle(darkTextStyle.value)
1679
1679
  }, toDisplayString(optionText(option)), 5)])) : (openBlock(), createElementBlock("span", {
1680
1680
  key: 1,
1681
1681
  class: "whitespace-nowrap",
1682
1682
  style: normalizeStyle(darkTextStyle.value)
1683
- }, toDisplayString(optionText(option)), 5))], 42, _hoisted_3$12);
1683
+ }, toDisplayString(optionText(option)), 5))], 42, _hoisted_3$14);
1684
1684
  }), 128))
1685
1685
  ], 6)], 6)) : createCommentVNode("", true)]),
1686
1686
  _: 1
@@ -1690,7 +1690,7 @@ var _sfc_main$27 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
1690
1690
  });
1691
1691
  //#endregion
1692
1692
  //#region src/components/SelectInput.vue
1693
- var _sfc_main$26 = {
1693
+ var _sfc_main$27 = {
1694
1694
  __name: "SelectInput",
1695
1695
  props: {
1696
1696
  modelValue: {
@@ -1856,7 +1856,7 @@ var _sfc_main$26 = {
1856
1856
  setup(__props, { emit: __emit }) {
1857
1857
  const emit = __emit;
1858
1858
  return (_ctx, _cache) => {
1859
- return openBlock(), createBlock(_sfc_main$27, mergeProps({
1859
+ return openBlock(), createBlock(_sfc_main$28, mergeProps({
1860
1860
  "model-value": __props.modelValue,
1861
1861
  "model-modifiers": __props.modelModifiers,
1862
1862
  options: __props.options,
@@ -1919,7 +1919,7 @@ var _sfc_main$26 = {
1919
1919
  };
1920
1920
  //#endregion
1921
1921
  //#region src/components/DateInput.vue
1922
- var _hoisted_1$26 = [
1922
+ var _hoisted_1$28 = [
1923
1923
  "type",
1924
1924
  "lang",
1925
1925
  "max",
@@ -2014,22 +2014,22 @@ var DateInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
2014
2014
  disabled: props.disabled,
2015
2015
  onInput: handleDateInput,
2016
2016
  onChange: handleDateInput
2017
- }), null, 16, _hoisted_1$26);
2017
+ }), null, 16, _hoisted_1$28);
2018
2018
  };
2019
2019
  }
2020
2020
  }), [["__scopeId", "data-v-8a975d48"]]);
2021
2021
  //#endregion
2022
2022
  //#region src/components/DateRangeInput.vue
2023
- var _hoisted_1$25 = ["value", "disabled"];
2024
- var _hoisted_2$15 = { class: "grid grid-cols-7 gap-1" };
2025
- var _hoisted_3$11 = [
2023
+ var _hoisted_1$27 = ["value", "disabled"];
2024
+ var _hoisted_2$17 = { class: "grid grid-cols-7 gap-1" };
2025
+ var _hoisted_3$13 = [
2026
2026
  "disabled",
2027
2027
  "onClick",
2028
2028
  "onMouseenter"
2029
2029
  ];
2030
- var _hoisted_4$8 = { class: "flex items-center justify-between" };
2031
- var _hoisted_5$6 = { key: 0 };
2032
- var _hoisted_6$6 = { key: 1 };
2030
+ var _hoisted_4$9 = { class: "flex items-center justify-between" };
2031
+ var _hoisted_5$7 = { key: 0 };
2032
+ var _hoisted_6$7 = { key: 1 };
2033
2033
  var _hoisted_7$5 = { key: 2 };
2034
2034
  var DateRangeInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ Object.assign({ inheritAttrs: false }, {
2035
2035
  __name: "DateRangeInput",
@@ -2304,7 +2304,7 @@ var DateRangeInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
2304
2304
  value: displayText.value,
2305
2305
  disabled: props.disabled,
2306
2306
  onClick: toggleCalendar
2307
- }, null, 10, _hoisted_1$25),
2307
+ }, null, 10, _hoisted_1$27),
2308
2308
  isOpen.value ? (openBlock(), createElementBlock("div", {
2309
2309
  key: 1,
2310
2310
  ref_key: "calendarRef",
@@ -2351,7 +2351,7 @@ var DateRangeInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
2351
2351
  class: normalizeClass(["text-xs font-medium text-neutral-500 dark:text-neutral-400 text-center py-1", props.ui.weekday])
2352
2352
  }, toDisplayString(day), 3);
2353
2353
  }), 128))], 2),
2354
- createElementVNode("div", _hoisted_2$15, [(openBlock(true), createElementBlock(Fragment, null, renderList(calendarDays.value, (day) => {
2354
+ createElementVNode("div", _hoisted_2$17, [(openBlock(true), createElementBlock(Fragment, null, renderList(calendarDays.value, (day) => {
2355
2355
  return openBlock(), createElementBlock("div", {
2356
2356
  key: day.date.toISOString(),
2357
2357
  class: "relative"
@@ -2383,9 +2383,9 @@ var DateRangeInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
2383
2383
  onClick: ($event) => selectDate(day.date),
2384
2384
  onMouseenter: ($event) => handleDateHover(day.date),
2385
2385
  onMouseleave: handleDateLeave
2386
- }, toDisplayString(day.date.getDate()), 43, _hoisted_3$11)]);
2386
+ }, toDisplayString(day.date.getDate()), 43, _hoisted_3$13)]);
2387
2387
  }), 128))]),
2388
- createElementVNode("div", { class: normalizeClass(["mt-4 pt-4 border-t border-neutral-200 dark:border-neutral-800", props.ui.footer]) }, [createElementVNode("div", _hoisted_4$8, [createElementVNode("div", { class: normalizeClass(["text-xs text-neutral-500 dark:text-neutral-400", props.ui.footerText]) }, [startDate.value && endDate.value ? (openBlock(), createElementBlock("div", _hoisted_5$6, " Range: " + toDisplayString(daysBetween.value) + " days ", 1)) : startDate.value ? (openBlock(), createElementBlock("div", _hoisted_6$6, " Select end date ")) : (openBlock(), createElementBlock("div", _hoisted_7$5, " Select start date "))], 2), startDate.value || endDate.value ? (openBlock(), createElementBlock("button", {
2388
+ createElementVNode("div", { class: normalizeClass(["mt-4 pt-4 border-t border-neutral-200 dark:border-neutral-800", props.ui.footer]) }, [createElementVNode("div", _hoisted_4$9, [createElementVNode("div", { class: normalizeClass(["text-xs text-neutral-500 dark:text-neutral-400", props.ui.footerText]) }, [startDate.value && endDate.value ? (openBlock(), createElementBlock("div", _hoisted_5$7, " Range: " + toDisplayString(daysBetween.value) + " days ", 1)) : startDate.value ? (openBlock(), createElementBlock("div", _hoisted_6$7, " Select end date ")) : (openBlock(), createElementBlock("div", _hoisted_7$5, " Select start date "))], 2), startDate.value || endDate.value ? (openBlock(), createElementBlock("button", {
2389
2389
  key: 0,
2390
2390
  type: "button",
2391
2391
  class: normalizeClass(["text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 transition-colors", props.ui.clearButton]),
@@ -2398,10 +2398,10 @@ var DateRangeInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
2398
2398
  }), [["__scopeId", "data-v-0d27aeda"]]);
2399
2399
  //#endregion
2400
2400
  //#region src/components/ImageInput.vue
2401
- var _hoisted_1$24 = ["accept"];
2402
- var _hoisted_2$14 = { class: "flex items-center space-x-4" };
2403
- var _hoisted_3$10 = ["src"];
2404
- var _sfc_main$23 = {
2401
+ var _hoisted_1$26 = ["accept"];
2402
+ var _hoisted_2$16 = { class: "flex items-center space-x-4" };
2403
+ var _hoisted_3$12 = ["src"];
2404
+ var _sfc_main$24 = {
2405
2405
  __name: "ImageInput",
2406
2406
  props: {
2407
2407
  currentImageUrl: {
@@ -2442,21 +2442,21 @@ var _sfc_main$23 = {
2442
2442
  accept: __props.accept,
2443
2443
  class: ["block h-[48px] w-full cursor-pointer rounded-lg border border-neutral-200 bg-white py-[7px] pl-10 pr-4 text-sm text-neutral-700 align-middle shadow-sm transition-all duration-200 file:mr-3 file:h-[34px] file:align-middle file:rounded-md file:border-0 file:bg-neutral-900 file:px-4 file:py-0 file:text-sm file:font-medium file:leading-[34px] file:text-neutral-50 hover:file:bg-neutral-800 focus:border-neutral-900 focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-100 dark:file:bg-neutral-800 dark:file:text-neutral-50 dark:hover:file:bg-neutral-700 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10", props.ui.input],
2444
2444
  onChange: handleFileChange
2445
- }), null, 16, _hoisted_1$24)], 2), props.currentImageUrl ? (openBlock(), createElementBlock("div", {
2445
+ }), null, 16, _hoisted_1$26)], 2), props.currentImageUrl ? (openBlock(), createElementBlock("div", {
2446
2446
  key: 0,
2447
2447
  class: normalizeClass(["mt-4 rounded-lg border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-800 dark:bg-neutral-900/50", props.ui.previewCard])
2448
- }, [createElementVNode("div", _hoisted_2$14, [createElementVNode("img", {
2448
+ }, [createElementVNode("div", _hoisted_2$16, [createElementVNode("img", {
2449
2449
  src: props.currentImageUrl,
2450
2450
  alt: "Current logo",
2451
2451
  class: normalizeClass(["h-16 w-auto max-w-24 object-contain rounded-lg shadow-sm", props.ui.previewImage])
2452
- }, null, 10, _hoisted_3$10), createElementVNode("div", null, [createElementVNode("p", { class: normalizeClass(["text-sm font-medium text-neutral-900 dark:text-neutral-50", props.ui.previewTitle]) }, toDisplayString(props.currentLabel), 3), createElementVNode("p", { class: normalizeClass(["text-xs text-neutral-500 dark:text-neutral-200", props.ui.previewText]) }, toDisplayString(props.currentSubtext), 3)])])], 2)) : createCommentVNode("", true)], 2);
2452
+ }, null, 10, _hoisted_3$12), createElementVNode("div", null, [createElementVNode("p", { class: normalizeClass(["text-sm font-medium text-neutral-900 dark:text-neutral-50", props.ui.previewTitle]) }, toDisplayString(props.currentLabel), 3), createElementVNode("p", { class: normalizeClass(["text-xs text-neutral-500 dark:text-neutral-200", props.ui.previewText]) }, toDisplayString(props.currentSubtext), 3)])])], 2)) : createCommentVNode("", true)], 2);
2453
2453
  };
2454
2454
  }
2455
2455
  };
2456
2456
  //#endregion
2457
2457
  //#region src/components/NotationInput.vue
2458
- var _hoisted_1$23 = ["disabled", "onClick"];
2459
- var _sfc_main$22 = {
2458
+ var _hoisted_1$25 = ["disabled", "onClick"];
2459
+ var _sfc_main$23 = {
2460
2460
  __name: "NotationInput",
2461
2461
  props: {
2462
2462
  modelValue: {
@@ -2505,20 +2505,20 @@ var _sfc_main$22 = {
2505
2505
  ]),
2506
2506
  disabled: __props.disabled,
2507
2507
  onClick: ($event) => selectOption(option)
2508
- }, toDisplayString(option), 11, _hoisted_1$23);
2508
+ }, toDisplayString(option), 11, _hoisted_1$25);
2509
2509
  }), 128))], 2);
2510
2510
  };
2511
2511
  }
2512
2512
  };
2513
2513
  //#endregion
2514
2514
  //#region src/components/RadioInput.vue
2515
- var _hoisted_1$22 = [
2515
+ var _hoisted_1$24 = [
2516
2516
  "name",
2517
2517
  "value",
2518
2518
  "checked",
2519
2519
  "disabled"
2520
2520
  ];
2521
- var _sfc_main$21 = {
2521
+ var _sfc_main$22 = {
2522
2522
  __name: "RadioInput",
2523
2523
  props: {
2524
2524
  modelValue: {
@@ -2587,18 +2587,18 @@ var _sfc_main$21 = {
2587
2587
  onChange,
2588
2588
  onFocus: handleFocus,
2589
2589
  onBlur: handleBlur
2590
- }, null, 40, _hoisted_1$22), createElementVNode("span", { class: normalizeClass(props.ui.label) }, [createElementVNode("span", { class: normalizeClass(props.ui.indicator) }, toDisplayString(isChecked.value ? "✓" : "○"), 3), createTextVNode(" " + toDisplayString(__props.label), 1)], 2)], 2);
2590
+ }, null, 40, _hoisted_1$24), createElementVNode("span", { class: normalizeClass(props.ui.label) }, [createElementVNode("span", { class: normalizeClass(props.ui.indicator) }, toDisplayString(isChecked.value ? "✓" : "○"), 3), createTextVNode(" " + toDisplayString(__props.label), 1)], 2)], 2);
2591
2591
  };
2592
2592
  }
2593
2593
  };
2594
2594
  //#endregion
2595
2595
  //#region src/components/ToggleInput.vue
2596
- var _hoisted_1$21 = [
2596
+ var _hoisted_1$23 = [
2597
2597
  "name",
2598
2598
  "checked",
2599
2599
  "disabled"
2600
2600
  ];
2601
- var _sfc_main$20 = {
2601
+ var _sfc_main$21 = {
2602
2602
  __name: "ToggleInput",
2603
2603
  props: {
2604
2604
  modelValue: {
@@ -2677,7 +2677,7 @@ var _sfc_main$20 = {
2677
2677
  onChange,
2678
2678
  onFocus: handleFocus,
2679
2679
  onBlur: handleBlur
2680
- }, null, 40, _hoisted_1$21),
2680
+ }, null, 40, _hoisted_1$23),
2681
2681
  createElementVNode("span", {
2682
2682
  "aria-hidden": "true",
2683
2683
  class: normalizeClass([
@@ -2701,7 +2701,7 @@ var _sfc_main$20 = {
2701
2701
  };
2702
2702
  //#endregion
2703
2703
  //#region src/components/RadioMultipleInput.vue
2704
- var _sfc_main$19 = {
2704
+ var _sfc_main$20 = {
2705
2705
  __name: "RadioMultipleInput",
2706
2706
  props: {
2707
2707
  modelValue: {
@@ -2739,7 +2739,7 @@ var _sfc_main$19 = {
2739
2739
  const selectOption = (option) => emit("update:modelValue", option);
2740
2740
  return (_ctx, _cache) => {
2741
2741
  return openBlock(), createElementBlock("div", { class: normalizeClass(["flex flex-wrap gap-3", props.ui.group]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedOptions.value, (option) => {
2742
- return openBlock(), createBlock(_sfc_main$16, {
2742
+ return openBlock(), createBlock(_sfc_main$17, {
2743
2743
  key: `radio-${__props.name ?? "group"}-${option}`,
2744
2744
  type: "radio-input",
2745
2745
  "model-value": props.modelValue,
@@ -2763,7 +2763,7 @@ var _sfc_main$19 = {
2763
2763
  };
2764
2764
  //#endregion
2765
2765
  //#region src/components/TinyEditor.vue
2766
- var _sfc_main$18 = {
2766
+ var _sfc_main$19 = {
2767
2767
  __name: "TinyEditor",
2768
2768
  props: {
2769
2769
  modelValue: {
@@ -2840,18 +2840,18 @@ var _sfc_main$18 = {
2840
2840
  });
2841
2841
  };
2842
2842
  const loadTinyMce = async () => {
2843
- const tinymceModule = await import("./tinymce-_FcmnBzR.js").then((m) => /* @__PURE__ */ __toESM(m.default));
2843
+ const tinymceModule = await import("./tinymce-B_nz3bjz.js").then((m) => /* @__PURE__ */ __toESM(m.default));
2844
2844
  const tinymce = tinymceModule.default ?? tinymceModule;
2845
2845
  if (typeof globalThis !== "undefined" && !globalThis.tinymce) globalThis.tinymce = tinymce;
2846
2846
  await Promise.all([
2847
- import("./dom-CyNQy3FR.js"),
2848
- import("./default-BrvQoVVs.js"),
2849
- import("./silver-6SQnxErw.js"),
2850
- import("./code-Uq_sE9rw.js"),
2851
- import("./image-BPy4dcSt.js"),
2852
- import("./link-BNLldsh6.js"),
2853
- import("./lists-CCw-difh.js"),
2854
- import("./table-eUIcL87o.js")
2847
+ import("./dom-CFK7rsQj.js"),
2848
+ import("./default-CXSE-CfC.js"),
2849
+ import("./silver-Ck5Nmwm5.js"),
2850
+ import("./code-mFVfv-JF.js"),
2851
+ import("./image-BKHRC93C.js"),
2852
+ import("./link-6m9FnJyE.js"),
2853
+ import("./lists-Dm_2IIm_.js"),
2854
+ import("./table-BaMYTIbc.js")
2855
2855
  ]);
2856
2856
  isEditorReady.value = true;
2857
2857
  };
@@ -2962,17 +2962,17 @@ var _sfc_main$18 = {
2962
2962
  };
2963
2963
  //#endregion
2964
2964
  //#region src/components/ColorPicker.vue
2965
- var _hoisted_1$20 = [
2965
+ var _hoisted_1$22 = [
2966
2966
  "name",
2967
2967
  "value",
2968
2968
  "disabled",
2969
2969
  "required"
2970
2970
  ];
2971
- var _hoisted_2$13 = ["disabled", "aria-expanded"];
2972
- var _hoisted_3$9 = { class: "min-w-0 flex-1" };
2973
- var _hoisted_4$7 = { class: "flex items-start gap-3" };
2974
- var _hoisted_5$5 = { class: "min-w-0 flex-1" };
2975
- var _hoisted_6$5 = ["disabled", "aria-label"];
2971
+ var _hoisted_2$15 = ["disabled", "aria-expanded"];
2972
+ var _hoisted_3$11 = { class: "min-w-0 flex-1" };
2973
+ var _hoisted_4$8 = { class: "flex items-start gap-3" };
2974
+ var _hoisted_5$6 = { class: "min-w-0 flex-1" };
2975
+ var _hoisted_6$6 = ["disabled", "aria-label"];
2976
2976
  var _hoisted_7$4 = { class: "mt-4 space-y-4" };
2977
2977
  var _hoisted_8$2 = ["aria-label", "aria-valuenow"];
2978
2978
  var _hoisted_9$2 = {
@@ -2999,14 +2999,14 @@ var _hoisted_15$2 = {
2999
2999
  class: "space-y-2"
3000
3000
  };
3001
3001
  var _hoisted_16$2 = ["for"];
3002
- var _hoisted_17$1 = [
3002
+ var _hoisted_17$2 = [
3003
3003
  "id",
3004
3004
  "disabled",
3005
3005
  "value"
3006
3006
  ];
3007
- var _hoisted_18 = { class: "space-y-2" };
3008
- var _hoisted_19 = ["for"];
3009
- var _hoisted_20 = [
3007
+ var _hoisted_18$2 = { class: "space-y-2" };
3008
+ var _hoisted_19$1 = ["for"];
3009
+ var _hoisted_20$1 = [
3010
3010
  "id",
3011
3011
  "maxlength",
3012
3012
  "placeholder",
@@ -3472,7 +3472,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3472
3472
  value: emittedValue.value,
3473
3473
  disabled: props.disabled,
3474
3474
  required: hiddenInputRequired.value
3475
- }, null, 8, _hoisted_1$20)) : createCommentVNode("", true),
3475
+ }, null, 8, _hoisted_1$22)) : createCommentVNode("", true),
3476
3476
  createElementVNode("button", mergeProps({
3477
3477
  ref_key: "triggerRef",
3478
3478
  ref: triggerRef
@@ -3488,13 +3488,13 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3488
3488
  class: "absolute inset-0",
3489
3489
  style: normalizeStyle({ backgroundColor: swatchColor.value })
3490
3490
  }, null, 4)], 2),
3491
- createElementVNode("span", _hoisted_3$9, [createElementVNode("span", { class: normalizeClass(["block text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400", props.ui.sectionLabel]) }, toDisplayString(unref(t)("Color")), 3), createElementVNode("span", { class: normalizeClass(["block truncate font-mono text-sm text-neutral-900 dark:text-neutral-50", props.ui.value]) }, toDisplayString(emittedValue.value), 3)]),
3491
+ createElementVNode("span", _hoisted_3$11, [createElementVNode("span", { class: normalizeClass(["block text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400", props.ui.sectionLabel]) }, toDisplayString(unref(t)("Color")), 3), createElementVNode("span", { class: normalizeClass(["block truncate font-mono text-sm text-neutral-900 dark:text-neutral-50", props.ui.value]) }, toDisplayString(emittedValue.value), 3)]),
3492
3492
  createVNode(unref(ChevronDownIcon), { class: normalizeClass([
3493
3493
  "size-4 shrink-0 text-neutral-400 transition-transform dark:text-neutral-500",
3494
3494
  isOpen.value ? "rotate-180" : "",
3495
3495
  props.ui.chevron
3496
3496
  ]) }, null, 8, ["class"])
3497
- ], 16, _hoisted_2$13),
3497
+ ], 16, _hoisted_2$15),
3498
3498
  (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(Transition, {
3499
3499
  "enter-active-class": "transition duration-150 ease-out",
3500
3500
  "enter-from-class": "opacity-0 translate-y-1",
@@ -3509,12 +3509,12 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3509
3509
  ref: panelRef,
3510
3510
  class: normalizeClass(["z-50", props.ui.panelRoot]),
3511
3511
  style: normalizeStyle(panelStyle.value)
3512
- }, [createElementVNode("div", { class: normalizeClass(["rounded-2xl border border-neutral-200 bg-white/96 p-4 shadow-2xl shadow-neutral-950/12 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/96 dark:shadow-black/30", props.ui.panel]) }, [createElementVNode("div", _hoisted_4$7, [
3512
+ }, [createElementVNode("div", { class: normalizeClass(["rounded-2xl border border-neutral-200 bg-white/96 p-4 shadow-2xl shadow-neutral-950/12 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/96 dark:shadow-black/30", props.ui.panel]) }, [createElementVNode("div", _hoisted_4$8, [
3513
3513
  createElementVNode("div", { class: normalizeClass(["color-picker-checker relative size-14 shrink-0 overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700", props.ui.previewSwatch]) }, [createElementVNode("span", {
3514
3514
  class: "absolute inset-0",
3515
3515
  style: normalizeStyle({ backgroundColor: swatchColor.value })
3516
3516
  }, null, 4)], 2),
3517
- createElementVNode("div", _hoisted_5$5, [createElementVNode("p", { class: normalizeClass(["text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400", props.ui.sectionLabel]) }, toDisplayString(unref(t)("Selected color")), 3), createElementVNode("p", { class: normalizeClass(["truncate font-mono text-base text-neutral-900 dark:text-neutral-50", props.ui.value]) }, toDisplayString(emittedValue.value), 3)]),
3517
+ createElementVNode("div", _hoisted_5$6, [createElementVNode("p", { class: normalizeClass(["text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400", props.ui.sectionLabel]) }, toDisplayString(unref(t)("Selected color")), 3), createElementVNode("p", { class: normalizeClass(["truncate font-mono text-base text-neutral-900 dark:text-neutral-50", props.ui.value]) }, toDisplayString(emittedValue.value), 3)]),
3518
3518
  supportsEyeDropper.value ? (openBlock(), createElementBlock("button", {
3519
3519
  key: 0,
3520
3520
  type: "button",
@@ -3526,7 +3526,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3526
3526
  disabled: props.disabled,
3527
3527
  "aria-label": unref(t)("Pick color from screen"),
3528
3528
  onClick: pickFromScreen
3529
- }, [createVNode(unref(EyeDropperIcon), { class: "size-5" })], 10, _hoisted_6$5)) : createCommentVNode("", true)
3529
+ }, [createVNode(unref(EyeDropperIcon), { class: "size-5" })], 10, _hoisted_6$6)) : createCommentVNode("", true)
3530
3530
  ]), createElementVNode("div", _hoisted_7$4, [
3531
3531
  createElementVNode("div", {
3532
3532
  ref_key: "saturationRef",
@@ -3571,11 +3571,11 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3571
3571
  value: opacityPercent.value,
3572
3572
  style: normalizeStyle({ background: alphaGradient.value }),
3573
3573
  onInput: handleAlphaInput
3574
- }, null, 46, _hoisted_17$1)])) : createCommentVNode("", true)]),
3575
- createElementVNode("div", _hoisted_18, [createElementVNode("label", {
3574
+ }, null, 46, _hoisted_17$2)])) : createCommentVNode("", true)]),
3575
+ createElementVNode("div", _hoisted_18$2, [createElementVNode("label", {
3576
3576
  for: fieldId.value ? `${fieldId.value}-hex` : void 0,
3577
3577
  class: normalizeClass(["text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400", props.ui.sectionLabel])
3578
- }, toDisplayString(unref(t)("Hex value")), 11, _hoisted_19), createElementVNode("input", {
3578
+ }, toDisplayString(unref(t)("Hex value")), 11, _hoisted_19$1), createElementVNode("input", {
3579
3579
  id: fieldId.value ? `${fieldId.value}-hex` : void 0,
3580
3580
  ref_key: "hexInputRef",
3581
3581
  ref: hexInputRef,
@@ -3590,7 +3590,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3590
3590
  disabled: props.disabled,
3591
3591
  onInput: handleHexInput,
3592
3592
  onBlur: handleHexBlur
3593
- }, null, 42, _hoisted_20)])
3593
+ }, null, 42, _hoisted_20$1)])
3594
3594
  ])], 2)], 6)) : createCommentVNode("", true)]),
3595
3595
  _: 1
3596
3596
  })]))
@@ -3600,8 +3600,8 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3600
3600
  }), [["__scopeId", "data-v-ce146146"]]);
3601
3601
  //#endregion
3602
3602
  //#region src/components/InputGroup.vue
3603
- var _hoisted_1$19 = ["for"];
3604
- var _hoisted_2$12 = {
3603
+ var _hoisted_1$21 = ["for"];
3604
+ var _hoisted_2$14 = {
3605
3605
  key: 3,
3606
3606
  class: "relative"
3607
3607
  };
@@ -3610,7 +3610,7 @@ var defaultLabelClass = "mb-1 block text-base font-semibold text-gray-900 dark:t
3610
3610
  var defaultHelperTextClass = "mb-1 block text-xs text-gray-500";
3611
3611
  var defaultErrorClass = "mt-2 flex items-center text-sm text-red-600";
3612
3612
  var defaultErrorIconClass = "mr-1 h-4 w-4 flex-shrink-0";
3613
- var _sfc_main$16 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
3613
+ var _sfc_main$17 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
3614
3614
  __name: "InputGroup",
3615
3615
  props: {
3616
3616
  type: {
@@ -4146,20 +4146,20 @@ var _sfc_main$16 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
4146
4146
  ui: props.ui
4147
4147
  }));
4148
4148
  const resolvedFieldComponent = computed(() => {
4149
- if (isTextareaType.value) return _sfc_main$28;
4150
- if (isTinyEditorType.value) return _sfc_main$18;
4149
+ if (isTextareaType.value) return _sfc_main$29;
4150
+ if (isTinyEditorType.value) return _sfc_main$19;
4151
4151
  if (isColorPickerType.value) return ColorPicker_default;
4152
- if (isSelectType.value) return _sfc_main$26;
4152
+ if (isSelectType.value) return _sfc_main$27;
4153
4153
  if (isDateType.value) return DateInput_default;
4154
4154
  if (isDateRangeType.value) return DateRangeInput_default;
4155
- if (isTextLikeType.value) return _sfc_main$29;
4156
- if (isImageType.value) return _sfc_main$23;
4157
- if (isCheckboxSingleType.value) return _sfc_main$30;
4158
- if (isRadioSingleType.value) return _sfc_main$21;
4159
- if (isToggleSingleType.value) return _sfc_main$20;
4160
- if (isNotationType.value) return _sfc_main$22;
4161
- if (isCheckboxType.value) return _sfc_main$15;
4162
- if (isRadioType.value) return _sfc_main$19;
4155
+ if (isTextLikeType.value) return _sfc_main$30;
4156
+ if (isImageType.value) return _sfc_main$24;
4157
+ if (isCheckboxSingleType.value) return _sfc_main$31;
4158
+ if (isRadioSingleType.value) return _sfc_main$22;
4159
+ if (isToggleSingleType.value) return _sfc_main$21;
4160
+ if (isNotationType.value) return _sfc_main$23;
4161
+ if (isCheckboxType.value) return _sfc_main$16;
4162
+ if (isRadioType.value) return _sfc_main$20;
4163
4163
  return null;
4164
4164
  });
4165
4165
  const resolvedFieldBindings = computed(() => {
@@ -4211,13 +4211,13 @@ var _sfc_main$16 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
4211
4211
  key: 0,
4212
4212
  for: fieldId.value,
4213
4213
  class: normalizeClass(props.labelClass ?? defaultLabelClass)
4214
- }, toDisplayString(__props.label), 11, _hoisted_1$19)) : createCommentVNode("", true)]) : createCommentVNode("", true),
4214
+ }, toDisplayString(__props.label), 11, _hoisted_1$21)) : createCommentVNode("", true)]) : createCommentVNode("", true),
4215
4215
  __props.helperText && !showsInlineChoiceControl.value ? renderSlot(_ctx.$slots, "helper", {
4216
4216
  key: 1,
4217
4217
  helperText: __props.helperText,
4218
4218
  helperTextClass: props.helperTextClass ?? defaultHelperTextClass
4219
4219
  }, () => [createElementVNode("span", { class: normalizeClass(props.helperTextClass ?? defaultHelperTextClass) }, toDisplayString(__props.helperText), 3)]) : createCommentVNode("", true),
4220
- resolvedFieldComponent.value && !showsLeadingIcon.value && !showsTrailingIcon.value ? (openBlock(), createBlock(resolveDynamicComponent(resolvedFieldComponent.value), mergeProps({ key: 2 }, resolvedFieldBindings.value, toHandlers(fieldListeners)), null, 16)) : resolvedFieldComponent.value ? (openBlock(), createElementBlock("div", _hoisted_2$12, [
4220
+ resolvedFieldComponent.value && !showsLeadingIcon.value && !showsTrailingIcon.value ? (openBlock(), createBlock(resolveDynamicComponent(resolvedFieldComponent.value), mergeProps({ key: 2 }, resolvedFieldBindings.value, toHandlers(fieldListeners)), null, 16)) : resolvedFieldComponent.value ? (openBlock(), createElementBlock("div", _hoisted_2$14, [
4221
4221
  showsLeadingIcon.value ? (openBlock(), createElementBlock("div", {
4222
4222
  key: 0,
4223
4223
  class: normalizeClass(["pointer-events-none absolute inset-y-0 left-0 z-10 flex items-center pl-3 text-neutral-400 dark:text-neutral-200", props.leadingIconClass])
@@ -4259,7 +4259,7 @@ var _sfc_main$16 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
4259
4259
  });
4260
4260
  //#endregion
4261
4261
  //#region src/components/CheckboxMultipleInput.vue
4262
- var _sfc_main$15 = {
4262
+ var _sfc_main$16 = {
4263
4263
  __name: "CheckboxMultipleInput",
4264
4264
  props: {
4265
4265
  modelValue: {
@@ -4302,7 +4302,7 @@ var _sfc_main$15 = {
4302
4302
  };
4303
4303
  return (_ctx, _cache) => {
4304
4304
  return openBlock(), createElementBlock("div", { class: normalizeClass(["flex flex-wrap gap-3", props.ui.group]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedOptions.value, (option) => {
4305
- return openBlock(), createBlock(_sfc_main$16, {
4305
+ return openBlock(), createBlock(_sfc_main$17, {
4306
4306
  key: `checkbox-${option}`,
4307
4307
  type: "checkbox-input",
4308
4308
  name: __props.name,
@@ -4327,7 +4327,7 @@ var _sfc_main$15 = {
4327
4327
  };
4328
4328
  //#endregion
4329
4329
  //#region src/components/Modal.vue
4330
- var _sfc_main$14 = {
4330
+ var _sfc_main$15 = {
4331
4331
  __name: "Modal",
4332
4332
  props: {
4333
4333
  show: {
@@ -4455,14 +4455,14 @@ var _sfc_main$14 = {
4455
4455
  };
4456
4456
  //#endregion
4457
4457
  //#region src/components/ConfirmationModal.vue
4458
- var _hoisted_1$18 = { class: "bg-white px-4 pb-4 pt-5 dark:bg-neutral-950 sm:p-6 sm:pb-4" };
4459
- var _hoisted_2$11 = { class: "sm:flex sm:items-start" };
4460
- var _hoisted_3$8 = { class: "mx-auto flex size-12 shrink-0 items-center justify-center rounded-full bg-red-100 dark:bg-red-950/60 sm:mx-0 sm:size-10" };
4461
- var _hoisted_4$6 = { class: "mt-3 text-center sm:mt-0 sm:ms-4 sm:text-start" };
4462
- var _hoisted_5$4 = { class: "text-lg font-medium text-neutral-950 dark:text-neutral-50" };
4463
- var _hoisted_6$4 = { class: "mt-4 text-sm text-neutral-600 dark:text-neutral-200" };
4458
+ var _hoisted_1$20 = { class: "bg-white px-4 pb-4 pt-5 dark:bg-neutral-950 sm:p-6 sm:pb-4" };
4459
+ var _hoisted_2$13 = { class: "sm:flex sm:items-start" };
4460
+ var _hoisted_3$10 = { class: "mx-auto flex size-12 shrink-0 items-center justify-center rounded-full bg-red-100 dark:bg-red-950/60 sm:mx-0 sm:size-10" };
4461
+ var _hoisted_4$7 = { class: "mt-3 text-center sm:mt-0 sm:ms-4 sm:text-start" };
4462
+ var _hoisted_5$5 = { class: "text-lg font-medium text-neutral-950 dark:text-neutral-50" };
4463
+ var _hoisted_6$5 = { class: "mt-4 text-sm text-neutral-600 dark:text-neutral-200" };
4464
4464
  var _hoisted_7$3 = { class: "flex flex-col-reverse gap-4 border-t border-neutral-200 bg-neutral-50 px-6 py-4 text-end dark:border-neutral-800 dark:bg-neutral-900/60 lg:flex-row lg:justify-end lg:gap-0" };
4465
- var _sfc_main$13 = {
4465
+ var _sfc_main$14 = {
4466
4466
  __name: "ConfirmationModal",
4467
4467
  props: {
4468
4468
  show: {
@@ -4494,14 +4494,14 @@ var _sfc_main$13 = {
4494
4494
  emit("close");
4495
4495
  };
4496
4496
  return (_ctx, _cache) => {
4497
- return openBlock(), createBlock(_sfc_main$14, {
4497
+ return openBlock(), createBlock(_sfc_main$15, {
4498
4498
  show: __props.show,
4499
4499
  "max-width": __props.maxWidth,
4500
4500
  closeable: __props.closeable,
4501
4501
  position: __props.position,
4502
4502
  onClose: close
4503
4503
  }, {
4504
- default: withCtx(() => [createElementVNode("div", _hoisted_1$18, [createElementVNode("div", _hoisted_2$11, [createElementVNode("div", _hoisted_3$8, [createVNode(unref(ExclamationTriangleIcon), { class: "size-6 text-red-600 dark:text-neutral-100" })]), createElementVNode("div", _hoisted_4$6, [createElementVNode("h3", _hoisted_5$4, [renderSlot(_ctx.$slots, "title")]), createElementVNode("div", _hoisted_6$4, [renderSlot(_ctx.$slots, "content")])])])]), createElementVNode("div", _hoisted_7$3, [renderSlot(_ctx.$slots, "footer")])]),
4504
+ default: withCtx(() => [createElementVNode("div", _hoisted_1$20, [createElementVNode("div", _hoisted_2$13, [createElementVNode("div", _hoisted_3$10, [createVNode(unref(ExclamationTriangleIcon), { class: "size-6 text-red-600 dark:text-neutral-100" })]), createElementVNode("div", _hoisted_4$7, [createElementVNode("h3", _hoisted_5$5, [renderSlot(_ctx.$slots, "title")]), createElementVNode("div", _hoisted_6$5, [renderSlot(_ctx.$slots, "content")])])])]), createElementVNode("div", _hoisted_7$3, [renderSlot(_ctx.$slots, "footer")])]),
4505
4505
  _: 3
4506
4506
  }, 8, [
4507
4507
  "show",
@@ -4514,11 +4514,11 @@ var _sfc_main$13 = {
4514
4514
  };
4515
4515
  //#endregion
4516
4516
  //#region src/components/DialogModal.vue
4517
- var _hoisted_1$17 = { class: "px-6 py-4" };
4518
- var _hoisted_2$10 = { class: "text-lg font-medium text-neutral-950 dark:text-neutral-50" };
4519
- var _hoisted_3$7 = { class: "mt-4 text-sm text-neutral-600 dark:text-neutral-200" };
4520
- var _hoisted_4$5 = { class: "flex flex-row justify-end border-t border-neutral-200 bg-neutral-50 px-6 py-4 text-end dark:border-neutral-800 dark:bg-neutral-900/60" };
4521
- var _sfc_main$12 = {
4517
+ var _hoisted_1$19 = { class: "px-6 py-4" };
4518
+ var _hoisted_2$12 = { class: "text-lg font-medium text-neutral-950 dark:text-neutral-50" };
4519
+ var _hoisted_3$9 = { class: "mt-4 text-sm text-neutral-600 dark:text-neutral-200" };
4520
+ var _hoisted_4$6 = { class: "flex flex-row justify-end border-t border-neutral-200 bg-neutral-50 px-6 py-4 text-end dark:border-neutral-800 dark:bg-neutral-900/60" };
4521
+ var _sfc_main$13 = {
4522
4522
  __name: "DialogModal",
4523
4523
  props: {
4524
4524
  show: {
@@ -4541,13 +4541,13 @@ var _sfc_main$12 = {
4541
4541
  emit("close");
4542
4542
  };
4543
4543
  return (_ctx, _cache) => {
4544
- return openBlock(), createBlock(_sfc_main$14, {
4544
+ return openBlock(), createBlock(_sfc_main$15, {
4545
4545
  show: __props.show,
4546
4546
  "max-width": __props.maxWidth,
4547
4547
  closeable: __props.closeable,
4548
4548
  onClose: close
4549
4549
  }, {
4550
- default: withCtx(() => [createElementVNode("div", _hoisted_1$17, [createElementVNode("div", _hoisted_2$10, [renderSlot(_ctx.$slots, "title")]), createElementVNode("div", _hoisted_3$7, [renderSlot(_ctx.$slots, "content")])]), createElementVNode("div", _hoisted_4$5, [renderSlot(_ctx.$slots, "footer")])]),
4550
+ default: withCtx(() => [createElementVNode("div", _hoisted_1$19, [createElementVNode("div", _hoisted_2$12, [renderSlot(_ctx.$slots, "title")]), createElementVNode("div", _hoisted_3$9, [renderSlot(_ctx.$slots, "content")])]), createElementVNode("div", _hoisted_4$6, [renderSlot(_ctx.$slots, "footer")])]),
4551
4551
  _: 3
4552
4552
  }, 8, [
4553
4553
  "show",
@@ -4559,8 +4559,8 @@ var _sfc_main$12 = {
4559
4559
  };
4560
4560
  //#endregion
4561
4561
  //#region src/components/Dropdown.vue
4562
- var _hoisted_1$16 = { class: "relative inline-block w-fit" };
4563
- var _sfc_main$11 = {
4562
+ var _hoisted_1$18 = { class: "relative inline-block w-fit" };
4563
+ var _sfc_main$12 = {
4564
4564
  __name: "Dropdown",
4565
4565
  props: {
4566
4566
  align: {
@@ -4679,7 +4679,7 @@ var _sfc_main$11 = {
4679
4679
  window.removeEventListener("scroll", handleViewportChange, true);
4680
4680
  });
4681
4681
  return (_ctx, _cache) => {
4682
- return openBlock(), createElementBlock("div", _hoisted_1$16, [createElementVNode("div", {
4682
+ return openBlock(), createElementBlock("div", _hoisted_1$18, [createElementVNode("div", {
4683
4683
  ref_key: "triggerRef",
4684
4684
  ref: triggerRef,
4685
4685
  onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)
@@ -4706,13 +4706,13 @@ var _sfc_main$11 = {
4706
4706
  };
4707
4707
  //#endregion
4708
4708
  //#region src/components/DropdownLink.vue
4709
- var _hoisted_1$15 = {
4709
+ var _hoisted_1$17 = {
4710
4710
  key: 0,
4711
4711
  type: "submit",
4712
4712
  class: "block w-full px-4 py-2 text-start text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900"
4713
4713
  };
4714
- var _hoisted_2$9 = ["href"];
4715
- var _sfc_main$10 = {
4714
+ var _hoisted_2$11 = ["href"];
4715
+ var _sfc_main$11 = {
4716
4716
  __name: "DropdownLink",
4717
4717
  props: {
4718
4718
  href: String,
@@ -4720,11 +4720,11 @@ var _sfc_main$10 = {
4720
4720
  },
4721
4721
  setup(__props) {
4722
4722
  return (_ctx, _cache) => {
4723
- return openBlock(), createElementBlock("div", null, [__props.as == "button" ? (openBlock(), createElementBlock("button", _hoisted_1$15, [renderSlot(_ctx.$slots, "default")])) : __props.as == "a" ? (openBlock(), createElementBlock("a", {
4723
+ return openBlock(), createElementBlock("div", null, [__props.as == "button" ? (openBlock(), createElementBlock("button", _hoisted_1$17, [renderSlot(_ctx.$slots, "default")])) : __props.as == "a" ? (openBlock(), createElementBlock("a", {
4724
4724
  key: 1,
4725
4725
  href: __props.href,
4726
4726
  class: "block px-4 py-2 text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900"
4727
- }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_2$9)) : (openBlock(), createBlock(unref(Link), {
4727
+ }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_2$11)) : (openBlock(), createBlock(unref(Link), {
4728
4728
  key: 2,
4729
4729
  href: __props.href,
4730
4730
  class: "block px-4 py-2 text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900"
@@ -4736,63 +4736,146 @@ var _sfc_main$10 = {
4736
4736
  }
4737
4737
  };
4738
4738
  //#endregion
4739
+ //#region src/components/FloatingActionHint.vue?vue&type=script&setup=true&lang.ts
4740
+ var _hoisted_1$16 = ["id"];
4741
+ var _hoisted_2$10 = { class: "block font-semibold" };
4742
+ var _hoisted_3$8 = { class: "block" };
4743
+ var viewportGap = 8;
4744
+ var triggerGap = 8;
4745
+ //#endregion
4746
+ //#region src/components/FloatingActionHint.vue
4747
+ var FloatingActionHint_default = /* @__PURE__ */ defineComponent({
4748
+ __name: "FloatingActionHint",
4749
+ props: {
4750
+ id: {},
4751
+ label: {},
4752
+ description: {}
4753
+ },
4754
+ setup(__props) {
4755
+ const props = __props;
4756
+ const trigger = ref(null);
4757
+ const hint = ref(null);
4758
+ const isOpen = ref(false);
4759
+ const isPositioned = ref(false);
4760
+ const position = ref({
4761
+ left: 0,
4762
+ top: 0
4763
+ });
4764
+ const updatePosition = () => {
4765
+ if (typeof window === "undefined" || !trigger.value || !hint.value) return;
4766
+ const triggerBounds = trigger.value.getBoundingClientRect();
4767
+ const hintBounds = hint.value.getBoundingClientRect();
4768
+ const roomBelow = window.innerHeight - triggerBounds.bottom;
4769
+ const top = roomBelow >= hintBounds.height + triggerGap + viewportGap || roomBelow >= triggerBounds.top ? triggerBounds.bottom + triggerGap : triggerBounds.top - hintBounds.height - triggerGap;
4770
+ position.value = {
4771
+ left: Math.max(viewportGap, Math.min(triggerBounds.left + triggerBounds.width / 2 - hintBounds.width / 2, window.innerWidth - hintBounds.width - viewportGap)),
4772
+ top: Math.max(viewportGap, Math.min(top, window.innerHeight - hintBounds.height - viewportGap))
4773
+ };
4774
+ isPositioned.value = true;
4775
+ };
4776
+ const close = () => {
4777
+ isOpen.value = false;
4778
+ isPositioned.value = false;
4779
+ if (typeof window === "undefined") return;
4780
+ window.removeEventListener("resize", updatePosition);
4781
+ window.removeEventListener("scroll", updatePosition, true);
4782
+ };
4783
+ const open = async () => {
4784
+ if (typeof window === "undefined" || isOpen.value) return;
4785
+ isOpen.value = true;
4786
+ await nextTick();
4787
+ if (!isOpen.value) return;
4788
+ updatePosition();
4789
+ window.addEventListener("resize", updatePosition);
4790
+ window.addEventListener("scroll", updatePosition, true);
4791
+ };
4792
+ const closeOnFocusOut = (event) => {
4793
+ if (!trigger.value?.contains(event.relatedTarget)) close();
4794
+ };
4795
+ onBeforeUnmount(close);
4796
+ return (_ctx, _cache) => {
4797
+ return openBlock(), createElementBlock("span", {
4798
+ ref_key: "trigger",
4799
+ ref: trigger,
4800
+ class: "inline-flex shrink-0",
4801
+ onPointerenter: open,
4802
+ onPointerleave: close,
4803
+ onFocusin: open,
4804
+ onFocusout: closeOnFocusOut,
4805
+ onKeydown: withKeys(close, ["esc"])
4806
+ }, [renderSlot(_ctx.$slots, "default", { descriptionId: props.id }), (openBlock(), createBlock(Teleport, { to: "body" }, [isOpen.value ? (openBlock(), createElementBlock("div", {
4807
+ key: 0,
4808
+ id: props.id,
4809
+ ref_key: "hint",
4810
+ ref: hint,
4811
+ role: "tooltip",
4812
+ class: normalizeClass(["pointer-events-none fixed z-[100] w-max max-w-[min(20rem,calc(100vw-1rem))] rounded-lg bg-neutral-900 px-3 py-2 text-left text-xs leading-5 text-white shadow-lg dark:bg-neutral-100 dark:text-neutral-950", { invisible: !isPositioned.value }]),
4813
+ style: normalizeStyle({
4814
+ left: `${position.value.left}px`,
4815
+ top: `${position.value.top}px`
4816
+ })
4817
+ }, [createElementVNode("span", _hoisted_2$10, toDisplayString(props.label), 1), createElementVNode("span", _hoisted_3$8, toDisplayString(props.description), 1)], 14, _hoisted_1$16)) : createCommentVNode("", true)]))], 544);
4818
+ };
4819
+ }
4820
+ });
4821
+ //#endregion
4739
4822
  //#region src/components/FormSection.vue
4740
- var _hoisted_1$14 = { class: "md:grid md:grid-cols-3 md:gap-6" };
4741
- var _hoisted_2$8 = { class: "mt-5 md:col-span-2 md:mt-0" };
4742
- var _hoisted_3$6 = { class: "grid grid-cols-6 gap-6" };
4743
- var _hoisted_4$4 = {
4823
+ var _hoisted_1$15 = { class: "md:grid md:grid-cols-3 md:gap-6" };
4824
+ var _hoisted_2$9 = { class: "mt-5 md:col-span-2 md:mt-0" };
4825
+ var _hoisted_3$7 = { class: "grid grid-cols-6 gap-6" };
4826
+ var _hoisted_4$5 = {
4744
4827
  key: 0,
4745
4828
  class: "flex items-center justify-start rounded-b-lg border border-t-0 border-neutral-200 bg-neutral-50 px-3 pb-6 text-end dark:border-neutral-800 dark:bg-neutral-900/60 sm:rounded-bl-md sm:rounded-br-md"
4746
4829
  };
4747
- var _sfc_main$9 = {
4830
+ var _sfc_main$10 = {
4748
4831
  __name: "FormSection",
4749
4832
  emits: ["submitted"],
4750
4833
  setup(__props) {
4751
4834
  const hasActions = computed(() => !!useSlots().actions);
4752
4835
  return (_ctx, _cache) => {
4753
- return openBlock(), createElementBlock("div", _hoisted_1$14, [createVNode(SectionTitle_default, null, {
4836
+ return openBlock(), createElementBlock("div", _hoisted_1$15, [createVNode(SectionTitle_default, null, {
4754
4837
  title: withCtx(() => [renderSlot(_ctx.$slots, "title")]),
4755
4838
  description: withCtx(() => [renderSlot(_ctx.$slots, "description")]),
4756
4839
  _: 3
4757
- }), createElementVNode("div", _hoisted_2$8, [createElementVNode("form", { onSubmit: _cache[0] || (_cache[0] = withModifiers(($event) => _ctx.$emit("submitted"), ["prevent"])) }, [createElementVNode("div", { class: normalizeClass(["rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6", hasActions.value ? "sm:rounded-tl-md sm:rounded-tr-md" : "sm:rounded-md"]) }, [createElementVNode("div", _hoisted_3$6, [renderSlot(_ctx.$slots, "form")])], 2), hasActions.value ? (openBlock(), createElementBlock("div", _hoisted_4$4, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true)], 32)])]);
4840
+ }), createElementVNode("div", _hoisted_2$9, [createElementVNode("form", { onSubmit: _cache[0] || (_cache[0] = withModifiers(($event) => _ctx.$emit("submitted"), ["prevent"])) }, [createElementVNode("div", { class: normalizeClass(["rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6", hasActions.value ? "sm:rounded-tl-md sm:rounded-tr-md" : "sm:rounded-md"]) }, [createElementVNode("div", _hoisted_3$7, [renderSlot(_ctx.$slots, "form")])], 2), hasActions.value ? (openBlock(), createElementBlock("div", _hoisted_4$5, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true)], 32)])]);
4758
4841
  };
4759
4842
  }
4760
4843
  };
4761
4844
  //#endregion
4762
4845
  //#region src/components/InputError.vue
4763
- var _hoisted_1$13 = { class: "text-sm text-red-600 dark:text-neutral-100" };
4764
- var _sfc_main$8 = {
4846
+ var _hoisted_1$14 = { class: "text-sm text-red-600 dark:text-neutral-100" };
4847
+ var _sfc_main$9 = {
4765
4848
  __name: "InputError",
4766
4849
  props: { message: String },
4767
4850
  setup(__props) {
4768
4851
  return (_ctx, _cache) => {
4769
- return withDirectives((openBlock(), createElementBlock("div", null, [createElementVNode("p", _hoisted_1$13, toDisplayString(__props.message), 1)], 512)), [[vShow, __props.message]]);
4852
+ return withDirectives((openBlock(), createElementBlock("div", null, [createElementVNode("p", _hoisted_1$14, toDisplayString(__props.message), 1)], 512)), [[vShow, __props.message]]);
4770
4853
  };
4771
4854
  }
4772
4855
  };
4773
4856
  //#endregion
4774
4857
  //#region src/components/InputLabel.vue
4775
- var _hoisted_1$12 = { class: "block text-sm font-medium text-neutral-700 dark:text-neutral-100" };
4776
- var _hoisted_2$7 = { key: 0 };
4777
- var _hoisted_3$5 = { key: 1 };
4778
- var _sfc_main$7 = {
4858
+ var _hoisted_1$13 = { class: "block text-sm font-medium text-neutral-700 dark:text-neutral-100" };
4859
+ var _hoisted_2$8 = { key: 0 };
4860
+ var _hoisted_3$6 = { key: 1 };
4861
+ var _sfc_main$8 = {
4779
4862
  __name: "InputLabel",
4780
4863
  props: { value: String },
4781
4864
  setup(__props) {
4782
4865
  return (_ctx, _cache) => {
4783
- return openBlock(), createElementBlock("label", _hoisted_1$12, [__props.value ? (openBlock(), createElementBlock("span", _hoisted_2$7, toDisplayString(__props.value), 1)) : (openBlock(), createElementBlock("span", _hoisted_3$5, [renderSlot(_ctx.$slots, "default")]))]);
4866
+ return openBlock(), createElementBlock("label", _hoisted_1$13, [__props.value ? (openBlock(), createElementBlock("span", _hoisted_2$8, toDisplayString(__props.value), 1)) : (openBlock(), createElementBlock("span", _hoisted_3$6, [renderSlot(_ctx.$slots, "default")]))]);
4784
4867
  };
4785
4868
  }
4786
4869
  };
4787
4870
  //#endregion
4788
4871
  //#region src/components/LinkButton.vue
4789
- var _hoisted_1$11 = [
4872
+ var _hoisted_1$12 = [
4790
4873
  "href",
4791
4874
  "title",
4792
4875
  "target",
4793
4876
  "rel"
4794
4877
  ];
4795
- var _sfc_main$6 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
4878
+ var _sfc_main$7 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
4796
4879
  __name: "LinkButton",
4797
4880
  props: {
4798
4881
  href: {
@@ -4859,19 +4942,19 @@ var _sfc_main$6 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
4859
4942
  target: __props.target,
4860
4943
  rel: __props.rel,
4861
4944
  class: linkClasses.value
4862
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$11));
4945
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$12));
4863
4946
  };
4864
4947
  }
4865
4948
  });
4866
4949
  //#endregion
4867
4950
  //#region src/components/SectionBorder.vue
4868
- var _hoisted_1$10 = { class: "hidden sm:block" };
4869
- var _hoisted_2$6 = { class: "py-8" };
4870
- var _sfc_main$5 = {
4951
+ var _hoisted_1$11 = { class: "hidden sm:block" };
4952
+ var _hoisted_2$7 = { class: "py-8" };
4953
+ var _sfc_main$6 = {
4871
4954
  __name: "SectionBorder",
4872
4955
  setup(__props) {
4873
4956
  return (_ctx, _cache) => {
4874
- return openBlock(), createElementBlock("div", _hoisted_1$10, [createElementVNode("div", _hoisted_2$6, [createVNode(_sfc_main$38)])]);
4957
+ return openBlock(), createElementBlock("div", _hoisted_1$11, [createElementVNode("div", _hoisted_2$7, [createVNode(_sfc_main$39)])]);
4875
4958
  };
4876
4959
  }
4877
4960
  };
@@ -4921,13 +5004,13 @@ function useSidebar() {
4921
5004
  }
4922
5005
  //#endregion
4923
5006
  //#region src/components/Sidebar.vue?vue&type=script&setup=true&lang.ts
4924
- var _hoisted_1$9 = [
5007
+ var _hoisted_1$10 = [
4925
5008
  "data-state",
4926
5009
  "data-collapsible",
4927
5010
  "data-variant",
4928
5011
  "data-side"
4929
5012
  ];
4930
- var _hoisted_2$5 = {
5013
+ var _hoisted_2$6 = {
4931
5014
  "data-sidebar": "sidebar",
4932
5015
  class: "bg-sidebar text-sidebar-foreground flex h-full w-full flex-col group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm"
4933
5016
  };
@@ -4978,7 +5061,7 @@ var Sidebar_default = /* @__PURE__ */ defineComponent({
4978
5061
  __props.side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
4979
5062
  __props.variant === "floating" || __props.variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
4980
5063
  props.class
4981
- ] }, _ctx.$attrs), [createElementVNode("div", _hoisted_2$5, [renderSlot(_ctx.$slots, "default")])], 16)], 8, _hoisted_1$9));
5064
+ ] }, _ctx.$attrs), [createElementVNode("div", _hoisted_2$6, [renderSlot(_ctx.$slots, "default")])], 16)], 8, _hoisted_1$10));
4982
5065
  };
4983
5066
  }
4984
5067
  });
@@ -5194,7 +5277,7 @@ var SidebarMenu_default = /* @__PURE__ */ defineComponent({
5194
5277
  });
5195
5278
  //#endregion
5196
5279
  //#region src/components/SidebarMenuButton.vue?vue&type=script&setup=true&lang.ts
5197
- var _hoisted_1$8 = [
5280
+ var _hoisted_1$9 = [
5198
5281
  "href",
5199
5282
  "target",
5200
5283
  "rel"
@@ -5280,7 +5363,7 @@ var SidebarMenuButton_default = /* @__PURE__ */ defineComponent({
5280
5363
  href: __props.href,
5281
5364
  target: __props.target,
5282
5365
  rel: __props.rel
5283
- }, sharedAttrs.value), [__props.icon ? (openBlock(), createBlock(resolveDynamicComponent(__props.icon), { key: 0 })) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.title), 1)])], 16, _hoisted_1$8)) : (openBlock(), createElementBlock("button", mergeProps({
5366
+ }, sharedAttrs.value), [__props.icon ? (openBlock(), createBlock(resolveDynamicComponent(__props.icon), { key: 0 })) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.title), 1)])], 16, _hoisted_1$9)) : (openBlock(), createElementBlock("button", mergeProps({
5284
5367
  key: 3,
5285
5368
  type: "button"
5286
5369
  }, sharedAttrs.value), [__props.icon ? (openBlock(), createBlock(resolveDynamicComponent(__props.icon), { key: 0 })) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.title), 1)])], 16));
@@ -5474,6 +5557,30 @@ var createLucideIcon = (iconName, iconNode) => (props, { slots, attrs }) => h(Ic
5474
5557
  * This source code is licensed under the ISC license.
5475
5558
  * See the LICENSE file in the root directory of this source tree.
5476
5559
  */
5560
+ var Columns3 = createLucideIcon("columns-3", [
5561
+ ["rect", {
5562
+ width: "18",
5563
+ height: "18",
5564
+ x: "3",
5565
+ y: "3",
5566
+ rx: "2",
5567
+ key: "afitv7"
5568
+ }],
5569
+ ["path", {
5570
+ d: "M9 3v18",
5571
+ key: "fh3hqa"
5572
+ }],
5573
+ ["path", {
5574
+ d: "M15 3v18",
5575
+ key: "14nvp0"
5576
+ }]
5577
+ ]);
5578
+ /**
5579
+ * @license @lucide/vue v1.7.0 - ISC
5580
+ *
5581
+ * This source code is licensed under the ISC license.
5582
+ * See the LICENSE file in the root directory of this source tree.
5583
+ */
5477
5584
  var GripVertical = createLucideIcon("grip-vertical", [
5478
5585
  ["circle", {
5479
5586
  cx: "9",
@@ -5590,7 +5697,7 @@ var SidebarTrigger_default = /* @__PURE__ */ defineComponent({
5590
5697
  const props = __props;
5591
5698
  const { state, toggleSidebar } = useSidebar();
5592
5699
  return (_ctx, _cache) => {
5593
- return openBlock(), createBlock(_sfc_main$32, {
5700
+ return openBlock(), createBlock(_sfc_main$33, {
5594
5701
  "data-sidebar": "trigger",
5595
5702
  "data-slot": "sidebar-trigger",
5596
5703
  variant: "ghost",
@@ -5722,7 +5829,7 @@ var unregisterSlidePanel = (id, lockBody) => {
5722
5829
  var isTopSlidePanel = (id) => stack[stack.length - 1] === id;
5723
5830
  //#endregion
5724
5831
  //#region src/components/SlidePanel.vue?vue&type=script&setup=true&lang.ts
5725
- var _hoisted_1$7 = ["aria-modal"];
5832
+ var _hoisted_1$8 = ["aria-modal"];
5726
5833
  //#endregion
5727
5834
  //#region src/components/SlidePanel.vue
5728
5835
  var SlidePanel_default = /* @__PURE__ */ defineComponent({
@@ -5953,7 +6060,7 @@ var SlidePanel_default = /* @__PURE__ */ defineComponent({
5953
6060
  "aria-modal": __props.backdrop ? "true" : void 0,
5954
6061
  tabindex: "-1",
5955
6062
  onAfterLeave: finishClose
5956
- }, [renderSlot(_ctx.$slots, "default")], 44, _hoisted_1$7)), [[vShow, visible.value]]) : createCommentVNode("", true)]),
6063
+ }, [renderSlot(_ctx.$slots, "default")], 44, _hoisted_1$8)), [[vShow, visible.value]]) : createCommentVNode("", true)]),
5957
6064
  _: 3
5958
6065
  }, 8, ["enter-from-class", "leave-to-class"])]);
5959
6066
  };
@@ -5961,14 +6068,14 @@ var SlidePanel_default = /* @__PURE__ */ defineComponent({
5961
6068
  });
5962
6069
  //#endregion
5963
6070
  //#region src/components/SortControls.vue
5964
- var _hoisted_1$6 = { class: "rounded-xl border border-neutral-200 bg-white/80 px-6 py-4 backdrop-blur-sm dark:border-neutral-800 dark:bg-neutral-950/80" };
5965
- var _hoisted_2$4 = { class: "flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center" };
5966
- var _hoisted_3$4 = { class: "flex items-center gap-3" };
5967
- var _hoisted_4$3 = { class: "text-sm font-medium text-neutral-700 dark:text-neutral-100" };
5968
- var _hoisted_5$3 = { class: "flex flex-wrap items-center gap-2" };
5969
- var _hoisted_6$3 = ["onClick"];
6071
+ var _hoisted_1$7 = { class: "rounded-xl border border-neutral-200 bg-white/80 px-6 py-4 backdrop-blur-sm dark:border-neutral-800 dark:bg-neutral-950/80" };
6072
+ var _hoisted_2$5 = { class: "flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center" };
6073
+ var _hoisted_3$5 = { class: "flex items-center gap-3" };
6074
+ var _hoisted_4$4 = { class: "text-sm font-medium text-neutral-700 dark:text-neutral-100" };
6075
+ var _hoisted_5$4 = { class: "flex flex-wrap items-center gap-2" };
6076
+ var _hoisted_6$4 = ["onClick"];
5970
6077
  var _hoisted_7$2 = { class: "text-xs text-neutral-500 dark:text-neutral-200" };
5971
- var _sfc_main$4 = {
6078
+ var _sfc_main$5 = {
5972
6079
  __name: "SortControls",
5973
6080
  props: {
5974
6081
  fields: {
@@ -6007,7 +6114,7 @@ var _sfc_main$4 = {
6007
6114
  emit("sort", fieldKey);
6008
6115
  };
6009
6116
  return (_ctx, _cache) => {
6010
- return openBlock(), createElementBlock("div", _hoisted_1$6, [createElementVNode("div", _hoisted_2$4, [createElementVNode("div", _hoisted_3$4, [createElementVNode("label", _hoisted_4$3, toDisplayString(__props.sortByLabel) + ":", 1), createElementVNode("div", _hoisted_5$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.fields, (field) => {
6117
+ return openBlock(), createElementBlock("div", _hoisted_1$7, [createElementVNode("div", _hoisted_2$5, [createElementVNode("div", _hoisted_3$5, [createElementVNode("label", _hoisted_4$4, toDisplayString(__props.sortByLabel) + ":", 1), createElementVNode("div", _hoisted_5$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.fields, (field) => {
6011
6118
  return openBlock(), createElementBlock("button", {
6012
6119
  key: field.key,
6013
6120
  onClick: ($event) => handleSort(field.key),
@@ -6022,15 +6129,15 @@ var _sfc_main$4 = {
6022
6129
  key: 1,
6023
6130
  class: "w-3 h-3 ml-1 inline"
6024
6131
  })) : createCommentVNode("", true)
6025
- ], 10, _hoisted_6$3);
6132
+ ], 10, _hoisted_6$4);
6026
6133
  }), 128))])]), createElementVNode("div", _hoisted_7$2, toDisplayString(__props.count) + " " + toDisplayString(__props.countLabel), 1)])]);
6027
6134
  };
6028
6135
  }
6029
6136
  };
6030
6137
  //#endregion
6031
6138
  //#region src/components/ThSortable.vue
6032
- var _hoisted_1$5 = { class: "flex flex-col" };
6033
- var _sfc_main$3 = {
6139
+ var _hoisted_1$6 = { class: "flex flex-col" };
6140
+ var _sfc_main$4 = {
6034
6141
  __name: "ThSortable",
6035
6142
  props: {
6036
6143
  field: {
@@ -6076,7 +6183,7 @@ var _sfc_main$3 = {
6076
6183
  class: normalizeClass(__props.headerClass),
6077
6184
  style: normalizeStyle(__props.headerStyle),
6078
6185
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("sort", __props.field))
6079
- }, [createElementVNode("div", { class: normalizeClass(__props.contentClass) }, [createElementVNode("span", null, [renderSlot(_ctx.$slots, "default")]), createElementVNode("div", _hoisted_1$5, [isCurrentSort.value && __props.currentDirection === "asc" ? (openBlock(), createBlock(unref(ChevronUpIcon), {
6186
+ }, [createElementVNode("div", { class: normalizeClass(__props.contentClass) }, [createElementVNode("span", null, [renderSlot(_ctx.$slots, "default")]), createElementVNode("div", _hoisted_1$6, [isCurrentSort.value && __props.currentDirection === "asc" ? (openBlock(), createBlock(unref(ChevronUpIcon), {
6080
6187
  key: 0,
6081
6188
  class: normalizeClass([sortIconClass.value, "w-3 h-3"])
6082
6189
  }, null, 8, ["class"])) : createCommentVNode("", true), isCurrentSort.value && __props.currentDirection === "desc" ? (openBlock(), createBlock(unref(ChevronDownIcon), {
@@ -6088,25 +6195,25 @@ var _sfc_main$3 = {
6088
6195
  };
6089
6196
  //#endregion
6090
6197
  //#region src/components/TableSearch.vue
6091
- var _hoisted_1$4 = { class: "flex flex-col items-start gap-4 lg:flex-row lg:flex-wrap lg:items-center lg:justify-between" };
6092
- var _hoisted_2$3 = {
6198
+ var _hoisted_1$5 = { class: "flex flex-col items-start gap-4 lg:flex-row lg:flex-wrap lg:items-center lg:justify-between" };
6199
+ var _hoisted_2$4 = {
6093
6200
  key: 0,
6094
6201
  class: "flex shrink-0 flex-col items-start gap-3 sm:flex-row sm:items-center lg:w-auto"
6095
6202
  };
6096
- var _hoisted_3$3 = {
6203
+ var _hoisted_3$4 = {
6097
6204
  key: 0,
6098
6205
  class: "flex items-center"
6099
6206
  };
6100
- var _hoisted_4$2 = {
6207
+ var _hoisted_4$3 = {
6101
6208
  key: 1,
6102
6209
  class: "flex items-center text-xs text-neutral-500 dark:text-neutral-400 sm:w-auto sm:text-sm lg:w-auto"
6103
6210
  };
6104
- var _hoisted_5$2 = {
6211
+ var _hoisted_5$3 = {
6105
6212
  key: 0,
6106
6213
  class: "ml-2"
6107
6214
  };
6108
- var _hoisted_6$2 = { class: "font-medium text-neutral-700 dark:text-neutral-200" };
6109
- var _sfc_main$2 = {
6215
+ var _hoisted_6$3 = { class: "font-medium text-neutral-700 dark:text-neutral-200" };
6216
+ var _sfc_main$3 = {
6110
6217
  __name: "TableSearch",
6111
6218
  props: {
6112
6219
  modelValue: {
@@ -6175,7 +6282,7 @@ var _sfc_main$2 = {
6175
6282
  const searchContentClasses = computed(() => props.searchFieldsLayout === "stacked" ? "flex w-full min-w-0 flex-1 flex-col gap-3" : "flex w-full min-w-0 flex-1 flex-col gap-3 lg:flex-row lg:items-center");
6176
6283
  const searchFieldsClasses = computed(() => props.searchFieldsLayout === "stacked" ? "w-full min-w-0" : "min-w-0 flex-1");
6177
6284
  return (_ctx, _cache) => {
6178
- return openBlock(), createElementBlock("div", { class: normalizeClass(__props.cardClass) }, [createElementVNode("div", _hoisted_1$4, [createElementVNode("div", { class: normalizeClass(searchContentClasses.value) }, [__props.searchbar ? (openBlock(), createBlock(_sfc_main$16, {
6285
+ return openBlock(), createElementBlock("div", { class: normalizeClass(__props.cardClass) }, [createElementVNode("div", _hoisted_1$5, [createElementVNode("div", { class: normalizeClass(searchContentClasses.value) }, [__props.searchbar ? (openBlock(), createBlock(_sfc_main$17, {
6179
6286
  key: 0,
6180
6287
  modelValue: model.value,
6181
6288
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
@@ -6185,19 +6292,156 @@ var _sfc_main$2 = {
6185
6292
  }, {
6186
6293
  "leading-icon": withCtx(() => [createVNode(unref(Search), { class: "h-5 w-5" })]),
6187
6294
  _: 1
6188
- }, 8, ["modelValue", "placeholder"])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(searchFieldsClasses.value) }, [renderSlot(_ctx.$slots, "search-fields")], 2)], 2), __props.showDeletedToggle || __props.count !== null || _ctx.$slots.controls ? (openBlock(), createElementBlock("div", _hoisted_2$3, [
6189
- __props.showDeletedToggle ? (openBlock(), createElementBlock("div", _hoisted_3$3, [createVNode(_sfc_main$20, {
6295
+ }, 8, ["modelValue", "placeholder"])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(searchFieldsClasses.value) }, [renderSlot(_ctx.$slots, "search-fields")], 2)], 2), __props.showDeletedToggle || __props.count !== null || _ctx.$slots.controls ? (openBlock(), createElementBlock("div", _hoisted_2$4, [
6296
+ __props.showDeletedToggle ? (openBlock(), createElementBlock("div", _hoisted_3$4, [createVNode(_sfc_main$21, {
6190
6297
  modelValue: showDeletedModel.value,
6191
6298
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showDeletedModel.value = $event),
6192
6299
  label: __props.showDeletedLabel
6193
6300
  }, null, 8, ["modelValue", "label"])])) : createCommentVNode("", true),
6194
6301
  renderSlot(_ctx.$slots, "controls"),
6195
- __props.count !== null ? (openBlock(), createElementBlock("div", _hoisted_4$2, [createElementVNode("span", null, toDisplayString(__props.count) + " " + toDisplayString(__props.countLabel), 1), model.value ? (openBlock(), createElementBlock("span", _hoisted_5$2, [createTextVNode(toDisplayString(__props.queryLabel) + " ", 1), createElementVNode("span", _hoisted_6$2, " \"" + toDisplayString(model.value) + "\" ", 1)])) : createCommentVNode("", true)])) : createCommentVNode("", true)
6302
+ __props.count !== null ? (openBlock(), createElementBlock("div", _hoisted_4$3, [createElementVNode("span", null, toDisplayString(__props.count) + " " + toDisplayString(__props.countLabel), 1), model.value ? (openBlock(), createElementBlock("span", _hoisted_5$3, [createTextVNode(toDisplayString(__props.queryLabel) + " ", 1), createElementVNode("span", _hoisted_6$3, " \"" + toDisplayString(model.value) + "\" ", 1)])) : createCommentVNode("", true)])) : createCommentVNode("", true)
6196
6303
  ])) : createCommentVNode("", true)])], 2);
6197
6304
  };
6198
6305
  }
6199
6306
  };
6200
6307
  //#endregion
6308
+ //#region src/components/TableColumnVisibility.vue
6309
+ var _hoisted_1$4 = { class: "mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4" };
6310
+ var _hoisted_2$3 = { class: "sr-only" };
6311
+ var _hoisted_3$3 = ["checked", "onChange"];
6312
+ var _hoisted_4$2 = { class: "min-w-0 truncate" };
6313
+ var _hoisted_5$2 = { class: "flex w-full items-center justify-between gap-3" };
6314
+ var _hoisted_6$2 = { class: "flex gap-3" };
6315
+ var _sfc_main$2 = {
6316
+ __name: "TableColumnVisibility",
6317
+ props: {
6318
+ columns: {
6319
+ type: Array,
6320
+ required: true
6321
+ },
6322
+ hiddenColumns: {
6323
+ type: Array,
6324
+ default: () => []
6325
+ },
6326
+ buttonLabel: {
6327
+ type: String,
6328
+ default: "Columns"
6329
+ },
6330
+ title: {
6331
+ type: String,
6332
+ default: "Visible columns"
6333
+ },
6334
+ description: {
6335
+ type: String,
6336
+ default: "Choose the columns displayed in the table."
6337
+ },
6338
+ showAllLabel: {
6339
+ type: String,
6340
+ default: "Show all"
6341
+ },
6342
+ applyLabel: {
6343
+ type: String,
6344
+ default: "OK"
6345
+ },
6346
+ cancelLabel: {
6347
+ type: String,
6348
+ default: "Cancel"
6349
+ }
6350
+ },
6351
+ emits: ["update:hiddenColumns"],
6352
+ setup(__props, { emit: __emit }) {
6353
+ const props = __props;
6354
+ const emit = __emit;
6355
+ const isOpen = ref(false);
6356
+ const trigger = ref(null);
6357
+ const draftHiddenColumns = ref([]);
6358
+ const open = () => {
6359
+ draftHiddenColumns.value = [...props.hiddenColumns];
6360
+ isOpen.value = true;
6361
+ };
6362
+ const close = () => {
6363
+ isOpen.value = false;
6364
+ window.setTimeout(() => trigger.value?.$el?.focus(), 220);
6365
+ };
6366
+ const cancel = () => {
6367
+ draftHiddenColumns.value = [];
6368
+ close();
6369
+ };
6370
+ const apply = () => {
6371
+ emit("update:hiddenColumns", [...draftHiddenColumns.value]);
6372
+ close();
6373
+ };
6374
+ const isVisible = (column) => !draftHiddenColumns.value.includes(column.key);
6375
+ const updateColumn = (column, visible) => {
6376
+ const hiddenColumns = new Set(draftHiddenColumns.value);
6377
+ if (visible) hiddenColumns.delete(column.key);
6378
+ else hiddenColumns.add(column.key);
6379
+ draftHiddenColumns.value = Array.from(hiddenColumns);
6380
+ };
6381
+ const showAll = () => {
6382
+ draftHiddenColumns.value = [];
6383
+ };
6384
+ return (_ctx, _cache) => {
6385
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(_sfc_main$33, {
6386
+ ref_key: "trigger",
6387
+ ref: trigger,
6388
+ type: "button",
6389
+ variant: "outline",
6390
+ size: "sm",
6391
+ "aria-haspopup": "dialog",
6392
+ "aria-expanded": isOpen.value,
6393
+ "aria-label": __props.buttonLabel,
6394
+ onClick: open
6395
+ }, {
6396
+ default: withCtx(() => [createVNode(unref(Columns3), {
6397
+ class: "size-4",
6398
+ "aria-hidden": "true"
6399
+ }), createTextVNode(" " + toDisplayString(__props.buttonLabel), 1)]),
6400
+ _: 1
6401
+ }, 8, ["aria-expanded", "aria-label"]), createVNode(_sfc_main$13, {
6402
+ show: isOpen.value,
6403
+ "max-width": "4xl",
6404
+ onClose: cancel
6405
+ }, {
6406
+ title: withCtx(() => [createTextVNode(toDisplayString(__props.title), 1)]),
6407
+ content: withCtx(() => [createElementVNode("p", null, toDisplayString(__props.description), 1), createElementVNode("fieldset", _hoisted_1$4, [createElementVNode("legend", _hoisted_2$3, toDisplayString(__props.title), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
6408
+ return openBlock(), createElementBlock("label", {
6409
+ key: column.key,
6410
+ class: "flex min-w-0 items-center gap-2"
6411
+ }, [createElementVNode("input", {
6412
+ type: "checkbox",
6413
+ class: "size-4 shrink-0 rounded border-neutral-300 text-primary-600 shadow-sm focus:ring-primary-500 dark:border-neutral-700 dark:bg-neutral-900",
6414
+ checked: isVisible(column),
6415
+ onChange: ($event) => updateColumn(column, $event.target.checked)
6416
+ }, null, 40, _hoisted_3$3), createElementVNode("span", _hoisted_4$2, toDisplayString(column.label), 1)]);
6417
+ }), 128))])]),
6418
+ footer: withCtx(() => [createElementVNode("div", _hoisted_5$2, [createVNode(_sfc_main$33, {
6419
+ type: "button",
6420
+ variant: "ghost",
6421
+ onClick: showAll
6422
+ }, {
6423
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.showAllLabel), 1)]),
6424
+ _: 1
6425
+ }), createElementVNode("div", _hoisted_6$2, [createVNode(_sfc_main$33, {
6426
+ type: "button",
6427
+ variant: "outline",
6428
+ onClick: cancel
6429
+ }, {
6430
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.cancelLabel), 1)]),
6431
+ _: 1
6432
+ }), createVNode(_sfc_main$33, {
6433
+ type: "button",
6434
+ onClick: apply
6435
+ }, {
6436
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.applyLabel), 1)]),
6437
+ _: 1
6438
+ })])])]),
6439
+ _: 1
6440
+ }, 8, ["show"])], 64);
6441
+ };
6442
+ }
6443
+ };
6444
+ //#endregion
6201
6445
  //#region src/components/tableListOrdering.js
6202
6446
  var getNestedValue = (object, path) => {
6203
6447
  if (!path || typeof path !== "string") return object;
@@ -6237,43 +6481,50 @@ var reorderRows = ({ data, fromIndex, toIndex, orderField, mutateRows }) => {
6237
6481
  };
6238
6482
  //#endregion
6239
6483
  //#region src/components/TableList.vue
6240
- var _hoisted_1$3 = { class: "space-y-6" };
6484
+ var _hoisted_1$3 = { class: "min-w-0 max-w-full space-y-6" };
6241
6485
  var _hoisted_2$2 = {
6486
+ key: 1,
6487
+ class: "flex justify-end"
6488
+ };
6489
+ var _hoisted_3$2 = {
6242
6490
  key: 0,
6243
6491
  class: "w-10 px-2 py-3 text-center text-[11px] font-semibold uppercase tracking-[0.12em] text-neutral-600 dark:text-neutral-200"
6244
6492
  };
6245
- var _hoisted_3$2 = {
6493
+ var _hoisted_4$1 = ["data-table-sticky-key"];
6494
+ var _hoisted_5$1 = ["data-table-sticky-key"];
6495
+ var _hoisted_6$1 = {
6246
6496
  key: 0,
6247
6497
  "data-table-list-placeholder": "",
6248
6498
  class: "bg-blue-50/60 dark:bg-blue-950/20"
6249
6499
  };
6250
- var _hoisted_4$1 = ["colspan"];
6251
- var _hoisted_5$1 = ["data-row-index"];
6252
- var _hoisted_6$1 = {
6500
+ var _hoisted_7$1 = ["colspan"];
6501
+ var _hoisted_8$1 = ["data-row-index"];
6502
+ var _hoisted_9$1 = {
6253
6503
  key: 0,
6254
6504
  class: "w-10 whitespace-nowrap px-2 py-4 text-center text-sm text-neutral-500 dark:text-neutral-400"
6255
6505
  };
6256
- var _hoisted_7$1 = { class: "inline-flex items-center gap-1" };
6257
- var _hoisted_8$1 = ["aria-label", "onPointerdown"];
6258
- var _hoisted_9$1 = ["title"];
6259
- var _hoisted_10$1 = {
6506
+ var _hoisted_10$1 = { class: "inline-flex items-center gap-1" };
6507
+ var _hoisted_11$1 = ["aria-label", "onPointerdown"];
6508
+ var _hoisted_12$1 = ["title"];
6509
+ var _hoisted_13$1 = {
6260
6510
  key: 0,
6261
6511
  class: "ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-1 text-xs font-medium text-red-700 dark:bg-red-950/60 dark:text-neutral-100"
6262
6512
  };
6263
- var _hoisted_11$1 = ["innerHTML"];
6264
- var _hoisted_12$1 = {
6513
+ var _hoisted_14$1 = ["innerHTML"];
6514
+ var _hoisted_15$1 = { class: "ml-auto flex w-max min-w-max flex-nowrap items-center justify-end" };
6515
+ var _hoisted_16$1 = {
6265
6516
  key: 0,
6266
6517
  "data-table-list-placeholder": "",
6267
6518
  class: "bg-blue-50/60 dark:bg-blue-950/20"
6268
6519
  };
6269
- var _hoisted_13$1 = ["colspan"];
6270
- var _hoisted_14$1 = {
6520
+ var _hoisted_17$1 = ["colspan"];
6521
+ var _hoisted_18$1 = {
6271
6522
  key: 0,
6272
6523
  class: "py-12 text-center"
6273
6524
  };
6274
- var _hoisted_15$1 = { class: "mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900" };
6275
- var _hoisted_16$1 = { class: "mb-2 text-lg font-semibold text-neutral-950 dark:text-neutral-50" };
6276
- var _hoisted_17 = { class: "mb-4 text-neutral-600 dark:text-neutral-200" };
6525
+ var _hoisted_19 = { class: "mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900" };
6526
+ var _hoisted_20 = { class: "mb-2 text-lg font-semibold text-neutral-950 dark:text-neutral-50" };
6527
+ var _hoisted_21 = { class: "mb-4 text-neutral-600 dark:text-neutral-200" };
6277
6528
  var _sfc_main$1 = {
6278
6529
  __name: "TableList",
6279
6530
  props: {
@@ -6321,7 +6572,7 @@ var _sfc_main$1 = {
6321
6572
  },
6322
6573
  rowClasses: {
6323
6574
  type: Function,
6324
- default: (item, index) => ["transition-colors duration-150", item.deleted_at ? "bg-red-50 hover:bg-red-100 dark:bg-red-950/30 dark:hover:bg-red-950/50" : "odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900/70 dark:hover:bg-neutral-900"]
6575
+ default: (item, index) => ["transition-colors duration-150", item.deleted_at ? "bg-red-50 hover:bg-red-100 dark:bg-[#1c0c0b] dark:hover:bg-[#280d0b]" : "odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900 dark:hover:bg-neutral-800"]
6325
6576
  },
6326
6577
  maxTextLength: {
6327
6578
  type: Number,
@@ -6355,6 +6606,42 @@ var _sfc_main$1 = {
6355
6606
  type: String,
6356
6607
  default: "Actions"
6357
6608
  },
6609
+ stickyActions: {
6610
+ type: Boolean,
6611
+ default: false
6612
+ },
6613
+ columnVisibility: {
6614
+ type: Boolean,
6615
+ default: false
6616
+ },
6617
+ hiddenColumns: {
6618
+ type: Array,
6619
+ default: void 0
6620
+ },
6621
+ columnVisibilityLabel: {
6622
+ type: String,
6623
+ default: "Columns"
6624
+ },
6625
+ columnVisibilityTitle: {
6626
+ type: String,
6627
+ default: "Visible columns"
6628
+ },
6629
+ columnVisibilityDescription: {
6630
+ type: String,
6631
+ default: "Choose the columns displayed in the table."
6632
+ },
6633
+ columnVisibilityShowAllLabel: {
6634
+ type: String,
6635
+ default: "Show all"
6636
+ },
6637
+ columnVisibilityApplyLabel: {
6638
+ type: String,
6639
+ default: "OK"
6640
+ },
6641
+ columnVisibilityCancelLabel: {
6642
+ type: String,
6643
+ default: "Cancel"
6644
+ },
6358
6645
  deletedLabel: {
6359
6646
  type: String,
6360
6647
  default: "Deleted"
@@ -6410,7 +6697,8 @@ var _sfc_main$1 = {
6410
6697
  "sort",
6411
6698
  "reorder",
6412
6699
  "update:searchShowDeleted",
6413
- "update:searchValue"
6700
+ "update:searchValue",
6701
+ "update:hiddenColumns"
6414
6702
  ],
6415
6703
  setup(__props, { emit: __emit }) {
6416
6704
  const slots = useSlots();
@@ -6421,6 +6709,14 @@ var _sfc_main$1 = {
6421
6709
  localData.value = value;
6422
6710
  });
6423
6711
  const hasActionsSlot = computed(() => !!slots.actions);
6712
+ const internalHiddenColumns = ref(props.columns.filter((column) => column.hidden === true).map((column) => column.key));
6713
+ const resolvedHiddenColumns = computed(() => props.hiddenColumns ?? internalHiddenColumns.value);
6714
+ const visibleColumns = computed(() => props.columns.filter((column) => !resolvedHiddenColumns.value.includes(column.key)));
6715
+ const visibilityColumns = computed(() => props.columns.filter((column) => column.hideable !== false));
6716
+ const updateHiddenColumns = (hiddenColumns) => {
6717
+ internalHiddenColumns.value = hiddenColumns;
6718
+ emit("update:hiddenColumns", hiddenColumns);
6719
+ };
6424
6720
  const internalSearchQuery = ref("");
6425
6721
  const searchQuery = computed({
6426
6722
  get: () => props.searchValue ?? internalSearchQuery.value,
@@ -6451,6 +6747,8 @@ var _sfc_main$1 = {
6451
6747
  const dragPreview = ref(null);
6452
6748
  const dragRowHeight = ref(0);
6453
6749
  const tableRef = ref(null);
6750
+ const stickyOffsets = ref({});
6751
+ let stickyResizeObserver = null;
6454
6752
  const activePointerId = ref(null);
6455
6753
  const dragStartPosition = ref(null);
6456
6754
  const dragHandle = ref(null);
@@ -6459,7 +6757,35 @@ var _sfc_main$1 = {
6459
6757
  return props.orderable && !searchQuery.value.trim();
6460
6758
  });
6461
6759
  const placeholderColumnCount = computed(() => {
6462
- return props.columns.length + 1 + (hasActionsSlot.value ? 1 : 0);
6760
+ return visibleColumns.value.length + 1 + (hasActionsSlot.value ? 1 : 0);
6761
+ });
6762
+ const isStickyColumn = (column) => column.sticky === true || column.sticky === "right";
6763
+ const updateStickyOffsets = async () => {
6764
+ await nextTick();
6765
+ const stickyHeaders = Array.from(tableRef.value?.querySelectorAll("thead [data-table-sticky-key]") ?? []);
6766
+ let right = 0;
6767
+ const offsets = {};
6768
+ stickyHeaders.reverse().forEach((header) => {
6769
+ offsets[header.dataset.tableStickyKey] = right;
6770
+ right += header.getBoundingClientRect().width;
6771
+ });
6772
+ stickyOffsets.value = offsets;
6773
+ };
6774
+ watch(() => [
6775
+ visibleColumns.value.map((column) => column.key).join("|"),
6776
+ props.stickyActions,
6777
+ hasActionsSlot.value
6778
+ ], updateStickyOffsets);
6779
+ onMounted(() => {
6780
+ updateStickyOffsets();
6781
+ if (typeof ResizeObserver !== "undefined" && tableRef.value) {
6782
+ stickyResizeObserver = new ResizeObserver(updateStickyOffsets);
6783
+ stickyResizeObserver.observe(tableRef.value);
6784
+ } else if (typeof window !== "undefined") window.addEventListener("resize", updateStickyOffsets);
6785
+ });
6786
+ onBeforeUnmount(() => {
6787
+ stickyResizeObserver?.disconnect();
6788
+ if (typeof window !== "undefined") window.removeEventListener("resize", updateStickyOffsets);
6463
6789
  });
6464
6790
  const insertionPositionForRow = (index) => {
6465
6791
  if (draggedIndex.value === null || index < draggedIndex.value) return index;
@@ -6644,165 +6970,220 @@ var _sfc_main$1 = {
6644
6970
  return item.deleted_at || item.deleted;
6645
6971
  };
6646
6972
  const getColumnClass = (column) => {
6647
- return joinClasses(props.dense ? "px-3 py-2 text-sm truncate" : "px-6 py-4 text-sm truncate", !column.isSecondary ? "font-medium" : "", column.isSecondary ? "text-neutral-600 dark:text-neutral-200" : "", column.align === "right" ? "text-right" : "", column.class, column.cellClass);
6973
+ return joinClasses(props.dense ? "px-3 py-2 text-sm truncate" : "px-6 py-4 text-sm truncate", !column.isSecondary ? "font-medium" : "", column.isSecondary ? "text-neutral-600 dark:text-neutral-200" : "", column.align === "right" ? "text-right" : "", isStickyColumn(column) ? "sticky z-20 bg-inherit shadow-[-1px_0_0_rgb(229_229_229)] dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "", column.class, column.cellClass);
6648
6974
  };
6649
6975
  const getHeaderClass = (column) => {
6650
- return joinClasses(column.sortable ? "cursor-pointer transition-colors duration-150" : "", props.dense ? "px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-[0.12em]" : "px-6 py-3 text-left text-[11px] font-semibold uppercase tracking-[0.12em]", "text-neutral-600 dark:text-neutral-200", column.sortable ? "hover:bg-neutral-100 dark:hover:bg-neutral-900" : "", column.align === "right" ? "text-right" : "", column.headerClass);
6976
+ return joinClasses(column.sortable ? "cursor-pointer transition-colors duration-150" : "", props.dense ? "px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-[0.12em]" : "px-6 py-3 text-left text-[11px] font-semibold uppercase tracking-[0.12em]", "text-neutral-600 dark:text-neutral-200", column.sortable ? "hover:bg-neutral-100 dark:hover:bg-neutral-900" : "", column.align === "right" ? "text-right" : "", isStickyColumn(column) ? "sticky z-30 bg-neutral-50 shadow-[-1px_0_0_rgb(229_229_229)] dark:bg-neutral-900 dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "", column.headerClass);
6651
6977
  };
6652
6978
  const getContentClass = (column) => {
6653
6979
  return joinClasses(column.sortable ? "flex items-center space-x-1" : "", column.align === "right" ? "w-full text-right justify-end" : "", column.contentClass);
6654
6980
  };
6655
6981
  const getColumnWidthStyle = (column) => {
6656
- return column.width ? { width: column.width } : {};
6982
+ return {
6983
+ ...column.width ? { width: column.width } : {},
6984
+ ...isStickyColumn(column) ? { right: `${stickyOffsets.value[column.key] ?? 0}px` } : {}
6985
+ };
6657
6986
  };
6658
6987
  const actionHeaderClass = computed(() => {
6659
- return joinClasses(props.dense ? "px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-[0.12em]" : "px-6 py-3 text-right text-[11px] font-semibold uppercase tracking-[0.12em]", "text-neutral-600 dark:text-neutral-200");
6988
+ return joinClasses(props.dense ? "px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-[0.12em]" : "px-6 py-3 text-right text-[11px] font-semibold uppercase tracking-[0.12em]", "w-px whitespace-nowrap text-neutral-600 dark:text-neutral-200", props.stickyActions ? "sticky z-30 bg-neutral-50 shadow-[-1px_0_0_rgb(229_229_229)] dark:bg-neutral-900 dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "");
6660
6989
  });
6661
6990
  const actionCellClass = computed(() => {
6662
- return joinClasses(props.dense ? "px-3 py-2 whitespace-nowrap text-right text-sm font-medium" : "px-6 py-4 whitespace-nowrap text-right text-sm font-medium");
6991
+ return joinClasses(props.dense ? "px-3 py-2 whitespace-nowrap text-right text-sm font-medium" : "px-6 py-4 whitespace-nowrap text-right text-sm font-medium", "w-px", props.stickyActions ? "sticky z-20 bg-inherit shadow-[-1px_0_0_rgb(229_229_229)] dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "");
6992
+ });
6993
+ const actionColumnStyle = computed(() => {
6994
+ return props.stickyActions ? { right: `${stickyOffsets.value.__actions ?? 0}px` } : {};
6663
6995
  });
6664
6996
  return (_ctx, _cache) => {
6665
- return openBlock(), createElementBlock("div", _hoisted_1$3, [__props.search ? (openBlock(), createBlock(_sfc_main$2, {
6666
- key: 0,
6667
- "model-value": searchQuery.value,
6668
- placeholder: __props.searchPlaceholder,
6669
- count: resolvedSearchCount.value,
6670
- "count-label": __props.searchCountLabel,
6671
- "query-label": __props.searchQueryLabel,
6672
- "show-deleted": __props.searchShowDeleted,
6673
- "show-deleted-toggle": __props.searchShowDeletedToggle,
6674
- "show-deleted-label": __props.searchShowDeletedLabel,
6675
- "search-mode": __props.searchMode,
6676
- "search-fields-layout": __props.searchFieldsLayout,
6677
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
6678
- "onUpdate:showDeleted": updateSearchShowDeleted
6679
- }, createSlots({ _: 2 }, [_ctx.$slots["search-fields"] ? {
6680
- name: "search-fields",
6681
- fn: withCtx(() => [renderSlot(_ctx.$slots, "search-fields")]),
6682
- key: "0"
6683
- } : void 0, _ctx.$slots.controls ? {
6684
- name: "controls",
6685
- fn: withCtx(() => [renderSlot(_ctx.$slots, "controls")]),
6686
- key: "1"
6687
- } : void 0]), 1032, [
6688
- "model-value",
6689
- "placeholder",
6690
- "count",
6691
- "count-label",
6692
- "query-label",
6693
- "show-deleted",
6694
- "show-deleted-toggle",
6695
- "show-deleted-label",
6696
- "search-mode",
6697
- "search-fields-layout"
6698
- ])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(["bg-white/90 backdrop-blur-sm dark:bg-neutral-950/90", __props.isCard ? "animate-fadeIn rounded-2xl border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden" : ""]) }, [createElementVNode("div", { class: normalizeClass(["overflow-x-auto", __props.isCard ? "rounded-t-xl" : ""]) }, [createElementVNode("table", {
6699
- ref_key: "tableRef",
6700
- ref: tableRef,
6701
- class: normalizeClass(joinClasses("min-w-full divide-y divide-neutral-200 dark:divide-neutral-800", __props.tableClass))
6702
- }, [createElementVNode("thead", { class: normalizeClass(joinClasses("bg-neutral-50/80 dark:bg-neutral-900/80", __props.theadClass)) }, [createElementVNode("tr", { class: normalizeClass(__props.headerRowClass) }, [
6703
- __props.orderable ? (openBlock(), createElementBlock("th", _hoisted_2$2, "#")) : createCommentVNode("", true),
6704
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
6705
- return openBlock(), createElementBlock(Fragment, { key: column.key }, [column.sortable ? (openBlock(), createBlock(_sfc_main$3, {
6997
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [
6998
+ __props.search ? (openBlock(), createBlock(_sfc_main$3, {
6999
+ key: 0,
7000
+ "model-value": searchQuery.value,
7001
+ placeholder: __props.searchPlaceholder,
7002
+ count: resolvedSearchCount.value,
7003
+ "count-label": __props.searchCountLabel,
7004
+ "query-label": __props.searchQueryLabel,
7005
+ "show-deleted": __props.searchShowDeleted,
7006
+ "show-deleted-toggle": __props.searchShowDeletedToggle,
7007
+ "show-deleted-label": __props.searchShowDeletedLabel,
7008
+ "search-mode": __props.searchMode,
7009
+ "search-fields-layout": __props.searchFieldsLayout,
7010
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
7011
+ "onUpdate:showDeleted": updateSearchShowDeleted
7012
+ }, createSlots({ _: 2 }, [_ctx.$slots["search-fields"] ? {
7013
+ name: "search-fields",
7014
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "search-fields")]),
7015
+ key: "0"
7016
+ } : void 0, _ctx.$slots.controls || __props.columnVisibility ? {
7017
+ name: "controls",
7018
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "controls"), __props.columnVisibility ? (openBlock(), createBlock(_sfc_main$2, {
6706
7019
  key: 0,
6707
- field: column.key,
6708
- "current-sort-field": __props.sortField,
6709
- "current-direction": __props.sortDirection,
6710
- "header-class": getHeaderClass(column),
6711
- "header-style": getColumnWidthStyle(column),
6712
- "content-class": getContentClass(column),
6713
- onSort: sortBy
6714
- }, {
6715
- default: withCtx(() => [createTextVNode(toDisplayString(column.label), 1)]),
6716
- _: 2
6717
- }, 1032, [
6718
- "field",
6719
- "current-sort-field",
6720
- "current-direction",
6721
- "header-class",
6722
- "header-style",
6723
- "content-class"
6724
- ])) : (openBlock(), createElementBlock("th", {
7020
+ columns: visibilityColumns.value,
7021
+ "hidden-columns": resolvedHiddenColumns.value,
7022
+ "button-label": __props.columnVisibilityLabel,
7023
+ title: __props.columnVisibilityTitle,
7024
+ description: __props.columnVisibilityDescription,
7025
+ "show-all-label": __props.columnVisibilityShowAllLabel,
7026
+ "apply-label": __props.columnVisibilityApplyLabel,
7027
+ "cancel-label": __props.columnVisibilityCancelLabel,
7028
+ "onUpdate:hiddenColumns": updateHiddenColumns
7029
+ }, null, 8, [
7030
+ "columns",
7031
+ "hidden-columns",
7032
+ "button-label",
7033
+ "title",
7034
+ "description",
7035
+ "show-all-label",
7036
+ "apply-label",
7037
+ "cancel-label"
7038
+ ])) : createCommentVNode("", true)]),
7039
+ key: "1"
7040
+ } : void 0]), 1032, [
7041
+ "model-value",
7042
+ "placeholder",
7043
+ "count",
7044
+ "count-label",
7045
+ "query-label",
7046
+ "show-deleted",
7047
+ "show-deleted-toggle",
7048
+ "show-deleted-label",
7049
+ "search-mode",
7050
+ "search-fields-layout"
7051
+ ])) : createCommentVNode("", true),
7052
+ __props.columnVisibility && !__props.search ? (openBlock(), createElementBlock("div", _hoisted_2$2, [createVNode(_sfc_main$2, {
7053
+ columns: visibilityColumns.value,
7054
+ "hidden-columns": resolvedHiddenColumns.value,
7055
+ "button-label": __props.columnVisibilityLabel,
7056
+ title: __props.columnVisibilityTitle,
7057
+ description: __props.columnVisibilityDescription,
7058
+ "show-all-label": __props.columnVisibilityShowAllLabel,
7059
+ "apply-label": __props.columnVisibilityApplyLabel,
7060
+ "cancel-label": __props.columnVisibilityCancelLabel,
7061
+ "onUpdate:hiddenColumns": updateHiddenColumns
7062
+ }, null, 8, [
7063
+ "columns",
7064
+ "hidden-columns",
7065
+ "button-label",
7066
+ "title",
7067
+ "description",
7068
+ "show-all-label",
7069
+ "apply-label",
7070
+ "cancel-label"
7071
+ ])])) : createCommentVNode("", true),
7072
+ createElementVNode("div", { class: normalizeClass(["min-w-0 max-w-full bg-white/90 backdrop-blur-sm dark:bg-neutral-950/90", __props.isCard ? "animate-fadeIn rounded-2xl border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden" : ""]) }, [createElementVNode("div", { class: normalizeClass(["min-w-0 max-w-full overflow-x-auto", __props.isCard ? "rounded-t-xl" : ""]) }, [createElementVNode("table", {
7073
+ ref_key: "tableRef",
7074
+ ref: tableRef,
7075
+ class: normalizeClass(joinClasses("min-w-full divide-y divide-neutral-200 dark:divide-neutral-800", __props.tableClass))
7076
+ }, [createElementVNode("thead", { class: normalizeClass(joinClasses("bg-neutral-50/80 dark:bg-neutral-900/80", __props.theadClass)) }, [createElementVNode("tr", { class: normalizeClass(__props.headerRowClass) }, [
7077
+ __props.orderable ? (openBlock(), createElementBlock("th", _hoisted_3$2, "#")) : createCommentVNode("", true),
7078
+ (openBlock(true), createElementBlock(Fragment, null, renderList(visibleColumns.value, (column) => {
7079
+ return openBlock(), createElementBlock(Fragment, { key: column.key }, [column.sortable ? (openBlock(), createBlock(_sfc_main$4, {
7080
+ key: 0,
7081
+ "data-table-sticky-key": isStickyColumn(column) ? column.key : void 0,
7082
+ field: column.key,
7083
+ "current-sort-field": __props.sortField,
7084
+ "current-direction": __props.sortDirection,
7085
+ "header-class": getHeaderClass(column),
7086
+ "header-style": getColumnWidthStyle(column),
7087
+ "content-class": getContentClass(column),
7088
+ onSort: sortBy
7089
+ }, {
7090
+ default: withCtx(() => [createTextVNode(toDisplayString(column.label), 1)]),
7091
+ _: 2
7092
+ }, 1032, [
7093
+ "data-table-sticky-key",
7094
+ "field",
7095
+ "current-sort-field",
7096
+ "current-direction",
7097
+ "header-class",
7098
+ "header-style",
7099
+ "content-class"
7100
+ ])) : (openBlock(), createElementBlock("th", {
7101
+ key: 1,
7102
+ "data-table-sticky-key": isStickyColumn(column) ? column.key : void 0,
7103
+ class: normalizeClass(getHeaderClass(column)),
7104
+ style: normalizeStyle(getColumnWidthStyle(column))
7105
+ }, [createElementVNode("div", { class: normalizeClass(getContentClass(column)) }, toDisplayString(column.label), 3)], 14, _hoisted_4$1))], 64);
7106
+ }), 128)),
7107
+ _ctx.$slots.actions ? (openBlock(), createElementBlock("th", {
6725
7108
  key: 1,
6726
- class: normalizeClass(getHeaderClass(column)),
6727
- style: normalizeStyle(getColumnWidthStyle(column))
6728
- }, [createElementVNode("div", { class: normalizeClass(getContentClass(column)) }, toDisplayString(column.label), 3)], 6))], 64);
6729
- }), 128)),
6730
- _ctx.$slots.actions ? (openBlock(), createElementBlock("th", {
6731
- key: 1,
6732
- class: normalizeClass(actionHeaderClass.value)
6733
- }, toDisplayString(__props.actionsLabel), 3)) : createCommentVNode("", true)
6734
- ], 2)], 2), createElementVNode("tbody", { class: normalizeClass(joinClasses("divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950", __props.tbodyClass)) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredData.value, (item, index) => {
6735
- return openBlock(), createElementBlock(Fragment, { key: unref(getRowKey)(item, index, __props.rowKey) }, [isDragging.value && index !== draggedIndex.value && insertionIndex.value === insertionPositionForRow(index) ? (openBlock(), createElementBlock("tr", _hoisted_3$2, [createElementVNode("td", {
7109
+ "data-table-sticky-key": __props.stickyActions ? "__actions" : void 0,
7110
+ class: normalizeClass(actionHeaderClass.value),
7111
+ style: normalizeStyle(actionColumnStyle.value)
7112
+ }, toDisplayString(__props.actionsLabel), 15, _hoisted_5$1)) : createCommentVNode("", true)
7113
+ ], 2)], 2), createElementVNode("tbody", { class: normalizeClass(joinClasses("divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950", __props.tbodyClass)) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredData.value, (item, index) => {
7114
+ return openBlock(), createElementBlock(Fragment, { key: unref(getRowKey)(item, index, __props.rowKey) }, [isDragging.value && index !== draggedIndex.value && insertionIndex.value === insertionPositionForRow(index) ? (openBlock(), createElementBlock("tr", _hoisted_6$1, [createElementVNode("td", {
7115
+ colspan: placeholderColumnCount.value,
7116
+ class: "p-0"
7117
+ }, [createElementVNode("div", {
7118
+ class: "mx-2 rounded-md border border-dashed border-blue-400 bg-blue-50/70 dark:border-blue-500 dark:bg-blue-950/30",
7119
+ style: normalizeStyle({ height: `${dragRowHeight.value}px` })
7120
+ }, null, 4)], 8, _hoisted_7$1)])) : createCommentVNode("", true), !isDragging.value || index !== draggedIndex.value ? (openBlock(), createElementBlock("tr", {
7121
+ key: 1,
7122
+ "data-row-index": index,
7123
+ class: normalizeClass(joinClasses(__props.rowClasses(item, index), "transition-transform duration-150 ease-out"))
7124
+ }, [
7125
+ __props.orderable ? (openBlock(), createElementBlock("td", _hoisted_9$1, [createElementVNode("span", _hoisted_10$1, [createElementVNode("span", {
7126
+ class: "cursor-grab touch-none active:cursor-grabbing",
7127
+ "aria-label": `Drag row ${index + 1}`,
7128
+ onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"])),
7129
+ onPointerdown: ($event) => startPointerDrag(index, $event)
7130
+ }, [createVNode(unref(GripVertical), { class: "size-4" })], 40, _hoisted_11$1), createElementVNode("span", null, toDisplayString(index + 1), 1)])])) : createCommentVNode("", true),
7131
+ (openBlock(true), createElementBlock(Fragment, null, renderList(visibleColumns.value, (column) => {
7132
+ return openBlock(), createElementBlock("td", {
7133
+ key: column.key,
7134
+ class: normalizeClass(getColumnClass(column)),
7135
+ style: normalizeStyle(getColumnWidthStyle(column))
7136
+ }, [column.key === "name" && !column.slot ? (openBlock(), createElementBlock("div", {
7137
+ key: 0,
7138
+ class: normalizeClass(joinClasses("flex items-center", getContentClass(column)))
7139
+ }, [createElementVNode("div", {
7140
+ class: "truncate text-sm font-medium text-neutral-950 dark:text-neutral-50",
7141
+ title: getCellContent(item, column)
7142
+ }, toDisplayString(getCellContent(item, column)), 9, _hoisted_12$1), isDeleted(item) ? (openBlock(), createElementBlock("span", _hoisted_13$1, toDisplayString(__props.deletedLabel), 1)) : createCommentVNode("", true)], 2)) : column.slot ? (openBlock(), createElementBlock("div", {
7143
+ key: 1,
7144
+ class: normalizeClass(getContentClass(column))
7145
+ }, [renderSlot(_ctx.$slots, column.slot, {
7146
+ item,
7147
+ column,
7148
+ index
7149
+ })], 2)) : column.render ? (openBlock(), createElementBlock("div", {
7150
+ key: 2,
7151
+ class: normalizeClass(getContentClass(column)),
7152
+ innerHTML: column.render(item)
7153
+ }, null, 10, _hoisted_14$1)) : (openBlock(), createElementBlock("div", {
7154
+ key: 3,
7155
+ class: normalizeClass(getContentClass(column))
7156
+ }, toDisplayString(getCellContent(item, column)), 3))], 6);
7157
+ }), 128)),
7158
+ _ctx.$slots.actions ? (openBlock(), createElementBlock("td", {
7159
+ key: 1,
7160
+ class: normalizeClass(actionCellClass.value),
7161
+ style: normalizeStyle(actionColumnStyle.value)
7162
+ }, [createElementVNode("div", _hoisted_15$1, [renderSlot(_ctx.$slots, "actions", {
7163
+ item,
7164
+ index
7165
+ })])], 6)) : createCommentVNode("", true)
7166
+ ], 10, _hoisted_8$1)) : createCommentVNode("", true)], 64);
7167
+ }), 128)), isDragging.value && insertionIndex.value === filteredData.value.length - 1 ? (openBlock(), createElementBlock("tr", _hoisted_16$1, [createElementVNode("td", {
6736
7168
  colspan: placeholderColumnCount.value,
6737
7169
  class: "p-0"
6738
7170
  }, [createElementVNode("div", {
6739
7171
  class: "mx-2 rounded-md border border-dashed border-blue-400 bg-blue-50/70 dark:border-blue-500 dark:bg-blue-950/30",
6740
7172
  style: normalizeStyle({ height: `${dragRowHeight.value}px` })
6741
- }, null, 4)], 8, _hoisted_4$1)])) : createCommentVNode("", true), !isDragging.value || index !== draggedIndex.value ? (openBlock(), createElementBlock("tr", {
6742
- key: 1,
6743
- "data-row-index": index,
6744
- class: normalizeClass(joinClasses(__props.rowClasses(item, index), "transition-transform duration-150 ease-out"))
6745
- }, [
6746
- __props.orderable ? (openBlock(), createElementBlock("td", _hoisted_6$1, [createElementVNode("span", _hoisted_7$1, [createElementVNode("span", {
6747
- class: "cursor-grab touch-none active:cursor-grabbing",
6748
- "aria-label": `Drag row ${index + 1}`,
6749
- onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"])),
6750
- onPointerdown: ($event) => startPointerDrag(index, $event)
6751
- }, [createVNode(unref(GripVertical), { class: "size-4" })], 40, _hoisted_8$1), createElementVNode("span", null, toDisplayString(index + 1), 1)])])) : createCommentVNode("", true),
6752
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
6753
- return openBlock(), createElementBlock("td", {
6754
- key: column.key,
6755
- class: normalizeClass(getColumnClass(column)),
6756
- style: normalizeStyle(getColumnWidthStyle(column))
6757
- }, [column.key === "name" && !column.slot ? (openBlock(), createElementBlock("div", {
6758
- key: 0,
6759
- class: normalizeClass(joinClasses("flex items-center", getContentClass(column)))
6760
- }, [createElementVNode("div", {
6761
- class: "truncate text-sm font-medium text-neutral-950 dark:text-neutral-50",
6762
- title: getCellContent(item, column)
6763
- }, toDisplayString(getCellContent(item, column)), 9, _hoisted_9$1), isDeleted(item) ? (openBlock(), createElementBlock("span", _hoisted_10$1, toDisplayString(__props.deletedLabel), 1)) : createCommentVNode("", true)], 2)) : column.slot ? (openBlock(), createElementBlock("div", {
6764
- key: 1,
6765
- class: normalizeClass(getContentClass(column))
6766
- }, [renderSlot(_ctx.$slots, column.slot, {
6767
- item,
6768
- column,
6769
- index
6770
- })], 2)) : column.render ? (openBlock(), createElementBlock("div", {
6771
- key: 2,
6772
- class: normalizeClass(getContentClass(column)),
6773
- innerHTML: column.render(item)
6774
- }, null, 10, _hoisted_11$1)) : (openBlock(), createElementBlock("div", {
6775
- key: 3,
6776
- class: normalizeClass(getContentClass(column))
6777
- }, toDisplayString(getCellContent(item, column)), 3))], 6);
6778
- }), 128)),
6779
- _ctx.$slots.actions ? (openBlock(), createElementBlock("td", {
6780
- key: 1,
6781
- class: normalizeClass(actionCellClass.value)
6782
- }, [renderSlot(_ctx.$slots, "actions", {
6783
- item,
6784
- index
6785
- })], 2)) : createCommentVNode("", true)
6786
- ], 10, _hoisted_5$1)) : createCommentVNode("", true)], 64);
6787
- }), 128)), isDragging.value && insertionIndex.value === filteredData.value.length - 1 ? (openBlock(), createElementBlock("tr", _hoisted_12$1, [createElementVNode("td", {
6788
- colspan: placeholderColumnCount.value,
6789
- class: "p-0"
6790
- }, [createElementVNode("div", {
6791
- class: "mx-2 rounded-md border border-dashed border-blue-400 bg-blue-50/70 dark:border-blue-500 dark:bg-blue-950/30",
6792
- style: normalizeStyle({ height: `${dragRowHeight.value}px` })
6793
- }, null, 4)], 8, _hoisted_13$1)])) : createCommentVNode("", true)], 2)], 2)], 2), !hasData.value ? (openBlock(), createElementBlock("div", _hoisted_14$1, [
6794
- createElementVNode("div", _hoisted_15$1, [(openBlock(), createBlock(resolveDynamicComponent(__props.emptyState.icon), { class: "h-8 w-8 text-neutral-400 dark:text-neutral-200" }))]),
6795
- createElementVNode("h3", _hoisted_16$1, toDisplayString(__props.emptyState.title), 1),
6796
- createElementVNode("p", _hoisted_17, toDisplayString(__props.emptyState.description), 1),
6797
- __props.emptyState.actionText && __props.emptyState.actionUrl ? (openBlock(), createBlock(_sfc_main$6, {
6798
- key: 0,
6799
- href: __props.emptyState.actionUrl,
6800
- variant: "primary"
6801
- }, {
6802
- default: withCtx(() => [createTextVNode(toDisplayString(__props.emptyState.actionText), 1)]),
6803
- _: 1
6804
- }, 8, ["href"])) : createCommentVNode("", true)
6805
- ])) : createCommentVNode("", true)], 2)]);
7173
+ }, null, 4)], 8, _hoisted_17$1)])) : createCommentVNode("", true)], 2)], 2)], 2), !hasData.value ? (openBlock(), createElementBlock("div", _hoisted_18$1, [
7174
+ createElementVNode("div", _hoisted_19, [(openBlock(), createBlock(resolveDynamicComponent(__props.emptyState.icon), { class: "h-8 w-8 text-neutral-400 dark:text-neutral-200" }))]),
7175
+ createElementVNode("h3", _hoisted_20, toDisplayString(__props.emptyState.title), 1),
7176
+ createElementVNode("p", _hoisted_21, toDisplayString(__props.emptyState.description), 1),
7177
+ __props.emptyState.actionText && __props.emptyState.actionUrl ? (openBlock(), createBlock(_sfc_main$7, {
7178
+ key: 0,
7179
+ href: __props.emptyState.actionUrl,
7180
+ variant: "primary"
7181
+ }, {
7182
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.emptyState.actionText), 1)]),
7183
+ _: 1
7184
+ }, 8, ["href"])) : createCommentVNode("", true)
7185
+ ])) : createCommentVNode("", true)], 2)
7186
+ ]);
6806
7187
  };
6807
7188
  }
6808
7189
  };
@@ -6812,37 +7193,39 @@ var _hoisted_1$2 = {
6812
7193
  key: 0,
6813
7194
  class: "w-10 px-2 py-3 text-center text-xs font-medium uppercase tracking-wider text-neutral-500 dark:text-neutral-200"
6814
7195
  };
6815
- var _hoisted_2$1 = ["onDragover", "onDrop"];
6816
- var _hoisted_3$1 = {
7196
+ var _hoisted_2$1 = ["data-table-sticky-key"];
7197
+ var _hoisted_3$1 = ["data-table-sticky-key"];
7198
+ var _hoisted_4 = ["onDragover", "onDrop"];
7199
+ var _hoisted_5 = {
6817
7200
  key: 0,
6818
7201
  class: "w-10 whitespace-nowrap px-2 py-4 text-center text-sm text-neutral-500 dark:text-neutral-400"
6819
7202
  };
6820
- var _hoisted_4 = { class: "inline-flex items-center gap-1" };
6821
- var _hoisted_5 = [
7203
+ var _hoisted_6 = { class: "inline-flex items-center gap-1" };
7204
+ var _hoisted_7 = [
6822
7205
  "draggable",
6823
7206
  "aria-label",
6824
7207
  "onDragstart"
6825
7208
  ];
6826
- var _hoisted_6 = {
7209
+ var _hoisted_8 = {
6827
7210
  key: 2,
6828
7211
  class: "flex items-center"
6829
7212
  };
6830
- var _hoisted_7 = ["title"];
6831
- var _hoisted_8 = {
7213
+ var _hoisted_9 = ["title"];
7214
+ var _hoisted_10 = {
6832
7215
  key: 0,
6833
7216
  class: "ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-1 text-xs font-medium text-red-800 dark:bg-red-950/60 dark:text-neutral-100"
6834
7217
  };
6835
- var _hoisted_9 = ["innerHTML"];
6836
- var _hoisted_10 = { key: 5 };
6837
- var _hoisted_11 = { class: "flex items-center justify-end gap-2" };
6838
- var _hoisted_12 = ["colspan"];
6839
- var _hoisted_13 = {
7218
+ var _hoisted_11 = ["innerHTML"];
7219
+ var _hoisted_12 = { key: 5 };
7220
+ var _hoisted_13 = { class: "ml-auto flex w-max min-w-max flex-nowrap items-center justify-end gap-2" };
7221
+ var _hoisted_14 = ["colspan"];
7222
+ var _hoisted_15 = {
6840
7223
  key: 2,
6841
7224
  class: "py-12 text-center"
6842
7225
  };
6843
- var _hoisted_14 = { class: "mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900" };
6844
- var _hoisted_15 = { class: "mb-2 text-lg font-medium text-neutral-950 dark:text-neutral-50" };
6845
- var _hoisted_16 = { class: "mb-4 text-neutral-500 dark:text-neutral-200" };
7226
+ var _hoisted_16 = { class: "mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900" };
7227
+ var _hoisted_17 = { class: "mb-2 text-lg font-medium text-neutral-950 dark:text-neutral-50" };
7228
+ var _hoisted_18 = { class: "mb-4 text-neutral-500 dark:text-neutral-200" };
6846
7229
  var _sfc_main = {
6847
7230
  __name: "TableListForm",
6848
7231
  props: {
@@ -6874,7 +7257,7 @@ var _sfc_main = {
6874
7257
  },
6875
7258
  rowClasses: {
6876
7259
  type: Function,
6877
- default: (item) => ["transition-colors duration-150", item.deleted_at ? "bg-red-50 hover:bg-red-100 dark:bg-red-950/30 dark:hover:bg-red-950/50" : "odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900/70 dark:hover:bg-neutral-900"]
7260
+ default: (item) => ["transition-colors duration-150", item.deleted_at ? "bg-red-50 hover:bg-red-100 dark:bg-[#1c0c0b] dark:hover:bg-[#280d0b]" : "odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900 dark:hover:bg-neutral-800"]
6878
7261
  },
6879
7262
  getErrorMessage: {
6880
7263
  type: Function,
@@ -6937,6 +7320,10 @@ var _sfc_main = {
6937
7320
  type: String,
6938
7321
  default: "Actions"
6939
7322
  },
7323
+ stickyActions: {
7324
+ type: Boolean,
7325
+ default: false
7326
+ },
6940
7327
  deletedLabel: {
6941
7328
  type: String,
6942
7329
  default: "Deleted"
@@ -7010,6 +7397,9 @@ var _sfc_main = {
7010
7397
  const localSortField = ref(props.sortField);
7011
7398
  const localSortDirection = ref(props.sortDirection);
7012
7399
  const localData = ref(props.data);
7400
+ const tableRef = ref(null);
7401
+ const stickyOffsets = ref({});
7402
+ let stickyResizeObserver = null;
7013
7403
  const internalSearchQuery = ref("");
7014
7404
  const searchQuery = computed({
7015
7405
  get: () => props.searchValue ?? internalSearchQuery.value,
@@ -7118,6 +7508,34 @@ var _sfc_main = {
7118
7508
  const hasActionsColumn = computed(() => hasActionsSlot.value || props.rowEditing);
7119
7509
  const hasData = computed(() => sortedData.value && sortedData.value.length > 0);
7120
7510
  const hasExpandedRow = computed(() => Boolean(slots["expanded-row"]));
7511
+ const isStickyColumn = (column) => column.sticky === true || column.sticky === "right";
7512
+ const updateStickyOffsets = async () => {
7513
+ await nextTick();
7514
+ const stickyHeaders = Array.from(tableRef.value?.querySelectorAll("thead [data-table-sticky-key]") ?? []);
7515
+ let right = 0;
7516
+ const offsets = {};
7517
+ stickyHeaders.reverse().forEach((header) => {
7518
+ offsets[header.dataset.tableStickyKey] = right;
7519
+ right += header.getBoundingClientRect().width;
7520
+ });
7521
+ stickyOffsets.value = offsets;
7522
+ };
7523
+ watch(() => [
7524
+ props.columns.map((column) => column.key).join("|"),
7525
+ props.stickyActions,
7526
+ hasActionsColumn.value
7527
+ ], updateStickyOffsets);
7528
+ onMounted(() => {
7529
+ updateStickyOffsets();
7530
+ if (typeof ResizeObserver !== "undefined" && tableRef.value) {
7531
+ stickyResizeObserver = new ResizeObserver(updateStickyOffsets);
7532
+ stickyResizeObserver.observe(tableRef.value);
7533
+ } else if (typeof window !== "undefined") window.addEventListener("resize", updateStickyOffsets);
7534
+ });
7535
+ onBeforeUnmount(() => {
7536
+ stickyResizeObserver?.disconnect();
7537
+ if (typeof window !== "undefined") window.removeEventListener("resize", updateStickyOffsets);
7538
+ });
7121
7539
  const sortBy = (field) => {
7122
7540
  if (localSortField.value === field) localSortDirection.value = localSortDirection.value === "asc" ? "desc" : "asc";
7123
7541
  else {
@@ -7218,16 +7636,19 @@ var _sfc_main = {
7218
7636
  return truncateText(value);
7219
7637
  };
7220
7638
  const getColumnClass = (column, item, index) => {
7221
- return joinClasses(isEditingRow(item, index) && (column.input || slots[getEditSlotName(column)]) ? props.dense ? "px-3 py-2 text-sm align-top" : "px-6 py-3 text-sm align-top" : props.dense ? "px-3 py-2 text-sm truncate" : "px-6 py-4 text-sm truncate", !column.isSecondary ? "font-medium" : "", column.isSecondary ? "text-neutral-600 dark:text-neutral-200" : "", column.align === "right" ? "text-right" : "", column.class, column.cellClass);
7639
+ return joinClasses(isEditingRow(item, index) && (column.input || slots[getEditSlotName(column)]) ? props.dense ? "px-3 py-2 text-sm align-top" : "px-6 py-3 text-sm align-top" : props.dense ? "px-3 py-2 text-sm truncate" : "px-6 py-4 text-sm truncate", !column.isSecondary ? "font-medium" : "", column.isSecondary ? "text-neutral-600 dark:text-neutral-200" : "", column.align === "right" ? "text-right" : "", isStickyColumn(column) ? "sticky z-20 bg-inherit shadow-[-1px_0_0_rgb(229_229_229)] dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "", column.class, column.cellClass);
7222
7640
  };
7223
7641
  const getHeaderClass = (column) => {
7224
- return joinClasses(column.sortable ? "cursor-pointer transition-colors duration-150" : "", props.dense ? "px-3 py-2 text-left text-xs font-medium uppercase tracking-wider" : "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider", "text-neutral-500 dark:text-neutral-200", column.sortable ? "hover:bg-neutral-100 dark:hover:bg-neutral-900" : "", column.align === "right" ? "text-right" : "", column.headerClass);
7642
+ return joinClasses(column.sortable ? "cursor-pointer transition-colors duration-150" : "", props.dense ? "px-3 py-2 text-left text-xs font-medium uppercase tracking-wider" : "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider", "text-neutral-500 dark:text-neutral-200", column.sortable ? "hover:bg-neutral-100 dark:hover:bg-neutral-900" : "", column.align === "right" ? "text-right" : "", isStickyColumn(column) ? "sticky z-30 bg-neutral-50 shadow-[-1px_0_0_rgb(229_229_229)] dark:bg-neutral-900 dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "", column.headerClass);
7225
7643
  };
7226
7644
  const getContentClass = (column) => {
7227
7645
  return joinClasses(column.sortable ? "flex items-center space-x-1" : "", column.align === "right" ? "w-full text-right justify-end" : "", column.contentClass);
7228
7646
  };
7229
7647
  const getColumnWidthStyle = (column) => {
7230
- return column.width ? { width: column.width } : {};
7648
+ return {
7649
+ ...column.width ? { width: column.width } : {},
7650
+ ...isStickyColumn(column) ? { right: `${stickyOffsets.value[column.key] ?? 0}px` } : {}
7651
+ };
7231
7652
  };
7232
7653
  const getInputType = (column) => column.inputType || "text";
7233
7654
  const getInputClass = (column) => {
@@ -7262,16 +7683,19 @@ var _sfc_main = {
7262
7683
  return Boolean(disabled || isDeleted(item));
7263
7684
  };
7264
7685
  const actionHeaderClass = computed(() => {
7265
- return joinClasses(props.dense ? "px-3 py-2 text-right text-xs font-medium uppercase tracking-wider" : "px-6 py-3 text-right text-xs font-medium uppercase tracking-wider", "text-neutral-500 dark:text-neutral-200");
7686
+ return joinClasses(props.dense ? "px-3 py-2 text-right text-xs font-medium uppercase tracking-wider" : "px-6 py-3 text-right text-xs font-medium uppercase tracking-wider", "w-px whitespace-nowrap text-neutral-500 dark:text-neutral-200", props.stickyActions ? "sticky z-30 bg-neutral-50 shadow-[-1px_0_0_rgb(229_229_229)] dark:bg-neutral-900 dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "");
7266
7687
  });
7267
7688
  const actionCellClass = computed(() => {
7268
- return joinClasses(props.dense ? "px-3 py-2 whitespace-nowrap text-right text-sm font-medium" : "px-6 py-4 whitespace-nowrap text-right text-sm font-medium");
7689
+ return joinClasses(props.dense ? "px-3 py-2 whitespace-nowrap text-right text-sm font-medium" : "px-6 py-4 whitespace-nowrap text-right text-sm font-medium", "w-px", props.stickyActions ? "sticky z-20 bg-inherit shadow-[-1px_0_0_rgb(229_229_229)] dark:shadow-[-1px_0_0_rgb(38_38_38)]" : "");
7690
+ });
7691
+ const actionColumnStyle = computed(() => {
7692
+ return props.stickyActions ? { right: `${stickyOffsets.value.__actions ?? 0}px` } : {};
7269
7693
  });
7270
7694
  return (_ctx, _cache) => {
7271
- return openBlock(), createElementBlock("div", { class: normalizeClass(["bg-white dark:bg-neutral-950", __props.isCard ? "mx-4 rounded-xl animate-fadeIn border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden" : ""]) }, [__props.search ? (openBlock(), createElementBlock("div", {
7695
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["min-w-0 max-w-full bg-white dark:bg-neutral-950", __props.isCard ? "mx-4 rounded-xl animate-fadeIn border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden" : ""]) }, [__props.search ? (openBlock(), createElementBlock("div", {
7272
7696
  key: 0,
7273
7697
  class: normalizeClass(["px-6 py-4", __props.isCard ? "rounded-t-xl border-b border-neutral-200 bg-neutral-50/80 dark:border-neutral-800 dark:bg-neutral-900/80" : "mb-4 bg-white/80 backdrop-blur-sm dark:bg-neutral-950/80"])
7274
- }, [createVNode(_sfc_main$16, {
7698
+ }, [createVNode(_sfc_main$17, {
7275
7699
  "model-value": searchQuery.value,
7276
7700
  type: "text",
7277
7701
  "root-class": "max-w-sm",
@@ -7282,12 +7706,17 @@ var _sfc_main = {
7282
7706
  _: 1
7283
7707
  }, 8, ["model-value", "placeholder"])], 2)) : createCommentVNode("", true), hasData.value ? (openBlock(), createElementBlock("div", {
7284
7708
  key: 1,
7285
- class: normalizeClass(["overflow-x-auto", __props.isCard ? __props.search ? "" : "rounded-t-xl" : ""])
7286
- }, [createElementVNode("table", { class: normalizeClass(joinClasses("min-w-full divide-y divide-neutral-200 dark:divide-neutral-800", __props.tableClass)) }, [createElementVNode("thead", { class: normalizeClass(joinClasses("bg-neutral-50 dark:bg-neutral-900", __props.theadClass)) }, [createElementVNode("tr", { class: normalizeClass(__props.headerRowClass) }, [
7709
+ class: normalizeClass(["min-w-0 max-w-full overflow-x-auto", __props.isCard ? __props.search ? "" : "rounded-t-xl" : ""])
7710
+ }, [createElementVNode("table", {
7711
+ ref_key: "tableRef",
7712
+ ref: tableRef,
7713
+ class: normalizeClass(joinClasses("min-w-full divide-y divide-neutral-200 dark:divide-neutral-800", __props.tableClass))
7714
+ }, [createElementVNode("thead", { class: normalizeClass(joinClasses("bg-neutral-50 dark:bg-neutral-900", __props.theadClass)) }, [createElementVNode("tr", { class: normalizeClass(__props.headerRowClass) }, [
7287
7715
  __props.orderable ? (openBlock(), createElementBlock("th", _hoisted_1$2, "#")) : createCommentVNode("", true),
7288
7716
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
7289
- return openBlock(), createElementBlock(Fragment, { key: column.key }, [column.sortable ? (openBlock(), createBlock(_sfc_main$3, {
7717
+ return openBlock(), createElementBlock(Fragment, { key: column.key }, [column.sortable ? (openBlock(), createBlock(_sfc_main$4, {
7290
7718
  key: 0,
7719
+ "data-table-sticky-key": isStickyColumn(column) ? column.key : void 0,
7291
7720
  field: column.key,
7292
7721
  "current-sort-field": localSortField.value,
7293
7722
  "current-direction": localSortDirection.value,
@@ -7299,6 +7728,7 @@ var _sfc_main = {
7299
7728
  default: withCtx(() => [createTextVNode(toDisplayString(column.label), 1)]),
7300
7729
  _: 2
7301
7730
  }, 1032, [
7731
+ "data-table-sticky-key",
7302
7732
  "field",
7303
7733
  "current-sort-field",
7304
7734
  "current-direction",
@@ -7307,27 +7737,30 @@ var _sfc_main = {
7307
7737
  "content-class"
7308
7738
  ])) : (openBlock(), createElementBlock("th", {
7309
7739
  key: 1,
7740
+ "data-table-sticky-key": isStickyColumn(column) ? column.key : void 0,
7310
7741
  class: normalizeClass(getHeaderClass(column)),
7311
7742
  style: normalizeStyle(getColumnWidthStyle(column))
7312
- }, [createElementVNode("div", { class: normalizeClass(getContentClass(column)) }, toDisplayString(column.label), 3)], 6))], 64);
7743
+ }, [createElementVNode("div", { class: normalizeClass(getContentClass(column)) }, toDisplayString(column.label), 3)], 14, _hoisted_2$1))], 64);
7313
7744
  }), 128)),
7314
7745
  hasActionsColumn.value ? (openBlock(), createElementBlock("th", {
7315
7746
  key: 1,
7316
- class: normalizeClass(actionHeaderClass.value)
7317
- }, toDisplayString(__props.actionsLabel), 3)) : createCommentVNode("", true)
7747
+ "data-table-sticky-key": __props.stickyActions ? "__actions" : void 0,
7748
+ class: normalizeClass(actionHeaderClass.value),
7749
+ style: normalizeStyle(actionColumnStyle.value)
7750
+ }, toDisplayString(__props.actionsLabel), 15, _hoisted_3$1)) : createCommentVNode("", true)
7318
7751
  ], 2)], 2), createElementVNode("tbody", { class: normalizeClass(joinClasses("divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950", __props.tbodyClass)) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(sortedData.value, (item, index) => {
7319
7752
  return openBlock(), createElementBlock(Fragment, { key: getRowKey$1(item, index) }, [createElementVNode("tr", {
7320
7753
  class: normalizeClass(joinClasses(__props.rowClasses(item, index), dragOverIndex.value === index ? "ring-2 ring-inset ring-neutral-400 dark:ring-neutral-500" : "")),
7321
7754
  onDragover: withModifiers(($event) => canReorder.value && (dragOverIndex.value = index), ["prevent"]),
7322
7755
  onDrop: ($event) => dropRow(index, $event)
7323
7756
  }, [
7324
- __props.orderable ? (openBlock(), createElementBlock("td", _hoisted_3$1, [createElementVNode("span", _hoisted_4, [createElementVNode("span", {
7757
+ __props.orderable ? (openBlock(), createElementBlock("td", _hoisted_5, [createElementVNode("span", _hoisted_6, [createElementVNode("span", {
7325
7758
  draggable: canReorder.value,
7326
7759
  class: "cursor-grab touch-none active:cursor-grabbing",
7327
7760
  "aria-label": `Drag row ${index + 1}`,
7328
7761
  onDragstart: ($event) => startDrag(index, $event),
7329
7762
  onDragend: endDrag
7330
- }, [createVNode(unref(GripVertical), { class: "size-4" })], 40, _hoisted_5), createElementVNode("span", null, toDisplayString(index + 1), 1)])])) : createCommentVNode("", true),
7763
+ }, [createVNode(unref(GripVertical), { class: "size-4" })], 40, _hoisted_7), createElementVNode("span", null, toDisplayString(index + 1), 1)])])) : createCommentVNode("", true),
7331
7764
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
7332
7765
  return openBlock(), createElementBlock("td", {
7333
7766
  key: column.key,
@@ -7336,7 +7769,7 @@ var _sfc_main = {
7336
7769
  }, [createElementVNode("div", { class: normalizeClass(getContentClass(column)) }, [isEditingRow(item, index) && column.slot && unref(slots)[getEditSlotName(column)] ? renderSlot(_ctx.$slots, getEditSlotName(column), mergeProps({
7337
7770
  key: 0,
7338
7771
  ref_for: true
7339
- }, getSlotBindings(item, column, index))) : isEditingRow(item, index) && column.input ? (openBlock(), createBlock(_sfc_main$16, {
7772
+ }, getSlotBindings(item, column, index))) : isEditingRow(item, index) && column.input ? (openBlock(), createBlock(_sfc_main$17, {
7340
7773
  key: 1,
7341
7774
  type: getInputType(column),
7342
7775
  class: normalizeClass(getInputClass(column)),
@@ -7358,24 +7791,25 @@ var _sfc_main = {
7358
7791
  "error-message",
7359
7792
  "onUpdate:modelValue",
7360
7793
  "onBlur"
7361
- ])) : column.key === "name" && !column.slot ? (openBlock(), createElementBlock("div", _hoisted_6, [createElementVNode("div", {
7794
+ ])) : column.key === "name" && !column.slot ? (openBlock(), createElementBlock("div", _hoisted_8, [createElementVNode("div", {
7362
7795
  class: "text-sm font-medium truncate",
7363
7796
  title: getCellContent(item, column)
7364
- }, toDisplayString(getCellContent(item, column)), 9, _hoisted_7), isDeleted(item) ? (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(__props.deletedLabel), 1)) : createCommentVNode("", true)])) : column.slot ? renderSlot(_ctx.$slots, column.slot, mergeProps({
7797
+ }, toDisplayString(getCellContent(item, column)), 9, _hoisted_9), isDeleted(item) ? (openBlock(), createElementBlock("span", _hoisted_10, toDisplayString(__props.deletedLabel), 1)) : createCommentVNode("", true)])) : column.slot ? renderSlot(_ctx.$slots, column.slot, mergeProps({
7365
7798
  key: 3,
7366
7799
  ref_for: true
7367
7800
  }, getSlotBindings(item, column, index))) : column.render ? (openBlock(), createElementBlock("div", {
7368
7801
  key: 4,
7369
7802
  innerHTML: column.render(item)
7370
- }, null, 8, _hoisted_9)) : (openBlock(), createElementBlock("div", _hoisted_10, toDisplayString(getCellContent(item, column)), 1))], 2)], 6);
7803
+ }, null, 8, _hoisted_11)) : (openBlock(), createElementBlock("div", _hoisted_12, toDisplayString(getCellContent(item, column)), 1))], 2)], 6);
7371
7804
  }), 128)),
7372
7805
  hasActionsColumn.value ? (openBlock(), createElementBlock("td", {
7373
7806
  key: 1,
7374
- class: normalizeClass(actionCellClass.value)
7375
- }, [createElementVNode("div", _hoisted_11, [hasActionsSlot.value ? renderSlot(_ctx.$slots, "actions", mergeProps({
7807
+ class: normalizeClass(actionCellClass.value),
7808
+ style: normalizeStyle(actionColumnStyle.value)
7809
+ }, [createElementVNode("div", _hoisted_13, [hasActionsSlot.value ? renderSlot(_ctx.$slots, "actions", mergeProps({
7376
7810
  key: 0,
7377
7811
  ref_for: true
7378
- }, getSlotBindings(item, null, index))) : createCommentVNode("", true), __props.rowEditing && isEditingRow(item, index) ? (openBlock(), createBlock(_sfc_main$32, {
7812
+ }, getSlotBindings(item, null, index))) : createCommentVNode("", true), __props.rowEditing && isEditingRow(item, index) ? (openBlock(), createBlock(_sfc_main$33, {
7379
7813
  key: 1,
7380
7814
  type: "button",
7381
7815
  variant: "outline",
@@ -7390,7 +7824,7 @@ var _sfc_main = {
7390
7824
  "title",
7391
7825
  "aria-label",
7392
7826
  "onClick"
7393
- ])) : __props.rowEditing ? (openBlock(), createBlock(_sfc_main$32, {
7827
+ ])) : __props.rowEditing ? (openBlock(), createBlock(_sfc_main$33, {
7394
7828
  key: 2,
7395
7829
  type: "button",
7396
7830
  variant: "secondary",
@@ -7407,8 +7841,8 @@ var _sfc_main = {
7407
7841
  "title",
7408
7842
  "aria-label",
7409
7843
  "onClick"
7410
- ])) : createCommentVNode("", true)])], 2)) : createCommentVNode("", true)
7411
- ], 42, _hoisted_2$1), hasExpandedRow.value && __props.expandedRowKey === getRowKey$1(item, index) ? (openBlock(), createElementBlock("tr", {
7844
+ ])) : createCommentVNode("", true)])], 6)) : createCommentVNode("", true)
7845
+ ], 42, _hoisted_4), hasExpandedRow.value && __props.expandedRowKey === getRowKey$1(item, index) ? (openBlock(), createElementBlock("tr", {
7412
7846
  key: 0,
7413
7847
  class: normalizeClass(__props.expandedRowClass)
7414
7848
  }, [createElementVNode("td", {
@@ -7418,12 +7852,12 @@ var _sfc_main = {
7418
7852
  item,
7419
7853
  index,
7420
7854
  rowKey: getRowKey$1(item, index)
7421
- })], 10, _hoisted_12)], 2)) : createCommentVNode("", true)], 64);
7422
- }), 128))], 2)], 2)], 2)) : (openBlock(), createElementBlock("div", _hoisted_13, [
7423
- createElementVNode("div", _hoisted_14, [(openBlock(), createBlock(resolveDynamicComponent(__props.emptyState.icon), { class: "h-8 w-8 text-neutral-400 dark:text-neutral-200" }))]),
7424
- createElementVNode("h3", _hoisted_15, toDisplayString(__props.emptyState.title), 1),
7425
- createElementVNode("p", _hoisted_16, toDisplayString(__props.emptyState.description), 1),
7426
- __props.emptyState.actionText && __props.emptyState.actionUrl ? (openBlock(), createBlock(_sfc_main$6, {
7855
+ })], 10, _hoisted_14)], 2)) : createCommentVNode("", true)], 64);
7856
+ }), 128))], 2)], 2)], 2)) : (openBlock(), createElementBlock("div", _hoisted_15, [
7857
+ createElementVNode("div", _hoisted_16, [(openBlock(), createBlock(resolveDynamicComponent(__props.emptyState.icon), { class: "h-8 w-8 text-neutral-400 dark:text-neutral-200" }))]),
7858
+ createElementVNode("h3", _hoisted_17, toDisplayString(__props.emptyState.title), 1),
7859
+ createElementVNode("p", _hoisted_18, toDisplayString(__props.emptyState.description), 1),
7860
+ __props.emptyState.actionText && __props.emptyState.actionUrl ? (openBlock(), createBlock(_sfc_main$7, {
7427
7861
  key: 0,
7428
7862
  href: __props.emptyState.actionUrl,
7429
7863
  variant: "primary"
@@ -7555,38 +7989,39 @@ var ToastContainer_default = /* @__PURE__ */ defineComponent({
7555
7989
  //#endregion
7556
7990
  //#region src/exports.ts
7557
7991
  var exports_exports = /* @__PURE__ */ __exportAll({
7558
- ActionCard: () => _sfc_main$37,
7559
- ActionMessage: () => _sfc_main$36,
7560
- ActionSection: () => _sfc_main$34,
7561
- Badge: () => _sfc_main$33,
7562
- Button: () => _sfc_main$32,
7563
- Card: () => _sfc_main$39,
7564
- CardTabs: () => _sfc_main$40,
7565
- Checkbox: () => _sfc_main$31,
7566
- CheckboxInput: () => _sfc_main$30,
7567
- CheckboxMultipleInput: () => _sfc_main$15,
7992
+ ActionCard: () => _sfc_main$38,
7993
+ ActionMessage: () => _sfc_main$37,
7994
+ ActionSection: () => _sfc_main$35,
7995
+ Badge: () => _sfc_main$34,
7996
+ Button: () => _sfc_main$33,
7997
+ Card: () => _sfc_main$40,
7998
+ CardTabs: () => _sfc_main$41,
7999
+ Checkbox: () => _sfc_main$32,
8000
+ CheckboxInput: () => _sfc_main$31,
8001
+ CheckboxMultipleInput: () => _sfc_main$16,
7568
8002
  ColorPicker: () => ColorPicker_default,
7569
- ConfirmationModal: () => _sfc_main$13,
7570
- CustomSelect: () => _sfc_main$27,
8003
+ ConfirmationModal: () => _sfc_main$14,
8004
+ CustomSelect: () => _sfc_main$28,
7571
8005
  DateInput: () => DateInput_default,
7572
8006
  DateRangeInput: () => DateRangeInput_default,
7573
- DialogModal: () => _sfc_main$12,
7574
- Divider: () => _sfc_main$38,
7575
- Dropdown: () => _sfc_main$11,
7576
- DropdownLink: () => _sfc_main$10,
7577
- FormSection: () => _sfc_main$9,
7578
- ImageInput: () => _sfc_main$23,
7579
- InputError: () => _sfc_main$8,
7580
- InputGroup: () => _sfc_main$16,
7581
- InputLabel: () => _sfc_main$7,
7582
- LinkButton: () => _sfc_main$6,
7583
- Modal: () => _sfc_main$14,
7584
- NotationInput: () => _sfc_main$22,
7585
- RadioInput: () => _sfc_main$21,
7586
- RadioMultipleInput: () => _sfc_main$19,
7587
- SectionBorder: () => _sfc_main$5,
8007
+ DialogModal: () => _sfc_main$13,
8008
+ Divider: () => _sfc_main$39,
8009
+ Dropdown: () => _sfc_main$12,
8010
+ DropdownLink: () => _sfc_main$11,
8011
+ FloatingActionHint: () => FloatingActionHint_default,
8012
+ FormSection: () => _sfc_main$10,
8013
+ ImageInput: () => _sfc_main$24,
8014
+ InputError: () => _sfc_main$9,
8015
+ InputGroup: () => _sfc_main$17,
8016
+ InputLabel: () => _sfc_main$8,
8017
+ LinkButton: () => _sfc_main$7,
8018
+ Modal: () => _sfc_main$15,
8019
+ NotationInput: () => _sfc_main$23,
8020
+ RadioInput: () => _sfc_main$22,
8021
+ RadioMultipleInput: () => _sfc_main$20,
8022
+ SectionBorder: () => _sfc_main$6,
7588
8023
  SectionTitle: () => SectionTitle_default,
7589
- SelectInput: () => _sfc_main$26,
8024
+ SelectInput: () => _sfc_main$27,
7590
8025
  Sidebar: () => Sidebar_default,
7591
8026
  SidebarContent: () => SidebarContent_default,
7592
8027
  SidebarFooter: () => SidebarFooter_default,
@@ -7601,17 +8036,17 @@ var exports_exports = /* @__PURE__ */ __exportAll({
7601
8036
  SidebarProvider: () => SidebarProvider_default,
7602
8037
  SidebarTrigger: () => SidebarTrigger_default,
7603
8038
  SlidePanel: () => SlidePanel_default,
7604
- SortControls: () => _sfc_main$4,
8039
+ SortControls: () => _sfc_main$5,
7605
8040
  TableList: () => _sfc_main$1,
7606
8041
  TableListForm: () => _sfc_main,
7607
- TableSearch: () => _sfc_main$2,
7608
- TextArea: () => _sfc_main$28,
7609
- TextInput: () => _sfc_main$29,
7610
- ThSortable: () => _sfc_main$3,
7611
- TinyEditor: () => _sfc_main$18,
8042
+ TableSearch: () => _sfc_main$3,
8043
+ TextArea: () => _sfc_main$29,
8044
+ TextInput: () => _sfc_main$30,
8045
+ ThSortable: () => _sfc_main$4,
8046
+ TinyEditor: () => _sfc_main$19,
7612
8047
  Toast: () => Toast_default,
7613
8048
  ToastContainer: () => ToastContainer_default,
7614
- ToggleInput: () => _sfc_main$20,
8049
+ ToggleInput: () => _sfc_main$21,
7615
8050
  useSidebar: () => useSidebar
7616
8051
  });
7617
8052
  //#endregion
@@ -7620,6 +8055,6 @@ var plugin_default = { install(app) {
7620
8055
  for (const [name, component] of Object.entries(exports_exports)) app.component(name, component);
7621
8056
  } };
7622
8057
  //#endregion
7623
- export { _sfc_main$34 as $, _sfc_main$11 as A, _sfc_main$21 as B, useSidebar as C, _sfc_main$8 as D, _sfc_main$7 as E, _sfc_main$16 as F, _sfc_main$26 as G, _sfc_main$23 as H, ColorPicker_default as I, _sfc_main$29 as J, _sfc_main$27 as K, _sfc_main$18 as L, _sfc_main$13 as M, _sfc_main$14 as N, _sfc_main$9 as O, _sfc_main$15 as P, _sfc_main$33 as Q, _sfc_main$19 as R, Sidebar_default as S, _sfc_main$6 as T, DateRangeInput_default as U, _sfc_main$22 as V, DateInput_default as W, _sfc_main$31 as X, _sfc_main$30 as Y, _sfc_main$32 as Z, SidebarGroupLabel_default as _, _sfc_main$1 as a, _sfc_main$40 as at, SidebarFooter_default as b, _sfc_main$4 as c, SidebarProvider_default as d, SectionTitle_default as et, SidebarMenuItem_default as f, SidebarHeader_default as g, SidebarInset_default as h, _sfc_main as i, _sfc_main$39 as it, _sfc_main$12 as j, _sfc_main$10 as k, SlidePanel_default as l, SidebarMenu_default as m, ToastContainer_default as n, _sfc_main$37 as nt, _sfc_main$2 as o, __commonJSMin as ot, SidebarMenuButton_default as p, _sfc_main$28 as q, Toast_default as r, _sfc_main$38 as rt, _sfc_main$3 as s, plugin_default as t, _sfc_main$36 as tt, SidebarTrigger_default as u, SidebarGroupContent_default as v, _sfc_main$5 as w, SidebarContent_default as x, SidebarGroup_default as y, _sfc_main$20 as z };
8058
+ export { _sfc_main$34 as $, _sfc_main$11 as A, _sfc_main$21 as B, useSidebar as C, _sfc_main$9 as D, _sfc_main$8 as E, _sfc_main$16 as F, DateInput_default as G, _sfc_main$23 as H, _sfc_main$17 as I, _sfc_main$29 as J, _sfc_main$27 as K, ColorPicker_default as L, _sfc_main$13 as M, _sfc_main$14 as N, _sfc_main$10 as O, _sfc_main$15 as P, _sfc_main$33 as Q, _sfc_main$19 as R, Sidebar_default as S, _sfc_main$7 as T, _sfc_main$24 as U, _sfc_main$22 as V, DateRangeInput_default as W, _sfc_main$31 as X, _sfc_main$30 as Y, _sfc_main$32 as Z, SidebarGroupLabel_default as _, _sfc_main$1 as a, _sfc_main$40 as at, SidebarFooter_default as b, _sfc_main$5 as c, SidebarProvider_default as d, _sfc_main$35 as et, SidebarMenuItem_default as f, SidebarHeader_default as g, SidebarInset_default as h, _sfc_main as i, _sfc_main$39 as it, _sfc_main$12 as j, FloatingActionHint_default as k, SlidePanel_default as l, SidebarMenu_default as m, ToastContainer_default as n, _sfc_main$37 as nt, _sfc_main$3 as o, _sfc_main$41 as ot, SidebarMenuButton_default as p, _sfc_main$28 as q, Toast_default as r, _sfc_main$38 as rt, _sfc_main$4 as s, __commonJSMin as st, plugin_default as t, SectionTitle_default as tt, SidebarTrigger_default as u, SidebarGroupContent_default as v, _sfc_main$6 as w, SidebarContent_default as x, SidebarGroup_default as y, _sfc_main$20 as z };
7624
8059
 
7625
- //# sourceMappingURL=plugin-BXdUiTUI.js.map
8060
+ //# sourceMappingURL=plugin-CkWJbkrp.js.map