likec4 1.12.0 → 1.12.2

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.
@@ -531,7 +531,15 @@ function filterProps(props) {
531
531
  return Object.keys(props).reduce((acc, key) => (props[key] !== void 0 && (acc[key] = props[key]), acc), {});
532
532
  }
533
533
  function isNumberLike(value) {
534
- return typeof value == "number" ? !0 : typeof value == "string" ? value.startsWith("calc(") || value.startsWith("var(") || value.includes(" ") && value.trim() !== "" ? !0 : /[0-9]/.test(value.trim().replace("-", "")[0]) : !1;
534
+ if (typeof value == "number")
535
+ return !0;
536
+ if (typeof value == "string") {
537
+ if (value.startsWith("calc(") || value.startsWith("var(") || value.includes(" ") && value.trim() !== "")
538
+ return !0;
539
+ const cssUnitsRegex = /^[+-]?[0-9]+(\.[0-9]+)?(px|em|rem|ex|ch|lh|rlh|vw|vh|vmin|vmax|vb|vi|svw|svh|lvw|lvh|dvw|dvh|cm|mm|in|pt|pc|q|%)?$/;
540
+ return value.trim().split(/\s+/).every((val) => cssUnitsRegex.test(val));
541
+ }
542
+ return !1;
535
543
  }
536
544
  function isElement$1(value) {
537
545
  return Array.isArray(value) || value === null ? !1 : typeof value == "object" ? value.type !== Fragment : !1;
@@ -675,13 +683,13 @@ function createEventHandler(parentEventHandler, eventHandler) {
675
683
  parentEventHandler?.(event), eventHandler?.(event);
676
684
  };
677
685
  }
678
- function getBreakpointValue$2(breakpoint, theme) {
679
- return breakpoint in theme.breakpoints ? px(theme.breakpoints[breakpoint]) : px(breakpoint);
686
+ function getBreakpointValue$2(breakpoint, breakpoints) {
687
+ return breakpoint in breakpoints ? px(breakpoints[breakpoint]) : px(breakpoint);
680
688
  }
681
- function getSortedBreakpoints(breakpoints, theme) {
682
- const convertedBreakpoints = breakpoints.map((breakpoint) => ({
689
+ function getSortedBreakpoints(values2, breakpoints) {
690
+ const convertedBreakpoints = values2.map((breakpoint) => ({
683
691
  value: breakpoint,
684
- px: getBreakpointValue$2(breakpoint, theme)
692
+ px: getBreakpointValue$2(breakpoint, breakpoints)
685
693
  }));
686
694
  return convertedBreakpoints.sort((a, b) => a.px - b.px), convertedBreakpoints;
687
695
  }
@@ -768,6 +776,14 @@ function useMediaQuery(query, initialValue, { getInitialValueInEffect } = {
768
776
  function useColorScheme(initialValue, options) {
769
777
  return useMediaQuery("(prefers-color-scheme: dark)", initialValue === "dark", options) ? "dark" : "light";
770
778
  }
779
+ function useDebouncedValue(value, wait, options = { leading: !1 }) {
780
+ const [_value, setValue] = useState(value), mountedRef = useRef(!1), timeoutRef = useRef(null), cooldownRef = useRef(!1), cancel = () => window.clearTimeout(timeoutRef.current);
781
+ return useEffect(() => {
782
+ mountedRef.current && (!cooldownRef.current && options.leading ? (cooldownRef.current = !0, setValue(value)) : (cancel(), timeoutRef.current = window.setTimeout(() => {
783
+ cooldownRef.current = !1, setValue(value);
784
+ }, wait)));
785
+ }, [value, options.leading, wait]), useEffect(() => (mountedRef.current = !0, cancel), []), [_value, cancel];
786
+ }
771
787
  const useIsomorphicEffect = typeof document < "u" ? useLayoutEffect : useEffect;
772
788
  function useDidUpdate(fn, dependencies) {
773
789
  const mounted = useRef(!1);
@@ -1009,6 +1025,12 @@ function mergeRefs(...refs) {
1009
1025
  function useMergedRef(...refs) {
1010
1026
  return useCallback(mergeRefs(...refs), refs);
1011
1027
  }
1028
+ function clampUseMovePosition(position) {
1029
+ return {
1030
+ x: clamp$2(position.x, 0, 1),
1031
+ y: clamp$2(position.y, 0, 1)
1032
+ };
1033
+ }
1012
1034
  function useMove(onChange, handlers, dir = "ltr") {
1013
1035
  const ref = useRef(null), mounted = useRef(!1), isSliding = useRef(!1), frame = useRef(0), [active, setActive] = useState(!1);
1014
1036
  return useEffect(() => {
@@ -1135,6 +1157,15 @@ function useHotkeys(hotkeys, tagsToIgnore = ["INPUT", "TEXTAREA", "SELECT"], tri
1135
1157
  return document.documentElement.addEventListener("keydown", keydownListener), () => document.documentElement.removeEventListener("keydown", keydownListener);
1136
1158
  }, [hotkeys]);
1137
1159
  }
1160
+ function useHover$1() {
1161
+ const [hovered, setHovered] = useState(!1), ref = useRef(null), onMouseEnter = useCallback(() => setHovered(!0), []), onMouseLeave = useCallback(() => setHovered(!1), []);
1162
+ return useEffect(() => {
1163
+ if (ref.current)
1164
+ return ref.current.addEventListener("mouseenter", onMouseEnter), ref.current.addEventListener("mouseleave", onMouseLeave), () => {
1165
+ ref.current?.removeEventListener("mouseenter", onMouseEnter), ref.current?.removeEventListener("mouseleave", onMouseLeave);
1166
+ };
1167
+ }, [ref.current]), { ref, hovered };
1168
+ }
1138
1169
  function useDisclosure(initialState = !1, callbacks) {
1139
1170
  const { onOpen, onClose } = callbacks || {}, [opened, setOpened] = useState(initialState), open = useCallback(() => {
1140
1171
  setOpened((isOpened) => isOpened || (onOpen?.(), !0));
@@ -1165,8 +1196,12 @@ function usePrevious(value) {
1165
1196
  }, [value]), ref.current;
1166
1197
  }
1167
1198
  function useInViewport() {
1168
- const ref = useRef(null), [inViewport, setInViewport] = useState(!1), observer = useMemo(() => typeof IntersectionObserver > "u" ? null : new IntersectionObserver(([entry]) => setInViewport(entry.isIntersecting)), [ref]);
1169
- return useEffect(() => ref.current && observer ? (observer.observe(ref.current), () => observer.disconnect()) : () => null, []), { ref, inViewport };
1199
+ const observer = useRef(null), [inViewport, setInViewport] = useState(!1);
1200
+ return { ref: useCallback((node) => {
1201
+ typeof IntersectionObserver < "u" && (node && !observer.current ? observer.current = new IntersectionObserver(
1202
+ ([entry]) => setInViewport(entry.isIntersecting)
1203
+ ) : observer.current?.disconnect(), node ? observer.current?.observe(node) : setInViewport(!1));
1204
+ }, []), inViewport };
1170
1205
  }
1171
1206
  function useMutationObserver(callback, options, target) {
1172
1207
  const observer = useRef(), ref = useRef(null);
@@ -2003,9 +2038,9 @@ function getCSSColorVariables({
2003
2038
  function isVirtualColor(value) {
2004
2039
  return !!value && typeof value == "object" && "mantine-virtual-color" in value;
2005
2040
  }
2006
- function assignSizeVariables(variables, sizes, name) {
2007
- keys(sizes).forEach(
2008
- (size2) => Object.assign(variables, { [`--mantine-${name}-${size2}`]: sizes[size2] })
2041
+ function assignSizeVariables(variables, sizes2, name) {
2042
+ keys(sizes2).forEach(
2043
+ (size2) => Object.assign(variables, { [`--mantine-${name}-${size2}`]: sizes2[size2] })
2009
2044
  );
2010
2045
  }
2011
2046
  const defaultCssVariablesResolver = (theme) => {
@@ -3084,8 +3119,8 @@ function getThumbRatio(viewportSize, contentSize) {
3084
3119
  const ratio = viewportSize / contentSize;
3085
3120
  return Number.isNaN(ratio) ? 0 : ratio;
3086
3121
  }
3087
- function getThumbSize(sizes) {
3088
- const ratio = getThumbRatio(sizes.viewport, sizes.content), scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd, thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;
3122
+ function getThumbSize(sizes2) {
3123
+ const ratio = getThumbRatio(sizes2.viewport, sizes2.content), scrollbarPadding = sizes2.scrollbar.paddingStart + sizes2.scrollbar.paddingEnd, thumbSize = (sizes2.scrollbar.size - scrollbarPadding) * ratio;
3089
3124
  return Math.max(thumbSize, 18);
3090
3125
  }
3091
3126
  function linearScale(input, output) {
@@ -3099,12 +3134,12 @@ function linearScale(input, output) {
3099
3134
  function clamp$1(value, [min2, max2]) {
3100
3135
  return Math.min(max2, Math.max(min2, value));
3101
3136
  }
3102
- function getThumbOffsetFromScroll(scrollPos, sizes, dir = "ltr") {
3103
- const thumbSizePx = getThumbSize(sizes), scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd, scrollbar = sizes.scrollbar.size - scrollbarPadding, maxScrollPos = sizes.content - sizes.viewport, maxThumbPos = scrollbar - thumbSizePx, scrollClampRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0], scrollWithoutMomentum = clamp$1(scrollPos, scrollClampRange);
3137
+ function getThumbOffsetFromScroll(scrollPos, sizes2, dir = "ltr") {
3138
+ const thumbSizePx = getThumbSize(sizes2), scrollbarPadding = sizes2.scrollbar.paddingStart + sizes2.scrollbar.paddingEnd, scrollbar = sizes2.scrollbar.size - scrollbarPadding, maxScrollPos = sizes2.content - sizes2.viewport, maxThumbPos = scrollbar - thumbSizePx, scrollClampRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0], scrollWithoutMomentum = clamp$1(scrollPos, scrollClampRange);
3104
3139
  return linearScale([0, maxScrollPos], [0, maxThumbPos])(scrollWithoutMomentum);
3105
3140
  }
3106
- function getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = "ltr") {
3107
- const thumbSizePx = getThumbSize(sizes), thumbCenter = thumbSizePx / 2, offset2 = pointerOffset || thumbCenter, thumbOffsetFromEnd = thumbSizePx - offset2, minPointerPos = sizes.scrollbar.paddingStart + offset2, maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd, maxScrollPos = sizes.content - sizes.viewport, scrollRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];
3141
+ function getScrollPositionFromPointer(pointerPos, pointerOffset, sizes2, dir = "ltr") {
3142
+ const thumbSizePx = getThumbSize(sizes2), thumbCenter = thumbSizePx / 2, offset2 = pointerOffset || thumbCenter, thumbOffsetFromEnd = thumbSizePx - offset2, minPointerPos = sizes2.scrollbar.paddingStart + offset2, maxPointerPos = sizes2.scrollbar.size - sizes2.scrollbar.paddingEnd - thumbOffsetFromEnd, maxScrollPos = sizes2.content - sizes2.viewport, scrollRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];
3108
3143
  return linearScale([minPointerPos, maxPointerPos], scrollRange)(pointerPos);
3109
3144
  }
3110
3145
  function isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {
@@ -3122,7 +3157,7 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3122
3157
  "ScrollAreaScrollbar was not found in tree"
3123
3158
  ), Scrollbar = forwardRef((props, forwardedRef) => {
3124
3159
  const {
3125
- sizes,
3160
+ sizes: sizes2,
3126
3161
  hasThumb,
3127
3162
  onThumbChange,
3128
3163
  onThumbPointerUp,
@@ -3132,7 +3167,7 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3132
3167
  onWheelScroll,
3133
3168
  onResize,
3134
3169
  ...scrollbarProps
3135
- } = props, context = useScrollAreaContext(), [scrollbar, setScrollbar] = useState(null), composeRefs = useMergedRef(forwardedRef, (node) => setScrollbar(node)), rectRef = useRef(null), prevWebkitUserSelectRef = useRef(""), { viewport } = context, maxScrollPos = sizes.content - sizes.viewport, handleWheelScroll = useCallbackRef(onWheelScroll), handleThumbPositionChange = useCallbackRef(onThumbPositionChange), handleResize = useDebouncedCallback(onResize, 10), handleDragScroll = (event) => {
3170
+ } = props, context = useScrollAreaContext(), [scrollbar, setScrollbar] = useState(null), composeRefs = useMergedRef(forwardedRef, (node) => setScrollbar(node)), rectRef = useRef(null), prevWebkitUserSelectRef = useRef(""), { viewport } = context, maxScrollPos = sizes2.content - sizes2.viewport, handleWheelScroll = useCallbackRef(onWheelScroll), handleThumbPositionChange = useCallbackRef(onThumbPositionChange), handleResize = useDebouncedCallback(onResize, 10), handleDragScroll = (event) => {
3136
3171
  if (rectRef.current) {
3137
3172
  const x = event.clientX - rectRef.current.left, y = event.clientY - rectRef.current.top;
3138
3173
  onDragScroll({ x, y });
@@ -3144,7 +3179,7 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3144
3179
  scrollbar?.contains(element) && handleWheelScroll(event, maxScrollPos);
3145
3180
  };
3146
3181
  return document.addEventListener("wheel", handleWheel, { passive: !1 }), () => document.removeEventListener("wheel", handleWheel, { passive: !1 });
3147
- }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]), useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]), useResizeObserver(scrollbar, handleResize), useResizeObserver(context.content, handleResize), /* @__PURE__ */ jsx(
3182
+ }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]), useEffect(handleThumbPositionChange, [sizes2, handleThumbPositionChange]), useResizeObserver(scrollbar, handleResize), useResizeObserver(context.content, handleResize), /* @__PURE__ */ jsx(
3148
3183
  ScrollbarProvider,
3149
3184
  {
3150
3185
  value: {
@@ -3177,7 +3212,7 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3177
3212
  );
3178
3213
  }), ScrollAreaScrollbarX = forwardRef(
3179
3214
  (props, forwardedRef) => {
3180
- const { sizes, onSizesChange, style, ...others } = props, ctx = useScrollAreaContext(), [computedStyle, setComputedStyle] = useState(), ref = useRef(null), composeRefs = useMergedRef(forwardedRef, ref, ctx.onScrollbarXChange);
3215
+ const { sizes: sizes2, onSizesChange, style, ...others } = props, ctx = useScrollAreaContext(), [computedStyle, setComputedStyle] = useState(), ref = useRef(null), composeRefs = useMergedRef(forwardedRef, ref, ctx.onScrollbarXChange);
3181
3216
  return useEffect(() => {
3182
3217
  ref.current && setComputedStyle(getComputedStyle(ref.current));
3183
3218
  }, [ref]), /* @__PURE__ */ jsx(
@@ -3186,10 +3221,10 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3186
3221
  "data-orientation": "horizontal",
3187
3222
  ...others,
3188
3223
  ref: composeRefs,
3189
- sizes,
3224
+ sizes: sizes2,
3190
3225
  style: {
3191
3226
  ...style,
3192
- "--sa-thumb-width": `${getThumbSize(sizes)}px`
3227
+ "--sa-thumb-width": `${getThumbSize(sizes2)}px`
3193
3228
  },
3194
3229
  onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),
3195
3230
  onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),
@@ -3213,9 +3248,11 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3213
3248
  }
3214
3249
  );
3215
3250
  }
3216
- ), ScrollAreaScrollbarY = forwardRef(
3251
+ );
3252
+ ScrollAreaScrollbarX.displayName = "@mantine/core/ScrollAreaScrollbarX";
3253
+ const ScrollAreaScrollbarY = forwardRef(
3217
3254
  (props, forwardedRef) => {
3218
- const { sizes, onSizesChange, style, ...others } = props, context = useScrollAreaContext(), [computedStyle, setComputedStyle] = useState(), ref = useRef(null), composeRefs = useMergedRef(forwardedRef, ref, context.onScrollbarYChange);
3255
+ const { sizes: sizes2, onSizesChange, style, ...others } = props, context = useScrollAreaContext(), [computedStyle, setComputedStyle] = useState(), ref = useRef(null), composeRefs = useMergedRef(forwardedRef, ref, context.onScrollbarYChange);
3219
3256
  return useEffect(() => {
3220
3257
  ref.current && setComputedStyle(window.getComputedStyle(ref.current));
3221
3258
  }, []), /* @__PURE__ */ jsx(
@@ -3224,9 +3261,9 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3224
3261
  ...others,
3225
3262
  "data-orientation": "vertical",
3226
3263
  ref: composeRefs,
3227
- sizes,
3264
+ sizes: sizes2,
3228
3265
  style: {
3229
- "--sa-thumb-height": `${getThumbSize(sizes)}px`,
3266
+ "--sa-thumb-height": `${getThumbSize(sizes2)}px`,
3230
3267
  ...style
3231
3268
  },
3232
3269
  onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),
@@ -3251,14 +3288,16 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3251
3288
  }
3252
3289
  );
3253
3290
  }
3254
- ), ScrollAreaScrollbarVisible = forwardRef((props, forwardedRef) => {
3255
- const { orientation = "vertical", ...scrollbarProps } = props, { dir } = useDirection(), context = useScrollAreaContext(), thumbRef = useRef(null), pointerOffsetRef = useRef(0), [sizes, setSizes] = useState({
3291
+ );
3292
+ ScrollAreaScrollbarY.displayName = "@mantine/core/ScrollAreaScrollbarY";
3293
+ const ScrollAreaScrollbarVisible = forwardRef((props, forwardedRef) => {
3294
+ const { orientation = "vertical", ...scrollbarProps } = props, { dir } = useDirection(), context = useScrollAreaContext(), thumbRef = useRef(null), pointerOffsetRef = useRef(0), [sizes2, setSizes] = useState({
3256
3295
  content: 0,
3257
3296
  viewport: 0,
3258
3297
  scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }
3259
- }), thumbRatio = getThumbRatio(sizes.viewport, sizes.content), commonProps = {
3298
+ }), thumbRatio = getThumbRatio(sizes2.viewport, sizes2.content), commonProps = {
3260
3299
  ...scrollbarProps,
3261
- sizes,
3300
+ sizes: sizes2,
3262
3301
  onSizesChange: setSizes,
3263
3302
  hasThumb: thumbRatio > 0 && thumbRatio < 1,
3264
3303
  onThumbChange: (thumb) => {
@@ -3270,7 +3309,7 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3270
3309
  onThumbPointerDown: (pointerPos) => {
3271
3310
  pointerOffsetRef.current = pointerPos;
3272
3311
  }
3273
- }, getScrollPosition = (pointerPos, direction) => getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, direction);
3312
+ }, getScrollPosition = (pointerPos, direction) => getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes2, direction);
3274
3313
  return orientation === "horizontal" ? /* @__PURE__ */ jsx(
3275
3314
  ScrollAreaScrollbarX,
3276
3315
  {
@@ -3278,7 +3317,7 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3278
3317
  ref: forwardedRef,
3279
3318
  onThumbPositionChange: () => {
3280
3319
  if (context.viewport && thumbRef.current) {
3281
- const scrollPos = context.viewport.scrollLeft, offset2 = getThumbOffsetFromScroll(scrollPos, sizes, dir);
3320
+ const scrollPos = context.viewport.scrollLeft, offset2 = getThumbOffsetFromScroll(scrollPos, sizes2, dir);
3282
3321
  thumbRef.current.style.transform = `translate3d(${offset2}px, 0, 0)`;
3283
3322
  }
3284
3323
  },
@@ -3296,8 +3335,8 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3296
3335
  ref: forwardedRef,
3297
3336
  onThumbPositionChange: () => {
3298
3337
  if (context.viewport && thumbRef.current) {
3299
- const scrollPos = context.viewport.scrollTop, offset2 = getThumbOffsetFromScroll(scrollPos, sizes);
3300
- sizes.scrollbar.size === 0 ? thumbRef.current.style.opacity = "0" : thumbRef.current.style.opacity = "1", thumbRef.current.style.transform = `translate3d(0, ${offset2}px, 0)`;
3338
+ const scrollPos = context.viewport.scrollTop, offset2 = getThumbOffsetFromScroll(scrollPos, sizes2);
3339
+ sizes2.scrollbar.size === 0 ? thumbRef.current.style.opacity = "0" : thumbRef.current.style.opacity = "1", thumbRef.current.style.transform = `translate3d(0, ${offset2}px, 0)`;
3301
3340
  }
3302
3341
  },
3303
3342
  onWheelScroll: (scrollPos) => {
@@ -3308,7 +3347,9 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3308
3347
  }
3309
3348
  }
3310
3349
  ) : null;
3311
- }), ScrollAreaScrollbarAuto = forwardRef(
3350
+ });
3351
+ ScrollAreaScrollbarVisible.displayName = "@mantine/core/ScrollAreaScrollbarVisible";
3352
+ const ScrollAreaScrollbarAuto = forwardRef(
3312
3353
  (props, ref) => {
3313
3354
  const context = useScrollAreaContext(), { forceMount, ...scrollbarProps } = props, [visible2, setVisible] = useState(!1), isHorizontal = props.orientation === "horizontal", handleResize = useDebouncedCallback(() => {
3314
3355
  if (context.viewport) {
@@ -3325,7 +3366,9 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3325
3366
  }
3326
3367
  ) : null;
3327
3368
  }
3328
- ), ScrollAreaScrollbarHover = forwardRef(
3369
+ );
3370
+ ScrollAreaScrollbarAuto.displayName = "@mantine/core/ScrollAreaScrollbarAuto";
3371
+ const ScrollAreaScrollbarHover = forwardRef(
3329
3372
  (props, ref) => {
3330
3373
  const { forceMount, ...scrollbarProps } = props, context = useScrollAreaContext(), [visible2, setVisible] = useState(!1);
3331
3374
  return useEffect(() => {
@@ -3350,7 +3393,9 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3350
3393
  }
3351
3394
  ) : null;
3352
3395
  }
3353
- ), ScrollAreaScrollbarScroll = forwardRef(
3396
+ );
3397
+ ScrollAreaScrollbarHover.displayName = "@mantine/core/ScrollAreaScrollbarHover";
3398
+ const ScrollAreaScrollbarScroll = forwardRef(
3354
3399
  (props, red) => {
3355
3400
  const { forceMount, ...scrollbarProps } = props, context = useScrollAreaContext(), isHorizontal = props.orientation === "horizontal", [state, setState] = useState("hidden"), debounceScrollEnd = useDebouncedCallback(() => setState("idle"), 100);
3356
3401
  return useEffect(() => {
@@ -3387,6 +3432,7 @@ const [ScrollbarProvider, useScrollbarContext] = createSafeContext(
3387
3432
  }), [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]), context.type === "hover" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "scroll" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "auto" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "always" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef }) : null;
3388
3433
  }
3389
3434
  );
3435
+ ScrollAreaScrollbar.displayName = "@mantine/core/ScrollAreaScrollbar";
3390
3436
  function addUnlinkedScrollListener(node, handler = () => {
3391
3437
  }) {
3392
3438
  let prevPosition = { left: node.scrollLeft, top: node.scrollTop }, rAF = 0;
@@ -3428,12 +3474,16 @@ const Thumb$1 = forwardRef((props, forwardedRef) => {
3428
3474
  onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)
3429
3475
  }
3430
3476
  );
3431
- }), ScrollAreaThumb = forwardRef(
3477
+ });
3478
+ Thumb$1.displayName = "@mantine/core/ScrollAreaThumb";
3479
+ const ScrollAreaThumb = forwardRef(
3432
3480
  (props, forwardedRef) => {
3433
3481
  const { forceMount, ...thumbProps } = props, scrollbarContext = useScrollbarContext();
3434
3482
  return forceMount || scrollbarContext.hasThumb ? /* @__PURE__ */ jsx(Thumb$1, { ref: forwardedRef, ...thumbProps }) : null;
3435
3483
  }
3436
- ), ScrollAreaViewport = forwardRef(
3484
+ );
3485
+ ScrollAreaThumb.displayName = "@mantine/core/ScrollAreaThumb";
3486
+ const ScrollAreaViewport = forwardRef(
3437
3487
  ({ children, style, ...others }, ref) => {
3438
3488
  const ctx = useScrollAreaContext(), rootRef = useMergedRef(ref, ctx.onViewportChange);
3439
3489
  return /* @__PURE__ */ jsx(
@@ -3514,7 +3564,7 @@ const classes$G = __default__$G, defaultProps$1r = {
3514
3564
  onScroll: (e) => {
3515
3565
  viewportProps?.onScroll?.(e), onScrollPositionChange?.({ x: e.currentTarget.scrollLeft, y: e.currentTarget.scrollTop });
3516
3566
  const { scrollTop, scrollHeight, clientHeight } = e.currentTarget;
3517
- scrollTop - (scrollHeight - clientHeight) === 0 && onBottomReached?.(), scrollTop === 0 && onTopReached?.();
3567
+ scrollTop - (scrollHeight - clientHeight) >= 0 && onBottomReached?.(), scrollTop === 0 && onTopReached?.();
3518
3568
  },
3519
3569
  children
3520
3570
  }
@@ -3575,6 +3625,7 @@ const ScrollAreaAutosize = factory((props, ref) => {
3575
3625
  style,
3576
3626
  vars,
3577
3627
  onBottomReached,
3628
+ onTopReached,
3578
3629
  ...others
3579
3630
  } = useProps("ScrollAreaAutosize", defaultProps$1r, props);
3580
3631
  return /* @__PURE__ */ jsx(Box, { ...others, ref, style: [{ display: "flex", overflow: "auto" }, style], children: /* @__PURE__ */ jsx(Box, { style: { display: "flex", flexDirection: "column", flex: 1 }, children: /* @__PURE__ */ jsx(
@@ -3595,6 +3646,7 @@ const ScrollAreaAutosize = factory((props, ref) => {
3595
3646
  vars,
3596
3647
  scrollbars,
3597
3648
  onBottomReached,
3649
+ onTopReached,
3598
3650
  children
3599
3651
  }
3600
3652
  ) }) });
@@ -6335,7 +6387,7 @@ function useFloatingAutoUpdate({
6335
6387
  }) {
6336
6388
  const [delayedUpdate, setDelayedUpdate] = useState(0);
6337
6389
  useEffect(() => {
6338
- if (floating.refs.reference.current && floating.refs.floating.current)
6390
+ if (floating.refs.reference.current && floating.refs.floating.current && opened)
6339
6391
  return autoUpdate(
6340
6392
  floating.refs.reference.current,
6341
6393
  floating.refs.floating.current,
@@ -6385,7 +6437,7 @@ function getPopoverMiddlewares(options, getFloating) {
6385
6437
  ), middlewares;
6386
6438
  }
6387
6439
  function usePopover(options) {
6388
- const [_opened, setOpened] = useUncontrolled({
6440
+ const [_opened, setOpened, isControlled] = useUncontrolled({
6389
6441
  value: options.opened,
6390
6442
  defaultValue: options.defaultOpened,
6391
6443
  finalValue: !1,
@@ -6400,15 +6452,15 @@ function usePopover(options) {
6400
6452
  middleware: getPopoverMiddlewares(options, () => floating)
6401
6453
  });
6402
6454
  return useFloatingAutoUpdate({
6403
- opened: options.opened,
6455
+ opened: _opened,
6404
6456
  position: options.position,
6405
6457
  positionDependencies: options.positionDependencies || [],
6406
6458
  floating
6407
6459
  }), useDidUpdate(() => {
6408
6460
  options.onPositionChange?.(floating.placement);
6409
6461
  }, [floating.placement]), useDidUpdate(() => {
6410
- options.opened ? options.onOpen?.() : options.onClose?.();
6411
- }, [options.opened]), {
6462
+ isControlled || (options.opened ? options.onOpen?.() : options.onClose?.());
6463
+ }, [options.opened, isControlled]), {
6412
6464
  floating,
6413
6465
  controlled: typeof options.opened == "boolean",
6414
6466
  opened: _opened,
@@ -6583,11 +6635,17 @@ const classes$B = __default__$B, Bars = forwardRef(({ className, ...others }, re
6583
6635
  /* @__PURE__ */ jsx("span", { className: classes$B.bar }),
6584
6636
  /* @__PURE__ */ jsx("span", { className: classes$B.bar }),
6585
6637
  /* @__PURE__ */ jsx("span", { className: classes$B.bar })
6586
- ] })), Dots = forwardRef(({ className, ...others }, ref) => /* @__PURE__ */ jsxs(Box, { component: "span", className: clsx(classes$B.dotsLoader, className), ...others, ref, children: [
6638
+ ] }));
6639
+ Bars.displayName = "@mantine/core/Bars";
6640
+ const Dots = forwardRef(({ className, ...others }, ref) => /* @__PURE__ */ jsxs(Box, { component: "span", className: clsx(classes$B.dotsLoader, className), ...others, ref, children: [
6587
6641
  /* @__PURE__ */ jsx("span", { className: classes$B.dot }),
6588
6642
  /* @__PURE__ */ jsx("span", { className: classes$B.dot }),
6589
6643
  /* @__PURE__ */ jsx("span", { className: classes$B.dot })
6590
- ] })), Oval = forwardRef(({ className, ...others }, ref) => /* @__PURE__ */ jsx(Box, { component: "span", className: clsx(classes$B.ovalLoader, className), ...others, ref })), defaultLoaders = {
6644
+ ] }));
6645
+ Dots.displayName = "@mantine/core/Dots";
6646
+ const Oval = forwardRef(({ className, ...others }, ref) => /* @__PURE__ */ jsx(Box, { component: "span", className: clsx(classes$B.ovalLoader, className), ...others, ref }));
6647
+ Oval.displayName = "@mantine/core/Oval";
6648
+ const defaultLoaders = {
6591
6649
  bars: Bars,
6592
6650
  oval: Oval,
6593
6651
  dots: Dots
@@ -7051,6 +7109,7 @@ const ModalBase = forwardRef(
7051
7109
  ) });
7052
7110
  }
7053
7111
  );
7112
+ ModalBase.displayName = "@mantine/core/ModalBase";
7054
7113
  function useModalBodyId() {
7055
7114
  const ctx = useModalBaseContext();
7056
7115
  return useEffect(() => (ctx.setBodyMounted(!0), () => ctx.setBodyMounted(!1)), []), ctx.getBodyId();
@@ -7125,7 +7184,9 @@ const ModalBaseContent = forwardRef(
7125
7184
  }
7126
7185
  );
7127
7186
  }
7128
- ), ModalBaseHeader = forwardRef(
7187
+ );
7188
+ ModalBaseContent.displayName = "@mantine/core/ModalBaseContent";
7189
+ const ModalBaseHeader = forwardRef(
7129
7190
  ({ className, ...others }, ref) => {
7130
7191
  const ctx = useModalBaseContext();
7131
7192
  return /* @__PURE__ */ jsx(
@@ -9845,11 +9906,12 @@ const defaultProps$q = {}, MenuDropdown = factory((props, ref) => {
9845
9906
  vars,
9846
9907
  onMouseEnter,
9847
9908
  onMouseLeave,
9909
+ onKeyDown,
9848
9910
  children,
9849
9911
  ...others
9850
- } = useProps("MenuDropdown", defaultProps$q, props), wrapperRef = useRef(null), ctx = useMenuContext(), handleKeyDown = (event) => {
9912
+ } = useProps("MenuDropdown", defaultProps$q, props), wrapperRef = useRef(null), ctx = useMenuContext(), handleKeyDown = createEventHandler(onKeyDown, (event) => {
9851
9913
  (event.key === "ArrowUp" || event.key === "ArrowDown") && (event.preventDefault(), wrapperRef.current?.querySelectorAll("[data-menu-item]:not(:disabled)")[0]?.focus());
9852
- }, handleMouseEnter = createEventHandler(
9914
+ }), handleMouseEnter = createEventHandler(
9853
9915
  onMouseEnter,
9854
9916
  () => (ctx.trigger === "hover" || ctx.trigger === "click-hover") && ctx.openDropdown()
9855
9917
  ), handleMouseLeave = createEventHandler(
@@ -9932,7 +9994,7 @@ const defaultProps$p = {}, MenuItem = polymorphicFactory((props, ref) => {
9932
9994
  loop: ctx.loop,
9933
9995
  dir,
9934
9996
  orientation: "vertical",
9935
- onKeyDown: _others.onKeydown
9997
+ onKeyDown: _others.onKeyDown
9936
9998
  }),
9937
9999
  __vars: {
9938
10000
  "--menu-item-color": parsedThemeColor?.isThemeColor && parsedThemeColor?.shade === void 0 ? `var(--mantine-color-${parsedThemeColor.color}-6)` : colors?.color,
@@ -10479,7 +10541,7 @@ function useTooltip(settings) {
10479
10541
  }),
10480
10542
  useFocus(context, { enabled: settings.events?.focus, visibleOnly: !0 }),
10481
10543
  useRole(context, { role: "tooltip" }),
10482
- // cannot be used with controlled tooltip, page jumps
10544
+ // Cannot be used with controlled tooltip, page jumps
10483
10545
  useDismiss(context, { enabled: typeof settings.opened > "u" }),
10484
10546
  useDelayGroup(context, { id: uid })
10485
10547
  ]);
@@ -11004,7 +11066,7 @@ function SimpleGridMediaVariables({
11004
11066
  }), queries = keys(theme.breakpoints).reduce(
11005
11067
  (acc, breakpoint) => (acc[breakpoint] || (acc[breakpoint] = {}), typeof spacing == "object" && spacing[breakpoint] !== void 0 && (acc[breakpoint]["--sg-spacing-x"] = getSpacing(spacing[breakpoint])), typeof _verticalSpacing == "object" && _verticalSpacing[breakpoint] !== void 0 && (acc[breakpoint]["--sg-spacing-y"] = getSpacing(_verticalSpacing[breakpoint])), typeof cols == "object" && cols[breakpoint] !== void 0 && (acc[breakpoint]["--sg-cols"] = cols[breakpoint]), acc),
11006
11068
  {}
11007
- ), media = getSortedBreakpoints(keys(queries), theme).filter(
11069
+ ), media = getSortedBreakpoints(keys(queries), theme.breakpoints).filter(
11008
11070
  (breakpoint) => keys(queries[breakpoint.value]).length > 0
11009
11071
  ).map((breakpoint) => ({
11010
11072
  query: `(min-width: ${theme.breakpoints[breakpoint.value]})`,
@@ -11212,7 +11274,7 @@ function Track({
11212
11274
  ...others
11213
11275
  }) {
11214
11276
  const { getStyles: getStyles2 } = useSliderContext();
11215
- return /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx(Box, { ...getStyles2("trackContainer"), mod: { disabled }, ...containerProps, children: /* @__PURE__ */ jsxs(Box, { ...getStyles2("track"), mod: { inverted, disabled }, children: [
11277
+ return /* @__PURE__ */ jsx(Box, { ...getStyles2("trackContainer"), mod: { disabled }, ...containerProps, children: /* @__PURE__ */ jsxs(Box, { ...getStyles2("track"), mod: { inverted, disabled }, children: [
11216
11278
  /* @__PURE__ */ jsx(
11217
11279
  Box,
11218
11280
  {
@@ -11226,7 +11288,7 @@ function Track({
11226
11288
  ),
11227
11289
  children,
11228
11290
  /* @__PURE__ */ jsx(Marks, { ...others, offset: marksOffset, disabled, inverted })
11229
- ] }) }) });
11291
+ ] }) });
11230
11292
  }
11231
11293
  Track.displayName = "@mantine/core/SliderTrack";
11232
11294
  function getChangeValue({
@@ -11836,13 +11898,17 @@ const classes$2 = __default__$2, defaultProps$2 = {}, varsResolver$2 = (theme, {
11836
11898
  });
11837
11899
  ThemeIcon.classes = classes$2;
11838
11900
  ThemeIcon.displayName = "@mantine/core/ThemeIcon";
11839
- const headings = ["h1", "h2", "h3", "h4", "h5", "h6"];
11901
+ const headings = ["h1", "h2", "h3", "h4", "h5", "h6"], sizes = ["xs", "sm", "md", "lg", "xl"];
11840
11902
  function getTitleSize(order, size2) {
11841
11903
  const titleSize = size2 !== void 0 ? size2 : `h${order}`;
11842
11904
  return headings.includes(titleSize) ? {
11843
11905
  fontSize: `var(--mantine-${titleSize}-font-size)`,
11844
11906
  fontWeight: `var(--mantine-${titleSize}-font-weight)`,
11845
11907
  lineHeight: `var(--mantine-${titleSize}-line-height)`
11908
+ } : sizes.includes(titleSize) ? {
11909
+ fontSize: `var(--mantine-font-size-${titleSize})`,
11910
+ fontWeight: `var(--mantine-h${order}-font-weight)`,
11911
+ lineHeight: `var(--mantine-h${order}-line-height)`
11846
11912
  } : {
11847
11913
  fontSize: rem(titleSize),
11848
11914
  fontWeight: `var(--mantine-h${order}-font-weight)`,
@@ -12327,85 +12393,93 @@ function themeToVars(theme) {
12327
12393
  };
12328
12394
  }
12329
12395
  export {
12330
- Slider as $,
12396
+ Tabs as $,
12331
12397
  ActionIcon as A,
12332
12398
  Box as B,
12333
12399
  Card as C,
12334
- Anchor as D,
12335
- CopyButton as E,
12336
- useLocalStorage as F,
12400
+ ColorSwatch as D,
12401
+ Divider as E,
12402
+ Flex as F,
12337
12403
  Group as G,
12338
- HoverCard as H,
12404
+ CheckIcon as H,
12339
12405
  Image as I,
12340
- Spoiler as J,
12341
- Badge as K,
12342
- ButtonGroup as L,
12406
+ rem as J,
12407
+ Slider as K,
12408
+ SegmentedControl as L,
12343
12409
  MantineContext as M,
12344
- Tabs as N,
12345
- TabsList as O,
12410
+ useDebouncedValue as N,
12411
+ HoverCard as O,
12346
12412
  Paper as P,
12347
- TabsTab as Q,
12348
- TabsPanel as R,
12413
+ HoverCardTarget as Q,
12414
+ HoverCardDropdown as R,
12349
12415
  Stack as S,
12350
12416
  ThemeIcon as T,
12351
12417
  UnstyledButton as U,
12352
- rem as V,
12353
- Divider as W,
12354
- Flex as X,
12355
- ColorSwatch as Y,
12356
- CheckIcon as Z,
12357
- Select as _,
12418
+ Anchor as V,
12419
+ CopyButton as W,
12420
+ useLocalStorage as X,
12421
+ Spoiler as Y,
12422
+ Badge as Z,
12423
+ ButtonGroup as _,
12358
12424
  Text as a,
12359
- SegmentedControl as a0,
12360
- FloatingIndicator as a1,
12361
- ActionIconGroup as a2,
12362
- Overlay as a3,
12363
- Notification as a4,
12364
- Code as a5,
12365
- createTheme as a6,
12366
- MantineProvider as a7,
12367
- useInViewport as a8,
12368
- SimpleGrid as a9,
12369
- useTree as aa,
12370
- useComputedColorScheme as ab,
12371
- Tree as ac,
12372
- Drawer as ad,
12373
- ScrollArea as ae,
12374
- Alert as af,
12375
- ModalRoot as ag,
12376
- ModalOverlay as ah,
12377
- ModalContent as ai,
12378
- ModalBody as aj,
12379
- useMantineTheme as ak,
12380
- useMediaQuery as al,
12381
- useDisclosure as am,
12382
- LoadingOverlay as an,
12383
- useCallbackRef as ao,
12384
- Burger as ap,
12385
- Loader as aq,
12425
+ TabsList as a0,
12426
+ TabsTab as a1,
12427
+ TabsPanel as a2,
12428
+ useHover$1 as a3,
12429
+ FloatingIndicator as a4,
12430
+ useUncontrolled as a5,
12431
+ clampUseMovePosition as a6,
12432
+ useMove as a7,
12433
+ useMergedRef as a8,
12434
+ ActionIconGroup as a9,
12435
+ Overlay as aa,
12436
+ Notification as ab,
12437
+ Code as ac,
12438
+ createTheme as ad,
12439
+ MantineProvider as ae,
12440
+ useInViewport as af,
12441
+ SimpleGrid as ag,
12442
+ useTree as ah,
12443
+ useComputedColorScheme as ai,
12444
+ Tree as aj,
12445
+ Drawer as ak,
12446
+ ScrollArea as al,
12447
+ Alert as am,
12448
+ Select as an,
12449
+ ModalRoot as ao,
12450
+ ModalOverlay as ap,
12451
+ ModalContent as aq,
12452
+ ModalBody as ar,
12453
+ useMantineTheme as as,
12454
+ useMediaQuery as at,
12455
+ useDisclosure as au,
12456
+ LoadingOverlay as av,
12457
+ useCallbackRef as aw,
12458
+ Burger as ax,
12459
+ Loader as ay,
12386
12460
  CardSection as b,
12387
12461
  clsx as c,
12388
12462
  Center as d,
12389
12463
  Container as e,
12390
12464
  Title as f,
12391
12465
  Button as g,
12392
- useHotkeys as h,
12393
- Tooltip as i,
12394
- Menu as j,
12395
- MenuTarget as k,
12396
- MenuDropdown as l,
12397
- MenuLabel as m,
12398
- MenuDivider as n,
12399
- TooltipGroup as o,
12400
- Space as p,
12401
- MenuItem as q,
12402
- Popover as r,
12403
- PopoverTarget as s,
12466
+ useMantineStyleNonce as h,
12467
+ useHotkeys as i,
12468
+ Tooltip as j,
12469
+ Menu as k,
12470
+ MenuTarget as l,
12471
+ MenuDropdown as m,
12472
+ MenuLabel as n,
12473
+ MenuDivider as o,
12474
+ TooltipGroup as p,
12475
+ Space as q,
12476
+ MenuItem as r,
12477
+ Popover as s,
12404
12478
  themeToVars as t,
12405
12479
  useMantineColorScheme as u,
12406
- PopoverDropdown as v,
12407
- ScrollAreaAutosize as w,
12408
- CloseButton as x,
12409
- HoverCardTarget as y,
12410
- HoverCardDropdown as z
12480
+ PopoverTarget as v,
12481
+ PopoverDropdown as w,
12482
+ ScrollAreaAutosize as x,
12483
+ CloseButton as y,
12484
+ keys as z
12411
12485
  };
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { flushSync } from "react-dom";
4
- import { w as withSelectorExports } from "./likec4-DlkyDuSp.js";
4
+ import { w as withSelectorExports } from "./likec4-CNg5BLwi.js";
5
5
  const pushStateEvent = "pushstate", popStateEvent = "popstate", beforeUnloadEvent = "beforeunload", beforeUnloadListener = (event) => (event.preventDefault(), event.returnValue = ""), stopBlocking = () => {
6
6
  removeEventListener(beforeUnloadEvent, beforeUnloadListener, {
7
7
  capture: !0