@flux-ui/components 3.1.2 → 3.1.3

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 (61) hide show
  1. package/dist/component/FluxAvatarGroup.vue.d.ts +17 -0
  2. package/dist/component/FluxContextMenu.vue.d.ts +26 -0
  3. package/dist/component/FluxDataTable.vue.d.ts +20 -10
  4. package/dist/component/FluxDescriptionItem.vue.d.ts +19 -0
  5. package/dist/component/FluxDescriptionList.vue.d.ts +17 -0
  6. package/dist/component/FluxFormCombobox.vue.d.ts +20 -0
  7. package/dist/component/FluxFormRating.vue.d.ts +21 -0
  8. package/dist/component/FluxFormTagsInput.vue.d.ts +27 -0
  9. package/dist/component/FluxFormTextArea.vue.d.ts +6 -1
  10. package/dist/component/FluxInlineEdit.vue.d.ts +41 -0
  11. package/dist/component/FluxMenu.vue.d.ts +1 -0
  12. package/dist/component/FluxMenuFlyout.vue.d.ts +22 -0
  13. package/dist/component/FluxTableCell.vue.d.ts +1 -0
  14. package/dist/component/FluxTour.vue.d.ts +35 -0
  15. package/dist/component/FluxTourItem.vue.d.ts +18 -0
  16. package/dist/component/FluxVirtualScroller.vue.d.ts +27 -0
  17. package/dist/component/index.d.ts +12 -0
  18. package/dist/component/primitive/AnchorPopup.vue.d.ts +7 -1
  19. package/dist/component/primitive/SelectBase.vue.d.ts +3 -0
  20. package/dist/composable/private/index.d.ts +1 -0
  21. package/dist/composable/private/useMenuFlyout.d.ts +42 -0
  22. package/dist/data/di.d.ts +35 -0
  23. package/dist/data/i18n.d.ts +7 -0
  24. package/dist/index.css +441 -1
  25. package/dist/index.js +2018 -407
  26. package/dist/index.js.map +1 -1
  27. package/package.json +7 -7
  28. package/src/component/FluxAvatarGroup.vue +52 -0
  29. package/src/component/FluxContextMenu.vue +134 -0
  30. package/src/component/FluxDataTable.vue +113 -32
  31. package/src/component/FluxDescriptionItem.vue +43 -0
  32. package/src/component/FluxDescriptionList.vue +37 -0
  33. package/src/component/FluxFormCombobox.vue +98 -0
  34. package/src/component/FluxFormRating.vue +172 -0
  35. package/src/component/FluxFormTagsInput.vue +249 -0
  36. package/src/component/FluxFormTextArea.vue +16 -1
  37. package/src/component/FluxInlineEdit.vue +176 -0
  38. package/src/component/FluxMenu.vue +13 -3
  39. package/src/component/FluxMenuFlyout.vue +118 -0
  40. package/src/component/FluxTableCell.vue +2 -0
  41. package/src/component/FluxTour.vue +332 -0
  42. package/src/component/FluxTourItem.vue +27 -0
  43. package/src/component/FluxVirtualScroller.vue +96 -0
  44. package/src/component/index.ts +12 -0
  45. package/src/component/primitive/AnchorPopup.vue +27 -0
  46. package/src/component/primitive/SelectBase.vue +37 -2
  47. package/src/composable/private/index.ts +1 -0
  48. package/src/composable/private/useMenuFlyout.ts +417 -0
  49. package/src/css/component/AvatarGroup.module.scss +22 -0
  50. package/src/css/component/ContextMenu.module.scss +17 -0
  51. package/src/css/component/DescriptionList.module.scss +98 -0
  52. package/src/css/component/Form.module.scss +51 -0
  53. package/src/css/component/FormRating.module.scss +47 -0
  54. package/src/css/component/InlineEdit.module.scss +45 -0
  55. package/src/css/component/Menu.module.scss +4 -1
  56. package/src/css/component/MenuFlyout.module.scss +38 -0
  57. package/src/css/component/Table.module.scss +16 -0
  58. package/src/css/component/Tour.module.scss +108 -0
  59. package/src/css/component/VirtualScroller.module.scss +17 -0
  60. package/src/data/di.ts +40 -0
  61. package/src/data/i18n.ts +7 -0
package/dist/index.js CHANGED
@@ -72,6 +72,7 @@ var FluxFilterInjectionKey = Symbol();
72
72
  var FluxFormCheckboxGroupInjectionKey = Symbol();
73
73
  var FluxFormFieldInjectionKey = Symbol();
74
74
  var FluxFormRadioGroupInjectionKey = Symbol();
75
+ var FluxMenuFlyoutInjectionKey = Symbol();
75
76
  var FluxSegmentedControlInjectionKey = Symbol();
76
77
  var FluxTabBarInjectionKey = Symbol();
77
78
  var FluxTableInjectionKey = Symbol();
@@ -90,10 +91,14 @@ var english = {
90
91
  "flux.back": "Back",
91
92
  "flux.cancel": "Cancel",
92
93
  "flux.close": "Close",
94
+ "flux.collapseRow": "Collapse row",
95
+ "flux.expandRow": "Expand row",
93
96
  "flux.comingSoon": "Coming soon",
94
97
  "flux.continue": "Continue",
98
+ "flux.createOption": "Create \"{value}\"",
95
99
  "flux.customPeriod": "Custom period",
96
100
  "flux.delete": "Delete",
101
+ "flux.done": "Done",
97
102
  "flux.filter": "Filter",
98
103
  "flux.filterReset": "Reset filters",
99
104
  "flux.justNow": "Just now",
@@ -106,6 +111,7 @@ var english = {
106
111
  "flux.previewClose": "Close preview",
107
112
  "flux.displayingOf": "{from}–{to} of {total}",
108
113
  "flux.showN": "Show {n}",
114
+ "flux.skip": "Skip",
109
115
  "flux.next": "Next",
110
116
  "flux.noItems": "There are no items (left).",
111
117
  "flux.pagination": "Pagination",
@@ -118,6 +124,7 @@ var english = {
118
124
  "flux.sortAscending": "Ascending",
119
125
  "flux.sortDescending": "Descending",
120
126
  "flux.sortRemove": "Remove sorting",
127
+ "flux.submenu": "Submenu",
121
128
  "flux.today": "Today",
122
129
  "flux.selectMonth": "Select month",
123
130
  "flux.selectYear": "Select year",
@@ -127,6 +134,7 @@ var english = {
127
134
  "flux.previousYears": "Previous years",
128
135
  "flux.nextYears": "Next years",
129
136
  "flux.allDay": "All day",
137
+ "flux.andNMore": "{n} more",
130
138
  "flux.grabbedAnnounce": "Item grabbed. Use arrow keys to move, Enter to drop, Escape to cancel.",
131
139
  "flux.releasedAnnounce": "Item released.",
132
140
  "flux.goToPage": "Go to page {page}",
@@ -2451,7 +2459,7 @@ function useTooltipInjection_default() {
2451
2459
  return inject(FluxTooltipInjectionKey, { calculate: () => void 0 });
2452
2460
  }
2453
2461
  //#endregion
2454
- //#region ../../node_modules/.bun/@basmilius+utils@3.41.0+f2ed1ec6a4c7f7fd/node_modules/@basmilius/utils/dist/index.mjs
2462
+ //#region ../../node_modules/.bun/@basmilius+utils@3.43.0+f2ed1ec6a4c7f7fd/node_modules/@basmilius/utils/dist/index.mjs
2455
2463
  function t$1(e, t) {
2456
2464
  return Math.round(e / t) * t;
2457
2465
  }
@@ -6663,7 +6671,7 @@ useMode(definition$2);
6663
6671
  useMode(definition$1);
6664
6672
  useMode(definition);
6665
6673
  //#endregion
6666
- //#region ../../node_modules/.bun/@basmilius+http-client@3.41.0+4c8d5b4efb44798e/node_modules/@basmilius/http-client/dist/index.mjs
6674
+ //#region ../../node_modules/.bun/@basmilius+http-client@3.43.0+8e5bcfeee95dacb4/node_modules/@basmilius/http-client/dist/index.mjs
6667
6675
  function adapter_default(Parent) {
6668
6676
  return class extends Parent {
6669
6677
  constructor(...args) {
@@ -7227,7 +7235,7 @@ function Y$1(t = 0, n = !1) {
7227
7235
  loaded: o
7228
7236
  };
7229
7237
  }
7230
- function me$1(e, t) {
7238
+ function ye$1(e, t) {
7231
7239
  let n = ref();
7232
7240
  onMounted(() => {
7233
7241
  i();
@@ -7241,7 +7249,7 @@ function me$1(e, t) {
7241
7249
  r(), t();
7242
7250
  }
7243
7251
  }
7244
- function ye$1(e, t, n) {
7252
+ function we$1(e, t, n) {
7245
7253
  n ??= { attributes: !0 };
7246
7254
  let r, i = watch(e, (e) => {
7247
7255
  a();
@@ -7257,7 +7265,7 @@ function ye$1(e, t, n) {
7257
7265
  onScopeDispose(o);
7258
7266
  }
7259
7267
  RegExp(`[a-z]`), RegExp(`[A-Z]`), RegExp(`[0-9]`), RegExp(`[!"#$%&'()*+,-./:;<=>?@[\\\\\\]^_\`{|}~]`);
7260
- function Ce$1(e, t, n) {
7268
+ function Oe$1(e, t, n) {
7261
7269
  n ??= {};
7262
7270
  let r, i = watch(e, (e) => {
7263
7271
  a();
@@ -7592,7 +7600,7 @@ function I$1(t, n = {}) {
7592
7600
  }, { immediate: !0 });
7593
7601
  }
7594
7602
  function R$1(e, { cycle: t = !0, direction: n = `bidirectional` } = {}) {
7595
- ye$1(e, () => o(r(), !1), {
7603
+ we$1(e, () => o(r(), !1), {
7596
7604
  childList: !0,
7597
7605
  subtree: !0
7598
7606
  });
@@ -7698,29 +7706,29 @@ var Pane_module_default$1 = {
7698
7706
  };
7699
7707
  //#endregion
7700
7708
  //#region src/css/component/Icon.module.scss
7701
- var { "basePane": _0$16 } = Pane_module_default$1;
7709
+ var { "basePane": _0$18 } = Pane_module_default$1;
7702
7710
  var Icon_module_default = {
7703
7711
  icon: `icon`,
7704
7712
  fontAwesomeIcon: `font-awesome-icon icon`,
7705
- iconBoxed: `icon-boxed ${_0$16}`,
7706
- iconBoxedDefault: `icon-boxed-default icon-boxed ${_0$16}`,
7707
- iconBoxedColored: `icon-boxed-colored icon-boxed ${_0$16}`,
7708
- iconBoxedGray: `icon-boxed-gray icon-boxed-colored icon-boxed ${_0$16}`,
7709
- iconBoxedPrimary: `icon-boxed-primary icon-boxed-colored icon-boxed ${_0$16}`,
7710
- iconBoxedDanger: `icon-boxed-danger icon-boxed-colored icon-boxed ${_0$16}`,
7711
- iconBoxedInfo: `icon-boxed-info icon-boxed-colored icon-boxed ${_0$16}`,
7712
- iconBoxedSuccess: `icon-boxed-success icon-boxed-colored icon-boxed ${_0$16}`,
7713
- iconBoxedWarning: `icon-boxed-warning icon-boxed-colored icon-boxed ${_0$16}`
7713
+ iconBoxed: `icon-boxed ${_0$18}`,
7714
+ iconBoxedDefault: `icon-boxed-default icon-boxed ${_0$18}`,
7715
+ iconBoxedColored: `icon-boxed-colored icon-boxed ${_0$18}`,
7716
+ iconBoxedGray: `icon-boxed-gray icon-boxed-colored icon-boxed ${_0$18}`,
7717
+ iconBoxedPrimary: `icon-boxed-primary icon-boxed-colored icon-boxed ${_0$18}`,
7718
+ iconBoxedDanger: `icon-boxed-danger icon-boxed-colored icon-boxed ${_0$18}`,
7719
+ iconBoxedInfo: `icon-boxed-info icon-boxed-colored icon-boxed ${_0$18}`,
7720
+ iconBoxedSuccess: `icon-boxed-success icon-boxed-colored icon-boxed ${_0$18}`,
7721
+ iconBoxedWarning: `icon-boxed-warning icon-boxed-colored icon-boxed ${_0$18}`
7714
7722
  };
7715
7723
  //#endregion
7716
7724
  //#region src/component/FluxIcon.vue?vue&type=script&setup=true&lang.ts
7717
- var _hoisted_1$67 = [
7725
+ var _hoisted_1$73 = [
7718
7726
  "viewBox",
7719
7727
  "role",
7720
7728
  "aria-hidden",
7721
7729
  "aria-label"
7722
7730
  ];
7723
- var _hoisted_2$26 = ["d"];
7731
+ var _hoisted_2$28 = ["d"];
7724
7732
  //#endregion
7725
7733
  //#region src/component/FluxIcon.vue
7726
7734
  var FluxIcon_default = /* @__PURE__ */ defineComponent({
@@ -7766,8 +7774,8 @@ var FluxIcon_default = /* @__PURE__ */ defineComponent({
7766
7774
  return openBlock(), createElementBlock("path", {
7767
7775
  d: path,
7768
7776
  fill: "currentColor"
7769
- }, null, 8, _hoisted_2$26);
7770
- }), 256))], 14, _hoisted_1$67)) : (openBlock(), createElementBlock("i", {
7777
+ }, null, 8, _hoisted_2$28);
7778
+ }), 256))], 14, _hoisted_1$73)) : (openBlock(), createElementBlock("i", {
7771
7779
  key: 1,
7772
7780
  class: normalizeClass(unref(Icon_module_default).icon)
7773
7781
  }, null, 2));
@@ -8702,6 +8710,266 @@ function useKanban(options) {
8702
8710
  };
8703
8711
  }
8704
8712
  //#endregion
8713
+ //#region src/composable/private/useMenuFlyout.ts
8714
+ var flyoutId = 0;
8715
+ /**
8716
+ * Creates and provides the shared menu-flyout context for an entire open menu tree. Used by the
8717
+ * outermost menu surface (FluxContextMenu, or a standalone root FluxMenu). Tracks the pointer, the
8718
+ * active prediction cone, the keyboard-trap stack and the set of teleported flyout popups so that
8719
+ * click-outside and close-all can reason about the whole tree.
8720
+ */
8721
+ function useMenuFlyoutProvider(options) {
8722
+ const { debugCone, onCloseAll } = options;
8723
+ const entries = /* @__PURE__ */ new Set();
8724
+ const pointer = ref({
8725
+ x: 0,
8726
+ y: 0,
8727
+ px: 0,
8728
+ py: 0
8729
+ });
8730
+ const activeCone = ref(null);
8731
+ const keyboardStack = ref([]);
8732
+ let pointerX = 0;
8733
+ let pointerY = 0;
8734
+ const flushPointer = i$2(() => {
8735
+ const previous = pointer.value;
8736
+ pointer.value = {
8737
+ x: pointerX,
8738
+ y: pointerY,
8739
+ px: previous.x,
8740
+ py: previous.y
8741
+ };
8742
+ });
8743
+ function onPointerMove(evt) {
8744
+ pointerX = evt.clientX;
8745
+ pointerY = evt.clientY;
8746
+ flushPointer();
8747
+ }
8748
+ function startTracking() {
8749
+ if (C$2) return;
8750
+ window.addEventListener("pointermove", onPointerMove, {
8751
+ capture: true,
8752
+ passive: true
8753
+ });
8754
+ }
8755
+ function stopTracking() {
8756
+ if (C$2) return;
8757
+ window.removeEventListener("pointermove", onPointerMove, { capture: true });
8758
+ }
8759
+ const context = {
8760
+ debugCone,
8761
+ pointer,
8762
+ activeCone,
8763
+ keyboardStack,
8764
+ register(entry) {
8765
+ if (entries.size === 0) startTracking();
8766
+ entries.add(entry);
8767
+ },
8768
+ unregister(entry) {
8769
+ entries.delete(entry);
8770
+ if (entries.size === 0) {
8771
+ stopTracking();
8772
+ activeCone.value = null;
8773
+ }
8774
+ },
8775
+ closeOthers(self) {
8776
+ const trigger = self.getTrigger();
8777
+ for (const entry of entries) {
8778
+ if (entry === self || !entry.isOpen.value) continue;
8779
+ const popup = entry.getPopup();
8780
+ if (popup && trigger && popup.contains(trigger)) continue;
8781
+ entry.close();
8782
+ }
8783
+ },
8784
+ hasOpenDescendant(self) {
8785
+ const popup = self.getPopup();
8786
+ if (!popup) return false;
8787
+ for (const entry of entries) {
8788
+ if (entry === self || !entry.isOpen.value) continue;
8789
+ const trigger = entry.getTrigger();
8790
+ if (trigger && popup.contains(trigger)) return true;
8791
+ }
8792
+ return false;
8793
+ },
8794
+ isAimingAtOpenSubmenu() {
8795
+ const { x, y, px, py } = pointer.value;
8796
+ for (const entry of entries) {
8797
+ if (!entry.isOpen.value) continue;
8798
+ const trigger = entry.getTrigger();
8799
+ const popup = entry.getPopup();
8800
+ if (!trigger || !popup) continue;
8801
+ const t = trigger.getBoundingClientRect();
8802
+ const r = popup.getBoundingClientRect();
8803
+ const edgeX = r.left >= t.right ? r.left : r.right <= t.left ? r.right : r.left;
8804
+ if (pointInTriangle(x, y, px, py, edgeX, r.top, edgeX, r.bottom)) return true;
8805
+ }
8806
+ return false;
8807
+ },
8808
+ isInsidePopups(target) {
8809
+ if (!target) return false;
8810
+ for (const entry of entries) {
8811
+ const popup = entry.getPopup();
8812
+ if (popup && popup.contains(target)) return true;
8813
+ }
8814
+ return false;
8815
+ },
8816
+ closeAll() {
8817
+ if (onCloseAll) {
8818
+ onCloseAll();
8819
+ return;
8820
+ }
8821
+ for (const entry of entries) entry.close();
8822
+ }
8823
+ };
8824
+ onUnmounted(stopTracking);
8825
+ provide(FluxMenuFlyoutInjectionKey, context);
8826
+ return context;
8827
+ }
8828
+ /**
8829
+ * Returns the shared menu-flyout context, creating (and providing) a new root context when none
8830
+ * exists higher up the tree. Used by FluxMenu so that a standalone menu becomes the root while a
8831
+ * menu nested inside a FluxContextMenu or another flyout inherits the existing context.
8832
+ */
8833
+ function useMenuFlyoutContext(options) {
8834
+ const parent = inject(FluxMenuFlyoutInjectionKey, null);
8835
+ if (parent) return parent;
8836
+ return useMenuFlyoutProvider(options);
8837
+ }
8838
+ /**
8839
+ * Per-flyout open/close and prediction-cone behaviour for FluxMenuFlyout. Submenus open instantly
8840
+ * on hover and close instantly once the pointer is neither over the trigger/popup (or an open
8841
+ * descendant) nor aiming at the submenu through the prediction cone (the safe triangle). There are
8842
+ * no open/close delays — the cone is the only thing that keeps a submenu open during a diagonal
8843
+ * move, which is also why the debug cone only shows while it actually applies.
8844
+ */
8845
+ function useMenuFlyout(options) {
8846
+ const { triggerRef, popupRef, disabled } = options;
8847
+ const context = inject(FluxMenuFlyoutInjectionKey, null);
8848
+ const id = ++flyoutId;
8849
+ const isOpen = ref(false);
8850
+ const openSource = ref("pointer");
8851
+ const cone = ref(null);
8852
+ const entry = {
8853
+ getTrigger: () => elementOf(triggerRef.value),
8854
+ getPopup: () => elementOf(popupRef.value),
8855
+ isOpen,
8856
+ close: () => doClose()
8857
+ };
8858
+ function open(source) {
8859
+ if (disabled?.value) return;
8860
+ openSource.value = source;
8861
+ if (context && source === "keyboard" && !context.keyboardStack.value.includes(id)) context.keyboardStack.value = [...context.keyboardStack.value, id];
8862
+ if (!isOpen.value) {
8863
+ isOpen.value = true;
8864
+ context?.closeOthers(entry);
8865
+ }
8866
+ if (source === "keyboard") nextTick(focusFirstItem);
8867
+ }
8868
+ function doClose() {
8869
+ if (!isOpen.value) return;
8870
+ isOpen.value = false;
8871
+ cone.value = null;
8872
+ if (context) {
8873
+ if (context.activeCone.value?.id === id) context.activeCone.value = null;
8874
+ context.keyboardStack.value = context.keyboardStack.value.filter((value) => value !== id);
8875
+ }
8876
+ }
8877
+ function focusTrigger() {
8878
+ elementOf(triggerRef.value)?.focus();
8879
+ }
8880
+ function focusFirstItem() {
8881
+ const popup = elementOf(popupRef.value);
8882
+ if (!popup) return;
8883
+ (popup.querySelector("[tabindex=\"0\"]") ?? popup.querySelector("a[href], button:not([disabled])"))?.focus();
8884
+ }
8885
+ function onTriggerClick(evt) {
8886
+ evt.stopPropagation();
8887
+ open(evt.detail === 0 ? "keyboard" : "pointer");
8888
+ }
8889
+ function onTriggerKeydown(evt) {
8890
+ if (evt.key === "ArrowRight") {
8891
+ evt.preventDefault();
8892
+ evt.stopPropagation();
8893
+ open("keyboard");
8894
+ }
8895
+ }
8896
+ function onPopupKeydown(evt) {
8897
+ if (evt.key === "ArrowLeft" || evt.key === "Escape") {
8898
+ evt.preventDefault();
8899
+ evt.stopPropagation();
8900
+ doClose();
8901
+ focusTrigger();
8902
+ }
8903
+ }
8904
+ if (context && !C$2) watch(context.pointer, () => {
8905
+ const trigger = elementOf(triggerRef.value);
8906
+ if (!trigger) return;
8907
+ const { x, y, px, py } = context.pointer.value;
8908
+ const t = trigger.getBoundingClientRect();
8909
+ const overTrigger = x >= t.left && x <= t.right && y >= t.top && y <= t.bottom;
8910
+ if (!isOpen.value) {
8911
+ if (overTrigger && !context.isAimingAtOpenSubmenu()) open("pointer");
8912
+ return;
8913
+ }
8914
+ const popup = elementOf(popupRef.value);
8915
+ if (!popup) return;
8916
+ const r = popup.getBoundingClientRect();
8917
+ const overPopup = x >= r.left && x <= r.right && y >= r.top && y <= r.bottom;
8918
+ if (overTrigger || overPopup || context.hasOpenDescendant(entry)) {
8919
+ cone.value = null;
8920
+ if (context.activeCone.value?.id === id) context.activeCone.value = null;
8921
+ return;
8922
+ }
8923
+ const edgeX = r.left >= t.right ? r.left : r.right <= t.left ? r.right : r.left;
8924
+ const candidate = {
8925
+ id,
8926
+ ax: x,
8927
+ ay: y,
8928
+ bx: edgeX,
8929
+ by: r.top,
8930
+ cx: edgeX,
8931
+ cy: r.bottom
8932
+ };
8933
+ if (pointInTriangle(x, y, px, py, edgeX, r.top, edgeX, r.bottom)) {
8934
+ cone.value = candidate;
8935
+ context.activeCone.value = candidate;
8936
+ } else {
8937
+ cone.value = null;
8938
+ if (context.activeCone.value?.id === id) context.activeCone.value = null;
8939
+ doClose();
8940
+ }
8941
+ });
8942
+ onMounted(() => context?.register(entry));
8943
+ onUnmounted(() => {
8944
+ doClose();
8945
+ context?.unregister(entry);
8946
+ });
8947
+ return {
8948
+ context,
8949
+ cone,
8950
+ isOpen,
8951
+ closeAll: () => context?.closeAll(),
8952
+ focusTrigger,
8953
+ onPopupKeydown,
8954
+ onTriggerClick,
8955
+ onTriggerKeydown
8956
+ };
8957
+ }
8958
+ function elementOf(value) {
8959
+ if (!value) return null;
8960
+ if (value instanceof HTMLElement) return value;
8961
+ return value.$el ?? null;
8962
+ }
8963
+ function pointInTriangle(px, py, ax, ay, bx, by, cx, cy) {
8964
+ const d1 = sign(px, py, ax, ay, bx, by);
8965
+ const d2 = sign(px, py, bx, by, cx, cy);
8966
+ const d3 = sign(px, py, cx, cy, ax, ay);
8967
+ return !((d1 < 0 || d2 < 0 || d3 < 0) && (d1 > 0 || d2 > 0 || d3 > 0));
8968
+ }
8969
+ function sign(px, py, ax, ay, bx, by) {
8970
+ return (px - bx) * (ay - by) - (ax - bx) * (py - by);
8971
+ }
8972
+ //#endregion
8705
8973
  //#region src/composable/private/useSplitView.ts
8706
8974
  var HANDLE_SIZE = 6;
8707
8975
  var KEY_STEP = 16;
@@ -9383,13 +9651,13 @@ function sanitizeUrl_default(href) {
9383
9651
  }
9384
9652
  //#endregion
9385
9653
  //#region src/component/FluxPressable.vue?vue&type=script&setup=true&lang.ts
9386
- var _hoisted_1$66 = [
9654
+ var _hoisted_1$72 = [
9387
9655
  "href",
9388
9656
  "rel",
9389
9657
  "target",
9390
9658
  "onClick"
9391
9659
  ];
9392
- var _hoisted_2$25 = [
9660
+ var _hoisted_2$27 = [
9393
9661
  "href",
9394
9662
  "rel",
9395
9663
  "target"
@@ -9437,14 +9705,14 @@ var FluxPressable_default = /* @__PURE__ */ defineComponent({
9437
9705
  rel: resolvedRel.value,
9438
9706
  target: __props.target,
9439
9707
  onClick: ($event) => onClick($event, navigate)
9440
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$66)]),
9708
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$72)]),
9441
9709
  _: 3
9442
9710
  }, 8, ["to"])) : __props.componentType === "link" ? (openBlock(), createElementBlock("a", mergeProps({ key: 1 }, $attrs, toHandlers(hoverListeners, true), {
9443
9711
  href: unref(sanitizeUrl_default)(__props.href),
9444
9712
  rel: resolvedRel.value,
9445
9713
  target: __props.target,
9446
9714
  onClick: _cache[0] || (_cache[0] = ($event) => onClick($event))
9447
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_2$25)) : __props.componentType === "button" ? (openBlock(), createElementBlock("button", mergeProps({ key: 2 }, $attrs, toHandlers(hoverListeners, true), { onClick: _cache[1] || (_cache[1] = ($event) => onClick($event)) }), [renderSlot(_ctx.$slots, "default")], 16)) : (openBlock(), createElementBlock("div", mergeProps({ key: 3 }, $attrs, toHandlers(hoverListeners, true), { onClick }), [renderSlot(_ctx.$slots, "default")], 16));
9715
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_2$27)) : __props.componentType === "button" ? (openBlock(), createElementBlock("button", mergeProps({ key: 2 }, $attrs, toHandlers(hoverListeners, true), { onClick: _cache[1] || (_cache[1] = ($event) => onClick($event)) }), [renderSlot(_ctx.$slots, "default")], 16)) : (openBlock(), createElementBlock("div", mergeProps({ key: 3 }, $attrs, toHandlers(hoverListeners, true), { onClick }), [renderSlot(_ctx.$slots, "default")], 16));
9448
9716
  };
9449
9717
  }
9450
9718
  });
@@ -9625,13 +9893,13 @@ var FluxButton_default = /* @__PURE__ */ defineComponent({
9625
9893
  });
9626
9894
  //#endregion
9627
9895
  //#region src/css/component/Action.module.scss
9628
- var { "button": _0$15, "buttonLabel": _1$6, "buttonIcon": _2$5 } = Button_module_default$1;
9896
+ var { "buttonLabel": _0$17, "button": _1$6, "buttonIcon": _2$5 } = Button_module_default$1;
9629
9897
  var Action_module_default = {
9630
- action: `action ${_0$15}`,
9898
+ action: `action ${_1$6}`,
9631
9899
  spinner: `spinner`,
9632
9900
  actionIcon: `action-icon ${_2$5}`,
9633
9901
  isDestructive: `is-destructive`,
9634
- actionLabel: `action-label ${_1$6}`,
9902
+ actionLabel: `action-label ${_0$17}`,
9635
9903
  actionBar: `action-bar`,
9636
9904
  separator: `separator`,
9637
9905
  formInput: `form-input`,
@@ -9698,32 +9966,32 @@ var FluxAction_default = /* @__PURE__ */ defineComponent({
9698
9966
  });
9699
9967
  //#endregion
9700
9968
  //#region src/css/component/Button.module.scss
9701
- var { "buttonIcon": _0$14, "buttonLabel": _1$5, "button": _2$4 } = Button_module_default$1;
9969
+ var { "button": _0$16, "buttonIcon": _1$5, "buttonLabel": _2$4 } = Button_module_default$1;
9702
9970
  var Button_module_default = {
9703
- primaryButton: `primary-button ${_2$4}`,
9971
+ primaryButton: `primary-button ${_0$16}`,
9704
9972
  spinner: `spinner`,
9705
- primaryButtonIcon: `primary-button-icon ${_0$14}`,
9706
- primaryButtonLabel: `primary-button-label ${_1$5}`,
9707
- secondaryButton: `secondary-button ${_2$4}`,
9708
- secondaryButtonIcon: `secondary-button-icon ${_0$14}`,
9709
- secondaryButtonLabel: `secondary-button-label ${_1$5}`,
9710
- destructiveButton: `destructive-button ${_2$4}`,
9711
- destructiveButtonIcon: `destructive-button-icon ${_0$14}`,
9712
- destructiveButtonLabel: `destructive-button-label ${_1$5}`,
9713
- baseLinkButton: `base-link-button ${_2$4}`,
9714
- primaryLinkButton: `primary-link-button base-link-button ${_2$4}`,
9715
- primaryLinkButtonIcon: `primary-link-button-icon ${_0$14}`,
9716
- primaryLinkButtonLabel: `primary-link-button-label ${_1$5}`,
9717
- secondaryLinkButton: `secondary-link-button base-link-button ${_2$4}`,
9718
- secondaryLinkButtonIcon: `secondary-link-button-icon ${_0$14}`,
9719
- secondaryLinkButtonLabel: `secondary-link-button-label ${_1$5}`,
9720
- linkButton: `link-button ${_2$4}`,
9721
- linkButtonIcon: `link-button-icon ${_0$14}`,
9973
+ primaryButtonIcon: `primary-button-icon ${_1$5}`,
9974
+ primaryButtonLabel: `primary-button-label ${_2$4}`,
9975
+ secondaryButton: `secondary-button ${_0$16}`,
9976
+ secondaryButtonIcon: `secondary-button-icon ${_1$5}`,
9977
+ secondaryButtonLabel: `secondary-button-label ${_2$4}`,
9978
+ destructiveButton: `destructive-button ${_0$16}`,
9979
+ destructiveButtonIcon: `destructive-button-icon ${_1$5}`,
9980
+ destructiveButtonLabel: `destructive-button-label ${_2$4}`,
9981
+ baseLinkButton: `base-link-button ${_0$16}`,
9982
+ primaryLinkButton: `primary-link-button base-link-button ${_0$16}`,
9983
+ primaryLinkButtonIcon: `primary-link-button-icon ${_1$5}`,
9984
+ primaryLinkButtonLabel: `primary-link-button-label ${_2$4}`,
9985
+ secondaryLinkButton: `secondary-link-button base-link-button ${_0$16}`,
9986
+ secondaryLinkButtonIcon: `secondary-link-button-icon ${_1$5}`,
9987
+ secondaryLinkButtonLabel: `secondary-link-button-label ${_2$4}`,
9988
+ linkButton: `link-button ${_0$16}`,
9989
+ linkButtonIcon: `link-button-icon ${_1$5}`,
9722
9990
  icon: `icon`,
9723
- linkButtonLabel: `link-button-label ${_1$5}`,
9724
- publishButton: `publish-button primary-button ${_2$4}`,
9725
- publishButtonIcon: `publish-button-icon primary-button-icon ${_0$14}`,
9726
- publishButtonLabel: `publish-button-label primary-button-label ${_1$5}`,
9991
+ linkButtonLabel: `link-button-label ${_2$4}`,
9992
+ publishButton: `publish-button primary-button ${_0$16}`,
9993
+ publishButtonIcon: `publish-button-icon primary-button-icon ${_1$5}`,
9994
+ publishButtonLabel: `publish-button-label primary-button-label ${_2$4}`,
9727
9995
  publishButtonAnimation: `publish-button-animation`,
9728
9996
  isDone: `is-done`,
9729
9997
  publishButtonAnimationArrow: `publish-button-animation-arrow`,
@@ -10213,12 +10481,12 @@ var FluxWindowTransition_default = /* @__PURE__ */ defineComponent({
10213
10481
  });
10214
10482
  //#endregion
10215
10483
  //#region src/css/component/Pane.module.scss
10216
- var { "basePaneStructure": _0$13, "basePaneElement": _1$4, "basePaneLoader": _2$3 } = Pane_module_default$1;
10484
+ var { "basePaneStructure": _0$15, "basePaneElement": _1$4, "basePaneLoader": _2$3 } = Pane_module_default$1;
10217
10485
  var Pane_module_default = {
10218
- pane: `pane ${_0$13}`,
10219
- paneDefault: `pane-default pane ${_0$13}`,
10220
- paneFlat: `pane-flat pane ${_0$13}`,
10221
- paneWell: `pane-well pane ${_0$13}`,
10486
+ pane: `pane ${_0$15}`,
10487
+ paneDefault: `pane-default pane ${_0$15}`,
10488
+ paneFlat: `pane-flat pane ${_0$15}`,
10489
+ paneWell: `pane-well pane ${_0$15}`,
10222
10490
  paneHeader: `pane-header ${_1$4}`,
10223
10491
  paneBody: `pane-body ${_1$4}`,
10224
10492
  paneHeaderCaption: `pane-header-caption`,
@@ -10282,7 +10550,7 @@ var Flyout_module_default = {
10282
10550
  };
10283
10551
  //#endregion
10284
10552
  //#region src/component/FluxFlyout.vue?vue&type=script&setup=true&lang.ts
10285
- var _hoisted_1$65 = ["onKeydown"];
10553
+ var _hoisted_1$71 = ["onKeydown"];
10286
10554
  //#endregion
10287
10555
  //#region src/component/FluxFlyout.vue
10288
10556
  var FluxFlyout_default = /* @__PURE__ */ defineComponent({
@@ -10444,7 +10712,7 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10444
10712
  openerHeight: openerHeight.value
10445
10713
  })))]),
10446
10714
  _: 3
10447
- }, 8, ["class", "style"])) : createCommentVNode("", true)], 42, _hoisted_1$65)], 6);
10715
+ }, 8, ["class", "style"])) : createCommentVNode("", true)], 42, _hoisted_1$71)], 6);
10448
10716
  };
10449
10717
  }
10450
10718
  });
@@ -11031,8 +11299,8 @@ var Avatar_module_default = {
11031
11299
  };
11032
11300
  //#endregion
11033
11301
  //#region src/component/FluxAvatar.vue?vue&type=script&setup=true&lang.ts
11034
- var _hoisted_1$64 = ["alt", "src"];
11035
- var _hoisted_2$24 = { key: 0 };
11302
+ var _hoisted_1$70 = ["alt", "src"];
11303
+ var _hoisted_2$26 = { key: 0 };
11036
11304
  //#endregion
11037
11305
  //#region src/component/FluxAvatar.vue
11038
11306
  var FluxAvatar_default = /* @__PURE__ */ defineComponent({
@@ -11118,10 +11386,10 @@ var FluxAvatar_default = /* @__PURE__ */ defineComponent({
11118
11386
  class: normalizeClass(unref(Avatar_module_default).avatarImage),
11119
11387
  alt: __props.alt,
11120
11388
  src: __props.src
11121
- }, null, 10, _hoisted_1$64)) : (openBlock(), createElementBlock("div", {
11389
+ }, null, 10, _hoisted_1$70)) : (openBlock(), createElementBlock("div", {
11122
11390
  key: 1,
11123
11391
  class: normalizeClass(__props.fallback === "colorized" ? unref(Avatar_module_default).avatarFallbackColorized : unref(Avatar_module_default).avatarFallbackNeutral)
11124
- }, [__props.fallbackInitials ? (openBlock(), createElementBlock("span", _hoisted_2$24, toDisplayString(__props.fallbackInitials), 1)) : __props.fallbackIcon ? (openBlock(), createBlock(FluxIcon_default, {
11392
+ }, [__props.fallbackInitials ? (openBlock(), createElementBlock("span", _hoisted_2$26, toDisplayString(__props.fallbackInitials), 1)) : __props.fallbackIcon ? (openBlock(), createBlock(FluxIcon_default, {
11125
11393
  key: 1,
11126
11394
  name: __props.fallbackIcon
11127
11395
  }, null, 8, ["name"])) : createCommentVNode("", true)], 2)),
@@ -11152,6 +11420,45 @@ var FluxAvatar_default = /* @__PURE__ */ defineComponent({
11152
11420
  };
11153
11421
  }
11154
11422
  });
11423
+ var AvatarGroup_module_default = {
11424
+ avatarGroup: `avatar-group`,
11425
+ avatarGroupItem: `avatar-group-item`
11426
+ };
11427
+ //#endregion
11428
+ //#region src/component/FluxAvatarGroup.vue
11429
+ var FluxAvatarGroup_default = /* @__PURE__ */ defineComponent({
11430
+ __name: "FluxAvatarGroup",
11431
+ props: {
11432
+ max: {},
11433
+ overlap: { default: .3 },
11434
+ size: { default: 32 }
11435
+ },
11436
+ setup(__props) {
11437
+ const slots = useSlots();
11438
+ const translate = useTranslate_default();
11439
+ const children = computed(() => a$2(slots.default?.() ?? []).filter((vnode) => typeof vnode.type !== "symbol"));
11440
+ const visibleNodes = computed(() => __props.max !== void 0 && children.value.length > __props.max ? children.value.slice(0, __props.max) : children.value);
11441
+ const overflowCount = computed(() => __props.max !== void 0 ? Math.max(0, children.value.length - __props.max) : 0);
11442
+ const overflowLabel = computed(() => translate("flux.andNMore", { n: overflowCount.value }));
11443
+ const renderVisible = () => visibleNodes.value.map((vnode) => h("span", { class: AvatarGroup_module_default.avatarGroupItem }, [vnode]));
11444
+ return (_ctx, _cache) => {
11445
+ return openBlock(), createElementBlock("div", {
11446
+ class: normalizeClass(unref(AvatarGroup_module_default).avatarGroup),
11447
+ style: normalizeStyle({
11448
+ fontSize: `${__props.size}px`,
11449
+ "--overlap": __props.overlap
11450
+ })
11451
+ }, [(openBlock(), createBlock(resolveDynamicComponent(renderVisible))), overflowCount.value > 0 ? (openBlock(), createElementBlock("span", {
11452
+ key: 0,
11453
+ class: normalizeClass(unref(AvatarGroup_module_default).avatarGroupItem)
11454
+ }, [createVNode(FluxAvatar_default, {
11455
+ alt: overflowLabel.value,
11456
+ fallback: "neutral",
11457
+ "fallback-initials": `+${overflowCount.value}`
11458
+ }, null, 8, ["alt", "fallback-initials"])], 2)) : createCommentVNode("", true)], 6);
11459
+ };
11460
+ }
11461
+ });
11155
11462
  var Badge_module_default = {
11156
11463
  badge: `badge`,
11157
11464
  spinner: `spinner`,
@@ -11181,7 +11488,7 @@ var Badge_module_default = {
11181
11488
  };
11182
11489
  //#endregion
11183
11490
  //#region src/component/FluxBadge.vue?vue&type=script&setup=true&lang.ts
11184
- var _hoisted_1$63 = ["aria-label"];
11491
+ var _hoisted_1$69 = ["aria-label"];
11185
11492
  //#endregion
11186
11493
  //#region src/component/FluxBadge.vue
11187
11494
  var FluxBadge_default = /* @__PURE__ */ defineComponent({
@@ -11247,7 +11554,7 @@ var FluxBadge_default = /* @__PURE__ */ defineComponent({
11247
11554
  type: "button",
11248
11555
  "aria-label": unref(translate)("flux.delete"),
11249
11556
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onDeleteClick(), ["stop"]))
11250
- }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$63)) : createCommentVNode("", true)
11557
+ }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$69)) : createCommentVNode("", true)
11251
11558
  ]),
11252
11559
  _: 1
11253
11560
  }, 8, [
@@ -11492,7 +11799,7 @@ var Breadcrumb_module_default = {
11492
11799
  };
11493
11800
  //#endregion
11494
11801
  //#region src/component/FluxBreadcrumb.vue?vue&type=script&setup=true&lang.ts
11495
- var _hoisted_1$62 = ["aria-label"];
11802
+ var _hoisted_1$68 = ["aria-label"];
11496
11803
  //#endregion
11497
11804
  //#region src/component/FluxBreadcrumb.vue
11498
11805
  var FluxBreadcrumb_default = /* @__PURE__ */ defineComponent({
@@ -11503,7 +11810,7 @@ var FluxBreadcrumb_default = /* @__PURE__ */ defineComponent({
11503
11810
  return openBlock(), createElementBlock("nav", {
11504
11811
  class: normalizeClass(unref(Breadcrumb_module_default).breadcrumb),
11505
11812
  "aria-label": __props.ariaLabel
11506
- }, [createElementVNode("ol", { class: normalizeClass(unref(Breadcrumb_module_default).breadcrumbList) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$62);
11813
+ }, [createElementVNode("ol", { class: normalizeClass(unref(Breadcrumb_module_default).breadcrumbList) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$68);
11507
11814
  };
11508
11815
  }
11509
11816
  });
@@ -11562,13 +11869,13 @@ var FluxBreadcrumbItem_default = /* @__PURE__ */ defineComponent({
11562
11869
  });
11563
11870
  //#endregion
11564
11871
  //#region src/css/component/Calendar.module.scss
11565
- var { "basePaneLoader": _0$12 } = Pane_module_default$1;
11872
+ var { "basePaneLoader": _0$14 } = Pane_module_default$1;
11566
11873
  var Calendar_module_default = {
11567
11874
  calendar: `calendar`,
11568
11875
  calendarView: `calendar-view`,
11569
11876
  calendarItemRegistry: `calendar-item-registry`,
11570
11877
  calendarActions: `calendar-actions`,
11571
- calendarLoader: `calendar-loader ${_0$12}`,
11878
+ calendarLoader: `calendar-loader ${_0$14}`,
11572
11879
  calendarCurrent: `calendar-current`,
11573
11880
  calendarCurrentValue: `calendar-current-value`,
11574
11881
  calendarCurrentMonth: `calendar-current-month calendar-current-value`,
@@ -11616,7 +11923,7 @@ var Calendar_module_default = {
11616
11923
  };
11617
11924
  //#endregion
11618
11925
  //#region src/component/calendar/FluxCalendarItemDisplay.vue?vue&type=script&setup=true&lang.ts
11619
- var _hoisted_1$61 = ["draggable", "tabindex"];
11926
+ var _hoisted_1$67 = ["draggable", "tabindex"];
11620
11927
  //#endregion
11621
11928
  //#region src/component/calendar/FluxCalendarItemDisplay.vue
11622
11929
  var FluxCalendarItemDisplay_default = /* @__PURE__ */ defineComponent({
@@ -11689,13 +11996,13 @@ var FluxCalendarItemDisplay_default = /* @__PURE__ */ defineComponent({
11689
11996
  onDragstart: onDragStart,
11690
11997
  onDragend: onDragEnd,
11691
11998
  onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleKeyDown) && unref(handleKeyDown)(...args))
11692
- }, [createVNode(unref(RenderItemContent), { render: __props.data.renderContent }, null, 8, ["render"])], 42, _hoisted_1$61);
11999
+ }, [createVNode(unref(RenderItemContent), { render: __props.data.renderContent }, null, 8, ["render"])], 42, _hoisted_1$67);
11693
12000
  };
11694
12001
  }
11695
12002
  });
11696
12003
  //#endregion
11697
12004
  //#region src/component/calendar/FluxCalendarMonthView.vue?vue&type=script&setup=true&lang.ts
11698
- var _hoisted_1$60 = [
12005
+ var _hoisted_1$66 = [
11699
12006
  "onDragover",
11700
12007
  "onDragleave",
11701
12008
  "onDrop"
@@ -11770,7 +12077,7 @@ var FluxCalendarMonthView_default = /* @__PURE__ */ defineComponent({
11770
12077
  key: item.id,
11771
12078
  data: item
11772
12079
  }, null, 8, ["data"]);
11773
- }), 128))], 2), createElementVNode("span", { class: normalizeClass(unref(Calendar_module_default).calendarEntryDate) }, toDisplayString(date.toLocaleString({ day: "numeric" })), 3)], 42, _hoisted_1$60);
12080
+ }), 128))], 2), createElementVNode("span", { class: normalizeClass(unref(Calendar_module_default).calendarEntryDate) }, toDisplayString(date.toLocaleString({ day: "numeric" })), 3)], 42, _hoisted_1$66);
11774
12081
  }), 256))], 2))]),
11775
12082
  _: 1
11776
12083
  }, 8, ["is-back"]);
@@ -11779,17 +12086,17 @@ var FluxCalendarMonthView_default = /* @__PURE__ */ defineComponent({
11779
12086
  });
11780
12087
  //#endregion
11781
12088
  //#region src/component/calendar/FluxCalendarTimeGridView.vue?vue&type=script&setup=true&lang.ts
11782
- var _hoisted_1$59 = [
12089
+ var _hoisted_1$65 = [
11783
12090
  "onDragover",
11784
12091
  "onDragleave",
11785
12092
  "onDrop"
11786
12093
  ];
11787
- var _hoisted_2$23 = [
12094
+ var _hoisted_2$25 = [
11788
12095
  "onDragover",
11789
12096
  "onDragleave",
11790
12097
  "onDrop"
11791
12098
  ];
11792
- var _hoisted_3$7 = ["onMousedown"];
12099
+ var _hoisted_3$8 = ["onMousedown"];
11793
12100
  var _hoisted_4$2 = ["onMousedown"];
11794
12101
  //#endregion
11795
12102
  //#region src/component/calendar/FluxCalendarTimeGridView.vue
@@ -12131,7 +12438,7 @@ var FluxCalendarTimeGridView_default = /* @__PURE__ */ defineComponent({
12131
12438
  key: item.id,
12132
12439
  data: item
12133
12440
  }, null, 8, ["data"]);
12134
- }), 128))], 42, _hoisted_1$59);
12441
+ }), 128))], 42, _hoisted_1$65);
12135
12442
  }), 128))], 2)], 2),
12136
12443
  createElementVNode("div", { class: normalizeClass(unref(Calendar_module_default).timeGridBody) }, [createElementVNode("div", { class: normalizeClass(unref(Calendar_module_default).timeGridHours) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(hours.value, (hour) => {
12137
12444
  return openBlock(), createElementBlock("div", {
@@ -12160,7 +12467,7 @@ var FluxCalendarTimeGridView_default = /* @__PURE__ */ defineComponent({
12160
12467
  }, [createElementVNode("div", { class: normalizeClass(unref(Calendar_module_default).timeGridDayItemBody) }, [createVNode(FluxCalendarItemDisplay_default, { data: positioned.data }, null, 8, ["data"]), __props.draggable && !__props.hasActiveDrag ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("div", {
12161
12468
  class: normalizeClass(unref(clsx)(unref(Calendar_module_default).timeGridDayItemHandle, unref(Calendar_module_default).isTop)),
12162
12469
  onMousedown: (evt) => onResizeStart(positioned, "top", evt)
12163
- }, null, 42, _hoisted_3$7), createElementVNode("div", {
12470
+ }, null, 42, _hoisted_3$8), createElementVNode("div", {
12164
12471
  class: normalizeClass(unref(clsx)(unref(Calendar_module_default).timeGridDayItemHandle, unref(Calendar_module_default).isBottom)),
12165
12472
  onMousedown: (evt) => onResizeStart(positioned, "bottom", evt)
12166
12473
  }, null, 42, _hoisted_4$2)], 64)) : createCommentVNode("", true)], 2)], 6);
@@ -12168,7 +12475,7 @@ var FluxCalendarTimeGridView_default = /* @__PURE__ */ defineComponent({
12168
12475
  key: 0,
12169
12476
  class: normalizeClass(unref(Calendar_module_default).timeGridDropIndicator),
12170
12477
  style: normalizeStyle({ top: `${(dropTargetMinutes.value - __props.hourRange[0] * 60) * __props.pixelsPerMinute}px` })
12171
- }, null, 6)) : createCommentVNode("", true)], 46, _hoisted_2$23);
12478
+ }, null, 6)) : createCommentVNode("", true)], 46, _hoisted_2$25);
12172
12479
  }), 128))], 2)], 2)
12173
12480
  ], 2))]),
12174
12481
  _: 1
@@ -12199,9 +12506,9 @@ var DatePicker_module_default = {
12199
12506
  };
12200
12507
  //#endregion
12201
12508
  //#region src/component/FluxDatePicker.vue?vue&type=script&setup=true&lang.ts
12202
- var _hoisted_1$58 = ["id"];
12203
- var _hoisted_2$22 = ["aria-labelledby"];
12204
- var _hoisted_3$6 = ["onClick", "onMouseover"];
12509
+ var _hoisted_1$64 = ["id"];
12510
+ var _hoisted_2$24 = ["aria-labelledby"];
12511
+ var _hoisted_3$7 = ["onClick", "onMouseover"];
12205
12512
  //#endregion
12206
12513
  //#region src/component/FluxDatePicker.vue
12207
12514
  var FluxDatePicker_default = /* @__PURE__ */ defineComponent({
@@ -12354,7 +12661,7 @@ var FluxDatePicker_default = /* @__PURE__ */ defineComponent({
12354
12661
  class: normalizeClass(unref(DatePicker_module_default).datePickerHeaderViewButton),
12355
12662
  type: "button",
12356
12663
  onClick: _cache[1] || (_cache[1] = ($event) => setView("year"))
12357
- }, toDisplayString(unref(viewYear)), 3)], 10, _hoisted_1$58),
12664
+ }, toDisplayString(unref(viewYear)), 3)], 10, _hoisted_1$64),
12358
12665
  createVNode(unref(FluxFadeTransition_default), null, {
12359
12666
  default: withCtx(() => [viewMode.value === "date" ? (openBlock(), createBlock(FluxSecondaryButton_default, {
12360
12667
  key: 0,
@@ -12391,10 +12698,10 @@ var FluxDatePicker_default = /* @__PURE__ */ defineComponent({
12391
12698
  onClick: ($event) => setDate(date),
12392
12699
  onMouseover: ($event) => onDateMouseOver(date),
12393
12700
  onMouseout: onDateMouseOut
12394
- }, toDisplayString(date.toLocaleString({ day: "numeric" })), 43, _hoisted_3$6);
12701
+ }, toDisplayString(date.toLocaleString({ day: "numeric" })), 43, _hoisted_3$7);
12395
12702
  }), 256))], 2))]),
12396
12703
  _: 1
12397
- }, 8, ["is-back"])], 10, _hoisted_2$22)) : viewMode.value === "month" ? (openBlock(), createElementBlock("div", {
12704
+ }, 8, ["is-back"])], 10, _hoisted_2$24)) : viewMode.value === "month" ? (openBlock(), createElementBlock("div", {
12398
12705
  key: "month",
12399
12706
  class: normalizeClass(unref(DatePicker_module_default).datePickerMonths)
12400
12707
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(months), (month) => {
@@ -12465,9 +12772,9 @@ var FluxLayerPane_default = /* @__PURE__ */ defineComponent({
12465
12772
  });
12466
12773
  //#endregion
12467
12774
  //#region src/component/FluxCalendar.vue?vue&type=script&setup=true&lang.ts
12468
- var _hoisted_1$57 = ["aria-label", "onClick"];
12469
- var _hoisted_2$21 = ["aria-label", "onClick"];
12470
- var _hoisted_3$5 = ["aria-label", "onClick"];
12775
+ var _hoisted_1$63 = ["aria-label", "onClick"];
12776
+ var _hoisted_2$23 = ["aria-label", "onClick"];
12777
+ var _hoisted_3$6 = ["aria-label", "onClick"];
12471
12778
  var SNAP_MINUTES = 30;
12472
12779
  var NAV_HOVER_INITIAL_DELAY_MS = 700;
12473
12780
  var NAV_HOVER_REPEAT_DELAY_MS = 450;
@@ -12792,7 +13099,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12792
13099
  "aria-label": unref(translate)("flux.selectMonth"),
12793
13100
  type: "button",
12794
13101
  onClick: open
12795
- }, toDisplayString(unref(monthViewMonth)), 11, _hoisted_1$57)]),
13102
+ }, toDisplayString(unref(monthViewMonth)), 11, _hoisted_1$63)]),
12796
13103
  default: withCtx(({ close }) => [createElementVNode("div", { class: normalizeClass(unref(DatePicker_module_default).datePickerMonths) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(months), (month) => {
12797
13104
  return openBlock(), createBlock(FluxSecondaryButton_default, {
12798
13105
  key: month.label,
@@ -12808,7 +13115,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12808
13115
  "aria-label": unref(translate)("flux.selectYear"),
12809
13116
  type: "button",
12810
13117
  onClick: open
12811
- }, toDisplayString(unref(monthViewYear)), 11, _hoisted_2$21)]),
13118
+ }, toDisplayString(unref(monthViewYear)), 11, _hoisted_2$23)]),
12812
13119
  default: withCtx(({ close }) => [createElementVNode("div", { class: normalizeClass(unref(DatePicker_module_default).datePickerYears) }, [
12813
13120
  createVNode(FluxSecondaryButton_default, {
12814
13121
  "aria-label": unref(translate)("flux.previousYears"),
@@ -12841,7 +13148,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12841
13148
  "aria-label": unref(translate)("flux.selectDate"),
12842
13149
  type: "button",
12843
13150
  onClick: open
12844
- }, toDisplayString(rangeLabel.value), 11, _hoisted_3$5)]),
13151
+ }, toDisplayString(rangeLabel.value), 11, _hoisted_3$6)]),
12845
13152
  default: withCtx(({ close }) => [createVNode(FluxDatePicker_default, {
12846
13153
  "model-value": datePickerValue.value,
12847
13154
  "onUpdate:modelValue": ($event) => {
@@ -12940,7 +13247,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12940
13247
  });
12941
13248
  //#endregion
12942
13249
  //#region src/component/FluxCalendarItem.vue?vue&type=script&setup=true&lang.ts
12943
- var _hoisted_1$56 = {
13250
+ var _hoisted_1$62 = {
12944
13251
  "aria-hidden": "true",
12945
13252
  style: { "display": "none" }
12946
13253
  };
@@ -12993,7 +13300,7 @@ var FluxCalendarItem_default = /* @__PURE__ */ defineComponent({
12993
13300
  if (dragContext && props.id != null) dragContext.registerItem(props.id, buildData());
12994
13301
  });
12995
13302
  return (_ctx, _cache) => {
12996
- return openBlock(), createElementBlock("span", _hoisted_1$56);
13303
+ return openBlock(), createElementBlock("span", _hoisted_1$62);
12997
13304
  };
12998
13305
  }
12999
13306
  });
@@ -13152,7 +13459,7 @@ var FluxCommandPaletteGroup_default = /* @__PURE__ */ defineComponent({
13152
13459
  });
13153
13460
  //#endregion
13154
13461
  //#region src/component/FluxTag.vue?vue&type=script&setup=true&lang.ts
13155
- var _hoisted_1$55 = ["aria-label"];
13462
+ var _hoisted_1$61 = ["aria-label"];
13156
13463
  //#endregion
13157
13464
  //#region src/component/FluxTag.vue
13158
13465
  var FluxTag_default = /* @__PURE__ */ defineComponent({
@@ -13220,7 +13527,7 @@ var FluxTag_default = /* @__PURE__ */ defineComponent({
13220
13527
  type: "button",
13221
13528
  "aria-label": unref(translate)("flux.delete"),
13222
13529
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onDeleteClick(), ["stop"]))
13223
- }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$55)) : createCommentVNode("", true)
13530
+ }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$61)) : createCommentVNode("", true)
13224
13531
  ]),
13225
13532
  _: 1
13226
13533
  }, 8, [
@@ -13282,8 +13589,8 @@ var FluxCommandPaletteItem_default = /* @__PURE__ */ defineComponent({
13282
13589
  });
13283
13590
  //#endregion
13284
13591
  //#region src/component/FluxCommandPalette.vue?vue&type=script&setup=true&lang.ts
13285
- var _hoisted_1$54 = ["placeholder", "value"];
13286
- var _hoisted_2$20 = ["onClick"];
13592
+ var _hoisted_1$60 = ["placeholder", "value"];
13593
+ var _hoisted_2$22 = ["onClick"];
13287
13594
  //#endregion
13288
13595
  //#region src/component/FluxCommandPalette.vue
13289
13596
  var FluxCommandPalette_default = /* @__PURE__ */ defineComponent({
@@ -13442,7 +13749,7 @@ var FluxCommandPalette_default = /* @__PURE__ */ defineComponent({
13442
13749
  value: unref(search),
13443
13750
  type: "text",
13444
13751
  onInput: _cache[2] || (_cache[2] = ($event) => unref(setSearch)($event.target.value))
13445
- }, null, 42, _hoisted_1$54),
13752
+ }, null, 42, _hoisted_1$60),
13446
13753
  createVNode(FluxTag_default, {
13447
13754
  "is-keyboard-shortcut": "",
13448
13755
  label: "Esc"
@@ -13469,7 +13776,7 @@ var FluxCommandPalette_default = /* @__PURE__ */ defineComponent({
13469
13776
  key: 0,
13470
13777
  class: normalizeClass(unref(CommandPalette_module_default).commandPaletteTabIcon),
13471
13778
  name: tab.icon
13472
- }, null, 8, ["class", "name"])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(tab.label), 1)], 42, _hoisted_2$20);
13779
+ }, null, 8, ["class", "name"])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(tab.label), 1)], 42, _hoisted_2$22);
13473
13780
  }), 128))], 2)) : createCommentVNode("", true),
13474
13781
  createVNode(unref(FluxWindowTransition_default), { "is-back": unref(isTransitioningBack) }, {
13475
13782
  default: withCtx(() => [(openBlock(), createElementBlock("div", {
@@ -13546,8 +13853,8 @@ var Comment_module_default = {
13546
13853
  };
13547
13854
  //#endregion
13548
13855
  //#region src/component/FluxComment.vue?vue&type=script&setup=true&lang.ts
13549
- var _hoisted_1$53 = { key: 0 };
13550
- var _hoisted_2$19 = ["datetime"];
13856
+ var _hoisted_1$59 = { key: 0 };
13857
+ var _hoisted_2$21 = ["datetime"];
13551
13858
  //#endregion
13552
13859
  //#region src/component/FluxComment.vue
13553
13860
  var FluxComment_default = /* @__PURE__ */ defineComponent({
@@ -13607,17 +13914,17 @@ var FluxComment_default = /* @__PURE__ */ defineComponent({
13607
13914
  key: 0,
13608
13915
  class: normalizeClass(unref(Comment_module_default).commentTyping)
13609
13916
  }, null, 2)) : renderSlot(_ctx.$slots, "default", { key: 1 })], 2),
13610
- createElementVNode("div", { class: normalizeClass(unref(Comment_module_default).commentFooter) }, [__props.isReceived && __props.postedBy ? (openBlock(), createElementBlock("span", _hoisted_1$53, toDisplayString(__props.postedBy), 1)) : createCommentVNode("", true), iso.value && relative.value && !__props.isTyping ? (openBlock(), createElementBlock("time", {
13917
+ createElementVNode("div", { class: normalizeClass(unref(Comment_module_default).commentFooter) }, [__props.isReceived && __props.postedBy ? (openBlock(), createElementBlock("span", _hoisted_1$59, toDisplayString(__props.postedBy), 1)) : createCommentVNode("", true), iso.value && relative.value && !__props.isTyping ? (openBlock(), createElementBlock("time", {
13611
13918
  key: 1,
13612
13919
  datetime: iso.value
13613
- }, toDisplayString(isJustNowVisible.value ? unref(translate)("flux.justNow") : relative.value), 9, _hoisted_2$19)) : createCommentVNode("", true)], 2)
13920
+ }, toDisplayString(isJustNowVisible.value ? unref(translate)("flux.justNow") : relative.value), 9, _hoisted_2$21)) : createCommentVNode("", true)], 2)
13614
13921
  ], 2);
13615
13922
  };
13616
13923
  }
13617
13924
  });
13618
13925
  //#endregion
13619
13926
  //#region src/css/component/Form.module.scss
13620
- var { "basePane": _0$11 } = Pane_module_default$1;
13927
+ var { "basePane": _0$13 } = Pane_module_default$1;
13621
13928
  var Form_module_default = {
13622
13929
  formInputGroup: `form-input-group form-input-enabled form-input`,
13623
13930
  buttonGroup: `button-group`,
@@ -13671,7 +13978,7 @@ var Form_module_default = {
13671
13978
  formSelectIcon: `form-select-icon`,
13672
13979
  formSelectInput: `form-select-input`,
13673
13980
  formSelectPlaceholder: `form-select-placeholder`,
13674
- formSelectPopup: `form-select-popup ${_0$11}`,
13981
+ formSelectPopup: `form-select-popup ${_0$13}`,
13675
13982
  menuItem: `menu-item`,
13676
13983
  isKeyboardAction: `is-keyboard-action`,
13677
13984
  isSearchable: `is-searchable`,
@@ -13709,11 +14016,16 @@ var Form_module_default = {
13709
14016
  isSwitch: `is-switch`,
13710
14017
  formToggleIcon: `form-toggle-icon`,
13711
14018
  formToggleIconOn: `form-toggle-icon-on form-toggle-icon`,
13712
- formToggleIconOff: `form-toggle-icon-off form-toggle-icon`
14019
+ formToggleIconOff: `form-toggle-icon-off form-toggle-icon`,
14020
+ formTagsInput: `form-tags-input form-input`,
14021
+ formTagsInputDisabled: `form-tags-input-disabled form-tags-input form-input`,
14022
+ formTagsInputEnabled: `form-tags-input-enabled form-tags-input form-input`,
14023
+ formTagsInputField: `form-tags-input-field`,
14024
+ formTagsInputPopup: `form-tags-input-popup form-select-popup ${_0$13}`
13713
14025
  };
13714
14026
  //#endregion
13715
14027
  //#region src/component/FluxFormFieldAddition.vue?vue&type=script&setup=true&lang.ts
13716
- var _hoisted_1$52 = { key: 1 };
14028
+ var _hoisted_1$58 = { key: 1 };
13717
14029
  //#endregion
13718
14030
  //#region src/component/FluxFormFieldAddition.vue
13719
14031
  var FluxFormFieldAddition_default = /* @__PURE__ */ defineComponent({
@@ -13735,7 +14047,7 @@ var FluxFormFieldAddition_default = /* @__PURE__ */ defineComponent({
13735
14047
  name: __props.icon,
13736
14048
  size: 16
13737
14049
  }, null, 8, ["class", "name"])) : createCommentVNode("", true),
13738
- __props.message ? (openBlock(), createElementBlock("span", _hoisted_1$52, toDisplayString(__props.message), 1)) : createCommentVNode("", true),
14050
+ __props.message ? (openBlock(), createElementBlock("span", _hoisted_1$58, toDisplayString(__props.message), 1)) : createCommentVNode("", true),
13739
14051
  renderSlot(_ctx.$slots, "default")
13740
14052
  ], 2);
13741
14053
  };
@@ -13743,8 +14055,8 @@ var FluxFormFieldAddition_default = /* @__PURE__ */ defineComponent({
13743
14055
  });
13744
14056
  //#endregion
13745
14057
  //#region src/component/FluxFormField.vue?vue&type=script&setup=true&lang.ts
13746
- var _hoisted_1$51 = ["role", "aria-labelledby"];
13747
- var _hoisted_2$18 = ["id"];
14058
+ var _hoisted_1$57 = ["role", "aria-labelledby"];
14059
+ var _hoisted_2$20 = ["id"];
13748
14060
  //#endregion
13749
14061
  //#region src/component/FluxFormField.vue
13750
14062
  var FluxFormField_default = /* @__PURE__ */ defineComponent({
@@ -13786,7 +14098,7 @@ var FluxFormField_default = /* @__PURE__ */ defineComponent({
13786
14098
  key: 0,
13787
14099
  id: isGroup.value ? unref(labelId) : void 0,
13788
14100
  class: normalizeClass(unref(Form_module_default).formFieldLabel)
13789
- }, toDisplayString(__props.label), 11, _hoisted_2$18)) : createCommentVNode("", true),
14101
+ }, toDisplayString(__props.label), 11, _hoisted_2$20)) : createCommentVNode("", true),
13790
14102
  __props.isOptional ? (openBlock(), createElementBlock("span", {
13791
14103
  key: 1,
13792
14104
  class: normalizeClass(unref(Form_module_default).formFieldOptional)
@@ -13831,14 +14143,14 @@ var FluxFormField_default = /* @__PURE__ */ defineComponent({
13831
14143
  label: __props.label,
13832
14144
  maxLength: __props.maxLength
13833
14145
  })))
13834
- ], 10, _hoisted_1$51);
14146
+ ], 10, _hoisted_1$57);
13835
14147
  };
13836
14148
  }
13837
14149
  });
13838
14150
  //#endregion
13839
14151
  //#region src/component/FluxFormInput.vue?vue&type=script&setup=true&lang.ts
13840
- var _hoisted_1$50 = ["aria-disabled"];
13841
- var _hoisted_2$17 = [
14152
+ var _hoisted_1$56 = ["aria-disabled"];
14153
+ var _hoisted_2$19 = [
13842
14154
  "id",
13843
14155
  "name",
13844
14156
  "autocomplete",
@@ -14038,7 +14350,7 @@ var FluxFormInput_default = /* @__PURE__ */ defineComponent({
14038
14350
  onFocus: _cache[1] || (_cache[1] = ($event) => onFocus()),
14039
14351
  onInput,
14040
14352
  onKeydown: onKeyDown
14041
- }, null, 42, _hoisted_2$17),
14353
+ }, null, 42, _hoisted_2$19),
14042
14354
  __props.iconLeading ? (openBlock(), createBlock(FluxIcon_default, {
14043
14355
  key: 0,
14044
14356
  class: normalizeClass(unref(Form_module_default).formInputIconLeading),
@@ -14062,7 +14374,7 @@ var FluxFormInput_default = /* @__PURE__ */ defineComponent({
14062
14374
  class: normalizeClass(unref(Form_module_default).formInputIconTrailing),
14063
14375
  size: 18
14064
14376
  }, null, 8, ["class"])) : createCommentVNode("", true)
14065
- ], 10, _hoisted_1$50);
14377
+ ], 10, _hoisted_1$56);
14066
14378
  };
14067
14379
  }
14068
14380
  });
@@ -14086,12 +14398,13 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14086
14398
  __name: "AnchorPopup",
14087
14399
  props: {
14088
14400
  anchor: {},
14401
+ clampToViewport: { type: Boolean },
14089
14402
  direction: { default: "vertical" },
14090
14403
  margin: { default: 12 },
14091
14404
  position: {},
14092
14405
  useAnchorWidth: { type: Boolean }
14093
14406
  },
14094
- setup(__props) {
14407
+ setup(__props, { expose: __expose }) {
14095
14408
  const anchorRef = ref();
14096
14409
  const popupRef = useTemplateRef("popup");
14097
14410
  const state = reactive({
@@ -14105,12 +14418,14 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14105
14418
  capture: true,
14106
14419
  passive: true
14107
14420
  });
14421
+ resize();
14422
+ reposition();
14108
14423
  });
14109
14424
  onUnmounted(() => {
14110
14425
  window.removeEventListener("resize", onResize);
14111
14426
  window.removeEventListener("scroll", onScroll, { capture: true });
14112
14427
  });
14113
- ye$1(popupRef, () => {
14428
+ we$1(popupRef, () => {
14114
14429
  reposition();
14115
14430
  }, {
14116
14431
  childList: true,
@@ -14185,6 +14500,14 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14185
14500
  if (py < 0 || py + popupHeight > innerHeight) py = innerHeight / 2 - popupHeight / 2;
14186
14501
  break;
14187
14502
  }
14503
+ if (__props.clampToViewport) {
14504
+ if (__props.position?.startsWith("right") && px + popupWidth > innerWidth - __props.margin) px = x - popupWidth - __props.margin;
14505
+ else if (__props.position?.startsWith("left") && px < __props.margin) px = x + width + __props.margin;
14506
+ if (__props.position?.startsWith("bottom") && py + popupHeight > innerHeight - __props.margin) py = y - popupHeight - __props.margin;
14507
+ else if (__props.position?.startsWith("top") && py < __props.margin) py = y + height + __props.margin;
14508
+ px = Math.min(Math.max(px, __props.margin), Math.max(__props.margin, innerWidth - popupWidth - __props.margin));
14509
+ py = Math.min(Math.max(py, __props.margin), Math.max(__props.margin, innerHeight - popupHeight - __props.margin));
14510
+ }
14188
14511
  state.x = px;
14189
14512
  state.y = py;
14190
14513
  }
@@ -14201,6 +14524,10 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14201
14524
  function onScroll() {
14202
14525
  reposition();
14203
14526
  }
14527
+ __expose({
14528
+ reposition,
14529
+ resize
14530
+ });
14204
14531
  watchEffect(() => {
14205
14532
  if (!__props.anchor || !R$2(__props.anchor) && !__props.anchor.$el) return;
14206
14533
  anchorRef.value = R$2(__props.anchor) ? __props.anchor : __props.anchor.$el;
@@ -14233,8 +14560,8 @@ var FluxPaneFooter_default = /* @__PURE__ */ defineComponent({
14233
14560
  });
14234
14561
  //#endregion
14235
14562
  //#region src/component/FluxPaneHeader.vue?vue&type=script&setup=true&lang.ts
14236
- var _hoisted_1$49 = { key: 0 };
14237
- var _hoisted_2$16 = { key: 1 };
14563
+ var _hoisted_1$55 = { key: 0 };
14564
+ var _hoisted_2$18 = { key: 1 };
14238
14565
  //#endregion
14239
14566
  //#region src/component/FluxPaneHeader.vue
14240
14567
  var FluxPaneHeader_default = /* @__PURE__ */ defineComponent({
@@ -14257,7 +14584,7 @@ var FluxPaneHeader_default = /* @__PURE__ */ defineComponent({
14257
14584
  __props.title || __props.subtitle ? (openBlock(), createElementBlock("div", {
14258
14585
  key: 1,
14259
14586
  class: normalizeClass(unref(Pane_module_default).paneHeaderCaption)
14260
- }, [__props.title ? (openBlock(), createElementBlock("strong", _hoisted_1$49, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("span", _hoisted_2$16, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true),
14587
+ }, [__props.title ? (openBlock(), createElementBlock("strong", _hoisted_1$55, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("span", _hoisted_2$18, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true),
14261
14588
  renderSlot(_ctx.$slots, "after")
14262
14589
  ], 2);
14263
14590
  };
@@ -14373,7 +14700,7 @@ var FilterBadge_default = /* @__PURE__ */ defineComponent({
14373
14700
  });
14374
14701
  //#endregion
14375
14702
  //#region src/css/component/Menu.module.scss
14376
- var { "button": _0$10, "buttonIcon": _1$3, "buttonLabel": _2$2 } = Button_module_default$1;
14703
+ var { "button": _0$12, "buttonLabel": _1$3, "buttonIcon": _2$2 } = Button_module_default$1;
14377
14704
  var Menu_module_default = {
14378
14705
  menu: `menu`,
14379
14706
  menuNormal: `menu-normal menu`,
@@ -14381,19 +14708,20 @@ var Menu_module_default = {
14381
14708
  menuGroup: `menu-group`,
14382
14709
  menuGroupHorizontal: `menu-group-horizontal menu-group`,
14383
14710
  menuGroupVertical: `menu-group-vertical menu-group`,
14384
- menuItem: `menu-item ${_0$10}`,
14711
+ menuItem: `menu-item ${_0$12}`,
14385
14712
  badge: `badge`,
14386
- menuItemIcon: `menu-item-icon ${_1$3}`,
14387
- menuItemLabel: `menu-item-label ${_2$2}`,
14713
+ menuItemIcon: `menu-item-icon ${_2$2}`,
14714
+ menuItemLabel: `menu-item-label ${_1$3}`,
14388
14715
  menuItemActive: `menu-item-active`,
14389
14716
  menuItemDestructive: `menu-item-destructive`,
14390
14717
  menuItemHighlighted: `menu-item-highlighted`,
14391
14718
  menuItemIndented: `menu-item-indented`,
14719
+ menuConeActive: `menu-cone-active`,
14392
14720
  menuCollapsible: `menu-collapsible`,
14393
14721
  menuCollapsibleOpened: `menu-collapsible-opened menu-collapsible`,
14394
14722
  menuCollapsibleBody: `menu-collapsible-body`,
14395
14723
  menuCollapsibleContent: `menu-collapsible-content`,
14396
- menuItemSelectableIcon: `menu-item-selectable-icon ${_1$3}`,
14724
+ menuItemSelectableIcon: `menu-item-selectable-icon ${_2$2}`,
14397
14725
  menuItemSelected: `menu-item-selected`,
14398
14726
  menuItemCommand: `menu-item-command`,
14399
14727
  menuItemCommandIcon: `menu-item-command-icon`,
@@ -14425,7 +14753,7 @@ var FluxMenuGroup_default = /* @__PURE__ */ defineComponent({
14425
14753
  });
14426
14754
  //#endregion
14427
14755
  //#region src/component/FluxMenuItem.vue?vue&type=script&setup=true&lang.ts
14428
- var _hoisted_1$48 = ["src", "alt"];
14756
+ var _hoisted_1$54 = ["src", "alt"];
14429
14757
  //#endregion
14430
14758
  //#region src/component/FluxMenuItem.vue
14431
14759
  var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
@@ -14502,7 +14830,7 @@ var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
14502
14830
  class: normalizeClass(unref(Menu_module_default).menuItemImage),
14503
14831
  src: __props.imageSrc,
14504
14832
  alt: __props.imageAlt ?? ""
14505
- }, null, 10, _hoisted_1$48)]),
14833
+ }, null, 10, _hoisted_1$54)]),
14506
14834
  key: "1"
14507
14835
  } : slots.before ? {
14508
14836
  name: "iconLeading",
@@ -14628,13 +14956,21 @@ var FilterOptionBase_default = /* @__PURE__ */ defineComponent({
14628
14956
  //#region src/component/FluxMenu.vue
14629
14957
  var FluxMenu_default = /* @__PURE__ */ defineComponent({
14630
14958
  __name: "FluxMenu",
14631
- props: { isLarge: { type: Boolean } },
14959
+ props: {
14960
+ debugCone: {
14961
+ type: Boolean,
14962
+ default: false
14963
+ },
14964
+ isLarge: { type: Boolean }
14965
+ },
14632
14966
  setup(__props) {
14633
14967
  R$1(useTemplateRef("element"), { direction: "vertical" });
14968
+ const menuFlyout = useMenuFlyoutContext({ debugCone: toRef(() => __props.debugCone) });
14969
+ const coneActive = computed(() => !!menuFlyout.activeCone.value);
14634
14970
  return (_ctx, _cache) => {
14635
14971
  return openBlock(), createElementBlock("nav", {
14636
14972
  ref: "element",
14637
- class: normalizeClass(__props.isLarge ? unref(Menu_module_default).menuLarge : unref(Menu_module_default).menuNormal),
14973
+ class: normalizeClass([__props.isLarge ? unref(Menu_module_default).menuLarge : unref(Menu_module_default).menuNormal, coneActive.value && unref(Menu_module_default).menuConeActive]),
14638
14974
  role: "menu",
14639
14975
  "aria-orientation": "vertical"
14640
14976
  }, [renderSlot(_ctx.$slots, "default")], 2);
@@ -14651,6 +14987,7 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14651
14987
  __name: "SelectBase",
14652
14988
  props: /*@__PURE__*/ mergeModels({
14653
14989
  disabled: { type: Boolean },
14990
+ isCreatable: { type: Boolean },
14654
14991
  isLoading: { type: Boolean },
14655
14992
  isMultiple: { type: Boolean },
14656
14993
  isSearchable: { type: Boolean },
@@ -14665,6 +15002,7 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14665
15002
  "keyDown",
14666
15003
  "deselect",
14667
15004
  "select",
15005
+ "create",
14668
15006
  "search",
14669
15007
  "close",
14670
15008
  "open"
@@ -14684,6 +15022,12 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14684
15022
  const focusElement = computed(() => v$2(searchInputElementRef) ?? v$2(anchorRef));
14685
15023
  const highlightedId = computed(() => unref(rawOptions)[unref(highlightedIndex)]?.value);
14686
15024
  const rawOptions = computed(() => __props.options.map((group) => group[1]).flat());
15025
+ const trimmedSearch = computed(() => unref(modelSearch).trim());
15026
+ const canCreate = computed(() => {
15027
+ if (!__props.isCreatable || trimmedSearch.value === "") return false;
15028
+ const query = trimmedSearch.value.toLowerCase();
15029
+ return !unref(rawOptions).some((o) => o.label.toLowerCase() === query);
15030
+ });
14687
15031
  const { isOpen: isPopupOpen, toggle, onKeyDownBase } = useDropdownPopup({
14688
15032
  anchorRef,
14689
15033
  popupRef: anchorPopupRef,
@@ -14701,6 +15045,13 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14701
15045
  modelSearch.value = "";
14702
15046
  nextTick(() => unref(focusElement)?.focus());
14703
15047
  }
15048
+ function create() {
15049
+ emit("create", trimmedSearch.value);
15050
+ if (!__props.isMultiple) isPopupOpen.value = false;
15051
+ highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;
15052
+ modelSearch.value = "";
15053
+ nextTick(() => unref(focusElement)?.focus());
15054
+ }
14704
15055
  function onKeyDown(evt) {
14705
15056
  emit("keyDown", evt);
14706
15057
  if (!unref(isPopupOpen)) {
@@ -14724,6 +15075,7 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14724
15075
  case "Enter":
14725
15076
  const id = unref(highlightedId);
14726
15077
  if (id !== void 0) select(id);
15078
+ else if (unref(canCreate)) create();
14727
15079
  break;
14728
15080
  default:
14729
15081
  if (evt.key.length === 1) highlightedIndex.value = unref(rawOptions).findIndex((o) => o.label.toLowerCase().startsWith(evt.key.toLowerCase()));
@@ -14820,87 +15172,99 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14820
15172
  direction: "vertical",
14821
15173
  "use-anchor-width": ""
14822
15174
  }, {
14823
- default: withCtx(() => [__props.isSearchable ? (openBlock(), createBlock(FluxFormInput_default, {
14824
- key: 0,
14825
- modelValue: modelSearch.value,
14826
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelSearch.value = $event),
14827
- ref: "searchInputElement",
14828
- "auto-complete": "off",
14829
- class: normalizeClass(unref(Form_module_default).formSelectInput),
14830
- type: "search",
14831
- "icon-trailing": "magnifying-glass",
14832
- placeholder: unref(translate)("flux.search"),
14833
- onKeydown: onKeyDown
14834
- }, null, 8, [
14835
- "modelValue",
14836
- "class",
14837
- "placeholder"
14838
- ])) : createCommentVNode("", true), !__props.isLoading && __props.options.length === 0 ? (openBlock(), createBlock(FluxMenu_default, { key: 1 }, {
14839
- default: withCtx(() => [createVNode(FluxMenuSubHeader_default, { label: unref(translate)("flux.noItems") }, null, 8, ["label"])]),
14840
- _: 1
14841
- })) : (openBlock(), createBlock(FluxMenu_default, { key: 2 }, {
14842
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, ([item, subItems], index) => {
14843
- return openBlock(), createElementBlock(Fragment, { key: `group-${index}` }, [createVNode(FluxMenuGroup_default, null, {
14844
- default: withCtx(() => [unref(isFluxFormSelectGroup)(item) ? (openBlock(), createBlock(FluxMenuSubHeader_default, {
14845
- key: 0,
14846
- "icon-leading": item.icon,
14847
- label: item.label
14848
- }, null, 8, ["icon-leading", "label"])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(subItems, (subItem, index) => {
14849
- return openBlock(), createElementBlock(Fragment, null, [unref(isFluxFormSelectOption)(subItem) ? (openBlock(), createBlock(FluxMenuItem_default, {
14850
- ref_for: true,
14851
- ref: "optionElements",
14852
- key: index,
14853
- command: subItem.command,
14854
- "command-icon": subItem.commandIcon,
14855
- "icon-leading": subItem.icon,
14856
- "image-alt": subItem.imageAlt,
14857
- "image-src": subItem.imageSrc,
14858
- "is-active": !!__props.selected.find((so) => so.value === subItem.value),
14859
- "is-highlighted": highlightedId.value === subItem.value,
14860
- label: subItem.label,
14861
- type: "button",
14862
- onClick: ($event) => select(subItem.value)
14863
- }, null, 8, [
14864
- "command",
14865
- "command-icon",
14866
- "icon-leading",
14867
- "image-alt",
14868
- "image-src",
14869
- "is-active",
14870
- "is-highlighted",
14871
- "label",
14872
- "onClick"
14873
- ])) : createCommentVNode("", true)], 64);
14874
- }), 256))]),
14875
- _: 2
14876
- }, 1024), unref(isFluxFormSelectOption)(item) ? (openBlock(), createBlock(FluxMenuItem_default, {
14877
- ref_for: true,
14878
- ref: "optionElements",
14879
- key: `item-${index}`,
14880
- command: item.command,
14881
- "command-icon": item.commandIcon,
14882
- "icon-leading": item.icon,
14883
- "image-alt": item.imageAlt,
14884
- "image-src": item.imageSrc,
14885
- "is-active": !!__props.selected.find((so) => so.value === item.value),
14886
- "is-highlighted": highlightedId.value === item.value,
14887
- label: item.label,
15175
+ default: withCtx(() => [
15176
+ __props.isSearchable ? (openBlock(), createBlock(FluxFormInput_default, {
15177
+ key: 0,
15178
+ modelValue: modelSearch.value,
15179
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelSearch.value = $event),
15180
+ ref: "searchInputElement",
15181
+ "auto-complete": "off",
15182
+ class: normalizeClass(unref(Form_module_default).formSelectInput),
15183
+ type: "search",
15184
+ "icon-trailing": "magnifying-glass",
15185
+ placeholder: unref(translate)("flux.search"),
15186
+ onKeydown: onKeyDown
15187
+ }, null, 8, [
15188
+ "modelValue",
15189
+ "class",
15190
+ "placeholder"
15191
+ ])) : createCommentVNode("", true),
15192
+ canCreate.value ? (openBlock(), createBlock(FluxMenu_default, { key: 1 }, {
15193
+ default: withCtx(() => [createVNode(FluxMenuItem_default, {
15194
+ "icon-leading": "plus",
15195
+ label: unref(translate)("flux.createOption", { value: trimmedSearch.value }),
14888
15196
  type: "button",
14889
- onClick: ($event) => select(item.value)
14890
- }, null, 8, [
14891
- "command",
14892
- "command-icon",
14893
- "icon-leading",
14894
- "image-alt",
14895
- "image-src",
14896
- "is-active",
14897
- "is-highlighted",
14898
- "label",
14899
- "onClick"
14900
- ])) : createCommentVNode("", true)], 64);
14901
- }), 128))]),
14902
- _: 1
14903
- }))]),
15197
+ onClick: _cache[2] || (_cache[2] = ($event) => create())
15198
+ }, null, 8, ["label"])]),
15199
+ _: 1
15200
+ })) : createCommentVNode("", true),
15201
+ !__props.isLoading && __props.options.length === 0 && !canCreate.value ? (openBlock(), createBlock(FluxMenu_default, { key: 2 }, {
15202
+ default: withCtx(() => [createVNode(FluxMenuSubHeader_default, { label: unref(translate)("flux.noItems") }, null, 8, ["label"])]),
15203
+ _: 1
15204
+ })) : __props.options.length > 0 ? (openBlock(), createBlock(FluxMenu_default, { key: 3 }, {
15205
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, ([item, subItems], index) => {
15206
+ return openBlock(), createElementBlock(Fragment, { key: `group-${index}` }, [createVNode(FluxMenuGroup_default, null, {
15207
+ default: withCtx(() => [unref(isFluxFormSelectGroup)(item) ? (openBlock(), createBlock(FluxMenuSubHeader_default, {
15208
+ key: 0,
15209
+ "icon-leading": item.icon,
15210
+ label: item.label
15211
+ }, null, 8, ["icon-leading", "label"])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(subItems, (subItem, index) => {
15212
+ return openBlock(), createElementBlock(Fragment, null, [unref(isFluxFormSelectOption)(subItem) ? (openBlock(), createBlock(FluxMenuItem_default, {
15213
+ ref_for: true,
15214
+ ref: "optionElements",
15215
+ key: index,
15216
+ command: subItem.command,
15217
+ "command-icon": subItem.commandIcon,
15218
+ "icon-leading": subItem.icon,
15219
+ "image-alt": subItem.imageAlt,
15220
+ "image-src": subItem.imageSrc,
15221
+ "is-active": !!__props.selected.find((so) => so.value === subItem.value),
15222
+ "is-highlighted": highlightedId.value === subItem.value,
15223
+ label: subItem.label,
15224
+ type: "button",
15225
+ onClick: ($event) => select(subItem.value)
15226
+ }, null, 8, [
15227
+ "command",
15228
+ "command-icon",
15229
+ "icon-leading",
15230
+ "image-alt",
15231
+ "image-src",
15232
+ "is-active",
15233
+ "is-highlighted",
15234
+ "label",
15235
+ "onClick"
15236
+ ])) : createCommentVNode("", true)], 64);
15237
+ }), 256))]),
15238
+ _: 2
15239
+ }, 1024), unref(isFluxFormSelectOption)(item) ? (openBlock(), createBlock(FluxMenuItem_default, {
15240
+ ref_for: true,
15241
+ ref: "optionElements",
15242
+ key: `item-${index}`,
15243
+ command: item.command,
15244
+ "command-icon": item.commandIcon,
15245
+ "icon-leading": item.icon,
15246
+ "image-alt": item.imageAlt,
15247
+ "image-src": item.imageSrc,
15248
+ "is-active": !!__props.selected.find((so) => so.value === item.value),
15249
+ "is-highlighted": highlightedId.value === item.value,
15250
+ label: item.label,
15251
+ type: "button",
15252
+ onClick: ($event) => select(item.value)
15253
+ }, null, 8, [
15254
+ "command",
15255
+ "command-icon",
15256
+ "icon-leading",
15257
+ "image-alt",
15258
+ "image-src",
15259
+ "is-active",
15260
+ "is-highlighted",
15261
+ "label",
15262
+ "onClick"
15263
+ ])) : createCommentVNode("", true)], 64);
15264
+ }), 128))]),
15265
+ _: 1
15266
+ })) : createCommentVNode("", true)
15267
+ ]),
14904
15268
  _: 1
14905
15269
  }, 8, ["class", "anchor"])) : createCommentVNode("", true)]),
14906
15270
  _: 1
@@ -14950,7 +15314,7 @@ var FluxTicks_default = /* @__PURE__ */ defineComponent({
14950
15314
  });
14951
15315
  //#endregion
14952
15316
  //#region src/component/primitive/SliderBase.vue?vue&type=script&setup=true&lang.ts
14953
- var _hoisted_1$47 = ["aria-disabled"];
15317
+ var _hoisted_1$53 = ["aria-disabled"];
14954
15318
  //#endregion
14955
15319
  //#region src/component/primitive/SliderBase.vue
14956
15320
  var SliderBase_default = /* @__PURE__ */ defineComponent({
@@ -15006,13 +15370,13 @@ var SliderBase_default = /* @__PURE__ */ defineComponent({
15006
15370
  key: 0,
15007
15371
  lower: __props.min,
15008
15372
  upper: __props.max
15009
- }, null, 8, ["lower", "upper"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$47);
15373
+ }, null, 8, ["lower", "upper"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$53);
15010
15374
  };
15011
15375
  }
15012
15376
  });
15013
15377
  //#endregion
15014
15378
  //#region src/component/primitive/SliderThumb.vue?vue&type=script&setup=true&lang.ts
15015
- var _hoisted_1$46 = [
15379
+ var _hoisted_1$52 = [
15016
15380
  "aria-disabled",
15017
15381
  "aria-label",
15018
15382
  "aria-valuemax",
@@ -15071,7 +15435,7 @@ var SliderThumb_default = /* @__PURE__ */ defineComponent({
15071
15435
  type: "button",
15072
15436
  onKeydown: onKeyDown,
15073
15437
  onPointerdown: _cache[0] || (_cache[0] = ($event) => $emit("grab", $event))
15074
- }, null, 46, _hoisted_1$46);
15438
+ }, null, 46, _hoisted_1$52);
15075
15439
  };
15076
15440
  }
15077
15441
  });
@@ -15176,7 +15540,7 @@ var Divider_module_default = {
15176
15540
  };
15177
15541
  //#endregion
15178
15542
  //#region src/component/FluxSeparator.vue?vue&type=script&setup=true&lang.ts
15179
- var _hoisted_1$45 = ["aria-orientation"];
15543
+ var _hoisted_1$51 = ["aria-orientation"];
15180
15544
  //#endregion
15181
15545
  //#region src/component/FluxSeparator.vue
15182
15546
  var FluxSeparator_default = /* @__PURE__ */ defineComponent({
@@ -15188,7 +15552,7 @@ var FluxSeparator_default = /* @__PURE__ */ defineComponent({
15188
15552
  class: normalizeClass(__props.direction === "horizontal" ? unref(Divider_module_default).separatorHorizontal : unref(Divider_module_default).separatorVertical),
15189
15553
  role: "separator",
15190
15554
  "aria-orientation": __props.direction
15191
- }, null, 10, _hoisted_1$45);
15555
+ }, null, 10, _hoisted_1$51);
15192
15556
  };
15193
15557
  }
15194
15558
  });
@@ -15430,16 +15794,16 @@ var FluxFormSlider_default = /* @__PURE__ */ defineComponent({
15430
15794
  });
15431
15795
  //#endregion
15432
15796
  //#region src/css/component/primitive/CoordinatePicker.module.scss
15433
- var { "sliderThumb": _0$9 } = Slider_module_default;
15797
+ var { "sliderThumb": _0$11 } = Slider_module_default;
15434
15798
  var CoordinatePicker_module_default = {
15435
15799
  coordinatePicker: `coordinate-picker`,
15436
- coordinatePickerThumb: `coordinate-picker-thumb ${_0$9}`,
15800
+ coordinatePickerThumb: `coordinate-picker-thumb ${_0$11}`,
15437
15801
  isDisabled: `is-disabled`,
15438
15802
  isDragging: `is-dragging`
15439
15803
  };
15440
15804
  //#endregion
15441
15805
  //#region src/component/primitive/CoordinatePickerThumb.vue?vue&type=script&setup=true&lang.ts
15442
- var _hoisted_1$44 = [
15806
+ var _hoisted_1$50 = [
15443
15807
  "aria-disabled",
15444
15808
  "aria-valuetext",
15445
15809
  "tabindex"
@@ -15495,13 +15859,13 @@ var CoordinatePickerThumb_default = /* @__PURE__ */ defineComponent({
15495
15859
  type: "button",
15496
15860
  onKeydown: onKeyDown,
15497
15861
  onPointerdown: _cache[0] || (_cache[0] = ($event) => $emit("grab", $event))
15498
- }, null, 46, _hoisted_1$44);
15862
+ }, null, 46, _hoisted_1$50);
15499
15863
  };
15500
15864
  }
15501
15865
  });
15502
15866
  //#endregion
15503
15867
  //#region src/component/primitive/CoordinatePicker.vue?vue&type=script&setup=true&lang.ts
15504
- var _hoisted_1$43 = ["aria-disabled", "aria-label"];
15868
+ var _hoisted_1$49 = ["aria-disabled", "aria-label"];
15505
15869
  //#endregion
15506
15870
  //#region src/component/primitive/CoordinatePicker.vue
15507
15871
  var CoordinatePicker_default = /* @__PURE__ */ defineComponent({
@@ -15611,7 +15975,7 @@ var CoordinatePicker_default = /* @__PURE__ */ defineComponent({
15611
15975
  "disabled",
15612
15976
  "is-dragging",
15613
15977
  "position"
15614
- ])], 42, _hoisted_1$43);
15978
+ ])], 42, _hoisted_1$49);
15615
15979
  };
15616
15980
  }
15617
15981
  });
@@ -16004,14 +16368,14 @@ var FluxPrimaryButton_default = /* @__PURE__ */ defineComponent({
16004
16368
  });
16005
16369
  //#endregion
16006
16370
  //#region src/component/FluxColorSelect.vue?vue&type=script&setup=true&lang.ts
16007
- var _hoisted_1$42 = [
16371
+ var _hoisted_1$48 = [
16008
16372
  "aria-checked",
16009
16373
  "aria-label",
16010
16374
  "disabled",
16011
16375
  "tabindex",
16012
16376
  "onClick"
16013
16377
  ];
16014
- var _hoisted_2$15 = [
16378
+ var _hoisted_2$17 = [
16015
16379
  "disabled",
16016
16380
  "tabindex",
16017
16381
  "aria-label",
@@ -16079,7 +16443,7 @@ var FluxColorSelect_default = /* @__PURE__ */ defineComponent({
16079
16443
  class: normalizeClass(unref(Color_module_default).colorSelectCheck),
16080
16444
  name: "check",
16081
16445
  size: 14
16082
- }, null, 8, ["class"])], 14, _hoisted_1$42);
16446
+ }, null, 8, ["class"])], 14, _hoisted_1$48);
16083
16447
  }), 128)), __props.isCustomAllowed ? (openBlock(), createBlock(FluxFlyout_default, { key: 0 }, {
16084
16448
  opener: withCtx(({ open }) => [createElementVNode("button", {
16085
16449
  class: normalizeClass(unref(Color_module_default).colorSelectCustom),
@@ -16091,7 +16455,7 @@ var FluxColorSelect_default = /* @__PURE__ */ defineComponent({
16091
16455
  }, [createVNode(FluxIcon_default, {
16092
16456
  name: "ellipsis-h",
16093
16457
  size: 16
16094
- })], 10, _hoisted_2$15)]),
16458
+ })], 10, _hoisted_2$17)]),
16095
16459
  default: withCtx(({ close }) => [createVNode(FluxColorPicker_default, {
16096
16460
  modelValue: customColor.value,
16097
16461
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => customColor.value = $event),
@@ -16132,9 +16496,96 @@ var FluxContainer_default = /* @__PURE__ */ defineComponent({
16132
16496
  }
16133
16497
  });
16134
16498
  //#endregion
16499
+ //#region src/css/component/ContextMenu.module.scss
16500
+ var { "basePane": _0$10 } = Pane_module_default$1;
16501
+ var ContextMenu_module_default = {
16502
+ contextMenu: `context-menu`,
16503
+ contextMenuPopup: `context-menu-popup ${_0$10}`
16504
+ };
16505
+ //#endregion
16506
+ //#region src/component/FluxContextMenu.vue
16507
+ var FluxContextMenu_default = /* @__PURE__ */ defineComponent({
16508
+ __name: "FluxContextMenu",
16509
+ props: {
16510
+ debugCone: {
16511
+ type: Boolean,
16512
+ default: false
16513
+ },
16514
+ disabled: { type: Boolean },
16515
+ position: { default: "bottom-left" }
16516
+ },
16517
+ emits: ["open", "close"],
16518
+ setup(__props, { emit: __emit }) {
16519
+ const emit = __emit;
16520
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
16521
+ const popupRef = useTemplateRef("popup");
16522
+ const isOpen = ref(false);
16523
+ const cursor = reactive({
16524
+ x: 0,
16525
+ y: 0
16526
+ });
16527
+ const virtualAnchor = { $el: { getBoundingClientRect: () => new DOMRect(cursor.x, cursor.y, 0, 0) } };
16528
+ const menuFlyout = useMenuFlyoutProvider({
16529
+ debugCone: toRef(() => __props.debugCone),
16530
+ onCloseAll: () => close()
16531
+ });
16532
+ I$1(popupRef, { disable: computed(() => menuFlyout.keyboardStack.value.length > 0) });
16533
+ function onContextMenu(evt) {
16534
+ if (disabled.value) return;
16535
+ evt.preventDefault();
16536
+ cursor.x = evt.clientX;
16537
+ cursor.y = evt.clientY;
16538
+ isOpen.value = true;
16539
+ emit("open", evt);
16540
+ }
16541
+ function close() {
16542
+ if (!isOpen.value) return;
16543
+ isOpen.value = false;
16544
+ emit("close");
16545
+ }
16546
+ if (!C$2) {
16547
+ O$1(ref(window), "pointerdown", (evt) => {
16548
+ if (!isOpen.value) return;
16549
+ const target = evt.target;
16550
+ const root = popupRef.value?.$el ?? null;
16551
+ if (root && target && root.contains(target) || menuFlyout.isInsidePopups(target)) return;
16552
+ close();
16553
+ }, { capture: true });
16554
+ O$1(ref(window), "keydown", (evt) => {
16555
+ if (isOpen.value && evt.key === "Escape") close();
16556
+ });
16557
+ O$1(ref(window), "scroll", () => {
16558
+ if (isOpen.value) close();
16559
+ }, { capture: true });
16560
+ }
16561
+ return (_ctx, _cache) => {
16562
+ return openBlock(), createElementBlock("div", {
16563
+ class: normalizeClass(unref(ContextMenu_module_default).contextMenu),
16564
+ onContextmenu: onContextMenu
16565
+ }, [renderSlot(_ctx.$slots, "default"), (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(FluxFadeTransition_default), null, {
16566
+ default: withCtx(() => [isOpen.value ? (openBlock(), createBlock(unref(AnchorPopup_default), {
16567
+ key: 0,
16568
+ ref: "popup",
16569
+ anchor: virtualAnchor,
16570
+ class: normalizeClass(unref(ContextMenu_module_default).contextMenuPopup),
16571
+ "clamp-to-viewport": "",
16572
+ margin: 2,
16573
+ position: __props.position,
16574
+ role: "menu",
16575
+ onClick: _cache[0] || (_cache[0] = ($event) => close())
16576
+ }, {
16577
+ default: withCtx(() => [renderSlot(_ctx.$slots, "menu", normalizeProps(guardReactiveProps({ close })))]),
16578
+ _: 3
16579
+ }, 8, ["class", "position"])) : createCommentVNode("", true)]),
16580
+ _: 3
16581
+ })]))], 34);
16582
+ };
16583
+ }
16584
+ });
16585
+ //#endregion
16135
16586
  //#region src/component/FluxFormCheckbox.vue?vue&type=script&setup=true&lang.ts
16136
- var _hoisted_1$41 = ["for"];
16137
- var _hoisted_2$14 = [
16587
+ var _hoisted_1$47 = ["for"];
16588
+ var _hoisted_2$16 = [
16138
16589
  "id",
16139
16590
  "checked",
16140
16591
  "disabled",
@@ -16209,7 +16660,7 @@ var FluxFormCheckbox_default = /* @__PURE__ */ defineComponent({
16209
16660
  "aria-invalid": errorResolved.value ? true : void 0,
16210
16661
  onChange,
16211
16662
  onClick
16212
- }, null, 42, _hoisted_2$14),
16663
+ }, null, 42, _hoisted_2$16),
16213
16664
  createElementVNode("button", {
16214
16665
  "aria-hidden": "true",
16215
16666
  class: normalizeClass(unref(Form_module_default).formCheckboxElement),
@@ -16233,7 +16684,7 @@ var FluxFormCheckbox_default = /* @__PURE__ */ defineComponent({
16233
16684
  key: 1,
16234
16685
  class: normalizeClass(unref(Form_module_default).formCheckboxSubLabel)
16235
16686
  }, toDisplayString(__props.subLabel), 3)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)
16236
- ], 10, _hoisted_1$41);
16687
+ ], 10, _hoisted_1$47);
16237
16688
  };
16238
16689
  }
16239
16690
  });
@@ -16305,16 +16756,16 @@ var FluxFormSelect_default = /* @__PURE__ */ defineComponent({
16305
16756
  });
16306
16757
  //#endregion
16307
16758
  //#region src/css/component/Pagination.module.scss
16308
- var { "secondaryButtonLabel": _0$8, "secondaryButton": _1$2, "secondaryButtonIcon": _2$1 } = Button_module_default;
16759
+ var { "secondaryButton": _0$9, "secondaryButtonIcon": _1$2, "secondaryButtonLabel": _2$1 } = Button_module_default;
16309
16760
  var Pagination_module_default = {
16310
16761
  pagination: `pagination`,
16311
- paginationButton: `pagination-button ${_1$2}`,
16762
+ paginationButton: `pagination-button ${_0$9}`,
16312
16763
  secondaryButton: `secondary-button`,
16313
16764
  paginationButtonArrow: `pagination-button-arrow`,
16314
16765
  paginationButtonCurrent: `pagination-button-current`,
16315
16766
  paginationButtonSpacer: `pagination-button-spacer`,
16316
- paginationButtonIcon: `pagination-button-icon ${_2$1}`,
16317
- paginationButtonLabel: `pagination-button-label ${_0$8}`,
16767
+ paginationButtonIcon: `pagination-button-icon ${_1$2}`,
16768
+ paginationButtonLabel: `pagination-button-label ${_2$1}`,
16318
16769
  paginationBar: `pagination-bar`,
16319
16770
  paginationBarLimit: `pagination-bar-limit`,
16320
16771
  paginationBarLimitDisplayingOf: `pagination-bar-limit-displaying-of`,
@@ -16394,7 +16845,7 @@ var FluxPaginationButton_default = /* @__PURE__ */ defineComponent({
16394
16845
  });
16395
16846
  //#endregion
16396
16847
  //#region src/component/FluxPagination.vue?vue&type=script&setup=true&lang.ts
16397
- var _hoisted_1$40 = ["aria-label"];
16848
+ var _hoisted_1$46 = ["aria-label"];
16398
16849
  //#endregion
16399
16850
  //#region src/component/FluxPagination.vue
16400
16851
  var FluxPagination_default = /* @__PURE__ */ defineComponent({
@@ -16509,7 +16960,7 @@ var FluxPagination_default = /* @__PURE__ */ defineComponent({
16509
16960
  "aria-label": unref(translate)("flux.next"),
16510
16961
  onClick: next
16511
16962
  }, null, 8, ["disabled", "aria-label"])) : createCommentVNode("", true)
16512
- ], 10, _hoisted_1$40);
16963
+ ], 10, _hoisted_1$46);
16513
16964
  };
16514
16965
  }
16515
16966
  });
@@ -16576,9 +17027,9 @@ var FluxPaginationBar_default = /* @__PURE__ */ defineComponent({
16576
17027
  });
16577
17028
  //#endregion
16578
17029
  //#region src/css/component/Table.module.scss
16579
- var { "basePaneElement": _0$7, "basePaneLoader": _1$1 } = Pane_module_default$1;
17030
+ var { "basePaneElement": _0$8, "basePaneLoader": _1$1 } = Pane_module_default$1;
16580
17031
  var Table_module_default = {
16581
- table: `table ${_0$7}`,
17032
+ table: `table ${_0$8}`,
16582
17033
  tableBase: `table-base`,
16583
17034
  tableFill: `table-fill`,
16584
17035
  tablePagination: `table-pagination`,
@@ -16601,13 +17052,21 @@ var Table_module_default = {
16601
17052
  tableBar: `table-bar table-cell`,
16602
17053
  tableBarContent: `table-bar-content table-cell-content`,
16603
17054
  tableSort: `table-sort`,
16604
- basePaneStructure: `base-pane-structure`
17055
+ basePaneStructure: `base-pane-structure`,
17056
+ tableCellExpand: `table-cell-expand`,
17057
+ tableExpandToggle: `table-expand-toggle`,
17058
+ isExpanded: `is-expanded`,
17059
+ tableExpandContent: `table-expand-content`
16605
17060
  };
16606
17061
  //#endregion
17062
+ //#region src/component/FluxTableCell.vue?vue&type=script&setup=true&lang.ts
17063
+ var _hoisted_1$45 = ["colspan"];
17064
+ //#endregion
16607
17065
  //#region src/component/FluxTableCell.vue
16608
17066
  var FluxTableCell_default = /* @__PURE__ */ defineComponent({
16609
17067
  __name: "FluxTableCell",
16610
17068
  props: {
17069
+ colspan: {},
16611
17070
  contentDirection: { default: "row" },
16612
17071
  contentGap: {}
16613
17072
  },
@@ -16616,6 +17075,7 @@ var FluxTableCell_default = /* @__PURE__ */ defineComponent({
16616
17075
  return (_ctx, _cache) => {
16617
17076
  return openBlock(), createElementBlock("td", {
16618
17077
  class: normalizeClass(unref(clsx)(unref(Table_module_default).tableCell, unref(isBordered) && unref(Table_module_default).isBordered, unref(isHoverable) && unref(Table_module_default).isHoverable, unref(isSeparated) && unref(Table_module_default).isSeparated, unref(isStriped) && unref(Table_module_default).isStriped)),
17078
+ colspan: __props.colspan,
16619
17079
  role: "cell"
16620
17080
  }, [renderSlot(_ctx.$slots, "content", {}, () => [createElementVNode("div", {
16621
17081
  class: normalizeClass(unref(Table_module_default).tableCellContent),
@@ -16623,7 +17083,7 @@ var FluxTableCell_default = /* @__PURE__ */ defineComponent({
16623
17083
  flexFlow: __props.contentDirection,
16624
17084
  gap: __props.contentGap != null ? `${__props.contentGap}px` : void 0
16625
17085
  })
16626
- }, [renderSlot(_ctx.$slots, "default")], 6)])], 2);
17086
+ }, [renderSlot(_ctx.$slots, "default")], 6)])], 10, _hoisted_1$45);
16627
17087
  };
16628
17088
  }
16629
17089
  });
@@ -16640,9 +17100,9 @@ var FluxTableRow_default = /* @__PURE__ */ defineComponent({
16640
17100
  });
16641
17101
  //#endregion
16642
17102
  //#region src/component/FluxTable.vue?vue&type=script&setup=true&lang.ts
16643
- var _hoisted_1$39 = { key: 0 };
16644
- var _hoisted_2$13 = { key: 1 };
16645
- var _hoisted_3$4 = { key: 2 };
17103
+ var _hoisted_1$44 = { key: 0 };
17104
+ var _hoisted_2$15 = { key: 1 };
17105
+ var _hoisted_3$5 = { key: 2 };
16646
17106
  //#endregion
16647
17107
  //#region src/component/FluxTable.vue
16648
17108
  var FluxTable_default = /* @__PURE__ */ defineComponent({
@@ -16689,8 +17149,8 @@ var FluxTable_default = /* @__PURE__ */ defineComponent({
16689
17149
  }, [
16690
17150
  createElementVNode("table", { class: normalizeClass(unref(Table_module_default).tableBase) }, [
16691
17151
  renderSlot(_ctx.$slots, "colgroups"),
16692
- slots.header ? (openBlock(), createElementBlock("thead", _hoisted_1$39, [renderSlot(_ctx.$slots, "header")])) : createCommentVNode("", true),
16693
- slots.default ? (openBlock(), createElementBlock("tbody", _hoisted_2$13, [renderSlot(_ctx.$slots, "default"), __props.fillColumns ? (openBlock(), createBlock(FluxTableRow_default, {
17152
+ slots.header ? (openBlock(), createElementBlock("thead", _hoisted_1$44, [renderSlot(_ctx.$slots, "header")])) : createCommentVNode("", true),
17153
+ slots.default ? (openBlock(), createElementBlock("tbody", _hoisted_2$15, [renderSlot(_ctx.$slots, "default"), __props.fillColumns ? (openBlock(), createBlock(FluxTableRow_default, {
16694
17154
  key: 0,
16695
17155
  class: normalizeClass(unref(Table_module_default).tableFill)
16696
17156
  }, {
@@ -16699,7 +17159,7 @@ var FluxTable_default = /* @__PURE__ */ defineComponent({
16699
17159
  }), 128))]),
16700
17160
  _: 1
16701
17161
  }, 8, ["class"])) : createCommentVNode("", true)])) : createCommentVNode("", true),
16702
- slots.footer ? (openBlock(), createElementBlock("tfoot", _hoisted_3$4, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true),
17162
+ slots.footer ? (openBlock(), createElementBlock("tfoot", _hoisted_3$5, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true),
16703
17163
  slots.caption ? (openBlock(), createElementBlock("caption", {
16704
17164
  key: 3,
16705
17165
  style: normalizeStyle({ captionSide: __props.captionSide })
@@ -16723,8 +17183,8 @@ var FluxTable_default = /* @__PURE__ */ defineComponent({
16723
17183
  });
16724
17184
  //#endregion
16725
17185
  //#region src/component/FluxTableHeader.vue?vue&type=script&setup=true&lang.ts
16726
- var _hoisted_1$38 = ["aria-sort"];
16727
- var _hoisted_2$12 = ["aria-label", "onClick"];
17186
+ var _hoisted_1$43 = ["aria-sort"];
17187
+ var _hoisted_2$14 = ["aria-label", "onClick"];
16728
17188
  //#endregion
16729
17189
  //#region src/component/FluxTableHeader.vue
16730
17190
  var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
@@ -16763,7 +17223,7 @@ var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
16763
17223
  }, [createVNode(FluxIcon_default, {
16764
17224
  size: 16,
16765
17225
  name: sortingIcon.value
16766
- }, null, 8, ["name"])], 10, _hoisted_2$12)]),
17226
+ }, null, 8, ["name"])], 10, _hoisted_2$14)]),
16767
17227
  default: withCtx(() => [createVNode(FluxMenu_default, null, {
16768
17228
  default: withCtx(() => [createVNode(FluxMenuGroup_default, null, {
16769
17229
  default: withCtx(() => [createVNode(FluxMenuItem_default, {
@@ -16790,7 +17250,7 @@ var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
16790
17250
  _: 1
16791
17251
  })]),
16792
17252
  _: 1
16793
- })) : createCommentVNode("", true)], 2)], 14, _hoisted_1$38);
17253
+ })) : createCommentVNode("", true)], 2)], 14, _hoisted_1$43);
16794
17254
  };
16795
17255
  }
16796
17256
  });
@@ -16799,6 +17259,7 @@ var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
16799
17259
  var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16800
17260
  __name: "FluxDataTable",
16801
17261
  props: /*@__PURE__*/ mergeModels({
17262
+ expandMode: { default: "multiple" },
16802
17263
  fillColumns: {},
16803
17264
  isBordered: {
16804
17265
  type: Boolean,
@@ -16829,23 +17290,32 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16829
17290
  uniqueKey: {}
16830
17291
  }, {
16831
17292
  "selected": {},
16832
- "selectedModifiers": {}
17293
+ "selectedModifiers": {},
17294
+ "expanded": { default: () => [] },
17295
+ "expandedModifiers": {}
16833
17296
  }),
16834
- emits: /*@__PURE__*/ mergeModels(["limit", "navigate"], ["update:selected"]),
17297
+ emits: /*@__PURE__*/ mergeModels(["limit", "navigate"], ["update:selected", "update:expanded"]),
16835
17298
  setup(__props, { emit: __emit }) {
16836
17299
  const IGNORED_SLOTS = [
16837
17300
  "filter",
16838
17301
  "header",
16839
17302
  "footer",
16840
17303
  "colgroups",
16841
- "pagination"
17304
+ "pagination",
17305
+ "expandable"
16842
17306
  ];
16843
17307
  const emit = __emit;
16844
17308
  const selected = useModel(__props, "selected");
17309
+ const expanded = useModel(__props, "expanded");
16845
17310
  const slots = useSlots();
16846
17311
  const table = useTemplateRef("table");
16847
17312
  const treeDisabled = useDisabledInjection_default();
17313
+ const translate = useTranslate_default();
16848
17314
  const limitedItems = computed(() => __props.items.slice(0, __props.perPage));
17315
+ const hasExpandable = computed(() => "expandable" in slots);
17316
+ const columnCount = computed(() => {
17317
+ return Object.keys(slots).filter((name) => !IGNORED_SLOTS.includes(name)).length + (__props.selectionMode ? 1 : 0) + (unref(hasExpandable) ? 1 : 0);
17318
+ });
16849
17319
  const currentPageIds = computed(() => {
16850
17320
  if (!__props.uniqueKey) return [];
16851
17321
  return unref(limitedItems).map((item) => item[__props.uniqueKey]);
@@ -16897,6 +17367,20 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16897
17367
  }
16898
17368
  selected.value = current.filter((id) => !ids.includes(id));
16899
17369
  }
17370
+ function isItemExpanded(item) {
17371
+ const id = getItemId(item);
17372
+ return id !== void 0 && unref(expanded).includes(id);
17373
+ }
17374
+ function toggleExpand(item) {
17375
+ const id = getItemId(item);
17376
+ if (id === void 0) return;
17377
+ const current = unref(expanded);
17378
+ if (current.includes(id)) {
17379
+ expanded.value = current.filter((v) => v !== id);
17380
+ return;
17381
+ }
17382
+ expanded.value = __props.expandMode === "single" ? [id] : [...current, id];
17383
+ }
16900
17384
  watch(() => __props.items, () => {
16901
17385
  unref(table)?.$el.scrollTo(0, 0);
16902
17386
  });
@@ -16912,41 +17396,75 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16912
17396
  "is-striped": __props.isStriped
16913
17397
  }, createSlots({
16914
17398
  default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(limitedItems.value, (item, index) => {
16915
- return openBlock(), createBlock(FluxTableRow_default, {
16916
- key: __props.uniqueKey ? item[__props.uniqueKey] : index,
17399
+ return openBlock(), createElementBlock(Fragment, { key: __props.uniqueKey ? item[__props.uniqueKey] : index }, [createVNode(FluxTableRow_default, {
16917
17400
  class: normalizeClass(__props.selectionMode && !unref(treeDisabled) && unref(Table_module_default).isSelectableRow),
16918
17401
  "is-selected": __props.selectionMode ? isItemSelected(item) : false,
16919
17402
  onClick: ($event) => onRowClick(item, $event)
16920
17403
  }, {
16921
- default: withCtx(() => [__props.selectionMode ? (openBlock(), createBlock(FluxTableCell_default, {
16922
- key: 0,
16923
- class: normalizeClass(unref(Table_module_default).tableCellSelection)
16924
- }, {
16925
- default: withCtx(() => [createVNode(FluxFormCheckbox_default, {
16926
- "model-value": isItemSelected(item),
16927
- "onUpdate:modelValue": ($event) => onSelectRow(item)
16928
- }, null, 8, ["model-value", "onUpdate:modelValue"])]),
16929
- _: 2
16930
- }, 1032, ["class"])) : createCommentVNode("", true), (openBlock(), createElementBlock(Fragment, null, renderList(slots, (_, name) => {
16931
- return openBlock(), createElementBlock(Fragment, null, [!IGNORED_SLOTS.includes(name) ? renderSlot(_ctx.$slots, name, mergeProps({
17404
+ default: withCtx(() => [
17405
+ __props.selectionMode ? (openBlock(), createBlock(FluxTableCell_default, {
16932
17406
  key: 0,
16933
- ref_for: true
17407
+ class: normalizeClass(unref(Table_module_default).tableCellSelection)
16934
17408
  }, {
16935
- index,
16936
- item,
16937
- items: limitedItems.value,
16938
- page: __props.page,
16939
- perPage: __props.perPage,
16940
- total: __props.total,
16941
- isSelected: isItemSelected(item)
16942
- })) : createCommentVNode("", true)], 64);
16943
- }), 64))]),
17409
+ default: withCtx(() => [createVNode(FluxFormCheckbox_default, {
17410
+ "model-value": isItemSelected(item),
17411
+ "onUpdate:modelValue": ($event) => onSelectRow(item)
17412
+ }, null, 8, ["model-value", "onUpdate:modelValue"])]),
17413
+ _: 2
17414
+ }, 1032, ["class"])) : createCommentVNode("", true),
17415
+ hasExpandable.value ? (openBlock(), createBlock(FluxTableCell_default, {
17416
+ key: 1,
17417
+ class: normalizeClass(unref(Table_module_default).tableCellExpand)
17418
+ }, {
17419
+ default: withCtx(() => [createVNode(FluxAction_default, {
17420
+ class: normalizeClass(unref(clsx)(unref(Table_module_default).tableExpandToggle, isItemExpanded(item) && unref(Table_module_default).isExpanded)),
17421
+ icon: "chevron-right",
17422
+ "aria-expanded": isItemExpanded(item),
17423
+ "aria-label": isItemExpanded(item) ? unref(translate)("flux.collapseRow") : unref(translate)("flux.expandRow"),
17424
+ onClick: ($event) => toggleExpand(item)
17425
+ }, null, 8, [
17426
+ "class",
17427
+ "aria-expanded",
17428
+ "aria-label",
17429
+ "onClick"
17430
+ ])]),
17431
+ _: 2
17432
+ }, 1032, ["class"])) : createCommentVNode("", true),
17433
+ (openBlock(), createElementBlock(Fragment, null, renderList(slots, (_, name) => {
17434
+ return openBlock(), createElementBlock(Fragment, null, [!IGNORED_SLOTS.includes(name) ? renderSlot(_ctx.$slots, name, mergeProps({
17435
+ key: 0,
17436
+ ref_for: true
17437
+ }, {
17438
+ index,
17439
+ item,
17440
+ items: limitedItems.value,
17441
+ page: __props.page,
17442
+ perPage: __props.perPage,
17443
+ total: __props.total,
17444
+ isSelected: isItemSelected(item)
17445
+ })) : createCommentVNode("", true)], 64);
17446
+ }), 64))
17447
+ ]),
16944
17448
  _: 2
16945
17449
  }, 1032, [
16946
17450
  "class",
16947
17451
  "is-selected",
16948
17452
  "onClick"
16949
- ]);
17453
+ ]), hasExpandable.value && isItemExpanded(item) ? (openBlock(), createBlock(FluxTableRow_default, {
17454
+ key: 0,
17455
+ class: normalizeClass(unref(Table_module_default).tableExpandRow)
17456
+ }, {
17457
+ default: withCtx(() => [createVNode(FluxTableCell_default, { colspan: columnCount.value }, {
17458
+ content: withCtx(() => [createElementVNode("div", { class: normalizeClass(unref(Table_module_default).tableExpandContent) }, [renderSlot(_ctx.$slots, "expandable", mergeProps({ ref_for: true }, {
17459
+ index,
17460
+ item,
17461
+ isExpanded: true,
17462
+ toggle: () => toggleExpand(item)
17463
+ }))], 2)]),
17464
+ _: 2
17465
+ }, 1032, ["colspan"])]),
17466
+ _: 2
17467
+ }, 1032, ["class"])) : createCommentVNode("", true)], 64);
16950
17468
  }), 128))]),
16951
17469
  _: 2
16952
17470
  }, [
@@ -16955,7 +17473,7 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16955
17473
  fn: withCtx(() => [renderSlot(_ctx.$slots, "colgroups")]),
16956
17474
  key: "0"
16957
17475
  } : void 0,
16958
- "header" in slots || __props.selectionMode ? {
17476
+ "header" in slots || __props.selectionMode || hasExpandable.value ? {
16959
17477
  name: "header",
16960
17478
  fn: withCtx(() => [renderSlot(_ctx.$slots, "filter", normalizeProps(guardReactiveProps({
16961
17479
  page: __props.page,
@@ -16963,23 +17481,31 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16963
17481
  items: limitedItems.value,
16964
17482
  total: __props.total
16965
17483
  }))), createVNode(FluxTableRow_default, null, {
16966
- default: withCtx(() => [__props.selectionMode ? (openBlock(), createBlock(FluxTableHeader_default, {
16967
- key: 0,
16968
- "is-shrinking": "",
16969
- class: normalizeClass(unref(Table_module_default).tableCellSelection)
16970
- }, {
16971
- default: withCtx(() => [__props.selectionMode === "multiple" ? (openBlock(), createBlock(FluxFormCheckbox_default, {
17484
+ default: withCtx(() => [
17485
+ __props.selectionMode ? (openBlock(), createBlock(FluxTableHeader_default, {
16972
17486
  key: 0,
16973
- "model-value": selectAllState.value,
16974
- "onUpdate:modelValue": onSelectAll
16975
- }, null, 8, ["model-value"])) : createCommentVNode("", true)]),
16976
- _: 1
16977
- }, 8, ["class"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "header", normalizeProps(guardReactiveProps({
16978
- page: __props.page,
16979
- perPage: __props.perPage,
16980
- items: limitedItems.value,
16981
- total: __props.total
16982
- })))]),
17487
+ "is-shrinking": "",
17488
+ class: normalizeClass(unref(Table_module_default).tableCellSelection)
17489
+ }, {
17490
+ default: withCtx(() => [__props.selectionMode === "multiple" ? (openBlock(), createBlock(FluxFormCheckbox_default, {
17491
+ key: 0,
17492
+ "model-value": selectAllState.value,
17493
+ "onUpdate:modelValue": onSelectAll
17494
+ }, null, 8, ["model-value"])) : createCommentVNode("", true)]),
17495
+ _: 1
17496
+ }, 8, ["class"])) : createCommentVNode("", true),
17497
+ hasExpandable.value ? (openBlock(), createBlock(FluxTableHeader_default, {
17498
+ key: 1,
17499
+ "is-shrinking": "",
17500
+ class: normalizeClass(unref(Table_module_default).tableCellExpand)
17501
+ }, null, 8, ["class"])) : createCommentVNode("", true),
17502
+ renderSlot(_ctx.$slots, "header", normalizeProps(guardReactiveProps({
17503
+ page: __props.page,
17504
+ perPage: __props.perPage,
17505
+ items: limitedItems.value,
17506
+ total: __props.total
17507
+ })))
17508
+ ]),
16983
17509
  _: 3
16984
17510
  })]),
16985
17511
  key: "1"
@@ -17030,28 +17556,77 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
17030
17556
  };
17031
17557
  }
17032
17558
  });
17559
+ var DescriptionList_module_default = {
17560
+ descriptionList: `description-list`,
17561
+ descriptionListHeader: `description-list-header`,
17562
+ descriptionListItems: `description-list-items`,
17563
+ descriptionItem: `description-item`,
17564
+ isStacked: `is-stacked`,
17565
+ descriptionItemValue: `description-item-value`,
17566
+ descriptionItemTerm: `description-item-term`,
17567
+ descriptionItemIcon: `description-item-icon`,
17568
+ descriptionItemLabel: `description-item-label`,
17569
+ isHorizontal: `is-horizontal`
17570
+ };
17033
17571
  //#endregion
17034
- //#region src/component/FluxDisabled.vue
17035
- var FluxDisabled_default = /* @__PURE__ */ defineComponent({
17036
- inheritAttrs: false,
17037
- __name: "FluxDisabled",
17038
- props: { disabled: {
17039
- type: Boolean,
17040
- default: true
17041
- } },
17572
+ //#region src/component/FluxDescriptionItem.vue
17573
+ var FluxDescriptionItem_default = /* @__PURE__ */ defineComponent({
17574
+ __name: "FluxDescriptionItem",
17575
+ props: {
17576
+ icon: {},
17577
+ isStacked: { type: Boolean },
17578
+ label: {}
17579
+ },
17042
17580
  setup(__props) {
17043
- provide(FluxDisabledInjectionKey, toRef(() => __props.disabled));
17044
17581
  return (_ctx, _cache) => {
17045
- return renderSlot(_ctx.$slots, "default");
17582
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(clsx)(unref(DescriptionList_module_default).descriptionItem, __props.isStacked && unref(DescriptionList_module_default).isStacked)) }, [createElementVNode("dt", { class: normalizeClass(unref(DescriptionList_module_default).descriptionItemTerm) }, [__props.icon ? (openBlock(), createBlock(FluxIcon_default, {
17583
+ key: 0,
17584
+ class: normalizeClass(unref(DescriptionList_module_default).descriptionItemIcon),
17585
+ name: __props.icon
17586
+ }, null, 8, ["class", "name"])) : createCommentVNode("", true), createElementVNode("span", { class: normalizeClass(unref(DescriptionList_module_default).descriptionItemLabel) }, [renderSlot(_ctx.$slots, "label", {}, () => [createTextVNode(toDisplayString(__props.label), 1)])], 2)], 2), createElementVNode("dd", { class: normalizeClass(unref(DescriptionList_module_default).descriptionItemValue) }, [renderSlot(_ctx.$slots, "default")], 2)], 2);
17046
17587
  };
17047
17588
  }
17048
17589
  });
17049
17590
  //#endregion
17050
- //#region src/component/FluxDivider.vue?vue&type=script&setup=true&lang.ts
17051
- var _hoisted_1$37 = ["aria-orientation"];
17052
- //#endregion
17053
- //#region src/component/FluxDivider.vue
17054
- var FluxDivider_default = /* @__PURE__ */ defineComponent({
17591
+ //#region src/component/FluxDescriptionList.vue
17592
+ var FluxDescriptionList_default = /* @__PURE__ */ defineComponent({
17593
+ __name: "FluxDescriptionList",
17594
+ props: {
17595
+ direction: { default: "vertical" },
17596
+ title: {}
17597
+ },
17598
+ setup(__props) {
17599
+ const slots = useSlots();
17600
+ return (_ctx, _cache) => {
17601
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(DescriptionList_module_default).descriptionList) }, [__props.title || slots.header ? (openBlock(), createElementBlock("div", {
17602
+ key: 0,
17603
+ class: normalizeClass(unref(DescriptionList_module_default).descriptionListHeader)
17604
+ }, [renderSlot(_ctx.$slots, "header", {}, () => [createTextVNode(toDisplayString(__props.title), 1)])], 2)) : createCommentVNode("", true), createElementVNode("dl", { class: normalizeClass(unref(clsx)(unref(DescriptionList_module_default).descriptionListItems, __props.direction === "horizontal" && unref(DescriptionList_module_default).isHorizontal)) }, [renderSlot(_ctx.$slots, "default")], 2)], 2);
17605
+ };
17606
+ }
17607
+ });
17608
+ //#endregion
17609
+ //#region src/component/FluxDisabled.vue
17610
+ var FluxDisabled_default = /* @__PURE__ */ defineComponent({
17611
+ inheritAttrs: false,
17612
+ __name: "FluxDisabled",
17613
+ props: { disabled: {
17614
+ type: Boolean,
17615
+ default: true
17616
+ } },
17617
+ setup(__props) {
17618
+ provide(FluxDisabledInjectionKey, toRef(() => __props.disabled));
17619
+ return (_ctx, _cache) => {
17620
+ return renderSlot(_ctx.$slots, "default");
17621
+ };
17622
+ }
17623
+ });
17624
+ //#endregion
17625
+ //#region src/component/FluxDivider.vue?vue&type=script&setup=true&lang.ts
17626
+ var _hoisted_1$42 = ["aria-orientation"];
17627
+ //#endregion
17628
+ //#region src/component/FluxDivider.vue
17629
+ var FluxDivider_default = /* @__PURE__ */ defineComponent({
17055
17630
  __name: "FluxDivider",
17056
17631
  props: {
17057
17632
  contentPlacement: { default: "center" },
@@ -17070,23 +17645,23 @@ var FluxDivider_default = /* @__PURE__ */ defineComponent({
17070
17645
  }, [renderSlot(_ctx.$slots, "default")], 2)) : (openBlock(), createElementBlock("hr", {
17071
17646
  key: 1,
17072
17647
  class: normalizeClass(unref(Divider_module_default).dividerLine)
17073
- }, null, 2))], 10, _hoisted_1$37);
17648
+ }, null, 2))], 10, _hoisted_1$42);
17074
17649
  };
17075
17650
  }
17076
17651
  });
17077
17652
  //#endregion
17078
17653
  //#region src/component/FluxDotPattern.vue?vue&type=script&setup=true&lang.ts
17079
- var _hoisted_1$36 = [
17654
+ var _hoisted_1$41 = [
17080
17655
  "id",
17081
17656
  "width",
17082
17657
  "height"
17083
17658
  ];
17084
- var _hoisted_2$11 = [
17659
+ var _hoisted_2$13 = [
17085
17660
  "r",
17086
17661
  "cx",
17087
17662
  "cy"
17088
17663
  ];
17089
- var _hoisted_3$3 = ["fill"];
17664
+ var _hoisted_3$4 = ["fill"];
17090
17665
  //#endregion
17091
17666
  //#region src/component/FluxDotPattern.vue
17092
17667
  var FluxDotPattern_default = /* @__PURE__ */ defineComponent({
@@ -17131,12 +17706,12 @@ var FluxDotPattern_default = /* @__PURE__ */ defineComponent({
17131
17706
  r: __props.cr,
17132
17707
  cx: __props.width / 2 - __props.cx,
17133
17708
  cy: __props.height / 2 - __props.cy
17134
- }, null, 8, _hoisted_2$11)], 8, _hoisted_1$36)]), createElementVNode("rect", {
17709
+ }, null, 8, _hoisted_2$13)], 8, _hoisted_1$41)]), createElementVNode("rect", {
17135
17710
  width: "100%",
17136
17711
  height: "100%",
17137
17712
  "stroke-width": "0",
17138
17713
  fill: `url(#${unref(id)})`
17139
- }, null, 8, _hoisted_3$3)], 2);
17714
+ }, null, 8, _hoisted_3$4)], 2);
17140
17715
  };
17141
17716
  }
17142
17717
  });
@@ -17154,12 +17729,12 @@ var DropZone_module_default = {
17154
17729
  };
17155
17730
  //#endregion
17156
17731
  //#region src/component/FluxDropZone.vue?vue&type=script&setup=true&lang.ts
17157
- var _hoisted_1$35 = [
17732
+ var _hoisted_1$40 = [
17158
17733
  "aria-disabled",
17159
17734
  "aria-label",
17160
17735
  "tabindex"
17161
17736
  ];
17162
- var _hoisted_2$10 = ["pathLength"];
17737
+ var _hoisted_2$12 = ["pathLength"];
17163
17738
  //#endregion
17164
17739
  //#region src/component/FluxDropZone.vue
17165
17740
  var FluxDropZone_default = /* @__PURE__ */ defineComponent({
@@ -17274,7 +17849,7 @@ var FluxDropZone_default = /* @__PURE__ */ defineComponent({
17274
17849
  "stroke-linecap": "round",
17275
17850
  "stroke-linejoin": "round",
17276
17851
  pathLength: pathLength.value
17277
- }, null, 8, _hoisted_2$10)], 2)),
17852
+ }, null, 8, _hoisted_2$12)], 2)),
17278
17853
  renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
17279
17854
  isDragging: isDragging.value,
17280
17855
  isDraggingOver: isDraggingOver.value,
@@ -17301,7 +17876,7 @@ var FluxDropZone_default = /* @__PURE__ */ defineComponent({
17301
17876
  isDraggingOver: isDraggingOver.value,
17302
17877
  showPicker
17303
17878
  })))
17304
- ], 42, _hoisted_1$35);
17879
+ ], 42, _hoisted_1$40);
17305
17880
  };
17306
17881
  }
17307
17882
  });
@@ -17331,12 +17906,12 @@ var Expandable_module_default = {
17331
17906
  };
17332
17907
  //#endregion
17333
17908
  //#region src/component/FluxExpandable.vue?vue&type=script&setup=true&lang.ts
17334
- var _hoisted_1$34 = [
17909
+ var _hoisted_1$39 = [
17335
17910
  "id",
17336
17911
  "aria-controls",
17337
17912
  "aria-expanded"
17338
17913
  ];
17339
- var _hoisted_2$9 = ["id", "aria-labelledby"];
17914
+ var _hoisted_2$11 = ["id", "aria-labelledby"];
17340
17915
  //#endregion
17341
17916
  //#region src/component/FluxExpandable.vue
17342
17917
  var FluxExpandable_default = /* @__PURE__ */ defineComponent({
@@ -17427,9 +18002,9 @@ var FluxExpandable_default = /* @__PURE__ */ defineComponent({
17427
18002
  })), () => [createElementVNode("div", { class: normalizeClass(unref(Expandable_module_default).expandableContent) }, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
17428
18003
  label: __props.label,
17429
18004
  close
17430
- })))], 2)])], 10, _hoisted_2$9)) : createCommentVNode("", true)]),
18005
+ })))], 2)])], 10, _hoisted_2$11)) : createCommentVNode("", true)]),
17431
18006
  _: 3
17432
- })], 10, _hoisted_1$34);
18007
+ })], 10, _hoisted_1$39);
17433
18008
  };
17434
18009
  }
17435
18010
  });
@@ -17481,7 +18056,7 @@ var FluxFader_default = /* @__PURE__ */ defineComponent({
17481
18056
  setup(__props, { emit: __emit }) {
17482
18057
  const emit = __emit;
17483
18058
  const faderRef = useTemplateRef("fader");
17484
- me$1(__props.interval, () => next());
18059
+ ye$1(__props.interval, () => next());
17485
18060
  const current = ref(-1);
17486
18061
  function getItems() {
17487
18062
  const fader = v$2(faderRef);
@@ -18655,7 +19230,7 @@ var FocalPoint_module_default = {
18655
19230
  };
18656
19231
  //#endregion
18657
19232
  //#region src/component/FluxFocalPointEditor.vue?vue&type=script&setup=true&lang.ts
18658
- var _hoisted_1$33 = ["src"];
19233
+ var _hoisted_1$38 = ["src"];
18659
19234
  //#endregion
18660
19235
  //#region src/component/FluxFocalPointEditor.vue
18661
19236
  var FluxFocalPointEditor_default = /* @__PURE__ */ defineComponent({
@@ -18724,7 +19299,7 @@ var FluxFocalPointEditor_default = /* @__PURE__ */ defineComponent({
18724
19299
  src: __props.src,
18725
19300
  alt: "",
18726
19301
  onLoad: onImageLoaded
18727
- }, null, 42, _hoisted_1$33), createElementVNode("div", {
19302
+ }, null, 42, _hoisted_1$38), createElementVNode("div", {
18728
19303
  class: normalizeClass(unref(FocalPoint_module_default).focalPointEditorArea),
18729
19304
  style: normalizeStyle({
18730
19305
  top: `${focalPointY.value}%`,
@@ -18753,7 +19328,7 @@ var FluxFocalPointEditor_default = /* @__PURE__ */ defineComponent({
18753
19328
  });
18754
19329
  //#endregion
18755
19330
  //#region src/component/FluxFocalPointImage.vue?vue&type=script&setup=true&lang.ts
18756
- var _hoisted_1$32 = ["src", "alt"];
19331
+ var _hoisted_1$37 = ["src", "alt"];
18757
19332
  //#endregion
18758
19333
  //#region src/component/FluxFocalPointImage.vue
18759
19334
  var FluxFocalPointImage_default = /* @__PURE__ */ defineComponent({
@@ -18772,13 +19347,13 @@ var FluxFocalPointImage_default = /* @__PURE__ */ defineComponent({
18772
19347
  style: normalizeStyle({ objectPosition: `${x.value}% ${y.value}%` }),
18773
19348
  src: __props.src,
18774
19349
  alt: __props.alt
18775
- }, null, 14, _hoisted_1$32);
19350
+ }, null, 14, _hoisted_1$37);
18776
19351
  };
18777
19352
  }
18778
19353
  });
18779
19354
  //#endregion
18780
19355
  //#region src/component/FluxForm.vue?vue&type=script&setup=true&lang.ts
18781
- var _hoisted_1$31 = ["aria-disabled"];
19356
+ var _hoisted_1$36 = ["aria-disabled"];
18782
19357
  //#endregion
18783
19358
  //#region src/component/FluxForm.vue
18784
19359
  var FluxForm_default = /* @__PURE__ */ defineComponent({
@@ -18801,13 +19376,13 @@ var FluxForm_default = /* @__PURE__ */ defineComponent({
18801
19376
  }, [createVNode(FluxDisabled_default, { disabled: __props.disabled }, {
18802
19377
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
18803
19378
  _: 3
18804
- }, 8, ["disabled"])], 42, _hoisted_1$31);
19379
+ }, 8, ["disabled"])], 42, _hoisted_1$36);
18805
19380
  };
18806
19381
  }
18807
19382
  });
18808
19383
  //#endregion
18809
19384
  //#region src/component/FluxFormCheckboxGroup.vue?vue&type=script&setup=true&lang.ts
18810
- var _hoisted_1$30 = ["role", "aria-label"];
19385
+ var _hoisted_1$35 = ["role", "aria-label"];
18811
19386
  //#endregion
18812
19387
  //#region src/component/FluxFormCheckboxGroup.vue
18813
19388
  var FluxFormCheckboxGroup_default = /* @__PURE__ */ defineComponent({
@@ -18842,7 +19417,92 @@ var FluxFormCheckboxGroup_default = /* @__PURE__ */ defineComponent({
18842
19417
  class: normalizeClass(unref(clsx)(unref(Form_module_default).formCheckboxGroup, __props.isInline && unref(Form_module_default).isInline)),
18843
19418
  role: unref(field)?.isGroup ? void 0 : "group",
18844
19419
  "aria-label": unref(field)?.isGroup ? void 0 : __props.ariaLabel
18845
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$30);
19420
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$35);
19421
+ };
19422
+ }
19423
+ });
19424
+ //#endregion
19425
+ //#region src/component/FluxFormCombobox.vue
19426
+ var FluxFormCombobox_default = /* @__PURE__ */ defineComponent({
19427
+ __name: "FluxFormCombobox",
19428
+ props: /*@__PURE__*/ mergeModels({
19429
+ autoFocus: { type: Boolean },
19430
+ disabled: { type: Boolean },
19431
+ error: {},
19432
+ isCondensed: { type: Boolean },
19433
+ isLoading: { type: Boolean },
19434
+ isReadonly: { type: Boolean },
19435
+ isSecondary: { type: Boolean },
19436
+ name: {},
19437
+ placeholder: {},
19438
+ isCreatable: { type: Boolean },
19439
+ isMultiple: { type: Boolean },
19440
+ options: {}
19441
+ }, {
19442
+ "searchQuery": { default: "" },
19443
+ "searchQueryModifiers": {},
19444
+ "modelValue": { required: true },
19445
+ "modelModifiers": {}
19446
+ }),
19447
+ emits: ["update:searchQuery", "update:modelValue"],
19448
+ setup(__props) {
19449
+ const modelSearch = useModel(__props, "searchQuery");
19450
+ const modelValue = useModel(__props, "modelValue");
19451
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
19452
+ const createdOptions = ref([]);
19453
+ const allOptions = computed(() => {
19454
+ const seen = /* @__PURE__ */ new Set();
19455
+ return [...__props.options, ...createdOptions.value].filter((o) => {
19456
+ if (isFluxFormSelectGroup(o)) return true;
19457
+ if (seen.has(o.value)) return false;
19458
+ seen.add(o.value);
19459
+ return true;
19460
+ });
19461
+ });
19462
+ const { groups, selected, values } = useFormSelect_default(modelValue, __props.isMultiple, allOptions, modelSearch);
19463
+ function onDeselect(id) {
19464
+ if (__props.isMultiple) modelValue.value = unref(values).filter((v) => v !== id);
19465
+ }
19466
+ function onSelect(id) {
19467
+ if (__props.isMultiple) modelValue.value = [...unref(values), id];
19468
+ else modelValue.value = id;
19469
+ }
19470
+ function onCreate(query) {
19471
+ if (!unref(allOptions).some((o) => isFluxFormSelectOption(o) && o.value === query)) createdOptions.value = [...createdOptions.value, {
19472
+ label: query,
19473
+ value: query
19474
+ }];
19475
+ onSelect(query);
19476
+ }
19477
+ return (_ctx, _cache) => {
19478
+ return openBlock(), createBlock(unref(SelectBase_default), {
19479
+ searchQuery: modelSearch.value,
19480
+ "onUpdate:searchQuery": _cache[0] || (_cache[0] = ($event) => modelSearch.value = $event),
19481
+ "aria-invalid": __props.error ? true : void 0,
19482
+ class: normalizeClass(unref(clsx)(__props.isCondensed && unref(Form_module_default).isCondensed, __props.isSecondary && unref(Form_module_default).isSecondary, __props.error && unref(Form_module_default).isInvalid)),
19483
+ disabled: unref(disabled),
19484
+ "is-searchable": "",
19485
+ "is-creatable": __props.isCreatable,
19486
+ "is-loading": __props.isLoading,
19487
+ "is-multiple": __props.isMultiple,
19488
+ options: unref(groups),
19489
+ placeholder: __props.placeholder,
19490
+ selected: unref(selected),
19491
+ onCreate,
19492
+ onDeselect,
19493
+ onSelect
19494
+ }, null, 8, [
19495
+ "searchQuery",
19496
+ "aria-invalid",
19497
+ "class",
19498
+ "disabled",
19499
+ "is-creatable",
19500
+ "is-loading",
19501
+ "is-multiple",
19502
+ "options",
19503
+ "placeholder",
19504
+ "selected"
19505
+ ]);
18846
19506
  };
18847
19507
  }
18848
19508
  });
@@ -18954,7 +19614,7 @@ var FluxFormDateInput_default = /* @__PURE__ */ defineComponent({
18954
19614
  });
18955
19615
  //#endregion
18956
19616
  //#region src/component/FluxFormDateRangeInput.vue?vue&type=script&setup=true&lang.ts
18957
- var _hoisted_1$29 = { key: 0 };
19617
+ var _hoisted_1$34 = { key: 0 };
18958
19618
  //#endregion
18959
19619
  //#region src/component/FluxFormDateRangeInput.vue
18960
19620
  var FluxFormDateRangeInput_default = /* @__PURE__ */ defineComponent({
@@ -19000,7 +19660,7 @@ var FluxFormDateRangeInput_default = /* @__PURE__ */ defineComponent({
19000
19660
  default: withCtx(() => [createElementVNode("div", {
19001
19661
  class: normalizeClass(unref(clsx)(unref(Form_module_default).formDateRangeInput, unref(disabled) && unref(Form_module_default).isDisabled, __props.isCondensed && unref(Form_module_default).isCondensed, __props.isSecondary && unref(Form_module_default).isSecondary, __props.error && unref(Form_module_default).isInvalid)),
19002
19662
  role: "presentation"
19003
- }, [label.value ? (openBlock(), createElementBlock("span", _hoisted_1$29, toDisplayString(label.value), 1)) : __props.placeholder ? (openBlock(), createElementBlock("span", {
19663
+ }, [label.value ? (openBlock(), createElementBlock("span", _hoisted_1$34, toDisplayString(label.value), 1)) : __props.placeholder ? (openBlock(), createElementBlock("span", {
19004
19664
  key: 1,
19005
19665
  class: normalizeClass(unref(Form_module_default).formSelectPlaceholder)
19006
19666
  }, toDisplayString(__props.placeholder), 3)) : createCommentVNode("", true)], 2), createVNode(FluxSecondaryButton_default, {
@@ -19172,7 +19832,7 @@ var FluxFormGrid_default = /* @__PURE__ */ defineComponent({
19172
19832
  });
19173
19833
  //#endregion
19174
19834
  //#region src/component/FluxFormInputAddition.vue?vue&type=script&setup=true&lang.ts
19175
- var _hoisted_1$28 = { key: 1 };
19835
+ var _hoisted_1$33 = { key: 1 };
19176
19836
  //#endregion
19177
19837
  //#region src/component/FluxFormInputAddition.vue
19178
19838
  var FluxFormInputAddition_default = /* @__PURE__ */ defineComponent({
@@ -19189,7 +19849,7 @@ var FluxFormInputAddition_default = /* @__PURE__ */ defineComponent({
19189
19849
  name: __props.icon,
19190
19850
  size: 18
19191
19851
  }, null, 8, ["name"])) : createCommentVNode("", true),
19192
- __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$28, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
19852
+ __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$33, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
19193
19853
  renderSlot(_ctx.$slots, "default")
19194
19854
  ], 2);
19195
19855
  };
@@ -19197,8 +19857,8 @@ var FluxFormInputAddition_default = /* @__PURE__ */ defineComponent({
19197
19857
  });
19198
19858
  //#endregion
19199
19859
  //#region src/component/FluxFormNumberInput.vue?vue&type=script&setup=true&lang.ts
19200
- var _hoisted_1$27 = ["aria-disabled"];
19201
- var _hoisted_2$8 = [
19860
+ var _hoisted_1$32 = ["aria-disabled"];
19861
+ var _hoisted_2$10 = [
19202
19862
  "id",
19203
19863
  "name",
19204
19864
  "autofocus",
@@ -19212,7 +19872,7 @@ var _hoisted_2$8 = [
19212
19872
  "step",
19213
19873
  "value"
19214
19874
  ];
19215
- var _hoisted_3$2 = ["disabled"];
19875
+ var _hoisted_3$3 = ["disabled"];
19216
19876
  var _hoisted_4$1 = ["disabled"];
19217
19877
  //#endregion
19218
19878
  //#region src/component/FluxFormNumberInput.vue
@@ -19319,7 +19979,7 @@ var FluxFormNumberInput_default = /* @__PURE__ */ defineComponent({
19319
19979
  onFocus,
19320
19980
  onInput,
19321
19981
  onKeydown: onKeyDown
19322
- }, null, 42, _hoisted_2$8), createElementVNode("span", {
19982
+ }, null, 42, _hoisted_2$10), createElementVNode("span", {
19323
19983
  "aria-hidden": "true",
19324
19984
  class: normalizeClass(unref(Form_module_default).formNumberInputButtons)
19325
19985
  }, [createElementVNode("button", {
@@ -19331,7 +19991,7 @@ var FluxFormNumberInput_default = /* @__PURE__ */ defineComponent({
19331
19991
  }, [createVNode(FluxIcon_default, {
19332
19992
  name: "chevron-up",
19333
19993
  size: 12
19334
- })], 10, _hoisted_3$2), createElementVNode("button", {
19994
+ })], 10, _hoisted_3$3), createElementVNode("button", {
19335
19995
  type: "button",
19336
19996
  tabindex: "-1",
19337
19997
  class: normalizeClass(unref(Form_module_default).formNumberInputButton),
@@ -19340,20 +20000,20 @@ var FluxFormNumberInput_default = /* @__PURE__ */ defineComponent({
19340
20000
  }, [createVNode(FluxIcon_default, {
19341
20001
  name: "chevron-down",
19342
20002
  size: 12
19343
- })], 10, _hoisted_4$1)], 2)], 10, _hoisted_1$27);
20003
+ })], 10, _hoisted_4$1)], 2)], 10, _hoisted_1$32);
19344
20004
  };
19345
20005
  }
19346
20006
  });
19347
20007
  //#endregion
19348
20008
  //#region src/component/FluxFormPinInput.vue?vue&type=script&setup=true&lang.ts
19349
- var _hoisted_1$26 = [
20009
+ var _hoisted_1$31 = [
19350
20010
  "id",
19351
20011
  "name",
19352
20012
  "autofocus",
19353
20013
  "aria-disabled",
19354
20014
  "aria-invalid"
19355
20015
  ];
19356
- var _hoisted_2$7 = [
20016
+ var _hoisted_2$9 = [
19357
20017
  "aria-label",
19358
20018
  "autocomplete",
19359
20019
  "autofocus",
@@ -19466,14 +20126,14 @@ var FluxFormPinInput_default = /* @__PURE__ */ defineComponent({
19466
20126
  onInput,
19467
20127
  onKeydown: onKeyDown,
19468
20128
  onPaste
19469
- }, null, 42, _hoisted_2$7);
19470
- }), 128))], 14, _hoisted_1$26);
20129
+ }, null, 42, _hoisted_2$9);
20130
+ }), 128))], 14, _hoisted_1$31);
19471
20131
  };
19472
20132
  }
19473
20133
  });
19474
20134
  //#endregion
19475
20135
  //#region src/component/FluxFormRadio.vue?vue&type=script&setup=true&lang.ts
19476
- var _hoisted_1$25 = [
20136
+ var _hoisted_1$30 = [
19477
20137
  "name",
19478
20138
  "checked",
19479
20139
  "disabled",
@@ -19521,7 +20181,7 @@ var FluxFormRadio_default = /* @__PURE__ */ defineComponent({
19521
20181
  "aria-invalid": error.value ? true : void 0,
19522
20182
  onChange,
19523
20183
  onClick
19524
- }, null, 42, _hoisted_1$25),
20184
+ }, null, 42, _hoisted_1$30),
19525
20185
  createElementVNode("span", {
19526
20186
  "aria-hidden": "true",
19527
20187
  class: normalizeClass(unref(Form_module_default).formRadioElement)
@@ -19536,7 +20196,7 @@ var FluxFormRadio_default = /* @__PURE__ */ defineComponent({
19536
20196
  });
19537
20197
  //#endregion
19538
20198
  //#region src/component/FluxFormRadioGroup.vue?vue&type=script&setup=true&lang.ts
19539
- var _hoisted_1$24 = ["aria-label"];
20199
+ var _hoisted_1$29 = ["aria-label"];
19540
20200
  //#endregion
19541
20201
  //#region src/component/FluxFormRadioGroup.vue
19542
20202
  var FluxFormRadioGroup_default = /* @__PURE__ */ defineComponent({
@@ -19576,7 +20236,7 @@ var FluxFormRadioGroup_default = /* @__PURE__ */ defineComponent({
19576
20236
  class: normalizeClass(unref(clsx)(unref(Form_module_default).formRadioGroup, __props.isInline && unref(Form_module_default).isInline)),
19577
20237
  role: "radiogroup",
19578
20238
  "aria-label": __props.ariaLabel
19579
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$24);
20239
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$29);
19580
20240
  };
19581
20241
  }
19582
20242
  });
@@ -19757,6 +20417,163 @@ var FluxFormRangeSlider_default = /* @__PURE__ */ defineComponent({
19757
20417
  };
19758
20418
  }
19759
20419
  });
20420
+ var FormRating_module_default = {
20421
+ formRating: `form-rating`,
20422
+ isDisabled: `is-disabled`,
20423
+ formRatingStar: `form-rating-star`,
20424
+ formRatingStarEmpty: `form-rating-star-empty`,
20425
+ formRatingStarFull: `form-rating-star-full`,
20426
+ isInvalid: `is-invalid`
20427
+ };
20428
+ //#endregion
20429
+ //#region src/component/FluxFormRating.vue?vue&type=script&setup=true&lang.ts
20430
+ var _hoisted_1$28 = [
20431
+ "id",
20432
+ "aria-disabled",
20433
+ "aria-invalid",
20434
+ "aria-readonly",
20435
+ "aria-valuemax",
20436
+ "aria-valuenow",
20437
+ "aria-valuetext",
20438
+ "tabindex"
20439
+ ];
20440
+ var _hoisted_2$8 = ["name", "value"];
20441
+ var _hoisted_3$2 = [
20442
+ "disabled",
20443
+ "onClick",
20444
+ "onMousemove"
20445
+ ];
20446
+ //#endregion
20447
+ //#region src/component/FluxFormRating.vue
20448
+ var FluxFormRating_default = /* @__PURE__ */ defineComponent({
20449
+ __name: "FluxFormRating",
20450
+ props: /*@__PURE__*/ mergeModels({
20451
+ disabled: { type: Boolean },
20452
+ error: {},
20453
+ isReadonly: { type: Boolean },
20454
+ name: {},
20455
+ allowHalf: {
20456
+ type: Boolean,
20457
+ default: false
20458
+ },
20459
+ clearable: {
20460
+ type: Boolean,
20461
+ default: false
20462
+ },
20463
+ count: { default: 5 },
20464
+ icon: { default: "star" },
20465
+ size: {}
20466
+ }, {
20467
+ "modelValue": { default: null },
20468
+ "modelModifiers": {}
20469
+ }),
20470
+ emits: /*@__PURE__*/ mergeModels(["change"], ["update:modelValue"]),
20471
+ setup(__props, { emit: __emit }) {
20472
+ const modelValue = useModel(__props, "modelValue");
20473
+ const emit = __emit;
20474
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
20475
+ const { id } = useFormFieldInjection_default();
20476
+ const hoverValue = ref(null);
20477
+ const isInteractive = computed(() => !disabled.value && !__props.isReadonly);
20478
+ const displayValue = computed(() => hoverValue.value ?? modelValue.value ?? 0);
20479
+ function fillFor(star) {
20480
+ return Math.min(1, Math.max(0, displayValue.value - (star - 1)));
20481
+ }
20482
+ function resolveStarValue(star, evt) {
20483
+ if (!__props.allowHalf) return star;
20484
+ const { left, width } = evt.currentTarget.getBoundingClientRect();
20485
+ return evt.clientX - left < width / 2 ? star - .5 : star;
20486
+ }
20487
+ function commit(value) {
20488
+ modelValue.value = value;
20489
+ emit("change", value);
20490
+ }
20491
+ function onMouseMove(star, evt) {
20492
+ if (!isInteractive.value) return;
20493
+ hoverValue.value = resolveStarValue(star, evt);
20494
+ }
20495
+ function onClick(star, evt) {
20496
+ if (!isInteractive.value) return;
20497
+ const value = resolveStarValue(star, evt);
20498
+ commit(__props.clearable && modelValue.value === value ? null : value);
20499
+ }
20500
+ function onKeyDown(evt) {
20501
+ if (!isInteractive.value) return;
20502
+ const step = __props.allowHalf ? .5 : 1;
20503
+ const current = modelValue.value ?? 0;
20504
+ switch (evt.key) {
20505
+ case "ArrowRight":
20506
+ case "ArrowUp":
20507
+ evt.preventDefault();
20508
+ commit(Math.min(__props.count, current + step));
20509
+ break;
20510
+ case "ArrowLeft":
20511
+ case "ArrowDown":
20512
+ evt.preventDefault();
20513
+ commit(Math.max(0, current - step));
20514
+ break;
20515
+ case "Home":
20516
+ evt.preventDefault();
20517
+ commit(0);
20518
+ break;
20519
+ case "End":
20520
+ evt.preventDefault();
20521
+ commit(__props.count);
20522
+ break;
20523
+ default:
20524
+ if (/^[0-9]$/.test(evt.key)) {
20525
+ const digit = Number(evt.key);
20526
+ if (digit <= __props.count) {
20527
+ evt.preventDefault();
20528
+ commit(digit);
20529
+ }
20530
+ }
20531
+ break;
20532
+ }
20533
+ }
20534
+ return (_ctx, _cache) => {
20535
+ return openBlock(), createElementBlock("div", {
20536
+ class: normalizeClass(unref(clsx)(unref(FormRating_module_default).formRating, unref(disabled) && unref(FormRating_module_default).isDisabled, __props.error && unref(FormRating_module_default).isInvalid)),
20537
+ id: unref(id),
20538
+ style: normalizeStyle({ fontSize: __props.size && `${__props.size}px` }),
20539
+ role: "slider",
20540
+ "aria-disabled": unref(disabled) ? true : void 0,
20541
+ "aria-invalid": __props.error ? true : void 0,
20542
+ "aria-readonly": __props.isReadonly ? true : void 0,
20543
+ "aria-valuemin": 0,
20544
+ "aria-valuemax": __props.count,
20545
+ "aria-valuenow": modelValue.value ?? 0,
20546
+ "aria-valuetext": `${modelValue.value ?? 0} / ${__props.count}`,
20547
+ tabindex: isInteractive.value ? 0 : void 0,
20548
+ onKeydown: onKeyDown,
20549
+ onMouseleave: _cache[0] || (_cache[0] = ($event) => hoverValue.value = null)
20550
+ }, [__props.name ? (openBlock(), createElementBlock("input", {
20551
+ key: 0,
20552
+ type: "hidden",
20553
+ name: __props.name,
20554
+ value: modelValue.value ?? ""
20555
+ }, null, 8, _hoisted_2$8)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.count, (star) => {
20556
+ return openBlock(), createElementBlock("button", {
20557
+ key: star,
20558
+ class: normalizeClass(unref(FormRating_module_default).formRatingStar),
20559
+ type: "button",
20560
+ tabindex: "-1",
20561
+ "aria-hidden": "true",
20562
+ disabled: !isInteractive.value,
20563
+ style: normalizeStyle({ "--fill": fillFor(star) }),
20564
+ onClick: ($event) => onClick(star, $event),
20565
+ onMousemove: ($event) => onMouseMove(star, $event)
20566
+ }, [createVNode(FluxIcon_default, {
20567
+ class: normalizeClass(unref(FormRating_module_default).formRatingStarEmpty),
20568
+ name: __props.icon
20569
+ }, null, 8, ["class", "name"]), createVNode(FluxIcon_default, {
20570
+ class: normalizeClass(unref(FormRating_module_default).formRatingStarFull),
20571
+ name: __props.icon
20572
+ }, null, 8, ["class", "name"])], 46, _hoisted_3$2);
20573
+ }), 128))], 46, _hoisted_1$28);
20574
+ };
20575
+ }
20576
+ });
19760
20577
  //#endregion
19761
20578
  //#region src/component/FluxFormRow.vue
19762
20579
  var FluxFormRow_default = /* @__PURE__ */ defineComponent({
@@ -19889,8 +20706,201 @@ var FluxFormSelectAsync_default = /* @__PURE__ */ defineComponent({
19889
20706
  }
19890
20707
  });
19891
20708
  //#endregion
20709
+ //#region src/component/FluxFormTagsInput.vue?vue&type=script&setup=true&lang.ts
20710
+ var _hoisted_1$27 = [
20711
+ "name",
20712
+ "disabled",
20713
+ "placeholder",
20714
+ "readonly"
20715
+ ];
20716
+ //#endregion
20717
+ //#region src/component/FluxFormTagsInput.vue
20718
+ var FluxFormTagsInput_default = /* @__PURE__ */ defineComponent({
20719
+ __name: "FluxFormTagsInput",
20720
+ props: /*@__PURE__*/ mergeModels({
20721
+ disabled: { type: Boolean },
20722
+ error: {},
20723
+ isCondensed: { type: Boolean },
20724
+ isReadonly: { type: Boolean },
20725
+ isSecondary: { type: Boolean },
20726
+ name: {},
20727
+ placeholder: {},
20728
+ allowDuplicates: { type: Boolean },
20729
+ delimiters: { default: () => ["Enter", ","] },
20730
+ max: {},
20731
+ suggestions: {},
20732
+ tagColor: {},
20733
+ validate: { type: Function }
20734
+ }, {
20735
+ "modelValue": { default: () => [] },
20736
+ "modelModifiers": {},
20737
+ "searchQuery": { default: "" },
20738
+ "searchQueryModifiers": {}
20739
+ }),
20740
+ emits: /*@__PURE__*/ mergeModels(["add", "remove"], ["update:modelValue", "update:searchQuery"]),
20741
+ setup(__props, { emit: __emit }) {
20742
+ const modelValue = useModel(__props, "modelValue");
20743
+ const query = useModel(__props, "searchQuery");
20744
+ const emit = __emit;
20745
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
20746
+ const { id } = useFormFieldInjection_default();
20747
+ const anchorRef = useTemplateRef("anchor");
20748
+ const popupRef = useTemplateRef("popup");
20749
+ const inputElementRef = useTemplateRef("input");
20750
+ const isOpen = ref(false);
20751
+ const highlightedIndex = ref(-1);
20752
+ const isMaxReached = computed(() => __props.max !== void 0 && modelValue.value.length >= __props.max);
20753
+ const filteredSuggestions = computed(() => {
20754
+ if (!__props.suggestions) return [];
20755
+ const search = query.value.trim().toLowerCase();
20756
+ return __props.suggestions.filter((suggestion) => !modelValue.value.includes(suggestion.label) && (search === "" || suggestion.label.toLowerCase().includes(search)));
20757
+ });
20758
+ function focusInput() {
20759
+ inputElementRef.value?.focus();
20760
+ }
20761
+ function addTag(rawValue) {
20762
+ const value = rawValue.trim();
20763
+ if (value === "" || isMaxReached.value) return;
20764
+ if (!__props.allowDuplicates && modelValue.value.includes(value)) {
20765
+ query.value = "";
20766
+ return;
20767
+ }
20768
+ if (__props.validate && !__props.validate(value)) return;
20769
+ modelValue.value = [...modelValue.value, value];
20770
+ emit("add", value);
20771
+ query.value = "";
20772
+ highlightedIndex.value = -1;
20773
+ isOpen.value = false;
20774
+ }
20775
+ function removeAt(index) {
20776
+ const removed = modelValue.value[index];
20777
+ modelValue.value = modelValue.value.filter((_, i) => i !== index);
20778
+ emit("remove", removed);
20779
+ }
20780
+ function addSuggestion(suggestion) {
20781
+ addTag(suggestion.label);
20782
+ nextTick(() => focusInput());
20783
+ }
20784
+ function onInput() {
20785
+ isOpen.value = query.value.trim() !== "" && filteredSuggestions.value.length > 0;
20786
+ highlightedIndex.value = -1;
20787
+ }
20788
+ function onKeyDown(evt) {
20789
+ if (evt.key === "Escape" && isOpen.value) {
20790
+ evt.preventDefault();
20791
+ isOpen.value = false;
20792
+ return;
20793
+ }
20794
+ if (isOpen.value && (evt.key === "ArrowDown" || evt.key === "ArrowUp")) {
20795
+ evt.preventDefault();
20796
+ const count = filteredSuggestions.value.length;
20797
+ if (count === 0) return;
20798
+ highlightedIndex.value = evt.key === "ArrowDown" ? (highlightedIndex.value + 1) % count : (highlightedIndex.value - 1 + count) % count;
20799
+ return;
20800
+ }
20801
+ if (evt.key === "Enter") {
20802
+ if (isOpen.value && highlightedIndex.value >= 0) {
20803
+ evt.preventDefault();
20804
+ addSuggestion(filteredSuggestions.value[highlightedIndex.value]);
20805
+ return;
20806
+ }
20807
+ if (__props.delimiters.includes("Enter")) {
20808
+ evt.preventDefault();
20809
+ addTag(query.value);
20810
+ }
20811
+ return;
20812
+ }
20813
+ if (evt.key.length === 1 && __props.delimiters.includes(evt.key)) {
20814
+ evt.preventDefault();
20815
+ addTag(query.value);
20816
+ return;
20817
+ }
20818
+ if (evt.key === "Backspace" && query.value === "" && modelValue.value.length > 0) removeAt(modelValue.value.length - 1);
20819
+ }
20820
+ function onPaste(evt) {
20821
+ if (!evt.clipboardData) return;
20822
+ const separators = [...__props.delimiters.filter((delimiter) => delimiter !== "Enter"), "\n"];
20823
+ let parts = [evt.clipboardData.getData("text")];
20824
+ for (const separator of separators) parts = parts.flatMap((part) => part.split(separator));
20825
+ parts = parts.map((part) => part.trim()).filter((part) => part !== "");
20826
+ if (parts.length <= 1) return;
20827
+ evt.preventDefault();
20828
+ parts.forEach(addTag);
20829
+ }
20830
+ if (typeof window !== "undefined") q$1([anchorRef, popupRef], isOpen, () => isOpen.value = false);
20831
+ return (_ctx, _cache) => {
20832
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(Anchor_default), {
20833
+ ref: "anchor",
20834
+ class: normalizeClass(unref(clsx)(unref(disabled) ? unref(Form_module_default).formTagsInputDisabled : unref(Form_module_default).formTagsInputEnabled, __props.isCondensed && unref(Form_module_default).isCondensed, __props.isSecondary && unref(Form_module_default).isSecondary, __props.error && unref(Form_module_default).isInvalid)),
20835
+ id: unref(id),
20836
+ role: "group",
20837
+ "tag-name": "div",
20838
+ onClick: focusInput
20839
+ }, {
20840
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(modelValue.value, (tag, index) => {
20841
+ return openBlock(), createBlock(FluxTag_default, {
20842
+ key: `${tag}-${index}`,
20843
+ color: __props.tagColor,
20844
+ label: tag,
20845
+ "is-deletable": "",
20846
+ onDelete: ($event) => removeAt(index)
20847
+ }, null, 8, [
20848
+ "color",
20849
+ "label",
20850
+ "onDelete"
20851
+ ]);
20852
+ }), 128)), withDirectives(createElementVNode("input", {
20853
+ ref: "input",
20854
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => query.value = $event),
20855
+ class: normalizeClass(unref(Form_module_default).formTagsInputField),
20856
+ name: __props.name,
20857
+ autocomplete: "off",
20858
+ disabled: unref(disabled),
20859
+ placeholder: modelValue.value.length === 0 ? __props.placeholder : void 0,
20860
+ readonly: __props.isReadonly,
20861
+ type: "text",
20862
+ onInput,
20863
+ onKeydown: onKeyDown,
20864
+ onPaste
20865
+ }, null, 42, _hoisted_1$27), [[vModelText, query.value]])]),
20866
+ _: 1
20867
+ }, 8, ["class", "id"]), (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(FluxFadeTransition_default), null, {
20868
+ default: withCtx(() => [isOpen.value && filteredSuggestions.value.length > 0 ? (openBlock(), createBlock(unref(AnchorPopup_default), {
20869
+ key: 0,
20870
+ ref: "popup",
20871
+ class: normalizeClass(unref(Form_module_default).formTagsInputPopup),
20872
+ anchor: anchorRef.value,
20873
+ direction: "vertical",
20874
+ "use-anchor-width": ""
20875
+ }, {
20876
+ default: withCtx(() => [createVNode(FluxMenu_default, null, {
20877
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredSuggestions.value, (suggestion, index) => {
20878
+ return openBlock(), createBlock(FluxMenuItem_default, {
20879
+ key: suggestion.value ?? index,
20880
+ "icon-leading": suggestion.icon,
20881
+ "is-highlighted": highlightedIndex.value === index,
20882
+ label: suggestion.label,
20883
+ type: "button",
20884
+ onClick: ($event) => addSuggestion(suggestion)
20885
+ }, null, 8, [
20886
+ "icon-leading",
20887
+ "is-highlighted",
20888
+ "label",
20889
+ "onClick"
20890
+ ]);
20891
+ }), 128))]),
20892
+ _: 1
20893
+ })]),
20894
+ _: 1
20895
+ }, 8, ["class", "anchor"])) : createCommentVNode("", true)]),
20896
+ _: 1
20897
+ })]))], 64);
20898
+ };
20899
+ }
20900
+ });
20901
+ //#endregion
19892
20902
  //#region src/component/FluxFormTextArea.vue?vue&type=script&setup=true&lang.ts
19893
- var _hoisted_1$23 = [
20903
+ var _hoisted_1$26 = [
19894
20904
  "id",
19895
20905
  "name",
19896
20906
  "autocomplete",
@@ -19928,11 +20938,22 @@ var FluxFormTextArea_default = /* @__PURE__ */ defineComponent({
19928
20938
  "modelModifiers": {}
19929
20939
  }),
19930
20940
  emits: /*@__PURE__*/ mergeModels(["blur", "focus"], ["update:modelValue"]),
19931
- setup(__props, { emit: __emit }) {
20941
+ setup(__props, { expose: __expose, emit: __emit }) {
19932
20942
  const emit = __emit;
19933
20943
  const modelValue = useModel(__props, "modelValue");
19934
20944
  const disabled = useDisabled_default(toRef(() => __props.disabled));
20945
+ const inputRef = useTemplateRef("input");
19935
20946
  const { id } = useFormFieldInjection_default();
20947
+ function blur() {
20948
+ v$2(inputRef)?.blur();
20949
+ }
20950
+ function focus() {
20951
+ v$2(inputRef)?.focus();
20952
+ }
20953
+ __expose({
20954
+ blur,
20955
+ focus
20956
+ });
19936
20957
  return (_ctx, _cache) => {
19937
20958
  return withDirectives((openBlock(), createElementBlock("textarea", {
19938
20959
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
@@ -19952,7 +20973,7 @@ var FluxFormTextArea_default = /* @__PURE__ */ defineComponent({
19952
20973
  "aria-invalid": __props.error ? true : void 0,
19953
20974
  onBlur: _cache[1] || (_cache[1] = ($event) => emit("blur")),
19954
20975
  onFocus: _cache[2] || (_cache[2] = ($event) => emit("focus"))
19955
- }, null, 46, _hoisted_1$23)), [[vModelText, modelValue.value]]);
20976
+ }, null, 46, _hoisted_1$26)), [[vModelText, modelValue.value]]);
19956
20977
  };
19957
20978
  }
19958
20979
  });
@@ -20665,12 +21686,12 @@ var FluxFormTimeZonePicker_default = /* @__PURE__ */ defineComponent({
20665
21686
  });
20666
21687
  //#endregion
20667
21688
  //#region src/css/component/TreeViewSelect.module.scss
20668
- var { "treeNode": _0$6 } = TreeNode_module_default;
21689
+ var { "treeNode": _0$7 } = TreeNode_module_default;
20669
21690
  var TreeViewSelect_module_default = {
20670
21691
  treeViewSelectValue: `tree-view-select-value`,
20671
21692
  treeViewSelectList: `tree-view-select-list`,
20672
21693
  treeViewSelectEmpty: `tree-view-select-empty`,
20673
- treeNode: `tree-node ${_0$6}`,
21694
+ treeNode: `tree-node ${_0$7}`,
20674
21695
  isSelectable: `is-selectable`,
20675
21696
  isExpandable: `is-expandable`,
20676
21697
  isSelected: `is-selected`,
@@ -20679,7 +21700,7 @@ var TreeViewSelect_module_default = {
20679
21700
  };
20680
21701
  //#endregion
20681
21702
  //#region src/component/FluxFormTreeViewSelect.vue?vue&type=script&setup=true&lang.ts
20682
- var _hoisted_1$22 = [
21703
+ var _hoisted_1$25 = [
20683
21704
  "role",
20684
21705
  "tabindex",
20685
21706
  "aria-selected",
@@ -20924,7 +21945,7 @@ var FluxFormTreeViewSelect_default = /* @__PURE__ */ defineComponent({
20924
21945
  "expanded",
20925
21946
  "level-colors",
20926
21947
  "onExpandClick"
20927
- ])], 42, _hoisted_1$22);
21948
+ ])], 42, _hoisted_1$25);
20928
21949
  }), 128))], 2)]),
20929
21950
  _: 1
20930
21951
  }, 8, ["class", "anchor"])) : createCommentVNode("", true)]),
@@ -20939,7 +21960,7 @@ var Remove_module_default = {
20939
21960
  };
20940
21961
  //#endregion
20941
21962
  //#region src/component/FluxRemove.vue?vue&type=script&setup=true&lang.ts
20942
- var _hoisted_1$21 = ["aria-label"];
21963
+ var _hoisted_1$24 = ["aria-label"];
20943
21964
  //#endregion
20944
21965
  //#region src/component/FluxRemove.vue
20945
21966
  var FluxRemove_default = /* @__PURE__ */ defineComponent({
@@ -20962,7 +21983,7 @@ var FluxRemove_default = /* @__PURE__ */ defineComponent({
20962
21983
  key: 0,
20963
21984
  name: __props.icon,
20964
21985
  size: 16
20965
- }, null, 8, ["name"])) : createCommentVNode("", true)], 10, _hoisted_1$21);
21986
+ }, null, 8, ["name"])) : createCommentVNode("", true)], 10, _hoisted_1$24);
20966
21987
  };
20967
21988
  }
20968
21989
  });
@@ -20978,11 +21999,11 @@ var Placeholder_module_default = {
20978
21999
  };
20979
22000
  //#endregion
20980
22001
  //#region src/css/component/Gallery.module.scss
20981
- var { "placeholder": _0$5 } = Placeholder_module_default;
22002
+ var { "placeholder": _0$6 } = Placeholder_module_default;
20982
22003
  var Gallery_module_default = {
20983
22004
  gallery: `gallery`,
20984
22005
  galleryGrid: `gallery-grid`,
20985
- galleryAdd: `gallery-add ${_0$5}`,
22006
+ galleryAdd: `gallery-add ${_0$6}`,
20986
22007
  galleryMove: `gallery-move`,
20987
22008
  galleryItem: `gallery-item`,
20988
22009
  remove: `remove`,
@@ -21035,7 +22056,7 @@ var FluxGalleryItem_default = /* @__PURE__ */ defineComponent({
21035
22056
  });
21036
22057
  //#endregion
21037
22058
  //#region src/component/FluxGallery.vue?vue&type=script&setup=true&lang.ts
21038
- var _hoisted_1$20 = ["onClick"];
22059
+ var _hoisted_1$23 = ["onClick"];
21039
22060
  //#endregion
21040
22061
  //#region src/component/FluxGallery.vue
21041
22062
  var FluxGallery_default = /* @__PURE__ */ defineComponent({
@@ -21113,7 +22134,7 @@ var FluxGallery_default = /* @__PURE__ */ defineComponent({
21113
22134
  class: normalizeClass(unref(Gallery_module_default).galleryAdd),
21114
22135
  type: "button",
21115
22136
  onClick: ($event) => showPicker()
21116
- }, [createVNode(FluxIcon_default, { name: "plus" })], 10, _hoisted_1$20)) : createCommentVNode("", true)
22137
+ }, [createVNode(FluxIcon_default, { name: "plus" })], 10, _hoisted_1$23)) : createCommentVNode("", true)
21117
22138
  ]),
21118
22139
  _: 2
21119
22140
  }, 1032, ["class", "move-class"])]),
@@ -21188,12 +22209,12 @@ var FluxGridColumn_default = /* @__PURE__ */ defineComponent({
21188
22209
  });
21189
22210
  //#endregion
21190
22211
  //#region src/component/FluxGridPattern.vue?vue&type=script&setup=true&lang.ts
21191
- var _hoisted_1$19 = [
22212
+ var _hoisted_1$22 = [
21192
22213
  "id",
21193
22214
  "width",
21194
22215
  "height"
21195
22216
  ];
21196
- var _hoisted_2$6 = ["d", "stroke-dasharray"];
22217
+ var _hoisted_2$7 = ["d", "stroke-dasharray"];
21197
22218
  var _hoisted_3$1 = ["fill"];
21198
22219
  var _hoisted_4 = {
21199
22220
  key: 0,
@@ -21233,7 +22254,7 @@ var FluxGridPattern_default = /* @__PURE__ */ defineComponent({
21233
22254
  d: `M.5 ${__props.height}V.5H${__props.width}`,
21234
22255
  fill: "none",
21235
22256
  "stroke-dasharray": __props.strokeDasharray
21236
- }, null, 8, _hoisted_2$6)], 8, _hoisted_1$19)]),
22257
+ }, null, 8, _hoisted_2$7)], 8, _hoisted_1$22)]),
21237
22258
  createElementVNode("rect", {
21238
22259
  width: "100%",
21239
22260
  height: "100%",
@@ -21274,6 +22295,156 @@ var FluxInfo_default = /* @__PURE__ */ defineComponent({
21274
22295
  };
21275
22296
  }
21276
22297
  });
22298
+ var InlineEdit_module_default = {
22299
+ inlineEdit: `inline-edit`,
22300
+ inlineEditField: `inline-edit-field`,
22301
+ inlineEditActions: `inline-edit-actions`,
22302
+ inlineEditDisplay: `inline-edit-display`,
22303
+ isInteractive: `is-interactive`,
22304
+ isPlaceholder: `is-placeholder`
22305
+ };
22306
+ //#endregion
22307
+ //#region src/component/FluxInlineEdit.vue?vue&type=script&setup=true&lang.ts
22308
+ var _hoisted_1$21 = ["role", "tabindex"];
22309
+ //#endregion
22310
+ //#region src/component/FluxInlineEdit.vue
22311
+ var FluxInlineEdit_default = /* @__PURE__ */ defineComponent({
22312
+ __name: "FluxInlineEdit",
22313
+ props: /*@__PURE__*/ mergeModels({
22314
+ disabled: { type: Boolean },
22315
+ error: {},
22316
+ isReadonly: { type: Boolean },
22317
+ multiline: {
22318
+ type: Boolean,
22319
+ default: false
22320
+ },
22321
+ placeholder: {},
22322
+ saveOnBlur: {
22323
+ type: Boolean,
22324
+ default: true
22325
+ }
22326
+ }, {
22327
+ "modelValue": { default: "" },
22328
+ "modelModifiers": {}
22329
+ }),
22330
+ emits: /*@__PURE__*/ mergeModels([
22331
+ "cancel",
22332
+ "edit",
22333
+ "save"
22334
+ ], ["update:modelValue"]),
22335
+ setup(__props, { emit: __emit }) {
22336
+ const modelValue = useModel(__props, "modelValue");
22337
+ const emit = __emit;
22338
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
22339
+ const displayRef = useTemplateRef("display");
22340
+ const fieldRef = useTemplateRef("field");
22341
+ const isEditing = ref(false);
22342
+ const draft = ref("");
22343
+ const isInteractive = computed(() => !disabled.value && !__props.isReadonly);
22344
+ function edit() {
22345
+ if (!isInteractive.value) return;
22346
+ draft.value = modelValue.value;
22347
+ isEditing.value = true;
22348
+ emit("edit");
22349
+ nextTick(() => fieldRef.value?.focus());
22350
+ }
22351
+ function close() {
22352
+ isEditing.value = false;
22353
+ nextTick(() => displayRef.value?.focus());
22354
+ }
22355
+ function save() {
22356
+ modelValue.value = draft.value;
22357
+ emit("save", draft.value);
22358
+ close();
22359
+ }
22360
+ function cancel() {
22361
+ emit("cancel");
22362
+ close();
22363
+ }
22364
+ function onBlur() {
22365
+ if (__props.saveOnBlur && isEditing.value) save();
22366
+ }
22367
+ function onKeyDown(evt) {
22368
+ if (evt.key === "Escape") {
22369
+ evt.preventDefault();
22370
+ cancel();
22371
+ return;
22372
+ }
22373
+ if (evt.key === "Enter") if (__props.multiline) {
22374
+ if (evt.metaKey || evt.ctrlKey) {
22375
+ evt.preventDefault();
22376
+ save();
22377
+ }
22378
+ } else {
22379
+ evt.preventDefault();
22380
+ save();
22381
+ }
22382
+ }
22383
+ function onDisplayKeyDown(evt) {
22384
+ if (!isInteractive.value) return;
22385
+ if (evt.key === "Enter" || evt.key === " ") {
22386
+ evt.preventDefault();
22387
+ edit();
22388
+ }
22389
+ }
22390
+ return (_ctx, _cache) => {
22391
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(InlineEdit_module_default).inlineEdit) }, [isEditing.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.multiline ? (openBlock(), createBlock(FluxFormTextArea_default, {
22392
+ key: 0,
22393
+ modelValue: draft.value,
22394
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => draft.value = $event),
22395
+ ref: "field",
22396
+ class: normalizeClass(unref(InlineEdit_module_default).inlineEditField),
22397
+ error: __props.error,
22398
+ placeholder: __props.placeholder,
22399
+ onBlur,
22400
+ onKeydown: onKeyDown
22401
+ }, null, 8, [
22402
+ "modelValue",
22403
+ "class",
22404
+ "error",
22405
+ "placeholder"
22406
+ ])) : (openBlock(), createBlock(FluxFormInput_default, {
22407
+ key: 1,
22408
+ modelValue: draft.value,
22409
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => draft.value = $event),
22410
+ ref: "field",
22411
+ class: normalizeClass(unref(InlineEdit_module_default).inlineEditField),
22412
+ error: __props.error,
22413
+ placeholder: __props.placeholder,
22414
+ onBlur,
22415
+ onKeydown: onKeyDown
22416
+ }, null, 8, [
22417
+ "modelValue",
22418
+ "class",
22419
+ "error",
22420
+ "placeholder"
22421
+ ])), createElementVNode("div", {
22422
+ class: normalizeClass(unref(InlineEdit_module_default).inlineEditActions),
22423
+ onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["prevent"]))
22424
+ }, [renderSlot(_ctx.$slots, "actions", {
22425
+ save,
22426
+ cancel
22427
+ }, () => [createVNode(FluxSecondaryButton_default, {
22428
+ "icon-leading": "check",
22429
+ onClick: save
22430
+ }), createVNode(FluxSecondaryButton_default, {
22431
+ "icon-leading": "xmark",
22432
+ onClick: cancel
22433
+ })])], 34)], 64)) : (openBlock(), createElementBlock("div", {
22434
+ key: 1,
22435
+ ref: "display",
22436
+ class: normalizeClass(unref(clsx)(unref(InlineEdit_module_default).inlineEditDisplay, isInteractive.value && unref(InlineEdit_module_default).isInteractive, !modelValue.value && unref(InlineEdit_module_default).isPlaceholder)),
22437
+ role: isInteractive.value ? "button" : void 0,
22438
+ tabindex: isInteractive.value ? 0 : void 0,
22439
+ onClick: edit,
22440
+ onKeydown: onDisplayKeyDown
22441
+ }, [renderSlot(_ctx.$slots, "default", {
22442
+ value: modelValue.value,
22443
+ edit
22444
+ }, () => [createTextVNode(toDisplayString(modelValue.value || __props.placeholder), 1)])], 42, _hoisted_1$21))], 2);
22445
+ };
22446
+ }
22447
+ });
21277
22448
  var Kanban_module_default = {
21278
22449
  kanban: `kanban`,
21279
22450
  kanbanLiveRegion: `kanban-live-region`,
@@ -21300,7 +22471,7 @@ var Kanban_module_default = {
21300
22471
  };
21301
22472
  //#endregion
21302
22473
  //#region src/component/FluxKanban.vue?vue&type=script&setup=true&lang.ts
21303
- var _hoisted_1$18 = ["aria-label"];
22474
+ var _hoisted_1$20 = ["aria-label"];
21304
22475
  //#endregion
21305
22476
  //#region src/component/FluxKanban.vue
21306
22477
  var FluxKanban_default = /* @__PURE__ */ defineComponent({
@@ -21367,14 +22538,14 @@ var FluxKanban_default = /* @__PURE__ */ defineComponent({
21367
22538
  "aria-live": "polite",
21368
22539
  "aria-atomic": "true",
21369
22540
  class: normalizeClass(unref(Kanban_module_default).kanbanLiveRegion)
21370
- }, toDisplayString(liveMessage.value), 3)], 10, _hoisted_1$18);
22541
+ }, toDisplayString(liveMessage.value), 3)], 10, _hoisted_1$20);
21371
22542
  };
21372
22543
  }
21373
22544
  });
21374
22545
  //#endregion
21375
22546
  //#region src/component/FluxKanbanColumn.vue?vue&type=script&setup=true&lang.ts
21376
- var _hoisted_1$17 = ["aria-label", "aria-disabled"];
21377
- var _hoisted_2$5 = ["draggable", "tabindex"];
22547
+ var _hoisted_1$19 = ["aria-label", "aria-disabled"];
22548
+ var _hoisted_2$6 = ["draggable", "tabindex"];
21378
22549
  //#endregion
21379
22550
  //#region src/component/FluxKanbanColumn.vue
21380
22551
  var FluxKanbanColumn_default = /* @__PURE__ */ defineComponent({
@@ -21526,7 +22697,7 @@ var FluxKanbanColumn_default = /* @__PURE__ */ defineComponent({
21526
22697
  key: 1,
21527
22698
  label: String(__props.count)
21528
22699
  }, null, 8, ["label"])) : createCommentVNode("", true)
21529
- ], 2), renderSlot(_ctx.$slots, "actions")], 42, _hoisted_2$5),
22700
+ ], 2), renderSlot(_ctx.$slots, "actions")], 42, _hoisted_2$6),
21530
22701
  createElementVNode("main", {
21531
22702
  ref_key: "body",
21532
22703
  ref: body,
@@ -21555,13 +22726,13 @@ var FluxKanbanColumn_default = /* @__PURE__ */ defineComponent({
21555
22726
  key: 0,
21556
22727
  class: normalizeClass(unref(Kanban_module_default).kanbanColumnFooter)
21557
22728
  }, [renderSlot(_ctx.$slots, "footer")], 2)) : createCommentVNode("", true)
21558
- ], 10, _hoisted_1$17);
22729
+ ], 10, _hoisted_1$19);
21559
22730
  };
21560
22731
  }
21561
22732
  });
21562
22733
  //#endregion
21563
22734
  //#region src/component/FluxKanbanItem.vue?vue&type=script&setup=true&lang.ts
21564
- var _hoisted_1$16 = [
22735
+ var _hoisted_1$18 = [
21565
22736
  "aria-disabled",
21566
22737
  "draggable",
21567
22738
  "tabindex"
@@ -21688,7 +22859,7 @@ var FluxKanbanItem_default = /* @__PURE__ */ defineComponent({
21688
22859
  onDragover: withModifiers(onDragOver, ["stop"]),
21689
22860
  onFocus,
21690
22861
  onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleKeyDown) && unref(handleKeyDown)(...args))
21691
- }, [renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$16);
22862
+ }, [renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$18);
21692
22863
  };
21693
22864
  }
21694
22865
  });
@@ -21864,7 +23035,7 @@ var FluxLink_default = /* @__PURE__ */ defineComponent({
21864
23035
  });
21865
23036
  //#endregion
21866
23037
  //#region src/component/FluxMenuCollapsible.vue?vue&type=script&setup=true&lang.ts
21867
- var _hoisted_1$15 = ["id"];
23038
+ var _hoisted_1$17 = ["id"];
21868
23039
  //#endregion
21869
23040
  //#region src/component/FluxMenuCollapsible.vue
21870
23041
  var FluxMenuCollapsible_default = /* @__PURE__ */ defineComponent({
@@ -21974,13 +23145,117 @@ var FluxMenuCollapsible_default = /* @__PURE__ */ defineComponent({
21974
23145
  id: unref(bodyId),
21975
23146
  class: normalizeClass(unref(Menu_module_default).menuCollapsibleBody),
21976
23147
  role: "group"
21977
- }, [createElementVNode("div", { class: normalizeClass(unref(Menu_module_default).menuCollapsibleContent) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$15)) : createCommentVNode("", true)]),
23148
+ }, [createElementVNode("div", { class: normalizeClass(unref(Menu_module_default).menuCollapsibleContent) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$17)) : createCommentVNode("", true)]),
21978
23149
  _: 3
21979
23150
  })], 2);
21980
23151
  };
21981
23152
  }
21982
23153
  });
21983
23154
  //#endregion
23155
+ //#region src/css/component/MenuFlyout.module.scss
23156
+ var { "basePane": _0$5 } = Pane_module_default$1;
23157
+ var MenuFlyout_module_default = {
23158
+ menuFlyoutPopup: `menu-flyout-popup ${_0$5}`,
23159
+ menuFlyoutTriggerOpen: `menu-flyout-trigger-open`,
23160
+ menuFlyoutConeDebug: `menu-flyout-cone-debug`
23161
+ };
23162
+ //#endregion
23163
+ //#region src/component/FluxMenuFlyout.vue?vue&type=script&setup=true&lang.ts
23164
+ var _hoisted_1$16 = ["points"];
23165
+ var _hoisted_2$5 = ["cx", "cy"];
23166
+ var MENU_CHROME_TOP = 10;
23167
+ //#endregion
23168
+ //#region src/component/FluxMenuFlyout.vue
23169
+ var FluxMenuFlyout_default = /* @__PURE__ */ defineComponent({
23170
+ __name: "FluxMenuFlyout",
23171
+ props: {
23172
+ disabled: { type: Boolean },
23173
+ icon: {},
23174
+ isActive: { type: Boolean },
23175
+ isDestructive: { type: Boolean },
23176
+ label: {},
23177
+ position: { default: "right-top" }
23178
+ },
23179
+ setup(__props, { slots: $slots }) {
23180
+ const translate = useTranslate_default();
23181
+ const triggerRef = useTemplateRef("trigger");
23182
+ const popupRef = useTemplateRef("popup");
23183
+ const popupAnchor = { $el: { getBoundingClientRect() {
23184
+ const element = triggerRef.value?.$el;
23185
+ if (!element) return new DOMRect();
23186
+ const rect = element.getBoundingClientRect();
23187
+ return new DOMRect(rect.x, rect.y - MENU_CHROME_TOP, rect.width, rect.height);
23188
+ } } };
23189
+ const { context, cone, isOpen, onPopupKeydown, onTriggerClick, onTriggerKeydown } = useMenuFlyout({
23190
+ triggerRef,
23191
+ popupRef,
23192
+ disabled: toRef(() => __props.disabled)
23193
+ });
23194
+ const showDebugCone = computed(() => !!context && context.debugCone.value && isOpen.value && !!cone.value);
23195
+ const conePoints = computed(() => cone.value ? `${cone.value.ax},${cone.value.ay} ${cone.value.bx},${cone.value.by} ${cone.value.cx},${cone.value.cy}` : "");
23196
+ const coneApex = computed(() => ({
23197
+ x: cone.value?.ax ?? 0,
23198
+ y: cone.value?.ay ?? 0
23199
+ }));
23200
+ return (_ctx, _cache) => {
23201
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(FluxMenuItem_default, {
23202
+ ref: "trigger",
23203
+ class: normalizeClass(unref(isOpen) && unref(MenuFlyout_module_default).menuFlyoutTriggerOpen),
23204
+ "command-icon": "angle-right",
23205
+ disabled: __props.disabled,
23206
+ "icon-leading": __props.icon,
23207
+ "is-active": __props.isActive,
23208
+ "is-destructive": __props.isDestructive,
23209
+ label: __props.label,
23210
+ "aria-haspopup": "menu",
23211
+ "aria-expanded": unref(isOpen) ? "true" : "false",
23212
+ onClick: unref(onTriggerClick),
23213
+ onKeydown: unref(onTriggerKeydown)
23214
+ }, createSlots({ _: 2 }, [$slots.trigger ? {
23215
+ name: "label",
23216
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "trigger")]),
23217
+ key: "0"
23218
+ } : void 0]), 1032, [
23219
+ "class",
23220
+ "disabled",
23221
+ "icon-leading",
23222
+ "is-active",
23223
+ "is-destructive",
23224
+ "label",
23225
+ "aria-expanded",
23226
+ "onClick",
23227
+ "onKeydown"
23228
+ ]), (openBlock(), createBlock(Teleport, { to: "body" }, [unref(isOpen) ? (openBlock(), createBlock(unref(AnchorPopup_default), {
23229
+ key: 0,
23230
+ ref: "popup",
23231
+ anchor: popupAnchor,
23232
+ class: normalizeClass(unref(MenuFlyout_module_default).menuFlyoutPopup),
23233
+ "clamp-to-viewport": "",
23234
+ margin: 2,
23235
+ position: __props.position,
23236
+ role: "menu",
23237
+ "aria-label": unref(translate)("flux.submenu"),
23238
+ onKeydown: unref(onPopupKeydown)
23239
+ }, {
23240
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
23241
+ _: 3
23242
+ }, 8, [
23243
+ "class",
23244
+ "position",
23245
+ "aria-label",
23246
+ "onKeydown"
23247
+ ])) : createCommentVNode("", true), showDebugCone.value ? (openBlock(), createElementBlock("svg", {
23248
+ key: 1,
23249
+ class: normalizeClass(unref(MenuFlyout_module_default).menuFlyoutConeDebug)
23250
+ }, [createElementVNode("polygon", { points: conePoints.value }, null, 8, _hoisted_1$16), createElementVNode("circle", {
23251
+ cx: coneApex.value.x,
23252
+ cy: coneApex.value.y,
23253
+ r: "4"
23254
+ }, null, 8, _hoisted_2$5)], 2)) : createCommentVNode("", true)]))], 64);
23255
+ };
23256
+ }
23257
+ });
23258
+ //#endregion
21984
23259
  //#region src/component/FluxMenuOptions.vue
21985
23260
  var FluxMenuOptions_default = /* @__PURE__ */ defineComponent({
21986
23261
  __name: "FluxMenuOptions",
@@ -22052,7 +23327,7 @@ var Notice_module_default = {
22052
23327
  };
22053
23328
  //#endregion
22054
23329
  //#region src/component/FluxNotice.vue?vue&type=script&setup=true&lang.ts
22055
- var _hoisted_1$14 = ["aria-label"];
23330
+ var _hoisted_1$15 = ["aria-label"];
22056
23331
  //#endregion
22057
23332
  //#region src/component/FluxNotice.vue
22058
23333
  var FluxNotice_default = /* @__PURE__ */ defineComponent({
@@ -22103,7 +23378,7 @@ var FluxNotice_default = /* @__PURE__ */ defineComponent({
22103
23378
  type: "button",
22104
23379
  "aria-label": unref(translate)("flux.close"),
22105
23380
  onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
22106
- }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$14)) : createCommentVNode("", true)
23381
+ }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$15)) : createCommentVNode("", true)
22107
23382
  ], 2);
22108
23383
  };
22109
23384
  }
@@ -22356,7 +23631,7 @@ var FluxPaneIllustration_default = /* @__PURE__ */ defineComponent({
22356
23631
  });
22357
23632
  //#endregion
22358
23633
  //#region src/component/FluxPaneMedia.vue?vue&type=script&setup=true&lang.ts
22359
- var _hoisted_1$13 = ["src", "alt"];
23634
+ var _hoisted_1$14 = ["src", "alt"];
22360
23635
  //#endregion
22361
23636
  //#region src/component/FluxPaneMedia.vue
22362
23637
  var FluxPaneMedia_default = /* @__PURE__ */ defineComponent({
@@ -22381,13 +23656,13 @@ var FluxPaneMedia_default = /* @__PURE__ */ defineComponent({
22381
23656
  }),
22382
23657
  src: __props.imageUrl,
22383
23658
  alt: __props.imageAlt
22384
- }, null, 14, _hoisted_1$13)) : createCommentVNode("", true)], 2);
23659
+ }, null, 14, _hoisted_1$14)) : createCommentVNode("", true)], 2);
22385
23660
  };
22386
23661
  }
22387
23662
  });
22388
23663
  //#endregion
22389
23664
  //#region src/component/FluxPersona.vue?vue&type=script&setup=true&lang.ts
22390
- var _hoisted_1$12 = { key: 0 };
23665
+ var _hoisted_1$13 = { key: 0 };
22391
23666
  //#endregion
22392
23667
  //#region src/component/FluxPersona.vue
22393
23668
  var FluxPersona_default = /* @__PURE__ */ defineComponent({
@@ -22427,13 +23702,13 @@ var FluxPersona_default = /* @__PURE__ */ defineComponent({
22427
23702
  ]), !__props.isCompact ? (openBlock(), createElementBlock("div", {
22428
23703
  key: 0,
22429
23704
  class: normalizeClass(unref(Avatar_module_default).personaDetails)
22430
- }, [createElementVNode("strong", null, toDisplayString(__props.name), 1), __props.title ? (openBlock(), createElementBlock("span", _hoisted_1$12, toDisplayString(__props.title), 1)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 2);
23705
+ }, [createElementVNode("strong", null, toDisplayString(__props.name), 1), __props.title ? (openBlock(), createElementBlock("span", _hoisted_1$13, toDisplayString(__props.title), 1)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 2);
22431
23706
  };
22432
23707
  }
22433
23708
  });
22434
23709
  //#endregion
22435
23710
  //#region src/component/FluxPlaceholder.vue?vue&type=script&setup=true&lang.ts
22436
- var _hoisted_1$11 = { key: 0 };
23711
+ var _hoisted_1$12 = { key: 0 };
22437
23712
  var _hoisted_2$4 = { key: 1 };
22438
23713
  //#endregion
22439
23714
  //#region src/component/FluxPlaceholder.vue
@@ -22463,7 +23738,7 @@ var FluxPlaceholder_default = /* @__PURE__ */ defineComponent({
22463
23738
  class: normalizeClass(unref(Placeholder_module_default).placeholderIcon),
22464
23739
  name: __props.icon
22465
23740
  }, null, 8, ["class", "name"])) : createCommentVNode("", true),
22466
- createElementVNode("div", { class: normalizeClass(unref(Placeholder_module_default).placeholderCaption) }, [__props.title ? (openBlock(), createElementBlock("strong", _hoisted_1$11, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.message ? (openBlock(), createElementBlock("p", _hoisted_2$4, toDisplayString(__props.message), 1)) : createCommentVNode("", true)], 2),
23741
+ createElementVNode("div", { class: normalizeClass(unref(Placeholder_module_default).placeholderCaption) }, [__props.title ? (openBlock(), createElementBlock("strong", _hoisted_1$12, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.message ? (openBlock(), createElementBlock("p", _hoisted_2$4, toDisplayString(__props.message), 1)) : createCommentVNode("", true)], 2),
22467
23742
  renderSlot(_ctx.$slots, "default")
22468
23743
  ], 2);
22469
23744
  };
@@ -22697,7 +23972,7 @@ var FluxPublishButton_default = /* @__PURE__ */ defineComponent({
22697
23972
  });
22698
23973
  //#endregion
22699
23974
  //#region src/component/FluxQuantitySelector.vue?vue&type=script&setup=true&lang.ts
22700
- var _hoisted_1$10 = [
23975
+ var _hoisted_1$11 = [
22701
23976
  "disabled",
22702
23977
  "max",
22703
23978
  "min",
@@ -22774,7 +24049,7 @@ var FluxQuantitySelector_default = /* @__PURE__ */ defineComponent({
22774
24049
  max: __props.max,
22775
24050
  min: __props.min,
22776
24051
  step: __props.step
22777
- }, null, 14, _hoisted_1$10), [[vModelText, modelValue.value]]),
24052
+ }, null, 14, _hoisted_1$11), [[vModelText, modelValue.value]]),
22778
24053
  createVNode(FluxSecondaryButton_default, {
22779
24054
  class: normalizeClass(unref(Form_module_default).formQuantitySelectorButton),
22780
24055
  disabled: unref(disabled) || modelValue.value >= __props.max,
@@ -22821,7 +24096,7 @@ var Snackbar_module_default = {
22821
24096
  };
22822
24097
  //#endregion
22823
24098
  //#region src/component/FluxSnackbar.vue?vue&type=script&setup=true&lang.ts
22824
- var _hoisted_1$9 = ["onClick"];
24099
+ var _hoisted_1$10 = ["onClick"];
22825
24100
  //#endregion
22826
24101
  //#region src/component/FluxSnackbar.vue
22827
24102
  var FluxSnackbar_default = /* @__PURE__ */ defineComponent({
@@ -22937,7 +24212,7 @@ var FluxSnackbar_default = /* @__PURE__ */ defineComponent({
22937
24212
  tabindex: "-1",
22938
24213
  type: "button",
22939
24214
  onClick: ($event) => onAction(actionKey)
22940
- }, [createElementVNode("span", null, toDisplayString(actionLabel), 1)], 10, _hoisted_1$9);
24215
+ }, [createElementVNode("span", null, toDisplayString(actionLabel), 1)], 10, _hoisted_1$10);
22941
24216
  }), 128))], 2)) : createCommentVNode("", true),
22942
24217
  __props.isCloseable ? (openBlock(), createBlock(FluxAction_default, {
22943
24218
  key: 1,
@@ -23133,7 +24408,7 @@ var Root_module_default = {
23133
24408
  };
23134
24409
  //#endregion
23135
24410
  //#region src/component/FluxRoot.vue?vue&type=script&setup=true&lang.ts
23136
- var _hoisted_1$8 = ["inert"];
24411
+ var _hoisted_1$9 = ["inert"];
23137
24412
  //#endregion
23138
24413
  //#region src/component/FluxRoot.vue
23139
24414
  var FluxRoot_default = /* @__PURE__ */ defineComponent({
@@ -23151,7 +24426,7 @@ var FluxRoot_default = /* @__PURE__ */ defineComponent({
23151
24426
  createElementVNode("div", mergeProps($attrs, {
23152
24427
  class: unref(Root_module_default).root,
23153
24428
  inert: unref(inertMain)
23154
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$8),
24429
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$9),
23155
24430
  createVNode(FluxOverlayProvider_default),
23156
24431
  createVNode(FluxSnackbarProvider_default),
23157
24432
  createVNode(FluxTooltipProvider_default)
@@ -23292,7 +24567,7 @@ var SegmentedControl_module_default = {
23292
24567
  };
23293
24568
  //#endregion
23294
24569
  //#region src/component/FluxSegmentedControl.vue?vue&type=script&setup=true&lang.ts
23295
- var _hoisted_1$7 = ["aria-label"];
24570
+ var _hoisted_1$8 = ["aria-label"];
23296
24571
  //#endregion
23297
24572
  //#region src/component/FluxSegmentedControl.vue
23298
24573
  var FluxSegmentedControl_default = /* @__PURE__ */ defineComponent({
@@ -23327,11 +24602,11 @@ var FluxSegmentedControl_default = /* @__PURE__ */ defineComponent({
23327
24602
  });
23328
24603
  onMounted(() => updateHighlight());
23329
24604
  watch(modelValue, () => updateHighlight(), { flush: "post" });
23330
- ye$1(controlRef, () => updateHighlight(), {
24605
+ we$1(controlRef, () => updateHighlight(), {
23331
24606
  childList: true,
23332
24607
  subtree: true
23333
24608
  });
23334
- Ce$1(controlRef, () => updateHighlight());
24609
+ Oe$1(controlRef, () => updateHighlight());
23335
24610
  function select(value) {
23336
24611
  modelValue.value = value;
23337
24612
  }
@@ -23393,13 +24668,13 @@ var FluxSegmentedControl_default = /* @__PURE__ */ defineComponent({
23393
24668
  left: `${activeItemX.value}px`,
23394
24669
  width: `${activeItemWidth.value}px`
23395
24670
  })
23396
- }, null, 6)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$7);
24671
+ }, null, 6)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$8);
23397
24672
  };
23398
24673
  }
23399
24674
  });
23400
24675
  //#endregion
23401
24676
  //#region src/component/FluxSegmentedControlItem.vue?vue&type=script&setup=true&lang.ts
23402
- var _hoisted_1$6 = [
24677
+ var _hoisted_1$7 = [
23403
24678
  "aria-checked",
23404
24679
  "aria-disabled",
23405
24680
  "disabled",
@@ -23465,7 +24740,7 @@ var FluxSegmentedControlItem_default = /* @__PURE__ */ defineComponent({
23465
24740
  key: 0,
23466
24741
  name: __props.icon,
23467
24742
  size: iconSize.value
23468
- }, null, 8, ["name", "size"])) : createCommentVNode("", true), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$3, toDisplayString(__props.label), 1)) : createCommentVNode("", true)])], 10, _hoisted_1$6);
24743
+ }, null, 8, ["name", "size"])) : createCommentVNode("", true), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$3, toDisplayString(__props.label), 1)) : createCommentVNode("", true)])], 10, _hoisted_1$7);
23469
24744
  };
23470
24745
  }
23471
24746
  });
@@ -23621,7 +24896,7 @@ var FluxSplitViewPane_default = /* @__PURE__ */ defineComponent({
23621
24896
  });
23622
24897
  //#endregion
23623
24898
  //#region src/component/FluxSplitView.vue?vue&type=script&setup=true&lang.ts
23624
- var _hoisted_1$5 = [
24899
+ var _hoisted_1$6 = [
23625
24900
  "aria-orientation",
23626
24901
  "aria-valuenow",
23627
24902
  "tabindex",
@@ -23686,7 +24961,7 @@ var FluxSplitView_default = /* @__PURE__ */ defineComponent({
23686
24961
  tabindex: pane.isResizable && panes.value[index + 1].isResizable ? 0 : -1,
23687
24962
  onPointerdown: ($event) => unref(onHandlePointerDown)($event, index),
23688
24963
  onKeydown: ($event) => unref(onHandleKeyDown)($event, index)
23689
- }, null, 42, _hoisted_1$5)) : createCommentVNode("", true)], 64);
24964
+ }, null, 42, _hoisted_1$6)) : createCommentVNode("", true)], 64);
23690
24965
  }), 128))]),
23691
24966
  _: 1
23692
24967
  }, 8, ["class", "style"]);
@@ -23715,7 +24990,7 @@ var Stepper_module_default = {
23715
24990
  };
23716
24991
  //#endregion
23717
24992
  //#region src/component/FluxStepperSteps.vue?vue&type=script&setup=true&lang.ts
23718
- var _hoisted_1$4 = ["onClick"];
24993
+ var _hoisted_1$5 = ["onClick"];
23719
24994
  var _hoisted_2$2 = { key: 1 };
23720
24995
  //#endregion
23721
24996
  //#region src/component/FluxStepperSteps.vue
@@ -23749,7 +25024,7 @@ var FluxStepperSteps_default = /* @__PURE__ */ defineComponent({
23749
25024
  name: "check"
23750
25025
  })) : (openBlock(), createElementBlock("span", _hoisted_2$2, toDisplayString(step), 1))]),
23751
25026
  _: 2
23752
- }, 1024)], 10, _hoisted_1$4);
25027
+ }, 1024)], 10, _hoisted_1$5);
23753
25028
  }), 128))], 6);
23754
25029
  };
23755
25030
  }
@@ -23924,11 +25199,11 @@ var FluxTabBar_default = /* @__PURE__ */ defineComponent({
23924
25199
  setup(__props) {
23925
25200
  const tabBarRef = useTemplateRef("tabBar");
23926
25201
  O$1(tabBarRef, "scroll", () => checkScroll());
23927
- ye$1(tabBarRef, () => {
25202
+ we$1(tabBarRef, () => {
23928
25203
  checkScroll();
23929
25204
  updateHighlight();
23930
25205
  }, { childList: true });
23931
- Ce$1(tabBarRef, () => updateHighlight());
25206
+ Oe$1(tabBarRef, () => updateHighlight());
23932
25207
  const isEndArrowVisible = ref(false);
23933
25208
  const isStartArrowVisible = ref(false);
23934
25209
  const activeItemX = ref(0);
@@ -24036,7 +25311,7 @@ var FluxTabBar_default = /* @__PURE__ */ defineComponent({
24036
25311
  });
24037
25312
  //#endregion
24038
25313
  //#region src/component/FluxTabBarItem.vue?vue&type=script&setup=true&lang.ts
24039
- var _hoisted_1$3 = { key: 1 };
25314
+ var _hoisted_1$4 = { key: 1 };
24040
25315
  //#endregion
24041
25316
  //#region src/component/FluxTabBarItem.vue
24042
25317
  var FluxTabBarItem_default = /* @__PURE__ */ defineComponent({
@@ -24128,7 +25403,7 @@ var FluxTabBarItem_default = /* @__PURE__ */ defineComponent({
24128
25403
  key: 0,
24129
25404
  name: __props.icon,
24130
25405
  size: 16
24131
- }, null, 8, ["name"])) : createCommentVNode("", true), __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$3, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]),
25406
+ }, null, 8, ["name"])) : createCommentVNode("", true), __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$4, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]),
24132
25407
  _: 1
24133
25408
  }, 8, [
24134
25409
  "component-type",
@@ -24295,7 +25570,7 @@ var FluxTimeline_default = /* @__PURE__ */ defineComponent({
24295
25570
  });
24296
25571
  //#endregion
24297
25572
  //#region src/component/FluxTimelineItem.vue?vue&type=script&setup=true&lang.ts
24298
- var _hoisted_1$2 = ["src"];
25573
+ var _hoisted_1$3 = ["src"];
24299
25574
  var _hoisted_2$1 = { key: 0 };
24300
25575
  var _hoisted_3 = { key: 1 };
24301
25576
  //#endregion
@@ -24323,7 +25598,7 @@ var FluxTimelineItem_default = /* @__PURE__ */ defineComponent({
24323
25598
  class: normalizeClass(unref(Timeline_module_default).timelineItemPhotoImage),
24324
25599
  src: __props.photo,
24325
25600
  alt: ""
24326
- }, null, 10, _hoisted_1$2), __props.icon ? (openBlock(), createElementBlock("div", {
25601
+ }, null, 10, _hoisted_1$3), __props.icon ? (openBlock(), createElementBlock("div", {
24327
25602
  key: 0,
24328
25603
  class: normalizeClass(unref(Timeline_module_default).timelineItemPhotoIcon)
24329
25604
  }, [createVNode(FluxIcon_default, {
@@ -24346,7 +25621,7 @@ var FluxTimelineItem_default = /* @__PURE__ */ defineComponent({
24346
25621
  });
24347
25622
  //#endregion
24348
25623
  //#region src/component/FluxToggle.vue?vue&type=script&setup=true&lang.ts
24349
- var _hoisted_1$1 = [
25624
+ var _hoisted_1$2 = [
24350
25625
  "for",
24351
25626
  "aria-disabled",
24352
25627
  "aria-readonly",
@@ -24419,7 +25694,7 @@ var FluxToggle_default = /* @__PURE__ */ defineComponent({
24419
25694
  onClick,
24420
25695
  onInput: toggle
24421
25696
  }, null, 42, _hoisted_2)
24422
- ], 10, _hoisted_1$1);
25697
+ ], 10, _hoisted_1$2);
24423
25698
  };
24424
25699
  }
24425
25700
  });
@@ -24475,6 +25750,275 @@ var FluxToolbarGroup_default = /* @__PURE__ */ defineComponent({
24475
25750
  }
24476
25751
  });
24477
25752
  //#endregion
25753
+ //#region src/component/FluxTourItem.vue?vue&type=script&setup=true&lang.ts
25754
+ var _hoisted_1$1 = {
25755
+ "aria-hidden": "true",
25756
+ style: { "display": "none" }
25757
+ };
25758
+ //#endregion
25759
+ //#region src/component/FluxTourItem.vue
25760
+ var FluxTourItem_default = /* @__PURE__ */ defineComponent({
25761
+ __name: "FluxTourItem",
25762
+ props: {
25763
+ target: { type: [String, Function] },
25764
+ title: {},
25765
+ position: {}
25766
+ },
25767
+ setup(__props) {
25768
+ return (_ctx, _cache) => {
25769
+ return openBlock(), createElementBlock("span", _hoisted_1$1);
25770
+ };
25771
+ }
25772
+ });
25773
+ var Tour_module_default = {
25774
+ tour: `tour`,
25775
+ tourSpotlight: `tour-spotlight`,
25776
+ tourPopover: `tour-popover`,
25777
+ isStepping: `is-stepping`,
25778
+ tourPane: `tour-pane`,
25779
+ tourBodyViewport: `tour-body-viewport`,
25780
+ tourBody: `tour-body`,
25781
+ tourTitle: `tour-title`,
25782
+ tourContent: `tour-content`,
25783
+ tourFooter: `tour-footer`,
25784
+ tourProgress: `tour-progress`,
25785
+ tourSkip: `tour-skip`
25786
+ };
25787
+ //#endregion
25788
+ //#region src/component/FluxTour.vue
25789
+ var FluxTour_default = /* @__PURE__ */ defineComponent({
25790
+ __name: "FluxTour",
25791
+ props: /*@__PURE__*/ mergeModels({
25792
+ maskPadding: { default: 8 },
25793
+ root: { type: [String, Function] }
25794
+ }, {
25795
+ "active": {
25796
+ type: Boolean,
25797
+ required: true
25798
+ },
25799
+ "activeModifiers": {},
25800
+ "step": { default: 0 },
25801
+ "stepModifiers": {}
25802
+ }),
25803
+ emits: /*@__PURE__*/ mergeModels([
25804
+ "finish",
25805
+ "skip",
25806
+ "next",
25807
+ "prev"
25808
+ ], ["update:active", "update:step"]),
25809
+ setup(__props, { emit: __emit }) {
25810
+ const active = useModel(__props, "active");
25811
+ const step = useModel(__props, "step");
25812
+ const emit = __emit;
25813
+ const slots = useSlots();
25814
+ const translate = useTranslate_default();
25815
+ const popup = useTemplateRef("popup");
25816
+ const bodyViewport = useTemplateRef("bodyViewport");
25817
+ const targetRect = ref(null);
25818
+ const isStepping = ref(false);
25819
+ let steppingTimer;
25820
+ const items = computed(() => {
25821
+ const vnodes = a$2(slots.default?.() ?? []);
25822
+ const out = [];
25823
+ for (const vnode of vnodes) {
25824
+ if (vnode.type !== FluxTourItem_default) continue;
25825
+ const props = vnode.props ?? {};
25826
+ const children = vnode.children;
25827
+ out.push({
25828
+ target: props.target,
25829
+ title: props.title,
25830
+ position: props.position,
25831
+ content: children?.default
25832
+ });
25833
+ }
25834
+ return out;
25835
+ });
25836
+ const total = computed(() => items.value.length);
25837
+ const currentItem = computed(() => items.value[step.value]);
25838
+ const currentContent = computed(() => {
25839
+ const content = currentItem.value?.content?.();
25840
+ return content ? h(Fragment, content) : null;
25841
+ });
25842
+ const virtualAnchor = { $el: { getBoundingClientRect: () => {
25843
+ const rect = targetRect.value;
25844
+ if (!rect) return new DOMRect(0, 0, 0, 0);
25845
+ return new DOMRect(rect.x - __props.maskPadding, rect.y - __props.maskPadding, rect.width + __props.maskPadding * 2, rect.height + __props.maskPadding * 2);
25846
+ } } };
25847
+ function resolveScope() {
25848
+ if (!__props.root) return document;
25849
+ if (typeof __props.root === "string") return document.querySelector(__props.root) ?? document;
25850
+ if (typeof __props.root === "function") return __props.root() ?? document;
25851
+ return __props.root;
25852
+ }
25853
+ function resolveTarget() {
25854
+ const current = items.value[step.value];
25855
+ if (!current) return null;
25856
+ return typeof current.target === "function" ? current.target() : resolveScope().querySelector(current.target);
25857
+ }
25858
+ function measure() {
25859
+ const element = resolveTarget();
25860
+ if (!element) {
25861
+ targetRect.value = null;
25862
+ return;
25863
+ }
25864
+ element.scrollIntoView({
25865
+ block: "center",
25866
+ inline: "center"
25867
+ });
25868
+ requestAnimationFrame(() => {
25869
+ const resolved = resolveTarget();
25870
+ targetRect.value = resolved ? resolved.getBoundingClientRect() : null;
25871
+ popup.value?.reposition();
25872
+ });
25873
+ }
25874
+ function next() {
25875
+ if (step.value < total.value - 1) {
25876
+ step.value++;
25877
+ emit("next", step.value);
25878
+ return;
25879
+ }
25880
+ finish();
25881
+ }
25882
+ function previous() {
25883
+ if (step.value > 0) {
25884
+ step.value--;
25885
+ emit("prev", step.value);
25886
+ }
25887
+ }
25888
+ function skip() {
25889
+ active.value = false;
25890
+ emit("skip");
25891
+ }
25892
+ function finish() {
25893
+ active.value = false;
25894
+ emit("finish");
25895
+ }
25896
+ function onBodyEnter(el) {
25897
+ if (!R$2(el) || !bodyViewport.value) return;
25898
+ const height = el.offsetHeight;
25899
+ requestAnimationFrame(() => {
25900
+ if (bodyViewport.value) bodyViewport.value.style.height = `${height}px`;
25901
+ });
25902
+ }
25903
+ function onBodyAfterEnter() {
25904
+ if (bodyViewport.value) bodyViewport.value.style.height = "auto";
25905
+ }
25906
+ watch(step, (newStep, oldStep) => {
25907
+ if (active.value && newStep !== oldStep) {
25908
+ if (bodyViewport.value) bodyViewport.value.style.height = `${bodyViewport.value.offsetHeight}px`;
25909
+ isStepping.value = true;
25910
+ clearTimeout(steppingTimer);
25911
+ steppingTimer = setTimeout(() => {
25912
+ isStepping.value = false;
25913
+ }, 300);
25914
+ }
25915
+ });
25916
+ watch([active, step], async () => {
25917
+ if (!active.value) {
25918
+ targetRect.value = null;
25919
+ isStepping.value = false;
25920
+ clearTimeout(steppingTimer);
25921
+ return;
25922
+ }
25923
+ await nextTick();
25924
+ measure();
25925
+ }, { immediate: true });
25926
+ if (!C$2) {
25927
+ const onRemeasure = () => {
25928
+ if (active.value && targetRect.value) {
25929
+ const resolved = resolveTarget();
25930
+ targetRect.value = resolved ? resolved.getBoundingClientRect() : null;
25931
+ }
25932
+ };
25933
+ O$1(ref(window), "resize", onRemeasure);
25934
+ O$1(ref(window), "scroll", onRemeasure, {
25935
+ capture: true,
25936
+ passive: true
25937
+ });
25938
+ O$1(ref(window), "keydown", (evt) => {
25939
+ if (active.value && evt.key === "Escape") skip();
25940
+ });
25941
+ }
25942
+ return (_ctx, _cache) => {
25943
+ return openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(FluxFadeTransition_default), null, {
25944
+ default: withCtx(() => [active.value ? (openBlock(), createElementBlock("div", {
25945
+ key: 0,
25946
+ class: normalizeClass(unref(Tour_module_default).tour)
25947
+ }, [targetRect.value ? (openBlock(), createElementBlock("div", {
25948
+ key: 0,
25949
+ class: normalizeClass(unref(Tour_module_default).tourSpotlight),
25950
+ style: normalizeStyle({
25951
+ "--x": `${targetRect.value.x - __props.maskPadding}px`,
25952
+ "--y": `${targetRect.value.y - __props.maskPadding}px`,
25953
+ "--w": `${targetRect.value.width + __props.maskPadding * 2}px`,
25954
+ "--h": `${targetRect.value.height + __props.maskPadding * 2}px`
25955
+ })
25956
+ }, null, 6)) : createCommentVNode("", true), targetRect.value && currentItem.value ? (openBlock(), createBlock(unref(AnchorPopup_default), {
25957
+ key: 1,
25958
+ ref_key: "popup",
25959
+ ref: popup,
25960
+ anchor: virtualAnchor,
25961
+ class: normalizeClass(unref(clsx)(unref(Tour_module_default).tourPopover, isStepping.value && unref(Tour_module_default).isStepping)),
25962
+ position: currentItem.value.position ?? "bottom",
25963
+ "aria-modal": "true",
25964
+ role: "dialog"
25965
+ }, {
25966
+ default: withCtx(() => [createVNode(FluxPane_default, { class: normalizeClass(unref(Tour_module_default).tourPane) }, {
25967
+ default: withCtx(() => [createElementVNode("div", {
25968
+ ref_key: "bodyViewport",
25969
+ ref: bodyViewport,
25970
+ class: normalizeClass(unref(Tour_module_default).tourBodyViewport)
25971
+ }, [createVNode(Transition, {
25972
+ onAfterEnter: onBodyAfterEnter,
25973
+ onEnter: onBodyEnter
25974
+ }, {
25975
+ default: withCtx(() => [(openBlock(), createElementBlock("div", {
25976
+ key: step.value,
25977
+ class: normalizeClass(unref(Tour_module_default).tourBody)
25978
+ }, [currentItem.value.title ? (openBlock(), createElementBlock("strong", {
25979
+ key: 0,
25980
+ class: normalizeClass(unref(Tour_module_default).tourTitle)
25981
+ }, toDisplayString(currentItem.value.title), 3)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(unref(Tour_module_default).tourContent) }, [createVNode(unref(VNodeRenderer), { vnode: currentContent.value }, null, 8, ["vnode"])], 2)], 2))]),
25982
+ _: 1
25983
+ })], 2), createElementVNode("div", { class: normalizeClass(unref(Tour_module_default).tourFooter) }, [
25984
+ createElementVNode("span", { class: normalizeClass(unref(Tour_module_default).tourProgress) }, toDisplayString(step.value + 1) + " / " + toDisplayString(total.value), 3),
25985
+ createVNode(FluxSpacer_default),
25986
+ createElementVNode("button", {
25987
+ class: normalizeClass(unref(Tour_module_default).tourSkip),
25988
+ type: "button",
25989
+ onClick: skip
25990
+ }, toDisplayString(unref(translate)("flux.skip")), 3),
25991
+ step.value > 0 ? (openBlock(), createBlock(FluxSecondaryButton_default, {
25992
+ key: 0,
25993
+ "aria-label": unref(translate)("flux.previous"),
25994
+ "icon-leading": "angle-left",
25995
+ size: "small",
25996
+ onClick: previous
25997
+ }, null, 8, ["aria-label"])) : createCommentVNode("", true),
25998
+ step.value < total.value - 1 ? (openBlock(), createBlock(FluxPrimaryButton_default, {
25999
+ key: 1,
26000
+ "aria-label": unref(translate)("flux.next"),
26001
+ "icon-leading": "angle-right",
26002
+ size: "small",
26003
+ onClick: next
26004
+ }, null, 8, ["aria-label"])) : (openBlock(), createBlock(FluxPrimaryButton_default, {
26005
+ key: 2,
26006
+ "aria-label": unref(translate)("flux.done"),
26007
+ "icon-leading": "check",
26008
+ size: "small",
26009
+ onClick: next
26010
+ }, null, 8, ["aria-label"]))
26011
+ ], 2)]),
26012
+ _: 1
26013
+ }, 8, ["class"])]),
26014
+ _: 1
26015
+ }, 8, ["class", "position"])) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)]),
26016
+ _: 1
26017
+ })]);
26018
+ };
26019
+ }
26020
+ });
26021
+ //#endregion
24478
26022
  //#region src/css/component/TreeView.module.scss
24479
26023
  var { "treeNode": _0 } = TreeNode_module_default;
24480
26024
  var TreeView_module_default = {
@@ -24555,7 +26099,74 @@ var FluxTreeView_default = /* @__PURE__ */ defineComponent({
24555
26099
  };
24556
26100
  }
24557
26101
  });
26102
+ var VirtualScroller_module_default = {
26103
+ virtualScroller: `virtual-scroller`,
26104
+ virtualScrollerSpacer: `virtual-scroller-spacer`,
26105
+ virtualScrollerWindow: `virtual-scroller-window`
26106
+ };
26107
+ //#endregion
26108
+ //#region src/component/FluxVirtualScroller.vue
26109
+ var FluxVirtualScroller_default = /* @__PURE__ */ defineComponent({
26110
+ __name: "FluxVirtualScroller",
26111
+ props: {
26112
+ estimatedItemHeight: { default: 40 },
26113
+ items: {},
26114
+ overscan: { default: 4 }
26115
+ },
26116
+ setup(__props) {
26117
+ const viewport = useTemplateRef("viewport");
26118
+ const { y } = M$1(viewport);
26119
+ const viewportHeight = ref(0);
26120
+ const totalHeight = computed(() => __props.items.length * __props.estimatedItemHeight);
26121
+ const startIndex = computed(() => Math.max(0, Math.floor(y.value / __props.estimatedItemHeight) - __props.overscan));
26122
+ const endIndex = computed(() => Math.min(__props.items.length, Math.ceil((y.value + viewportHeight.value) / __props.estimatedItemHeight) + __props.overscan));
26123
+ const offsetY = computed(() => startIndex.value * __props.estimatedItemHeight);
26124
+ const visibleEntries = computed(() => {
26125
+ const entries = [];
26126
+ for (let index = startIndex.value; index < endIndex.value; ++index) entries.push({
26127
+ index,
26128
+ item: __props.items[index]
26129
+ });
26130
+ return entries;
26131
+ });
26132
+ let observer = null;
26133
+ onMounted(() => {
26134
+ const element = viewport.value;
26135
+ if (!element) return;
26136
+ viewportHeight.value = element.clientHeight;
26137
+ observer = new ResizeObserver(() => {
26138
+ if (viewport.value) viewportHeight.value = viewport.value.clientHeight;
26139
+ });
26140
+ observer.observe(element);
26141
+ });
26142
+ onUnmounted(() => {
26143
+ observer?.disconnect();
26144
+ observer = null;
26145
+ });
26146
+ return (_ctx, _cache) => {
26147
+ return openBlock(), createElementBlock("div", {
26148
+ ref_key: "viewport",
26149
+ ref: viewport,
26150
+ class: normalizeClass(unref(VirtualScroller_module_default).virtualScroller)
26151
+ }, [createElementVNode("div", {
26152
+ class: normalizeClass(unref(VirtualScroller_module_default).virtualScrollerSpacer),
26153
+ style: normalizeStyle({ height: `${totalHeight.value}px` })
26154
+ }, [createElementVNode("div", {
26155
+ class: normalizeClass(unref(VirtualScroller_module_default).virtualScrollerWindow),
26156
+ style: normalizeStyle({ transform: `translateY(${offsetY.value}px)` })
26157
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleEntries.value, (entry) => {
26158
+ return openBlock(), createElementBlock("div", {
26159
+ key: entry.index,
26160
+ style: normalizeStyle({ height: `${__props.estimatedItemHeight}px` })
26161
+ }, [renderSlot(_ctx.$slots, "default", {
26162
+ index: entry.index,
26163
+ item: entry.item
26164
+ })], 4);
26165
+ }), 128))], 6)], 6)], 2);
26166
+ };
26167
+ }
26168
+ });
24558
26169
  //#endregion
24559
- export { FluxAction_default as FluxAction, FluxActionBar_default as FluxActionBar, FluxActionPane_default as FluxActionPane, FluxActionStack_default as FluxActionStack, FluxAdaptiveGroup_default as FluxAdaptiveGroup, FluxAdaptiveSlot_default as FluxAdaptiveSlot, FluxAnimatedColors_default as FluxAnimatedColors, FluxAspectRatio_default as FluxAspectRatio, FluxAutoHeightTransition_default as FluxAutoHeightTransition, FluxAutoWidthTransition_default as FluxAutoWidthTransition, FluxAvatar_default as FluxAvatar, FluxBadge_default as FluxBadge, FluxBadgeStack_default as FluxBadgeStack, FluxBorderBeam_default as FluxBorderBeam, FluxBorderShine_default as FluxBorderShine, FluxBoxedIcon_default as FluxBoxedIcon, FluxBreadcrumb_default as FluxBreadcrumb, FluxBreadcrumbItem_default as FluxBreadcrumbItem, FluxBreakthroughTransition_default as FluxBreakthroughTransition, FluxButton_default as FluxButton, FluxButtonGroup_default as FluxButtonGroup, FluxButtonStack_default as FluxButtonStack, FluxCalendar_default as FluxCalendar, FluxCalendarItem_default as FluxCalendarItem, FluxChip_default as FluxChip, FluxClickablePane_default as FluxClickablePane, FluxColorPicker_default as FluxColorPicker, FluxColorSelect_default as FluxColorSelect, FluxCommandPalette_default as FluxCommandPalette, FluxCommandPaletteGroup_default as FluxCommandPaletteGroup, FluxCommandPaletteItem_default as FluxCommandPaletteItem, FluxComment_default as FluxComment, FluxContainer_default as FluxContainer, FluxDataTable_default as FluxDataTable, FluxDatePicker_default as FluxDatePicker, FluxDestructiveButton_default as FluxDestructiveButton, FluxDisabled_default as FluxDisabled, FluxDivider_default as FluxDivider, FluxDotPattern_default as FluxDotPattern, FluxDropZone_default as FluxDropZone, FluxDynamicView_default as FluxDynamicView, FluxExpandable_default as FluxExpandable, FluxExpandableGroup_default as FluxExpandableGroup, FluxFadeTransition_default as FluxFadeTransition, FluxFader_default as FluxFader, FluxFaderItem_default as FluxFaderItem, FluxFilter_default as FluxFilter, FluxFilterBar_default as FluxFilterBar, FluxFilterDate_default as FluxFilterDate, FluxFilterDateRange_default as FluxFilterDateRange, FluxFilterOption_default as FluxFilterOption, FluxFilterOptionAsync_default as FluxFilterOptionAsync, FluxFilterOptions_default as FluxFilterOptions, FluxFilterOptionsAsync_default as FluxFilterOptionsAsync, FluxFilterRange_default as FluxFilterRange, FluxFlex_default as FluxFlex, FluxFlexItem_default as FluxFlexItem, FluxFlickeringGrid_default as FluxFlickeringGrid, FluxFlyout_default as FluxFlyout, FluxFocalPointEditor_default as FluxFocalPointEditor, FluxFocalPointImage_default as FluxFocalPointImage, FluxForm_default as FluxForm, FluxFormCheckbox_default as FluxFormCheckbox, FluxFormCheckboxGroup_default as FluxFormCheckboxGroup, FluxFormColumn_default as FluxFormColumn, FluxFormDateInput_default as FluxFormDateInput, FluxFormDateRangeInput_default as FluxFormDateRangeInput, FluxFormDateTimeInput_default as FluxFormDateTimeInput, FluxFormField_default as FluxFormField, FluxFormFieldAddition_default as FluxFormFieldAddition, FluxFormGrid_default as FluxFormGrid, FluxFormInput_default as FluxFormInput, FluxFormInputAddition_default as FluxFormInputAddition, FluxFormInputGroup_default as FluxFormInputGroup, FluxFormNumberInput_default as FluxFormNumberInput, FluxFormPinInput_default as FluxFormPinInput, FluxFormRadio_default as FluxFormRadio, FluxFormRadioGroup_default as FluxFormRadioGroup, FluxFormRangeSlider_default as FluxFormRangeSlider, FluxFormRow_default as FluxFormRow, FluxFormSection_default as FluxFormSection, FluxFormSelect_default as FluxFormSelect, FluxFormSelectAsync_default as FluxFormSelectAsync, FluxFormSlider_default as FluxFormSlider, FluxFormTextArea_default as FluxFormTextArea, FluxFormTimeZonePicker_default as FluxFormTimeZonePicker, FluxFormTreeViewSelect_default as FluxFormTreeViewSelect, FluxGallery_default as FluxGallery, FluxGalleryItem_default as FluxGalleryItem, FluxGrid_default as FluxGrid, FluxGridColumn_default as FluxGridColumn, FluxGridPattern_default as FluxGridPattern, FluxIcon_default as FluxIcon, FluxInfo_default as FluxInfo, FluxInfoStack_default as FluxInfoStack, FluxItem_default as FluxItem, FluxItemActions_default as FluxItemActions, FluxItemContent_default as FluxItemContent, FluxItemMedia_default as FluxItemMedia, FluxItemStack_default as FluxItemStack, FluxKanban_default as FluxKanban, FluxKanbanColumn_default as FluxKanbanColumn, FluxKanbanItem_default as FluxKanbanItem, FluxLayerPane_default as FluxLayerPane, FluxLayerPaneSecondary_default as FluxLayerPaneSecondary, FluxLink_default as FluxLink, FluxMenu_default as FluxMenu, FluxMenuCollapsible_default as FluxMenuCollapsible, FluxMenuGroup_default as FluxMenuGroup, FluxMenuItem_default as FluxMenuItem, FluxMenuOptions_default as FluxMenuOptions, FluxMenuSubHeader_default as FluxMenuSubHeader, FluxMenuTitle_default as FluxMenuTitle, FluxNotice_default as FluxNotice, FluxNoticeStack_default as FluxNoticeStack, FluxOverflowBar_default as FluxOverflowBar, FluxOverlay_default as FluxOverlay, FluxOverlayProvider_default as FluxOverlayProvider, FluxOverlayTransition_default as FluxOverlayTransition, FluxPagination_default as FluxPagination, FluxPaginationBar_default as FluxPaginationBar, FluxPane_default as FluxPane, FluxPaneBody_default as FluxPaneBody, FluxPaneFooter_default as FluxPaneFooter, FluxPaneGroup_default as FluxPaneGroup, FluxPaneHeader_default as FluxPaneHeader, FluxPaneIllustration_default as FluxPaneIllustration, FluxPaneMedia_default as FluxPaneMedia, FluxPersona_default as FluxPersona, FluxPlaceholder_default as FluxPlaceholder, FluxPressable_default as FluxPressable, FluxPrimaryButton_default as FluxPrimaryButton, FluxPrimaryLinkButton_default as FluxPrimaryLinkButton, FluxProgressBar_default as FluxProgressBar, FluxPublishButton_default as FluxPublishButton, FluxQuantitySelector_default as FluxQuantitySelector, FluxRemove_default as FluxRemove, FluxRoot_default as FluxRoot, FluxRouteTransition_default as FluxRouteTransition, FluxScroller_default as FluxScroller, FluxSecondaryButton_default as FluxSecondaryButton, FluxSecondaryLinkButton_default as FluxSecondaryLinkButton, FluxSegmentedControl_default as FluxSegmentedControl, FluxSegmentedControlItem_default as FluxSegmentedControlItem, FluxSeparator_default as FluxSeparator, FluxSkeleton_default as FluxSkeleton, FluxSlideOver_default as FluxSlideOver, FluxSlideOverTransition_default as FluxSlideOverTransition, FluxSnackbar_default as FluxSnackbar, FluxSnackbarProvider_default as FluxSnackbarProvider, FluxSpacer_default as FluxSpacer, FluxSpacing_default as FluxSpacing, FluxSpinner_default as FluxSpinner, FluxSplitButton_default as FluxSplitButton, FluxSplitView_default as FluxSplitView, FluxSplitViewPane_default as FluxSplitViewPane, FluxStepper_default as FluxStepper, FluxStepperStep_default as FluxStepperStep, FluxStepperSteps_default as FluxStepperSteps, FluxSticky_default as FluxSticky, FluxTab_default as FluxTab, FluxTabBar_default as FluxTabBar, FluxTabBarItem_default as FluxTabBarItem, FluxTable_default as FluxTable, FluxTableActions_default as FluxTableActions, FluxTableBar_default as FluxTableBar, FluxTableCell_default as FluxTableCell, FluxTableHeader_default as FluxTableHeader, FluxTableRow_default as FluxTableRow, FluxTabs_default as FluxTabs, FluxTag_default as FluxTag, FluxTagStack_default as FluxTagStack, FluxTicks_default as FluxTicks, FluxTimeline_default as FluxTimeline, FluxTimelineItem_default as FluxTimelineItem, FluxToggle_default as FluxToggle, FluxToolbar_default as FluxToolbar, FluxToolbarGroup_default as FluxToolbarGroup, FluxTooltip_default as FluxTooltip, FluxTooltipProvider_default as FluxTooltipProvider, FluxTooltipTransition_default as FluxTooltipTransition, FluxTreeView_default as FluxTreeView, FluxVerticalWindowTransition_default as FluxVerticalWindowTransition, FluxWindow_default as FluxWindow, FluxWindowTransition_default as FluxWindowTransition, defineFilter, fluxRegisterIcons, iconRegistry, isFluxFilterOptionHeader, isFluxFilterOptionItem, isFluxFormSelectGroup, isFluxFormSelectOption, pickFilterCommon, showAlert, showConfirm, showPrompt, showSnackbar, useAdaptiveGroupInjection_default as useAdaptiveGroupInjection, useBreakpoints_default as useBreakpoints, useCalendarInjection_default as useCalendarInjection, useDisabled_default as useDisabled, useDisabledInjection_default as useDisabledInjection, useExpandableGroupInjection_default as useExpandableGroupInjection, useFilterInjection_default as useFilterInjection, useFluxStore, useFlyoutInjection_default as useFlyoutInjection, useFormCheckboxGroupInjection_default as useFormCheckboxGroupInjection, useFormFieldInjection_default as useFormFieldInjection, useFormRadioGroupInjection_default as useFormRadioGroupInjection, useKanbanInjection_default as useKanbanInjection, useSegmentedControlInjection_default as useSegmentedControlInjection, useTabBarInjection_default as useTabBarInjection, useTableInjection_default as useTableInjection, useTooltipInjection_default as useTooltipInjection };
26170
+ export { FluxAction_default as FluxAction, FluxActionBar_default as FluxActionBar, FluxActionPane_default as FluxActionPane, FluxActionStack_default as FluxActionStack, FluxAdaptiveGroup_default as FluxAdaptiveGroup, FluxAdaptiveSlot_default as FluxAdaptiveSlot, FluxAnimatedColors_default as FluxAnimatedColors, FluxAspectRatio_default as FluxAspectRatio, FluxAutoHeightTransition_default as FluxAutoHeightTransition, FluxAutoWidthTransition_default as FluxAutoWidthTransition, FluxAvatar_default as FluxAvatar, FluxAvatarGroup_default as FluxAvatarGroup, FluxBadge_default as FluxBadge, FluxBadgeStack_default as FluxBadgeStack, FluxBorderBeam_default as FluxBorderBeam, FluxBorderShine_default as FluxBorderShine, FluxBoxedIcon_default as FluxBoxedIcon, FluxBreadcrumb_default as FluxBreadcrumb, FluxBreadcrumbItem_default as FluxBreadcrumbItem, FluxBreakthroughTransition_default as FluxBreakthroughTransition, FluxButton_default as FluxButton, FluxButtonGroup_default as FluxButtonGroup, FluxButtonStack_default as FluxButtonStack, FluxCalendar_default as FluxCalendar, FluxCalendarItem_default as FluxCalendarItem, FluxChip_default as FluxChip, FluxClickablePane_default as FluxClickablePane, FluxColorPicker_default as FluxColorPicker, FluxColorSelect_default as FluxColorSelect, FluxCommandPalette_default as FluxCommandPalette, FluxCommandPaletteGroup_default as FluxCommandPaletteGroup, FluxCommandPaletteItem_default as FluxCommandPaletteItem, FluxComment_default as FluxComment, FluxContainer_default as FluxContainer, FluxContextMenu_default as FluxContextMenu, FluxDataTable_default as FluxDataTable, FluxDatePicker_default as FluxDatePicker, FluxDescriptionItem_default as FluxDescriptionItem, FluxDescriptionList_default as FluxDescriptionList, FluxDestructiveButton_default as FluxDestructiveButton, FluxDisabled_default as FluxDisabled, FluxDivider_default as FluxDivider, FluxDotPattern_default as FluxDotPattern, FluxDropZone_default as FluxDropZone, FluxDynamicView_default as FluxDynamicView, FluxExpandable_default as FluxExpandable, FluxExpandableGroup_default as FluxExpandableGroup, FluxFadeTransition_default as FluxFadeTransition, FluxFader_default as FluxFader, FluxFaderItem_default as FluxFaderItem, FluxFilter_default as FluxFilter, FluxFilterBar_default as FluxFilterBar, FluxFilterDate_default as FluxFilterDate, FluxFilterDateRange_default as FluxFilterDateRange, FluxFilterOption_default as FluxFilterOption, FluxFilterOptionAsync_default as FluxFilterOptionAsync, FluxFilterOptions_default as FluxFilterOptions, FluxFilterOptionsAsync_default as FluxFilterOptionsAsync, FluxFilterRange_default as FluxFilterRange, FluxFlex_default as FluxFlex, FluxFlexItem_default as FluxFlexItem, FluxFlickeringGrid_default as FluxFlickeringGrid, FluxFlyout_default as FluxFlyout, FluxFocalPointEditor_default as FluxFocalPointEditor, FluxFocalPointImage_default as FluxFocalPointImage, FluxForm_default as FluxForm, FluxFormCheckbox_default as FluxFormCheckbox, FluxFormCheckboxGroup_default as FluxFormCheckboxGroup, FluxFormColumn_default as FluxFormColumn, FluxFormCombobox_default as FluxFormCombobox, FluxFormDateInput_default as FluxFormDateInput, FluxFormDateRangeInput_default as FluxFormDateRangeInput, FluxFormDateTimeInput_default as FluxFormDateTimeInput, FluxFormField_default as FluxFormField, FluxFormFieldAddition_default as FluxFormFieldAddition, FluxFormGrid_default as FluxFormGrid, FluxFormInput_default as FluxFormInput, FluxFormInputAddition_default as FluxFormInputAddition, FluxFormInputGroup_default as FluxFormInputGroup, FluxFormNumberInput_default as FluxFormNumberInput, FluxFormPinInput_default as FluxFormPinInput, FluxFormRadio_default as FluxFormRadio, FluxFormRadioGroup_default as FluxFormRadioGroup, FluxFormRangeSlider_default as FluxFormRangeSlider, FluxFormRating_default as FluxFormRating, FluxFormRow_default as FluxFormRow, FluxFormSection_default as FluxFormSection, FluxFormSelect_default as FluxFormSelect, FluxFormSelectAsync_default as FluxFormSelectAsync, FluxFormSlider_default as FluxFormSlider, FluxFormTagsInput_default as FluxFormTagsInput, FluxFormTextArea_default as FluxFormTextArea, FluxFormTimeZonePicker_default as FluxFormTimeZonePicker, FluxFormTreeViewSelect_default as FluxFormTreeViewSelect, FluxGallery_default as FluxGallery, FluxGalleryItem_default as FluxGalleryItem, FluxGrid_default as FluxGrid, FluxGridColumn_default as FluxGridColumn, FluxGridPattern_default as FluxGridPattern, FluxIcon_default as FluxIcon, FluxInfo_default as FluxInfo, FluxInfoStack_default as FluxInfoStack, FluxInlineEdit_default as FluxInlineEdit, FluxItem_default as FluxItem, FluxItemActions_default as FluxItemActions, FluxItemContent_default as FluxItemContent, FluxItemMedia_default as FluxItemMedia, FluxItemStack_default as FluxItemStack, FluxKanban_default as FluxKanban, FluxKanbanColumn_default as FluxKanbanColumn, FluxKanbanItem_default as FluxKanbanItem, FluxLayerPane_default as FluxLayerPane, FluxLayerPaneSecondary_default as FluxLayerPaneSecondary, FluxLink_default as FluxLink, FluxMenu_default as FluxMenu, FluxMenuCollapsible_default as FluxMenuCollapsible, FluxMenuFlyout_default as FluxMenuFlyout, FluxMenuGroup_default as FluxMenuGroup, FluxMenuItem_default as FluxMenuItem, FluxMenuOptions_default as FluxMenuOptions, FluxMenuSubHeader_default as FluxMenuSubHeader, FluxMenuTitle_default as FluxMenuTitle, FluxNotice_default as FluxNotice, FluxNoticeStack_default as FluxNoticeStack, FluxOverflowBar_default as FluxOverflowBar, FluxOverlay_default as FluxOverlay, FluxOverlayProvider_default as FluxOverlayProvider, FluxOverlayTransition_default as FluxOverlayTransition, FluxPagination_default as FluxPagination, FluxPaginationBar_default as FluxPaginationBar, FluxPane_default as FluxPane, FluxPaneBody_default as FluxPaneBody, FluxPaneFooter_default as FluxPaneFooter, FluxPaneGroup_default as FluxPaneGroup, FluxPaneHeader_default as FluxPaneHeader, FluxPaneIllustration_default as FluxPaneIllustration, FluxPaneMedia_default as FluxPaneMedia, FluxPersona_default as FluxPersona, FluxPlaceholder_default as FluxPlaceholder, FluxPressable_default as FluxPressable, FluxPrimaryButton_default as FluxPrimaryButton, FluxPrimaryLinkButton_default as FluxPrimaryLinkButton, FluxProgressBar_default as FluxProgressBar, FluxPublishButton_default as FluxPublishButton, FluxQuantitySelector_default as FluxQuantitySelector, FluxRemove_default as FluxRemove, FluxRoot_default as FluxRoot, FluxRouteTransition_default as FluxRouteTransition, FluxScroller_default as FluxScroller, FluxSecondaryButton_default as FluxSecondaryButton, FluxSecondaryLinkButton_default as FluxSecondaryLinkButton, FluxSegmentedControl_default as FluxSegmentedControl, FluxSegmentedControlItem_default as FluxSegmentedControlItem, FluxSeparator_default as FluxSeparator, FluxSkeleton_default as FluxSkeleton, FluxSlideOver_default as FluxSlideOver, FluxSlideOverTransition_default as FluxSlideOverTransition, FluxSnackbar_default as FluxSnackbar, FluxSnackbarProvider_default as FluxSnackbarProvider, FluxSpacer_default as FluxSpacer, FluxSpacing_default as FluxSpacing, FluxSpinner_default as FluxSpinner, FluxSplitButton_default as FluxSplitButton, FluxSplitView_default as FluxSplitView, FluxSplitViewPane_default as FluxSplitViewPane, FluxStepper_default as FluxStepper, FluxStepperStep_default as FluxStepperStep, FluxStepperSteps_default as FluxStepperSteps, FluxSticky_default as FluxSticky, FluxTab_default as FluxTab, FluxTabBar_default as FluxTabBar, FluxTabBarItem_default as FluxTabBarItem, FluxTable_default as FluxTable, FluxTableActions_default as FluxTableActions, FluxTableBar_default as FluxTableBar, FluxTableCell_default as FluxTableCell, FluxTableHeader_default as FluxTableHeader, FluxTableRow_default as FluxTableRow, FluxTabs_default as FluxTabs, FluxTag_default as FluxTag, FluxTagStack_default as FluxTagStack, FluxTicks_default as FluxTicks, FluxTimeline_default as FluxTimeline, FluxTimelineItem_default as FluxTimelineItem, FluxToggle_default as FluxToggle, FluxToolbar_default as FluxToolbar, FluxToolbarGroup_default as FluxToolbarGroup, FluxTooltip_default as FluxTooltip, FluxTooltipProvider_default as FluxTooltipProvider, FluxTooltipTransition_default as FluxTooltipTransition, FluxTour_default as FluxTour, FluxTourItem_default as FluxTourItem, FluxTreeView_default as FluxTreeView, FluxVerticalWindowTransition_default as FluxVerticalWindowTransition, FluxVirtualScroller_default as FluxVirtualScroller, FluxWindow_default as FluxWindow, FluxWindowTransition_default as FluxWindowTransition, defineFilter, fluxRegisterIcons, iconRegistry, isFluxFilterOptionHeader, isFluxFilterOptionItem, isFluxFormSelectGroup, isFluxFormSelectOption, pickFilterCommon, showAlert, showConfirm, showPrompt, showSnackbar, useAdaptiveGroupInjection_default as useAdaptiveGroupInjection, useBreakpoints_default as useBreakpoints, useCalendarInjection_default as useCalendarInjection, useDisabled_default as useDisabled, useDisabledInjection_default as useDisabledInjection, useExpandableGroupInjection_default as useExpandableGroupInjection, useFilterInjection_default as useFilterInjection, useFluxStore, useFlyoutInjection_default as useFlyoutInjection, useFormCheckboxGroupInjection_default as useFormCheckboxGroupInjection, useFormFieldInjection_default as useFormFieldInjection, useFormRadioGroupInjection_default as useFormRadioGroupInjection, useKanbanInjection_default as useKanbanInjection, useSegmentedControlInjection_default as useSegmentedControlInjection, useTabBarInjection_default as useTabBarInjection, useTableInjection_default as useTableInjection, useTooltipInjection_default as useTooltipInjection };
24560
26171
 
24561
26172
  //# sourceMappingURL=index.js.map