@maizzle/framework 6.1.6 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/components/Img.vue +10 -4
  2. package/dist/components/Section.vue +1 -1
  3. package/dist/composables/definePreviewProps.d.ts +21 -0
  4. package/dist/composables/definePreviewProps.d.ts.map +1 -0
  5. package/dist/composables/definePreviewProps.js +23 -0
  6. package/dist/composables/definePreviewProps.js.map +1 -0
  7. package/dist/index.d.ts +3 -2
  8. package/dist/index.js +3 -2
  9. package/dist/plugins/postcss/resolveMaizzleImports.js +15 -8
  10. package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -1
  11. package/dist/render/createRenderer.d.ts.map +1 -1
  12. package/dist/render/createRenderer.js +25 -4
  13. package/dist/render/createRenderer.js.map +1 -1
  14. package/dist/render/index.d.ts +21 -0
  15. package/dist/render/index.d.ts.map +1 -1
  16. package/dist/render/index.js +76 -30
  17. package/dist/render/index.js.map +1 -1
  18. package/dist/render/plugins/previewProps.d.ts +13 -0
  19. package/dist/render/plugins/previewProps.d.ts.map +1 -0
  20. package/dist/render/plugins/previewProps.js +185 -0
  21. package/dist/render/plugins/previewProps.js.map +1 -0
  22. package/dist/render/withPreviewProps.d.ts +15 -0
  23. package/dist/render/withPreviewProps.d.ts.map +1 -0
  24. package/dist/render/withPreviewProps.js +40 -0
  25. package/dist/render/withPreviewProps.js.map +1 -0
  26. package/dist/serve.d.ts.map +1 -1
  27. package/dist/serve.js +4 -1
  28. package/dist/serve.js.map +1 -1
  29. package/dist/server/ui/.vite/deps/@lucide_vue.js +51812 -41607
  30. package/dist/server/ui/.vite/deps/@lucide_vue.js.map +1 -1
  31. package/dist/server/ui/.vite/deps/@vueuse_core.js.map +1 -1
  32. package/dist/server/ui/.vite/deps/@vueuse_shared.js.map +1 -1
  33. package/dist/server/ui/.vite/deps/_metadata.json +13 -13
  34. package/dist/server/ui/.vite/deps/class-variance-authority.js.map +1 -1
  35. package/dist/server/ui/.vite/deps/clsx.js.map +1 -1
  36. package/dist/server/ui/.vite/deps/culori.js.map +1 -1
  37. package/dist/server/ui/.vite/deps/reka-ui.js +240 -73
  38. package/dist/server/ui/.vite/deps/reka-ui.js.map +1 -1
  39. package/dist/server/ui/.vite/deps/tailwind-merge.js +102 -22
  40. package/dist/server/ui/.vite/deps/tailwind-merge.js.map +1 -1
  41. package/dist/server/ui/.vite/deps/vue-router.js +84 -53
  42. package/dist/server/ui/.vite/deps/vue-router.js.map +1 -1
  43. package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-Dq07uCLt.js.map +1 -1
  44. package/dist/transformers/format.d.ts.map +1 -1
  45. package/dist/transformers/minify.d.ts.map +1 -1
  46. package/dist/transformers/purgeCss.d.ts.map +1 -1
  47. package/dist/transformers/shorthandCss.js +11 -5
  48. package/dist/transformers/shorthandCss.js.map +1 -1
  49. package/dist/transformers/tailwindComponent.js +1 -1
  50. package/dist/transformers/tailwindComponent.js.map +1 -1
  51. package/dist/transformers/tailwindcss.js +8 -4
  52. package/dist/transformers/tailwindcss.js.map +1 -1
  53. package/dist/types/config.d.ts.map +1 -1
  54. package/dist/utils/compileTailwindCss.js +1 -1
  55. package/dist/utils/compileTailwindCss.js.map +1 -1
  56. package/package.json +3 -3
@@ -2925,14 +2925,37 @@ function useDateFormatter(initialLocale, opts = {}) {
2925
2925
  weekday: length
2926
2926
  }).format(date);
2927
2927
  }
2928
- function dayPeriod(date) {
2929
- const value = new $12a3c853105e5a70$export$ad991b66133851cf(locale.value, {
2928
+ /**
2929
+ * Resolves the internal `'AM'` / `'PM'` token for a date.
2930
+ *
2931
+ * The token is derived from the 24-hour clock rather than from the formatted
2932
+ * `dayPeriod` part, because locales render that part in forms that cannot be
2933
+ * matched reliably: `p. m.` in `es-ES`, `午後` in `ja-JP`, `下午` in `zh-CN`,
2934
+ * `오후` in `ko-KR`, and so on. Matching on those strings made every such
2935
+ * locale silently fall back to `'AM'`, which then made editing the hour
2936
+ * segment convert a PM time into an AM one.
2937
+ *
2938
+ * `hourCycle`, `hour12` and `numberingSystem` are pinned so the hour always
2939
+ * comes back as a Latin-digit 0-23 value, whatever `opts` the caller passed
2940
+ * to `useDateFormatter`. `hour12` in particular takes precedence over
2941
+ * `hourCycle` in `Intl`, so it has to be cleared rather than just overridden.
2942
+ *
2943
+ * Pass a `ZonedDateTime`'s own `timeZone` so the hour is read on that value's
2944
+ * clock rather than the runtime's local one.
2945
+ *
2946
+ * @see https://github.com/unovue/reka-ui/issues/2956
2947
+ */
2948
+ function dayPeriod(date, timeZone) {
2949
+ const parts = new $12a3c853105e5a70$export$ad991b66133851cf(locale.value, {
2930
2950
  ...opts,
2931
2951
  hour: "numeric",
2932
- minute: "numeric"
2933
- }).formatToParts(date).find((p) => p.type === "dayPeriod")?.value;
2934
- if (value === "PM" || value === "pm" || value === "p.m.") return "PM";
2935
- return "AM";
2952
+ hourCycle: "h23",
2953
+ hour12: void 0,
2954
+ numberingSystem: "latn",
2955
+ ...timeZone ? { timeZone } : {}
2956
+ }).formatToParts(date);
2957
+ const hour = Number(parts.find((p) => p.type === "hour")?.value);
2958
+ return !Number.isNaN(hour) && hour >= 12 ? "PM" : "AM";
2936
2959
  }
2937
2960
  const defaultPartOptions = {
2938
2961
  year: "numeric",
@@ -3040,12 +3063,11 @@ function useFilter(options) {
3040
3063
  if (substring.length === 0) return true;
3041
3064
  string = string.normalize("NFC");
3042
3065
  substring = substring.normalize("NFC");
3043
- let scan = 0;
3066
+ if (substring.length > string.length) return false;
3067
+ const compare = collator.value.compare;
3068
+ if (string.includes(substring)) return true;
3044
3069
  const sliceLen = substring.length;
3045
- for (; scan + sliceLen <= string.length; scan++) {
3046
- const slice = string.slice(scan, scan + sliceLen);
3047
- if (collator.value.compare(substring, slice) === 0) return true;
3048
- }
3070
+ for (let scan = 0; scan + sliceLen <= string.length; scan++) if (compare(substring, string.slice(scan, scan + sliceLen)) === 0) return true;
3049
3071
  return false;
3050
3072
  };
3051
3073
  return {
@@ -3238,13 +3260,15 @@ function useGraceArea(triggerElement, containerElement) {
3238
3260
  }
3239
3261
  watchEffect((cleanupFn) => {
3240
3262
  if (triggerElement.value && containerElement.value) {
3241
- const handleTriggerLeave = (event) => handleCreateGraceArea(event, containerElement.value);
3242
- const handleContentLeave = (event) => handleCreateGraceArea(event, triggerElement.value);
3243
- triggerElement.value.addEventListener("pointerleave", handleTriggerLeave);
3244
- containerElement.value.addEventListener("pointerleave", handleContentLeave);
3263
+ const trigger = triggerElement.value;
3264
+ const container = containerElement.value;
3265
+ const handleTriggerLeave = (event) => handleCreateGraceArea(event, container);
3266
+ const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);
3267
+ trigger.addEventListener("pointerleave", handleTriggerLeave);
3268
+ container.addEventListener("pointerleave", handleContentLeave);
3245
3269
  cleanupFn(() => {
3246
- triggerElement.value?.removeEventListener("pointerleave", handleTriggerLeave);
3247
- containerElement.value?.removeEventListener("pointerleave", handleContentLeave);
3270
+ trigger.removeEventListener("pointerleave", handleTriggerLeave);
3271
+ container.removeEventListener("pointerleave", handleContentLeave);
3248
3272
  });
3249
3273
  }
3250
3274
  });
@@ -3266,8 +3290,9 @@ function useGraceArea(triggerElement, containerElement) {
3266
3290
  pointerExit.trigger();
3267
3291
  }
3268
3292
  };
3269
- triggerElement.value?.ownerDocument.addEventListener("pointermove", handleTrackPointerGrace);
3270
- cleanupFn(() => triggerElement.value?.ownerDocument.removeEventListener("pointermove", handleTrackPointerGrace));
3293
+ const ownerDocument = triggerElement.value?.ownerDocument;
3294
+ ownerDocument?.addEventListener("pointermove", handleTrackPointerGrace);
3295
+ cleanupFn(() => ownerDocument?.removeEventListener("pointermove", handleTrackPointerGrace));
3271
3296
  }
3272
3297
  });
3273
3298
  return {
@@ -4708,6 +4733,7 @@ var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside";
4708
4733
  var FOCUS_OUTSIDE = "dismissableLayer.focusOutside";
4709
4734
  function isLayerExist(layerElement, targetElement) {
4710
4735
  if (!(targetElement instanceof Element)) return false;
4736
+ if (layerElement.contains(targetElement)) return true;
4711
4737
  const targetLayer = targetElement.closest("[data-dismissable-layer]");
4712
4738
  const mainLayer = layerElement.dataset.dismissableLayer === "" ? layerElement : layerElement.querySelector("[data-dismissable-layer]");
4713
4739
  const nodeList = Array.from(layerElement.ownerDocument.querySelectorAll("[data-dismissable-layer]"));
@@ -4729,6 +4755,7 @@ function usePointerDownOutside(onPointerDownOutside, element, enabled = true) {
4729
4755
  const target = event.target;
4730
4756
  if (!element?.value || !target) return;
4731
4757
  if (isLayerExist(element.value, target)) {
4758
+ ownerDocument.removeEventListener("click", handleClickRef.value);
4732
4759
  isPointerInsideDOMTree.value = false;
4733
4760
  return;
4734
4761
  }
@@ -5634,15 +5661,16 @@ var DialogContent_default = /* @__PURE__ */ defineComponent({
5634
5661
  const rootContext = injectDialogRootContext();
5635
5662
  const emitsAsProps = useEmitAsProps(emits);
5636
5663
  const { forwardRef } = useForwardExpose();
5664
+ const staysMounted = computed(() => props.forceMount || !rootContext.unmountOnHide.value);
5637
5665
  return (_ctx, _cache) => {
5638
5666
  return openBlock(), createBlock(unref(Presence_default), {
5639
- present: _ctx.forceMount || unref(rootContext).open.value,
5640
- "force-mount": _ctx.forceMount || !unref(rootContext).unmountOnHide.value
5667
+ present: unref(rootContext).open.value,
5668
+ "force-mount": staysMounted.value
5641
5669
  }, {
5642
5670
  default: withCtx(({ present }) => [unref(rootContext).modal.value ? withDirectives((openBlock(), createBlock(DialogContentModal_default, mergeProps({
5643
5671
  key: 0,
5644
5672
  ref: unref(forwardRef),
5645
- present: unref(rootContext).unmountOnHide.value || present
5673
+ present: staysMounted.value ? present : true
5646
5674
  }, {
5647
5675
  ...props,
5648
5676
  ...unref(emitsAsProps),
@@ -5650,10 +5678,10 @@ var DialogContent_default = /* @__PURE__ */ defineComponent({
5650
5678
  }), {
5651
5679
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
5652
5680
  _: 2
5653
- }, 1040, ["present"])), [[vShow, unref(rootContext).unmountOnHide.value || present]]) : withDirectives((openBlock(), createBlock(DialogContentNonModal_default, mergeProps({
5681
+ }, 1040, ["present"])), [[vShow, _ctx.forceMount || unref(rootContext).unmountOnHide.value || present]]) : withDirectives((openBlock(), createBlock(DialogContentNonModal_default, mergeProps({
5654
5682
  key: 1,
5655
5683
  ref: unref(forwardRef),
5656
- present: unref(rootContext).unmountOnHide.value || present
5684
+ present: staysMounted.value ? present : true
5657
5685
  }, {
5658
5686
  ...props,
5659
5687
  ...unref(emitsAsProps),
@@ -5661,7 +5689,7 @@ var DialogContent_default = /* @__PURE__ */ defineComponent({
5661
5689
  }), {
5662
5690
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
5663
5691
  _: 2
5664
- }, 1040, ["present"])), [[vShow, unref(rootContext).unmountOnHide.value || present]])]),
5692
+ }, 1040, ["present"])), [[vShow, _ctx.forceMount || unref(rootContext).unmountOnHide.value || present]])]),
5665
5693
  _: 3
5666
5694
  }, 8, ["present", "force-mount"]);
5667
5695
  };
@@ -5760,19 +5788,21 @@ var DialogOverlay_default = /* @__PURE__ */ defineComponent({
5760
5788
  }
5761
5789
  },
5762
5790
  setup(__props) {
5791
+ const props = __props;
5763
5792
  const rootContext = injectDialogRootContext();
5764
5793
  const { forwardRef } = useForwardExpose();
5794
+ const staysMounted = computed(() => props.forceMount || !rootContext.unmountOnHide.value);
5765
5795
  return (_ctx, _cache) => {
5766
5796
  return unref(rootContext)?.modal.value ? (openBlock(), createBlock(unref(Presence_default), {
5767
5797
  key: 0,
5768
- present: _ctx.forceMount || unref(rootContext).open.value,
5769
- "force-mount": _ctx.forceMount || !unref(rootContext).unmountOnHide.value
5798
+ present: unref(rootContext).open.value,
5799
+ "force-mount": staysMounted.value
5770
5800
  }, {
5771
5801
  default: withCtx(({ present }) => [withDirectives(createVNode(DialogOverlayImpl_default, mergeProps(_ctx.$attrs, {
5772
5802
  ref: unref(forwardRef),
5773
5803
  as: _ctx.as,
5774
5804
  "as-child": _ctx.asChild,
5775
- present: unref(rootContext).unmountOnHide.value || present
5805
+ present: staysMounted.value ? present : true
5776
5806
  }), {
5777
5807
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
5778
5808
  _: 2
@@ -5780,7 +5810,7 @@ var DialogOverlay_default = /* @__PURE__ */ defineComponent({
5780
5810
  "as",
5781
5811
  "as-child",
5782
5812
  "present"
5783
- ]), [[vShow, unref(rootContext).unmountOnHide.value || present]])]),
5813
+ ]), [[vShow, _ctx.forceMount || unref(rootContext).unmountOnHide.value || present]])]),
5784
5814
  _: 3
5785
5815
  }, 8, ["present", "force-mount"])) : createCommentVNode("v-if", true);
5786
5816
  };
@@ -6276,6 +6306,11 @@ function useCollection(options = {}) {
6276
6306
  };
6277
6307
  provide(injectionKey, context);
6278
6308
  } else context = inject(injectionKey);
6309
+ const getItem = (element, includeDisabledItem = false) => {
6310
+ if (!context.collectionRef.value) return void 0;
6311
+ const item = context.itemMap.value.get(element);
6312
+ return item && (includeDisabledItem || item.ref.dataset.disabled !== "") ? item : void 0;
6313
+ };
6279
6314
  const getItems = (includeDisabledItem = false) => {
6280
6315
  const collectionNode = context.collectionRef.value;
6281
6316
  if (!collectionNode) return [];
@@ -6324,6 +6359,7 @@ function useCollection(options = {}) {
6324
6359
  });
6325
6360
  return {
6326
6361
  getItems,
6362
+ getItem,
6327
6363
  reactiveItems: computed(() => Array.from(context.itemMap.value.values())),
6328
6364
  itemMapSize: computed(() => context.itemMap.value.size),
6329
6365
  CollectionSlot,
@@ -6654,7 +6690,7 @@ var ListboxRoot_default = /* @__PURE__ */ defineComponent({
6654
6690
  const props = __props;
6655
6691
  const emits = __emit;
6656
6692
  const { multiple, highlightOnHover, orientation, disabled, selectionBehavior, dir: propDir } = toRefs(props);
6657
- const { getItems } = useCollection({ isProvider: true });
6693
+ const { getItems, getItem } = useCollection({ isProvider: true });
6658
6694
  const { handleTypeaheadSearch } = useTypeahead();
6659
6695
  const { primitiveElement, currentElement } = usePrimitiveElement();
6660
6696
  const kbd = useKbd();
@@ -6713,7 +6749,7 @@ var ListboxRoot_default = /* @__PURE__ */ defineComponent({
6713
6749
  if (element?.isConnected) element.scrollIntoView({ block: "nearest" });
6714
6750
  } : void 0);
6715
6751
  else if (scrollIntoView) highlightedElement.value.scrollIntoView({ block: "nearest" });
6716
- const highlightedItem = getItems().find((i) => i.ref === el);
6752
+ const highlightedItem = getItem(el);
6717
6753
  emits("highlight", highlightedItem);
6718
6754
  }
6719
6755
  function highlightItem(value) {
@@ -7210,7 +7246,8 @@ var ListboxItem_default = /* @__PURE__ */ defineComponent({
7210
7246
  isHighlighted.value,
7211
7247
  isSelected.value,
7212
7248
  disabled.value,
7213
- unref(rootContext).focusable.value
7249
+ unref(rootContext).focusable.value,
7250
+ ...Object.entries(_ctx.$attrs).flat()
7214
7251
  ], () => createVNode(unref(Primitive), mergeProps({ id: unref(id) }, _ctx.$attrs, {
7215
7252
  ref: unref(forwardRef),
7216
7253
  role: "option",
@@ -12977,7 +13014,10 @@ var calendarDateTimeGranularities = [
12977
13014
  ];
12978
13015
  function syncTimeSegmentValues(props) {
12979
13016
  return Object.fromEntries(TIME_SEGMENT_PARTS.map((part) => {
12980
- if (part === "dayPeriod") return [part, props.formatter.dayPeriod(toDate(props.value))];
13017
+ if (part === "dayPeriod") {
13018
+ const timeZone = isZonedDateTime(props.value) ? props.value.timeZone : void 0;
13019
+ return [part, props.formatter.dayPeriod(toDate(props.value), timeZone)];
13020
+ }
12981
13021
  return [part, props.value[part]];
12982
13022
  }));
12983
13023
  }
@@ -19111,10 +19151,11 @@ var MenuItemImpl_default = /* @__PURE__ */ defineComponent({
19111
19151
  onPointermove: handlePointerMove,
19112
19152
  onPointerleave: handlePointerLeave,
19113
19153
  onFocus: _cache[0] || (_cache[0] = async (event) => {
19154
+ const item = event.currentTarget;
19114
19155
  await nextTick();
19115
19156
  if (event.defaultPrevented || _ctx.disabled) return;
19116
19157
  isFocused.value = true;
19117
- unref(contentContext).highlightedElement.value = event.currentTarget;
19158
+ unref(contentContext).highlightedElement.value = item;
19118
19159
  }),
19119
19160
  onBlur: _cache[1] || (_cache[1] = async (event) => {
19120
19161
  await nextTick();
@@ -26516,12 +26557,14 @@ var DrawerContentImpl_default = /* @__PURE__ */ defineComponent({
26516
26557
  initialFocus: {
26517
26558
  type: [Boolean, null],
26518
26559
  required: false,
26519
- skipCheck: true
26560
+ skipCheck: true,
26561
+ default: true
26520
26562
  },
26521
26563
  finalFocus: {
26522
26564
  type: [Boolean, null],
26523
26565
  required: false,
26524
- skipCheck: true
26566
+ skipCheck: true,
26567
+ default: true
26525
26568
  },
26526
26569
  disableOutsidePointerEvents: {
26527
26570
  type: Boolean,
@@ -26681,6 +26724,15 @@ var DrawerContentImpl_default = /* @__PURE__ */ defineComponent({
26681
26724
  }
26682
26725
  emits("interactOutside", event);
26683
26726
  }
26727
+ function onMountAutoFocus(event) {
26728
+ emits("openAutoFocus", event);
26729
+ if (event.defaultPrevented) return;
26730
+ if (props.initialFocus === false) event.preventDefault();
26731
+ else if (props.initialFocus instanceof HTMLElement) {
26732
+ event.preventDefault();
26733
+ focus(props.initialFocus, { select: true });
26734
+ }
26735
+ }
26684
26736
  let openCompleteCleanup;
26685
26737
  function clearOpenCompleteListener() {
26686
26738
  openCompleteCleanup?.();
@@ -26741,8 +26793,8 @@ var DrawerContentImpl_default = /* @__PURE__ */ defineComponent({
26741
26793
  "as-child": "",
26742
26794
  loop: "",
26743
26795
  trapped: props.trapFocus,
26744
- onMountAutoFocus: _cache[0] || (_cache[0] = ($event) => emits("openAutoFocus", $event)),
26745
- onUnmountAutoFocus: _cache[1] || (_cache[1] = ($event) => emits("closeAutoFocus", $event))
26796
+ onMountAutoFocus,
26797
+ onUnmountAutoFocus: _cache[0] || (_cache[0] = ($event) => emits("closeAutoFocus", $event))
26746
26798
  }, {
26747
26799
  default: withCtx(() => [createVNode(unref(DismissableLayer_default), mergeProps({
26748
26800
  id: unref(rootContext).contentId,
@@ -26790,12 +26842,14 @@ var DrawerContent_default = /* @__PURE__ */ defineComponent({
26790
26842
  initialFocus: {
26791
26843
  type: [Boolean, null],
26792
26844
  required: false,
26793
- skipCheck: true
26845
+ skipCheck: true,
26846
+ default: true
26794
26847
  },
26795
26848
  finalFocus: {
26796
26849
  type: [Boolean, null],
26797
26850
  required: false,
26798
- skipCheck: true
26851
+ skipCheck: true,
26852
+ default: true
26799
26853
  },
26800
26854
  disableOutsidePointerEvents: {
26801
26855
  type: Boolean,
@@ -26830,9 +26884,14 @@ var DrawerContent_default = /* @__PURE__ */ defineComponent({
26830
26884
  const isTrapFocusOnly = computed(() => rootContext.modal.value === "trap-focus");
26831
26885
  const shouldTrapFocus = computed(() => (isFullModal.value || isTrapFocusOnly.value) && rootContext.open.value);
26832
26886
  useHideOthers(computed(() => isFullModal.value ? currentElement.value : void 0));
26887
+ function finalFocusElement() {
26888
+ if (props.finalFocus === false) return void 0;
26889
+ if (props.finalFocus instanceof HTMLElement) return props.finalFocus;
26890
+ return rootContext.triggerElement.value;
26891
+ }
26833
26892
  function onCloseAutoFocusNonModal(e) {
26834
26893
  if (!e.defaultPrevented) {
26835
- if (!hasInteractedOutside.value) rootContext.triggerElement.value?.focus();
26894
+ if (!hasInteractedOutside.value) finalFocusElement()?.focus();
26836
26895
  e.preventDefault();
26837
26896
  }
26838
26897
  hasInteractedOutside.value = false;
@@ -26862,7 +26921,7 @@ var DrawerContent_default = /* @__PURE__ */ defineComponent({
26862
26921
  onCloseAutoFocus: _cache[0] || (_cache[0] = (e) => {
26863
26922
  if (!e.defaultPrevented) {
26864
26923
  e.preventDefault();
26865
- unref(rootContext).triggerElement.value?.focus();
26924
+ finalFocusElement()?.focus();
26866
26925
  }
26867
26926
  }),
26868
26927
  onPointerDownOutside: _cache[1] || (_cache[1] = (e) => {
@@ -33523,42 +33582,85 @@ function $eb76cf4feb040f77$var$escapeRegex(string) {
33523
33582
  }
33524
33583
  //#endregion
33525
33584
  //#region ../../home/cosmin/Work/maizzle/framework/node_modules/reka-ui/dist/NumberField/utils.js
33585
+ var HOLD_DELAY = 400;
33586
+ var REPEAT_INTERVAL = 60;
33587
+ var TOUCH_MOVE_TOLERANCE = 10;
33526
33588
  function usePressedHold(options) {
33527
33589
  const { disabled } = options;
33528
33590
  const timeout = ref();
33529
33591
  const triggerHook = createEventHook();
33530
- const resetTimeout = () => window.clearTimeout(timeout.value);
33531
- const onIncrementPressStart = (delay) => {
33592
+ const isPressed = ref(false);
33593
+ const target = computed(() => unrefElement(options.target));
33594
+ let activePointerId;
33595
+ let activePointerType = "";
33596
+ let startX = 0;
33597
+ let startY = 0;
33598
+ let holdTriggered = false;
33599
+ const resetTimeout = () => {
33600
+ if (timeout.value === void 0) return;
33601
+ window.clearTimeout(timeout.value);
33602
+ timeout.value = void 0;
33603
+ };
33604
+ const resetPress = () => {
33532
33605
  resetTimeout();
33533
- if (disabled.value) return;
33534
- triggerHook.trigger();
33535
- timeout.value = window.setTimeout(() => {
33536
- onIncrementPressStart(60);
33537
- }, delay);
33606
+ activePointerId = void 0;
33607
+ activePointerType = "";
33608
+ holdTriggered = false;
33609
+ isPressed.value = false;
33538
33610
  };
33539
- const handlePressStart = () => {
33540
- onIncrementPressStart(400);
33611
+ const trigger = () => {
33612
+ if (disabled.value) {
33613
+ resetPress();
33614
+ return false;
33615
+ }
33616
+ triggerHook.trigger();
33617
+ return true;
33541
33618
  };
33542
- const handlePressEnd = () => {
33619
+ const scheduleRepeat = (delay) => {
33543
33620
  resetTimeout();
33621
+ timeout.value = window.setTimeout(() => {
33622
+ holdTriggered = true;
33623
+ if (trigger()) scheduleRepeat(REPEAT_INTERVAL);
33624
+ }, delay);
33544
33625
  };
33545
- const isPressed = ref(false);
33546
- const target = computed(() => unrefElement(options.target));
33547
33626
  const onPressStart = (event) => {
33548
- if (event.button !== 0 || isPressed.value) return;
33627
+ if (event.button !== 0 || isPressed.value || disabled.value) return;
33549
33628
  event.preventDefault();
33629
+ activePointerId = event.pointerId;
33630
+ activePointerType = event.pointerType;
33631
+ startX = event.clientX;
33632
+ startY = event.clientY;
33633
+ holdTriggered = false;
33550
33634
  isPressed.value = true;
33551
- handlePressStart();
33635
+ if (event.pointerType === "mouse") {
33636
+ holdTriggered = true;
33637
+ if (trigger()) scheduleRepeat(HOLD_DELAY);
33638
+ return;
33639
+ }
33640
+ scheduleRepeat(HOLD_DELAY);
33552
33641
  };
33553
- const onPressRelease = () => {
33554
- isPressed.value = false;
33555
- handlePressEnd();
33642
+ const onPressMove = (event) => {
33643
+ if (event.pointerId !== activePointerId || activePointerType === "mouse") return;
33644
+ const distanceX = event.clientX - startX;
33645
+ const distanceY = event.clientY - startY;
33646
+ if (distanceX * distanceX + distanceY * distanceY > TOUCH_MOVE_TOLERANCE ** 2) resetPress();
33647
+ };
33648
+ const onPressRelease = (event) => {
33649
+ if (event.pointerId !== activePointerId) return;
33650
+ const shouldTriggerTap = activePointerType !== "mouse" && !holdTriggered;
33651
+ resetPress();
33652
+ if (shouldTriggerTap) trigger();
33653
+ };
33654
+ const onPressCancel = (event) => {
33655
+ if (event.pointerId === activePointerId) resetPress();
33556
33656
  };
33557
33657
  if (isClient) {
33558
33658
  useEventListener(target || window, "pointerdown", onPressStart);
33659
+ useEventListener(window, "pointermove", onPressMove);
33559
33660
  useEventListener(window, "pointerup", onPressRelease);
33560
- useEventListener(window, "pointercancel", onPressRelease);
33661
+ useEventListener(window, "pointercancel", onPressCancel);
33561
33662
  }
33663
+ onScopeDispose(resetPress);
33562
33664
  return {
33563
33665
  isPressed,
33564
33666
  onTrigger: triggerHook.on
@@ -34644,8 +34746,10 @@ var PinInputInput_default = /* @__PURE__ */ defineComponent({
34644
34746
  }
34645
34747
  function handleKeydown(event) {
34646
34748
  if (isComposing.value || event.isComposing) return;
34749
+ const firstEmptyInputIdx = getFirstEmptyInputIndex();
34750
+ const itemsArray = firstEmptyInputIdx === -1 ? inputElements.value : inputElements.value.slice(0, firstEmptyInputIdx + 1);
34647
34751
  useArrowNavigation(event, getActiveElement(), void 0, {
34648
- itemsArray: inputElements.value,
34752
+ itemsArray,
34649
34753
  focus: true,
34650
34754
  loop: false,
34651
34755
  arrowKeyOptions: "horizontal",
@@ -34669,11 +34773,29 @@ var PinInputInput_default = /* @__PURE__ */ defineComponent({
34669
34773
  updateModelValueAt(props.index, "");
34670
34774
  }
34671
34775
  }
34776
+ /**
34777
+ * In OTP mode, inputs should be filled one by one without skipping middle inputs.
34778
+ * Returns the index of the first empty input, or `-1` when not in OTP mode / all filled.
34779
+ */
34780
+ function getFirstEmptyInputIndex() {
34781
+ if (!context.otp.value) return -1;
34782
+ return inputElements.value.findIndex((_, idx) => context.currentModelValue.value[idx] === "" || context.currentModelValue.value[idx] === void 0);
34783
+ }
34784
+ function getEarlierEmptyInput() {
34785
+ const firstEmptyInputIdx = getFirstEmptyInputIndex();
34786
+ if (firstEmptyInputIdx !== -1 && firstEmptyInputIdx < props.index) return inputElements.value[firstEmptyInputIdx];
34787
+ }
34788
+ function handleMousedown(event) {
34789
+ const earlierEmptyInput = getEarlierEmptyInput();
34790
+ if (!earlierEmptyInput) return;
34791
+ event.preventDefault();
34792
+ earlierEmptyInput.focus();
34793
+ }
34672
34794
  function handleFocus(event) {
34673
- if (context.otp.value) {
34674
- const firstEmptyInputIdx = inputElements.value.findIndex((_, idx) => context.currentModelValue.value[idx] === "" || context.currentModelValue.value[idx] === void 0);
34675
- if (firstEmptyInputIdx !== -1 && firstEmptyInputIdx < props.index) {
34676
- inputElements.value[firstEmptyInputIdx].focus();
34795
+ if (!inputElements.value.includes(event.relatedTarget)) {
34796
+ const earlierEmptyInput = getEarlierEmptyInput();
34797
+ if (earlierEmptyInput) {
34798
+ earlierEmptyInput.focus();
34677
34799
  return;
34678
34800
  }
34679
34801
  }
@@ -34719,7 +34841,7 @@ var PinInputInput_default = /* @__PURE__ */ defineComponent({
34719
34841
  const tempModelValue = [...context.currentModelValue.value];
34720
34842
  if (context.isNumericMode.value) {
34721
34843
  const num = +value;
34722
- if (value === "" || isNaN(num)) delete tempModelValue[index];
34844
+ if (value === "" || isNaN(num)) tempModelValue[index] = void 0;
34723
34845
  else tempModelValue[index] = num;
34724
34846
  } else tempModelValue[index] = value;
34725
34847
  context.modelValue.value = removeTrailingEmptyStrings(tempModelValue);
@@ -34761,6 +34883,7 @@ var PinInputInput_default = /* @__PURE__ */ defineComponent({
34761
34883
  withKeys(handleBackspace, ["backspace"]),
34762
34884
  withKeys(handleDelete, ["delete"])
34763
34885
  ],
34886
+ onMousedown: handleMousedown,
34764
34887
  onFocus: handleFocus,
34765
34888
  onBlur: handleBlur,
34766
34889
  onPaste: handlePaste,
@@ -37144,6 +37267,10 @@ var SelectContentImpl_default = /* @__PURE__ */ defineComponent({
37144
37267
  function handleKeyDown(event) {
37145
37268
  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
37146
37269
  if (event.key === "Tab") event.preventDefault();
37270
+ if (event.code === "Space") {
37271
+ if (search.value === "") return;
37272
+ event.preventDefault();
37273
+ }
37147
37274
  if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key, getItems());
37148
37275
  if ([
37149
37276
  "ArrowUp",
@@ -38992,6 +39119,15 @@ function handlePointerMove(event) {
38992
39119
  updateCursor();
38993
39120
  if (intersectingHandles.length > 0) event.preventDefault();
38994
39121
  }
39122
+ function handlePointerOut(event) {
39123
+ if (isPointerDown || !isIframeElement(event.relatedTarget)) return;
39124
+ intersectingHandles.splice(0);
39125
+ updateResizeHandlerStates("move", event);
39126
+ updateCursor();
39127
+ }
39128
+ function isIframeElement(target) {
39129
+ return target !== null && "tagName" in target && target.tagName === "IFRAME";
39130
+ }
38995
39131
  function handlePointerUp(event) {
38996
39132
  const { target } = event;
38997
39133
  const { x, y } = getResizeEventCoordinates(event);
@@ -39063,6 +39199,7 @@ function updateListeners() {
39063
39199
  body.removeEventListener("mousedown", handlePointerDown);
39064
39200
  body.removeEventListener("mouseleave", handlePointerMove);
39065
39201
  body.removeEventListener("mousemove", handlePointerMove);
39202
+ body.removeEventListener("mouseout", handlePointerOut);
39066
39203
  body.removeEventListener("touchmove", handlePointerMove);
39067
39204
  body.removeEventListener("touchstart", handlePointerDown);
39068
39205
  });
@@ -39087,6 +39224,7 @@ function updateListeners() {
39087
39224
  if (count > 0) {
39088
39225
  body.addEventListener("mousedown", handlePointerDown);
39089
39226
  body.addEventListener("mousemove", handlePointerMove);
39227
+ body.addEventListener("mouseout", handlePointerOut);
39090
39228
  body.addEventListener("touchmove", handlePointerMove, { passive: false });
39091
39229
  body.addEventListener("touchstart", handlePointerDown);
39092
39230
  }
@@ -44441,6 +44579,15 @@ var TooltipContentHoverable_default = /* @__PURE__ */ defineComponent({
44441
44579
  onPointerExit(() => {
44442
44580
  onClose();
44443
44581
  });
44582
+ useEventListener(currentElement, "pointermove", (event) => {
44583
+ const content = currentElement.value;
44584
+ if (!content || event.pointerType === "touch") return;
44585
+ if (content.ownerDocument.elementsFromPoint?.(event.clientX, event.clientY).some((el) => {
44586
+ if (content.contains(el)) return false;
44587
+ const coveredTrigger = el.closest("[data-grace-area-trigger]");
44588
+ return !!coveredTrigger && coveredTrigger !== trigger.value;
44589
+ })) onClose();
44590
+ });
44444
44591
  return (_ctx, _cache) => {
44445
44592
  return openBlock(), createBlock(TooltipContentImpl_default, mergeProps({ ref: unref(forwardRef) }, unref(forwardedProps)), {
44446
44593
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
@@ -44607,9 +44754,9 @@ var TooltipTrigger_default = /* @__PURE__ */ defineComponent({
44607
44754
  blur: handleBlur
44608
44755
  };
44609
44756
  });
44610
- onMounted(() => {
44611
- rootContext.onTriggerChange(triggerElement.value);
44612
- });
44757
+ watch(triggerElement, (el) => {
44758
+ rootContext.onTriggerChange(el);
44759
+ }, { immediate: true });
44613
44760
  function handlePointerUp() {
44614
44761
  setTimeout(() => {
44615
44762
  isPointerDown.value = false;
@@ -44645,7 +44792,7 @@ var TooltipTrigger_default = /* @__PURE__ */ defineComponent({
44645
44792
  return (_ctx, _cache) => {
44646
44793
  return openBlock(), createBlock(unref(PopperAnchor_default), {
44647
44794
  "as-child": "",
44648
- reference: _ctx.reference
44795
+ reference: _ctx.reference ?? unref(triggerElement)
44649
44796
  }, {
44650
44797
  default: withCtx(() => [createVNode(unref(Primitive), mergeProps({
44651
44798
  ref: unref(forwardRef),
@@ -44802,7 +44949,27 @@ var TreeRoot_default = /* @__PURE__ */ defineComponent({
44802
44949
  expanded.value.map((i) => i);
44803
44950
  return flattenItems(items$1 ?? []);
44804
44951
  });
44952
+ /**
44953
+ * A form control rendered inside a tree item — an inline rename, a per-row
44954
+ * filter or picker — owns its own keys. Without this, typing into it drives
44955
+ * tree typeahead and selection, moving focus to another row mid-edit. `select`
44956
+ * counts too: it consumes character keys for its own option typeahead and
44957
+ * Shift+Arrow to extend a multiple selection.
44958
+ *
44959
+ * Same idea as the guard in `MenuContentImpl`, widened past `input`/`textarea`.
44960
+ */
44961
+ const KEY_OWNING_TAGS = [
44962
+ "input",
44963
+ "textarea",
44964
+ "select"
44965
+ ];
44966
+ function isKeyDownInFormField(event) {
44967
+ const target = event.target;
44968
+ if (!target) return false;
44969
+ return KEY_OWNING_TAGS.includes(target.tagName.toLowerCase()) || target.isContentEditable;
44970
+ }
44805
44971
  function handleKeydown(event) {
44972
+ if (isKeyDownInFormField(event)) return;
44806
44973
  if (isVirtual.value) virtualKeydownHook.trigger(event);
44807
44974
  else {
44808
44975
  const collections = rovingFocusGroupRef.value?.getItems() ?? [];
@@ -44810,7 +44977,7 @@ var TreeRoot_default = /* @__PURE__ */ defineComponent({
44810
44977
  }
44811
44978
  }
44812
44979
  function handleKeydownNavigation(event) {
44813
- if (isVirtual.value) return;
44980
+ if (isVirtual.value || isKeyDownInFormField(event)) return;
44814
44981
  const intent = MAP_KEY_TO_FOCUS_INTENT[event.key];
44815
44982
  nextTick(() => {
44816
44983
  handleMultipleReplace(intent, getActiveElement(), rovingFocusGroupRef.value?.getItems, expandedItems.value.map((i) => i.value));
@@ -45033,8 +45200,8 @@ var TreeItem_default = /* @__PURE__ */ defineComponent({
45033
45200
  "data-disabled": isDisabled.value ? "" : void 0,
45034
45201
  onKeydown: [
45035
45202
  withKeys(withModifiers(handleSelectCustomEvent, ["self", "prevent"]), ["enter", "space"]),
45036
- _cache[0] || (_cache[0] = withKeys(withModifiers((ev) => unref(rootContext).dir.value === "ltr" ? handleKeydownRight(ev) : handleKeydownLeft(ev), ["prevent"]), ["right"])),
45037
- _cache[1] || (_cache[1] = withKeys(withModifiers((ev) => unref(rootContext).dir.value === "ltr" ? handleKeydownLeft(ev) : handleKeydownRight(ev), ["prevent"]), ["left"]))
45203
+ _cache[0] || (_cache[0] = withKeys(withModifiers((ev) => unref(rootContext).dir.value === "ltr" ? handleKeydownRight(ev) : handleKeydownLeft(ev), ["self", "prevent"]), ["right"])),
45204
+ _cache[1] || (_cache[1] = withKeys(withModifiers((ev) => unref(rootContext).dir.value === "ltr" ? handleKeydownLeft(ev) : handleKeydownRight(ev), ["self", "prevent"]), ["left"]))
45038
45205
  ],
45039
45206
  onClick: _cache[2] || (_cache[2] = withModifiers((ev) => {
45040
45207
  handleSelectCustomEvent(ev);