@flux-ui/components 3.0.0-next.33 → 3.0.0-next.35

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 (44) hide show
  1. package/dist/component/FluxBoxedIcon.vue.d.ts +1 -5
  2. package/dist/component/FluxCommandPalette.vue.d.ts +52 -0
  3. package/dist/component/FluxCommandPaletteGroup.vue.d.ts +8 -0
  4. package/dist/component/FluxCommandPaletteItem.vue.d.ts +18 -0
  5. package/dist/component/FluxFormDateRangeInput.vue.d.ts +1 -5
  6. package/dist/component/FluxTag.vue.d.ts +1 -0
  7. package/dist/component/index.d.ts +4 -1
  8. package/dist/composable/private/useCommandPalette.d.ts +38 -0
  9. package/dist/index.css +320 -0
  10. package/dist/index.js +686 -120
  11. package/dist/index.js.map +1 -1
  12. package/package.json +10 -10
  13. package/src/component/FluxBoxedIcon.vue +0 -4
  14. package/src/component/FluxCalendar.vue +2 -1
  15. package/src/component/FluxChip.vue +1 -1
  16. package/src/component/FluxColorPicker.vue +1 -1
  17. package/src/component/FluxColorSelect.vue +3 -3
  18. package/src/component/FluxCommandPalette.vue +290 -0
  19. package/src/component/FluxCommandPaletteGroup.vue +23 -0
  20. package/src/component/FluxCommandPaletteItem.vue +60 -0
  21. package/src/component/FluxDatePicker.vue +0 -1
  22. package/src/component/FluxFader.vue +2 -2
  23. package/src/component/FluxFocalPointEditor.vue +3 -3
  24. package/src/component/FluxFormDateRangeInput.vue +0 -5
  25. package/src/component/FluxFormDateTimeInput.vue +2 -2
  26. package/src/component/FluxFormSelect.vue +2 -2
  27. package/src/component/FluxFormTextArea.vue +1 -0
  28. package/src/component/FluxQuantitySelector.vue +3 -6
  29. package/src/component/FluxSnackbar.vue +5 -3
  30. package/src/component/FluxTableActions.vue +3 -3
  31. package/src/component/FluxTag.vue +3 -1
  32. package/src/component/index.ts +4 -1
  33. package/src/component/primitive/CoordinatePicker.vue +10 -11
  34. package/src/component/primitive/FilterItem.vue +11 -2
  35. package/src/component/primitive/SelectBase.vue +2 -2
  36. package/src/component/primitive/SliderBase.vue +10 -13
  37. package/src/composable/private/useCommandPalette.ts +405 -0
  38. package/src/composable/private/useFormSelect.ts +2 -2
  39. package/src/css/component/Badge.module.scss +7 -0
  40. package/src/css/component/CommandPalette.module.scss +332 -0
  41. package/src/css/reset.scss +0 -107
  42. package/src/css/variables.scss +0 -26
  43. /package/dist/component/{FluxActions.vue.d.ts → FluxActionStack.vue.d.ts} +0 -0
  44. /package/src/component/{FluxActions.vue → FluxActionStack.vue} +0 -0
package/dist/index.js CHANGED
@@ -70,7 +70,7 @@ var FluxFormFieldInjectionKey = Symbol();
70
70
  var FluxTableInjectionKey = Symbol();
71
71
  var FluxTooltipInjectionKey = Symbol();
72
72
  //#endregion
73
- //#region ../../node_modules/.bun/@basmilius+utils@3.11.1/node_modules/@basmilius/utils/dist/index.mjs
73
+ //#region ../../node_modules/.bun/@basmilius+utils@3.12.1/node_modules/@basmilius/utils/dist/index.mjs
74
74
  function t(e, t) {
75
75
  return Math.round(e / t) * t;
76
76
  }
@@ -254,7 +254,7 @@ function useFormSelect_default(modelValue, isMultiple, options, searchQuery) {
254
254
  const groups = computed(() => {
255
255
  const groups = [];
256
256
  const search = unref(searchQuery)?.trim().toLowerCase();
257
- const available = unref(options).filter((o) => !("value" in o) || !search || o.label.toLowerCase().includes(search)).filter((o) => !("value" in o) || !isMultiple || !unref(selected).find((s) => s.value === o.value));
257
+ const available = unref(options).filter((o) => isFluxFormSelectGroup(o) || !search || o.label.toLowerCase().includes(search)).filter((o) => isFluxFormSelectGroup(o) || !isMultiple || !unref(selected).find((s) => s.value === o.value));
258
258
  if (available.length === 0) return [];
259
259
  if (!available.find(isFluxFormSelectGroup)) return [[null, available]];
260
260
  for (let i = 0; i < available.length;) {
@@ -4295,7 +4295,7 @@ useMode(definition$2);
4295
4295
  useMode(definition$1);
4296
4296
  useMode(definition);
4297
4297
  //#endregion
4298
- //#region ../../node_modules/.bun/@basmilius+http-client@3.11.1+1fb4c65d43e298b9/node_modules/@basmilius/http-client/dist/index.mjs
4298
+ //#region ../../node_modules/.bun/@basmilius+http-client@3.12.1+1fb4c65d43e298b9/node_modules/@basmilius/http-client/dist/index.mjs
4299
4299
  function c(e) {
4300
4300
  return class extends e {
4301
4301
  constructor(...e) {
@@ -7557,8 +7557,8 @@ var Icon_module_default = {
7557
7557
  };
7558
7558
  //#endregion
7559
7559
  //#region src/component/FluxIcon.vue?vue&type=script&setup=true&lang.ts
7560
- var _hoisted_1$46 = ["viewBox"];
7561
- var _hoisted_2$21 = ["d"];
7560
+ var _hoisted_1$47 = ["viewBox"];
7561
+ var _hoisted_2$22 = ["d"];
7562
7562
  //#endregion
7563
7563
  //#region src/component/FluxIcon.vue
7564
7564
  var FluxIcon_default = /* @__PURE__ */ defineComponent({
@@ -7602,8 +7602,8 @@ var FluxIcon_default = /* @__PURE__ */ defineComponent({
7602
7602
  return openBlock(), createElementBlock("path", {
7603
7603
  d: path,
7604
7604
  fill: "currentColor"
7605
- }, null, 8, _hoisted_2$21);
7606
- }), 256))], 14, _hoisted_1$46)) : (openBlock(), createElementBlock("i", {
7605
+ }, null, 8, _hoisted_2$22);
7606
+ }), 256))], 14, _hoisted_1$47)) : (openBlock(), createElementBlock("i", {
7607
7607
  key: 1,
7608
7608
  class: normalizeClass(unref(Icon_module_default).icon)
7609
7609
  }, null, 2));
@@ -7612,7 +7612,7 @@ var FluxIcon_default = /* @__PURE__ */ defineComponent({
7612
7612
  });
7613
7613
  //#endregion
7614
7614
  //#region src/component/FluxPressable.vue?vue&type=script&setup=true&lang.ts
7615
- var _hoisted_1$45 = [
7615
+ var _hoisted_1$46 = [
7616
7616
  "href",
7617
7617
  "rel",
7618
7618
  "target"
@@ -7663,7 +7663,7 @@ var FluxPressable_default = /* @__PURE__ */ defineComponent({
7663
7663
  rel: __props.rel,
7664
7664
  target: __props.target,
7665
7665
  onClick: _cache[1] || (_cache[1] = ($event) => onClick($event))
7666
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$45)) : __props.componentType === "button" ? (openBlock(), createElementBlock("button", mergeProps({ key: 2 }, $attrs, toHandlers(hoverListeners, true), { onClick: _cache[2] || (_cache[2] = ($event) => onClick($event)) }), [renderSlot(_ctx.$slots, "default")], 16)) : (openBlock(), createElementBlock("div", mergeProps({ key: 3 }, $attrs, toHandlers(hoverListeners, true), { onClick }), [renderSlot(_ctx.$slots, "default")], 16));
7666
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$46)) : __props.componentType === "button" ? (openBlock(), createElementBlock("button", mergeProps({ key: 2 }, $attrs, toHandlers(hoverListeners, true), { onClick: _cache[2] || (_cache[2] = ($event) => onClick($event)) }), [renderSlot(_ctx.$slots, "default")], 16)) : (openBlock(), createElementBlock("div", mergeProps({ key: 3 }, $attrs, toHandlers(hoverListeners, true), { onClick }), [renderSlot(_ctx.$slots, "default")], 16));
7667
7667
  };
7668
7668
  }
7669
7669
  });
@@ -7843,13 +7843,13 @@ var FluxButton_default = /* @__PURE__ */ defineComponent({
7843
7843
  });
7844
7844
  //#endregion
7845
7845
  //#region src/css/component/Action.module.scss
7846
- var { "button": _0$15, "buttonIcon": _1$8, "buttonLabel": _2$5 } = Button_module_default$1;
7846
+ var { "buttonIcon": _0$15, "buttonLabel": _1$8, "button": _2$5 } = Button_module_default$1;
7847
7847
  var Action_module_default = {
7848
- action: `action ${_0$15}`,
7848
+ action: `action ${_2$5}`,
7849
7849
  spinner: `spinner`,
7850
- actionIcon: `action-icon ${_1$8}`,
7850
+ actionIcon: `action-icon ${_0$15}`,
7851
7851
  isDestructive: `is-destructive`,
7852
- actionLabel: `action-label ${_2$5}`,
7852
+ actionLabel: `action-label ${_1$8}`,
7853
7853
  actionBar: `action-bar`,
7854
7854
  separator: `separator`,
7855
7855
  formInput: `form-input`,
@@ -7915,32 +7915,32 @@ var FluxAction_default = /* @__PURE__ */ defineComponent({
7915
7915
  });
7916
7916
  //#endregion
7917
7917
  //#region src/css/component/Button.module.scss
7918
- var { "button": _0$14, "buttonIcon": _1$7, "buttonLabel": _2$4 } = Button_module_default$1;
7918
+ var { "button": _0$14, "buttonLabel": _1$7, "buttonIcon": _2$4 } = Button_module_default$1;
7919
7919
  var Button_module_default = {
7920
7920
  primaryButton: `primary-button ${_0$14}`,
7921
7921
  spinner: `spinner`,
7922
- primaryButtonIcon: `primary-button-icon ${_1$7}`,
7923
- primaryButtonLabel: `primary-button-label ${_2$4}`,
7922
+ primaryButtonIcon: `primary-button-icon ${_2$4}`,
7923
+ primaryButtonLabel: `primary-button-label ${_1$7}`,
7924
7924
  secondaryButton: `secondary-button ${_0$14}`,
7925
- secondaryButtonIcon: `secondary-button-icon ${_1$7}`,
7926
- secondaryButtonLabel: `secondary-button-label ${_2$4}`,
7925
+ secondaryButtonIcon: `secondary-button-icon ${_2$4}`,
7926
+ secondaryButtonLabel: `secondary-button-label ${_1$7}`,
7927
7927
  destructiveButton: `destructive-button ${_0$14}`,
7928
- destructiveButtonIcon: `destructive-button-icon ${_1$7}`,
7929
- destructiveButtonLabel: `destructive-button-label ${_2$4}`,
7928
+ destructiveButtonIcon: `destructive-button-icon ${_2$4}`,
7929
+ destructiveButtonLabel: `destructive-button-label ${_1$7}`,
7930
7930
  baseLinkButton: `base-link-button ${_0$14}`,
7931
7931
  primaryLinkButton: `primary-link-button base-link-button ${_0$14}`,
7932
- primaryLinkButtonIcon: `primary-link-button-icon ${_1$7}`,
7933
- primaryLinkButtonLabel: `primary-link-button-label ${_2$4}`,
7932
+ primaryLinkButtonIcon: `primary-link-button-icon ${_2$4}`,
7933
+ primaryLinkButtonLabel: `primary-link-button-label ${_1$7}`,
7934
7934
  secondaryLinkButton: `secondary-link-button base-link-button ${_0$14}`,
7935
- secondaryLinkButtonIcon: `secondary-link-button-icon ${_1$7}`,
7936
- secondaryLinkButtonLabel: `secondary-link-button-label ${_2$4}`,
7935
+ secondaryLinkButtonIcon: `secondary-link-button-icon ${_2$4}`,
7936
+ secondaryLinkButtonLabel: `secondary-link-button-label ${_1$7}`,
7937
7937
  linkButton: `link-button ${_0$14}`,
7938
- linkButtonIcon: `link-button-icon ${_1$7}`,
7938
+ linkButtonIcon: `link-button-icon ${_2$4}`,
7939
7939
  icon: `icon`,
7940
- linkButtonLabel: `link-button-label ${_2$4}`,
7940
+ linkButtonLabel: `link-button-label ${_1$7}`,
7941
7941
  publishButton: `publish-button primary-button ${_0$14}`,
7942
- publishButtonIcon: `publish-button-icon primary-button-icon ${_1$7}`,
7943
- publishButtonLabel: `publish-button-label primary-button-label ${_2$4}`,
7942
+ publishButtonIcon: `publish-button-icon primary-button-icon ${_2$4}`,
7943
+ publishButtonLabel: `publish-button-label primary-button-label ${_1$7}`,
7944
7944
  publishButtonAnimation: `publish-button-animation`,
7945
7945
  isDone: `is-done`,
7946
7946
  publishButtonAnimationArrow: `publish-button-animation-arrow`,
@@ -8096,7 +8096,7 @@ var Flyout_module_default = {
8096
8096
  };
8097
8097
  //#endregion
8098
8098
  //#region src/component/FluxFlyout.vue?vue&type=script&setup=true&lang.ts
8099
- var _hoisted_1$44 = ["onKeydown"];
8099
+ var _hoisted_1$45 = ["onKeydown"];
8100
8100
  //#endregion
8101
8101
  //#region src/component/FluxFlyout.vue
8102
8102
  var FluxFlyout_default = /* @__PURE__ */ defineComponent({
@@ -8232,7 +8232,7 @@ var FluxFlyout_default = /* @__PURE__ */ defineComponent({
8232
8232
  openerHeight: openerHeight.value
8233
8233
  })))]),
8234
8234
  _: 3
8235
- }, 8, ["class", "style"])) : createCommentVNode("", true)], 42, _hoisted_1$44)], 6);
8235
+ }, 8, ["class", "style"])) : createCommentVNode("", true)], 42, _hoisted_1$45)], 6);
8236
8236
  };
8237
8237
  }
8238
8238
  });
@@ -8513,9 +8513,9 @@ var FluxActionPane_default = /* @__PURE__ */ defineComponent({
8513
8513
  }
8514
8514
  });
8515
8515
  //#endregion
8516
- //#region src/component/FluxActions.vue
8517
- var FluxActions_default = /* @__PURE__ */ defineComponent({
8518
- __name: "FluxActions",
8516
+ //#region src/component/FluxActionStack.vue
8517
+ var FluxActionStack_default = /* @__PURE__ */ defineComponent({
8518
+ __name: "FluxActionStack",
8519
8519
  setup(__props) {
8520
8520
  z(useTemplateRef("element"), { direction: "horizontal" });
8521
8521
  return (_ctx, _cache) => {
@@ -9053,8 +9053,8 @@ var Avatar_module_default = {
9053
9053
  };
9054
9054
  //#endregion
9055
9055
  //#region src/component/FluxAvatar.vue?vue&type=script&setup=true&lang.ts
9056
- var _hoisted_1$43 = ["alt", "src"];
9057
- var _hoisted_2$20 = { key: 0 };
9056
+ var _hoisted_1$44 = ["alt", "src"];
9057
+ var _hoisted_2$21 = { key: 0 };
9058
9058
  //#endregion
9059
9059
  //#region src/component/FluxAvatar.vue
9060
9060
  var FluxAvatar_default = /* @__PURE__ */ defineComponent({
@@ -9140,10 +9140,10 @@ var FluxAvatar_default = /* @__PURE__ */ defineComponent({
9140
9140
  class: normalizeClass(unref(Avatar_module_default).avatarImage),
9141
9141
  alt: __props.alt,
9142
9142
  src: __props.src
9143
- }, null, 10, _hoisted_1$43)) : (openBlock(), createElementBlock("div", {
9143
+ }, null, 10, _hoisted_1$44)) : (openBlock(), createElementBlock("div", {
9144
9144
  key: 1,
9145
9145
  class: normalizeClass(__props.fallback === "colorized" ? unref(Avatar_module_default).avatarFallbackColorized : unref(Avatar_module_default).avatarFallbackNeutral)
9146
- }, [__props.fallbackInitials ? (openBlock(), createElementBlock("span", _hoisted_2$20, toDisplayString(__props.fallbackInitials), 1)) : __props.fallbackIcon ? (openBlock(), createBlock(FluxIcon_default, {
9146
+ }, [__props.fallbackInitials ? (openBlock(), createElementBlock("span", _hoisted_2$21, toDisplayString(__props.fallbackInitials), 1)) : __props.fallbackIcon ? (openBlock(), createBlock(FluxIcon_default, {
9147
9147
  key: 1,
9148
9148
  name: __props.fallbackIcon
9149
9149
  }, null, 8, ["name"])) : createCommentVNode("", true)], 2)),
@@ -9189,6 +9189,7 @@ var Badge_module_default = {
9189
9189
  badgeSuccess: `badge-success badge`,
9190
9190
  badgeWarning: `badge-warning badge`,
9191
9191
  tag: `tag badge`,
9192
+ tagKeyboardShortcut: `tag-keyboard-shortcut tag badge`,
9192
9193
  tagClose: `tag-close badge-close`,
9193
9194
  tagDot: `tag-dot badge-dot`,
9194
9195
  tagIcon: `tag-icon badge-icon`,
@@ -9352,7 +9353,6 @@ var FluxBoxedIcon_default = /* @__PURE__ */ defineComponent({
9352
9353
  name: {},
9353
9354
  size: {}
9354
9355
  },
9355
- emits: ["click"],
9356
9356
  setup(__props) {
9357
9357
  return (_ctx, _cache) => {
9358
9358
  return openBlock(), createElementBlock("div", {
@@ -9619,7 +9619,7 @@ var Menu_module_default = {
9619
9619
  };
9620
9620
  //#endregion
9621
9621
  //#region src/component/FluxMenuItem.vue?vue&type=script&setup=true&lang.ts
9622
- var _hoisted_1$42 = ["src", "alt"];
9622
+ var _hoisted_1$43 = ["src", "alt"];
9623
9623
  //#endregion
9624
9624
  //#region src/component/FluxMenuItem.vue
9625
9625
  var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
@@ -9696,7 +9696,7 @@ var FluxMenuItem_default = /* @__PURE__ */ defineComponent({
9696
9696
  class: normalizeClass(unref(Menu_module_default).menuItemImage),
9697
9697
  src: __props.imageSrc,
9698
9698
  alt: __props.imageAlt ?? ""
9699
- }, null, 10, _hoisted_1$42)]),
9699
+ }, null, 10, _hoisted_1$43)]),
9700
9700
  key: "1"
9701
9701
  } : void 0, __props.command || __props.commandIcon || __props.commandLoading || slots.after ? {
9702
9702
  name: "after",
@@ -9749,8 +9749,13 @@ var FilterItem_default = /* @__PURE__ */ defineComponent({
9749
9749
  function onClick(evt) {
9750
9750
  emit("click", evt);
9751
9751
  }
9752
- watch(() => __props.item, async () => {
9753
- valueLabel.value = await unref(getValueLabel)(__props.value) ?? void 0;
9752
+ watch([() => __props.item, () => __props.value], async ([, nextValue], _prev, onCleanup) => {
9753
+ let cancelled = false;
9754
+ onCleanup(() => {
9755
+ cancelled = true;
9756
+ });
9757
+ const nextLabel = await unref(getValueLabel)(nextValue);
9758
+ if (!cancelled) valueLabel.value = nextLabel ?? void 0;
9754
9759
  }, {
9755
9760
  deep: true,
9756
9761
  immediate: true
@@ -9857,8 +9862,8 @@ var Form_module_default = {
9857
9862
  };
9858
9863
  //#endregion
9859
9864
  //#region src/component/FluxFormInput.vue?vue&type=script&setup=true&lang.ts
9860
- var _hoisted_1$41 = ["aria-disabled"];
9861
- var _hoisted_2$19 = [
9865
+ var _hoisted_1$42 = ["aria-disabled"];
9866
+ var _hoisted_2$20 = [
9862
9867
  "id",
9863
9868
  "autocomplete",
9864
9869
  "autofocus",
@@ -10030,7 +10035,7 @@ var FluxFormInput_default = /* @__PURE__ */ defineComponent({
10030
10035
  onFocus: _cache[1] || (_cache[1] = ($event) => onFocus()),
10031
10036
  onInput,
10032
10037
  onKeydown: onKeyDown
10033
- }, null, 42, _hoisted_2$19),
10038
+ }, null, 42, _hoisted_2$20),
10034
10039
  __props.iconLeading ? (openBlock(), createBlock(FluxIcon_default, {
10035
10040
  key: 0,
10036
10041
  class: normalizeClass(unref(Form_module_default).formInputIconLeading),
@@ -10054,7 +10059,7 @@ var FluxFormInput_default = /* @__PURE__ */ defineComponent({
10054
10059
  class: normalizeClass(unref(Form_module_default).formInputIconTrailing),
10055
10060
  size: 18
10056
10061
  }, null, 8, ["class"])) : createCommentVNode("", true)
10057
- ], 10, _hoisted_1$41);
10062
+ ], 10, _hoisted_1$42);
10058
10063
  };
10059
10064
  }
10060
10065
  });
@@ -10188,6 +10193,7 @@ var FluxTag_default = /* @__PURE__ */ defineComponent({
10188
10193
  icon: {},
10189
10194
  isClickable: { type: Boolean },
10190
10195
  isDeletable: { type: Boolean },
10196
+ isKeyboardShortcut: { type: Boolean },
10191
10197
  isLoading: { type: Boolean },
10192
10198
  label: {},
10193
10199
  type: {},
@@ -10211,7 +10217,7 @@ var FluxTag_default = /* @__PURE__ */ defineComponent({
10211
10217
  }
10212
10218
  return (_ctx, _cache) => {
10213
10219
  return openBlock(), createBlock(FluxPressable_default, {
10214
- class: normalizeClass(unref(clsx)(__props.color === "gray" && unref(Badge_module_default).tagGray, __props.color === "primary" && unref(Badge_module_default).tagPrimary, __props.color === "danger" && unref(Badge_module_default).tagDanger, __props.color === "info" && unref(Badge_module_default).tagInfo, __props.color === "success" && unref(Badge_module_default).tagSuccess, __props.color === "warning" && unref(Badge_module_default).tagWarning)),
10220
+ class: normalizeClass(unref(clsx)(__props.color === "gray" && unref(Badge_module_default).tagGray, __props.color === "primary" && unref(Badge_module_default).tagPrimary, __props.color === "danger" && unref(Badge_module_default).tagDanger, __props.color === "info" && unref(Badge_module_default).tagInfo, __props.color === "success" && unref(Badge_module_default).tagSuccess, __props.color === "warning" && unref(Badge_module_default).tagWarning, __props.isKeyboardShortcut && unref(Badge_module_default).tagKeyboardShortcut)),
10215
10221
  "component-type": __props.type,
10216
10222
  tabindex: __props.tabindex,
10217
10223
  href: __props.href,
@@ -10348,7 +10354,7 @@ var SelectBase_default = /* @__PURE__ */ defineComponent({
10348
10354
  isPopupOpen.value = false;
10349
10355
  return;
10350
10356
  default:
10351
- if (evt.key.match(/[a-z]/)) highlightedIndex.value = unref(rawOptions).findIndex((o) => o.label.toLowerCase().startsWith(evt.key));
10357
+ if (evt.key.length === 1) highlightedIndex.value = unref(rawOptions).findIndex((o) => o.label.toLowerCase().startsWith(evt.key.toLowerCase()));
10352
10358
  else highlightedIndex.value = -1;
10353
10359
  return;
10354
10360
  }
@@ -10571,7 +10577,7 @@ var FluxTicks_default = /* @__PURE__ */ defineComponent({
10571
10577
  });
10572
10578
  //#endregion
10573
10579
  //#region src/component/primitive/SliderBase.vue?vue&type=script&setup=true&lang.ts
10574
- var _hoisted_1$40 = ["aria-disabled"];
10580
+ var _hoisted_1$41 = ["aria-disabled"];
10575
10581
  //#endregion
10576
10582
  //#region src/component/primitive/SliderBase.vue
10577
10583
  var SliderBase_default = /* @__PURE__ */ defineComponent({
@@ -10589,17 +10595,11 @@ var SliderBase_default = /* @__PURE__ */ defineComponent({
10589
10595
  const emit = __emit;
10590
10596
  const disabled = useDisabled_default(toRef(() => __props.disabled));
10591
10597
  const rootRef = useTemplateRef("root");
10592
- onMounted(() => {
10593
- document.addEventListener("pointermove", onPointerMove);
10594
- document.addEventListener("pointerup", onPointerUp, { passive: true });
10595
- });
10596
- onUnmounted(() => {
10597
- document.removeEventListener("pointermove", onPointerMove);
10598
- document.removeEventListener("pointerup", onPointerUp);
10599
- });
10600
10598
  function onPointerDown(evt) {
10601
10599
  if (unref(disabled)) return;
10602
10600
  emit("dragging", true);
10601
+ document.addEventListener("pointermove", onPointerMove);
10602
+ document.addEventListener("pointerup", onPointerUp, { passive: true });
10603
10603
  requestAnimationFrame(() => onPointerMove(evt));
10604
10604
  }
10605
10605
  function onPointerMove(evt) {
@@ -10608,13 +10608,18 @@ var SliderBase_default = /* @__PURE__ */ defineComponent({
10608
10608
  let { left, width } = root.getBoundingClientRect();
10609
10609
  left += 6;
10610
10610
  width -= 12;
10611
- emit("update", Math.max(0, Math.min(1, (evt.pageX - left) / width)));
10611
+ emit("update", Math.max(0, Math.min(1, (evt.clientX - left) / width)));
10612
10612
  evt.preventDefault();
10613
10613
  }
10614
10614
  function onPointerUp() {
10615
10615
  emit("dragging", false);
10616
+ document.removeEventListener("pointermove", onPointerMove);
10617
+ document.removeEventListener("pointerup", onPointerUp);
10616
10618
  }
10617
- watch(() => __props.isDragging, () => emit("dragging", __props.isDragging));
10619
+ onUnmounted(() => {
10620
+ document.removeEventListener("pointermove", onPointerMove);
10621
+ document.removeEventListener("pointerup", onPointerUp);
10622
+ });
10618
10623
  return (_ctx, _cache) => {
10619
10624
  return openBlock(), createElementBlock("div", {
10620
10625
  ref: "root",
@@ -10626,13 +10631,13 @@ var SliderBase_default = /* @__PURE__ */ defineComponent({
10626
10631
  key: 0,
10627
10632
  lower: __props.min,
10628
10633
  upper: __props.max
10629
- }, null, 8, ["lower", "upper"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$40);
10634
+ }, null, 8, ["lower", "upper"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 42, _hoisted_1$41);
10630
10635
  };
10631
10636
  }
10632
10637
  });
10633
10638
  //#endregion
10634
10639
  //#region src/component/primitive/SliderThumb.vue?vue&type=script&setup=true&lang.ts
10635
- var _hoisted_1$39 = ["aria-disabled", "tabindex"];
10640
+ var _hoisted_1$40 = ["aria-disabled", "tabindex"];
10636
10641
  //#endregion
10637
10642
  //#region src/component/primitive/SliderThumb.vue
10638
10643
  var SliderThumb_default = /* @__PURE__ */ defineComponent({
@@ -10675,7 +10680,7 @@ var SliderThumb_default = /* @__PURE__ */ defineComponent({
10675
10680
  type: "button",
10676
10681
  onKeydown: onKeyDown,
10677
10682
  onPointerdown: _cache[0] || (_cache[0] = ($event) => $emit("grab", $event))
10678
- }, null, 46, _hoisted_1$39);
10683
+ }, null, 46, _hoisted_1$40);
10679
10684
  };
10680
10685
  }
10681
10686
  });
@@ -10712,7 +10717,7 @@ var Divider_module_default = {
10712
10717
  };
10713
10718
  //#endregion
10714
10719
  //#region src/component/FluxSeparator.vue?vue&type=script&setup=true&lang.ts
10715
- var _hoisted_1$38 = ["aria-orientation"];
10720
+ var _hoisted_1$39 = ["aria-orientation"];
10716
10721
  //#endregion
10717
10722
  //#region src/component/FluxSeparator.vue
10718
10723
  var FluxSeparator_default = /* @__PURE__ */ defineComponent({
@@ -10724,7 +10729,7 @@ var FluxSeparator_default = /* @__PURE__ */ defineComponent({
10724
10729
  class: normalizeClass(__props.direction === "horizontal" ? unref(Divider_module_default).separatorHorizontal : unref(Divider_module_default).separatorVertical),
10725
10730
  role: "separator",
10726
10731
  "aria-orientation": __props.direction
10727
- }, null, 10, _hoisted_1$38);
10732
+ }, null, 10, _hoisted_1$39);
10728
10733
  };
10729
10734
  }
10730
10735
  });
@@ -10815,8 +10820,8 @@ var DatePicker_module_default = {
10815
10820
  };
10816
10821
  //#endregion
10817
10822
  //#region src/component/FluxCalendar.vue?vue&type=script&setup=true&lang.ts
10818
- var _hoisted_1$37 = ["onClick"];
10819
- var _hoisted_2$18 = ["onClick"];
10823
+ var _hoisted_1$38 = ["onClick"];
10824
+ var _hoisted_2$19 = ["onClick"];
10820
10825
  //#endregion
10821
10826
  //#region src/component/FluxCalendar.vue
10822
10827
  var FluxCalendar_default = /* @__PURE__ */ defineComponent({
@@ -10881,7 +10886,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
10881
10886
  class: normalizeClass(unref(Calendar_module_default).calendarCurrentMonth),
10882
10887
  type: "button",
10883
10888
  onClick: open
10884
- }, toDisplayString(unref(viewMonth)), 11, _hoisted_1$37)]),
10889
+ }, toDisplayString(unref(viewMonth)), 11, _hoisted_1$38)]),
10885
10890
  default: withCtx(({ close }) => [createElementVNode("div", { class: normalizeClass(unref(DatePicker_module_default).datePickerMonths) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(months), (month) => {
10886
10891
  return openBlock(), createBlock(FluxSecondaryButton_default, {
10887
10892
  key: month.label,
@@ -10896,7 +10901,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
10896
10901
  class: normalizeClass(unref(Calendar_module_default).calendarCurrentYear),
10897
10902
  type: "button",
10898
10903
  onClick: open
10899
- }, toDisplayString(unref(viewYear)), 11, _hoisted_2$18)]),
10904
+ }, toDisplayString(unref(viewYear)), 11, _hoisted_2$19)]),
10900
10905
  default: withCtx(({ close }) => [createElementVNode("div", { class: normalizeClass(unref(DatePicker_module_default).datePickerYears) }, [
10901
10906
  createVNode(FluxSecondaryButton_default, {
10902
10907
  "icon-leading": "angle-left",
@@ -10947,6 +10952,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
10947
10952
  role: "gridcell"
10948
10953
  }, [createElementVNode("div", { class: normalizeClass(unref(Calendar_module_default).calendarEvents) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(getEventsForDate(date), (event) => {
10949
10954
  return openBlock(), createBlock(unref(VNodeRenderer), {
10955
+ key: event.index,
10950
10956
  class: normalizeClass(unref(clsx)(event.type === "single" && unref(Calendar_module_default).isSingle, event.type === "start" && unref(Calendar_module_default).isStart, event.type === "end" && unref(Calendar_module_default).isEnd, event.type === "middle" && unref(Calendar_module_default).isMiddle)),
10951
10957
  style: normalizeStyle({ gridRow: event.index }),
10952
10958
  vnode: event.vnode
@@ -10955,7 +10961,7 @@ var FluxCalendar_default = /* @__PURE__ */ defineComponent({
10955
10961
  "style",
10956
10962
  "vnode"
10957
10963
  ]);
10958
- }), 256))], 2), createElementVNode("span", { class: normalizeClass(unref(Calendar_module_default).calendarEntryDate) }, toDisplayString(date.toLocaleString({ day: "numeric" })), 3)], 2);
10964
+ }), 128))], 2), createElementVNode("span", { class: normalizeClass(unref(Calendar_module_default).calendarEntryDate) }, toDisplayString(date.toLocaleString({ day: "numeric" })), 3)], 2);
10959
10965
  }), 256))], 2))]),
10960
10966
  _: 1
10961
10967
  }, 8, ["is-back"]),
@@ -10996,8 +11002,8 @@ var FluxCalendarEvent_default = /* @__PURE__ */ defineComponent({
10996
11002
  });
10997
11003
  //#endregion
10998
11004
  //#region src/component/FluxCheckbox.vue?vue&type=script&setup=true&lang.ts
10999
- var _hoisted_1$36 = ["for"];
11000
- var _hoisted_2$17 = ["id"];
11005
+ var _hoisted_1$37 = ["for"];
11006
+ var _hoisted_2$18 = ["id"];
11001
11007
  //#endregion
11002
11008
  //#region src/component/FluxCheckbox.vue
11003
11009
  var FluxCheckbox_default = /* @__PURE__ */ defineComponent({
@@ -11030,7 +11036,7 @@ var FluxCheckbox_default = /* @__PURE__ */ defineComponent({
11030
11036
  type: "checkbox",
11031
11037
  class: normalizeClass(unref(Form_module_default).checkboxNative),
11032
11038
  id: unref(id)
11033
- }, null, 10, _hoisted_2$17), [[vModelCheckbox, modelValue.value]]),
11039
+ }, null, 10, _hoisted_2$18), [[vModelCheckbox, modelValue.value]]),
11034
11040
  createElementVNode("button", {
11035
11041
  "aria-hidden": "true",
11036
11042
  class: normalizeClass(unref(Form_module_default).checkboxElement),
@@ -11048,7 +11054,7 @@ var FluxCheckbox_default = /* @__PURE__ */ defineComponent({
11048
11054
  key: 0,
11049
11055
  class: normalizeClass(unref(Form_module_default).checkboxLabel)
11050
11056
  }, toDisplayString(__props.label), 3)) : createCommentVNode("", true)
11051
- ], 10, _hoisted_1$36);
11057
+ ], 10, _hoisted_1$37);
11052
11058
  };
11053
11059
  }
11054
11060
  });
@@ -11154,6 +11160,573 @@ var FluxClickablePane_default = /* @__PURE__ */ defineComponent({
11154
11160
  };
11155
11161
  }
11156
11162
  });
11163
+ //#endregion
11164
+ //#region src/composable/private/useCommandPalette.ts
11165
+ function useCommandPalette(params) {
11166
+ const search = ref("");
11167
+ const activeTab = ref(null);
11168
+ const highlightedIndex = ref(-1);
11169
+ const subActionTarget = ref(null);
11170
+ const isKeyboardNav = ref(false);
11171
+ const isLoading = ref(false);
11172
+ const isTransitioningBack = ref(false);
11173
+ const savedState = ref(null);
11174
+ const asyncResults = ref(/* @__PURE__ */ new Map());
11175
+ const debouncedSearch = Y$1(search, 300);
11176
+ let fetchGeneration = 0;
11177
+ const filteredItems = computed(() => {
11178
+ const query = unref(search).toLowerCase().trim();
11179
+ const tab = unref(activeTab);
11180
+ const sources = unref(params.sources);
11181
+ const asyncMap = unref(asyncResults);
11182
+ const results = [];
11183
+ for (const source of sources) {
11184
+ if (tab && source.key !== tab) continue;
11185
+ if (source.fetchSearch) {
11186
+ const items = query ? asyncMap.get(source.key) : source.items;
11187
+ if (items) for (const item of items) results.push({
11188
+ globalIndex: results.length,
11189
+ sourceKey: source.key,
11190
+ sourceLabel: source.label,
11191
+ item
11192
+ });
11193
+ continue;
11194
+ }
11195
+ for (const item of source.items) {
11196
+ if (query && !item.label.toLowerCase().includes(query) && !(item.subLabel?.toLowerCase().includes(query) ?? false)) continue;
11197
+ results.push({
11198
+ globalIndex: results.length,
11199
+ sourceKey: source.key,
11200
+ sourceLabel: source.label,
11201
+ item
11202
+ });
11203
+ }
11204
+ }
11205
+ return results;
11206
+ });
11207
+ const groupedItems = computed(() => {
11208
+ const items = unref(filteredItems);
11209
+ const groups = /* @__PURE__ */ new Map();
11210
+ for (const result of items) {
11211
+ if (!groups.has(result.sourceKey)) groups.set(result.sourceKey, {
11212
+ sourceKey: result.sourceKey,
11213
+ sourceLabel: result.sourceLabel,
11214
+ startIndex: result.globalIndex,
11215
+ items: []
11216
+ });
11217
+ groups.get(result.sourceKey).items.push(result);
11218
+ }
11219
+ return Array.from(groups.values());
11220
+ });
11221
+ const tabs = computed(() => unref(params.sources).filter((source) => source.tab));
11222
+ const activeTabSource = computed(() => {
11223
+ const tab = unref(activeTab);
11224
+ if (!tab) return null;
11225
+ return unref(tabs).find((source) => source.key === tab) ?? null;
11226
+ });
11227
+ const subActions = computed(() => {
11228
+ const actions = unref(subActionTarget)?.subActions ?? [];
11229
+ const query = unref(search).toLowerCase().trim();
11230
+ if (!query) return actions;
11231
+ return actions.filter((action) => action.label.toLowerCase().includes(query));
11232
+ });
11233
+ const totalItems = computed(() => {
11234
+ if (unref(subActionTarget)) return unref(subActions).length;
11235
+ return unref(filteredItems).length;
11236
+ });
11237
+ function setSearch(value) {
11238
+ search.value = value;
11239
+ highlightedIndex.value = value.trim() ? 0 : -1;
11240
+ if (value.trim() && !unref(subActionTarget) && unref(params.sources).some((s) => s.fetchSearch)) isLoading.value = true;
11241
+ else isLoading.value = false;
11242
+ }
11243
+ function setActiveTab(key) {
11244
+ const tabKeys = [null, ...unref(tabs).map((t) => t.key)];
11245
+ isTransitioningBack.value = tabKeys.indexOf(key) < tabKeys.indexOf(unref(activeTab));
11246
+ activeTab.value = key;
11247
+ search.value = "";
11248
+ highlightedIndex.value = -1;
11249
+ subActionTarget.value = null;
11250
+ }
11251
+ function selectHighlighted(onClose, onActivate) {
11252
+ const index = unref(highlightedIndex);
11253
+ if (unref(subActionTarget)) {
11254
+ const action = unref(subActions)[index];
11255
+ if (action) {
11256
+ action.onActivate();
11257
+ onClose();
11258
+ }
11259
+ return;
11260
+ }
11261
+ const result = unref(filteredItems)[index];
11262
+ if (!result) return;
11263
+ if (result.item.subActions?.length) enterSubActions(result.item);
11264
+ else {
11265
+ result.item.onActivate();
11266
+ onActivate(result.item);
11267
+ }
11268
+ }
11269
+ function enterSubActions(item) {
11270
+ savedState.value = {
11271
+ search: unref(search),
11272
+ highlightedIndex: unref(highlightedIndex)
11273
+ };
11274
+ subActionTarget.value = item;
11275
+ search.value = "";
11276
+ highlightedIndex.value = 0;
11277
+ }
11278
+ function navigateTab(direction) {
11279
+ const allTabs = unref(tabs);
11280
+ if (allTabs.length === 0) return;
11281
+ const tabKeys = [null, ...allTabs.map((tab) => tab.key)];
11282
+ setActiveTab(tabKeys[(tabKeys.indexOf(unref(activeTab)) + direction + tabKeys.length) % tabKeys.length]);
11283
+ }
11284
+ function restoreState() {
11285
+ subActionTarget.value = null;
11286
+ const state = unref(savedState);
11287
+ if (state) {
11288
+ search.value = state.search;
11289
+ isKeyboardNav.value = true;
11290
+ highlightedIndex.value = state.highlightedIndex;
11291
+ savedState.value = null;
11292
+ } else highlightedIndex.value = -1;
11293
+ }
11294
+ function onKeyNavigate(evt, onClose, onActivate) {
11295
+ const total = unref(totalItems);
11296
+ const current = unref(highlightedIndex);
11297
+ switch (evt.key) {
11298
+ case "ArrowDown":
11299
+ evt.preventDefault();
11300
+ isKeyboardNav.value = true;
11301
+ highlightedIndex.value = Math.min(total - 1, current + 1);
11302
+ break;
11303
+ case "ArrowUp":
11304
+ evt.preventDefault();
11305
+ isKeyboardNav.value = true;
11306
+ highlightedIndex.value = total === 0 ? -1 : Math.max(0, current - 1);
11307
+ break;
11308
+ case "ArrowLeft":
11309
+ if (!unref(search) && !unref(subActionTarget)) {
11310
+ evt.preventDefault();
11311
+ navigateTab(-1);
11312
+ }
11313
+ break;
11314
+ case "ArrowRight":
11315
+ if (!unref(search) && !unref(subActionTarget)) {
11316
+ evt.preventDefault();
11317
+ navigateTab(1);
11318
+ }
11319
+ break;
11320
+ case "Enter":
11321
+ evt.preventDefault();
11322
+ selectHighlighted(onClose, onActivate);
11323
+ break;
11324
+ case "Escape":
11325
+ evt.preventDefault();
11326
+ if (unref(subActionTarget)) restoreState();
11327
+ else onClose();
11328
+ break;
11329
+ case "Backspace":
11330
+ if (!unref(search)) {
11331
+ if (unref(subActionTarget)) {
11332
+ evt.preventDefault();
11333
+ restoreState();
11334
+ } else if (unref(activeTab)) {
11335
+ evt.preventDefault();
11336
+ activeTab.value = null;
11337
+ highlightedIndex.value = -1;
11338
+ }
11339
+ }
11340
+ break;
11341
+ }
11342
+ }
11343
+ function reset() {
11344
+ search.value = "";
11345
+ activeTab.value = null;
11346
+ highlightedIndex.value = -1;
11347
+ subActionTarget.value = null;
11348
+ asyncResults.value = /* @__PURE__ */ new Map();
11349
+ isLoading.value = false;
11350
+ fetchGeneration++;
11351
+ }
11352
+ watch(debouncedSearch, async (query) => {
11353
+ if (unref(subActionTarget)) return;
11354
+ const trimmed = query.trim();
11355
+ if (!trimmed) {
11356
+ asyncResults.value = /* @__PURE__ */ new Map();
11357
+ isLoading.value = false;
11358
+ return;
11359
+ }
11360
+ const tab = unref(activeTab);
11361
+ const asyncSources = unref(params.sources).filter((s) => {
11362
+ if (!s.fetchSearch) return false;
11363
+ return !tab || s.key === tab;
11364
+ });
11365
+ if (asyncSources.length === 0) {
11366
+ isLoading.value = false;
11367
+ return;
11368
+ }
11369
+ const generation = ++fetchGeneration;
11370
+ isLoading.value = true;
11371
+ try {
11372
+ const fetched = await Promise.all(asyncSources.map(async (source) => ({
11373
+ key: source.key,
11374
+ items: await source.fetchSearch(trimmed)
11375
+ })));
11376
+ if (generation !== fetchGeneration) return;
11377
+ const map = /* @__PURE__ */ new Map();
11378
+ for (const { key, items } of fetched) map.set(key, items);
11379
+ asyncResults.value = map;
11380
+ } finally {
11381
+ if (generation === fetchGeneration) isLoading.value = false;
11382
+ }
11383
+ });
11384
+ watch(highlightedIndex, (index) => {
11385
+ if (index < 0 || !unref(isKeyboardNav)) return;
11386
+ isKeyboardNav.value = false;
11387
+ nextTick(() => unref(params.itemRefs)?.[index]?.$el?.scrollIntoView({ block: "nearest" }));
11388
+ });
11389
+ watch(totalItems, (total) => {
11390
+ if (unref(highlightedIndex) >= total) highlightedIndex.value = Math.max(-1, total - 1);
11391
+ });
11392
+ return {
11393
+ search,
11394
+ activeTab,
11395
+ activeTabSource,
11396
+ highlightedIndex,
11397
+ isLoading,
11398
+ isTransitioningBack,
11399
+ subActionTarget,
11400
+ filteredItems,
11401
+ groupedItems,
11402
+ subActions,
11403
+ tabs,
11404
+ totalItems,
11405
+ setSearch,
11406
+ setActiveTab,
11407
+ enterSubActions,
11408
+ onKeyNavigate,
11409
+ reset
11410
+ };
11411
+ }
11412
+ var CommandPalette_module_default = {
11413
+ commandPaletteBackdrop: `command-palette-backdrop`,
11414
+ commandPaletteBackdropIn: `command-palette-backdrop-in`,
11415
+ isClosing: `is-closing`,
11416
+ commandPaletteBackdropOut: `command-palette-backdrop-out`,
11417
+ commandPaletteDialog: `command-palette-dialog`,
11418
+ commandPaletteIn: `command-palette-in`,
11419
+ commandPaletteOut: `command-palette-out`,
11420
+ commandPalette: `command-palette`,
11421
+ commandPaletteSearch: `command-palette-search`,
11422
+ commandPaletteSearchIcon: `command-palette-search-icon`,
11423
+ commandPaletteSearchInput: `command-palette-search-input`,
11424
+ commandPaletteBreadcrumb: `command-palette-breadcrumb`,
11425
+ commandPaletteBreadcrumbSeparator: `command-palette-breadcrumb-separator`,
11426
+ commandPaletteTabs: `command-palette-tabs`,
11427
+ commandPaletteTab: `command-palette-tab`,
11428
+ commandPaletteTabActive: `command-palette-tab-active command-palette-tab`,
11429
+ commandPaletteTabIcon: `command-palette-tab-icon`,
11430
+ commandPaletteResults: `command-palette-results`,
11431
+ commandPaletteLoading: `command-palette-loading`,
11432
+ commandPaletteEmpty: `command-palette-empty`,
11433
+ commandPaletteGroup: `command-palette-group`,
11434
+ commandPaletteGroupIcon: `command-palette-group-icon`,
11435
+ commandPaletteItem: `command-palette-item`,
11436
+ commandPaletteItemHighlighted: `command-palette-item-highlighted command-palette-item`,
11437
+ commandPaletteItemIcon: `command-palette-item-icon`,
11438
+ icon: `icon`,
11439
+ commandPaletteItemContent: `command-palette-item-content`,
11440
+ commandPaletteItemLabel: `command-palette-item-label`,
11441
+ commandPaletteItemSubLabel: `command-palette-item-sub-label`,
11442
+ commandPaletteItemSubActionIndicator: `command-palette-item-sub-action-indicator`
11443
+ };
11444
+ //#endregion
11445
+ //#region src/component/FluxCommandPaletteGroup.vue
11446
+ var FluxCommandPaletteGroup_default = /* @__PURE__ */ defineComponent({
11447
+ __name: "FluxCommandPaletteGroup",
11448
+ props: {
11449
+ icon: {},
11450
+ label: {}
11451
+ },
11452
+ setup(__props) {
11453
+ return (_ctx, _cache) => {
11454
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(CommandPalette_module_default).commandPaletteGroup) }, [__props.icon ? (openBlock(), createBlock(FluxIcon_default, {
11455
+ key: 0,
11456
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteGroupIcon),
11457
+ name: __props.icon
11458
+ }, null, 8, ["class", "name"])) : createCommentVNode("", true), createElementVNode("span", null, toDisplayString(__props.label), 1)], 2);
11459
+ };
11460
+ }
11461
+ });
11462
+ //#endregion
11463
+ //#region src/component/FluxCommandPaletteItem.vue
11464
+ var FluxCommandPaletteItem_default = /* @__PURE__ */ defineComponent({
11465
+ __name: "FluxCommandPaletteItem",
11466
+ props: {
11467
+ command: {},
11468
+ hasSubActions: { type: Boolean },
11469
+ icon: {},
11470
+ isHighlighted: { type: Boolean },
11471
+ label: {},
11472
+ subLabel: {}
11473
+ },
11474
+ emits: ["activate", "highlight"],
11475
+ setup(__props, { emit: $emit }) {
11476
+ return (_ctx, _cache) => {
11477
+ return openBlock(), createElementBlock("button", {
11478
+ class: normalizeClass(__props.isHighlighted ? unref(CommandPalette_module_default).commandPaletteItemHighlighted : unref(CommandPalette_module_default).commandPaletteItem),
11479
+ tabindex: "-1",
11480
+ type: "button",
11481
+ onClick: _cache[0] || (_cache[0] = ($event) => $emit("activate")),
11482
+ onMousedown: _cache[1] || (_cache[1] = withModifiers(() => {}, ["prevent"])),
11483
+ onMouseenter: _cache[2] || (_cache[2] = ($event) => $emit("highlight"))
11484
+ }, [
11485
+ __props.icon ? (openBlock(), createElementBlock("div", {
11486
+ key: 0,
11487
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteItemIcon)
11488
+ }, [createVNode(FluxIcon_default, { name: __props.icon }, null, 8, ["name"])], 2)) : createCommentVNode("", true),
11489
+ createElementVNode("div", { class: normalizeClass(unref(CommandPalette_module_default).commandPaletteItemContent) }, [createElementVNode("div", { class: normalizeClass(unref(CommandPalette_module_default).commandPaletteItemLabel) }, toDisplayString(__props.label), 3), __props.subLabel ? (openBlock(), createElementBlock("div", {
11490
+ key: 0,
11491
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteItemSubLabel)
11492
+ }, toDisplayString(__props.subLabel), 3)) : createCommentVNode("", true)], 2),
11493
+ __props.command ? (openBlock(), createBlock(FluxTag_default, {
11494
+ key: 1,
11495
+ "is-keyboard-shortcut": "",
11496
+ label: __props.command
11497
+ }, null, 8, ["label"])) : createCommentVNode("", true),
11498
+ __props.hasSubActions ? (openBlock(), createBlock(FluxIcon_default, {
11499
+ key: 2,
11500
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteItemSubActionIndicator),
11501
+ name: "chevron-right"
11502
+ }, null, 8, ["class"])) : createCommentVNode("", true)
11503
+ ], 34);
11504
+ };
11505
+ }
11506
+ });
11507
+ //#endregion
11508
+ //#region src/component/FluxCommandPalette.vue?vue&type=script&setup=true&lang.ts
11509
+ var _hoisted_1$36 = ["placeholder", "value"];
11510
+ var _hoisted_2$17 = ["onClick"];
11511
+ //#endregion
11512
+ //#region src/component/FluxCommandPalette.vue
11513
+ var FluxCommandPalette_default = /* @__PURE__ */ defineComponent({
11514
+ __name: "FluxCommandPalette",
11515
+ props: {
11516
+ hasKeyboardShortcut: { type: Boolean },
11517
+ placeholder: {},
11518
+ sources: {}
11519
+ },
11520
+ emits: ["select"],
11521
+ setup(__props, { expose: __expose, emit: __emit }) {
11522
+ const props = __props;
11523
+ const emit = __emit;
11524
+ const dialogRef = useTemplateRef("dialogRef");
11525
+ const inputRef = useTemplateRef("inputRef");
11526
+ const itemRefs = ref();
11527
+ const isOpen = ref(false);
11528
+ const isClosing = ref(false);
11529
+ const { search, activeTab, activeTabSource, highlightedIndex, isLoading, isTransitioningBack, subActionTarget, groupedItems, subActions, tabs, setSearch, setActiveTab, enterSubActions, onKeyNavigate, reset } = useCommandPalette({
11530
+ sources: toRef(() => props.sources),
11531
+ itemRefs
11532
+ });
11533
+ function open() {
11534
+ if (unref(isOpen)) return;
11535
+ isOpen.value = true;
11536
+ requestAnimationFrame(() => unref(inputRef)?.focus());
11537
+ }
11538
+ function close() {
11539
+ if (!unref(isOpen)) return;
11540
+ const dialog = unref(dialogRef);
11541
+ if (!dialog) return;
11542
+ isClosing.value = true;
11543
+ const finishClose = () => {
11544
+ isClosing.value = false;
11545
+ isOpen.value = false;
11546
+ reset();
11547
+ };
11548
+ const fallbackTimeout = setTimeout(finishClose, 250);
11549
+ dialog.addEventListener("animationend", () => {
11550
+ clearTimeout(fallbackTimeout);
11551
+ finishClose();
11552
+ }, { once: true });
11553
+ }
11554
+ function clearSubActionTarget() {
11555
+ subActionTarget.value = null;
11556
+ highlightedIndex.value = -1;
11557
+ }
11558
+ function activateItem(item) {
11559
+ if (item.subActions?.length) enterSubActions(item);
11560
+ else {
11561
+ item.onActivate();
11562
+ emit("select", item);
11563
+ close();
11564
+ }
11565
+ }
11566
+ function activateSubAction(action) {
11567
+ action.onActivate();
11568
+ close();
11569
+ }
11570
+ function onKeyDown(evt) {
11571
+ onKeyNavigate(evt, close, (item) => {
11572
+ emit("select", item);
11573
+ close();
11574
+ });
11575
+ }
11576
+ function onGlobalKeyDown(evt) {
11577
+ if (evt.key === "k" && (evt.metaKey || evt.ctrlKey)) {
11578
+ evt.preventDefault();
11579
+ if (unref(isOpen)) close();
11580
+ else open();
11581
+ }
11582
+ }
11583
+ if (!A && props.hasKeyboardShortcut) {
11584
+ onMounted(() => {
11585
+ window.addEventListener("keydown", onGlobalKeyDown);
11586
+ });
11587
+ onUnmounted(() => {
11588
+ window.removeEventListener("keydown", onGlobalKeyDown);
11589
+ });
11590
+ }
11591
+ __expose({
11592
+ close,
11593
+ open
11594
+ });
11595
+ return (_ctx, _cache) => {
11596
+ return openBlock(), createBlock(Teleport, { to: "body" }, [isOpen.value || isClosing.value ? (openBlock(), createElementBlock("div", {
11597
+ key: 0,
11598
+ class: normalizeClass([unref(CommandPalette_module_default).commandPaletteBackdrop, isClosing.value && unref(CommandPalette_module_default).isClosing]),
11599
+ onClick: close
11600
+ }, null, 2)) : createCommentVNode("", true), isOpen.value || isClosing.value ? (openBlock(), createElementBlock("div", {
11601
+ key: 1,
11602
+ ref_key: "dialogRef",
11603
+ ref: dialogRef,
11604
+ class: normalizeClass([unref(CommandPalette_module_default).commandPaletteDialog, isClosing.value && unref(CommandPalette_module_default).isClosing]),
11605
+ onClick: withModifiers(close, ["self"]),
11606
+ onKeydown: onKeyDown
11607
+ }, [withDirectives((openBlock(), createElementBlock("div", {
11608
+ class: normalizeClass(unref(CommandPalette_module_default).commandPalette),
11609
+ onMousedown: _cache[6] || (_cache[6] = withModifiers(() => {}, ["prevent"]))
11610
+ }, [
11611
+ createElementVNode("div", { class: normalizeClass(unref(CommandPalette_module_default).commandPaletteSearch) }, [
11612
+ createVNode(FluxIcon_default, {
11613
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteSearchIcon),
11614
+ name: "magnifying-glass"
11615
+ }, null, 8, ["class"]),
11616
+ unref(activeTabSource) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("button", {
11617
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteBreadcrumb),
11618
+ tabindex: "-1",
11619
+ type: "button",
11620
+ onClick: clearSubActionTarget,
11621
+ onMousedown: _cache[0] || (_cache[0] = withModifiers(() => {}, ["prevent"]))
11622
+ }, toDisplayString(unref(activeTabSource).label), 35), createElementVNode("span", { class: normalizeClass(unref(CommandPalette_module_default).commandPaletteBreadcrumbSeparator) }, "/", 2)], 64)) : createCommentVNode("", true),
11623
+ unref(subActionTarget) ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("button", {
11624
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteBreadcrumb),
11625
+ tabindex: "-1",
11626
+ type: "button",
11627
+ onMousedown: _cache[1] || (_cache[1] = withModifiers(() => {}, ["prevent"]))
11628
+ }, toDisplayString(unref(subActionTarget).label), 35), createElementVNode("span", { class: normalizeClass(unref(CommandPalette_module_default).commandPaletteBreadcrumbSeparator) }, "/", 2)], 64)) : createCommentVNode("", true),
11629
+ createElementVNode("input", {
11630
+ ref_key: "inputRef",
11631
+ ref: inputRef,
11632
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteSearchInput),
11633
+ placeholder: __props.placeholder ?? "Search...",
11634
+ value: unref(search),
11635
+ type: "text",
11636
+ onInput: _cache[2] || (_cache[2] = ($event) => unref(setSearch)($event.target.value))
11637
+ }, null, 42, _hoisted_1$36),
11638
+ createVNode(FluxTag_default, {
11639
+ "is-keyboard-shortcut": "",
11640
+ label: "Esc"
11641
+ })
11642
+ ], 2),
11643
+ unref(tabs).length > 0 && !unref(subActionTarget) ? (openBlock(), createElementBlock("div", {
11644
+ key: 0,
11645
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteTabs)
11646
+ }, [createElementVNode("button", {
11647
+ class: normalizeClass(unref(activeTab) === null ? unref(CommandPalette_module_default).commandPaletteTabActive : unref(CommandPalette_module_default).commandPaletteTab),
11648
+ tabindex: "-1",
11649
+ type: "button",
11650
+ onClick: _cache[3] || (_cache[3] = ($event) => unref(setActiveTab)(null)),
11651
+ onMousedown: _cache[4] || (_cache[4] = withModifiers(() => {}, ["prevent"]))
11652
+ }, " All ", 34), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(tabs), (tab) => {
11653
+ return openBlock(), createElementBlock("button", {
11654
+ key: tab.key,
11655
+ class: normalizeClass(unref(activeTab) === tab.key ? unref(CommandPalette_module_default).commandPaletteTabActive : unref(CommandPalette_module_default).commandPaletteTab),
11656
+ tabindex: "-1",
11657
+ type: "button",
11658
+ onClick: ($event) => unref(setActiveTab)(tab.key),
11659
+ onMousedown: _cache[5] || (_cache[5] = withModifiers(() => {}, ["prevent"]))
11660
+ }, [tab.icon ? (openBlock(), createBlock(FluxIcon_default, {
11661
+ key: 0,
11662
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteTabIcon),
11663
+ name: tab.icon
11664
+ }, null, 8, ["class", "name"])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(tab.label), 1)], 42, _hoisted_2$17);
11665
+ }), 128))], 2)) : createCommentVNode("", true),
11666
+ createVNode(FluxWindowTransition_default, { "is-back": unref(isTransitioningBack) }, {
11667
+ default: withCtx(() => [(openBlock(), createElementBlock("div", {
11668
+ key: unref(activeTab),
11669
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteResults)
11670
+ }, [unref(subActionTarget) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(subActions), (action, index) => {
11671
+ return openBlock(), createBlock(FluxCommandPaletteItem_default, {
11672
+ key: index,
11673
+ ref_for: true,
11674
+ ref_key: "itemRefs",
11675
+ ref: itemRefs,
11676
+ icon: action.icon,
11677
+ "is-highlighted": unref(highlightedIndex) === index,
11678
+ label: action.label,
11679
+ onActivate: ($event) => activateSubAction(action),
11680
+ onHighlight: ($event) => highlightedIndex.value = index
11681
+ }, null, 8, [
11682
+ "icon",
11683
+ "is-highlighted",
11684
+ "label",
11685
+ "onActivate",
11686
+ "onHighlight"
11687
+ ]);
11688
+ }), 128)) : unref(groupedItems).length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(unref(groupedItems), (group) => {
11689
+ return openBlock(), createElementBlock(Fragment, { key: group.sourceKey }, [group.sourceLabel ? (openBlock(), createBlock(FluxCommandPaletteGroup_default, {
11690
+ key: 0,
11691
+ label: group.sourceLabel
11692
+ }, null, 8, ["label"])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(group.items, (result) => {
11693
+ return openBlock(), createBlock(FluxCommandPaletteItem_default, {
11694
+ key: result.item.id,
11695
+ ref_for: true,
11696
+ ref_key: "itemRefs",
11697
+ ref: itemRefs,
11698
+ command: result.item.command,
11699
+ "has-sub-actions": !!result.item.subActions?.length,
11700
+ icon: result.item.icon,
11701
+ "is-highlighted": unref(highlightedIndex) === result.globalIndex,
11702
+ label: result.item.label,
11703
+ "sub-label": result.item.subLabel,
11704
+ onActivate: ($event) => activateItem(result.item),
11705
+ onHighlight: ($event) => highlightedIndex.value = result.globalIndex
11706
+ }, null, 8, [
11707
+ "command",
11708
+ "has-sub-actions",
11709
+ "icon",
11710
+ "is-highlighted",
11711
+ "label",
11712
+ "sub-label",
11713
+ "onActivate",
11714
+ "onHighlight"
11715
+ ]);
11716
+ }), 128))], 64);
11717
+ }), 128)) : unref(isLoading) ? (openBlock(), createElementBlock("div", {
11718
+ key: 2,
11719
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteLoading)
11720
+ }, [createVNode(FluxSpinner_default, { size: 22 })], 2)) : (openBlock(), createElementBlock("div", {
11721
+ key: 3,
11722
+ class: normalizeClass(unref(CommandPalette_module_default).commandPaletteEmpty)
11723
+ }, " No results found. ", 2))], 2))]),
11724
+ _: 1
11725
+ }, 8, ["is-back"])
11726
+ ], 34)), [[unref(wi)]])], 34)) : createCommentVNode("", true)]);
11727
+ };
11728
+ }
11729
+ });
11157
11730
  var Comment_module_default = {
11158
11731
  comment: `comment`,
11159
11732
  avatar: `avatar`,
@@ -11310,14 +11883,6 @@ var CoordinatePicker_default = /* @__PURE__ */ defineComponent({
11310
11883
  const min = computed(() => Array.isArray(__props.min) ? __props.min : [__props.min, __props.min]);
11311
11884
  const step = computed(() => Array.isArray(__props.step) ? __props.step : [__props.step, __props.step]);
11312
11885
  const thumbPosition = computed(() => [(unref(modelValue)[0] - unref(min)[0]) / (unref(max)[0] - unref(min)[0]), (unref(modelValue)[1] - unref(min)[1]) / (unref(max)[1] - unref(min)[1])]);
11313
- onMounted(() => {
11314
- document.addEventListener("pointermove", onPointerMove);
11315
- document.addEventListener("pointerup", onPointerUp, { passive: true });
11316
- });
11317
- onUnmounted(() => {
11318
- document.removeEventListener("pointermove", onPointerMove);
11319
- document.removeEventListener("pointerup", onPointerUp);
11320
- });
11321
11886
  function onDecrement(x, y) {
11322
11887
  if (unref(disabled)) return;
11323
11888
  let [valueX, valueY] = unref(modelValue);
@@ -11341,6 +11906,8 @@ var CoordinatePicker_default = /* @__PURE__ */ defineComponent({
11341
11906
  function onPointerDown(evt) {
11342
11907
  if (unref(disabled)) return;
11343
11908
  isDragging.value = true;
11909
+ document.addEventListener("pointermove", onPointerMove);
11910
+ document.addEventListener("pointerup", onPointerUp, { passive: true });
11344
11911
  requestAnimationFrame(() => onPointerMove(evt));
11345
11912
  }
11346
11913
  function onPointerMove(evt) {
@@ -11361,8 +11928,14 @@ var CoordinatePicker_default = /* @__PURE__ */ defineComponent({
11361
11928
  }
11362
11929
  function onPointerUp() {
11363
11930
  isDragging.value = false;
11931
+ document.removeEventListener("pointermove", onPointerMove);
11932
+ document.removeEventListener("pointerup", onPointerUp);
11364
11933
  }
11365
11934
  watch(isDragging, (isDragging) => emit("dragging", isDragging));
11935
+ onUnmounted(() => {
11936
+ document.removeEventListener("pointermove", onPointerMove);
11937
+ document.removeEventListener("pointerup", onPointerUp);
11938
+ });
11366
11939
  return (_ctx, _cache) => {
11367
11940
  return openBlock(), createElementBlock("div", {
11368
11941
  ref: "root",
@@ -11705,7 +12278,7 @@ var FluxColorPicker_default = /* @__PURE__ */ defineComponent({
11705
12278
  return computed({
11706
12279
  get: () => fromHSV?.(...unref(hsv))[index] ?? unref(hsv)[index],
11707
12280
  set: (value) => {
11708
- const values = fromHSV?.(...unref(hsv)) ?? unref(hsv);
12281
+ const values = [...fromHSV?.(...unref(hsv)) ?? unref(hsv)];
11709
12282
  values[index] = value;
11710
12283
  hsv.value = toHSV?.(...values) ?? values;
11711
12284
  }
@@ -12001,7 +12574,7 @@ var FluxColorSelect_default = /* @__PURE__ */ defineComponent({
12001
12574
  emits: ["update:modelValue"],
12002
12575
  setup(__props) {
12003
12576
  const modelValue = useModel(__props, "modelValue");
12004
- const t = useTranslate_default();
12577
+ const translate = useTranslate_default();
12005
12578
  const customColor = ref("#000000");
12006
12579
  function select(color, close) {
12007
12580
  modelValue.value = color;
@@ -12033,10 +12606,10 @@ var FluxColorSelect_default = /* @__PURE__ */ defineComponent({
12033
12606
  class: normalizeClass(unref(Color_module_default).colorSelectCustomPicker)
12034
12607
  }, null, 8, ["modelValue", "class"]), createVNode(FluxPaneBody_default, { class: normalizeClass(unref(Color_module_default).colorSelectButtons) }, {
12035
12608
  default: withCtx(() => [createVNode(FluxSecondaryButton_default, {
12036
- label: unref(t)("flux.cancel"),
12609
+ label: unref(translate)("flux.cancel"),
12037
12610
  onClick: ($event) => close()
12038
12611
  }, null, 8, ["label", "onClick"]), createVNode(FluxPrimaryButton_default, {
12039
- label: unref(t)("flux.ok"),
12612
+ label: unref(translate)("flux.ok"),
12040
12613
  onClick: ($event) => select(customColor.value, close)
12041
12614
  }, null, 8, ["label", "onClick"])]),
12042
12615
  _: 2
@@ -12083,10 +12656,10 @@ var FluxFormSelect_default = /* @__PURE__ */ defineComponent({
12083
12656
  const disabled = useDisabled_default(toRef(() => __props.disabled));
12084
12657
  const { groups, selected, values } = useFormSelect_default(modelValue, __props.isMultiple, toRef(() => __props.options), modelSearch);
12085
12658
  function onDeselect(id) {
12086
- if (unref(__props.isMultiple)) modelValue.value = unref(values).filter((v) => v !== id);
12659
+ if (__props.isMultiple) modelValue.value = unref(values).filter((v) => v !== id);
12087
12660
  }
12088
12661
  function onSelect(id) {
12089
- if (unref(__props.isMultiple)) modelValue.value = [...unref(values), id];
12662
+ if (__props.isMultiple) modelValue.value = [...unref(values), id];
12090
12663
  else modelValue.value = id;
12091
12664
  }
12092
12665
  return (_ctx, _cache) => {
@@ -12115,16 +12688,16 @@ var FluxFormSelect_default = /* @__PURE__ */ defineComponent({
12115
12688
  });
12116
12689
  //#endregion
12117
12690
  //#region src/css/component/Pagination.module.scss
12118
- var { "secondaryButtonIcon": _0$7, "secondaryButton": _1$3, "secondaryButtonLabel": _2$1 } = Button_module_default;
12691
+ var { "secondaryButton": _0$7, "secondaryButtonLabel": _1$3, "secondaryButtonIcon": _2$1 } = Button_module_default;
12119
12692
  var Pagination_module_default = {
12120
12693
  pagination: `pagination`,
12121
- paginationButton: `pagination-button ${_1$3}`,
12694
+ paginationButton: `pagination-button ${_0$7}`,
12122
12695
  secondaryButton: `secondary-button`,
12123
12696
  paginationButtonArrow: `pagination-button-arrow`,
12124
12697
  paginationButtonCurrent: `pagination-button-current`,
12125
12698
  paginationButtonSpacer: `pagination-button-spacer`,
12126
- paginationButtonIcon: `pagination-button-icon ${_0$7}`,
12127
- paginationButtonLabel: `pagination-button-label ${_2$1}`,
12699
+ paginationButtonIcon: `pagination-button-icon ${_2$1}`,
12700
+ paginationButtonLabel: `pagination-button-label ${_1$3}`,
12128
12701
  paginationBar: `pagination-bar`,
12129
12702
  paginationBarLimit: `pagination-bar-limit`,
12130
12703
  paginationBarLimitDisplayingOf: `pagination-bar-limit-displaying-of`,
@@ -12381,13 +12954,13 @@ var FluxPaginationBar_default = /* @__PURE__ */ defineComponent({
12381
12954
  });
12382
12955
  //#endregion
12383
12956
  //#region src/css/component/Table.module.scss
12384
- var { "basePaneElement": _0$6, "basePaneLoader": _1$2 } = Pane_module_default$1;
12957
+ var { "basePaneLoader": _0$6, "basePaneElement": _1$2 } = Pane_module_default$1;
12385
12958
  var Table_module_default = {
12386
- table: `table ${_0$6}`,
12959
+ table: `table ${_1$2}`,
12387
12960
  tableBase: `table-base`,
12388
12961
  tableFill: `table-fill`,
12389
12962
  tablePagination: `table-pagination`,
12390
- tableLoader: `table-loader ${_1$2}`,
12963
+ tableLoader: `table-loader ${_0$6}`,
12391
12964
  tableRow: `table-row`,
12392
12965
  tableCell: `table-cell`,
12393
12966
  tableCellContent: `table-cell-content`,
@@ -12672,10 +13245,7 @@ var FluxDatePicker_default = /* @__PURE__ */ defineComponent({
12672
13245
  min: {},
12673
13246
  rangeMode: {}
12674
13247
  }, {
12675
- "modelValue": {
12676
- default: null,
12677
- required: true
12678
- },
13248
+ "modelValue": { required: true },
12679
13249
  "modelModifiers": {}
12680
13250
  }),
12681
13251
  emits: ["update:modelValue"],
@@ -13334,11 +13904,11 @@ var FluxFader_default = /* @__PURE__ */ defineComponent({
13334
13904
  current.value = unref(current) + 1 >= unref(count) ? 0 : unref(current) + 1;
13335
13905
  }
13336
13906
  function previous() {
13337
- current.value = unref(current) - 1 <= -1 ? unref(count) - 1 : unref(current) + 1;
13907
+ current.value = unref(current) - 1 <= -1 ? unref(count) - 1 : unref(current) - 1;
13338
13908
  }
13339
13909
  watch(current, (current) => {
13340
13910
  const fader = T(faderRef);
13341
- if (!fader || fader.children.length === 0) return;
13911
+ if (!fader || fader.children.length === 0 || current < 0) return;
13342
13912
  Array.from(fader.children).forEach((item) => item.classList.remove(Fader_module_default.isCurrent));
13343
13913
  fader.children[current].classList.add(Fader_module_default.isCurrent);
13344
13914
  emit("update", current);
@@ -14355,8 +14925,8 @@ var FluxFocalPointEditor_default = /* @__PURE__ */ defineComponent({
14355
14925
  const image = unref(imageRef);
14356
14926
  if (!image || !dragging.value) return;
14357
14927
  const { top, left, width, height } = image.getBoundingClientRect();
14358
- const { pageX, pageY } = evt;
14359
- dragging.value = [Math.max(0, Math.min(1, (pageX - left) / width)) * 100, Math.max(0, Math.min(1, (pageY - top) / height)) * 100];
14928
+ const { clientX, clientY } = evt;
14929
+ dragging.value = [Math.max(0, Math.min(1, (clientX - left) / width)) * 100, Math.max(0, Math.min(1, (clientY - top) / height)) * 100];
14360
14930
  }
14361
14931
  function onPointerUp() {
14362
14932
  if (!dragging.value) return;
@@ -14581,13 +15151,9 @@ var FluxFormDateInput_default = /* @__PURE__ */ defineComponent({
14581
15151
  var FluxFormDateRangeInput_default = /* @__PURE__ */ defineComponent({
14582
15152
  __name: "FluxFormDateRangeInput",
14583
15153
  props: /* @__PURE__ */ mergeModels({
14584
- autoComplete: {},
14585
- autoFocus: { type: Boolean },
14586
15154
  disabled: { type: Boolean },
14587
- isReadonly: { type: Boolean },
14588
15155
  max: {},
14589
15156
  min: {},
14590
- placeholder: {},
14591
15157
  rangeMode: { default: "range" }
14592
15158
  }, {
14593
15159
  "modelValue": { required: true },
@@ -14678,8 +15244,8 @@ var FluxFormDateTimeInput_default = /* @__PURE__ */ defineComponent({
14678
15244
  if (!DateTime.isDateTime(dateTime)) return;
14679
15245
  localValue.value = (localValue.value ?? DateTime.now()).set({
14680
15246
  hour: dateTime.hour,
14681
- minute: unref(__props.isHourOnly) ? 0 : dateTime.minute,
14682
- second: unref(__props.isHourOnly) ? 0 : dateTime.second
15247
+ minute: __props.isHourOnly ? 0 : dateTime.minute,
15248
+ second: __props.isHourOnly ? 0 : dateTime.second
14683
15249
  });
14684
15250
  }
14685
15251
  watch(() => __props.isHourOnly, () => __props.isHourOnly && (localValue.value = unref(localValue)?.startOf("hour") ?? null), { immediate: true });
@@ -15171,6 +15737,7 @@ var _hoisted_1$18 = [
15171
15737
  "autocomplete",
15172
15738
  "autofocus",
15173
15739
  "disabled",
15740
+ "readonly",
15174
15741
  "maxlength",
15175
15742
  "placeholder",
15176
15743
  "aria-disabled"
@@ -15209,6 +15776,7 @@ var FluxFormTextArea_default = /* @__PURE__ */ defineComponent({
15209
15776
  autocomplete: __props.autoComplete,
15210
15777
  autofocus: __props.autoFocus,
15211
15778
  disabled: unref(disabled),
15779
+ readonly: __props.isReadonly,
15212
15780
  maxlength: __props.maxLength,
15213
15781
  placeholder: __props.placeholder,
15214
15782
  style: normalizeStyle({ "--rows": __props.rows }),
@@ -17554,12 +18122,9 @@ var FluxQuantitySelector_default = /* @__PURE__ */ defineComponent({
17554
18122
  });
17555
18123
  }
17556
18124
  watchEffect(() => {
17557
- if (unref(modelValue) > __props.max) {
17558
- increment();
17559
- return;
17560
- }
17561
- if (unref(modelValue) < __props.min) {
17562
- decrement();
18125
+ const value = unref(modelValue);
18126
+ if (value > __props.max || value < __props.min) {
18127
+ modelValue.value = Math.min(__props.max, Math.max(__props.min, value));
17563
18128
  return;
17564
18129
  }
17565
18130
  sizeToContent();
@@ -17680,10 +18245,11 @@ var FluxSnackbar_default = /* @__PURE__ */ defineComponent({
17680
18245
  if (id.value) removeSnackbar(id.value);
17681
18246
  return;
17682
18247
  }
17683
- let spec = instance.props;
17684
- spec.onAction = onAction;
17685
- spec.onClose = onClose;
17686
- id.value = addSnackbar(spec);
18248
+ id.value = addSnackbar({
18249
+ ...instance.props,
18250
+ onAction,
18251
+ onClose
18252
+ });
17687
18253
  }, { immediate: true });
17688
18254
  return (_ctx, _cache) => {
17689
18255
  return __props.isRendered ? (openBlock(), createElementBlock("div", {
@@ -18649,7 +19215,7 @@ var FluxTableActions_default = /* @__PURE__ */ defineComponent({
18649
19215
  __name: "FluxTableActions",
18650
19216
  setup(__props) {
18651
19217
  return (_ctx, _cache) => {
18652
- return openBlock(), createBlock(FluxActions_default, { class: normalizeClass(unref(Table_module_default).tableActions) }, {
19218
+ return openBlock(), createBlock(FluxActionStack_default, { class: normalizeClass(unref(Table_module_default).tableActions) }, {
18653
19219
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
18654
19220
  _: 3
18655
19221
  }, 8, ["class"]);
@@ -19067,6 +19633,6 @@ var FluxTreeView_default = /* @__PURE__ */ defineComponent({
19067
19633
  }
19068
19634
  });
19069
19635
  //#endregion
19070
- export { FluxAction_default as FluxAction, FluxActionBar_default as FluxActionBar, FluxActionPane_default as FluxActionPane, FluxActions_default as FluxActions, FluxAnimatedColors_default as FluxAnimatedColors, FluxAspectRatio_default as FluxAspectRatio, FluxAutoGrid_default as FluxAutoGrid, FluxAutoHeightTransition_default as FluxAutoHeightTransition, FluxAutoWidthTransition_default as FluxAutoWidthTransition, FluxAvatar_default as FluxAvatar, FluxBadge_default as FluxBadge, FluxBadgeStack_default as FluxBadgeStack, FluxBorderShine_default as FluxBorderShine, FluxBoxedIcon_default as FluxBoxedIcon, FluxBreakthroughTransition_default as FluxBreakthroughTransition, FluxButton_default as FluxButton, FluxButtonGroup_default as FluxButtonGroup, FluxButtonStack_default as FluxButtonStack, FluxCalendar_default as FluxCalendar, FluxCalendarEvent_default as FluxCalendarEvent, FluxCheckbox_default as FluxCheckbox, FluxChip_default as FluxChip, FluxClickablePane_default as FluxClickablePane, FluxColorPicker_default as FluxColorPicker, FluxColorSelect_default as FluxColorSelect, 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, FluxFlickeringGrid_default as FluxFlickeringGrid, FluxFlyout_default as FluxFlyout, FluxFocalPointEditor_default as FluxFocalPointEditor, FluxFocalPointImage_default as FluxFocalPointImage, FluxForm_default as FluxForm, 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, FluxFormPinInput_default as FluxFormPinInput, 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, FluxLegend_default as FluxLegend, FluxLink_default as FluxLink, FluxMenu_default as FluxMenu, 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, FluxPaneDeck_default as FluxPaneDeck, FluxPaneFooter_default as FluxPaneFooter, FluxPaneGroup_default as FluxPaneGroup, FluxPaneHeader_default as FluxPaneHeader, FluxPaneIllustration_default as FluxPaneIllustration, FluxPaneMedia_default as FluxPaneMedia, FluxPercentageBar_default as FluxPercentageBar, 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, FluxSecondaryButton_default as FluxSecondaryButton, FluxSecondaryLinkButton_default as FluxSecondaryLinkButton, FluxSegmentedControl_default as FluxSegmentedControl, FluxSegmentedView_default as FluxSegmentedView, FluxSeparator_default as FluxSeparator, 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, FluxStack_default as FluxStack, FluxStatistic_default as FluxStatistic, FluxStepper_default as FluxStepper, FluxStepperStep_default as FluxStepperStep, FluxStepperSteps_default as FluxStepperSteps, 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, fluxRegisterIcons, isFluxFormSelectGroup, isFluxFormSelectOption, showAlert, showConfirm, showPrompt, showSnackbar, useBreakpoints_default as useBreakpoints, useDisabled_default as useDisabled, useDisabledInjection_default as useDisabledInjection, useExpandableGroupInjection_default as useExpandableGroupInjection, useFilterInjection_default as useFilterInjection, useFluxStore, useFlyoutInjection_default as useFlyoutInjection, useFormFieldInjection_default as useFormFieldInjection, useTableInjection_default as useTableInjection, useTooltipInjection_default as useTooltipInjection };
19636
+ export { FluxAction_default as FluxAction, FluxActionBar_default as FluxActionBar, FluxActionPane_default as FluxActionPane, FluxActionStack_default as FluxActionStack, FluxAnimatedColors_default as FluxAnimatedColors, FluxAspectRatio_default as FluxAspectRatio, FluxAutoGrid_default as FluxAutoGrid, FluxAutoHeightTransition_default as FluxAutoHeightTransition, FluxAutoWidthTransition_default as FluxAutoWidthTransition, FluxAvatar_default as FluxAvatar, FluxBadge_default as FluxBadge, FluxBadgeStack_default as FluxBadgeStack, FluxBorderShine_default as FluxBorderShine, FluxBoxedIcon_default as FluxBoxedIcon, FluxBreakthroughTransition_default as FluxBreakthroughTransition, FluxButton_default as FluxButton, FluxButtonGroup_default as FluxButtonGroup, FluxButtonStack_default as FluxButtonStack, FluxCalendar_default as FluxCalendar, FluxCalendarEvent_default as FluxCalendarEvent, FluxCheckbox_default as FluxCheckbox, 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, FluxFlickeringGrid_default as FluxFlickeringGrid, FluxFlyout_default as FluxFlyout, FluxFocalPointEditor_default as FluxFocalPointEditor, FluxFocalPointImage_default as FluxFocalPointImage, FluxForm_default as FluxForm, 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, FluxFormPinInput_default as FluxFormPinInput, 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, FluxLegend_default as FluxLegend, FluxLink_default as FluxLink, FluxMenu_default as FluxMenu, 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, FluxPaneDeck_default as FluxPaneDeck, FluxPaneFooter_default as FluxPaneFooter, FluxPaneGroup_default as FluxPaneGroup, FluxPaneHeader_default as FluxPaneHeader, FluxPaneIllustration_default as FluxPaneIllustration, FluxPaneMedia_default as FluxPaneMedia, FluxPercentageBar_default as FluxPercentageBar, 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, FluxSecondaryButton_default as FluxSecondaryButton, FluxSecondaryLinkButton_default as FluxSecondaryLinkButton, FluxSegmentedControl_default as FluxSegmentedControl, FluxSegmentedView_default as FluxSegmentedView, FluxSeparator_default as FluxSeparator, 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, FluxStack_default as FluxStack, FluxStatistic_default as FluxStatistic, FluxStepper_default as FluxStepper, FluxStepperStep_default as FluxStepperStep, FluxStepperSteps_default as FluxStepperSteps, 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, fluxRegisterIcons, isFluxFormSelectGroup, isFluxFormSelectOption, showAlert, showConfirm, showPrompt, showSnackbar, useBreakpoints_default as useBreakpoints, useDisabled_default as useDisabled, useDisabledInjection_default as useDisabledInjection, useExpandableGroupInjection_default as useExpandableGroupInjection, useFilterInjection_default as useFilterInjection, useFluxStore, useFlyoutInjection_default as useFlyoutInjection, useFormFieldInjection_default as useFormFieldInjection, useTableInjection_default as useTableInjection, useTooltipInjection_default as useTooltipInjection };
19071
19637
 
19072
19638
  //# sourceMappingURL=index.js.map