@flux-ui/components 3.1.2 → 3.1.4

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 (72) hide show
  1. package/dist/component/FluxAvatarGroup.vue.d.ts +17 -0
  2. package/dist/component/FluxButton.vue.d.ts +2 -0
  3. package/dist/component/FluxContextMenu.vue.d.ts +26 -0
  4. package/dist/component/FluxDataTable.vue.d.ts +20 -10
  5. package/dist/component/FluxDescriptionItem.vue.d.ts +19 -0
  6. package/dist/component/FluxDescriptionList.vue.d.ts +17 -0
  7. package/dist/component/FluxFlyout.vue.d.ts +9 -2
  8. package/dist/component/FluxFormCombobox.vue.d.ts +20 -0
  9. package/dist/component/FluxFormRating.vue.d.ts +21 -0
  10. package/dist/component/FluxFormTagsInput.vue.d.ts +27 -0
  11. package/dist/component/FluxFormTextArea.vue.d.ts +6 -1
  12. package/dist/component/FluxInlineEdit.vue.d.ts +41 -0
  13. package/dist/component/FluxMenu.vue.d.ts +1 -0
  14. package/dist/component/FluxMenuFlyout.vue.d.ts +22 -0
  15. package/dist/component/FluxTableCell.vue.d.ts +1 -0
  16. package/dist/component/FluxTour.vue.d.ts +35 -0
  17. package/dist/component/FluxTourItem.vue.d.ts +18 -0
  18. package/dist/component/FluxVirtualScroller.vue.d.ts +27 -0
  19. package/dist/component/index.d.ts +12 -0
  20. package/dist/component/primitive/AnchorPopup.vue.d.ts +7 -1
  21. package/dist/component/primitive/SelectBase.vue.d.ts +3 -0
  22. package/dist/composable/private/index.d.ts +1 -0
  23. package/dist/composable/private/useMenuFlyout.d.ts +42 -0
  24. package/dist/data/di.d.ts +35 -0
  25. package/dist/data/i18n.d.ts +7 -0
  26. package/dist/index.css +449 -5
  27. package/dist/index.js +2156 -408
  28. package/dist/index.js.map +1 -1
  29. package/package.json +7 -7
  30. package/src/component/FluxAvatarGroup.vue +52 -0
  31. package/src/component/FluxButton.vue +3 -0
  32. package/src/component/FluxContextMenu.vue +134 -0
  33. package/src/component/FluxDataTable.vue +113 -32
  34. package/src/component/FluxDescriptionItem.vue +43 -0
  35. package/src/component/FluxDescriptionList.vue +37 -0
  36. package/src/component/FluxDestructiveButton.vue +2 -1
  37. package/src/component/FluxFlyout.vue +16 -3
  38. package/src/component/FluxFormCombobox.vue +98 -0
  39. package/src/component/FluxFormRating.vue +172 -0
  40. package/src/component/FluxFormTagsInput.vue +249 -0
  41. package/src/component/FluxFormTextArea.vue +16 -1
  42. package/src/component/FluxInlineEdit.vue +176 -0
  43. package/src/component/FluxMenu.vue +13 -3
  44. package/src/component/FluxMenuFlyout.vue +118 -0
  45. package/src/component/FluxPrimaryButton.vue +2 -1
  46. package/src/component/FluxPrimaryLinkButton.vue +2 -1
  47. package/src/component/FluxPublishButton.vue +2 -1
  48. package/src/component/FluxSecondaryButton.vue +2 -1
  49. package/src/component/FluxSecondaryLinkButton.vue +2 -1
  50. package/src/component/FluxTableCell.vue +2 -0
  51. package/src/component/FluxTour.vue +332 -0
  52. package/src/component/FluxTourItem.vue +27 -0
  53. package/src/component/FluxVirtualScroller.vue +96 -0
  54. package/src/component/index.ts +12 -0
  55. package/src/component/primitive/AnchorPopup.vue +27 -0
  56. package/src/component/primitive/SelectBase.vue +37 -2
  57. package/src/composable/private/index.ts +1 -0
  58. package/src/composable/private/useMenuFlyout.ts +417 -0
  59. package/src/css/component/AvatarGroup.module.scss +22 -0
  60. package/src/css/component/ContextMenu.module.scss +17 -0
  61. package/src/css/component/DescriptionList.module.scss +98 -0
  62. package/src/css/component/Form.module.scss +51 -0
  63. package/src/css/component/FormRating.module.scss +47 -0
  64. package/src/css/component/InlineEdit.module.scss +45 -0
  65. package/src/css/component/Menu.module.scss +4 -1
  66. package/src/css/component/MenuFlyout.module.scss +38 -0
  67. package/src/css/component/Table.module.scss +16 -0
  68. package/src/css/component/Tour.module.scss +108 -0
  69. package/src/css/component/VirtualScroller.module.scss +17 -0
  70. package/src/css/mixin/button-active.scss +3 -1
  71. package/src/data/di.ts +40 -0
  72. 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
  }
@@ -2615,7 +2623,7 @@ function W$1(e, t, n) {
2615
2623
  function G$2(e, t, n) {
2616
2624
  e.prototype[t] = n;
2617
2625
  }
2618
- function K$1(e, t, n) {
2626
+ function K$2(e, t, n) {
2619
2627
  Object.defineProperty(e, t, { value: n });
2620
2628
  }
2621
2629
  //#endregion
@@ -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) {
@@ -7017,10 +7025,10 @@ function dto_default(clazz) {
7017
7025
  validate(clazz);
7018
7026
  const descriptors = Object.freeze(x$3(clazz));
7019
7027
  const properties = Object.keys(descriptors);
7020
- K$1(clazz.prototype, DESCRIPTORS, descriptors);
7021
- K$1(clazz.prototype, NAME, clazz.name);
7022
- K$1(clazz.prototype, PROPERTIES, properties);
7023
- K$1(clazz, Symbol.hasInstance, (instance) => typeof instance === "object" && instance?.[NAME] === clazz.name);
7028
+ K$2(clazz.prototype, DESCRIPTORS, descriptors);
7029
+ K$2(clazz.prototype, NAME, clazz.name);
7030
+ K$2(clazz.prototype, PROPERTIES, properties);
7031
+ K$2(clazz, Symbol.hasInstance, (instance) => typeof instance === "object" && instance?.[NAME] === clazz.name);
7024
7032
  G$2(clazz, "clone", clone_default);
7025
7033
  G$2(clazz, "fill", fill_default);
7026
7034
  G$2(clazz, "toJSON", toJSON_default);
@@ -7175,6 +7183,10 @@ function G$1(e) {
7175
7183
  let t = unref(e);
7176
7184
  return t ? R$2(t) ? t : t.$el ?? null : null;
7177
7185
  }
7186
+ function K$1(e) {
7187
+ let t = toValue(e);
7188
+ return t ? t instanceof Window || t instanceof Document || R$2(t) ? t : t.$el ?? null : null;
7189
+ }
7178
7190
  function q$1(e, t, n) {
7179
7191
  let r = ref([]);
7180
7192
  onMounted(() => {
@@ -7227,7 +7239,101 @@ function Y$1(t = 0, n = !1) {
7227
7239
  loaded: o
7228
7240
  };
7229
7241
  }
7230
- function me$1(e, t) {
7242
+ function Z$1(e, t, n, r) {
7243
+ let i = Array.isArray(t) ? t : [t], a, o = watch(() => K$1(e), (e) => {
7244
+ if (a?.(), a = void 0, e) {
7245
+ for (let t of i) e.addEventListener(t, n, r);
7246
+ a = () => {
7247
+ for (let t of i) e.removeEventListener(t, n, r);
7248
+ };
7249
+ }
7250
+ }, { immediate: !0 });
7251
+ function c() {
7252
+ a?.(), a = void 0, o();
7253
+ }
7254
+ return onScopeDispose(c), c;
7255
+ }
7256
+ var me$1 = {
7257
+ esc: `escape`,
7258
+ space: ` `,
7259
+ spacebar: ` `,
7260
+ up: `arrowup`,
7261
+ down: `arrowdown`,
7262
+ left: `arrowleft`,
7263
+ right: `arrowright`,
7264
+ return: `enter`,
7265
+ del: `delete`,
7266
+ plus: `+`
7267
+ };
7268
+ function he$1(e, t, n) {
7269
+ let { target: r, enabled: i, event: a = `keydown`, preventDefault: o = !0, stopPropagation: s = !1, ignoreWhileTyping: c = !0, repeat: l = !1 } = n ?? {}, u = (Array.isArray(e) ? e : [e]).map(ge$1);
7270
+ function d() {
7271
+ return r === void 0 ? typeof window < `u` ? window : null : toValue(r);
7272
+ }
7273
+ function p(e) {
7274
+ if (i !== void 0 && !toValue(i) || e.repeat && !l) return;
7275
+ let n = ve$1(), r = e.key.toLowerCase();
7276
+ for (let i of u) {
7277
+ let a = i.meta || i.mod && n, l = i.ctrl || i.mod && !n, u = !i.shift && i.key.length === 1;
7278
+ if (e.metaKey === a && e.ctrlKey === l && (u || e.shiftKey === i.shift) && e.altKey === i.alt && r === i.key) {
7279
+ if (c && !a && !l && _e$1(e.target)) return;
7280
+ o && e.preventDefault(), s && e.stopPropagation(), t(e);
7281
+ return;
7282
+ }
7283
+ }
7284
+ }
7285
+ return Z$1(d, a, p);
7286
+ }
7287
+ function ge$1(e) {
7288
+ let t = ``, n = !1, r = !1, i = !1, a = !1, o = !1;
7289
+ for (let s of e.split(`+`)) {
7290
+ let e = s.trim().toLowerCase();
7291
+ switch (e) {
7292
+ case `ctrl`:
7293
+ case `control`:
7294
+ n = !0;
7295
+ break;
7296
+ case `meta`:
7297
+ case `cmd`:
7298
+ case `command`:
7299
+ case `super`:
7300
+ case `win`:
7301
+ case `windows`:
7302
+ r = !0;
7303
+ break;
7304
+ case `shift`:
7305
+ i = !0;
7306
+ break;
7307
+ case `alt`:
7308
+ case `option`:
7309
+ case `opt`:
7310
+ a = !0;
7311
+ break;
7312
+ case `mod`:
7313
+ o = !0;
7314
+ break;
7315
+ case ``: break;
7316
+ default:
7317
+ t = me$1[e] ?? e;
7318
+ break;
7319
+ }
7320
+ }
7321
+ return {
7322
+ key: t,
7323
+ ctrl: n,
7324
+ meta: r,
7325
+ shift: i,
7326
+ alt: a,
7327
+ mod: o
7328
+ };
7329
+ }
7330
+ function _e$1(e) {
7331
+ return e instanceof HTMLElement ? e.tagName === `INPUT` || e.tagName === `TEXTAREA` || e.tagName === `SELECT` || e.isContentEditable : !1;
7332
+ }
7333
+ function ve$1() {
7334
+ return typeof navigator > `u` ? !1 : /mac|iphone|ipod|ipad/i.test(navigator.platform || navigator.userAgent);
7335
+ }
7336
+ function ye$1(e, t) {
7231
7337
  let n = ref();
7232
7338
  onMounted(() => {
7233
7339
  i();
@@ -7241,7 +7347,7 @@ function me$1(e, t) {
7241
7347
  r(), t();
7242
7348
  }
7243
7349
  }
7244
- function ye$1(e, t, n) {
7350
+ function we$1(e, t, n) {
7245
7351
  n ??= { attributes: !0 };
7246
7352
  let r, i = watch(e, (e) => {
7247
7353
  a();
@@ -7257,7 +7363,7 @@ function ye$1(e, t, n) {
7257
7363
  onScopeDispose(o);
7258
7364
  }
7259
7365
  RegExp(`[a-z]`), RegExp(`[A-Z]`), RegExp(`[0-9]`), RegExp(`[!"#$%&'()*+,-./:;<=>?@[\\\\\\]^_\`{|}~]`);
7260
- function Ce$1(e, t, n) {
7366
+ function Oe$1(e, t, n) {
7261
7367
  n ??= {};
7262
7368
  let r, i = watch(e, (e) => {
7263
7369
  a();
@@ -7592,7 +7698,7 @@ function I$1(t, n = {}) {
7592
7698
  }, { immediate: !0 });
7593
7699
  }
7594
7700
  function R$1(e, { cycle: t = !0, direction: n = `bidirectional` } = {}) {
7595
- ye$1(e, () => o(r(), !1), {
7701
+ we$1(e, () => o(r(), !1), {
7596
7702
  childList: !0,
7597
7703
  subtree: !0
7598
7704
  });
@@ -7698,29 +7804,29 @@ var Pane_module_default$1 = {
7698
7804
  };
7699
7805
  //#endregion
7700
7806
  //#region src/css/component/Icon.module.scss
7701
- var { "basePane": _0$16 } = Pane_module_default$1;
7807
+ var { "basePane": _0$18 } = Pane_module_default$1;
7702
7808
  var Icon_module_default = {
7703
7809
  icon: `icon`,
7704
7810
  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}`
7811
+ iconBoxed: `icon-boxed ${_0$18}`,
7812
+ iconBoxedDefault: `icon-boxed-default icon-boxed ${_0$18}`,
7813
+ iconBoxedColored: `icon-boxed-colored icon-boxed ${_0$18}`,
7814
+ iconBoxedGray: `icon-boxed-gray icon-boxed-colored icon-boxed ${_0$18}`,
7815
+ iconBoxedPrimary: `icon-boxed-primary icon-boxed-colored icon-boxed ${_0$18}`,
7816
+ iconBoxedDanger: `icon-boxed-danger icon-boxed-colored icon-boxed ${_0$18}`,
7817
+ iconBoxedInfo: `icon-boxed-info icon-boxed-colored icon-boxed ${_0$18}`,
7818
+ iconBoxedSuccess: `icon-boxed-success icon-boxed-colored icon-boxed ${_0$18}`,
7819
+ iconBoxedWarning: `icon-boxed-warning icon-boxed-colored icon-boxed ${_0$18}`
7714
7820
  };
7715
7821
  //#endregion
7716
7822
  //#region src/component/FluxIcon.vue?vue&type=script&setup=true&lang.ts
7717
- var _hoisted_1$67 = [
7823
+ var _hoisted_1$72 = [
7718
7824
  "viewBox",
7719
7825
  "role",
7720
7826
  "aria-hidden",
7721
7827
  "aria-label"
7722
7828
  ];
7723
- var _hoisted_2$26 = ["d"];
7829
+ var _hoisted_2$28 = ["d"];
7724
7830
  //#endregion
7725
7831
  //#region src/component/FluxIcon.vue
7726
7832
  var FluxIcon_default = /* @__PURE__ */ defineComponent({
@@ -7766,8 +7872,8 @@ var FluxIcon_default = /* @__PURE__ */ defineComponent({
7766
7872
  return openBlock(), createElementBlock("path", {
7767
7873
  d: path,
7768
7874
  fill: "currentColor"
7769
- }, null, 8, _hoisted_2$26);
7770
- }), 256))], 14, _hoisted_1$67)) : (openBlock(), createElementBlock("i", {
7875
+ }, null, 8, _hoisted_2$28);
7876
+ }), 256))], 14, _hoisted_1$72)) : (openBlock(), createElementBlock("i", {
7771
7877
  key: 1,
7772
7878
  class: normalizeClass(unref(Icon_module_default).icon)
7773
7879
  }, null, 2));
@@ -8702,6 +8808,266 @@ function useKanban(options) {
8702
8808
  };
8703
8809
  }
8704
8810
  //#endregion
8811
+ //#region src/composable/private/useMenuFlyout.ts
8812
+ var flyoutId = 0;
8813
+ /**
8814
+ * Creates and provides the shared menu-flyout context for an entire open menu tree. Used by the
8815
+ * outermost menu surface (FluxContextMenu, or a standalone root FluxMenu). Tracks the pointer, the
8816
+ * active prediction cone, the keyboard-trap stack and the set of teleported flyout popups so that
8817
+ * click-outside and close-all can reason about the whole tree.
8818
+ */
8819
+ function useMenuFlyoutProvider(options) {
8820
+ const { debugCone, onCloseAll } = options;
8821
+ const entries = /* @__PURE__ */ new Set();
8822
+ const pointer = ref({
8823
+ x: 0,
8824
+ y: 0,
8825
+ px: 0,
8826
+ py: 0
8827
+ });
8828
+ const activeCone = ref(null);
8829
+ const keyboardStack = ref([]);
8830
+ let pointerX = 0;
8831
+ let pointerY = 0;
8832
+ const flushPointer = i$2(() => {
8833
+ const previous = pointer.value;
8834
+ pointer.value = {
8835
+ x: pointerX,
8836
+ y: pointerY,
8837
+ px: previous.x,
8838
+ py: previous.y
8839
+ };
8840
+ });
8841
+ function onPointerMove(evt) {
8842
+ pointerX = evt.clientX;
8843
+ pointerY = evt.clientY;
8844
+ flushPointer();
8845
+ }
8846
+ function startTracking() {
8847
+ if (C$2) return;
8848
+ window.addEventListener("pointermove", onPointerMove, {
8849
+ capture: true,
8850
+ passive: true
8851
+ });
8852
+ }
8853
+ function stopTracking() {
8854
+ if (C$2) return;
8855
+ window.removeEventListener("pointermove", onPointerMove, { capture: true });
8856
+ }
8857
+ const context = {
8858
+ debugCone,
8859
+ pointer,
8860
+ activeCone,
8861
+ keyboardStack,
8862
+ register(entry) {
8863
+ if (entries.size === 0) startTracking();
8864
+ entries.add(entry);
8865
+ },
8866
+ unregister(entry) {
8867
+ entries.delete(entry);
8868
+ if (entries.size === 0) {
8869
+ stopTracking();
8870
+ activeCone.value = null;
8871
+ }
8872
+ },
8873
+ closeOthers(self) {
8874
+ const trigger = self.getTrigger();
8875
+ for (const entry of entries) {
8876
+ if (entry === self || !entry.isOpen.value) continue;
8877
+ const popup = entry.getPopup();
8878
+ if (popup && trigger && popup.contains(trigger)) continue;
8879
+ entry.close();
8880
+ }
8881
+ },
8882
+ hasOpenDescendant(self) {
8883
+ const popup = self.getPopup();
8884
+ if (!popup) return false;
8885
+ for (const entry of entries) {
8886
+ if (entry === self || !entry.isOpen.value) continue;
8887
+ const trigger = entry.getTrigger();
8888
+ if (trigger && popup.contains(trigger)) return true;
8889
+ }
8890
+ return false;
8891
+ },
8892
+ isAimingAtOpenSubmenu() {
8893
+ const { x, y, px, py } = pointer.value;
8894
+ for (const entry of entries) {
8895
+ if (!entry.isOpen.value) continue;
8896
+ const trigger = entry.getTrigger();
8897
+ const popup = entry.getPopup();
8898
+ if (!trigger || !popup) continue;
8899
+ const t = trigger.getBoundingClientRect();
8900
+ const r = popup.getBoundingClientRect();
8901
+ const edgeX = r.left >= t.right ? r.left : r.right <= t.left ? r.right : r.left;
8902
+ if (pointInTriangle(x, y, px, py, edgeX, r.top, edgeX, r.bottom)) return true;
8903
+ }
8904
+ return false;
8905
+ },
8906
+ isInsidePopups(target) {
8907
+ if (!target) return false;
8908
+ for (const entry of entries) {
8909
+ const popup = entry.getPopup();
8910
+ if (popup && popup.contains(target)) return true;
8911
+ }
8912
+ return false;
8913
+ },
8914
+ closeAll() {
8915
+ if (onCloseAll) {
8916
+ onCloseAll();
8917
+ return;
8918
+ }
8919
+ for (const entry of entries) entry.close();
8920
+ }
8921
+ };
8922
+ onUnmounted(stopTracking);
8923
+ provide(FluxMenuFlyoutInjectionKey, context);
8924
+ return context;
8925
+ }
8926
+ /**
8927
+ * Returns the shared menu-flyout context, creating (and providing) a new root context when none
8928
+ * exists higher up the tree. Used by FluxMenu so that a standalone menu becomes the root while a
8929
+ * menu nested inside a FluxContextMenu or another flyout inherits the existing context.
8930
+ */
8931
+ function useMenuFlyoutContext(options) {
8932
+ const parent = inject(FluxMenuFlyoutInjectionKey, null);
8933
+ if (parent) return parent;
8934
+ return useMenuFlyoutProvider(options);
8935
+ }
8936
+ /**
8937
+ * Per-flyout open/close and prediction-cone behaviour for FluxMenuFlyout. Submenus open instantly
8938
+ * on hover and close instantly once the pointer is neither over the trigger/popup (or an open
8939
+ * descendant) nor aiming at the submenu through the prediction cone (the safe triangle). There are
8940
+ * no open/close delays — the cone is the only thing that keeps a submenu open during a diagonal
8941
+ * move, which is also why the debug cone only shows while it actually applies.
8942
+ */
8943
+ function useMenuFlyout(options) {
8944
+ const { triggerRef, popupRef, disabled } = options;
8945
+ const context = inject(FluxMenuFlyoutInjectionKey, null);
8946
+ const id = ++flyoutId;
8947
+ const isOpen = ref(false);
8948
+ const openSource = ref("pointer");
8949
+ const cone = ref(null);
8950
+ const entry = {
8951
+ getTrigger: () => elementOf(triggerRef.value),
8952
+ getPopup: () => elementOf(popupRef.value),
8953
+ isOpen,
8954
+ close: () => doClose()
8955
+ };
8956
+ function open(source) {
8957
+ if (disabled?.value) return;
8958
+ openSource.value = source;
8959
+ if (context && source === "keyboard" && !context.keyboardStack.value.includes(id)) context.keyboardStack.value = [...context.keyboardStack.value, id];
8960
+ if (!isOpen.value) {
8961
+ isOpen.value = true;
8962
+ context?.closeOthers(entry);
8963
+ }
8964
+ if (source === "keyboard") nextTick(focusFirstItem);
8965
+ }
8966
+ function doClose() {
8967
+ if (!isOpen.value) return;
8968
+ isOpen.value = false;
8969
+ cone.value = null;
8970
+ if (context) {
8971
+ if (context.activeCone.value?.id === id) context.activeCone.value = null;
8972
+ context.keyboardStack.value = context.keyboardStack.value.filter((value) => value !== id);
8973
+ }
8974
+ }
8975
+ function focusTrigger() {
8976
+ elementOf(triggerRef.value)?.focus();
8977
+ }
8978
+ function focusFirstItem() {
8979
+ const popup = elementOf(popupRef.value);
8980
+ if (!popup) return;
8981
+ (popup.querySelector("[tabindex=\"0\"]") ?? popup.querySelector("a[href], button:not([disabled])"))?.focus();
8982
+ }
8983
+ function onTriggerClick(evt) {
8984
+ evt.stopPropagation();
8985
+ open(evt.detail === 0 ? "keyboard" : "pointer");
8986
+ }
8987
+ function onTriggerKeydown(evt) {
8988
+ if (evt.key === "ArrowRight") {
8989
+ evt.preventDefault();
8990
+ evt.stopPropagation();
8991
+ open("keyboard");
8992
+ }
8993
+ }
8994
+ function onPopupKeydown(evt) {
8995
+ if (evt.key === "ArrowLeft" || evt.key === "Escape") {
8996
+ evt.preventDefault();
8997
+ evt.stopPropagation();
8998
+ doClose();
8999
+ focusTrigger();
9000
+ }
9001
+ }
9002
+ if (context && !C$2) watch(context.pointer, () => {
9003
+ const trigger = elementOf(triggerRef.value);
9004
+ if (!trigger) return;
9005
+ const { x, y, px, py } = context.pointer.value;
9006
+ const t = trigger.getBoundingClientRect();
9007
+ const overTrigger = x >= t.left && x <= t.right && y >= t.top && y <= t.bottom;
9008
+ if (!isOpen.value) {
9009
+ if (overTrigger && !context.isAimingAtOpenSubmenu()) open("pointer");
9010
+ return;
9011
+ }
9012
+ const popup = elementOf(popupRef.value);
9013
+ if (!popup) return;
9014
+ const r = popup.getBoundingClientRect();
9015
+ const overPopup = x >= r.left && x <= r.right && y >= r.top && y <= r.bottom;
9016
+ if (overTrigger || overPopup || context.hasOpenDescendant(entry)) {
9017
+ cone.value = null;
9018
+ if (context.activeCone.value?.id === id) context.activeCone.value = null;
9019
+ return;
9020
+ }
9021
+ const edgeX = r.left >= t.right ? r.left : r.right <= t.left ? r.right : r.left;
9022
+ const candidate = {
9023
+ id,
9024
+ ax: x,
9025
+ ay: y,
9026
+ bx: edgeX,
9027
+ by: r.top,
9028
+ cx: edgeX,
9029
+ cy: r.bottom
9030
+ };
9031
+ if (pointInTriangle(x, y, px, py, edgeX, r.top, edgeX, r.bottom)) {
9032
+ cone.value = candidate;
9033
+ context.activeCone.value = candidate;
9034
+ } else {
9035
+ cone.value = null;
9036
+ if (context.activeCone.value?.id === id) context.activeCone.value = null;
9037
+ doClose();
9038
+ }
9039
+ });
9040
+ onMounted(() => context?.register(entry));
9041
+ onUnmounted(() => {
9042
+ doClose();
9043
+ context?.unregister(entry);
9044
+ });
9045
+ return {
9046
+ context,
9047
+ cone,
9048
+ isOpen,
9049
+ closeAll: () => context?.closeAll(),
9050
+ focusTrigger,
9051
+ onPopupKeydown,
9052
+ onTriggerClick,
9053
+ onTriggerKeydown
9054
+ };
9055
+ }
9056
+ function elementOf(value) {
9057
+ if (!value) return null;
9058
+ if (value instanceof HTMLElement) return value;
9059
+ return value.$el ?? null;
9060
+ }
9061
+ function pointInTriangle(px, py, ax, ay, bx, by, cx, cy) {
9062
+ const d1 = sign(px, py, ax, ay, bx, by);
9063
+ const d2 = sign(px, py, bx, by, cx, cy);
9064
+ const d3 = sign(px, py, cx, cy, ax, ay);
9065
+ return !((d1 < 0 || d2 < 0 || d3 < 0) && (d1 > 0 || d2 > 0 || d3 > 0));
9066
+ }
9067
+ function sign(px, py, ax, ay, bx, by) {
9068
+ return (px - bx) * (ay - by) - (ax - bx) * (py - by);
9069
+ }
9070
+ //#endregion
8705
9071
  //#region src/composable/private/useSplitView.ts
8706
9072
  var HANDLE_SIZE = 6;
8707
9073
  var KEY_STEP = 16;
@@ -9383,13 +9749,13 @@ function sanitizeUrl_default(href) {
9383
9749
  }
9384
9750
  //#endregion
9385
9751
  //#region src/component/FluxPressable.vue?vue&type=script&setup=true&lang.ts
9386
- var _hoisted_1$66 = [
9752
+ var _hoisted_1$71 = [
9387
9753
  "href",
9388
9754
  "rel",
9389
9755
  "target",
9390
9756
  "onClick"
9391
9757
  ];
9392
- var _hoisted_2$25 = [
9758
+ var _hoisted_2$27 = [
9393
9759
  "href",
9394
9760
  "rel",
9395
9761
  "target"
@@ -9437,14 +9803,14 @@ var FluxPressable_default = /* @__PURE__ */ defineComponent({
9437
9803
  rel: resolvedRel.value,
9438
9804
  target: __props.target,
9439
9805
  onClick: ($event) => onClick($event, navigate)
9440
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$66)]),
9806
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$71)]),
9441
9807
  _: 3
9442
9808
  }, 8, ["to"])) : __props.componentType === "link" ? (openBlock(), createElementBlock("a", mergeProps({ key: 1 }, $attrs, toHandlers(hoverListeners, true), {
9443
9809
  href: unref(sanitizeUrl_default)(__props.href),
9444
9810
  rel: resolvedRel.value,
9445
9811
  target: __props.target,
9446
9812
  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));
9813
+ }), [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
9814
  };
9449
9815
  }
9450
9816
  });
@@ -9531,6 +9897,7 @@ var FluxButton_default = /* @__PURE__ */ defineComponent({
9531
9897
  disabled: { type: Boolean },
9532
9898
  iconLeading: {},
9533
9899
  iconTrailing: {},
9900
+ isActive: { type: Boolean },
9534
9901
  isFilled: { type: Boolean },
9535
9902
  isLoading: { type: Boolean },
9536
9903
  isSubmit: { type: Boolean },
@@ -9542,6 +9909,7 @@ var FluxButton_default = /* @__PURE__ */ defineComponent({
9542
9909
  target: {},
9543
9910
  to: {},
9544
9911
  cssClass: {},
9912
+ cssClassActive: {},
9545
9913
  cssClassIcon: {},
9546
9914
  cssClassLabel: {}
9547
9915
  },
@@ -9570,9 +9938,10 @@ var FluxButton_default = /* @__PURE__ */ defineComponent({
9570
9938
  return (_ctx, _cache) => {
9571
9939
  return openBlock(), createBlock(FluxPressable_default, {
9572
9940
  "component-type": __props.type,
9573
- class: normalizeClass(unref(clsx)(__props.cssClass, __props.isFilled && unref(Button_module_default$1).isFilled, __props.size === "small" && unref(Button_module_default$1).isSmall, __props.size === "medium" && unref(Button_module_default$1).isMedium, __props.size === "large" && unref(Button_module_default$1).isLarge, __props.size === "xl" && unref(Button_module_default$1).isXl)),
9941
+ class: normalizeClass(unref(clsx)(__props.cssClass, __props.isActive && __props.cssClassActive, __props.isFilled && unref(Button_module_default$1).isFilled, __props.size === "small" && unref(Button_module_default$1).isSmall, __props.size === "medium" && unref(Button_module_default$1).isMedium, __props.size === "large" && unref(Button_module_default$1).isLarge, __props.size === "xl" && unref(Button_module_default$1).isXl)),
9574
9942
  type: __props.isSubmit ? "submit" : "button",
9575
9943
  "aria-disabled": unref(disabled) ? true : void 0,
9944
+ "aria-pressed": __props.isActive && __props.type === "button" ? true : void 0,
9576
9945
  disabled: unref(disabled) ? true : void 0,
9577
9946
  tabindex: unref(disabled) ? -1 : __props.tabindex,
9578
9947
  href: __props.href,
@@ -9613,6 +9982,7 @@ var FluxButton_default = /* @__PURE__ */ defineComponent({
9613
9982
  "class",
9614
9983
  "type",
9615
9984
  "aria-disabled",
9985
+ "aria-pressed",
9616
9986
  "disabled",
9617
9987
  "tabindex",
9618
9988
  "href",
@@ -9625,13 +9995,13 @@ var FluxButton_default = /* @__PURE__ */ defineComponent({
9625
9995
  });
9626
9996
  //#endregion
9627
9997
  //#region src/css/component/Action.module.scss
9628
- var { "button": _0$15, "buttonLabel": _1$6, "buttonIcon": _2$5 } = Button_module_default$1;
9998
+ var { "button": _0$17, "buttonIcon": _1$6, "buttonLabel": _2$5 } = Button_module_default$1;
9629
9999
  var Action_module_default = {
9630
- action: `action ${_0$15}`,
10000
+ action: `action ${_0$17}`,
9631
10001
  spinner: `spinner`,
9632
- actionIcon: `action-icon ${_2$5}`,
10002
+ actionIcon: `action-icon ${_1$6}`,
9633
10003
  isDestructive: `is-destructive`,
9634
- actionLabel: `action-label ${_1$6}`,
10004
+ actionLabel: `action-label ${_2$5}`,
9635
10005
  actionBar: `action-bar`,
9636
10006
  separator: `separator`,
9637
10007
  formInput: `form-input`,
@@ -9648,6 +10018,7 @@ var FluxAction_default = /* @__PURE__ */ defineComponent({
9648
10018
  props: {
9649
10019
  type: {},
9650
10020
  disabled: { type: Boolean },
10021
+ isActive: { type: Boolean },
9651
10022
  isLoading: { type: Boolean },
9652
10023
  isSubmit: { type: Boolean },
9653
10024
  label: {},
@@ -9698,32 +10069,33 @@ var FluxAction_default = /* @__PURE__ */ defineComponent({
9698
10069
  });
9699
10070
  //#endregion
9700
10071
  //#region src/css/component/Button.module.scss
9701
- var { "buttonIcon": _0$14, "buttonLabel": _1$5, "button": _2$4 } = Button_module_default$1;
10072
+ var { "button": _0$16, "buttonIcon": _1$5, "buttonLabel": _2$4 } = Button_module_default$1;
9702
10073
  var Button_module_default = {
9703
- primaryButton: `primary-button ${_2$4}`,
10074
+ primaryButton: `primary-button ${_0$16}`,
10075
+ isActive: `is-active`,
9704
10076
  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}`,
10077
+ primaryButtonIcon: `primary-button-icon ${_1$5}`,
10078
+ primaryButtonLabel: `primary-button-label ${_2$4}`,
10079
+ secondaryButton: `secondary-button ${_0$16}`,
10080
+ secondaryButtonIcon: `secondary-button-icon ${_1$5}`,
10081
+ secondaryButtonLabel: `secondary-button-label ${_2$4}`,
10082
+ destructiveButton: `destructive-button ${_0$16}`,
10083
+ destructiveButtonIcon: `destructive-button-icon ${_1$5}`,
10084
+ destructiveButtonLabel: `destructive-button-label ${_2$4}`,
10085
+ baseLinkButton: `base-link-button ${_0$16}`,
10086
+ primaryLinkButton: `primary-link-button base-link-button ${_0$16}`,
10087
+ primaryLinkButtonIcon: `primary-link-button-icon ${_1$5}`,
10088
+ primaryLinkButtonLabel: `primary-link-button-label ${_2$4}`,
10089
+ secondaryLinkButton: `secondary-link-button base-link-button ${_0$16}`,
10090
+ secondaryLinkButtonIcon: `secondary-link-button-icon ${_1$5}`,
10091
+ secondaryLinkButtonLabel: `secondary-link-button-label ${_2$4}`,
10092
+ linkButton: `link-button ${_0$16}`,
10093
+ linkButtonIcon: `link-button-icon ${_1$5}`,
9722
10094
  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}`,
10095
+ linkButtonLabel: `link-button-label ${_2$4}`,
10096
+ publishButton: `publish-button primary-button ${_0$16}`,
10097
+ publishButtonIcon: `publish-button-icon primary-button-icon ${_1$5}`,
10098
+ publishButtonLabel: `publish-button-label primary-button-label ${_2$4}`,
9727
10099
  publishButtonAnimation: `publish-button-animation`,
9728
10100
  isDone: `is-done`,
9729
10101
  publishButtonAnimationArrow: `publish-button-animation-arrow`,
@@ -9757,6 +10129,7 @@ var FluxDestructiveButton_default = /* @__PURE__ */ defineComponent({
9757
10129
  disabled: { type: Boolean },
9758
10130
  iconLeading: {},
9759
10131
  iconTrailing: {},
10132
+ isActive: { type: Boolean },
9760
10133
  isFilled: { type: Boolean },
9761
10134
  isLoading: { type: Boolean },
9762
10135
  isSubmit: { type: Boolean },
@@ -9780,6 +10153,7 @@ var FluxDestructiveButton_default = /* @__PURE__ */ defineComponent({
9780
10153
  disabled: __props.disabled,
9781
10154
  iconLeading: __props.iconLeading,
9782
10155
  iconTrailing: __props.iconTrailing,
10156
+ isActive: __props.isActive,
9783
10157
  isFilled: __props.isFilled,
9784
10158
  isLoading: __props.isLoading,
9785
10159
  isSubmit: __props.isSubmit,
@@ -9792,6 +10166,7 @@ var FluxDestructiveButton_default = /* @__PURE__ */ defineComponent({
9792
10166
  to: __props.to
9793
10167
  }, {
9794
10168
  "css-class": unref(Button_module_default).destructiveButton,
10169
+ "css-class-active": unref(Button_module_default).isActive,
9795
10170
  "css-class-icon": unref(Button_module_default).destructiveButtonIcon,
9796
10171
  "css-class-label": unref(Button_module_default).destructiveButtonLabel,
9797
10172
  onClick: _cache[0] || (_cache[0] = ($event) => $emit("click", $event)),
@@ -9804,6 +10179,7 @@ var FluxDestructiveButton_default = /* @__PURE__ */ defineComponent({
9804
10179
  };
9805
10180
  })]), 1040, [
9806
10181
  "css-class",
10182
+ "css-class-active",
9807
10183
  "css-class-icon",
9808
10184
  "css-class-label"
9809
10185
  ]);
@@ -10213,12 +10589,12 @@ var FluxWindowTransition_default = /* @__PURE__ */ defineComponent({
10213
10589
  });
10214
10590
  //#endregion
10215
10591
  //#region src/css/component/Pane.module.scss
10216
- var { "basePaneStructure": _0$13, "basePaneElement": _1$4, "basePaneLoader": _2$3 } = Pane_module_default$1;
10592
+ var { "basePaneStructure": _0$15, "basePaneElement": _1$4, "basePaneLoader": _2$3 } = Pane_module_default$1;
10217
10593
  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}`,
10594
+ pane: `pane ${_0$15}`,
10595
+ paneDefault: `pane-default pane ${_0$15}`,
10596
+ paneFlat: `pane-flat pane ${_0$15}`,
10597
+ paneWell: `pane-well pane ${_0$15}`,
10222
10598
  paneHeader: `pane-header ${_1$4}`,
10223
10599
  paneBody: `pane-body ${_1$4}`,
10224
10600
  paneHeaderCaption: `pane-header-caption`,
@@ -10281,9 +10657,6 @@ var Flyout_module_default = {
10281
10657
  mobileOpen: `mobile-open`
10282
10658
  };
10283
10659
  //#endregion
10284
- //#region src/component/FluxFlyout.vue?vue&type=script&setup=true&lang.ts
10285
- var _hoisted_1$65 = ["onKeydown"];
10286
- //#endregion
10287
10660
  //#region src/component/FluxFlyout.vue
10288
10661
  var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10289
10662
  __name: "FluxFlyout",
@@ -10293,7 +10666,9 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10293
10666
  margin: { default: 9 },
10294
10667
  width: {}
10295
10668
  },
10296
- setup(__props, { expose: __expose }) {
10669
+ emits: ["close", "open"],
10670
+ setup(__props, { expose: __expose, emit: __emit }) {
10671
+ const emit = __emit;
10297
10672
  const dialogRef = useTemplateRef("dialog");
10298
10673
  const mountRef = useTemplateRef("mount");
10299
10674
  const paneRef = useTemplateRef("pane");
@@ -10308,6 +10683,10 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10308
10683
  const paneMarginY = ref(0);
10309
10684
  !C$2 && O$1(ref(window), "resize", () => unref(isOpen) && reposition());
10310
10685
  I$1(paneRef);
10686
+ he$1("esc", () => close(), {
10687
+ enabled: isOpen,
10688
+ target: dialogRef
10689
+ });
10311
10690
  let closeAnimationEndListener = null;
10312
10691
  let openAnimationEndListener = null;
10313
10692
  function close() {
@@ -10395,9 +10774,13 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10395
10774
  const dialog = unref(dialogRef);
10396
10775
  if (isOpen && !dialog.open) {
10397
10776
  dialog.showModal();
10777
+ emit("open");
10398
10778
  window.addEventListener("scroll", reposition, { passive: true });
10399
10779
  onCleanup(() => window.removeEventListener("scroll", reposition));
10400
- } else if (!isOpen && dialog.open) dialog.close();
10780
+ } else if (!isOpen && dialog.open) {
10781
+ dialog.close();
10782
+ emit("close");
10783
+ }
10401
10784
  });
10402
10785
  provide(FluxFlyoutInjectionKey, {
10403
10786
  isClosing,
@@ -10407,7 +10790,8 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10407
10790
  __expose({
10408
10791
  close,
10409
10792
  open,
10410
- toggle
10793
+ toggle,
10794
+ isOpen
10411
10795
  });
10412
10796
  return (_ctx, _cache) => {
10413
10797
  return openBlock(), createElementBlock("div", {
@@ -10428,8 +10812,7 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10428
10812
  }))), createElementVNode("dialog", {
10429
10813
  ref: "dialog",
10430
10814
  class: normalizeClass(unref(Flyout_module_default).flyoutDialog),
10431
- onClick: onDialogBackdropClick,
10432
- onKeydown: withKeys(withModifiers(close, ["prevent"]), ["esc"])
10815
+ onClick: onDialogBackdropClick
10433
10816
  }, [isOpen.value ? (openBlock(), createBlock(FluxPane_default, {
10434
10817
  key: 0,
10435
10818
  ref: "pane",
@@ -10444,7 +10827,7 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
10444
10827
  openerHeight: openerHeight.value
10445
10828
  })))]),
10446
10829
  _: 3
10447
- }, 8, ["class", "style"])) : createCommentVNode("", true)], 42, _hoisted_1$65)], 6);
10830
+ }, 8, ["class", "style"])) : createCommentVNode("", true)], 2)], 6);
10448
10831
  };
10449
10832
  }
10450
10833
  });
@@ -10457,6 +10840,7 @@ var FluxSecondaryButton_default = /* @__PURE__ */ defineComponent({
10457
10840
  disabled: { type: Boolean },
10458
10841
  iconLeading: {},
10459
10842
  iconTrailing: {},
10843
+ isActive: { type: Boolean },
10460
10844
  isFilled: { type: Boolean },
10461
10845
  isLoading: { type: Boolean },
10462
10846
  isSubmit: { type: Boolean },
@@ -10480,6 +10864,7 @@ var FluxSecondaryButton_default = /* @__PURE__ */ defineComponent({
10480
10864
  disabled: __props.disabled,
10481
10865
  iconLeading: __props.iconLeading,
10482
10866
  iconTrailing: __props.iconTrailing,
10867
+ isActive: __props.isActive,
10483
10868
  isFilled: __props.isFilled,
10484
10869
  isLoading: __props.isLoading,
10485
10870
  isSubmit: __props.isSubmit,
@@ -10492,6 +10877,7 @@ var FluxSecondaryButton_default = /* @__PURE__ */ defineComponent({
10492
10877
  to: __props.to
10493
10878
  }, {
10494
10879
  "css-class": unref(Button_module_default).secondaryButton,
10880
+ "css-class-active": unref(Button_module_default).isActive,
10495
10881
  "css-class-icon": unref(Button_module_default).secondaryButtonIcon,
10496
10882
  "css-class-label": unref(Button_module_default).secondaryButtonLabel,
10497
10883
  onClick: _cache[0] || (_cache[0] = ($event) => $emit("click", $event)),
@@ -10504,6 +10890,7 @@ var FluxSecondaryButton_default = /* @__PURE__ */ defineComponent({
10504
10890
  };
10505
10891
  })]), 1040, [
10506
10892
  "css-class",
10893
+ "css-class-active",
10507
10894
  "css-class-icon",
10508
10895
  "css-class-label"
10509
10896
  ]);
@@ -11031,8 +11418,8 @@ var Avatar_module_default = {
11031
11418
  };
11032
11419
  //#endregion
11033
11420
  //#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 };
11421
+ var _hoisted_1$70 = ["alt", "src"];
11422
+ var _hoisted_2$26 = { key: 0 };
11036
11423
  //#endregion
11037
11424
  //#region src/component/FluxAvatar.vue
11038
11425
  var FluxAvatar_default = /* @__PURE__ */ defineComponent({
@@ -11118,10 +11505,10 @@ var FluxAvatar_default = /* @__PURE__ */ defineComponent({
11118
11505
  class: normalizeClass(unref(Avatar_module_default).avatarImage),
11119
11506
  alt: __props.alt,
11120
11507
  src: __props.src
11121
- }, null, 10, _hoisted_1$64)) : (openBlock(), createElementBlock("div", {
11508
+ }, null, 10, _hoisted_1$70)) : (openBlock(), createElementBlock("div", {
11122
11509
  key: 1,
11123
11510
  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, {
11511
+ }, [__props.fallbackInitials ? (openBlock(), createElementBlock("span", _hoisted_2$26, toDisplayString(__props.fallbackInitials), 1)) : __props.fallbackIcon ? (openBlock(), createBlock(FluxIcon_default, {
11125
11512
  key: 1,
11126
11513
  name: __props.fallbackIcon
11127
11514
  }, null, 8, ["name"])) : createCommentVNode("", true)], 2)),
@@ -11152,6 +11539,45 @@ var FluxAvatar_default = /* @__PURE__ */ defineComponent({
11152
11539
  };
11153
11540
  }
11154
11541
  });
11542
+ var AvatarGroup_module_default = {
11543
+ avatarGroup: `avatar-group`,
11544
+ avatarGroupItem: `avatar-group-item`
11545
+ };
11546
+ //#endregion
11547
+ //#region src/component/FluxAvatarGroup.vue
11548
+ var FluxAvatarGroup_default = /* @__PURE__ */ defineComponent({
11549
+ __name: "FluxAvatarGroup",
11550
+ props: {
11551
+ max: {},
11552
+ overlap: { default: .3 },
11553
+ size: { default: 32 }
11554
+ },
11555
+ setup(__props) {
11556
+ const slots = useSlots();
11557
+ const translate = useTranslate_default();
11558
+ const children = computed(() => a$2(slots.default?.() ?? []).filter((vnode) => typeof vnode.type !== "symbol"));
11559
+ const visibleNodes = computed(() => __props.max !== void 0 && children.value.length > __props.max ? children.value.slice(0, __props.max) : children.value);
11560
+ const overflowCount = computed(() => __props.max !== void 0 ? Math.max(0, children.value.length - __props.max) : 0);
11561
+ const overflowLabel = computed(() => translate("flux.andNMore", { n: overflowCount.value }));
11562
+ const renderVisible = () => visibleNodes.value.map((vnode) => h("span", { class: AvatarGroup_module_default.avatarGroupItem }, [vnode]));
11563
+ return (_ctx, _cache) => {
11564
+ return openBlock(), createElementBlock("div", {
11565
+ class: normalizeClass(unref(AvatarGroup_module_default).avatarGroup),
11566
+ style: normalizeStyle({
11567
+ fontSize: `${__props.size}px`,
11568
+ "--overlap": __props.overlap
11569
+ })
11570
+ }, [(openBlock(), createBlock(resolveDynamicComponent(renderVisible))), overflowCount.value > 0 ? (openBlock(), createElementBlock("span", {
11571
+ key: 0,
11572
+ class: normalizeClass(unref(AvatarGroup_module_default).avatarGroupItem)
11573
+ }, [createVNode(FluxAvatar_default, {
11574
+ alt: overflowLabel.value,
11575
+ fallback: "neutral",
11576
+ "fallback-initials": `+${overflowCount.value}`
11577
+ }, null, 8, ["alt", "fallback-initials"])], 2)) : createCommentVNode("", true)], 6);
11578
+ };
11579
+ }
11580
+ });
11155
11581
  var Badge_module_default = {
11156
11582
  badge: `badge`,
11157
11583
  spinner: `spinner`,
@@ -11181,7 +11607,7 @@ var Badge_module_default = {
11181
11607
  };
11182
11608
  //#endregion
11183
11609
  //#region src/component/FluxBadge.vue?vue&type=script&setup=true&lang.ts
11184
- var _hoisted_1$63 = ["aria-label"];
11610
+ var _hoisted_1$69 = ["aria-label"];
11185
11611
  //#endregion
11186
11612
  //#region src/component/FluxBadge.vue
11187
11613
  var FluxBadge_default = /* @__PURE__ */ defineComponent({
@@ -11247,7 +11673,7 @@ var FluxBadge_default = /* @__PURE__ */ defineComponent({
11247
11673
  type: "button",
11248
11674
  "aria-label": unref(translate)("flux.delete"),
11249
11675
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onDeleteClick(), ["stop"]))
11250
- }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$63)) : createCommentVNode("", true)
11676
+ }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$69)) : createCommentVNode("", true)
11251
11677
  ]),
11252
11678
  _: 1
11253
11679
  }, 8, [
@@ -11492,7 +11918,7 @@ var Breadcrumb_module_default = {
11492
11918
  };
11493
11919
  //#endregion
11494
11920
  //#region src/component/FluxBreadcrumb.vue?vue&type=script&setup=true&lang.ts
11495
- var _hoisted_1$62 = ["aria-label"];
11921
+ var _hoisted_1$68 = ["aria-label"];
11496
11922
  //#endregion
11497
11923
  //#region src/component/FluxBreadcrumb.vue
11498
11924
  var FluxBreadcrumb_default = /* @__PURE__ */ defineComponent({
@@ -11503,7 +11929,7 @@ var FluxBreadcrumb_default = /* @__PURE__ */ defineComponent({
11503
11929
  return openBlock(), createElementBlock("nav", {
11504
11930
  class: normalizeClass(unref(Breadcrumb_module_default).breadcrumb),
11505
11931
  "aria-label": __props.ariaLabel
11506
- }, [createElementVNode("ol", { class: normalizeClass(unref(Breadcrumb_module_default).breadcrumbList) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$62);
11932
+ }, [createElementVNode("ol", { class: normalizeClass(unref(Breadcrumb_module_default).breadcrumbList) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$68);
11507
11933
  };
11508
11934
  }
11509
11935
  });
@@ -11562,13 +11988,13 @@ var FluxBreadcrumbItem_default = /* @__PURE__ */ defineComponent({
11562
11988
  });
11563
11989
  //#endregion
11564
11990
  //#region src/css/component/Calendar.module.scss
11565
- var { "basePaneLoader": _0$12 } = Pane_module_default$1;
11991
+ var { "basePaneLoader": _0$14 } = Pane_module_default$1;
11566
11992
  var Calendar_module_default = {
11567
11993
  calendar: `calendar`,
11568
11994
  calendarView: `calendar-view`,
11569
11995
  calendarItemRegistry: `calendar-item-registry`,
11570
11996
  calendarActions: `calendar-actions`,
11571
- calendarLoader: `calendar-loader ${_0$12}`,
11997
+ calendarLoader: `calendar-loader ${_0$14}`,
11572
11998
  calendarCurrent: `calendar-current`,
11573
11999
  calendarCurrentValue: `calendar-current-value`,
11574
12000
  calendarCurrentMonth: `calendar-current-month calendar-current-value`,
@@ -11616,7 +12042,7 @@ var Calendar_module_default = {
11616
12042
  };
11617
12043
  //#endregion
11618
12044
  //#region src/component/calendar/FluxCalendarItemDisplay.vue?vue&type=script&setup=true&lang.ts
11619
- var _hoisted_1$61 = ["draggable", "tabindex"];
12045
+ var _hoisted_1$67 = ["draggable", "tabindex"];
11620
12046
  //#endregion
11621
12047
  //#region src/component/calendar/FluxCalendarItemDisplay.vue
11622
12048
  var FluxCalendarItemDisplay_default = /* @__PURE__ */ defineComponent({
@@ -11689,13 +12115,13 @@ var FluxCalendarItemDisplay_default = /* @__PURE__ */ defineComponent({
11689
12115
  onDragstart: onDragStart,
11690
12116
  onDragend: onDragEnd,
11691
12117
  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);
12118
+ }, [createVNode(unref(RenderItemContent), { render: __props.data.renderContent }, null, 8, ["render"])], 42, _hoisted_1$67);
11693
12119
  };
11694
12120
  }
11695
12121
  });
11696
12122
  //#endregion
11697
12123
  //#region src/component/calendar/FluxCalendarMonthView.vue?vue&type=script&setup=true&lang.ts
11698
- var _hoisted_1$60 = [
12124
+ var _hoisted_1$66 = [
11699
12125
  "onDragover",
11700
12126
  "onDragleave",
11701
12127
  "onDrop"
@@ -11770,7 +12196,7 @@ var FluxCalendarMonthView_default = /* @__PURE__ */ defineComponent({
11770
12196
  key: item.id,
11771
12197
  data: item
11772
12198
  }, 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);
12199
+ }), 128))], 2), createElementVNode("span", { class: normalizeClass(unref(Calendar_module_default).calendarEntryDate) }, toDisplayString(date.toLocaleString({ day: "numeric" })), 3)], 42, _hoisted_1$66);
11774
12200
  }), 256))], 2))]),
11775
12201
  _: 1
11776
12202
  }, 8, ["is-back"]);
@@ -11779,17 +12205,17 @@ var FluxCalendarMonthView_default = /* @__PURE__ */ defineComponent({
11779
12205
  });
11780
12206
  //#endregion
11781
12207
  //#region src/component/calendar/FluxCalendarTimeGridView.vue?vue&type=script&setup=true&lang.ts
11782
- var _hoisted_1$59 = [
12208
+ var _hoisted_1$65 = [
11783
12209
  "onDragover",
11784
12210
  "onDragleave",
11785
12211
  "onDrop"
11786
12212
  ];
11787
- var _hoisted_2$23 = [
12213
+ var _hoisted_2$25 = [
11788
12214
  "onDragover",
11789
12215
  "onDragleave",
11790
12216
  "onDrop"
11791
12217
  ];
11792
- var _hoisted_3$7 = ["onMousedown"];
12218
+ var _hoisted_3$8 = ["onMousedown"];
11793
12219
  var _hoisted_4$2 = ["onMousedown"];
11794
12220
  //#endregion
11795
12221
  //#region src/component/calendar/FluxCalendarTimeGridView.vue
@@ -12131,7 +12557,7 @@ var FluxCalendarTimeGridView_default = /* @__PURE__ */ defineComponent({
12131
12557
  key: item.id,
12132
12558
  data: item
12133
12559
  }, null, 8, ["data"]);
12134
- }), 128))], 42, _hoisted_1$59);
12560
+ }), 128))], 42, _hoisted_1$65);
12135
12561
  }), 128))], 2)], 2),
12136
12562
  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
12563
  return openBlock(), createElementBlock("div", {
@@ -12160,7 +12586,7 @@ var FluxCalendarTimeGridView_default = /* @__PURE__ */ defineComponent({
12160
12586
  }, [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
12587
  class: normalizeClass(unref(clsx)(unref(Calendar_module_default).timeGridDayItemHandle, unref(Calendar_module_default).isTop)),
12162
12588
  onMousedown: (evt) => onResizeStart(positioned, "top", evt)
12163
- }, null, 42, _hoisted_3$7), createElementVNode("div", {
12589
+ }, null, 42, _hoisted_3$8), createElementVNode("div", {
12164
12590
  class: normalizeClass(unref(clsx)(unref(Calendar_module_default).timeGridDayItemHandle, unref(Calendar_module_default).isBottom)),
12165
12591
  onMousedown: (evt) => onResizeStart(positioned, "bottom", evt)
12166
12592
  }, null, 42, _hoisted_4$2)], 64)) : createCommentVNode("", true)], 2)], 6);
@@ -12168,7 +12594,7 @@ var FluxCalendarTimeGridView_default = /* @__PURE__ */ defineComponent({
12168
12594
  key: 0,
12169
12595
  class: normalizeClass(unref(Calendar_module_default).timeGridDropIndicator),
12170
12596
  style: normalizeStyle({ top: `${(dropTargetMinutes.value - __props.hourRange[0] * 60) * __props.pixelsPerMinute}px` })
12171
- }, null, 6)) : createCommentVNode("", true)], 46, _hoisted_2$23);
12597
+ }, null, 6)) : createCommentVNode("", true)], 46, _hoisted_2$25);
12172
12598
  }), 128))], 2)], 2)
12173
12599
  ], 2))]),
12174
12600
  _: 1
@@ -12199,9 +12625,9 @@ var DatePicker_module_default = {
12199
12625
  };
12200
12626
  //#endregion
12201
12627
  //#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"];
12628
+ var _hoisted_1$64 = ["id"];
12629
+ var _hoisted_2$24 = ["aria-labelledby"];
12630
+ var _hoisted_3$7 = ["onClick", "onMouseover"];
12205
12631
  //#endregion
12206
12632
  //#region src/component/FluxDatePicker.vue
12207
12633
  var FluxDatePicker_default = /* @__PURE__ */ defineComponent({
@@ -12354,7 +12780,7 @@ var FluxDatePicker_default = /* @__PURE__ */ defineComponent({
12354
12780
  class: normalizeClass(unref(DatePicker_module_default).datePickerHeaderViewButton),
12355
12781
  type: "button",
12356
12782
  onClick: _cache[1] || (_cache[1] = ($event) => setView("year"))
12357
- }, toDisplayString(unref(viewYear)), 3)], 10, _hoisted_1$58),
12783
+ }, toDisplayString(unref(viewYear)), 3)], 10, _hoisted_1$64),
12358
12784
  createVNode(unref(FluxFadeTransition_default), null, {
12359
12785
  default: withCtx(() => [viewMode.value === "date" ? (openBlock(), createBlock(FluxSecondaryButton_default, {
12360
12786
  key: 0,
@@ -12391,10 +12817,10 @@ var FluxDatePicker_default = /* @__PURE__ */ defineComponent({
12391
12817
  onClick: ($event) => setDate(date),
12392
12818
  onMouseover: ($event) => onDateMouseOver(date),
12393
12819
  onMouseout: onDateMouseOut
12394
- }, toDisplayString(date.toLocaleString({ day: "numeric" })), 43, _hoisted_3$6);
12820
+ }, toDisplayString(date.toLocaleString({ day: "numeric" })), 43, _hoisted_3$7);
12395
12821
  }), 256))], 2))]),
12396
12822
  _: 1
12397
- }, 8, ["is-back"])], 10, _hoisted_2$22)) : viewMode.value === "month" ? (openBlock(), createElementBlock("div", {
12823
+ }, 8, ["is-back"])], 10, _hoisted_2$24)) : viewMode.value === "month" ? (openBlock(), createElementBlock("div", {
12398
12824
  key: "month",
12399
12825
  class: normalizeClass(unref(DatePicker_module_default).datePickerMonths)
12400
12826
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(months), (month) => {
@@ -12465,9 +12891,9 @@ var FluxLayerPane_default = /* @__PURE__ */ defineComponent({
12465
12891
  });
12466
12892
  //#endregion
12467
12893
  //#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"];
12894
+ var _hoisted_1$63 = ["aria-label", "onClick"];
12895
+ var _hoisted_2$23 = ["aria-label", "onClick"];
12896
+ var _hoisted_3$6 = ["aria-label", "onClick"];
12471
12897
  var SNAP_MINUTES = 30;
12472
12898
  var NAV_HOVER_INITIAL_DELAY_MS = 700;
12473
12899
  var NAV_HOVER_REPEAT_DELAY_MS = 450;
@@ -12792,7 +13218,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12792
13218
  "aria-label": unref(translate)("flux.selectMonth"),
12793
13219
  type: "button",
12794
13220
  onClick: open
12795
- }, toDisplayString(unref(monthViewMonth)), 11, _hoisted_1$57)]),
13221
+ }, toDisplayString(unref(monthViewMonth)), 11, _hoisted_1$63)]),
12796
13222
  default: withCtx(({ close }) => [createElementVNode("div", { class: normalizeClass(unref(DatePicker_module_default).datePickerMonths) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(months), (month) => {
12797
13223
  return openBlock(), createBlock(FluxSecondaryButton_default, {
12798
13224
  key: month.label,
@@ -12808,7 +13234,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12808
13234
  "aria-label": unref(translate)("flux.selectYear"),
12809
13235
  type: "button",
12810
13236
  onClick: open
12811
- }, toDisplayString(unref(monthViewYear)), 11, _hoisted_2$21)]),
13237
+ }, toDisplayString(unref(monthViewYear)), 11, _hoisted_2$23)]),
12812
13238
  default: withCtx(({ close }) => [createElementVNode("div", { class: normalizeClass(unref(DatePicker_module_default).datePickerYears) }, [
12813
13239
  createVNode(FluxSecondaryButton_default, {
12814
13240
  "aria-label": unref(translate)("flux.previousYears"),
@@ -12841,7 +13267,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12841
13267
  "aria-label": unref(translate)("flux.selectDate"),
12842
13268
  type: "button",
12843
13269
  onClick: open
12844
- }, toDisplayString(rangeLabel.value), 11, _hoisted_3$5)]),
13270
+ }, toDisplayString(rangeLabel.value), 11, _hoisted_3$6)]),
12845
13271
  default: withCtx(({ close }) => [createVNode(FluxDatePicker_default, {
12846
13272
  "model-value": datePickerValue.value,
12847
13273
  "onUpdate:modelValue": ($event) => {
@@ -12940,7 +13366,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
12940
13366
  });
12941
13367
  //#endregion
12942
13368
  //#region src/component/FluxCalendarItem.vue?vue&type=script&setup=true&lang.ts
12943
- var _hoisted_1$56 = {
13369
+ var _hoisted_1$62 = {
12944
13370
  "aria-hidden": "true",
12945
13371
  style: { "display": "none" }
12946
13372
  };
@@ -12993,7 +13419,7 @@ var FluxCalendarItem_default = /* @__PURE__ */ defineComponent({
12993
13419
  if (dragContext && props.id != null) dragContext.registerItem(props.id, buildData());
12994
13420
  });
12995
13421
  return (_ctx, _cache) => {
12996
- return openBlock(), createElementBlock("span", _hoisted_1$56);
13422
+ return openBlock(), createElementBlock("span", _hoisted_1$62);
12997
13423
  };
12998
13424
  }
12999
13425
  });
@@ -13152,7 +13578,7 @@ var FluxCommandPaletteGroup_default = /* @__PURE__ */ defineComponent({
13152
13578
  });
13153
13579
  //#endregion
13154
13580
  //#region src/component/FluxTag.vue?vue&type=script&setup=true&lang.ts
13155
- var _hoisted_1$55 = ["aria-label"];
13581
+ var _hoisted_1$61 = ["aria-label"];
13156
13582
  //#endregion
13157
13583
  //#region src/component/FluxTag.vue
13158
13584
  var FluxTag_default = /* @__PURE__ */ defineComponent({
@@ -13220,7 +13646,7 @@ var FluxTag_default = /* @__PURE__ */ defineComponent({
13220
13646
  type: "button",
13221
13647
  "aria-label": unref(translate)("flux.delete"),
13222
13648
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onDeleteClick(), ["stop"]))
13223
- }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$55)) : createCommentVNode("", true)
13649
+ }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$61)) : createCommentVNode("", true)
13224
13650
  ]),
13225
13651
  _: 1
13226
13652
  }, 8, [
@@ -13282,8 +13708,8 @@ var FluxCommandPaletteItem_default = /* @__PURE__ */ defineComponent({
13282
13708
  });
13283
13709
  //#endregion
13284
13710
  //#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"];
13711
+ var _hoisted_1$60 = ["placeholder", "value"];
13712
+ var _hoisted_2$22 = ["onClick"];
13287
13713
  //#endregion
13288
13714
  //#region src/component/FluxCommandPalette.vue
13289
13715
  var FluxCommandPalette_default = /* @__PURE__ */ defineComponent({
@@ -13442,7 +13868,7 @@ var FluxCommandPalette_default = /* @__PURE__ */ defineComponent({
13442
13868
  value: unref(search),
13443
13869
  type: "text",
13444
13870
  onInput: _cache[2] || (_cache[2] = ($event) => unref(setSearch)($event.target.value))
13445
- }, null, 42, _hoisted_1$54),
13871
+ }, null, 42, _hoisted_1$60),
13446
13872
  createVNode(FluxTag_default, {
13447
13873
  "is-keyboard-shortcut": "",
13448
13874
  label: "Esc"
@@ -13469,7 +13895,7 @@ var FluxCommandPalette_default = /* @__PURE__ */ defineComponent({
13469
13895
  key: 0,
13470
13896
  class: normalizeClass(unref(CommandPalette_module_default).commandPaletteTabIcon),
13471
13897
  name: tab.icon
13472
- }, null, 8, ["class", "name"])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(tab.label), 1)], 42, _hoisted_2$20);
13898
+ }, null, 8, ["class", "name"])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(tab.label), 1)], 42, _hoisted_2$22);
13473
13899
  }), 128))], 2)) : createCommentVNode("", true),
13474
13900
  createVNode(unref(FluxWindowTransition_default), { "is-back": unref(isTransitioningBack) }, {
13475
13901
  default: withCtx(() => [(openBlock(), createElementBlock("div", {
@@ -13546,8 +13972,8 @@ var Comment_module_default = {
13546
13972
  };
13547
13973
  //#endregion
13548
13974
  //#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"];
13975
+ var _hoisted_1$59 = { key: 0 };
13976
+ var _hoisted_2$21 = ["datetime"];
13551
13977
  //#endregion
13552
13978
  //#region src/component/FluxComment.vue
13553
13979
  var FluxComment_default = /* @__PURE__ */ defineComponent({
@@ -13607,17 +14033,17 @@ var FluxComment_default = /* @__PURE__ */ defineComponent({
13607
14033
  key: 0,
13608
14034
  class: normalizeClass(unref(Comment_module_default).commentTyping)
13609
14035
  }, 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", {
14036
+ 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
14037
  key: 1,
13612
14038
  datetime: iso.value
13613
- }, toDisplayString(isJustNowVisible.value ? unref(translate)("flux.justNow") : relative.value), 9, _hoisted_2$19)) : createCommentVNode("", true)], 2)
14039
+ }, toDisplayString(isJustNowVisible.value ? unref(translate)("flux.justNow") : relative.value), 9, _hoisted_2$21)) : createCommentVNode("", true)], 2)
13614
14040
  ], 2);
13615
14041
  };
13616
14042
  }
13617
14043
  });
13618
14044
  //#endregion
13619
14045
  //#region src/css/component/Form.module.scss
13620
- var { "basePane": _0$11 } = Pane_module_default$1;
14046
+ var { "basePane": _0$13 } = Pane_module_default$1;
13621
14047
  var Form_module_default = {
13622
14048
  formInputGroup: `form-input-group form-input-enabled form-input`,
13623
14049
  buttonGroup: `button-group`,
@@ -13671,7 +14097,7 @@ var Form_module_default = {
13671
14097
  formSelectIcon: `form-select-icon`,
13672
14098
  formSelectInput: `form-select-input`,
13673
14099
  formSelectPlaceholder: `form-select-placeholder`,
13674
- formSelectPopup: `form-select-popup ${_0$11}`,
14100
+ formSelectPopup: `form-select-popup ${_0$13}`,
13675
14101
  menuItem: `menu-item`,
13676
14102
  isKeyboardAction: `is-keyboard-action`,
13677
14103
  isSearchable: `is-searchable`,
@@ -13709,11 +14135,16 @@ var Form_module_default = {
13709
14135
  isSwitch: `is-switch`,
13710
14136
  formToggleIcon: `form-toggle-icon`,
13711
14137
  formToggleIconOn: `form-toggle-icon-on form-toggle-icon`,
13712
- formToggleIconOff: `form-toggle-icon-off form-toggle-icon`
14138
+ formToggleIconOff: `form-toggle-icon-off form-toggle-icon`,
14139
+ formTagsInput: `form-tags-input form-input`,
14140
+ formTagsInputDisabled: `form-tags-input-disabled form-tags-input form-input`,
14141
+ formTagsInputEnabled: `form-tags-input-enabled form-tags-input form-input`,
14142
+ formTagsInputField: `form-tags-input-field`,
14143
+ formTagsInputPopup: `form-tags-input-popup form-select-popup ${_0$13}`
13713
14144
  };
13714
14145
  //#endregion
13715
14146
  //#region src/component/FluxFormFieldAddition.vue?vue&type=script&setup=true&lang.ts
13716
- var _hoisted_1$52 = { key: 1 };
14147
+ var _hoisted_1$58 = { key: 1 };
13717
14148
  //#endregion
13718
14149
  //#region src/component/FluxFormFieldAddition.vue
13719
14150
  var FluxFormFieldAddition_default = /* @__PURE__ */ defineComponent({
@@ -13735,7 +14166,7 @@ var FluxFormFieldAddition_default = /* @__PURE__ */ defineComponent({
13735
14166
  name: __props.icon,
13736
14167
  size: 16
13737
14168
  }, null, 8, ["class", "name"])) : createCommentVNode("", true),
13738
- __props.message ? (openBlock(), createElementBlock("span", _hoisted_1$52, toDisplayString(__props.message), 1)) : createCommentVNode("", true),
14169
+ __props.message ? (openBlock(), createElementBlock("span", _hoisted_1$58, toDisplayString(__props.message), 1)) : createCommentVNode("", true),
13739
14170
  renderSlot(_ctx.$slots, "default")
13740
14171
  ], 2);
13741
14172
  };
@@ -13743,8 +14174,8 @@ var FluxFormFieldAddition_default = /* @__PURE__ */ defineComponent({
13743
14174
  });
13744
14175
  //#endregion
13745
14176
  //#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"];
14177
+ var _hoisted_1$57 = ["role", "aria-labelledby"];
14178
+ var _hoisted_2$20 = ["id"];
13748
14179
  //#endregion
13749
14180
  //#region src/component/FluxFormField.vue
13750
14181
  var FluxFormField_default = /* @__PURE__ */ defineComponent({
@@ -13786,7 +14217,7 @@ var FluxFormField_default = /* @__PURE__ */ defineComponent({
13786
14217
  key: 0,
13787
14218
  id: isGroup.value ? unref(labelId) : void 0,
13788
14219
  class: normalizeClass(unref(Form_module_default).formFieldLabel)
13789
- }, toDisplayString(__props.label), 11, _hoisted_2$18)) : createCommentVNode("", true),
14220
+ }, toDisplayString(__props.label), 11, _hoisted_2$20)) : createCommentVNode("", true),
13790
14221
  __props.isOptional ? (openBlock(), createElementBlock("span", {
13791
14222
  key: 1,
13792
14223
  class: normalizeClass(unref(Form_module_default).formFieldOptional)
@@ -13831,14 +14262,14 @@ var FluxFormField_default = /* @__PURE__ */ defineComponent({
13831
14262
  label: __props.label,
13832
14263
  maxLength: __props.maxLength
13833
14264
  })))
13834
- ], 10, _hoisted_1$51);
14265
+ ], 10, _hoisted_1$57);
13835
14266
  };
13836
14267
  }
13837
14268
  });
13838
14269
  //#endregion
13839
14270
  //#region src/component/FluxFormInput.vue?vue&type=script&setup=true&lang.ts
13840
- var _hoisted_1$50 = ["aria-disabled"];
13841
- var _hoisted_2$17 = [
14271
+ var _hoisted_1$56 = ["aria-disabled"];
14272
+ var _hoisted_2$19 = [
13842
14273
  "id",
13843
14274
  "name",
13844
14275
  "autocomplete",
@@ -14038,7 +14469,7 @@ var FluxFormInput_default = /* @__PURE__ */ defineComponent({
14038
14469
  onFocus: _cache[1] || (_cache[1] = ($event) => onFocus()),
14039
14470
  onInput,
14040
14471
  onKeydown: onKeyDown
14041
- }, null, 42, _hoisted_2$17),
14472
+ }, null, 42, _hoisted_2$19),
14042
14473
  __props.iconLeading ? (openBlock(), createBlock(FluxIcon_default, {
14043
14474
  key: 0,
14044
14475
  class: normalizeClass(unref(Form_module_default).formInputIconLeading),
@@ -14062,7 +14493,7 @@ var FluxFormInput_default = /* @__PURE__ */ defineComponent({
14062
14493
  class: normalizeClass(unref(Form_module_default).formInputIconTrailing),
14063
14494
  size: 18
14064
14495
  }, null, 8, ["class"])) : createCommentVNode("", true)
14065
- ], 10, _hoisted_1$50);
14496
+ ], 10, _hoisted_1$56);
14066
14497
  };
14067
14498
  }
14068
14499
  });
@@ -14086,12 +14517,13 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14086
14517
  __name: "AnchorPopup",
14087
14518
  props: {
14088
14519
  anchor: {},
14520
+ clampToViewport: { type: Boolean },
14089
14521
  direction: { default: "vertical" },
14090
14522
  margin: { default: 12 },
14091
14523
  position: {},
14092
14524
  useAnchorWidth: { type: Boolean }
14093
14525
  },
14094
- setup(__props) {
14526
+ setup(__props, { expose: __expose }) {
14095
14527
  const anchorRef = ref();
14096
14528
  const popupRef = useTemplateRef("popup");
14097
14529
  const state = reactive({
@@ -14105,12 +14537,14 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14105
14537
  capture: true,
14106
14538
  passive: true
14107
14539
  });
14540
+ resize();
14541
+ reposition();
14108
14542
  });
14109
14543
  onUnmounted(() => {
14110
14544
  window.removeEventListener("resize", onResize);
14111
14545
  window.removeEventListener("scroll", onScroll, { capture: true });
14112
14546
  });
14113
- ye$1(popupRef, () => {
14547
+ we$1(popupRef, () => {
14114
14548
  reposition();
14115
14549
  }, {
14116
14550
  childList: true,
@@ -14185,6 +14619,14 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14185
14619
  if (py < 0 || py + popupHeight > innerHeight) py = innerHeight / 2 - popupHeight / 2;
14186
14620
  break;
14187
14621
  }
14622
+ if (__props.clampToViewport) {
14623
+ if (__props.position?.startsWith("right") && px + popupWidth > innerWidth - __props.margin) px = x - popupWidth - __props.margin;
14624
+ else if (__props.position?.startsWith("left") && px < __props.margin) px = x + width + __props.margin;
14625
+ if (__props.position?.startsWith("bottom") && py + popupHeight > innerHeight - __props.margin) py = y - popupHeight - __props.margin;
14626
+ else if (__props.position?.startsWith("top") && py < __props.margin) py = y + height + __props.margin;
14627
+ px = Math.min(Math.max(px, __props.margin), Math.max(__props.margin, innerWidth - popupWidth - __props.margin));
14628
+ py = Math.min(Math.max(py, __props.margin), Math.max(__props.margin, innerHeight - popupHeight - __props.margin));
14629
+ }
14188
14630
  state.x = px;
14189
14631
  state.y = py;
14190
14632
  }
@@ -14201,6 +14643,10 @@ var AnchorPopup_default = /* @__PURE__ */ defineComponent({
14201
14643
  function onScroll() {
14202
14644
  reposition();
14203
14645
  }
14646
+ __expose({
14647
+ reposition,
14648
+ resize
14649
+ });
14204
14650
  watchEffect(() => {
14205
14651
  if (!__props.anchor || !R$2(__props.anchor) && !__props.anchor.$el) return;
14206
14652
  anchorRef.value = R$2(__props.anchor) ? __props.anchor : __props.anchor.$el;
@@ -14233,8 +14679,8 @@ var FluxPaneFooter_default = /* @__PURE__ */ defineComponent({
14233
14679
  });
14234
14680
  //#endregion
14235
14681
  //#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 };
14682
+ var _hoisted_1$55 = { key: 0 };
14683
+ var _hoisted_2$18 = { key: 1 };
14238
14684
  //#endregion
14239
14685
  //#region src/component/FluxPaneHeader.vue
14240
14686
  var FluxPaneHeader_default = /* @__PURE__ */ defineComponent({
@@ -14257,7 +14703,7 @@ var FluxPaneHeader_default = /* @__PURE__ */ defineComponent({
14257
14703
  __props.title || __props.subtitle ? (openBlock(), createElementBlock("div", {
14258
14704
  key: 1,
14259
14705
  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),
14706
+ }, [__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
14707
  renderSlot(_ctx.$slots, "after")
14262
14708
  ], 2);
14263
14709
  };
@@ -14373,7 +14819,7 @@ var FilterBadge_default = /* @__PURE__ */ defineComponent({
14373
14819
  });
14374
14820
  //#endregion
14375
14821
  //#region src/css/component/Menu.module.scss
14376
- var { "button": _0$10, "buttonIcon": _1$3, "buttonLabel": _2$2 } = Button_module_default$1;
14822
+ var { "buttonIcon": _0$12, "buttonLabel": _1$3, "button": _2$2 } = Button_module_default$1;
14377
14823
  var Menu_module_default = {
14378
14824
  menu: `menu`,
14379
14825
  menuNormal: `menu-normal menu`,
@@ -14381,19 +14827,20 @@ var Menu_module_default = {
14381
14827
  menuGroup: `menu-group`,
14382
14828
  menuGroupHorizontal: `menu-group-horizontal menu-group`,
14383
14829
  menuGroupVertical: `menu-group-vertical menu-group`,
14384
- menuItem: `menu-item ${_0$10}`,
14830
+ menuItem: `menu-item ${_2$2}`,
14385
14831
  badge: `badge`,
14386
- menuItemIcon: `menu-item-icon ${_1$3}`,
14387
- menuItemLabel: `menu-item-label ${_2$2}`,
14832
+ menuItemIcon: `menu-item-icon ${_0$12}`,
14833
+ menuItemLabel: `menu-item-label ${_1$3}`,
14388
14834
  menuItemActive: `menu-item-active`,
14389
14835
  menuItemDestructive: `menu-item-destructive`,
14390
14836
  menuItemHighlighted: `menu-item-highlighted`,
14391
14837
  menuItemIndented: `menu-item-indented`,
14838
+ menuConeActive: `menu-cone-active`,
14392
14839
  menuCollapsible: `menu-collapsible`,
14393
14840
  menuCollapsibleOpened: `menu-collapsible-opened menu-collapsible`,
14394
14841
  menuCollapsibleBody: `menu-collapsible-body`,
14395
14842
  menuCollapsibleContent: `menu-collapsible-content`,
14396
- menuItemSelectableIcon: `menu-item-selectable-icon ${_1$3}`,
14843
+ menuItemSelectableIcon: `menu-item-selectable-icon ${_0$12}`,
14397
14844
  menuItemSelected: `menu-item-selected`,
14398
14845
  menuItemCommand: `menu-item-command`,
14399
14846
  menuItemCommandIcon: `menu-item-command-icon`,
@@ -14425,7 +14872,7 @@ var FluxMenuGroup_default = /* @__PURE__ */ defineComponent({
14425
14872
  });
14426
14873
  //#endregion
14427
14874
  //#region src/component/FluxMenuItem.vue?vue&type=script&setup=true&lang.ts
14428
- var _hoisted_1$48 = ["src", "alt"];
14875
+ var _hoisted_1$54 = ["src", "alt"];
14429
14876
  //#endregion
14430
14877
  //#region src/component/FluxMenuItem.vue
14431
14878
  var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
@@ -14435,6 +14882,7 @@ var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
14435
14882
  disabled: { type: Boolean },
14436
14883
  iconLeading: {},
14437
14884
  iconTrailing: {},
14885
+ isActive: { type: Boolean },
14438
14886
  isLoading: { type: Boolean },
14439
14887
  label: {},
14440
14888
  tabindex: {},
@@ -14447,7 +14895,6 @@ var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
14447
14895
  commandLoading: { type: Boolean },
14448
14896
  imageAlt: {},
14449
14897
  imageSrc: {},
14450
- isActive: { type: Boolean },
14451
14898
  isDestructive: { type: Boolean },
14452
14899
  isHighlighted: { type: Boolean },
14453
14900
  isIndented: { type: Boolean },
@@ -14502,7 +14949,7 @@ var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
14502
14949
  class: normalizeClass(unref(Menu_module_default).menuItemImage),
14503
14950
  src: __props.imageSrc,
14504
14951
  alt: __props.imageAlt ?? ""
14505
- }, null, 10, _hoisted_1$48)]),
14952
+ }, null, 10, _hoisted_1$54)]),
14506
14953
  key: "1"
14507
14954
  } : slots.before ? {
14508
14955
  name: "iconLeading",
@@ -14628,13 +15075,21 @@ var FilterOptionBase_default = /* @__PURE__ */ defineComponent({
14628
15075
  //#region src/component/FluxMenu.vue
14629
15076
  var FluxMenu_default = /* @__PURE__ */ defineComponent({
14630
15077
  __name: "FluxMenu",
14631
- props: { isLarge: { type: Boolean } },
15078
+ props: {
15079
+ debugCone: {
15080
+ type: Boolean,
15081
+ default: false
15082
+ },
15083
+ isLarge: { type: Boolean }
15084
+ },
14632
15085
  setup(__props) {
14633
15086
  R$1(useTemplateRef("element"), { direction: "vertical" });
15087
+ const menuFlyout = useMenuFlyoutContext({ debugCone: toRef(() => __props.debugCone) });
15088
+ const coneActive = computed(() => !!menuFlyout.activeCone.value);
14634
15089
  return (_ctx, _cache) => {
14635
15090
  return openBlock(), createElementBlock("nav", {
14636
15091
  ref: "element",
14637
- class: normalizeClass(__props.isLarge ? unref(Menu_module_default).menuLarge : unref(Menu_module_default).menuNormal),
15092
+ class: normalizeClass([__props.isLarge ? unref(Menu_module_default).menuLarge : unref(Menu_module_default).menuNormal, coneActive.value && unref(Menu_module_default).menuConeActive]),
14638
15093
  role: "menu",
14639
15094
  "aria-orientation": "vertical"
14640
15095
  }, [renderSlot(_ctx.$slots, "default")], 2);
@@ -14651,6 +15106,7 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14651
15106
  __name: "SelectBase",
14652
15107
  props: /*@__PURE__*/ mergeModels({
14653
15108
  disabled: { type: Boolean },
15109
+ isCreatable: { type: Boolean },
14654
15110
  isLoading: { type: Boolean },
14655
15111
  isMultiple: { type: Boolean },
14656
15112
  isSearchable: { type: Boolean },
@@ -14665,6 +15121,7 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14665
15121
  "keyDown",
14666
15122
  "deselect",
14667
15123
  "select",
15124
+ "create",
14668
15125
  "search",
14669
15126
  "close",
14670
15127
  "open"
@@ -14684,6 +15141,12 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14684
15141
  const focusElement = computed(() => v$2(searchInputElementRef) ?? v$2(anchorRef));
14685
15142
  const highlightedId = computed(() => unref(rawOptions)[unref(highlightedIndex)]?.value);
14686
15143
  const rawOptions = computed(() => __props.options.map((group) => group[1]).flat());
15144
+ const trimmedSearch = computed(() => unref(modelSearch).trim());
15145
+ const canCreate = computed(() => {
15146
+ if (!__props.isCreatable || trimmedSearch.value === "") return false;
15147
+ const query = trimmedSearch.value.toLowerCase();
15148
+ return !unref(rawOptions).some((o) => o.label.toLowerCase() === query);
15149
+ });
14687
15150
  const { isOpen: isPopupOpen, toggle, onKeyDownBase } = useDropdownPopup({
14688
15151
  anchorRef,
14689
15152
  popupRef: anchorPopupRef,
@@ -14701,6 +15164,13 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14701
15164
  modelSearch.value = "";
14702
15165
  nextTick(() => unref(focusElement)?.focus());
14703
15166
  }
15167
+ function create() {
15168
+ emit("create", trimmedSearch.value);
15169
+ if (!__props.isMultiple) isPopupOpen.value = false;
15170
+ highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;
15171
+ modelSearch.value = "";
15172
+ nextTick(() => unref(focusElement)?.focus());
15173
+ }
14704
15174
  function onKeyDown(evt) {
14705
15175
  emit("keyDown", evt);
14706
15176
  if (!unref(isPopupOpen)) {
@@ -14724,6 +15194,7 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14724
15194
  case "Enter":
14725
15195
  const id = unref(highlightedId);
14726
15196
  if (id !== void 0) select(id);
15197
+ else if (unref(canCreate)) create();
14727
15198
  break;
14728
15199
  default:
14729
15200
  if (evt.key.length === 1) highlightedIndex.value = unref(rawOptions).findIndex((o) => o.label.toLowerCase().startsWith(evt.key.toLowerCase()));
@@ -14820,87 +15291,99 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
14820
15291
  direction: "vertical",
14821
15292
  "use-anchor-width": ""
14822
15293
  }, {
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,
15294
+ default: withCtx(() => [
15295
+ __props.isSearchable ? (openBlock(), createBlock(FluxFormInput_default, {
15296
+ key: 0,
15297
+ modelValue: modelSearch.value,
15298
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelSearch.value = $event),
15299
+ ref: "searchInputElement",
15300
+ "auto-complete": "off",
15301
+ class: normalizeClass(unref(Form_module_default).formSelectInput),
15302
+ type: "search",
15303
+ "icon-trailing": "magnifying-glass",
15304
+ placeholder: unref(translate)("flux.search"),
15305
+ onKeydown: onKeyDown
15306
+ }, null, 8, [
15307
+ "modelValue",
15308
+ "class",
15309
+ "placeholder"
15310
+ ])) : createCommentVNode("", true),
15311
+ canCreate.value ? (openBlock(), createBlock(FluxMenu_default, { key: 1 }, {
15312
+ default: withCtx(() => [createVNode(FluxMenuItem_default, {
15313
+ "icon-leading": "plus",
15314
+ label: unref(translate)("flux.createOption", { value: trimmedSearch.value }),
14888
15315
  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
- }))]),
15316
+ onClick: _cache[2] || (_cache[2] = ($event) => create())
15317
+ }, null, 8, ["label"])]),
15318
+ _: 1
15319
+ })) : createCommentVNode("", true),
15320
+ !__props.isLoading && __props.options.length === 0 && !canCreate.value ? (openBlock(), createBlock(FluxMenu_default, { key: 2 }, {
15321
+ default: withCtx(() => [createVNode(FluxMenuSubHeader_default, { label: unref(translate)("flux.noItems") }, null, 8, ["label"])]),
15322
+ _: 1
15323
+ })) : __props.options.length > 0 ? (openBlock(), createBlock(FluxMenu_default, { key: 3 }, {
15324
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, ([item, subItems], index) => {
15325
+ return openBlock(), createElementBlock(Fragment, { key: `group-${index}` }, [createVNode(FluxMenuGroup_default, null, {
15326
+ default: withCtx(() => [unref(isFluxFormSelectGroup)(item) ? (openBlock(), createBlock(FluxMenuSubHeader_default, {
15327
+ key: 0,
15328
+ "icon-leading": item.icon,
15329
+ label: item.label
15330
+ }, null, 8, ["icon-leading", "label"])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(subItems, (subItem, index) => {
15331
+ return openBlock(), createElementBlock(Fragment, null, [unref(isFluxFormSelectOption)(subItem) ? (openBlock(), createBlock(FluxMenuItem_default, {
15332
+ ref_for: true,
15333
+ ref: "optionElements",
15334
+ key: index,
15335
+ command: subItem.command,
15336
+ "command-icon": subItem.commandIcon,
15337
+ "icon-leading": subItem.icon,
15338
+ "image-alt": subItem.imageAlt,
15339
+ "image-src": subItem.imageSrc,
15340
+ "is-active": !!__props.selected.find((so) => so.value === subItem.value),
15341
+ "is-highlighted": highlightedId.value === subItem.value,
15342
+ label: subItem.label,
15343
+ type: "button",
15344
+ onClick: ($event) => select(subItem.value)
15345
+ }, null, 8, [
15346
+ "command",
15347
+ "command-icon",
15348
+ "icon-leading",
15349
+ "image-alt",
15350
+ "image-src",
15351
+ "is-active",
15352
+ "is-highlighted",
15353
+ "label",
15354
+ "onClick"
15355
+ ])) : createCommentVNode("", true)], 64);
15356
+ }), 256))]),
15357
+ _: 2
15358
+ }, 1024), unref(isFluxFormSelectOption)(item) ? (openBlock(), createBlock(FluxMenuItem_default, {
15359
+ ref_for: true,
15360
+ ref: "optionElements",
15361
+ key: `item-${index}`,
15362
+ command: item.command,
15363
+ "command-icon": item.commandIcon,
15364
+ "icon-leading": item.icon,
15365
+ "image-alt": item.imageAlt,
15366
+ "image-src": item.imageSrc,
15367
+ "is-active": !!__props.selected.find((so) => so.value === item.value),
15368
+ "is-highlighted": highlightedId.value === item.value,
15369
+ label: item.label,
15370
+ type: "button",
15371
+ onClick: ($event) => select(item.value)
15372
+ }, null, 8, [
15373
+ "command",
15374
+ "command-icon",
15375
+ "icon-leading",
15376
+ "image-alt",
15377
+ "image-src",
15378
+ "is-active",
15379
+ "is-highlighted",
15380
+ "label",
15381
+ "onClick"
15382
+ ])) : createCommentVNode("", true)], 64);
15383
+ }), 128))]),
15384
+ _: 1
15385
+ })) : createCommentVNode("", true)
15386
+ ]),
14904
15387
  _: 1
14905
15388
  }, 8, ["class", "anchor"])) : createCommentVNode("", true)]),
14906
15389
  _: 1
@@ -14950,7 +15433,7 @@ var FluxTicks_default = /* @__PURE__ */ defineComponent({
14950
15433
  });
14951
15434
  //#endregion
14952
15435
  //#region src/component/primitive/SliderBase.vue?vue&type=script&setup=true&lang.ts
14953
- var _hoisted_1$47 = ["aria-disabled"];
15436
+ var _hoisted_1$53 = ["aria-disabled"];
14954
15437
  //#endregion
14955
15438
  //#region src/component/primitive/SliderBase.vue
14956
15439
  var SliderBase_default = /* @__PURE__ */ defineComponent({
@@ -15006,13 +15489,13 @@ var SliderBase_default = /* @__PURE__ */ defineComponent({
15006
15489
  key: 0,
15007
15490
  lower: __props.min,
15008
15491
  upper: __props.max
15009
- }, null, 8, ["lower", "upper"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$47);
15492
+ }, null, 8, ["lower", "upper"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$53);
15010
15493
  };
15011
15494
  }
15012
15495
  });
15013
15496
  //#endregion
15014
15497
  //#region src/component/primitive/SliderThumb.vue?vue&type=script&setup=true&lang.ts
15015
- var _hoisted_1$46 = [
15498
+ var _hoisted_1$52 = [
15016
15499
  "aria-disabled",
15017
15500
  "aria-label",
15018
15501
  "aria-valuemax",
@@ -15071,7 +15554,7 @@ var SliderThumb_default = /* @__PURE__ */ defineComponent({
15071
15554
  type: "button",
15072
15555
  onKeydown: onKeyDown,
15073
15556
  onPointerdown: _cache[0] || (_cache[0] = ($event) => $emit("grab", $event))
15074
- }, null, 46, _hoisted_1$46);
15557
+ }, null, 46, _hoisted_1$52);
15075
15558
  };
15076
15559
  }
15077
15560
  });
@@ -15176,7 +15659,7 @@ var Divider_module_default = {
15176
15659
  };
15177
15660
  //#endregion
15178
15661
  //#region src/component/FluxSeparator.vue?vue&type=script&setup=true&lang.ts
15179
- var _hoisted_1$45 = ["aria-orientation"];
15662
+ var _hoisted_1$51 = ["aria-orientation"];
15180
15663
  //#endregion
15181
15664
  //#region src/component/FluxSeparator.vue
15182
15665
  var FluxSeparator_default = /* @__PURE__ */ defineComponent({
@@ -15188,7 +15671,7 @@ var FluxSeparator_default = /* @__PURE__ */ defineComponent({
15188
15671
  class: normalizeClass(__props.direction === "horizontal" ? unref(Divider_module_default).separatorHorizontal : unref(Divider_module_default).separatorVertical),
15189
15672
  role: "separator",
15190
15673
  "aria-orientation": __props.direction
15191
- }, null, 10, _hoisted_1$45);
15674
+ }, null, 10, _hoisted_1$51);
15192
15675
  };
15193
15676
  }
15194
15677
  });
@@ -15430,16 +15913,16 @@ var FluxFormSlider_default = /* @__PURE__ */ defineComponent({
15430
15913
  });
15431
15914
  //#endregion
15432
15915
  //#region src/css/component/primitive/CoordinatePicker.module.scss
15433
- var { "sliderThumb": _0$9 } = Slider_module_default;
15916
+ var { "sliderThumb": _0$11 } = Slider_module_default;
15434
15917
  var CoordinatePicker_module_default = {
15435
15918
  coordinatePicker: `coordinate-picker`,
15436
- coordinatePickerThumb: `coordinate-picker-thumb ${_0$9}`,
15919
+ coordinatePickerThumb: `coordinate-picker-thumb ${_0$11}`,
15437
15920
  isDisabled: `is-disabled`,
15438
15921
  isDragging: `is-dragging`
15439
15922
  };
15440
15923
  //#endregion
15441
15924
  //#region src/component/primitive/CoordinatePickerThumb.vue?vue&type=script&setup=true&lang.ts
15442
- var _hoisted_1$44 = [
15925
+ var _hoisted_1$50 = [
15443
15926
  "aria-disabled",
15444
15927
  "aria-valuetext",
15445
15928
  "tabindex"
@@ -15495,13 +15978,13 @@ var CoordinatePickerThumb_default = /* @__PURE__ */ defineComponent({
15495
15978
  type: "button",
15496
15979
  onKeydown: onKeyDown,
15497
15980
  onPointerdown: _cache[0] || (_cache[0] = ($event) => $emit("grab", $event))
15498
- }, null, 46, _hoisted_1$44);
15981
+ }, null, 46, _hoisted_1$50);
15499
15982
  };
15500
15983
  }
15501
15984
  });
15502
15985
  //#endregion
15503
15986
  //#region src/component/primitive/CoordinatePicker.vue?vue&type=script&setup=true&lang.ts
15504
- var _hoisted_1$43 = ["aria-disabled", "aria-label"];
15987
+ var _hoisted_1$49 = ["aria-disabled", "aria-label"];
15505
15988
  //#endregion
15506
15989
  //#region src/component/primitive/CoordinatePicker.vue
15507
15990
  var CoordinatePicker_default = /* @__PURE__ */ defineComponent({
@@ -15611,7 +16094,7 @@ var CoordinatePicker_default = /* @__PURE__ */ defineComponent({
15611
16094
  "disabled",
15612
16095
  "is-dragging",
15613
16096
  "position"
15614
- ])], 42, _hoisted_1$43);
16097
+ ])], 42, _hoisted_1$49);
15615
16098
  };
15616
16099
  }
15617
16100
  });
@@ -15949,6 +16432,7 @@ var FluxPrimaryButton_default = /* @__PURE__ */ defineComponent({
15949
16432
  disabled: { type: Boolean },
15950
16433
  iconLeading: {},
15951
16434
  iconTrailing: {},
16435
+ isActive: { type: Boolean },
15952
16436
  isFilled: { type: Boolean },
15953
16437
  isLoading: { type: Boolean },
15954
16438
  isSubmit: { type: Boolean },
@@ -15972,6 +16456,7 @@ var FluxPrimaryButton_default = /* @__PURE__ */ defineComponent({
15972
16456
  disabled: __props.disabled,
15973
16457
  iconLeading: __props.iconLeading,
15974
16458
  iconTrailing: __props.iconTrailing,
16459
+ isActive: __props.isActive,
15975
16460
  isFilled: __props.isFilled,
15976
16461
  isLoading: __props.isLoading,
15977
16462
  isSubmit: __props.isSubmit,
@@ -15984,6 +16469,7 @@ var FluxPrimaryButton_default = /* @__PURE__ */ defineComponent({
15984
16469
  to: __props.to
15985
16470
  }, {
15986
16471
  "css-class": unref(Button_module_default).primaryButton,
16472
+ "css-class-active": unref(Button_module_default).isActive,
15987
16473
  "css-class-icon": unref(Button_module_default).primaryButtonIcon,
15988
16474
  "css-class-label": unref(Button_module_default).primaryButtonLabel,
15989
16475
  onClick: _cache[0] || (_cache[0] = ($event) => $emit("click", $event)),
@@ -15996,6 +16482,7 @@ var FluxPrimaryButton_default = /* @__PURE__ */ defineComponent({
15996
16482
  };
15997
16483
  })]), 1040, [
15998
16484
  "css-class",
16485
+ "css-class-active",
15999
16486
  "css-class-icon",
16000
16487
  "css-class-label"
16001
16488
  ]);
@@ -16004,14 +16491,14 @@ var FluxPrimaryButton_default = /* @__PURE__ */ defineComponent({
16004
16491
  });
16005
16492
  //#endregion
16006
16493
  //#region src/component/FluxColorSelect.vue?vue&type=script&setup=true&lang.ts
16007
- var _hoisted_1$42 = [
16494
+ var _hoisted_1$48 = [
16008
16495
  "aria-checked",
16009
16496
  "aria-label",
16010
16497
  "disabled",
16011
16498
  "tabindex",
16012
16499
  "onClick"
16013
16500
  ];
16014
- var _hoisted_2$15 = [
16501
+ var _hoisted_2$17 = [
16015
16502
  "disabled",
16016
16503
  "tabindex",
16017
16504
  "aria-label",
@@ -16079,7 +16566,7 @@ var FluxColorSelect_default = /* @__PURE__ */ defineComponent({
16079
16566
  class: normalizeClass(unref(Color_module_default).colorSelectCheck),
16080
16567
  name: "check",
16081
16568
  size: 14
16082
- }, null, 8, ["class"])], 14, _hoisted_1$42);
16569
+ }, null, 8, ["class"])], 14, _hoisted_1$48);
16083
16570
  }), 128)), __props.isCustomAllowed ? (openBlock(), createBlock(FluxFlyout_default, { key: 0 }, {
16084
16571
  opener: withCtx(({ open }) => [createElementVNode("button", {
16085
16572
  class: normalizeClass(unref(Color_module_default).colorSelectCustom),
@@ -16091,7 +16578,7 @@ var FluxColorSelect_default = /* @__PURE__ */ defineComponent({
16091
16578
  }, [createVNode(FluxIcon_default, {
16092
16579
  name: "ellipsis-h",
16093
16580
  size: 16
16094
- })], 10, _hoisted_2$15)]),
16581
+ })], 10, _hoisted_2$17)]),
16095
16582
  default: withCtx(({ close }) => [createVNode(FluxColorPicker_default, {
16096
16583
  modelValue: customColor.value,
16097
16584
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => customColor.value = $event),
@@ -16132,9 +16619,96 @@ var FluxContainer_default = /* @__PURE__ */ defineComponent({
16132
16619
  }
16133
16620
  });
16134
16621
  //#endregion
16622
+ //#region src/css/component/ContextMenu.module.scss
16623
+ var { "basePane": _0$10 } = Pane_module_default$1;
16624
+ var ContextMenu_module_default = {
16625
+ contextMenu: `context-menu`,
16626
+ contextMenuPopup: `context-menu-popup ${_0$10}`
16627
+ };
16628
+ //#endregion
16629
+ //#region src/component/FluxContextMenu.vue
16630
+ var FluxContextMenu_default = /* @__PURE__ */ defineComponent({
16631
+ __name: "FluxContextMenu",
16632
+ props: {
16633
+ debugCone: {
16634
+ type: Boolean,
16635
+ default: false
16636
+ },
16637
+ disabled: { type: Boolean },
16638
+ position: { default: "bottom-left" }
16639
+ },
16640
+ emits: ["open", "close"],
16641
+ setup(__props, { emit: __emit }) {
16642
+ const emit = __emit;
16643
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
16644
+ const popupRef = useTemplateRef("popup");
16645
+ const isOpen = ref(false);
16646
+ const cursor = reactive({
16647
+ x: 0,
16648
+ y: 0
16649
+ });
16650
+ const virtualAnchor = { $el: { getBoundingClientRect: () => new DOMRect(cursor.x, cursor.y, 0, 0) } };
16651
+ const menuFlyout = useMenuFlyoutProvider({
16652
+ debugCone: toRef(() => __props.debugCone),
16653
+ onCloseAll: () => close()
16654
+ });
16655
+ I$1(popupRef, { disable: computed(() => menuFlyout.keyboardStack.value.length > 0) });
16656
+ function onContextMenu(evt) {
16657
+ if (disabled.value) return;
16658
+ evt.preventDefault();
16659
+ cursor.x = evt.clientX;
16660
+ cursor.y = evt.clientY;
16661
+ isOpen.value = true;
16662
+ emit("open", evt);
16663
+ }
16664
+ function close() {
16665
+ if (!isOpen.value) return;
16666
+ isOpen.value = false;
16667
+ emit("close");
16668
+ }
16669
+ if (!C$2) {
16670
+ O$1(ref(window), "pointerdown", (evt) => {
16671
+ if (!isOpen.value) return;
16672
+ const target = evt.target;
16673
+ const root = popupRef.value?.$el ?? null;
16674
+ if (root && target && root.contains(target) || menuFlyout.isInsidePopups(target)) return;
16675
+ close();
16676
+ }, { capture: true });
16677
+ O$1(ref(window), "keydown", (evt) => {
16678
+ if (isOpen.value && evt.key === "Escape") close();
16679
+ });
16680
+ O$1(ref(window), "scroll", () => {
16681
+ if (isOpen.value) close();
16682
+ }, { capture: true });
16683
+ }
16684
+ return (_ctx, _cache) => {
16685
+ return openBlock(), createElementBlock("div", {
16686
+ class: normalizeClass(unref(ContextMenu_module_default).contextMenu),
16687
+ onContextmenu: onContextMenu
16688
+ }, [renderSlot(_ctx.$slots, "default"), (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(FluxFadeTransition_default), null, {
16689
+ default: withCtx(() => [isOpen.value ? (openBlock(), createBlock(unref(AnchorPopup_default), {
16690
+ key: 0,
16691
+ ref: "popup",
16692
+ anchor: virtualAnchor,
16693
+ class: normalizeClass(unref(ContextMenu_module_default).contextMenuPopup),
16694
+ "clamp-to-viewport": "",
16695
+ margin: 2,
16696
+ position: __props.position,
16697
+ role: "menu",
16698
+ onClick: _cache[0] || (_cache[0] = ($event) => close())
16699
+ }, {
16700
+ default: withCtx(() => [renderSlot(_ctx.$slots, "menu", normalizeProps(guardReactiveProps({ close })))]),
16701
+ _: 3
16702
+ }, 8, ["class", "position"])) : createCommentVNode("", true)]),
16703
+ _: 3
16704
+ })]))], 34);
16705
+ };
16706
+ }
16707
+ });
16708
+ //#endregion
16135
16709
  //#region src/component/FluxFormCheckbox.vue?vue&type=script&setup=true&lang.ts
16136
- var _hoisted_1$41 = ["for"];
16137
- var _hoisted_2$14 = [
16710
+ var _hoisted_1$47 = ["for"];
16711
+ var _hoisted_2$16 = [
16138
16712
  "id",
16139
16713
  "checked",
16140
16714
  "disabled",
@@ -16209,7 +16783,7 @@ var FluxFormCheckbox_default = /* @__PURE__ */ defineComponent({
16209
16783
  "aria-invalid": errorResolved.value ? true : void 0,
16210
16784
  onChange,
16211
16785
  onClick
16212
- }, null, 42, _hoisted_2$14),
16786
+ }, null, 42, _hoisted_2$16),
16213
16787
  createElementVNode("button", {
16214
16788
  "aria-hidden": "true",
16215
16789
  class: normalizeClass(unref(Form_module_default).formCheckboxElement),
@@ -16233,7 +16807,7 @@ var FluxFormCheckbox_default = /* @__PURE__ */ defineComponent({
16233
16807
  key: 1,
16234
16808
  class: normalizeClass(unref(Form_module_default).formCheckboxSubLabel)
16235
16809
  }, toDisplayString(__props.subLabel), 3)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)
16236
- ], 10, _hoisted_1$41);
16810
+ ], 10, _hoisted_1$47);
16237
16811
  };
16238
16812
  }
16239
16813
  });
@@ -16305,16 +16879,16 @@ var FluxFormSelect_default = /* @__PURE__ */ defineComponent({
16305
16879
  });
16306
16880
  //#endregion
16307
16881
  //#region src/css/component/Pagination.module.scss
16308
- var { "secondaryButtonLabel": _0$8, "secondaryButton": _1$2, "secondaryButtonIcon": _2$1 } = Button_module_default;
16882
+ var { "secondaryButton": _0$9, "secondaryButtonIcon": _1$2, "secondaryButtonLabel": _2$1 } = Button_module_default;
16309
16883
  var Pagination_module_default = {
16310
16884
  pagination: `pagination`,
16311
- paginationButton: `pagination-button ${_1$2}`,
16885
+ paginationButton: `pagination-button ${_0$9}`,
16312
16886
  secondaryButton: `secondary-button`,
16313
16887
  paginationButtonArrow: `pagination-button-arrow`,
16314
16888
  paginationButtonCurrent: `pagination-button-current`,
16315
16889
  paginationButtonSpacer: `pagination-button-spacer`,
16316
- paginationButtonIcon: `pagination-button-icon ${_2$1}`,
16317
- paginationButtonLabel: `pagination-button-label ${_0$8}`,
16890
+ paginationButtonIcon: `pagination-button-icon ${_1$2}`,
16891
+ paginationButtonLabel: `pagination-button-label ${_2$1}`,
16318
16892
  paginationBar: `pagination-bar`,
16319
16893
  paginationBarLimit: `pagination-bar-limit`,
16320
16894
  paginationBarLimitDisplayingOf: `pagination-bar-limit-displaying-of`,
@@ -16331,6 +16905,7 @@ var FluxPaginationButton_default = /* @__PURE__ */ defineComponent({
16331
16905
  disabled: { type: Boolean },
16332
16906
  iconLeading: {},
16333
16907
  iconTrailing: {},
16908
+ isActive: { type: Boolean },
16334
16909
  isFilled: { type: Boolean },
16335
16910
  isLoading: { type: Boolean },
16336
16911
  isSubmit: { type: Boolean },
@@ -16394,7 +16969,7 @@ var FluxPaginationButton_default = /* @__PURE__ */ defineComponent({
16394
16969
  });
16395
16970
  //#endregion
16396
16971
  //#region src/component/FluxPagination.vue?vue&type=script&setup=true&lang.ts
16397
- var _hoisted_1$40 = ["aria-label"];
16972
+ var _hoisted_1$46 = ["aria-label"];
16398
16973
  //#endregion
16399
16974
  //#region src/component/FluxPagination.vue
16400
16975
  var FluxPagination_default = /* @__PURE__ */ defineComponent({
@@ -16509,7 +17084,7 @@ var FluxPagination_default = /* @__PURE__ */ defineComponent({
16509
17084
  "aria-label": unref(translate)("flux.next"),
16510
17085
  onClick: next
16511
17086
  }, null, 8, ["disabled", "aria-label"])) : createCommentVNode("", true)
16512
- ], 10, _hoisted_1$40);
17087
+ ], 10, _hoisted_1$46);
16513
17088
  };
16514
17089
  }
16515
17090
  });
@@ -16576,9 +17151,9 @@ var FluxPaginationBar_default = /* @__PURE__ */ defineComponent({
16576
17151
  });
16577
17152
  //#endregion
16578
17153
  //#region src/css/component/Table.module.scss
16579
- var { "basePaneElement": _0$7, "basePaneLoader": _1$1 } = Pane_module_default$1;
17154
+ var { "basePaneElement": _0$8, "basePaneLoader": _1$1 } = Pane_module_default$1;
16580
17155
  var Table_module_default = {
16581
- table: `table ${_0$7}`,
17156
+ table: `table ${_0$8}`,
16582
17157
  tableBase: `table-base`,
16583
17158
  tableFill: `table-fill`,
16584
17159
  tablePagination: `table-pagination`,
@@ -16601,13 +17176,21 @@ var Table_module_default = {
16601
17176
  tableBar: `table-bar table-cell`,
16602
17177
  tableBarContent: `table-bar-content table-cell-content`,
16603
17178
  tableSort: `table-sort`,
16604
- basePaneStructure: `base-pane-structure`
17179
+ basePaneStructure: `base-pane-structure`,
17180
+ tableCellExpand: `table-cell-expand`,
17181
+ tableExpandToggle: `table-expand-toggle`,
17182
+ isExpanded: `is-expanded`,
17183
+ tableExpandContent: `table-expand-content`
16605
17184
  };
16606
17185
  //#endregion
17186
+ //#region src/component/FluxTableCell.vue?vue&type=script&setup=true&lang.ts
17187
+ var _hoisted_1$45 = ["colspan"];
17188
+ //#endregion
16607
17189
  //#region src/component/FluxTableCell.vue
16608
17190
  var FluxTableCell_default = /* @__PURE__ */ defineComponent({
16609
17191
  __name: "FluxTableCell",
16610
17192
  props: {
17193
+ colspan: {},
16611
17194
  contentDirection: { default: "row" },
16612
17195
  contentGap: {}
16613
17196
  },
@@ -16616,6 +17199,7 @@ var FluxTableCell_default = /* @__PURE__ */ defineComponent({
16616
17199
  return (_ctx, _cache) => {
16617
17200
  return openBlock(), createElementBlock("td", {
16618
17201
  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)),
17202
+ colspan: __props.colspan,
16619
17203
  role: "cell"
16620
17204
  }, [renderSlot(_ctx.$slots, "content", {}, () => [createElementVNode("div", {
16621
17205
  class: normalizeClass(unref(Table_module_default).tableCellContent),
@@ -16623,7 +17207,7 @@ var FluxTableCell_default = /* @__PURE__ */ defineComponent({
16623
17207
  flexFlow: __props.contentDirection,
16624
17208
  gap: __props.contentGap != null ? `${__props.contentGap}px` : void 0
16625
17209
  })
16626
- }, [renderSlot(_ctx.$slots, "default")], 6)])], 2);
17210
+ }, [renderSlot(_ctx.$slots, "default")], 6)])], 10, _hoisted_1$45);
16627
17211
  };
16628
17212
  }
16629
17213
  });
@@ -16640,9 +17224,9 @@ var FluxTableRow_default = /* @__PURE__ */ defineComponent({
16640
17224
  });
16641
17225
  //#endregion
16642
17226
  //#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 };
17227
+ var _hoisted_1$44 = { key: 0 };
17228
+ var _hoisted_2$15 = { key: 1 };
17229
+ var _hoisted_3$5 = { key: 2 };
16646
17230
  //#endregion
16647
17231
  //#region src/component/FluxTable.vue
16648
17232
  var FluxTable_default = /* @__PURE__ */ defineComponent({
@@ -16689,8 +17273,8 @@ var FluxTable_default = /* @__PURE__ */ defineComponent({
16689
17273
  }, [
16690
17274
  createElementVNode("table", { class: normalizeClass(unref(Table_module_default).tableBase) }, [
16691
17275
  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, {
17276
+ slots.header ? (openBlock(), createElementBlock("thead", _hoisted_1$44, [renderSlot(_ctx.$slots, "header")])) : createCommentVNode("", true),
17277
+ slots.default ? (openBlock(), createElementBlock("tbody", _hoisted_2$15, [renderSlot(_ctx.$slots, "default"), __props.fillColumns ? (openBlock(), createBlock(FluxTableRow_default, {
16694
17278
  key: 0,
16695
17279
  class: normalizeClass(unref(Table_module_default).tableFill)
16696
17280
  }, {
@@ -16699,7 +17283,7 @@ var FluxTable_default = /* @__PURE__ */ defineComponent({
16699
17283
  }), 128))]),
16700
17284
  _: 1
16701
17285
  }, 8, ["class"])) : createCommentVNode("", true)])) : createCommentVNode("", true),
16702
- slots.footer ? (openBlock(), createElementBlock("tfoot", _hoisted_3$4, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true),
17286
+ slots.footer ? (openBlock(), createElementBlock("tfoot", _hoisted_3$5, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true),
16703
17287
  slots.caption ? (openBlock(), createElementBlock("caption", {
16704
17288
  key: 3,
16705
17289
  style: normalizeStyle({ captionSide: __props.captionSide })
@@ -16723,8 +17307,8 @@ var FluxTable_default = /* @__PURE__ */ defineComponent({
16723
17307
  });
16724
17308
  //#endregion
16725
17309
  //#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"];
17310
+ var _hoisted_1$43 = ["aria-sort"];
17311
+ var _hoisted_2$14 = ["aria-label", "onClick"];
16728
17312
  //#endregion
16729
17313
  //#region src/component/FluxTableHeader.vue
16730
17314
  var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
@@ -16763,7 +17347,7 @@ var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
16763
17347
  }, [createVNode(FluxIcon_default, {
16764
17348
  size: 16,
16765
17349
  name: sortingIcon.value
16766
- }, null, 8, ["name"])], 10, _hoisted_2$12)]),
17350
+ }, null, 8, ["name"])], 10, _hoisted_2$14)]),
16767
17351
  default: withCtx(() => [createVNode(FluxMenu_default, null, {
16768
17352
  default: withCtx(() => [createVNode(FluxMenuGroup_default, null, {
16769
17353
  default: withCtx(() => [createVNode(FluxMenuItem_default, {
@@ -16790,7 +17374,7 @@ var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
16790
17374
  _: 1
16791
17375
  })]),
16792
17376
  _: 1
16793
- })) : createCommentVNode("", true)], 2)], 14, _hoisted_1$38);
17377
+ })) : createCommentVNode("", true)], 2)], 14, _hoisted_1$43);
16794
17378
  };
16795
17379
  }
16796
17380
  });
@@ -16799,6 +17383,7 @@ var FluxTableHeader_default = /* @__PURE__ */ defineComponent({
16799
17383
  var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16800
17384
  __name: "FluxDataTable",
16801
17385
  props: /*@__PURE__*/ mergeModels({
17386
+ expandMode: { default: "multiple" },
16802
17387
  fillColumns: {},
16803
17388
  isBordered: {
16804
17389
  type: Boolean,
@@ -16829,23 +17414,32 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16829
17414
  uniqueKey: {}
16830
17415
  }, {
16831
17416
  "selected": {},
16832
- "selectedModifiers": {}
17417
+ "selectedModifiers": {},
17418
+ "expanded": { default: () => [] },
17419
+ "expandedModifiers": {}
16833
17420
  }),
16834
- emits: /*@__PURE__*/ mergeModels(["limit", "navigate"], ["update:selected"]),
17421
+ emits: /*@__PURE__*/ mergeModels(["limit", "navigate"], ["update:selected", "update:expanded"]),
16835
17422
  setup(__props, { emit: __emit }) {
16836
17423
  const IGNORED_SLOTS = [
16837
17424
  "filter",
16838
17425
  "header",
16839
17426
  "footer",
16840
17427
  "colgroups",
16841
- "pagination"
17428
+ "pagination",
17429
+ "expandable"
16842
17430
  ];
16843
17431
  const emit = __emit;
16844
17432
  const selected = useModel(__props, "selected");
17433
+ const expanded = useModel(__props, "expanded");
16845
17434
  const slots = useSlots();
16846
17435
  const table = useTemplateRef("table");
16847
17436
  const treeDisabled = useDisabledInjection_default();
17437
+ const translate = useTranslate_default();
16848
17438
  const limitedItems = computed(() => __props.items.slice(0, __props.perPage));
17439
+ const hasExpandable = computed(() => "expandable" in slots);
17440
+ const columnCount = computed(() => {
17441
+ return Object.keys(slots).filter((name) => !IGNORED_SLOTS.includes(name)).length + (__props.selectionMode ? 1 : 0) + (unref(hasExpandable) ? 1 : 0);
17442
+ });
16849
17443
  const currentPageIds = computed(() => {
16850
17444
  if (!__props.uniqueKey) return [];
16851
17445
  return unref(limitedItems).map((item) => item[__props.uniqueKey]);
@@ -16897,6 +17491,20 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16897
17491
  }
16898
17492
  selected.value = current.filter((id) => !ids.includes(id));
16899
17493
  }
17494
+ function isItemExpanded(item) {
17495
+ const id = getItemId(item);
17496
+ return id !== void 0 && unref(expanded).includes(id);
17497
+ }
17498
+ function toggleExpand(item) {
17499
+ const id = getItemId(item);
17500
+ if (id === void 0) return;
17501
+ const current = unref(expanded);
17502
+ if (current.includes(id)) {
17503
+ expanded.value = current.filter((v) => v !== id);
17504
+ return;
17505
+ }
17506
+ expanded.value = __props.expandMode === "single" ? [id] : [...current, id];
17507
+ }
16900
17508
  watch(() => __props.items, () => {
16901
17509
  unref(table)?.$el.scrollTo(0, 0);
16902
17510
  });
@@ -16912,41 +17520,75 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16912
17520
  "is-striped": __props.isStriped
16913
17521
  }, createSlots({
16914
17522
  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,
17523
+ return openBlock(), createElementBlock(Fragment, { key: __props.uniqueKey ? item[__props.uniqueKey] : index }, [createVNode(FluxTableRow_default, {
16917
17524
  class: normalizeClass(__props.selectionMode && !unref(treeDisabled) && unref(Table_module_default).isSelectableRow),
16918
17525
  "is-selected": __props.selectionMode ? isItemSelected(item) : false,
16919
17526
  onClick: ($event) => onRowClick(item, $event)
16920
17527
  }, {
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({
17528
+ default: withCtx(() => [
17529
+ __props.selectionMode ? (openBlock(), createBlock(FluxTableCell_default, {
16932
17530
  key: 0,
16933
- ref_for: true
17531
+ class: normalizeClass(unref(Table_module_default).tableCellSelection)
16934
17532
  }, {
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))]),
17533
+ default: withCtx(() => [createVNode(FluxFormCheckbox_default, {
17534
+ "model-value": isItemSelected(item),
17535
+ "onUpdate:modelValue": ($event) => onSelectRow(item)
17536
+ }, null, 8, ["model-value", "onUpdate:modelValue"])]),
17537
+ _: 2
17538
+ }, 1032, ["class"])) : createCommentVNode("", true),
17539
+ hasExpandable.value ? (openBlock(), createBlock(FluxTableCell_default, {
17540
+ key: 1,
17541
+ class: normalizeClass(unref(Table_module_default).tableCellExpand)
17542
+ }, {
17543
+ default: withCtx(() => [createVNode(FluxAction_default, {
17544
+ class: normalizeClass(unref(clsx)(unref(Table_module_default).tableExpandToggle, isItemExpanded(item) && unref(Table_module_default).isExpanded)),
17545
+ icon: "chevron-right",
17546
+ "aria-expanded": isItemExpanded(item),
17547
+ "aria-label": isItemExpanded(item) ? unref(translate)("flux.collapseRow") : unref(translate)("flux.expandRow"),
17548
+ onClick: ($event) => toggleExpand(item)
17549
+ }, null, 8, [
17550
+ "class",
17551
+ "aria-expanded",
17552
+ "aria-label",
17553
+ "onClick"
17554
+ ])]),
17555
+ _: 2
17556
+ }, 1032, ["class"])) : createCommentVNode("", true),
17557
+ (openBlock(), createElementBlock(Fragment, null, renderList(slots, (_, name) => {
17558
+ return openBlock(), createElementBlock(Fragment, null, [!IGNORED_SLOTS.includes(name) ? renderSlot(_ctx.$slots, name, mergeProps({
17559
+ key: 0,
17560
+ ref_for: true
17561
+ }, {
17562
+ index,
17563
+ item,
17564
+ items: limitedItems.value,
17565
+ page: __props.page,
17566
+ perPage: __props.perPage,
17567
+ total: __props.total,
17568
+ isSelected: isItemSelected(item)
17569
+ })) : createCommentVNode("", true)], 64);
17570
+ }), 64))
17571
+ ]),
16944
17572
  _: 2
16945
17573
  }, 1032, [
16946
17574
  "class",
16947
17575
  "is-selected",
16948
17576
  "onClick"
16949
- ]);
17577
+ ]), hasExpandable.value && isItemExpanded(item) ? (openBlock(), createBlock(FluxTableRow_default, {
17578
+ key: 0,
17579
+ class: normalizeClass(unref(Table_module_default).tableExpandRow)
17580
+ }, {
17581
+ default: withCtx(() => [createVNode(FluxTableCell_default, { colspan: columnCount.value }, {
17582
+ content: withCtx(() => [createElementVNode("div", { class: normalizeClass(unref(Table_module_default).tableExpandContent) }, [renderSlot(_ctx.$slots, "expandable", mergeProps({ ref_for: true }, {
17583
+ index,
17584
+ item,
17585
+ isExpanded: true,
17586
+ toggle: () => toggleExpand(item)
17587
+ }))], 2)]),
17588
+ _: 2
17589
+ }, 1032, ["colspan"])]),
17590
+ _: 2
17591
+ }, 1032, ["class"])) : createCommentVNode("", true)], 64);
16950
17592
  }), 128))]),
16951
17593
  _: 2
16952
17594
  }, [
@@ -16955,7 +17597,7 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16955
17597
  fn: withCtx(() => [renderSlot(_ctx.$slots, "colgroups")]),
16956
17598
  key: "0"
16957
17599
  } : void 0,
16958
- "header" in slots || __props.selectionMode ? {
17600
+ "header" in slots || __props.selectionMode || hasExpandable.value ? {
16959
17601
  name: "header",
16960
17602
  fn: withCtx(() => [renderSlot(_ctx.$slots, "filter", normalizeProps(guardReactiveProps({
16961
17603
  page: __props.page,
@@ -16963,23 +17605,31 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
16963
17605
  items: limitedItems.value,
16964
17606
  total: __props.total
16965
17607
  }))), 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, {
17608
+ default: withCtx(() => [
17609
+ __props.selectionMode ? (openBlock(), createBlock(FluxTableHeader_default, {
16972
17610
  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
- })))]),
17611
+ "is-shrinking": "",
17612
+ class: normalizeClass(unref(Table_module_default).tableCellSelection)
17613
+ }, {
17614
+ default: withCtx(() => [__props.selectionMode === "multiple" ? (openBlock(), createBlock(FluxFormCheckbox_default, {
17615
+ key: 0,
17616
+ "model-value": selectAllState.value,
17617
+ "onUpdate:modelValue": onSelectAll
17618
+ }, null, 8, ["model-value"])) : createCommentVNode("", true)]),
17619
+ _: 1
17620
+ }, 8, ["class"])) : createCommentVNode("", true),
17621
+ hasExpandable.value ? (openBlock(), createBlock(FluxTableHeader_default, {
17622
+ key: 1,
17623
+ "is-shrinking": "",
17624
+ class: normalizeClass(unref(Table_module_default).tableCellExpand)
17625
+ }, null, 8, ["class"])) : createCommentVNode("", true),
17626
+ renderSlot(_ctx.$slots, "header", normalizeProps(guardReactiveProps({
17627
+ page: __props.page,
17628
+ perPage: __props.perPage,
17629
+ items: limitedItems.value,
17630
+ total: __props.total
17631
+ })))
17632
+ ]),
16983
17633
  _: 3
16984
17634
  })]),
16985
17635
  key: "1"
@@ -17030,6 +17680,55 @@ var FluxDataTable_default = /* @__PURE__ */ defineComponent({
17030
17680
  };
17031
17681
  }
17032
17682
  });
17683
+ var DescriptionList_module_default = {
17684
+ descriptionList: `description-list`,
17685
+ descriptionListHeader: `description-list-header`,
17686
+ descriptionListItems: `description-list-items`,
17687
+ descriptionItem: `description-item`,
17688
+ isStacked: `is-stacked`,
17689
+ descriptionItemValue: `description-item-value`,
17690
+ descriptionItemTerm: `description-item-term`,
17691
+ descriptionItemIcon: `description-item-icon`,
17692
+ descriptionItemLabel: `description-item-label`,
17693
+ isHorizontal: `is-horizontal`
17694
+ };
17695
+ //#endregion
17696
+ //#region src/component/FluxDescriptionItem.vue
17697
+ var FluxDescriptionItem_default = /* @__PURE__ */ defineComponent({
17698
+ __name: "FluxDescriptionItem",
17699
+ props: {
17700
+ icon: {},
17701
+ isStacked: { type: Boolean },
17702
+ label: {}
17703
+ },
17704
+ setup(__props) {
17705
+ return (_ctx, _cache) => {
17706
+ 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, {
17707
+ key: 0,
17708
+ class: normalizeClass(unref(DescriptionList_module_default).descriptionItemIcon),
17709
+ name: __props.icon
17710
+ }, 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);
17711
+ };
17712
+ }
17713
+ });
17714
+ //#endregion
17715
+ //#region src/component/FluxDescriptionList.vue
17716
+ var FluxDescriptionList_default = /* @__PURE__ */ defineComponent({
17717
+ __name: "FluxDescriptionList",
17718
+ props: {
17719
+ direction: { default: "vertical" },
17720
+ title: {}
17721
+ },
17722
+ setup(__props) {
17723
+ const slots = useSlots();
17724
+ return (_ctx, _cache) => {
17725
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(DescriptionList_module_default).descriptionList) }, [__props.title || slots.header ? (openBlock(), createElementBlock("div", {
17726
+ key: 0,
17727
+ class: normalizeClass(unref(DescriptionList_module_default).descriptionListHeader)
17728
+ }, [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);
17729
+ };
17730
+ }
17731
+ });
17033
17732
  //#endregion
17034
17733
  //#region src/component/FluxDisabled.vue
17035
17734
  var FluxDisabled_default = /* @__PURE__ */ defineComponent({
@@ -17048,7 +17747,7 @@ var FluxDisabled_default = /* @__PURE__ */ defineComponent({
17048
17747
  });
17049
17748
  //#endregion
17050
17749
  //#region src/component/FluxDivider.vue?vue&type=script&setup=true&lang.ts
17051
- var _hoisted_1$37 = ["aria-orientation"];
17750
+ var _hoisted_1$42 = ["aria-orientation"];
17052
17751
  //#endregion
17053
17752
  //#region src/component/FluxDivider.vue
17054
17753
  var FluxDivider_default = /* @__PURE__ */ defineComponent({
@@ -17070,23 +17769,23 @@ var FluxDivider_default = /* @__PURE__ */ defineComponent({
17070
17769
  }, [renderSlot(_ctx.$slots, "default")], 2)) : (openBlock(), createElementBlock("hr", {
17071
17770
  key: 1,
17072
17771
  class: normalizeClass(unref(Divider_module_default).dividerLine)
17073
- }, null, 2))], 10, _hoisted_1$37);
17772
+ }, null, 2))], 10, _hoisted_1$42);
17074
17773
  };
17075
17774
  }
17076
17775
  });
17077
17776
  //#endregion
17078
17777
  //#region src/component/FluxDotPattern.vue?vue&type=script&setup=true&lang.ts
17079
- var _hoisted_1$36 = [
17778
+ var _hoisted_1$41 = [
17080
17779
  "id",
17081
17780
  "width",
17082
17781
  "height"
17083
17782
  ];
17084
- var _hoisted_2$11 = [
17783
+ var _hoisted_2$13 = [
17085
17784
  "r",
17086
17785
  "cx",
17087
17786
  "cy"
17088
17787
  ];
17089
- var _hoisted_3$3 = ["fill"];
17788
+ var _hoisted_3$4 = ["fill"];
17090
17789
  //#endregion
17091
17790
  //#region src/component/FluxDotPattern.vue
17092
17791
  var FluxDotPattern_default = /* @__PURE__ */ defineComponent({
@@ -17131,12 +17830,12 @@ var FluxDotPattern_default = /* @__PURE__ */ defineComponent({
17131
17830
  r: __props.cr,
17132
17831
  cx: __props.width / 2 - __props.cx,
17133
17832
  cy: __props.height / 2 - __props.cy
17134
- }, null, 8, _hoisted_2$11)], 8, _hoisted_1$36)]), createElementVNode("rect", {
17833
+ }, null, 8, _hoisted_2$13)], 8, _hoisted_1$41)]), createElementVNode("rect", {
17135
17834
  width: "100%",
17136
17835
  height: "100%",
17137
17836
  "stroke-width": "0",
17138
17837
  fill: `url(#${unref(id)})`
17139
- }, null, 8, _hoisted_3$3)], 2);
17838
+ }, null, 8, _hoisted_3$4)], 2);
17140
17839
  };
17141
17840
  }
17142
17841
  });
@@ -17154,12 +17853,12 @@ var DropZone_module_default = {
17154
17853
  };
17155
17854
  //#endregion
17156
17855
  //#region src/component/FluxDropZone.vue?vue&type=script&setup=true&lang.ts
17157
- var _hoisted_1$35 = [
17856
+ var _hoisted_1$40 = [
17158
17857
  "aria-disabled",
17159
17858
  "aria-label",
17160
17859
  "tabindex"
17161
17860
  ];
17162
- var _hoisted_2$10 = ["pathLength"];
17861
+ var _hoisted_2$12 = ["pathLength"];
17163
17862
  //#endregion
17164
17863
  //#region src/component/FluxDropZone.vue
17165
17864
  var FluxDropZone_default = /* @__PURE__ */ defineComponent({
@@ -17274,7 +17973,7 @@ var FluxDropZone_default = /* @__PURE__ */ defineComponent({
17274
17973
  "stroke-linecap": "round",
17275
17974
  "stroke-linejoin": "round",
17276
17975
  pathLength: pathLength.value
17277
- }, null, 8, _hoisted_2$10)], 2)),
17976
+ }, null, 8, _hoisted_2$12)], 2)),
17278
17977
  renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
17279
17978
  isDragging: isDragging.value,
17280
17979
  isDraggingOver: isDraggingOver.value,
@@ -17301,7 +18000,7 @@ var FluxDropZone_default = /* @__PURE__ */ defineComponent({
17301
18000
  isDraggingOver: isDraggingOver.value,
17302
18001
  showPicker
17303
18002
  })))
17304
- ], 42, _hoisted_1$35);
18003
+ ], 42, _hoisted_1$40);
17305
18004
  };
17306
18005
  }
17307
18006
  });
@@ -17331,12 +18030,12 @@ var Expandable_module_default = {
17331
18030
  };
17332
18031
  //#endregion
17333
18032
  //#region src/component/FluxExpandable.vue?vue&type=script&setup=true&lang.ts
17334
- var _hoisted_1$34 = [
18033
+ var _hoisted_1$39 = [
17335
18034
  "id",
17336
18035
  "aria-controls",
17337
18036
  "aria-expanded"
17338
18037
  ];
17339
- var _hoisted_2$9 = ["id", "aria-labelledby"];
18038
+ var _hoisted_2$11 = ["id", "aria-labelledby"];
17340
18039
  //#endregion
17341
18040
  //#region src/component/FluxExpandable.vue
17342
18041
  var FluxExpandable_default = /* @__PURE__ */ defineComponent({
@@ -17427,9 +18126,9 @@ var FluxExpandable_default = /* @__PURE__ */ defineComponent({
17427
18126
  })), () => [createElementVNode("div", { class: normalizeClass(unref(Expandable_module_default).expandableContent) }, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
17428
18127
  label: __props.label,
17429
18128
  close
17430
- })))], 2)])], 10, _hoisted_2$9)) : createCommentVNode("", true)]),
18129
+ })))], 2)])], 10, _hoisted_2$11)) : createCommentVNode("", true)]),
17431
18130
  _: 3
17432
- })], 10, _hoisted_1$34);
18131
+ })], 10, _hoisted_1$39);
17433
18132
  };
17434
18133
  }
17435
18134
  });
@@ -17481,7 +18180,7 @@ var FluxFader_default = /* @__PURE__ */ defineComponent({
17481
18180
  setup(__props, { emit: __emit }) {
17482
18181
  const emit = __emit;
17483
18182
  const faderRef = useTemplateRef("fader");
17484
- me$1(__props.interval, () => next());
18183
+ ye$1(__props.interval, () => next());
17485
18184
  const current = ref(-1);
17486
18185
  function getItems() {
17487
18186
  const fader = v$2(faderRef);
@@ -18655,7 +19354,7 @@ var FocalPoint_module_default = {
18655
19354
  };
18656
19355
  //#endregion
18657
19356
  //#region src/component/FluxFocalPointEditor.vue?vue&type=script&setup=true&lang.ts
18658
- var _hoisted_1$33 = ["src"];
19357
+ var _hoisted_1$38 = ["src"];
18659
19358
  //#endregion
18660
19359
  //#region src/component/FluxFocalPointEditor.vue
18661
19360
  var FluxFocalPointEditor_default = /* @__PURE__ */ defineComponent({
@@ -18724,7 +19423,7 @@ var FluxFocalPointEditor_default = /* @__PURE__ */ defineComponent({
18724
19423
  src: __props.src,
18725
19424
  alt: "",
18726
19425
  onLoad: onImageLoaded
18727
- }, null, 42, _hoisted_1$33), createElementVNode("div", {
19426
+ }, null, 42, _hoisted_1$38), createElementVNode("div", {
18728
19427
  class: normalizeClass(unref(FocalPoint_module_default).focalPointEditorArea),
18729
19428
  style: normalizeStyle({
18730
19429
  top: `${focalPointY.value}%`,
@@ -18753,7 +19452,7 @@ var FluxFocalPointEditor_default = /* @__PURE__ */ defineComponent({
18753
19452
  });
18754
19453
  //#endregion
18755
19454
  //#region src/component/FluxFocalPointImage.vue?vue&type=script&setup=true&lang.ts
18756
- var _hoisted_1$32 = ["src", "alt"];
19455
+ var _hoisted_1$37 = ["src", "alt"];
18757
19456
  //#endregion
18758
19457
  //#region src/component/FluxFocalPointImage.vue
18759
19458
  var FluxFocalPointImage_default = /* @__PURE__ */ defineComponent({
@@ -18772,13 +19471,13 @@ var FluxFocalPointImage_default = /* @__PURE__ */ defineComponent({
18772
19471
  style: normalizeStyle({ objectPosition: `${x.value}% ${y.value}%` }),
18773
19472
  src: __props.src,
18774
19473
  alt: __props.alt
18775
- }, null, 14, _hoisted_1$32);
19474
+ }, null, 14, _hoisted_1$37);
18776
19475
  };
18777
19476
  }
18778
19477
  });
18779
19478
  //#endregion
18780
19479
  //#region src/component/FluxForm.vue?vue&type=script&setup=true&lang.ts
18781
- var _hoisted_1$31 = ["aria-disabled"];
19480
+ var _hoisted_1$36 = ["aria-disabled"];
18782
19481
  //#endregion
18783
19482
  //#region src/component/FluxForm.vue
18784
19483
  var FluxForm_default = /* @__PURE__ */ defineComponent({
@@ -18801,13 +19500,13 @@ var FluxForm_default = /* @__PURE__ */ defineComponent({
18801
19500
  }, [createVNode(FluxDisabled_default, { disabled: __props.disabled }, {
18802
19501
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
18803
19502
  _: 3
18804
- }, 8, ["disabled"])], 42, _hoisted_1$31);
19503
+ }, 8, ["disabled"])], 42, _hoisted_1$36);
18805
19504
  };
18806
19505
  }
18807
19506
  });
18808
19507
  //#endregion
18809
19508
  //#region src/component/FluxFormCheckboxGroup.vue?vue&type=script&setup=true&lang.ts
18810
- var _hoisted_1$30 = ["role", "aria-label"];
19509
+ var _hoisted_1$35 = ["role", "aria-label"];
18811
19510
  //#endregion
18812
19511
  //#region src/component/FluxFormCheckboxGroup.vue
18813
19512
  var FluxFormCheckboxGroup_default = /* @__PURE__ */ defineComponent({
@@ -18842,7 +19541,92 @@ var FluxFormCheckboxGroup_default = /* @__PURE__ */ defineComponent({
18842
19541
  class: normalizeClass(unref(clsx)(unref(Form_module_default).formCheckboxGroup, __props.isInline && unref(Form_module_default).isInline)),
18843
19542
  role: unref(field)?.isGroup ? void 0 : "group",
18844
19543
  "aria-label": unref(field)?.isGroup ? void 0 : __props.ariaLabel
18845
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$30);
19544
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$35);
19545
+ };
19546
+ }
19547
+ });
19548
+ //#endregion
19549
+ //#region src/component/FluxFormCombobox.vue
19550
+ var FluxFormCombobox_default = /* @__PURE__ */ defineComponent({
19551
+ __name: "FluxFormCombobox",
19552
+ props: /*@__PURE__*/ mergeModels({
19553
+ autoFocus: { type: Boolean },
19554
+ disabled: { type: Boolean },
19555
+ error: {},
19556
+ isCondensed: { type: Boolean },
19557
+ isLoading: { type: Boolean },
19558
+ isReadonly: { type: Boolean },
19559
+ isSecondary: { type: Boolean },
19560
+ name: {},
19561
+ placeholder: {},
19562
+ isCreatable: { type: Boolean },
19563
+ isMultiple: { type: Boolean },
19564
+ options: {}
19565
+ }, {
19566
+ "searchQuery": { default: "" },
19567
+ "searchQueryModifiers": {},
19568
+ "modelValue": { required: true },
19569
+ "modelModifiers": {}
19570
+ }),
19571
+ emits: ["update:searchQuery", "update:modelValue"],
19572
+ setup(__props) {
19573
+ const modelSearch = useModel(__props, "searchQuery");
19574
+ const modelValue = useModel(__props, "modelValue");
19575
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
19576
+ const createdOptions = ref([]);
19577
+ const allOptions = computed(() => {
19578
+ const seen = /* @__PURE__ */ new Set();
19579
+ return [...__props.options, ...createdOptions.value].filter((o) => {
19580
+ if (isFluxFormSelectGroup(o)) return true;
19581
+ if (seen.has(o.value)) return false;
19582
+ seen.add(o.value);
19583
+ return true;
19584
+ });
19585
+ });
19586
+ const { groups, selected, values } = useFormSelect_default(modelValue, __props.isMultiple, allOptions, modelSearch);
19587
+ function onDeselect(id) {
19588
+ if (__props.isMultiple) modelValue.value = unref(values).filter((v) => v !== id);
19589
+ }
19590
+ function onSelect(id) {
19591
+ if (__props.isMultiple) modelValue.value = [...unref(values), id];
19592
+ else modelValue.value = id;
19593
+ }
19594
+ function onCreate(query) {
19595
+ if (!unref(allOptions).some((o) => isFluxFormSelectOption(o) && o.value === query)) createdOptions.value = [...createdOptions.value, {
19596
+ label: query,
19597
+ value: query
19598
+ }];
19599
+ onSelect(query);
19600
+ }
19601
+ return (_ctx, _cache) => {
19602
+ return openBlock(), createBlock(unref(SelectBase_default), {
19603
+ searchQuery: modelSearch.value,
19604
+ "onUpdate:searchQuery": _cache[0] || (_cache[0] = ($event) => modelSearch.value = $event),
19605
+ "aria-invalid": __props.error ? true : void 0,
19606
+ 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)),
19607
+ disabled: unref(disabled),
19608
+ "is-searchable": "",
19609
+ "is-creatable": __props.isCreatable,
19610
+ "is-loading": __props.isLoading,
19611
+ "is-multiple": __props.isMultiple,
19612
+ options: unref(groups),
19613
+ placeholder: __props.placeholder,
19614
+ selected: unref(selected),
19615
+ onCreate,
19616
+ onDeselect,
19617
+ onSelect
19618
+ }, null, 8, [
19619
+ "searchQuery",
19620
+ "aria-invalid",
19621
+ "class",
19622
+ "disabled",
19623
+ "is-creatable",
19624
+ "is-loading",
19625
+ "is-multiple",
19626
+ "options",
19627
+ "placeholder",
19628
+ "selected"
19629
+ ]);
18846
19630
  };
18847
19631
  }
18848
19632
  });
@@ -18954,7 +19738,7 @@ var FluxFormDateInput_default = /* @__PURE__ */ defineComponent({
18954
19738
  });
18955
19739
  //#endregion
18956
19740
  //#region src/component/FluxFormDateRangeInput.vue?vue&type=script&setup=true&lang.ts
18957
- var _hoisted_1$29 = { key: 0 };
19741
+ var _hoisted_1$34 = { key: 0 };
18958
19742
  //#endregion
18959
19743
  //#region src/component/FluxFormDateRangeInput.vue
18960
19744
  var FluxFormDateRangeInput_default = /* @__PURE__ */ defineComponent({
@@ -19000,7 +19784,7 @@ var FluxFormDateRangeInput_default = /* @__PURE__ */ defineComponent({
19000
19784
  default: withCtx(() => [createElementVNode("div", {
19001
19785
  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
19786
  role: "presentation"
19003
- }, [label.value ? (openBlock(), createElementBlock("span", _hoisted_1$29, toDisplayString(label.value), 1)) : __props.placeholder ? (openBlock(), createElementBlock("span", {
19787
+ }, [label.value ? (openBlock(), createElementBlock("span", _hoisted_1$34, toDisplayString(label.value), 1)) : __props.placeholder ? (openBlock(), createElementBlock("span", {
19004
19788
  key: 1,
19005
19789
  class: normalizeClass(unref(Form_module_default).formSelectPlaceholder)
19006
19790
  }, toDisplayString(__props.placeholder), 3)) : createCommentVNode("", true)], 2), createVNode(FluxSecondaryButton_default, {
@@ -19172,7 +19956,7 @@ var FluxFormGrid_default = /* @__PURE__ */ defineComponent({
19172
19956
  });
19173
19957
  //#endregion
19174
19958
  //#region src/component/FluxFormInputAddition.vue?vue&type=script&setup=true&lang.ts
19175
- var _hoisted_1$28 = { key: 1 };
19959
+ var _hoisted_1$33 = { key: 1 };
19176
19960
  //#endregion
19177
19961
  //#region src/component/FluxFormInputAddition.vue
19178
19962
  var FluxFormInputAddition_default = /* @__PURE__ */ defineComponent({
@@ -19189,7 +19973,7 @@ var FluxFormInputAddition_default = /* @__PURE__ */ defineComponent({
19189
19973
  name: __props.icon,
19190
19974
  size: 18
19191
19975
  }, null, 8, ["name"])) : createCommentVNode("", true),
19192
- __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$28, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
19976
+ __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$33, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
19193
19977
  renderSlot(_ctx.$slots, "default")
19194
19978
  ], 2);
19195
19979
  };
@@ -19197,8 +19981,8 @@ var FluxFormInputAddition_default = /* @__PURE__ */ defineComponent({
19197
19981
  });
19198
19982
  //#endregion
19199
19983
  //#region src/component/FluxFormNumberInput.vue?vue&type=script&setup=true&lang.ts
19200
- var _hoisted_1$27 = ["aria-disabled"];
19201
- var _hoisted_2$8 = [
19984
+ var _hoisted_1$32 = ["aria-disabled"];
19985
+ var _hoisted_2$10 = [
19202
19986
  "id",
19203
19987
  "name",
19204
19988
  "autofocus",
@@ -19212,7 +19996,7 @@ var _hoisted_2$8 = [
19212
19996
  "step",
19213
19997
  "value"
19214
19998
  ];
19215
- var _hoisted_3$2 = ["disabled"];
19999
+ var _hoisted_3$3 = ["disabled"];
19216
20000
  var _hoisted_4$1 = ["disabled"];
19217
20001
  //#endregion
19218
20002
  //#region src/component/FluxFormNumberInput.vue
@@ -19319,7 +20103,7 @@ var FluxFormNumberInput_default = /* @__PURE__ */ defineComponent({
19319
20103
  onFocus,
19320
20104
  onInput,
19321
20105
  onKeydown: onKeyDown
19322
- }, null, 42, _hoisted_2$8), createElementVNode("span", {
20106
+ }, null, 42, _hoisted_2$10), createElementVNode("span", {
19323
20107
  "aria-hidden": "true",
19324
20108
  class: normalizeClass(unref(Form_module_default).formNumberInputButtons)
19325
20109
  }, [createElementVNode("button", {
@@ -19331,7 +20115,7 @@ var FluxFormNumberInput_default = /* @__PURE__ */ defineComponent({
19331
20115
  }, [createVNode(FluxIcon_default, {
19332
20116
  name: "chevron-up",
19333
20117
  size: 12
19334
- })], 10, _hoisted_3$2), createElementVNode("button", {
20118
+ })], 10, _hoisted_3$3), createElementVNode("button", {
19335
20119
  type: "button",
19336
20120
  tabindex: "-1",
19337
20121
  class: normalizeClass(unref(Form_module_default).formNumberInputButton),
@@ -19340,20 +20124,20 @@ var FluxFormNumberInput_default = /* @__PURE__ */ defineComponent({
19340
20124
  }, [createVNode(FluxIcon_default, {
19341
20125
  name: "chevron-down",
19342
20126
  size: 12
19343
- })], 10, _hoisted_4$1)], 2)], 10, _hoisted_1$27);
20127
+ })], 10, _hoisted_4$1)], 2)], 10, _hoisted_1$32);
19344
20128
  };
19345
20129
  }
19346
20130
  });
19347
20131
  //#endregion
19348
20132
  //#region src/component/FluxFormPinInput.vue?vue&type=script&setup=true&lang.ts
19349
- var _hoisted_1$26 = [
20133
+ var _hoisted_1$31 = [
19350
20134
  "id",
19351
20135
  "name",
19352
20136
  "autofocus",
19353
20137
  "aria-disabled",
19354
20138
  "aria-invalid"
19355
20139
  ];
19356
- var _hoisted_2$7 = [
20140
+ var _hoisted_2$9 = [
19357
20141
  "aria-label",
19358
20142
  "autocomplete",
19359
20143
  "autofocus",
@@ -19466,14 +20250,14 @@ var FluxFormPinInput_default = /* @__PURE__ */ defineComponent({
19466
20250
  onInput,
19467
20251
  onKeydown: onKeyDown,
19468
20252
  onPaste
19469
- }, null, 42, _hoisted_2$7);
19470
- }), 128))], 14, _hoisted_1$26);
20253
+ }, null, 42, _hoisted_2$9);
20254
+ }), 128))], 14, _hoisted_1$31);
19471
20255
  };
19472
20256
  }
19473
20257
  });
19474
20258
  //#endregion
19475
20259
  //#region src/component/FluxFormRadio.vue?vue&type=script&setup=true&lang.ts
19476
- var _hoisted_1$25 = [
20260
+ var _hoisted_1$30 = [
19477
20261
  "name",
19478
20262
  "checked",
19479
20263
  "disabled",
@@ -19521,7 +20305,7 @@ var FluxFormRadio_default = /* @__PURE__ */ defineComponent({
19521
20305
  "aria-invalid": error.value ? true : void 0,
19522
20306
  onChange,
19523
20307
  onClick
19524
- }, null, 42, _hoisted_1$25),
20308
+ }, null, 42, _hoisted_1$30),
19525
20309
  createElementVNode("span", {
19526
20310
  "aria-hidden": "true",
19527
20311
  class: normalizeClass(unref(Form_module_default).formRadioElement)
@@ -19536,7 +20320,7 @@ var FluxFormRadio_default = /* @__PURE__ */ defineComponent({
19536
20320
  });
19537
20321
  //#endregion
19538
20322
  //#region src/component/FluxFormRadioGroup.vue?vue&type=script&setup=true&lang.ts
19539
- var _hoisted_1$24 = ["aria-label"];
20323
+ var _hoisted_1$29 = ["aria-label"];
19540
20324
  //#endregion
19541
20325
  //#region src/component/FluxFormRadioGroup.vue
19542
20326
  var FluxFormRadioGroup_default = /* @__PURE__ */ defineComponent({
@@ -19576,7 +20360,7 @@ var FluxFormRadioGroup_default = /* @__PURE__ */ defineComponent({
19576
20360
  class: normalizeClass(unref(clsx)(unref(Form_module_default).formRadioGroup, __props.isInline && unref(Form_module_default).isInline)),
19577
20361
  role: "radiogroup",
19578
20362
  "aria-label": __props.ariaLabel
19579
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$24);
20363
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$29);
19580
20364
  };
19581
20365
  }
19582
20366
  });
@@ -19757,6 +20541,163 @@ var FluxFormRangeSlider_default = /* @__PURE__ */ defineComponent({
19757
20541
  };
19758
20542
  }
19759
20543
  });
20544
+ var FormRating_module_default = {
20545
+ formRating: `form-rating`,
20546
+ isDisabled: `is-disabled`,
20547
+ formRatingStar: `form-rating-star`,
20548
+ formRatingStarEmpty: `form-rating-star-empty`,
20549
+ formRatingStarFull: `form-rating-star-full`,
20550
+ isInvalid: `is-invalid`
20551
+ };
20552
+ //#endregion
20553
+ //#region src/component/FluxFormRating.vue?vue&type=script&setup=true&lang.ts
20554
+ var _hoisted_1$28 = [
20555
+ "id",
20556
+ "aria-disabled",
20557
+ "aria-invalid",
20558
+ "aria-readonly",
20559
+ "aria-valuemax",
20560
+ "aria-valuenow",
20561
+ "aria-valuetext",
20562
+ "tabindex"
20563
+ ];
20564
+ var _hoisted_2$8 = ["name", "value"];
20565
+ var _hoisted_3$2 = [
20566
+ "disabled",
20567
+ "onClick",
20568
+ "onMousemove"
20569
+ ];
20570
+ //#endregion
20571
+ //#region src/component/FluxFormRating.vue
20572
+ var FluxFormRating_default = /* @__PURE__ */ defineComponent({
20573
+ __name: "FluxFormRating",
20574
+ props: /*@__PURE__*/ mergeModels({
20575
+ disabled: { type: Boolean },
20576
+ error: {},
20577
+ isReadonly: { type: Boolean },
20578
+ name: {},
20579
+ allowHalf: {
20580
+ type: Boolean,
20581
+ default: false
20582
+ },
20583
+ clearable: {
20584
+ type: Boolean,
20585
+ default: false
20586
+ },
20587
+ count: { default: 5 },
20588
+ icon: { default: "star" },
20589
+ size: {}
20590
+ }, {
20591
+ "modelValue": { default: null },
20592
+ "modelModifiers": {}
20593
+ }),
20594
+ emits: /*@__PURE__*/ mergeModels(["change"], ["update:modelValue"]),
20595
+ setup(__props, { emit: __emit }) {
20596
+ const modelValue = useModel(__props, "modelValue");
20597
+ const emit = __emit;
20598
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
20599
+ const { id } = useFormFieldInjection_default();
20600
+ const hoverValue = ref(null);
20601
+ const isInteractive = computed(() => !disabled.value && !__props.isReadonly);
20602
+ const displayValue = computed(() => hoverValue.value ?? modelValue.value ?? 0);
20603
+ function fillFor(star) {
20604
+ return Math.min(1, Math.max(0, displayValue.value - (star - 1)));
20605
+ }
20606
+ function resolveStarValue(star, evt) {
20607
+ if (!__props.allowHalf) return star;
20608
+ const { left, width } = evt.currentTarget.getBoundingClientRect();
20609
+ return evt.clientX - left < width / 2 ? star - .5 : star;
20610
+ }
20611
+ function commit(value) {
20612
+ modelValue.value = value;
20613
+ emit("change", value);
20614
+ }
20615
+ function onMouseMove(star, evt) {
20616
+ if (!isInteractive.value) return;
20617
+ hoverValue.value = resolveStarValue(star, evt);
20618
+ }
20619
+ function onClick(star, evt) {
20620
+ if (!isInteractive.value) return;
20621
+ const value = resolveStarValue(star, evt);
20622
+ commit(__props.clearable && modelValue.value === value ? null : value);
20623
+ }
20624
+ function onKeyDown(evt) {
20625
+ if (!isInteractive.value) return;
20626
+ const step = __props.allowHalf ? .5 : 1;
20627
+ const current = modelValue.value ?? 0;
20628
+ switch (evt.key) {
20629
+ case "ArrowRight":
20630
+ case "ArrowUp":
20631
+ evt.preventDefault();
20632
+ commit(Math.min(__props.count, current + step));
20633
+ break;
20634
+ case "ArrowLeft":
20635
+ case "ArrowDown":
20636
+ evt.preventDefault();
20637
+ commit(Math.max(0, current - step));
20638
+ break;
20639
+ case "Home":
20640
+ evt.preventDefault();
20641
+ commit(0);
20642
+ break;
20643
+ case "End":
20644
+ evt.preventDefault();
20645
+ commit(__props.count);
20646
+ break;
20647
+ default:
20648
+ if (/^[0-9]$/.test(evt.key)) {
20649
+ const digit = Number(evt.key);
20650
+ if (digit <= __props.count) {
20651
+ evt.preventDefault();
20652
+ commit(digit);
20653
+ }
20654
+ }
20655
+ break;
20656
+ }
20657
+ }
20658
+ return (_ctx, _cache) => {
20659
+ return openBlock(), createElementBlock("div", {
20660
+ class: normalizeClass(unref(clsx)(unref(FormRating_module_default).formRating, unref(disabled) && unref(FormRating_module_default).isDisabled, __props.error && unref(FormRating_module_default).isInvalid)),
20661
+ id: unref(id),
20662
+ style: normalizeStyle({ fontSize: __props.size && `${__props.size}px` }),
20663
+ role: "slider",
20664
+ "aria-disabled": unref(disabled) ? true : void 0,
20665
+ "aria-invalid": __props.error ? true : void 0,
20666
+ "aria-readonly": __props.isReadonly ? true : void 0,
20667
+ "aria-valuemin": 0,
20668
+ "aria-valuemax": __props.count,
20669
+ "aria-valuenow": modelValue.value ?? 0,
20670
+ "aria-valuetext": `${modelValue.value ?? 0} / ${__props.count}`,
20671
+ tabindex: isInteractive.value ? 0 : void 0,
20672
+ onKeydown: onKeyDown,
20673
+ onMouseleave: _cache[0] || (_cache[0] = ($event) => hoverValue.value = null)
20674
+ }, [__props.name ? (openBlock(), createElementBlock("input", {
20675
+ key: 0,
20676
+ type: "hidden",
20677
+ name: __props.name,
20678
+ value: modelValue.value ?? ""
20679
+ }, null, 8, _hoisted_2$8)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.count, (star) => {
20680
+ return openBlock(), createElementBlock("button", {
20681
+ key: star,
20682
+ class: normalizeClass(unref(FormRating_module_default).formRatingStar),
20683
+ type: "button",
20684
+ tabindex: "-1",
20685
+ "aria-hidden": "true",
20686
+ disabled: !isInteractive.value,
20687
+ style: normalizeStyle({ "--fill": fillFor(star) }),
20688
+ onClick: ($event) => onClick(star, $event),
20689
+ onMousemove: ($event) => onMouseMove(star, $event)
20690
+ }, [createVNode(FluxIcon_default, {
20691
+ class: normalizeClass(unref(FormRating_module_default).formRatingStarEmpty),
20692
+ name: __props.icon
20693
+ }, null, 8, ["class", "name"]), createVNode(FluxIcon_default, {
20694
+ class: normalizeClass(unref(FormRating_module_default).formRatingStarFull),
20695
+ name: __props.icon
20696
+ }, null, 8, ["class", "name"])], 46, _hoisted_3$2);
20697
+ }), 128))], 46, _hoisted_1$28);
20698
+ };
20699
+ }
20700
+ });
19760
20701
  //#endregion
19761
20702
  //#region src/component/FluxFormRow.vue
19762
20703
  var FluxFormRow_default = /* @__PURE__ */ defineComponent({
@@ -19889,8 +20830,201 @@ var FluxFormSelectAsync_default = /* @__PURE__ */ defineComponent({
19889
20830
  }
19890
20831
  });
19891
20832
  //#endregion
20833
+ //#region src/component/FluxFormTagsInput.vue?vue&type=script&setup=true&lang.ts
20834
+ var _hoisted_1$27 = [
20835
+ "name",
20836
+ "disabled",
20837
+ "placeholder",
20838
+ "readonly"
20839
+ ];
20840
+ //#endregion
20841
+ //#region src/component/FluxFormTagsInput.vue
20842
+ var FluxFormTagsInput_default = /* @__PURE__ */ defineComponent({
20843
+ __name: "FluxFormTagsInput",
20844
+ props: /*@__PURE__*/ mergeModels({
20845
+ disabled: { type: Boolean },
20846
+ error: {},
20847
+ isCondensed: { type: Boolean },
20848
+ isReadonly: { type: Boolean },
20849
+ isSecondary: { type: Boolean },
20850
+ name: {},
20851
+ placeholder: {},
20852
+ allowDuplicates: { type: Boolean },
20853
+ delimiters: { default: () => ["Enter", ","] },
20854
+ max: {},
20855
+ suggestions: {},
20856
+ tagColor: {},
20857
+ validate: { type: Function }
20858
+ }, {
20859
+ "modelValue": { default: () => [] },
20860
+ "modelModifiers": {},
20861
+ "searchQuery": { default: "" },
20862
+ "searchQueryModifiers": {}
20863
+ }),
20864
+ emits: /*@__PURE__*/ mergeModels(["add", "remove"], ["update:modelValue", "update:searchQuery"]),
20865
+ setup(__props, { emit: __emit }) {
20866
+ const modelValue = useModel(__props, "modelValue");
20867
+ const query = useModel(__props, "searchQuery");
20868
+ const emit = __emit;
20869
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
20870
+ const { id } = useFormFieldInjection_default();
20871
+ const anchorRef = useTemplateRef("anchor");
20872
+ const popupRef = useTemplateRef("popup");
20873
+ const inputElementRef = useTemplateRef("input");
20874
+ const isOpen = ref(false);
20875
+ const highlightedIndex = ref(-1);
20876
+ const isMaxReached = computed(() => __props.max !== void 0 && modelValue.value.length >= __props.max);
20877
+ const filteredSuggestions = computed(() => {
20878
+ if (!__props.suggestions) return [];
20879
+ const search = query.value.trim().toLowerCase();
20880
+ return __props.suggestions.filter((suggestion) => !modelValue.value.includes(suggestion.label) && (search === "" || suggestion.label.toLowerCase().includes(search)));
20881
+ });
20882
+ function focusInput() {
20883
+ inputElementRef.value?.focus();
20884
+ }
20885
+ function addTag(rawValue) {
20886
+ const value = rawValue.trim();
20887
+ if (value === "" || isMaxReached.value) return;
20888
+ if (!__props.allowDuplicates && modelValue.value.includes(value)) {
20889
+ query.value = "";
20890
+ return;
20891
+ }
20892
+ if (__props.validate && !__props.validate(value)) return;
20893
+ modelValue.value = [...modelValue.value, value];
20894
+ emit("add", value);
20895
+ query.value = "";
20896
+ highlightedIndex.value = -1;
20897
+ isOpen.value = false;
20898
+ }
20899
+ function removeAt(index) {
20900
+ const removed = modelValue.value[index];
20901
+ modelValue.value = modelValue.value.filter((_, i) => i !== index);
20902
+ emit("remove", removed);
20903
+ }
20904
+ function addSuggestion(suggestion) {
20905
+ addTag(suggestion.label);
20906
+ nextTick(() => focusInput());
20907
+ }
20908
+ function onInput() {
20909
+ isOpen.value = query.value.trim() !== "" && filteredSuggestions.value.length > 0;
20910
+ highlightedIndex.value = -1;
20911
+ }
20912
+ function onKeyDown(evt) {
20913
+ if (evt.key === "Escape" && isOpen.value) {
20914
+ evt.preventDefault();
20915
+ isOpen.value = false;
20916
+ return;
20917
+ }
20918
+ if (isOpen.value && (evt.key === "ArrowDown" || evt.key === "ArrowUp")) {
20919
+ evt.preventDefault();
20920
+ const count = filteredSuggestions.value.length;
20921
+ if (count === 0) return;
20922
+ highlightedIndex.value = evt.key === "ArrowDown" ? (highlightedIndex.value + 1) % count : (highlightedIndex.value - 1 + count) % count;
20923
+ return;
20924
+ }
20925
+ if (evt.key === "Enter") {
20926
+ if (isOpen.value && highlightedIndex.value >= 0) {
20927
+ evt.preventDefault();
20928
+ addSuggestion(filteredSuggestions.value[highlightedIndex.value]);
20929
+ return;
20930
+ }
20931
+ if (__props.delimiters.includes("Enter")) {
20932
+ evt.preventDefault();
20933
+ addTag(query.value);
20934
+ }
20935
+ return;
20936
+ }
20937
+ if (evt.key.length === 1 && __props.delimiters.includes(evt.key)) {
20938
+ evt.preventDefault();
20939
+ addTag(query.value);
20940
+ return;
20941
+ }
20942
+ if (evt.key === "Backspace" && query.value === "" && modelValue.value.length > 0) removeAt(modelValue.value.length - 1);
20943
+ }
20944
+ function onPaste(evt) {
20945
+ if (!evt.clipboardData) return;
20946
+ const separators = [...__props.delimiters.filter((delimiter) => delimiter !== "Enter"), "\n"];
20947
+ let parts = [evt.clipboardData.getData("text")];
20948
+ for (const separator of separators) parts = parts.flatMap((part) => part.split(separator));
20949
+ parts = parts.map((part) => part.trim()).filter((part) => part !== "");
20950
+ if (parts.length <= 1) return;
20951
+ evt.preventDefault();
20952
+ parts.forEach(addTag);
20953
+ }
20954
+ if (typeof window !== "undefined") q$1([anchorRef, popupRef], isOpen, () => isOpen.value = false);
20955
+ return (_ctx, _cache) => {
20956
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(Anchor_default), {
20957
+ ref: "anchor",
20958
+ 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)),
20959
+ id: unref(id),
20960
+ role: "group",
20961
+ "tag-name": "div",
20962
+ onClick: focusInput
20963
+ }, {
20964
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(modelValue.value, (tag, index) => {
20965
+ return openBlock(), createBlock(FluxTag_default, {
20966
+ key: `${tag}-${index}`,
20967
+ color: __props.tagColor,
20968
+ label: tag,
20969
+ "is-deletable": "",
20970
+ onDelete: ($event) => removeAt(index)
20971
+ }, null, 8, [
20972
+ "color",
20973
+ "label",
20974
+ "onDelete"
20975
+ ]);
20976
+ }), 128)), withDirectives(createElementVNode("input", {
20977
+ ref: "input",
20978
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => query.value = $event),
20979
+ class: normalizeClass(unref(Form_module_default).formTagsInputField),
20980
+ name: __props.name,
20981
+ autocomplete: "off",
20982
+ disabled: unref(disabled),
20983
+ placeholder: modelValue.value.length === 0 ? __props.placeholder : void 0,
20984
+ readonly: __props.isReadonly,
20985
+ type: "text",
20986
+ onInput,
20987
+ onKeydown: onKeyDown,
20988
+ onPaste
20989
+ }, null, 42, _hoisted_1$27), [[vModelText, query.value]])]),
20990
+ _: 1
20991
+ }, 8, ["class", "id"]), (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(FluxFadeTransition_default), null, {
20992
+ default: withCtx(() => [isOpen.value && filteredSuggestions.value.length > 0 ? (openBlock(), createBlock(unref(AnchorPopup_default), {
20993
+ key: 0,
20994
+ ref: "popup",
20995
+ class: normalizeClass(unref(Form_module_default).formTagsInputPopup),
20996
+ anchor: anchorRef.value,
20997
+ direction: "vertical",
20998
+ "use-anchor-width": ""
20999
+ }, {
21000
+ default: withCtx(() => [createVNode(FluxMenu_default, null, {
21001
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredSuggestions.value, (suggestion, index) => {
21002
+ return openBlock(), createBlock(FluxMenuItem_default, {
21003
+ key: suggestion.value ?? index,
21004
+ "icon-leading": suggestion.icon,
21005
+ "is-highlighted": highlightedIndex.value === index,
21006
+ label: suggestion.label,
21007
+ type: "button",
21008
+ onClick: ($event) => addSuggestion(suggestion)
21009
+ }, null, 8, [
21010
+ "icon-leading",
21011
+ "is-highlighted",
21012
+ "label",
21013
+ "onClick"
21014
+ ]);
21015
+ }), 128))]),
21016
+ _: 1
21017
+ })]),
21018
+ _: 1
21019
+ }, 8, ["class", "anchor"])) : createCommentVNode("", true)]),
21020
+ _: 1
21021
+ })]))], 64);
21022
+ };
21023
+ }
21024
+ });
21025
+ //#endregion
19892
21026
  //#region src/component/FluxFormTextArea.vue?vue&type=script&setup=true&lang.ts
19893
- var _hoisted_1$23 = [
21027
+ var _hoisted_1$26 = [
19894
21028
  "id",
19895
21029
  "name",
19896
21030
  "autocomplete",
@@ -19928,11 +21062,22 @@ var FluxFormTextArea_default = /* @__PURE__ */ defineComponent({
19928
21062
  "modelModifiers": {}
19929
21063
  }),
19930
21064
  emits: /*@__PURE__*/ mergeModels(["blur", "focus"], ["update:modelValue"]),
19931
- setup(__props, { emit: __emit }) {
21065
+ setup(__props, { expose: __expose, emit: __emit }) {
19932
21066
  const emit = __emit;
19933
21067
  const modelValue = useModel(__props, "modelValue");
19934
21068
  const disabled = useDisabled_default(toRef(() => __props.disabled));
21069
+ const inputRef = useTemplateRef("input");
19935
21070
  const { id } = useFormFieldInjection_default();
21071
+ function blur() {
21072
+ v$2(inputRef)?.blur();
21073
+ }
21074
+ function focus() {
21075
+ v$2(inputRef)?.focus();
21076
+ }
21077
+ __expose({
21078
+ blur,
21079
+ focus
21080
+ });
19936
21081
  return (_ctx, _cache) => {
19937
21082
  return withDirectives((openBlock(), createElementBlock("textarea", {
19938
21083
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
@@ -19952,7 +21097,7 @@ var FluxFormTextArea_default = /* @__PURE__ */ defineComponent({
19952
21097
  "aria-invalid": __props.error ? true : void 0,
19953
21098
  onBlur: _cache[1] || (_cache[1] = ($event) => emit("blur")),
19954
21099
  onFocus: _cache[2] || (_cache[2] = ($event) => emit("focus"))
19955
- }, null, 46, _hoisted_1$23)), [[vModelText, modelValue.value]]);
21100
+ }, null, 46, _hoisted_1$26)), [[vModelText, modelValue.value]]);
19956
21101
  };
19957
21102
  }
19958
21103
  });
@@ -20665,12 +21810,12 @@ var FluxFormTimeZonePicker_default = /* @__PURE__ */ defineComponent({
20665
21810
  });
20666
21811
  //#endregion
20667
21812
  //#region src/css/component/TreeViewSelect.module.scss
20668
- var { "treeNode": _0$6 } = TreeNode_module_default;
21813
+ var { "treeNode": _0$7 } = TreeNode_module_default;
20669
21814
  var TreeViewSelect_module_default = {
20670
21815
  treeViewSelectValue: `tree-view-select-value`,
20671
21816
  treeViewSelectList: `tree-view-select-list`,
20672
21817
  treeViewSelectEmpty: `tree-view-select-empty`,
20673
- treeNode: `tree-node ${_0$6}`,
21818
+ treeNode: `tree-node ${_0$7}`,
20674
21819
  isSelectable: `is-selectable`,
20675
21820
  isExpandable: `is-expandable`,
20676
21821
  isSelected: `is-selected`,
@@ -20679,7 +21824,7 @@ var TreeViewSelect_module_default = {
20679
21824
  };
20680
21825
  //#endregion
20681
21826
  //#region src/component/FluxFormTreeViewSelect.vue?vue&type=script&setup=true&lang.ts
20682
- var _hoisted_1$22 = [
21827
+ var _hoisted_1$25 = [
20683
21828
  "role",
20684
21829
  "tabindex",
20685
21830
  "aria-selected",
@@ -20924,7 +22069,7 @@ var FluxFormTreeViewSelect_default = /* @__PURE__ */ defineComponent({
20924
22069
  "expanded",
20925
22070
  "level-colors",
20926
22071
  "onExpandClick"
20927
- ])], 42, _hoisted_1$22);
22072
+ ])], 42, _hoisted_1$25);
20928
22073
  }), 128))], 2)]),
20929
22074
  _: 1
20930
22075
  }, 8, ["class", "anchor"])) : createCommentVNode("", true)]),
@@ -20939,7 +22084,7 @@ var Remove_module_default = {
20939
22084
  };
20940
22085
  //#endregion
20941
22086
  //#region src/component/FluxRemove.vue?vue&type=script&setup=true&lang.ts
20942
- var _hoisted_1$21 = ["aria-label"];
22087
+ var _hoisted_1$24 = ["aria-label"];
20943
22088
  //#endregion
20944
22089
  //#region src/component/FluxRemove.vue
20945
22090
  var FluxRemove_default = /* @__PURE__ */ defineComponent({
@@ -20962,7 +22107,7 @@ var FluxRemove_default = /* @__PURE__ */ defineComponent({
20962
22107
  key: 0,
20963
22108
  name: __props.icon,
20964
22109
  size: 16
20965
- }, null, 8, ["name"])) : createCommentVNode("", true)], 10, _hoisted_1$21);
22110
+ }, null, 8, ["name"])) : createCommentVNode("", true)], 10, _hoisted_1$24);
20966
22111
  };
20967
22112
  }
20968
22113
  });
@@ -20978,11 +22123,11 @@ var Placeholder_module_default = {
20978
22123
  };
20979
22124
  //#endregion
20980
22125
  //#region src/css/component/Gallery.module.scss
20981
- var { "placeholder": _0$5 } = Placeholder_module_default;
22126
+ var { "placeholder": _0$6 } = Placeholder_module_default;
20982
22127
  var Gallery_module_default = {
20983
22128
  gallery: `gallery`,
20984
22129
  galleryGrid: `gallery-grid`,
20985
- galleryAdd: `gallery-add ${_0$5}`,
22130
+ galleryAdd: `gallery-add ${_0$6}`,
20986
22131
  galleryMove: `gallery-move`,
20987
22132
  galleryItem: `gallery-item`,
20988
22133
  remove: `remove`,
@@ -21035,7 +22180,7 @@ var FluxGalleryItem_default = /* @__PURE__ */ defineComponent({
21035
22180
  });
21036
22181
  //#endregion
21037
22182
  //#region src/component/FluxGallery.vue?vue&type=script&setup=true&lang.ts
21038
- var _hoisted_1$20 = ["onClick"];
22183
+ var _hoisted_1$23 = ["onClick"];
21039
22184
  //#endregion
21040
22185
  //#region src/component/FluxGallery.vue
21041
22186
  var FluxGallery_default = /* @__PURE__ */ defineComponent({
@@ -21113,7 +22258,7 @@ var FluxGallery_default = /* @__PURE__ */ defineComponent({
21113
22258
  class: normalizeClass(unref(Gallery_module_default).galleryAdd),
21114
22259
  type: "button",
21115
22260
  onClick: ($event) => showPicker()
21116
- }, [createVNode(FluxIcon_default, { name: "plus" })], 10, _hoisted_1$20)) : createCommentVNode("", true)
22261
+ }, [createVNode(FluxIcon_default, { name: "plus" })], 10, _hoisted_1$23)) : createCommentVNode("", true)
21117
22262
  ]),
21118
22263
  _: 2
21119
22264
  }, 1032, ["class", "move-class"])]),
@@ -21188,12 +22333,12 @@ var FluxGridColumn_default = /* @__PURE__ */ defineComponent({
21188
22333
  });
21189
22334
  //#endregion
21190
22335
  //#region src/component/FluxGridPattern.vue?vue&type=script&setup=true&lang.ts
21191
- var _hoisted_1$19 = [
22336
+ var _hoisted_1$22 = [
21192
22337
  "id",
21193
22338
  "width",
21194
22339
  "height"
21195
22340
  ];
21196
- var _hoisted_2$6 = ["d", "stroke-dasharray"];
22341
+ var _hoisted_2$7 = ["d", "stroke-dasharray"];
21197
22342
  var _hoisted_3$1 = ["fill"];
21198
22343
  var _hoisted_4 = {
21199
22344
  key: 0,
@@ -21233,7 +22378,7 @@ var FluxGridPattern_default = /* @__PURE__ */ defineComponent({
21233
22378
  d: `M.5 ${__props.height}V.5H${__props.width}`,
21234
22379
  fill: "none",
21235
22380
  "stroke-dasharray": __props.strokeDasharray
21236
- }, null, 8, _hoisted_2$6)], 8, _hoisted_1$19)]),
22381
+ }, null, 8, _hoisted_2$7)], 8, _hoisted_1$22)]),
21237
22382
  createElementVNode("rect", {
21238
22383
  width: "100%",
21239
22384
  height: "100%",
@@ -21274,6 +22419,156 @@ var FluxInfo_default = /* @__PURE__ */ defineComponent({
21274
22419
  };
21275
22420
  }
21276
22421
  });
22422
+ var InlineEdit_module_default = {
22423
+ inlineEdit: `inline-edit`,
22424
+ inlineEditField: `inline-edit-field`,
22425
+ inlineEditActions: `inline-edit-actions`,
22426
+ inlineEditDisplay: `inline-edit-display`,
22427
+ isInteractive: `is-interactive`,
22428
+ isPlaceholder: `is-placeholder`
22429
+ };
22430
+ //#endregion
22431
+ //#region src/component/FluxInlineEdit.vue?vue&type=script&setup=true&lang.ts
22432
+ var _hoisted_1$21 = ["role", "tabindex"];
22433
+ //#endregion
22434
+ //#region src/component/FluxInlineEdit.vue
22435
+ var FluxInlineEdit_default = /* @__PURE__ */ defineComponent({
22436
+ __name: "FluxInlineEdit",
22437
+ props: /*@__PURE__*/ mergeModels({
22438
+ disabled: { type: Boolean },
22439
+ error: {},
22440
+ isReadonly: { type: Boolean },
22441
+ multiline: {
22442
+ type: Boolean,
22443
+ default: false
22444
+ },
22445
+ placeholder: {},
22446
+ saveOnBlur: {
22447
+ type: Boolean,
22448
+ default: true
22449
+ }
22450
+ }, {
22451
+ "modelValue": { default: "" },
22452
+ "modelModifiers": {}
22453
+ }),
22454
+ emits: /*@__PURE__*/ mergeModels([
22455
+ "cancel",
22456
+ "edit",
22457
+ "save"
22458
+ ], ["update:modelValue"]),
22459
+ setup(__props, { emit: __emit }) {
22460
+ const modelValue = useModel(__props, "modelValue");
22461
+ const emit = __emit;
22462
+ const disabled = useDisabled_default(toRef(() => __props.disabled));
22463
+ const displayRef = useTemplateRef("display");
22464
+ const fieldRef = useTemplateRef("field");
22465
+ const isEditing = ref(false);
22466
+ const draft = ref("");
22467
+ const isInteractive = computed(() => !disabled.value && !__props.isReadonly);
22468
+ function edit() {
22469
+ if (!isInteractive.value) return;
22470
+ draft.value = modelValue.value;
22471
+ isEditing.value = true;
22472
+ emit("edit");
22473
+ nextTick(() => fieldRef.value?.focus());
22474
+ }
22475
+ function close() {
22476
+ isEditing.value = false;
22477
+ nextTick(() => displayRef.value?.focus());
22478
+ }
22479
+ function save() {
22480
+ modelValue.value = draft.value;
22481
+ emit("save", draft.value);
22482
+ close();
22483
+ }
22484
+ function cancel() {
22485
+ emit("cancel");
22486
+ close();
22487
+ }
22488
+ function onBlur() {
22489
+ if (__props.saveOnBlur && isEditing.value) save();
22490
+ }
22491
+ function onKeyDown(evt) {
22492
+ if (evt.key === "Escape") {
22493
+ evt.preventDefault();
22494
+ cancel();
22495
+ return;
22496
+ }
22497
+ if (evt.key === "Enter") if (__props.multiline) {
22498
+ if (evt.metaKey || evt.ctrlKey) {
22499
+ evt.preventDefault();
22500
+ save();
22501
+ }
22502
+ } else {
22503
+ evt.preventDefault();
22504
+ save();
22505
+ }
22506
+ }
22507
+ function onDisplayKeyDown(evt) {
22508
+ if (!isInteractive.value) return;
22509
+ if (evt.key === "Enter" || evt.key === " ") {
22510
+ evt.preventDefault();
22511
+ edit();
22512
+ }
22513
+ }
22514
+ return (_ctx, _cache) => {
22515
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(InlineEdit_module_default).inlineEdit) }, [isEditing.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.multiline ? (openBlock(), createBlock(FluxFormTextArea_default, {
22516
+ key: 0,
22517
+ modelValue: draft.value,
22518
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => draft.value = $event),
22519
+ ref: "field",
22520
+ class: normalizeClass(unref(InlineEdit_module_default).inlineEditField),
22521
+ error: __props.error,
22522
+ placeholder: __props.placeholder,
22523
+ onBlur,
22524
+ onKeydown: onKeyDown
22525
+ }, null, 8, [
22526
+ "modelValue",
22527
+ "class",
22528
+ "error",
22529
+ "placeholder"
22530
+ ])) : (openBlock(), createBlock(FluxFormInput_default, {
22531
+ key: 1,
22532
+ modelValue: draft.value,
22533
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => draft.value = $event),
22534
+ ref: "field",
22535
+ class: normalizeClass(unref(InlineEdit_module_default).inlineEditField),
22536
+ error: __props.error,
22537
+ placeholder: __props.placeholder,
22538
+ onBlur,
22539
+ onKeydown: onKeyDown
22540
+ }, null, 8, [
22541
+ "modelValue",
22542
+ "class",
22543
+ "error",
22544
+ "placeholder"
22545
+ ])), createElementVNode("div", {
22546
+ class: normalizeClass(unref(InlineEdit_module_default).inlineEditActions),
22547
+ onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["prevent"]))
22548
+ }, [renderSlot(_ctx.$slots, "actions", {
22549
+ save,
22550
+ cancel
22551
+ }, () => [createVNode(FluxSecondaryButton_default, {
22552
+ "icon-leading": "check",
22553
+ onClick: save
22554
+ }), createVNode(FluxSecondaryButton_default, {
22555
+ "icon-leading": "xmark",
22556
+ onClick: cancel
22557
+ })])], 34)], 64)) : (openBlock(), createElementBlock("div", {
22558
+ key: 1,
22559
+ ref: "display",
22560
+ class: normalizeClass(unref(clsx)(unref(InlineEdit_module_default).inlineEditDisplay, isInteractive.value && unref(InlineEdit_module_default).isInteractive, !modelValue.value && unref(InlineEdit_module_default).isPlaceholder)),
22561
+ role: isInteractive.value ? "button" : void 0,
22562
+ tabindex: isInteractive.value ? 0 : void 0,
22563
+ onClick: edit,
22564
+ onKeydown: onDisplayKeyDown
22565
+ }, [renderSlot(_ctx.$slots, "default", {
22566
+ value: modelValue.value,
22567
+ edit
22568
+ }, () => [createTextVNode(toDisplayString(modelValue.value || __props.placeholder), 1)])], 42, _hoisted_1$21))], 2);
22569
+ };
22570
+ }
22571
+ });
21277
22572
  var Kanban_module_default = {
21278
22573
  kanban: `kanban`,
21279
22574
  kanbanLiveRegion: `kanban-live-region`,
@@ -21300,7 +22595,7 @@ var Kanban_module_default = {
21300
22595
  };
21301
22596
  //#endregion
21302
22597
  //#region src/component/FluxKanban.vue?vue&type=script&setup=true&lang.ts
21303
- var _hoisted_1$18 = ["aria-label"];
22598
+ var _hoisted_1$20 = ["aria-label"];
21304
22599
  //#endregion
21305
22600
  //#region src/component/FluxKanban.vue
21306
22601
  var FluxKanban_default = /* @__PURE__ */ defineComponent({
@@ -21367,14 +22662,14 @@ var FluxKanban_default = /* @__PURE__ */ defineComponent({
21367
22662
  "aria-live": "polite",
21368
22663
  "aria-atomic": "true",
21369
22664
  class: normalizeClass(unref(Kanban_module_default).kanbanLiveRegion)
21370
- }, toDisplayString(liveMessage.value), 3)], 10, _hoisted_1$18);
22665
+ }, toDisplayString(liveMessage.value), 3)], 10, _hoisted_1$20);
21371
22666
  };
21372
22667
  }
21373
22668
  });
21374
22669
  //#endregion
21375
22670
  //#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"];
22671
+ var _hoisted_1$19 = ["aria-label", "aria-disabled"];
22672
+ var _hoisted_2$6 = ["draggable", "tabindex"];
21378
22673
  //#endregion
21379
22674
  //#region src/component/FluxKanbanColumn.vue
21380
22675
  var FluxKanbanColumn_default = /* @__PURE__ */ defineComponent({
@@ -21526,7 +22821,7 @@ var FluxKanbanColumn_default = /* @__PURE__ */ defineComponent({
21526
22821
  key: 1,
21527
22822
  label: String(__props.count)
21528
22823
  }, null, 8, ["label"])) : createCommentVNode("", true)
21529
- ], 2), renderSlot(_ctx.$slots, "actions")], 42, _hoisted_2$5),
22824
+ ], 2), renderSlot(_ctx.$slots, "actions")], 42, _hoisted_2$6),
21530
22825
  createElementVNode("main", {
21531
22826
  ref_key: "body",
21532
22827
  ref: body,
@@ -21555,13 +22850,13 @@ var FluxKanbanColumn_default = /* @__PURE__ */ defineComponent({
21555
22850
  key: 0,
21556
22851
  class: normalizeClass(unref(Kanban_module_default).kanbanColumnFooter)
21557
22852
  }, [renderSlot(_ctx.$slots, "footer")], 2)) : createCommentVNode("", true)
21558
- ], 10, _hoisted_1$17);
22853
+ ], 10, _hoisted_1$19);
21559
22854
  };
21560
22855
  }
21561
22856
  });
21562
22857
  //#endregion
21563
22858
  //#region src/component/FluxKanbanItem.vue?vue&type=script&setup=true&lang.ts
21564
- var _hoisted_1$16 = [
22859
+ var _hoisted_1$18 = [
21565
22860
  "aria-disabled",
21566
22861
  "draggable",
21567
22862
  "tabindex"
@@ -21688,7 +22983,7 @@ var FluxKanbanItem_default = /* @__PURE__ */ defineComponent({
21688
22983
  onDragover: withModifiers(onDragOver, ["stop"]),
21689
22984
  onFocus,
21690
22985
  onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleKeyDown) && unref(handleKeyDown)(...args))
21691
- }, [renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$16);
22986
+ }, [renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$18);
21692
22987
  };
21693
22988
  }
21694
22989
  });
@@ -21807,6 +23102,7 @@ var FluxLink_default = /* @__PURE__ */ defineComponent({
21807
23102
  disabled: { type: Boolean },
21808
23103
  iconLeading: {},
21809
23104
  iconTrailing: {},
23105
+ isActive: { type: Boolean },
21810
23106
  isFilled: { type: Boolean },
21811
23107
  isLoading: { type: Boolean },
21812
23108
  isSubmit: { type: Boolean },
@@ -21864,7 +23160,7 @@ var FluxLink_default = /* @__PURE__ */ defineComponent({
21864
23160
  });
21865
23161
  //#endregion
21866
23162
  //#region src/component/FluxMenuCollapsible.vue?vue&type=script&setup=true&lang.ts
21867
- var _hoisted_1$15 = ["id"];
23163
+ var _hoisted_1$17 = ["id"];
21868
23164
  //#endregion
21869
23165
  //#region src/component/FluxMenuCollapsible.vue
21870
23166
  var FluxMenuCollapsible_default = /* @__PURE__ */ defineComponent({
@@ -21974,13 +23270,117 @@ var FluxMenuCollapsible_default = /* @__PURE__ */ defineComponent({
21974
23270
  id: unref(bodyId),
21975
23271
  class: normalizeClass(unref(Menu_module_default).menuCollapsibleBody),
21976
23272
  role: "group"
21977
- }, [createElementVNode("div", { class: normalizeClass(unref(Menu_module_default).menuCollapsibleContent) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$15)) : createCommentVNode("", true)]),
23273
+ }, [createElementVNode("div", { class: normalizeClass(unref(Menu_module_default).menuCollapsibleContent) }, [renderSlot(_ctx.$slots, "default")], 2)], 10, _hoisted_1$17)) : createCommentVNode("", true)]),
21978
23274
  _: 3
21979
23275
  })], 2);
21980
23276
  };
21981
23277
  }
21982
23278
  });
21983
23279
  //#endregion
23280
+ //#region src/css/component/MenuFlyout.module.scss
23281
+ var { "basePane": _0$5 } = Pane_module_default$1;
23282
+ var MenuFlyout_module_default = {
23283
+ menuFlyoutPopup: `menu-flyout-popup ${_0$5}`,
23284
+ menuFlyoutTriggerOpen: `menu-flyout-trigger-open`,
23285
+ menuFlyoutConeDebug: `menu-flyout-cone-debug`
23286
+ };
23287
+ //#endregion
23288
+ //#region src/component/FluxMenuFlyout.vue?vue&type=script&setup=true&lang.ts
23289
+ var _hoisted_1$16 = ["points"];
23290
+ var _hoisted_2$5 = ["cx", "cy"];
23291
+ var MENU_CHROME_TOP = 10;
23292
+ //#endregion
23293
+ //#region src/component/FluxMenuFlyout.vue
23294
+ var FluxMenuFlyout_default = /* @__PURE__ */ defineComponent({
23295
+ __name: "FluxMenuFlyout",
23296
+ props: {
23297
+ disabled: { type: Boolean },
23298
+ icon: {},
23299
+ isActive: { type: Boolean },
23300
+ isDestructive: { type: Boolean },
23301
+ label: {},
23302
+ position: { default: "right-top" }
23303
+ },
23304
+ setup(__props, { slots: $slots }) {
23305
+ const translate = useTranslate_default();
23306
+ const triggerRef = useTemplateRef("trigger");
23307
+ const popupRef = useTemplateRef("popup");
23308
+ const popupAnchor = { $el: { getBoundingClientRect() {
23309
+ const element = triggerRef.value?.$el;
23310
+ if (!element) return new DOMRect();
23311
+ const rect = element.getBoundingClientRect();
23312
+ return new DOMRect(rect.x, rect.y - MENU_CHROME_TOP, rect.width, rect.height);
23313
+ } } };
23314
+ const { context, cone, isOpen, onPopupKeydown, onTriggerClick, onTriggerKeydown } = useMenuFlyout({
23315
+ triggerRef,
23316
+ popupRef,
23317
+ disabled: toRef(() => __props.disabled)
23318
+ });
23319
+ const showDebugCone = computed(() => !!context && context.debugCone.value && isOpen.value && !!cone.value);
23320
+ const conePoints = computed(() => cone.value ? `${cone.value.ax},${cone.value.ay} ${cone.value.bx},${cone.value.by} ${cone.value.cx},${cone.value.cy}` : "");
23321
+ const coneApex = computed(() => ({
23322
+ x: cone.value?.ax ?? 0,
23323
+ y: cone.value?.ay ?? 0
23324
+ }));
23325
+ return (_ctx, _cache) => {
23326
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(FluxMenuItem_default, {
23327
+ ref: "trigger",
23328
+ class: normalizeClass(unref(isOpen) && unref(MenuFlyout_module_default).menuFlyoutTriggerOpen),
23329
+ "command-icon": "angle-right",
23330
+ disabled: __props.disabled,
23331
+ "icon-leading": __props.icon,
23332
+ "is-active": __props.isActive,
23333
+ "is-destructive": __props.isDestructive,
23334
+ label: __props.label,
23335
+ "aria-haspopup": "menu",
23336
+ "aria-expanded": unref(isOpen) ? "true" : "false",
23337
+ onClick: unref(onTriggerClick),
23338
+ onKeydown: unref(onTriggerKeydown)
23339
+ }, createSlots({ _: 2 }, [$slots.trigger ? {
23340
+ name: "label",
23341
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "trigger")]),
23342
+ key: "0"
23343
+ } : void 0]), 1032, [
23344
+ "class",
23345
+ "disabled",
23346
+ "icon-leading",
23347
+ "is-active",
23348
+ "is-destructive",
23349
+ "label",
23350
+ "aria-expanded",
23351
+ "onClick",
23352
+ "onKeydown"
23353
+ ]), (openBlock(), createBlock(Teleport, { to: "body" }, [unref(isOpen) ? (openBlock(), createBlock(unref(AnchorPopup_default), {
23354
+ key: 0,
23355
+ ref: "popup",
23356
+ anchor: popupAnchor,
23357
+ class: normalizeClass(unref(MenuFlyout_module_default).menuFlyoutPopup),
23358
+ "clamp-to-viewport": "",
23359
+ margin: 2,
23360
+ position: __props.position,
23361
+ role: "menu",
23362
+ "aria-label": unref(translate)("flux.submenu"),
23363
+ onKeydown: unref(onPopupKeydown)
23364
+ }, {
23365
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
23366
+ _: 3
23367
+ }, 8, [
23368
+ "class",
23369
+ "position",
23370
+ "aria-label",
23371
+ "onKeydown"
23372
+ ])) : createCommentVNode("", true), showDebugCone.value ? (openBlock(), createElementBlock("svg", {
23373
+ key: 1,
23374
+ class: normalizeClass(unref(MenuFlyout_module_default).menuFlyoutConeDebug)
23375
+ }, [createElementVNode("polygon", { points: conePoints.value }, null, 8, _hoisted_1$16), createElementVNode("circle", {
23376
+ cx: coneApex.value.x,
23377
+ cy: coneApex.value.y,
23378
+ r: "4"
23379
+ }, null, 8, _hoisted_2$5)], 2)) : createCommentVNode("", true)]))], 64);
23380
+ };
23381
+ }
23382
+ });
23383
+ //#endregion
21984
23384
  //#region src/component/FluxMenuOptions.vue
21985
23385
  var FluxMenuOptions_default = /* @__PURE__ */ defineComponent({
21986
23386
  __name: "FluxMenuOptions",
@@ -22052,7 +23452,7 @@ var Notice_module_default = {
22052
23452
  };
22053
23453
  //#endregion
22054
23454
  //#region src/component/FluxNotice.vue?vue&type=script&setup=true&lang.ts
22055
- var _hoisted_1$14 = ["aria-label"];
23455
+ var _hoisted_1$15 = ["aria-label"];
22056
23456
  //#endregion
22057
23457
  //#region src/component/FluxNotice.vue
22058
23458
  var FluxNotice_default = /* @__PURE__ */ defineComponent({
@@ -22103,7 +23503,7 @@ var FluxNotice_default = /* @__PURE__ */ defineComponent({
22103
23503
  type: "button",
22104
23504
  "aria-label": unref(translate)("flux.close"),
22105
23505
  onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
22106
- }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$14)) : createCommentVNode("", true)
23506
+ }, [createVNode(FluxIcon_default, { name: "xmark" })], 10, _hoisted_1$15)) : createCommentVNode("", true)
22107
23507
  ], 2);
22108
23508
  };
22109
23509
  }
@@ -22356,7 +23756,7 @@ var FluxPaneIllustration_default = /* @__PURE__ */ defineComponent({
22356
23756
  });
22357
23757
  //#endregion
22358
23758
  //#region src/component/FluxPaneMedia.vue?vue&type=script&setup=true&lang.ts
22359
- var _hoisted_1$13 = ["src", "alt"];
23759
+ var _hoisted_1$14 = ["src", "alt"];
22360
23760
  //#endregion
22361
23761
  //#region src/component/FluxPaneMedia.vue
22362
23762
  var FluxPaneMedia_default = /* @__PURE__ */ defineComponent({
@@ -22381,13 +23781,13 @@ var FluxPaneMedia_default = /* @__PURE__ */ defineComponent({
22381
23781
  }),
22382
23782
  src: __props.imageUrl,
22383
23783
  alt: __props.imageAlt
22384
- }, null, 14, _hoisted_1$13)) : createCommentVNode("", true)], 2);
23784
+ }, null, 14, _hoisted_1$14)) : createCommentVNode("", true)], 2);
22385
23785
  };
22386
23786
  }
22387
23787
  });
22388
23788
  //#endregion
22389
23789
  //#region src/component/FluxPersona.vue?vue&type=script&setup=true&lang.ts
22390
- var _hoisted_1$12 = { key: 0 };
23790
+ var _hoisted_1$13 = { key: 0 };
22391
23791
  //#endregion
22392
23792
  //#region src/component/FluxPersona.vue
22393
23793
  var FluxPersona_default = /* @__PURE__ */ defineComponent({
@@ -22427,13 +23827,13 @@ var FluxPersona_default = /* @__PURE__ */ defineComponent({
22427
23827
  ]), !__props.isCompact ? (openBlock(), createElementBlock("div", {
22428
23828
  key: 0,
22429
23829
  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);
23830
+ }, [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
23831
  };
22432
23832
  }
22433
23833
  });
22434
23834
  //#endregion
22435
23835
  //#region src/component/FluxPlaceholder.vue?vue&type=script&setup=true&lang.ts
22436
- var _hoisted_1$11 = { key: 0 };
23836
+ var _hoisted_1$12 = { key: 0 };
22437
23837
  var _hoisted_2$4 = { key: 1 };
22438
23838
  //#endregion
22439
23839
  //#region src/component/FluxPlaceholder.vue
@@ -22463,7 +23863,7 @@ var FluxPlaceholder_default = /* @__PURE__ */ defineComponent({
22463
23863
  class: normalizeClass(unref(Placeholder_module_default).placeholderIcon),
22464
23864
  name: __props.icon
22465
23865
  }, 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),
23866
+ 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
23867
  renderSlot(_ctx.$slots, "default")
22468
23868
  ], 2);
22469
23869
  };
@@ -22478,6 +23878,7 @@ var FluxPrimaryLinkButton_default = /* @__PURE__ */ defineComponent({
22478
23878
  disabled: { type: Boolean },
22479
23879
  iconLeading: {},
22480
23880
  iconTrailing: {},
23881
+ isActive: { type: Boolean },
22481
23882
  isFilled: { type: Boolean },
22482
23883
  isLoading: { type: Boolean },
22483
23884
  isSubmit: { type: Boolean },
@@ -22501,6 +23902,7 @@ var FluxPrimaryLinkButton_default = /* @__PURE__ */ defineComponent({
22501
23902
  disabled: __props.disabled,
22502
23903
  iconLeading: __props.iconLeading,
22503
23904
  iconTrailing: __props.iconTrailing,
23905
+ isActive: __props.isActive,
22504
23906
  isFilled: __props.isFilled,
22505
23907
  isLoading: __props.isLoading,
22506
23908
  isSubmit: __props.isSubmit,
@@ -22513,6 +23915,7 @@ var FluxPrimaryLinkButton_default = /* @__PURE__ */ defineComponent({
22513
23915
  to: __props.to
22514
23916
  }, {
22515
23917
  "css-class": unref(Button_module_default).primaryLinkButton,
23918
+ "css-class-active": unref(Button_module_default).isActive,
22516
23919
  "css-class-icon": unref(Button_module_default).primaryLinkButtonIcon,
22517
23920
  "css-class-label": unref(Button_module_default).primaryLinkButtonLabel,
22518
23921
  onClick: _cache[0] || (_cache[0] = ($event) => $emit("click", $event)),
@@ -22525,6 +23928,7 @@ var FluxPrimaryLinkButton_default = /* @__PURE__ */ defineComponent({
22525
23928
  };
22526
23929
  })]), 1040, [
22527
23930
  "css-class",
23931
+ "css-class-active",
22528
23932
  "css-class-icon",
22529
23933
  "css-class-label"
22530
23934
  ]);
@@ -22616,6 +24020,7 @@ var FluxPublishButton_default = /* @__PURE__ */ defineComponent({
22616
24020
  type: {},
22617
24021
  disabled: { type: Boolean },
22618
24022
  iconTrailing: {},
24023
+ isActive: { type: Boolean },
22619
24024
  isFilled: { type: Boolean },
22620
24025
  isLoading: { type: Boolean },
22621
24026
  isSubmit: { type: Boolean },
@@ -22639,6 +24044,7 @@ var FluxPublishButton_default = /* @__PURE__ */ defineComponent({
22639
24044
  type: __props.type,
22640
24045
  disabled: __props.disabled,
22641
24046
  iconTrailing: __props.iconTrailing,
24047
+ isActive: __props.isActive,
22642
24048
  isFilled: __props.isFilled,
22643
24049
  isLoading: __props.isLoading,
22644
24050
  isSubmit: __props.isSubmit,
@@ -22652,6 +24058,7 @@ var FluxPublishButton_default = /* @__PURE__ */ defineComponent({
22652
24058
  }, {
22653
24059
  class: unref(clsx)(!__props.isDone && !__props.isLoading && unref(Button_module_default).isIdle, __props.isDone && unref(Button_module_default).isDone, __props.isLoading && unref(Button_module_default).isLoading),
22654
24060
  "css-class": unref(Button_module_default).publishButton,
24061
+ "css-class-active": unref(Button_module_default).isActive,
22655
24062
  "css-class-icon": unref(Button_module_default).publishButtonIcon,
22656
24063
  "css-class-label": unref(Button_module_default).publishButtonLabel,
22657
24064
  onClick: _cache[0] || (_cache[0] = ($event) => $emit("click", $event)),
@@ -22689,6 +24096,7 @@ var FluxPublishButton_default = /* @__PURE__ */ defineComponent({
22689
24096
  }, 16, [
22690
24097
  "class",
22691
24098
  "css-class",
24099
+ "css-class-active",
22692
24100
  "css-class-icon",
22693
24101
  "css-class-label"
22694
24102
  ]);
@@ -22697,7 +24105,7 @@ var FluxPublishButton_default = /* @__PURE__ */ defineComponent({
22697
24105
  });
22698
24106
  //#endregion
22699
24107
  //#region src/component/FluxQuantitySelector.vue?vue&type=script&setup=true&lang.ts
22700
- var _hoisted_1$10 = [
24108
+ var _hoisted_1$11 = [
22701
24109
  "disabled",
22702
24110
  "max",
22703
24111
  "min",
@@ -22774,7 +24182,7 @@ var FluxQuantitySelector_default = /* @__PURE__ */ defineComponent({
22774
24182
  max: __props.max,
22775
24183
  min: __props.min,
22776
24184
  step: __props.step
22777
- }, null, 14, _hoisted_1$10), [[vModelText, modelValue.value]]),
24185
+ }, null, 14, _hoisted_1$11), [[vModelText, modelValue.value]]),
22778
24186
  createVNode(FluxSecondaryButton_default, {
22779
24187
  class: normalizeClass(unref(Form_module_default).formQuantitySelectorButton),
22780
24188
  disabled: unref(disabled) || modelValue.value >= __props.max,
@@ -22821,7 +24229,7 @@ var Snackbar_module_default = {
22821
24229
  };
22822
24230
  //#endregion
22823
24231
  //#region src/component/FluxSnackbar.vue?vue&type=script&setup=true&lang.ts
22824
- var _hoisted_1$9 = ["onClick"];
24232
+ var _hoisted_1$10 = ["onClick"];
22825
24233
  //#endregion
22826
24234
  //#region src/component/FluxSnackbar.vue
22827
24235
  var FluxSnackbar_default = /* @__PURE__ */ defineComponent({
@@ -22937,7 +24345,7 @@ var FluxSnackbar_default = /* @__PURE__ */ defineComponent({
22937
24345
  tabindex: "-1",
22938
24346
  type: "button",
22939
24347
  onClick: ($event) => onAction(actionKey)
22940
- }, [createElementVNode("span", null, toDisplayString(actionLabel), 1)], 10, _hoisted_1$9);
24348
+ }, [createElementVNode("span", null, toDisplayString(actionLabel), 1)], 10, _hoisted_1$10);
22941
24349
  }), 128))], 2)) : createCommentVNode("", true),
22942
24350
  __props.isCloseable ? (openBlock(), createBlock(FluxAction_default, {
22943
24351
  key: 1,
@@ -23133,7 +24541,7 @@ var Root_module_default = {
23133
24541
  };
23134
24542
  //#endregion
23135
24543
  //#region src/component/FluxRoot.vue?vue&type=script&setup=true&lang.ts
23136
- var _hoisted_1$8 = ["inert"];
24544
+ var _hoisted_1$9 = ["inert"];
23137
24545
  //#endregion
23138
24546
  //#region src/component/FluxRoot.vue
23139
24547
  var FluxRoot_default = /* @__PURE__ */ defineComponent({
@@ -23151,7 +24559,7 @@ var FluxRoot_default = /* @__PURE__ */ defineComponent({
23151
24559
  createElementVNode("div", mergeProps($attrs, {
23152
24560
  class: unref(Root_module_default).root,
23153
24561
  inert: unref(inertMain)
23154
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$8),
24562
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$9),
23155
24563
  createVNode(FluxOverlayProvider_default),
23156
24564
  createVNode(FluxSnackbarProvider_default),
23157
24565
  createVNode(FluxTooltipProvider_default)
@@ -23226,6 +24634,7 @@ var FluxSecondaryLinkButton_default = /* @__PURE__ */ defineComponent({
23226
24634
  disabled: { type: Boolean },
23227
24635
  iconLeading: {},
23228
24636
  iconTrailing: {},
24637
+ isActive: { type: Boolean },
23229
24638
  isFilled: { type: Boolean },
23230
24639
  isLoading: { type: Boolean },
23231
24640
  isSubmit: { type: Boolean },
@@ -23249,6 +24658,7 @@ var FluxSecondaryLinkButton_default = /* @__PURE__ */ defineComponent({
23249
24658
  disabled: __props.disabled,
23250
24659
  iconLeading: __props.iconLeading,
23251
24660
  iconTrailing: __props.iconTrailing,
24661
+ isActive: __props.isActive,
23252
24662
  isFilled: __props.isFilled,
23253
24663
  isLoading: __props.isLoading,
23254
24664
  isSubmit: __props.isSubmit,
@@ -23261,6 +24671,7 @@ var FluxSecondaryLinkButton_default = /* @__PURE__ */ defineComponent({
23261
24671
  to: __props.to
23262
24672
  }, {
23263
24673
  "css-class": unref(Button_module_default).secondaryLinkButton,
24674
+ "css-class-active": unref(Button_module_default).isActive,
23264
24675
  "css-class-icon": unref(Button_module_default).secondaryLinkButtonIcon,
23265
24676
  "css-class-label": unref(Button_module_default).secondaryLinkButtonLabel,
23266
24677
  onClick: _cache[0] || (_cache[0] = ($event) => $emit("click", $event)),
@@ -23273,6 +24684,7 @@ var FluxSecondaryLinkButton_default = /* @__PURE__ */ defineComponent({
23273
24684
  };
23274
24685
  })]), 1040, [
23275
24686
  "css-class",
24687
+ "css-class-active",
23276
24688
  "css-class-icon",
23277
24689
  "css-class-label"
23278
24690
  ]);
@@ -23292,7 +24704,7 @@ var SegmentedControl_module_default = {
23292
24704
  };
23293
24705
  //#endregion
23294
24706
  //#region src/component/FluxSegmentedControl.vue?vue&type=script&setup=true&lang.ts
23295
- var _hoisted_1$7 = ["aria-label"];
24707
+ var _hoisted_1$8 = ["aria-label"];
23296
24708
  //#endregion
23297
24709
  //#region src/component/FluxSegmentedControl.vue
23298
24710
  var FluxSegmentedControl_default = /* @__PURE__ */ defineComponent({
@@ -23327,11 +24739,11 @@ var FluxSegmentedControl_default = /* @__PURE__ */ defineComponent({
23327
24739
  });
23328
24740
  onMounted(() => updateHighlight());
23329
24741
  watch(modelValue, () => updateHighlight(), { flush: "post" });
23330
- ye$1(controlRef, () => updateHighlight(), {
24742
+ we$1(controlRef, () => updateHighlight(), {
23331
24743
  childList: true,
23332
24744
  subtree: true
23333
24745
  });
23334
- Ce$1(controlRef, () => updateHighlight());
24746
+ Oe$1(controlRef, () => updateHighlight());
23335
24747
  function select(value) {
23336
24748
  modelValue.value = value;
23337
24749
  }
@@ -23393,13 +24805,13 @@ var FluxSegmentedControl_default = /* @__PURE__ */ defineComponent({
23393
24805
  left: `${activeItemX.value}px`,
23394
24806
  width: `${activeItemWidth.value}px`
23395
24807
  })
23396
- }, null, 6)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$7);
24808
+ }, null, 6)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$8);
23397
24809
  };
23398
24810
  }
23399
24811
  });
23400
24812
  //#endregion
23401
24813
  //#region src/component/FluxSegmentedControlItem.vue?vue&type=script&setup=true&lang.ts
23402
- var _hoisted_1$6 = [
24814
+ var _hoisted_1$7 = [
23403
24815
  "aria-checked",
23404
24816
  "aria-disabled",
23405
24817
  "disabled",
@@ -23465,7 +24877,7 @@ var FluxSegmentedControlItem_default = /* @__PURE__ */ defineComponent({
23465
24877
  key: 0,
23466
24878
  name: __props.icon,
23467
24879
  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);
24880
+ }, 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
24881
  };
23470
24882
  }
23471
24883
  });
@@ -23621,7 +25033,7 @@ var FluxSplitViewPane_default = /* @__PURE__ */ defineComponent({
23621
25033
  });
23622
25034
  //#endregion
23623
25035
  //#region src/component/FluxSplitView.vue?vue&type=script&setup=true&lang.ts
23624
- var _hoisted_1$5 = [
25036
+ var _hoisted_1$6 = [
23625
25037
  "aria-orientation",
23626
25038
  "aria-valuenow",
23627
25039
  "tabindex",
@@ -23686,7 +25098,7 @@ var FluxSplitView_default = /* @__PURE__ */ defineComponent({
23686
25098
  tabindex: pane.isResizable && panes.value[index + 1].isResizable ? 0 : -1,
23687
25099
  onPointerdown: ($event) => unref(onHandlePointerDown)($event, index),
23688
25100
  onKeydown: ($event) => unref(onHandleKeyDown)($event, index)
23689
- }, null, 42, _hoisted_1$5)) : createCommentVNode("", true)], 64);
25101
+ }, null, 42, _hoisted_1$6)) : createCommentVNode("", true)], 64);
23690
25102
  }), 128))]),
23691
25103
  _: 1
23692
25104
  }, 8, ["class", "style"]);
@@ -23715,7 +25127,7 @@ var Stepper_module_default = {
23715
25127
  };
23716
25128
  //#endregion
23717
25129
  //#region src/component/FluxStepperSteps.vue?vue&type=script&setup=true&lang.ts
23718
- var _hoisted_1$4 = ["onClick"];
25130
+ var _hoisted_1$5 = ["onClick"];
23719
25131
  var _hoisted_2$2 = { key: 1 };
23720
25132
  //#endregion
23721
25133
  //#region src/component/FluxStepperSteps.vue
@@ -23749,7 +25161,7 @@ var FluxStepperSteps_default = /* @__PURE__ */ defineComponent({
23749
25161
  name: "check"
23750
25162
  })) : (openBlock(), createElementBlock("span", _hoisted_2$2, toDisplayString(step), 1))]),
23751
25163
  _: 2
23752
- }, 1024)], 10, _hoisted_1$4);
25164
+ }, 1024)], 10, _hoisted_1$5);
23753
25165
  }), 128))], 6);
23754
25166
  };
23755
25167
  }
@@ -23924,11 +25336,11 @@ var FluxTabBar_default = /* @__PURE__ */ defineComponent({
23924
25336
  setup(__props) {
23925
25337
  const tabBarRef = useTemplateRef("tabBar");
23926
25338
  O$1(tabBarRef, "scroll", () => checkScroll());
23927
- ye$1(tabBarRef, () => {
25339
+ we$1(tabBarRef, () => {
23928
25340
  checkScroll();
23929
25341
  updateHighlight();
23930
25342
  }, { childList: true });
23931
- Ce$1(tabBarRef, () => updateHighlight());
25343
+ Oe$1(tabBarRef, () => updateHighlight());
23932
25344
  const isEndArrowVisible = ref(false);
23933
25345
  const isStartArrowVisible = ref(false);
23934
25346
  const activeItemX = ref(0);
@@ -24036,7 +25448,7 @@ var FluxTabBar_default = /* @__PURE__ */ defineComponent({
24036
25448
  });
24037
25449
  //#endregion
24038
25450
  //#region src/component/FluxTabBarItem.vue?vue&type=script&setup=true&lang.ts
24039
- var _hoisted_1$3 = { key: 1 };
25451
+ var _hoisted_1$4 = { key: 1 };
24040
25452
  //#endregion
24041
25453
  //#region src/component/FluxTabBarItem.vue
24042
25454
  var FluxTabBarItem_default = /* @__PURE__ */ defineComponent({
@@ -24128,7 +25540,7 @@ var FluxTabBarItem_default = /* @__PURE__ */ defineComponent({
24128
25540
  key: 0,
24129
25541
  name: __props.icon,
24130
25542
  size: 16
24131
- }, null, 8, ["name"])) : createCommentVNode("", true), __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$3, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]),
25543
+ }, null, 8, ["name"])) : createCommentVNode("", true), __props.label ? (openBlock(), createElementBlock("span", _hoisted_1$4, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]),
24132
25544
  _: 1
24133
25545
  }, 8, [
24134
25546
  "component-type",
@@ -24295,7 +25707,7 @@ var FluxTimeline_default = /* @__PURE__ */ defineComponent({
24295
25707
  });
24296
25708
  //#endregion
24297
25709
  //#region src/component/FluxTimelineItem.vue?vue&type=script&setup=true&lang.ts
24298
- var _hoisted_1$2 = ["src"];
25710
+ var _hoisted_1$3 = ["src"];
24299
25711
  var _hoisted_2$1 = { key: 0 };
24300
25712
  var _hoisted_3 = { key: 1 };
24301
25713
  //#endregion
@@ -24323,7 +25735,7 @@ var FluxTimelineItem_default = /* @__PURE__ */ defineComponent({
24323
25735
  class: normalizeClass(unref(Timeline_module_default).timelineItemPhotoImage),
24324
25736
  src: __props.photo,
24325
25737
  alt: ""
24326
- }, null, 10, _hoisted_1$2), __props.icon ? (openBlock(), createElementBlock("div", {
25738
+ }, null, 10, _hoisted_1$3), __props.icon ? (openBlock(), createElementBlock("div", {
24327
25739
  key: 0,
24328
25740
  class: normalizeClass(unref(Timeline_module_default).timelineItemPhotoIcon)
24329
25741
  }, [createVNode(FluxIcon_default, {
@@ -24346,7 +25758,7 @@ var FluxTimelineItem_default = /* @__PURE__ */ defineComponent({
24346
25758
  });
24347
25759
  //#endregion
24348
25760
  //#region src/component/FluxToggle.vue?vue&type=script&setup=true&lang.ts
24349
- var _hoisted_1$1 = [
25761
+ var _hoisted_1$2 = [
24350
25762
  "for",
24351
25763
  "aria-disabled",
24352
25764
  "aria-readonly",
@@ -24419,7 +25831,7 @@ var FluxToggle_default = /* @__PURE__ */ defineComponent({
24419
25831
  onClick,
24420
25832
  onInput: toggle
24421
25833
  }, null, 42, _hoisted_2)
24422
- ], 10, _hoisted_1$1);
25834
+ ], 10, _hoisted_1$2);
24423
25835
  };
24424
25836
  }
24425
25837
  });
@@ -24475,6 +25887,275 @@ var FluxToolbarGroup_default = /* @__PURE__ */ defineComponent({
24475
25887
  }
24476
25888
  });
24477
25889
  //#endregion
25890
+ //#region src/component/FluxTourItem.vue?vue&type=script&setup=true&lang.ts
25891
+ var _hoisted_1$1 = {
25892
+ "aria-hidden": "true",
25893
+ style: { "display": "none" }
25894
+ };
25895
+ //#endregion
25896
+ //#region src/component/FluxTourItem.vue
25897
+ var FluxTourItem_default = /* @__PURE__ */ defineComponent({
25898
+ __name: "FluxTourItem",
25899
+ props: {
25900
+ target: { type: [String, Function] },
25901
+ title: {},
25902
+ position: {}
25903
+ },
25904
+ setup(__props) {
25905
+ return (_ctx, _cache) => {
25906
+ return openBlock(), createElementBlock("span", _hoisted_1$1);
25907
+ };
25908
+ }
25909
+ });
25910
+ var Tour_module_default = {
25911
+ tour: `tour`,
25912
+ tourSpotlight: `tour-spotlight`,
25913
+ tourPopover: `tour-popover`,
25914
+ isStepping: `is-stepping`,
25915
+ tourPane: `tour-pane`,
25916
+ tourBodyViewport: `tour-body-viewport`,
25917
+ tourBody: `tour-body`,
25918
+ tourTitle: `tour-title`,
25919
+ tourContent: `tour-content`,
25920
+ tourFooter: `tour-footer`,
25921
+ tourProgress: `tour-progress`,
25922
+ tourSkip: `tour-skip`
25923
+ };
25924
+ //#endregion
25925
+ //#region src/component/FluxTour.vue
25926
+ var FluxTour_default = /* @__PURE__ */ defineComponent({
25927
+ __name: "FluxTour",
25928
+ props: /*@__PURE__*/ mergeModels({
25929
+ maskPadding: { default: 8 },
25930
+ root: { type: [String, Function] }
25931
+ }, {
25932
+ "active": {
25933
+ type: Boolean,
25934
+ required: true
25935
+ },
25936
+ "activeModifiers": {},
25937
+ "step": { default: 0 },
25938
+ "stepModifiers": {}
25939
+ }),
25940
+ emits: /*@__PURE__*/ mergeModels([
25941
+ "finish",
25942
+ "skip",
25943
+ "next",
25944
+ "prev"
25945
+ ], ["update:active", "update:step"]),
25946
+ setup(__props, { emit: __emit }) {
25947
+ const active = useModel(__props, "active");
25948
+ const step = useModel(__props, "step");
25949
+ const emit = __emit;
25950
+ const slots = useSlots();
25951
+ const translate = useTranslate_default();
25952
+ const popup = useTemplateRef("popup");
25953
+ const bodyViewport = useTemplateRef("bodyViewport");
25954
+ const targetRect = ref(null);
25955
+ const isStepping = ref(false);
25956
+ let steppingTimer;
25957
+ const items = computed(() => {
25958
+ const vnodes = a$2(slots.default?.() ?? []);
25959
+ const out = [];
25960
+ for (const vnode of vnodes) {
25961
+ if (vnode.type !== FluxTourItem_default) continue;
25962
+ const props = vnode.props ?? {};
25963
+ const children = vnode.children;
25964
+ out.push({
25965
+ target: props.target,
25966
+ title: props.title,
25967
+ position: props.position,
25968
+ content: children?.default
25969
+ });
25970
+ }
25971
+ return out;
25972
+ });
25973
+ const total = computed(() => items.value.length);
25974
+ const currentItem = computed(() => items.value[step.value]);
25975
+ const currentContent = computed(() => {
25976
+ const content = currentItem.value?.content?.();
25977
+ return content ? h(Fragment, content) : null;
25978
+ });
25979
+ const virtualAnchor = { $el: { getBoundingClientRect: () => {
25980
+ const rect = targetRect.value;
25981
+ if (!rect) return new DOMRect(0, 0, 0, 0);
25982
+ return new DOMRect(rect.x - __props.maskPadding, rect.y - __props.maskPadding, rect.width + __props.maskPadding * 2, rect.height + __props.maskPadding * 2);
25983
+ } } };
25984
+ function resolveScope() {
25985
+ if (!__props.root) return document;
25986
+ if (typeof __props.root === "string") return document.querySelector(__props.root) ?? document;
25987
+ if (typeof __props.root === "function") return __props.root() ?? document;
25988
+ return __props.root;
25989
+ }
25990
+ function resolveTarget() {
25991
+ const current = items.value[step.value];
25992
+ if (!current) return null;
25993
+ return typeof current.target === "function" ? current.target() : resolveScope().querySelector(current.target);
25994
+ }
25995
+ function measure() {
25996
+ const element = resolveTarget();
25997
+ if (!element) {
25998
+ targetRect.value = null;
25999
+ return;
26000
+ }
26001
+ element.scrollIntoView({
26002
+ block: "center",
26003
+ inline: "center"
26004
+ });
26005
+ requestAnimationFrame(() => {
26006
+ const resolved = resolveTarget();
26007
+ targetRect.value = resolved ? resolved.getBoundingClientRect() : null;
26008
+ popup.value?.reposition();
26009
+ });
26010
+ }
26011
+ function next() {
26012
+ if (step.value < total.value - 1) {
26013
+ step.value++;
26014
+ emit("next", step.value);
26015
+ return;
26016
+ }
26017
+ finish();
26018
+ }
26019
+ function previous() {
26020
+ if (step.value > 0) {
26021
+ step.value--;
26022
+ emit("prev", step.value);
26023
+ }
26024
+ }
26025
+ function skip() {
26026
+ active.value = false;
26027
+ emit("skip");
26028
+ }
26029
+ function finish() {
26030
+ active.value = false;
26031
+ emit("finish");
26032
+ }
26033
+ function onBodyEnter(el) {
26034
+ if (!R$2(el) || !bodyViewport.value) return;
26035
+ const height = el.offsetHeight;
26036
+ requestAnimationFrame(() => {
26037
+ if (bodyViewport.value) bodyViewport.value.style.height = `${height}px`;
26038
+ });
26039
+ }
26040
+ function onBodyAfterEnter() {
26041
+ if (bodyViewport.value) bodyViewport.value.style.height = "auto";
26042
+ }
26043
+ watch(step, (newStep, oldStep) => {
26044
+ if (active.value && newStep !== oldStep) {
26045
+ if (bodyViewport.value) bodyViewport.value.style.height = `${bodyViewport.value.offsetHeight}px`;
26046
+ isStepping.value = true;
26047
+ clearTimeout(steppingTimer);
26048
+ steppingTimer = setTimeout(() => {
26049
+ isStepping.value = false;
26050
+ }, 300);
26051
+ }
26052
+ });
26053
+ watch([active, step], async () => {
26054
+ if (!active.value) {
26055
+ targetRect.value = null;
26056
+ isStepping.value = false;
26057
+ clearTimeout(steppingTimer);
26058
+ return;
26059
+ }
26060
+ await nextTick();
26061
+ measure();
26062
+ }, { immediate: true });
26063
+ if (!C$2) {
26064
+ const onRemeasure = () => {
26065
+ if (active.value && targetRect.value) {
26066
+ const resolved = resolveTarget();
26067
+ targetRect.value = resolved ? resolved.getBoundingClientRect() : null;
26068
+ }
26069
+ };
26070
+ O$1(ref(window), "resize", onRemeasure);
26071
+ O$1(ref(window), "scroll", onRemeasure, {
26072
+ capture: true,
26073
+ passive: true
26074
+ });
26075
+ O$1(ref(window), "keydown", (evt) => {
26076
+ if (active.value && evt.key === "Escape") skip();
26077
+ });
26078
+ }
26079
+ return (_ctx, _cache) => {
26080
+ return openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(FluxFadeTransition_default), null, {
26081
+ default: withCtx(() => [active.value ? (openBlock(), createElementBlock("div", {
26082
+ key: 0,
26083
+ class: normalizeClass(unref(Tour_module_default).tour)
26084
+ }, [targetRect.value ? (openBlock(), createElementBlock("div", {
26085
+ key: 0,
26086
+ class: normalizeClass(unref(Tour_module_default).tourSpotlight),
26087
+ style: normalizeStyle({
26088
+ "--x": `${targetRect.value.x - __props.maskPadding}px`,
26089
+ "--y": `${targetRect.value.y - __props.maskPadding}px`,
26090
+ "--w": `${targetRect.value.width + __props.maskPadding * 2}px`,
26091
+ "--h": `${targetRect.value.height + __props.maskPadding * 2}px`
26092
+ })
26093
+ }, null, 6)) : createCommentVNode("", true), targetRect.value && currentItem.value ? (openBlock(), createBlock(unref(AnchorPopup_default), {
26094
+ key: 1,
26095
+ ref_key: "popup",
26096
+ ref: popup,
26097
+ anchor: virtualAnchor,
26098
+ class: normalizeClass(unref(clsx)(unref(Tour_module_default).tourPopover, isStepping.value && unref(Tour_module_default).isStepping)),
26099
+ position: currentItem.value.position ?? "bottom",
26100
+ "aria-modal": "true",
26101
+ role: "dialog"
26102
+ }, {
26103
+ default: withCtx(() => [createVNode(FluxPane_default, { class: normalizeClass(unref(Tour_module_default).tourPane) }, {
26104
+ default: withCtx(() => [createElementVNode("div", {
26105
+ ref_key: "bodyViewport",
26106
+ ref: bodyViewport,
26107
+ class: normalizeClass(unref(Tour_module_default).tourBodyViewport)
26108
+ }, [createVNode(Transition, {
26109
+ onAfterEnter: onBodyAfterEnter,
26110
+ onEnter: onBodyEnter
26111
+ }, {
26112
+ default: withCtx(() => [(openBlock(), createElementBlock("div", {
26113
+ key: step.value,
26114
+ class: normalizeClass(unref(Tour_module_default).tourBody)
26115
+ }, [currentItem.value.title ? (openBlock(), createElementBlock("strong", {
26116
+ key: 0,
26117
+ class: normalizeClass(unref(Tour_module_default).tourTitle)
26118
+ }, 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))]),
26119
+ _: 1
26120
+ })], 2), createElementVNode("div", { class: normalizeClass(unref(Tour_module_default).tourFooter) }, [
26121
+ createElementVNode("span", { class: normalizeClass(unref(Tour_module_default).tourProgress) }, toDisplayString(step.value + 1) + " / " + toDisplayString(total.value), 3),
26122
+ createVNode(FluxSpacer_default),
26123
+ createElementVNode("button", {
26124
+ class: normalizeClass(unref(Tour_module_default).tourSkip),
26125
+ type: "button",
26126
+ onClick: skip
26127
+ }, toDisplayString(unref(translate)("flux.skip")), 3),
26128
+ step.value > 0 ? (openBlock(), createBlock(FluxSecondaryButton_default, {
26129
+ key: 0,
26130
+ "aria-label": unref(translate)("flux.previous"),
26131
+ "icon-leading": "angle-left",
26132
+ size: "small",
26133
+ onClick: previous
26134
+ }, null, 8, ["aria-label"])) : createCommentVNode("", true),
26135
+ step.value < total.value - 1 ? (openBlock(), createBlock(FluxPrimaryButton_default, {
26136
+ key: 1,
26137
+ "aria-label": unref(translate)("flux.next"),
26138
+ "icon-leading": "angle-right",
26139
+ size: "small",
26140
+ onClick: next
26141
+ }, null, 8, ["aria-label"])) : (openBlock(), createBlock(FluxPrimaryButton_default, {
26142
+ key: 2,
26143
+ "aria-label": unref(translate)("flux.done"),
26144
+ "icon-leading": "check",
26145
+ size: "small",
26146
+ onClick: next
26147
+ }, null, 8, ["aria-label"]))
26148
+ ], 2)]),
26149
+ _: 1
26150
+ }, 8, ["class"])]),
26151
+ _: 1
26152
+ }, 8, ["class", "position"])) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)]),
26153
+ _: 1
26154
+ })]);
26155
+ };
26156
+ }
26157
+ });
26158
+ //#endregion
24478
26159
  //#region src/css/component/TreeView.module.scss
24479
26160
  var { "treeNode": _0 } = TreeNode_module_default;
24480
26161
  var TreeView_module_default = {
@@ -24555,7 +26236,74 @@ var FluxTreeView_default = /* @__PURE__ */ defineComponent({
24555
26236
  };
24556
26237
  }
24557
26238
  });
26239
+ var VirtualScroller_module_default = {
26240
+ virtualScroller: `virtual-scroller`,
26241
+ virtualScrollerSpacer: `virtual-scroller-spacer`,
26242
+ virtualScrollerWindow: `virtual-scroller-window`
26243
+ };
26244
+ //#endregion
26245
+ //#region src/component/FluxVirtualScroller.vue
26246
+ var FluxVirtualScroller_default = /* @__PURE__ */ defineComponent({
26247
+ __name: "FluxVirtualScroller",
26248
+ props: {
26249
+ estimatedItemHeight: { default: 40 },
26250
+ items: {},
26251
+ overscan: { default: 4 }
26252
+ },
26253
+ setup(__props) {
26254
+ const viewport = useTemplateRef("viewport");
26255
+ const { y } = M$1(viewport);
26256
+ const viewportHeight = ref(0);
26257
+ const totalHeight = computed(() => __props.items.length * __props.estimatedItemHeight);
26258
+ const startIndex = computed(() => Math.max(0, Math.floor(y.value / __props.estimatedItemHeight) - __props.overscan));
26259
+ const endIndex = computed(() => Math.min(__props.items.length, Math.ceil((y.value + viewportHeight.value) / __props.estimatedItemHeight) + __props.overscan));
26260
+ const offsetY = computed(() => startIndex.value * __props.estimatedItemHeight);
26261
+ const visibleEntries = computed(() => {
26262
+ const entries = [];
26263
+ for (let index = startIndex.value; index < endIndex.value; ++index) entries.push({
26264
+ index,
26265
+ item: __props.items[index]
26266
+ });
26267
+ return entries;
26268
+ });
26269
+ let observer = null;
26270
+ onMounted(() => {
26271
+ const element = viewport.value;
26272
+ if (!element) return;
26273
+ viewportHeight.value = element.clientHeight;
26274
+ observer = new ResizeObserver(() => {
26275
+ if (viewport.value) viewportHeight.value = viewport.value.clientHeight;
26276
+ });
26277
+ observer.observe(element);
26278
+ });
26279
+ onUnmounted(() => {
26280
+ observer?.disconnect();
26281
+ observer = null;
26282
+ });
26283
+ return (_ctx, _cache) => {
26284
+ return openBlock(), createElementBlock("div", {
26285
+ ref_key: "viewport",
26286
+ ref: viewport,
26287
+ class: normalizeClass(unref(VirtualScroller_module_default).virtualScroller)
26288
+ }, [createElementVNode("div", {
26289
+ class: normalizeClass(unref(VirtualScroller_module_default).virtualScrollerSpacer),
26290
+ style: normalizeStyle({ height: `${totalHeight.value}px` })
26291
+ }, [createElementVNode("div", {
26292
+ class: normalizeClass(unref(VirtualScroller_module_default).virtualScrollerWindow),
26293
+ style: normalizeStyle({ transform: `translateY(${offsetY.value}px)` })
26294
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleEntries.value, (entry) => {
26295
+ return openBlock(), createElementBlock("div", {
26296
+ key: entry.index,
26297
+ style: normalizeStyle({ height: `${__props.estimatedItemHeight}px` })
26298
+ }, [renderSlot(_ctx.$slots, "default", {
26299
+ index: entry.index,
26300
+ item: entry.item
26301
+ })], 4);
26302
+ }), 128))], 6)], 6)], 2);
26303
+ };
26304
+ }
26305
+ });
24558
26306
  //#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 };
26307
+ 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
26308
 
24561
26309
  //# sourceMappingURL=index.js.map