@tutti-os/ui-system 0.0.293 → 0.0.295

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.
@@ -1985,6 +1985,96 @@ function DropdownMenuSubContent({
1985
1985
  ) });
1986
1986
  }
1987
1987
 
1988
+ // src/components/image-with-fallback/image-with-fallback.tsx
1989
+ import {
1990
+ useEffect as useEffect4,
1991
+ useRef as useRef3,
1992
+ useState as useState5
1993
+ } from "react";
1994
+ import { Fragment as Fragment3, jsx as jsx17 } from "react/jsx-runtime";
1995
+ import { createElement } from "react";
1996
+ var DEFAULT_RETRY_COUNT = 1;
1997
+ var DEFAULT_RETRY_DELAY_MS = 150;
1998
+ var MAX_RETRY_COUNT = 3;
1999
+ function normalizeRetryCount(value) {
2000
+ if (!Number.isFinite(value)) {
2001
+ return DEFAULT_RETRY_COUNT;
2002
+ }
2003
+ return Math.min(MAX_RETRY_COUNT, Math.max(0, Math.floor(value)));
2004
+ }
2005
+ function normalizeRetryDelay(value) {
2006
+ if (!Number.isFinite(value)) {
2007
+ return DEFAULT_RETRY_DELAY_MS;
2008
+ }
2009
+ return Math.max(0, Math.floor(value));
2010
+ }
2011
+ function ImageWithFallback({
2012
+ fallback = null,
2013
+ onError,
2014
+ retryCount = DEFAULT_RETRY_COUNT,
2015
+ retryDelayMs = DEFAULT_RETRY_DELAY_MS,
2016
+ src,
2017
+ ...imageProps
2018
+ }) {
2019
+ const normalizedSrc = src?.trim() ?? "";
2020
+ const maxRetries = normalizeRetryCount(retryCount);
2021
+ const delayMs = normalizeRetryDelay(retryDelayMs);
2022
+ const retryTimerRef = useRef3(null);
2023
+ const [deliveryState, setDeliveryState] = useState5({
2024
+ attempt: 0,
2025
+ phase: "ready",
2026
+ src: normalizedSrc
2027
+ });
2028
+ useEffect4(() => {
2029
+ if (deliveryState.src !== normalizedSrc) {
2030
+ setDeliveryState({ attempt: 0, phase: "ready", src: normalizedSrc });
2031
+ }
2032
+ if (retryTimerRef.current !== null) {
2033
+ clearTimeout(retryTimerRef.current);
2034
+ retryTimerRef.current = null;
2035
+ }
2036
+ }, [deliveryState.src, normalizedSrc]);
2037
+ useEffect4(
2038
+ () => () => {
2039
+ if (retryTimerRef.current !== null) {
2040
+ clearTimeout(retryTimerRef.current);
2041
+ }
2042
+ },
2043
+ []
2044
+ );
2045
+ const currentState = deliveryState.src === normalizedSrc ? deliveryState : { attempt: 0, phase: "ready", src: normalizedSrc };
2046
+ if (normalizedSrc.length === 0 || currentState.phase === "failed" || currentState.phase === "retrying") {
2047
+ return /* @__PURE__ */ jsx17(Fragment3, { children: fallback });
2048
+ }
2049
+ return /* @__PURE__ */ createElement(
2050
+ "img",
2051
+ {
2052
+ ...imageProps,
2053
+ key: `${normalizedSrc}:${currentState.attempt}`,
2054
+ src: normalizedSrc,
2055
+ onError: (event) => {
2056
+ onError?.(event);
2057
+ if (currentState.attempt >= maxRetries) {
2058
+ setDeliveryState(
2059
+ (previous) => previous.src === normalizedSrc ? { ...previous, phase: "failed" } : previous
2060
+ );
2061
+ return;
2062
+ }
2063
+ const nextAttempt = currentState.attempt + 1;
2064
+ setDeliveryState(
2065
+ (previous) => previous.src === normalizedSrc ? { attempt: nextAttempt, phase: "retrying", src: normalizedSrc } : previous
2066
+ );
2067
+ retryTimerRef.current = setTimeout(() => {
2068
+ retryTimerRef.current = null;
2069
+ setDeliveryState(
2070
+ (previous) => previous.src === normalizedSrc && previous.attempt === nextAttempt && previous.phase === "retrying" ? { ...previous, phase: "ready" } : previous
2071
+ );
2072
+ }, delayMs);
2073
+ }
2074
+ }
2075
+ );
2076
+ }
2077
+
1988
2078
  // src/components/mention-pill/mention-pill.tsx
1989
2079
  import * as React8 from "react";
1990
2080
 
@@ -1993,12 +2083,12 @@ import * as React7 from "react";
1993
2083
 
1994
2084
  // src/components/tooltip/tooltip.tsx
1995
2085
  import { Tooltip as TooltipPrimitive } from "radix-ui";
1996
- import { jsx as jsx17 } from "react/jsx-runtime";
2086
+ import { jsx as jsx18 } from "react/jsx-runtime";
1997
2087
  function TooltipProvider({
1998
2088
  delayDuration = 0,
1999
2089
  ...props
2000
2090
  }) {
2001
- return /* @__PURE__ */ jsx17(
2091
+ return /* @__PURE__ */ jsx18(
2002
2092
  TooltipPrimitive.Provider,
2003
2093
  {
2004
2094
  "data-slot": "tooltip-provider",
@@ -2010,17 +2100,17 @@ function TooltipProvider({
2010
2100
  function Tooltip({
2011
2101
  ...props
2012
2102
  }) {
2013
- return /* @__PURE__ */ jsx17(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
2103
+ return /* @__PURE__ */ jsx18(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
2014
2104
  }
2015
2105
  function TooltipTrigger({
2016
2106
  ...props
2017
2107
  }) {
2018
- return /* @__PURE__ */ jsx17(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
2108
+ return /* @__PURE__ */ jsx18(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
2019
2109
  }
2020
2110
  function TooltipPortal({
2021
2111
  ...props
2022
2112
  }) {
2023
- return /* @__PURE__ */ jsx17(TooltipPrimitive.Portal, { "data-slot": "tooltip-portal", ...props });
2113
+ return /* @__PURE__ */ jsx18(TooltipPrimitive.Portal, { "data-slot": "tooltip-portal", ...props });
2024
2114
  }
2025
2115
  function TooltipContent({
2026
2116
  className,
@@ -2029,7 +2119,7 @@ function TooltipContent({
2029
2119
  style,
2030
2120
  ...props
2031
2121
  }) {
2032
- return /* @__PURE__ */ jsx17(TooltipPortal, { children: /* @__PURE__ */ jsx17(
2122
+ return /* @__PURE__ */ jsx18(TooltipPortal, { children: /* @__PURE__ */ jsx18(
2033
2123
  TooltipPrimitive.Content,
2034
2124
  {
2035
2125
  "data-slot": "tooltip-content",
@@ -2046,7 +2136,7 @@ function TooltipContent({
2046
2136
  }
2047
2137
 
2048
2138
  // src/components/mention-pill/truncating-pill-label.tsx
2049
- import { jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
2139
+ import { jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
2050
2140
  function useTextOverflow(watch, descendantSelector) {
2051
2141
  const ref = React7.useRef(null);
2052
2142
  const [overflowing, setOverflowing] = React7.useState(false);
@@ -2083,7 +2173,7 @@ function TruncatingPillLabel({
2083
2173
  withTooltipProvider = true
2084
2174
  }) {
2085
2175
  const { ref: labelRef, overflowing } = useTextOverflow(tooltip);
2086
- const label = /* @__PURE__ */ jsx18(
2176
+ const label = /* @__PURE__ */ jsx19(
2087
2177
  "span",
2088
2178
  {
2089
2179
  ref: labelRef,
@@ -2098,14 +2188,14 @@ function TruncatingPillLabel({
2098
2188
  return label;
2099
2189
  }
2100
2190
  const tooltipElement = /* @__PURE__ */ jsxs10(Tooltip, { children: [
2101
- /* @__PURE__ */ jsx18(TooltipTrigger, { asChild: true, children: label }),
2102
- overflowing ? /* @__PURE__ */ jsx18(TooltipContent, { className: "max-w-[min(420px,calc(100vw-32px))] whitespace-normal text-left [overflow-wrap:anywhere]", children: tooltip }) : null
2191
+ /* @__PURE__ */ jsx19(TooltipTrigger, { asChild: true, children: label }),
2192
+ overflowing ? /* @__PURE__ */ jsx19(TooltipContent, { className: "max-w-[min(420px,calc(100vw-32px))] whitespace-normal text-left [overflow-wrap:anywhere]", children: tooltip }) : null
2103
2193
  ] });
2104
- return withTooltipProvider ? /* @__PURE__ */ jsx18(TooltipProvider, { delayDuration: 200, children: tooltipElement }) : tooltipElement;
2194
+ return withTooltipProvider ? /* @__PURE__ */ jsx19(TooltipProvider, { delayDuration: 200, children: tooltipElement }) : tooltipElement;
2105
2195
  }
2106
2196
 
2107
2197
  // src/components/mention-pill/mention-pill.tsx
2108
- import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
2198
+ import { jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
2109
2199
  var mentionPillTokenByKind = {
2110
2200
  app: "var(--rich-text-folder)",
2111
2201
  issue: "var(--rich-text-mention-issue)",
@@ -2173,7 +2263,7 @@ function MentionPill({
2173
2263
  iconContainerProps?.className
2174
2264
  ),
2175
2265
  children: [
2176
- normalizedIconUrl && failedIconUrl !== normalizedIconUrl ? /* @__PURE__ */ jsx19(
2266
+ normalizedIconUrl && failedIconUrl !== normalizedIconUrl ? /* @__PURE__ */ jsx20(
2177
2267
  "img",
2178
2268
  {
2179
2269
  src: normalizedIconUrl,
@@ -2189,7 +2279,7 @@ function MentionPill({
2189
2279
  setFailedIconUrl(normalizedIconUrl);
2190
2280
  }
2191
2281
  }
2192
- ) : /* @__PURE__ */ jsx19(
2282
+ ) : /* @__PURE__ */ jsx20(
2193
2283
  Icon,
2194
2284
  {
2195
2285
  ...fallbackIconProps,
@@ -2202,7 +2292,7 @@ function MentionPill({
2202
2292
  "data-mention-pill-fallback-icon": "true"
2203
2293
  }
2204
2294
  ),
2205
- removable ? /* @__PURE__ */ jsx19(
2295
+ removable ? /* @__PURE__ */ jsx20(
2206
2296
  "button",
2207
2297
  {
2208
2298
  "aria-label": removeButtonProps?.["aria-label"],
@@ -2212,7 +2302,7 @@ function MentionPill({
2212
2302
  "absolute top-1/2 left-1/2 inline-flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center text-[var(--text-secondary)] opacity-0 transition-opacity group-hover:opacity-100 hover:text-[var(--text-primary)] focus-visible:opacity-100",
2213
2303
  removeButtonProps?.className
2214
2304
  ),
2215
- children: /* @__PURE__ */ jsx19(CloseIcon, { className: "size-3.5" })
2305
+ children: /* @__PURE__ */ jsx20(CloseIcon, { className: "size-3.5" })
2216
2306
  }
2217
2307
  ) : null
2218
2308
  ]
@@ -2224,7 +2314,7 @@ function MentionPill({
2224
2314
  tooltip: tooltipEnabled ? tooltipText : "",
2225
2315
  withTooltipProvider,
2226
2316
  children: [
2227
- /* @__PURE__ */ jsx19("span", { children: label }),
2317
+ /* @__PURE__ */ jsx20("span", { children: label }),
2228
2318
  summary ? /* @__PURE__ */ jsxs11("span", { className: "text-current", children: [
2229
2319
  " ",
2230
2320
  summary
@@ -2238,14 +2328,14 @@ function MentionPill({
2238
2328
  }
2239
2329
 
2240
2330
  // src/components/radio-indicator/radio-indicator.tsx
2241
- import { jsx as jsx20 } from "react/jsx-runtime";
2331
+ import { jsx as jsx21 } from "react/jsx-runtime";
2242
2332
  function RadioIndicator({
2243
2333
  checked = false,
2244
2334
  disabled = false,
2245
2335
  className,
2246
2336
  ...props
2247
2337
  }) {
2248
- return /* @__PURE__ */ jsx20(
2338
+ return /* @__PURE__ */ jsx21(
2249
2339
  "span",
2250
2340
  {
2251
2341
  ...props,
@@ -2258,7 +2348,7 @@ function RadioIndicator({
2258
2348
  "inline-flex size-4 shrink-0 items-center justify-center rounded-full border-2 border-[var(--border-1)] bg-transparent transition-[border-color,background-color,box-shadow] data-[state=checked]:border-[var(--tutti-purple)] data-[state=unchecked]:hover:border-[color-mix(in_srgb,var(--text-primary)_40%,transparent)] data-disabled:cursor-not-allowed data-disabled:opacity-60",
2259
2349
  className
2260
2350
  ),
2261
- children: checked ? /* @__PURE__ */ jsx20(
2351
+ children: checked ? /* @__PURE__ */ jsx21(
2262
2352
  "span",
2263
2353
  {
2264
2354
  "aria-hidden": "true",
@@ -2271,13 +2361,13 @@ function RadioIndicator({
2271
2361
 
2272
2362
  // src/components/resizable/resizable.tsx
2273
2363
  import * as ResizablePrimitive from "react-resizable-panels";
2274
- import { jsx as jsx21 } from "react/jsx-runtime";
2364
+ import { jsx as jsx22 } from "react/jsx-runtime";
2275
2365
  function ResizablePanelGroup({
2276
2366
  className,
2277
2367
  orientation = "horizontal",
2278
2368
  ...props
2279
2369
  }) {
2280
- return /* @__PURE__ */ jsx21(
2370
+ return /* @__PURE__ */ jsx22(
2281
2371
  ResizablePrimitive.Group,
2282
2372
  {
2283
2373
  "data-orientation": orientation,
@@ -2292,14 +2382,14 @@ function ResizablePanelGroup({
2292
2382
  );
2293
2383
  }
2294
2384
  function ResizablePanel(props) {
2295
- return /* @__PURE__ */ jsx21(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
2385
+ return /* @__PURE__ */ jsx22(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
2296
2386
  }
2297
2387
  function ResizableHandle({
2298
2388
  className,
2299
2389
  withHandle,
2300
2390
  ...props
2301
2391
  }) {
2302
- return /* @__PURE__ */ jsx21(
2392
+ return /* @__PURE__ */ jsx22(
2303
2393
  ResizablePrimitive.Separator,
2304
2394
  {
2305
2395
  "data-slot": "resizable-handle",
@@ -2308,14 +2398,14 @@ function ResizableHandle({
2308
2398
  className
2309
2399
  ),
2310
2400
  ...props,
2311
- children: withHandle ? /* @__PURE__ */ jsx21("div", { className: "z-10 flex items-center justify-center rounded-full bg-border/85 opacity-0 transition-[background-color,opacity] group-hover:bg-border group-hover:opacity-100 group-focus-visible:bg-border group-focus-visible:opacity-100 group-aria-[orientation=horizontal]:h-[3px] group-aria-[orientation=horizontal]:w-10 group-aria-[orientation=vertical]:h-10 group-aria-[orientation=vertical]:w-[3px]" }) : null
2401
+ children: withHandle ? /* @__PURE__ */ jsx22("div", { className: "z-10 flex items-center justify-center rounded-full bg-border/85 opacity-0 transition-[background-color,opacity] group-hover:bg-border group-hover:opacity-100 group-focus-visible:bg-border group-focus-visible:opacity-100 group-aria-[orientation=horizontal]:h-[3px] group-aria-[orientation=horizontal]:w-10 group-aria-[orientation=vertical]:h-10 group-aria-[orientation=vertical]:w-[3px]" }) : null
2312
2402
  }
2313
2403
  );
2314
2404
  }
2315
2405
 
2316
2406
  // src/components/scroll-area/scroll-area.tsx
2317
2407
  import * as React9 from "react";
2318
- import { jsx as jsx22, jsxs as jsxs12 } from "react/jsx-runtime";
2408
+ import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
2319
2409
  var MIN_THUMB_SIZE_PX = 24;
2320
2410
  function ScrollArea({
2321
2411
  className,
@@ -2352,9 +2442,9 @@ function ScrollArea({
2352
2442
  ...props
2353
2443
  };
2354
2444
  if (scrollbarMode === "native") {
2355
- return /* @__PURE__ */ jsx22(NativeScrollArea, { ...implementationProps, children });
2445
+ return /* @__PURE__ */ jsx23(NativeScrollArea, { ...implementationProps, children });
2356
2446
  }
2357
- return /* @__PURE__ */ jsx22(CustomScrollArea, { ...implementationProps, children });
2447
+ return /* @__PURE__ */ jsx23(CustomScrollArea, { ...implementationProps, children });
2358
2448
  }
2359
2449
  function NativeScrollArea({
2360
2450
  className,
@@ -2374,7 +2464,7 @@ function NativeScrollArea({
2374
2464
  ...props
2375
2465
  }) {
2376
2466
  const alwaysVisible = type === "always" || type === "scroll" || hasAlwaysVisibleScrollbarSelector(className);
2377
- return /* @__PURE__ */ jsx22(
2467
+ return /* @__PURE__ */ jsx23(
2378
2468
  ScrollAreaFrame,
2379
2469
  {
2380
2470
  ...props,
@@ -2455,7 +2545,7 @@ function CustomScrollArea({
2455
2545
  viewportTestId,
2456
2546
  children: [
2457
2547
  children,
2458
- /* @__PURE__ */ jsx22(
2548
+ /* @__PURE__ */ jsx23(
2459
2549
  ScrollAreaScrollbar,
2460
2550
  {
2461
2551
  active: active || alwaysVisible,
@@ -2480,7 +2570,7 @@ function ScrollAreaFrame({
2480
2570
  viewportTestId,
2481
2571
  ...props
2482
2572
  }) {
2483
- return /* @__PURE__ */ jsx22(
2573
+ return /* @__PURE__ */ jsx23(
2484
2574
  "div",
2485
2575
  {
2486
2576
  "data-slot": "scroll-area",
@@ -2490,7 +2580,7 @@ function ScrollAreaFrame({
2490
2580
  className
2491
2581
  ),
2492
2582
  ...props,
2493
- children: /* @__PURE__ */ jsx22(
2583
+ children: /* @__PURE__ */ jsx23(
2494
2584
  "div",
2495
2585
  {
2496
2586
  ...viewportProps,
@@ -2501,7 +2591,7 @@ function ScrollAreaFrame({
2501
2591
  "size-full overflow-auto rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
2502
2592
  viewportClassName
2503
2593
  ),
2504
- children: /* @__PURE__ */ jsx22(
2594
+ children: /* @__PURE__ */ jsx23(
2505
2595
  "div",
2506
2596
  {
2507
2597
  ref: contentRef,
@@ -2716,7 +2806,7 @@ function ScrollAreaScrollbar({
2716
2806
  React9.useEffect(() => {
2717
2807
  scheduleSync();
2718
2808
  });
2719
- return /* @__PURE__ */ jsx22(
2809
+ return /* @__PURE__ */ jsx23(
2720
2810
  "div",
2721
2811
  {
2722
2812
  ref: trackRef,
@@ -2734,7 +2824,7 @@ function ScrollAreaScrollbar({
2734
2824
  onPointerEnter: () => setTrackActive(true),
2735
2825
  onPointerLeave: () => setTrackActive(false),
2736
2826
  onPointerDown: handleTrackPointerDown,
2737
- children: /* @__PURE__ */ jsx22(
2827
+ children: /* @__PURE__ */ jsx23(
2738
2828
  "div",
2739
2829
  {
2740
2830
  ref: thumbRef,
@@ -2753,7 +2843,7 @@ function ScrollBar({
2753
2843
  orientation = "vertical",
2754
2844
  ...props
2755
2845
  }) {
2756
- return /* @__PURE__ */ jsx22(
2846
+ return /* @__PURE__ */ jsx23(
2757
2847
  "div",
2758
2848
  {
2759
2849
  "data-slot": "scroll-area-scrollbar",
@@ -2761,7 +2851,7 @@ function ScrollBar({
2761
2851
  className: cn(scrollbarClassName(orientation), className),
2762
2852
  style: scrollbarStyle({ active: false, orientation, scrollable: true }),
2763
2853
  ...props,
2764
- children: /* @__PURE__ */ jsx22(
2854
+ children: /* @__PURE__ */ jsx23(
2765
2855
  "div",
2766
2856
  {
2767
2857
  "data-slot": "scroll-area-thumb",
@@ -2882,17 +2972,17 @@ function clamp(value, min, max) {
2882
2972
 
2883
2973
  // src/components/select/select.tsx
2884
2974
  import { Select as SelectPrimitive } from "radix-ui";
2885
- import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
2975
+ import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
2886
2976
  function Select({
2887
2977
  ...props
2888
2978
  }) {
2889
- return /* @__PURE__ */ jsx23(SelectPrimitive.Root, { "data-slot": "select", ...props });
2979
+ return /* @__PURE__ */ jsx24(SelectPrimitive.Root, { "data-slot": "select", ...props });
2890
2980
  }
2891
2981
  function SelectGroup({
2892
2982
  className,
2893
2983
  ...props
2894
2984
  }) {
2895
- return /* @__PURE__ */ jsx23(
2985
+ return /* @__PURE__ */ jsx24(
2896
2986
  SelectPrimitive.Group,
2897
2987
  {
2898
2988
  "data-slot": "select-group",
@@ -2904,7 +2994,7 @@ function SelectGroup({
2904
2994
  function SelectValue({
2905
2995
  ...props
2906
2996
  }) {
2907
- return /* @__PURE__ */ jsx23(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
2997
+ return /* @__PURE__ */ jsx24(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
2908
2998
  }
2909
2999
  function SelectTrigger({
2910
3000
  className,
@@ -2927,7 +3017,7 @@ function SelectTrigger({
2927
3017
  ...props,
2928
3018
  children: [
2929
3019
  children,
2930
- /* @__PURE__ */ jsx23(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx23(
3020
+ /* @__PURE__ */ jsx24(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx24(
2931
3021
  ChevronDownIcon,
2932
3022
  {
2933
3023
  className: cn("pointer-events-none size-4", "text-current")
@@ -2945,7 +3035,7 @@ function SelectContent({
2945
3035
  style,
2946
3036
  ...props
2947
3037
  }) {
2948
- return /* @__PURE__ */ jsx23(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx23(
3038
+ return /* @__PURE__ */ jsx24(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx24(
2949
3039
  SelectPrimitive.Content,
2950
3040
  {
2951
3041
  asChild: true,
@@ -2965,8 +3055,8 @@ function SelectContent({
2965
3055
  ),
2966
3056
  style: { zIndex: "var(--z-popover)", ...style },
2967
3057
  children: [
2968
- /* @__PURE__ */ jsx23(SelectScrollUpButton, {}),
2969
- /* @__PURE__ */ jsx23(
3058
+ /* @__PURE__ */ jsx24(SelectScrollUpButton, {}),
3059
+ /* @__PURE__ */ jsx24(
2970
3060
  SelectPrimitive.Viewport,
2971
3061
  {
2972
3062
  "data-position": position,
@@ -2976,7 +3066,7 @@ function SelectContent({
2976
3066
  children
2977
3067
  }
2978
3068
  ),
2979
- /* @__PURE__ */ jsx23(SelectScrollDownButton, {})
3069
+ /* @__PURE__ */ jsx24(SelectScrollDownButton, {})
2980
3070
  ]
2981
3071
  }
2982
3072
  )
@@ -2987,7 +3077,7 @@ function SelectLabel({
2987
3077
  className,
2988
3078
  ...props
2989
3079
  }) {
2990
- return /* @__PURE__ */ jsx23(
3080
+ return /* @__PURE__ */ jsx24(
2991
3081
  SelectPrimitive.Label,
2992
3082
  {
2993
3083
  "data-slot": "select-label",
@@ -3003,7 +3093,7 @@ function SelectSplitLayout({
3003
3093
  className,
3004
3094
  ...props
3005
3095
  }) {
3006
- return /* @__PURE__ */ jsx23(
3096
+ return /* @__PURE__ */ jsx24(
3007
3097
  "div",
3008
3098
  {
3009
3099
  "data-slot": "select-split-layout",
@@ -3019,7 +3109,7 @@ function SelectSplitColumn({
3019
3109
  className,
3020
3110
  ...props
3021
3111
  }) {
3022
- return /* @__PURE__ */ jsx23(
3112
+ return /* @__PURE__ */ jsx24(
3023
3113
  "div",
3024
3114
  {
3025
3115
  "data-slot": "select-split-column",
@@ -3032,7 +3122,7 @@ function SelectSplitColumnLabel({
3032
3122
  className,
3033
3123
  ...props
3034
3124
  }) {
3035
- return /* @__PURE__ */ jsx23(
3125
+ return /* @__PURE__ */ jsx24(
3036
3126
  "div",
3037
3127
  {
3038
3128
  "data-slot": "select-split-column-label",
@@ -3048,7 +3138,7 @@ function SelectSplitColumnItems({
3048
3138
  className,
3049
3139
  ...props
3050
3140
  }) {
3051
- return /* @__PURE__ */ jsx23(
3141
+ return /* @__PURE__ */ jsx24(
3052
3142
  "div",
3053
3143
  {
3054
3144
  "data-slot": "select-split-column-items",
@@ -3064,7 +3154,7 @@ function SelectSplitDivider({
3064
3154
  className,
3065
3155
  ...props
3066
3156
  }) {
3067
- return /* @__PURE__ */ jsx23(
3157
+ return /* @__PURE__ */ jsx24(
3068
3158
  "div",
3069
3159
  {
3070
3160
  "aria-hidden": "true",
@@ -3090,14 +3180,14 @@ function SelectItem({
3090
3180
  className: cn("w-full", menuItemWithIndicatorClassName, className),
3091
3181
  ...props,
3092
3182
  children: [
3093
- /* @__PURE__ */ jsx23("span", { className: menuItemIndicatorClassName, children: forceSelectedIndicator ? /* @__PURE__ */ jsx23(
3183
+ /* @__PURE__ */ jsx24("span", { className: menuItemIndicatorClassName, children: forceSelectedIndicator ? /* @__PURE__ */ jsx24(
3094
3184
  CheckIcon,
3095
3185
  {
3096
3186
  className: "pointer-events-none text-[var(--tutti-purple)]",
3097
3187
  "data-slot": "select-item-forced-indicator"
3098
3188
  }
3099
- ) : /* @__PURE__ */ jsx23(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx23(CheckIcon, { className: "pointer-events-none text-[var(--tutti-purple)]" }) }) }),
3100
- /* @__PURE__ */ jsx23(SelectPrimitive.ItemText, { children })
3189
+ ) : /* @__PURE__ */ jsx24(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx24(CheckIcon, { className: "pointer-events-none text-[var(--tutti-purple)]" }) }) }),
3190
+ /* @__PURE__ */ jsx24(SelectPrimitive.ItemText, { children })
3101
3191
  ]
3102
3192
  }
3103
3193
  );
@@ -3106,7 +3196,7 @@ function SelectSeparator({
3106
3196
  className,
3107
3197
  ...props
3108
3198
  }) {
3109
- return /* @__PURE__ */ jsx23(
3199
+ return /* @__PURE__ */ jsx24(
3110
3200
  SelectPrimitive.Separator,
3111
3201
  {
3112
3202
  "data-slot": "select-separator",
@@ -3122,7 +3212,7 @@ function SelectScrollUpButton({
3122
3212
  className,
3123
3213
  ...props
3124
3214
  }) {
3125
- return /* @__PURE__ */ jsx23(
3215
+ return /* @__PURE__ */ jsx24(
3126
3216
  SelectPrimitive.ScrollUpButton,
3127
3217
  {
3128
3218
  "data-slot": "select-scroll-up-button",
@@ -3131,7 +3221,7 @@ function SelectScrollUpButton({
3131
3221
  className
3132
3222
  ),
3133
3223
  ...props,
3134
- children: /* @__PURE__ */ jsx23(ChevronUpIcon, {})
3224
+ children: /* @__PURE__ */ jsx24(ChevronUpIcon, {})
3135
3225
  }
3136
3226
  );
3137
3227
  }
@@ -3139,7 +3229,7 @@ function SelectScrollDownButton({
3139
3229
  className,
3140
3230
  ...props
3141
3231
  }) {
3142
- return /* @__PURE__ */ jsx23(
3232
+ return /* @__PURE__ */ jsx24(
3143
3233
  SelectPrimitive.ScrollDownButton,
3144
3234
  {
3145
3235
  "data-slot": "select-scroll-down-button",
@@ -3148,21 +3238,21 @@ function SelectScrollDownButton({
3148
3238
  className
3149
3239
  ),
3150
3240
  ...props,
3151
- children: /* @__PURE__ */ jsx23(ChevronDownIcon, {})
3241
+ children: /* @__PURE__ */ jsx24(ChevronDownIcon, {})
3152
3242
  }
3153
3243
  );
3154
3244
  }
3155
3245
 
3156
3246
  // src/components/separator/separator.tsx
3157
3247
  import { Separator as SeparatorPrimitive } from "radix-ui";
3158
- import { jsx as jsx24 } from "react/jsx-runtime";
3248
+ import { jsx as jsx25 } from "react/jsx-runtime";
3159
3249
  function Separator2({
3160
3250
  className,
3161
3251
  orientation = "horizontal",
3162
3252
  decorative = true,
3163
3253
  ...props
3164
3254
  }) {
3165
- return /* @__PURE__ */ jsx24(
3255
+ return /* @__PURE__ */ jsx25(
3166
3256
  SeparatorPrimitive.Root,
3167
3257
  {
3168
3258
  "data-slot": "separator",
@@ -3178,7 +3268,7 @@ function Separator2({
3178
3268
  }
3179
3269
 
3180
3270
  // src/components/section-tabs/section-tabs.tsx
3181
- import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
3271
+ import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
3182
3272
  function SectionTabs({
3183
3273
  tabs,
3184
3274
  value,
@@ -3187,7 +3277,7 @@ function SectionTabs({
3187
3277
  className,
3188
3278
  testId
3189
3279
  }) {
3190
- return /* @__PURE__ */ jsx25(
3280
+ return /* @__PURE__ */ jsx26(
3191
3281
  "div",
3192
3282
  {
3193
3283
  "aria-label": ariaLabel,
@@ -3212,8 +3302,8 @@ function SectionTabs({
3212
3302
  type: "button",
3213
3303
  onClick: () => onValueChange(tab.value),
3214
3304
  children: [
3215
- /* @__PURE__ */ jsx25("span", { className: "min-w-0 truncate", children: tab.label }),
3216
- tab.count !== void 0 ? /* @__PURE__ */ jsx25("span", { className: "text-[15px] font-semibold leading-5 text-[inherit]", children: tab.count }) : null
3305
+ /* @__PURE__ */ jsx26("span", { className: "min-w-0 truncate", children: tab.label }),
3306
+ tab.count !== void 0 ? /* @__PURE__ */ jsx26("span", { className: "text-[15px] font-semibold leading-5 text-[inherit]", children: tab.count }) : null
3217
3307
  ]
3218
3308
  },
3219
3309
  tab.value
@@ -3224,8 +3314,8 @@ function SectionTabs({
3224
3314
  }
3225
3315
 
3226
3316
  // src/components/segment-bar/segment-bar.tsx
3227
- import { useEffect as useEffect6, useLayoutEffect as useLayoutEffect2, useRef as useRef5, useState as useState8 } from "react";
3228
- import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
3317
+ import { useEffect as useEffect7, useLayoutEffect as useLayoutEffect2, useRef as useRef6, useState as useState9 } from "react";
3318
+ import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
3229
3319
  function SegmentBar({
3230
3320
  segments,
3231
3321
  value,
@@ -3234,9 +3324,9 @@ function SegmentBar({
3234
3324
  className,
3235
3325
  testId
3236
3326
  }) {
3237
- const containerRef = useRef5(null);
3238
- const buttonRefs = useRef5({});
3239
- const [indicator, setIndicator] = useState8({
3327
+ const containerRef = useRef6(null);
3328
+ const buttonRefs = useRef6({});
3329
+ const [indicator, setIndicator] = useState9({
3240
3330
  left: 0,
3241
3331
  width: 0,
3242
3332
  ready: false
@@ -3258,7 +3348,7 @@ function SegmentBar({
3258
3348
  (current) => current.left === next.left && current.width === next.width && current.ready === next.ready ? current : next
3259
3349
  );
3260
3350
  }, [segments, value]);
3261
- useEffect6(() => {
3351
+ useEffect7(() => {
3262
3352
  const container = containerRef.current;
3263
3353
  if (!container || typeof ResizeObserver === "undefined") {
3264
3354
  return;
@@ -3299,7 +3389,7 @@ function SegmentBar({
3299
3389
  ref: containerRef,
3300
3390
  role: "tablist",
3301
3391
  children: [
3302
- indicator.ready ? /* @__PURE__ */ jsx26(
3392
+ indicator.ready ? /* @__PURE__ */ jsx27(
3303
3393
  "span",
3304
3394
  {
3305
3395
  "aria-hidden": "true",
@@ -3310,7 +3400,7 @@ function SegmentBar({
3310
3400
  ) : null,
3311
3401
  segments.map((segment) => {
3312
3402
  const isActive = value === segment.value;
3313
- return /* @__PURE__ */ jsx26(
3403
+ return /* @__PURE__ */ jsx27(
3314
3404
  "button",
3315
3405
  {
3316
3406
  "aria-selected": isActive,
@@ -3340,9 +3430,9 @@ function SegmentBar({
3340
3430
  }
3341
3431
 
3342
3432
  // src/components/shortcut-badge/shortcut-badge.tsx
3343
- import { jsx as jsx27 } from "react/jsx-runtime";
3433
+ import { jsx as jsx28 } from "react/jsx-runtime";
3344
3434
  function ShortcutBadge({ className, ...props }) {
3345
- return /* @__PURE__ */ jsx27(
3435
+ return /* @__PURE__ */ jsx28(
3346
3436
  "kbd",
3347
3437
  {
3348
3438
  "data-slot": "shortcut-badge",
@@ -3358,7 +3448,7 @@ function ShortcutBadge({ className, ...props }) {
3358
3448
  // src/components/slider/slider.tsx
3359
3449
  import * as React10 from "react";
3360
3450
  import { Slider as SliderPrimitive } from "radix-ui";
3361
- import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
3451
+ import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
3362
3452
  function Slider({
3363
3453
  "aria-label": ariaLabel,
3364
3454
  "aria-labelledby": ariaLabelledBy,
@@ -3388,12 +3478,12 @@ function Slider({
3388
3478
  ),
3389
3479
  ...props,
3390
3480
  children: [
3391
- /* @__PURE__ */ jsx28(
3481
+ /* @__PURE__ */ jsx29(
3392
3482
  SliderPrimitive.Track,
3393
3483
  {
3394
3484
  "data-slot": "slider-track",
3395
3485
  className: "relative grow overflow-hidden rounded-full bg-[var(--transparency-block)] data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1",
3396
- children: /* @__PURE__ */ jsx28(
3486
+ children: /* @__PURE__ */ jsx29(
3397
3487
  SliderPrimitive.Range,
3398
3488
  {
3399
3489
  "data-slot": "slider-range",
@@ -3402,7 +3492,7 @@ function Slider({
3402
3492
  )
3403
3493
  }
3404
3494
  ),
3405
- Array.from({ length: values.length }, (_, index) => /* @__PURE__ */ jsx28(
3495
+ Array.from({ length: values.length }, (_, index) => /* @__PURE__ */ jsx29(
3406
3496
  SliderPrimitive.Thumb,
3407
3497
  {
3408
3498
  "aria-disabled": props.disabled || void 0,
@@ -3423,9 +3513,9 @@ import {
3423
3513
  Toaster as SonnerToaster,
3424
3514
  toast
3425
3515
  } from "sonner";
3426
- import { jsx as jsx29 } from "react/jsx-runtime";
3516
+ import { jsx as jsx30 } from "react/jsx-runtime";
3427
3517
  function Toaster({ toastOptions, style, ...props }) {
3428
- return /* @__PURE__ */ jsx29(
3518
+ return /* @__PURE__ */ jsx30(
3429
3519
  SonnerToaster,
3430
3520
  {
3431
3521
  closeButton: true,
@@ -3434,11 +3524,11 @@ function Toaster({ toastOptions, style, ...props }) {
3434
3524
  position: "top-right",
3435
3525
  visibleToasts: 4,
3436
3526
  icons: {
3437
- error: /* @__PURE__ */ jsx29(FailedFilledIcon, { className: "size-4" }),
3438
- info: /* @__PURE__ */ jsx29(WarningLinedIcon, { className: "size-4" }),
3439
- loading: /* @__PURE__ */ jsx29(LoadingIcon, { className: "size-4 animate-spin" }),
3440
- success: /* @__PURE__ */ jsx29(SuccessFilledIcon, { className: "size-4" }),
3441
- warning: /* @__PURE__ */ jsx29(WarningFilledIcon, { className: "size-4" })
3527
+ error: /* @__PURE__ */ jsx30(FailedFilledIcon, { className: "size-4" }),
3528
+ info: /* @__PURE__ */ jsx30(WarningLinedIcon, { className: "size-4" }),
3529
+ loading: /* @__PURE__ */ jsx30(LoadingIcon, { className: "size-4 animate-spin" }),
3530
+ success: /* @__PURE__ */ jsx30(SuccessFilledIcon, { className: "size-4" }),
3531
+ warning: /* @__PURE__ */ jsx30(WarningFilledIcon, { className: "size-4" })
3442
3532
  },
3443
3533
  style: {
3444
3534
  "--normal-bg": "var(--background-fronted)",
@@ -3467,7 +3557,7 @@ function Toaster({ toastOptions, style, ...props }) {
3467
3557
  }
3468
3558
 
3469
3559
  // src/components/spinner/spinner.tsx
3470
- import { jsx as jsx30 } from "react/jsx-runtime";
3560
+ import { jsx as jsx31 } from "react/jsx-runtime";
3471
3561
  function Spinner({
3472
3562
  className,
3473
3563
  size = 16,
@@ -3476,7 +3566,7 @@ function Spinner({
3476
3566
  testId,
3477
3567
  trackColor
3478
3568
  }) {
3479
- return /* @__PURE__ */ jsx30(
3569
+ return /* @__PURE__ */ jsx31(
3480
3570
  LoadingIcon,
3481
3571
  {
3482
3572
  "data-slot": "spinner",
@@ -3564,7 +3654,7 @@ function useComposedRefs(...refs) {
3564
3654
  }
3565
3655
 
3566
3656
  // src/components/sortable/sortable.tsx
3567
- import { jsx as jsx31 } from "react/jsx-runtime";
3657
+ import { jsx as jsx32 } from "react/jsx-runtime";
3568
3658
  var orientationConfig = {
3569
3659
  vertical: {
3570
3660
  modifiers: [restrictToVerticalAxis, restrictToParentElement],
@@ -3702,11 +3792,11 @@ function Sortable(props) {
3702
3792
  flatCursor
3703
3793
  ]
3704
3794
  );
3705
- return /* @__PURE__ */ jsx31(
3795
+ return /* @__PURE__ */ jsx32(
3706
3796
  SortableRootContext.Provider,
3707
3797
  {
3708
3798
  value: contextValue,
3709
- children: /* @__PURE__ */ jsx31(
3799
+ children: /* @__PURE__ */ jsx32(
3710
3800
  DndContext,
3711
3801
  {
3712
3802
  collisionDetection: collisionDetection ?? config.collisionDetection,
@@ -3735,12 +3825,12 @@ function SortableContent(props) {
3735
3825
  } = props;
3736
3826
  const context = useSortableContext(CONTENT_NAME);
3737
3827
  const ContentPrimitive = asChild ? SlotPrimitive.Slot : "div";
3738
- return /* @__PURE__ */ jsx31(SortableContentContext.Provider, { value: true, children: /* @__PURE__ */ jsx31(
3828
+ return /* @__PURE__ */ jsx32(SortableContentContext.Provider, { value: true, children: /* @__PURE__ */ jsx32(
3739
3829
  SortableContext,
3740
3830
  {
3741
3831
  items: context.items,
3742
3832
  strategy: strategyProp ?? context.strategy,
3743
- children: withoutSlot ? children : /* @__PURE__ */ jsx31(
3833
+ children: withoutSlot ? children : /* @__PURE__ */ jsx32(
3744
3834
  ContentPrimitive,
3745
3835
  {
3746
3836
  "data-slot": "sortable-content",
@@ -3817,7 +3907,7 @@ function SortableItem(props) {
3817
3907
  [id, attributes, listeners, setActivatorNodeRef, isDragging, disabled]
3818
3908
  );
3819
3909
  const ItemPrimitive = asChild ? SlotPrimitive.Slot : "div";
3820
- return /* @__PURE__ */ jsx31(SortableItemContext.Provider, { value: itemContext, children: /* @__PURE__ */ jsx31(
3910
+ return /* @__PURE__ */ jsx32(SortableItemContext.Provider, { value: itemContext, children: /* @__PURE__ */ jsx32(
3821
3911
  ItemPrimitive,
3822
3912
  {
3823
3913
  id,
@@ -3854,7 +3944,7 @@ function SortableItemHandle(props) {
3854
3944
  itemContext.setActivatorNodeRef(node);
3855
3945
  });
3856
3946
  const HandlePrimitive = asChild ? SlotPrimitive.Slot : "button";
3857
- return /* @__PURE__ */ jsx31(
3947
+ return /* @__PURE__ */ jsx32(
3858
3948
  HandlePrimitive,
3859
3949
  {
3860
3950
  type: "button",
@@ -3913,14 +4003,14 @@ function SortableOverlay(props) {
3913
4003
  const container = containerProp ?? (mounted ? globalThis.document?.body : null);
3914
4004
  if (!container) return null;
3915
4005
  return ReactDOM.createPortal(
3916
- /* @__PURE__ */ jsx31(
4006
+ /* @__PURE__ */ jsx32(
3917
4007
  DragOverlay,
3918
4008
  {
3919
4009
  modifiers: context.modifiers,
3920
4010
  className: cn(!context.flatCursor && "cursor-grabbing"),
3921
4011
  ...overlayProps,
3922
4012
  dropAnimation: prefersReducedMotion ? null : callerDropAnimation === void 0 ? defaultDropAnimation : callerDropAnimation,
3923
- children: /* @__PURE__ */ jsx31(SortableOverlayContext.Provider, { value: true, children: context.activeId ? typeof children === "function" ? children({ value: context.activeId }) : children : null })
4013
+ children: /* @__PURE__ */ jsx32(SortableOverlayContext.Provider, { value: true, children: context.activeId ? typeof children === "function" ? children({ value: context.activeId }) : children : null })
3924
4014
  }
3925
4015
  ),
3926
4016
  container
@@ -3929,7 +4019,7 @@ function SortableOverlay(props) {
3929
4019
 
3930
4020
  // src/components/status-dot/status-dot.tsx
3931
4021
  import { cva as cva4 } from "class-variance-authority";
3932
- import { jsx as jsx32 } from "react/jsx-runtime";
4022
+ import { jsx as jsx33 } from "react/jsx-runtime";
3933
4023
  var statusDotVariants = cva4("inline-flex shrink-0 rounded-full", {
3934
4024
  variants: {
3935
4025
  tone: {
@@ -3963,7 +4053,7 @@ function StatusDot({
3963
4053
  title,
3964
4054
  className
3965
4055
  }) {
3966
- return /* @__PURE__ */ jsx32(
4056
+ return /* @__PURE__ */ jsx33(
3967
4057
  "span",
3968
4058
  {
3969
4059
  "aria-hidden": ariaLabel ? void 0 : true,
@@ -3981,7 +4071,7 @@ function StatusDot({
3981
4071
 
3982
4072
  // src/components/switch/switch.tsx
3983
4073
  import { Switch as SwitchPrimitive } from "radix-ui";
3984
- import { jsx as jsx33 } from "react/jsx-runtime";
4074
+ import { jsx as jsx34 } from "react/jsx-runtime";
3985
4075
  function Switch({
3986
4076
  className,
3987
4077
  disabled,
@@ -3989,7 +4079,7 @@ function Switch({
3989
4079
  size = "default",
3990
4080
  ...props
3991
4081
  }) {
3992
- return /* @__PURE__ */ jsx33(
4082
+ return /* @__PURE__ */ jsx34(
3993
4083
  SwitchPrimitive.Root,
3994
4084
  {
3995
4085
  "data-slot": "switch",
@@ -4002,12 +4092,12 @@ function Switch({
4002
4092
  className
4003
4093
  ),
4004
4094
  ...props,
4005
- children: /* @__PURE__ */ jsx33(
4095
+ children: /* @__PURE__ */ jsx34(
4006
4096
  SwitchPrimitive.Thumb,
4007
4097
  {
4008
4098
  "data-slot": "switch-thumb",
4009
4099
  className: "pointer-events-none inline-flex items-center justify-center rounded-full bg-[var(--white-stationary)] ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-[state=checked]:translate-x-[14px] group-data-[size=sm]/switch:data-[state=checked]:translate-x-[10px] group-data-[size=default]/switch:data-[state=unchecked]:translate-x-0 group-data-[size=sm]/switch:data-[state=unchecked]:translate-x-0",
4010
- children: loading ? /* @__PURE__ */ jsx33(
4100
+ children: loading ? /* @__PURE__ */ jsx34(
4011
4101
  LoadingIcon,
4012
4102
  {
4013
4103
  "aria-hidden": "true",
@@ -4021,9 +4111,9 @@ function Switch({
4021
4111
  }
4022
4112
 
4023
4113
  // src/components/textarea/textarea.tsx
4024
- import { jsx as jsx34 } from "react/jsx-runtime";
4114
+ import { jsx as jsx35 } from "react/jsx-runtime";
4025
4115
  function Textarea({ className, ...props }) {
4026
- return /* @__PURE__ */ jsx34(
4116
+ return /* @__PURE__ */ jsx35(
4027
4117
  "textarea",
4028
4118
  {
4029
4119
  "data-slot": "textarea",
@@ -4040,13 +4130,13 @@ function Textarea({ className, ...props }) {
4040
4130
  import * as React13 from "react";
4041
4131
  import { Toast as ToastPrimitive } from "radix-ui";
4042
4132
  import { cva as cva5 } from "class-variance-authority";
4043
- import { jsx as jsx35, jsxs as jsxs17 } from "react/jsx-runtime";
4133
+ import { jsx as jsx36, jsxs as jsxs17 } from "react/jsx-runtime";
4044
4134
  var toastDefaultDurationMs = 3e3;
4045
4135
  function ToastProvider({
4046
4136
  duration = toastDefaultDurationMs,
4047
4137
  ...props
4048
4138
  }) {
4049
- return /* @__PURE__ */ jsx35(ToastPrimitive.Provider, { duration, ...props });
4139
+ return /* @__PURE__ */ jsx36(ToastPrimitive.Provider, { duration, ...props });
4050
4140
  }
4051
4141
  var ToastVisualContext = React13.createContext(null);
4052
4142
  var toastStatusIconByVariant = {
@@ -4104,7 +4194,7 @@ function ToastRoot({
4104
4194
  ...props
4105
4195
  }) {
4106
4196
  const isDestructive = variant === "destructive";
4107
- return /* @__PURE__ */ jsx35(
4197
+ return /* @__PURE__ */ jsx36(
4108
4198
  ToastPrimitive.Root,
4109
4199
  {
4110
4200
  "aria-busy": busy,
@@ -4121,7 +4211,7 @@ function ToastRoot({
4121
4211
  ...style
4122
4212
  },
4123
4213
  ...props,
4124
- children: /* @__PURE__ */ jsx35(ToastVisualContext.Provider, { value: { busy, variant }, children: /* @__PURE__ */ jsx35("span", { className: "flex min-w-0 max-w-full flex-col items-center justify-center whitespace-normal break-words text-center", children }) })
4214
+ children: /* @__PURE__ */ jsx36(ToastVisualContext.Provider, { value: { busy, variant }, children: /* @__PURE__ */ jsx36("span", { className: "flex min-w-0 max-w-full flex-col items-center justify-center whitespace-normal break-words text-center", children }) })
4125
4215
  }
4126
4216
  );
4127
4217
  }
@@ -4142,7 +4232,7 @@ function ToastTitle({
4142
4232
  ),
4143
4233
  ...props,
4144
4234
  children: [
4145
- toastVisual?.busy ? /* @__PURE__ */ jsx35(
4235
+ toastVisual?.busy ? /* @__PURE__ */ jsx36(
4146
4236
  Spinner,
4147
4237
  {
4148
4238
  className: "shrink-0 text-current",
@@ -4150,8 +4240,8 @@ function ToastTitle({
4150
4240
  strokeWidth: 2,
4151
4241
  trackColor: "color-mix(in srgb, currentColor 28%, transparent)"
4152
4242
  }
4153
- ) : StatusIcon ? /* @__PURE__ */ jsx35(StatusIcon, { className: "size-4 shrink-0 text-current" }) : null,
4154
- /* @__PURE__ */ jsx35("span", { className: "min-w-0 break-words", children: formatToastText(children) })
4243
+ ) : StatusIcon ? /* @__PURE__ */ jsx36(StatusIcon, { className: "size-4 shrink-0 text-current" }) : null,
4244
+ /* @__PURE__ */ jsx36("span", { className: "min-w-0 break-words", children: formatToastText(children) })
4155
4245
  ]
4156
4246
  }
4157
4247
  );
@@ -4160,7 +4250,7 @@ function ToastDescription({
4160
4250
  className,
4161
4251
  ...props
4162
4252
  }) {
4163
- return /* @__PURE__ */ jsx35(
4253
+ return /* @__PURE__ */ jsx36(
4164
4254
  ToastPrimitive.Description,
4165
4255
  {
4166
4256
  "data-slot": "toast-description",
@@ -4176,7 +4266,7 @@ function ToastClose({
4176
4266
  className,
4177
4267
  ...props
4178
4268
  }) {
4179
- return /* @__PURE__ */ jsx35(
4269
+ return /* @__PURE__ */ jsx36(
4180
4270
  ToastPrimitive.Close,
4181
4271
  {
4182
4272
  "data-slot": "toast-close",
@@ -4185,7 +4275,7 @@ function ToastClose({
4185
4275
  className
4186
4276
  ),
4187
4277
  ...props,
4188
- children: /* @__PURE__ */ jsx35(CloseIcon, { className: "size-4" })
4278
+ children: /* @__PURE__ */ jsx36(CloseIcon, { className: "size-4" })
4189
4279
  }
4190
4280
  );
4191
4281
  }
@@ -4194,7 +4284,7 @@ function ToastViewport({
4194
4284
  style,
4195
4285
  ...props
4196
4286
  }) {
4197
- return /* @__PURE__ */ jsx35(
4287
+ return /* @__PURE__ */ jsx36(
4198
4288
  ToastPrimitive.Viewport,
4199
4289
  {
4200
4290
  "data-slot": "toast-viewport",
@@ -4209,8 +4299,8 @@ function ToastViewport({
4209
4299
  }
4210
4300
 
4211
4301
  // src/components/underline-tabs/underline-tabs.tsx
4212
- import { useEffect as useEffect8, useLayoutEffect as useLayoutEffect4, useRef as useRef6, useState as useState10 } from "react";
4213
- import { jsx as jsx36, jsxs as jsxs18 } from "react/jsx-runtime";
4302
+ import { useEffect as useEffect9, useLayoutEffect as useLayoutEffect4, useRef as useRef7, useState as useState11 } from "react";
4303
+ import { jsx as jsx37, jsxs as jsxs18 } from "react/jsx-runtime";
4214
4304
  function UnderlineTabs({
4215
4305
  tabs,
4216
4306
  value,
@@ -4225,11 +4315,11 @@ function UnderlineTabs({
4225
4315
  scrollRightTestId,
4226
4316
  preventMouseDownDefault = false
4227
4317
  }) {
4228
- const viewportRef = useRef6(null);
4229
- const rowRef = useRef6(null);
4230
- const buttonRefs = useRef6({});
4231
- const [indicatorStyle, setIndicatorStyle] = useState10({ left: 0, width: 0 });
4232
- const [overflow, setOverflow] = useState10({
4318
+ const viewportRef = useRef7(null);
4319
+ const rowRef = useRef7(null);
4320
+ const buttonRefs = useRef7({});
4321
+ const [indicatorStyle, setIndicatorStyle] = useState11({ left: 0, width: 0 });
4322
+ const [overflow, setOverflow] = useState11({
4233
4323
  canScrollLeft: false,
4234
4324
  canScrollRight: false
4235
4325
  });
@@ -4250,7 +4340,7 @@ function UnderlineTabs({
4250
4340
  (current) => current.left === nextStyle.left && current.width === nextStyle.width ? current : nextStyle
4251
4341
  );
4252
4342
  }, [tabs, value]);
4253
- useEffect8(() => {
4343
+ useEffect9(() => {
4254
4344
  const viewport = viewportRef.current;
4255
4345
  if (!viewport) {
4256
4346
  return;
@@ -4305,7 +4395,7 @@ function UnderlineTabs({
4305
4395
  "data-testid": testId,
4306
4396
  role: "tablist",
4307
4397
  children: [
4308
- /* @__PURE__ */ jsx36(
4398
+ /* @__PURE__ */ jsx37(
4309
4399
  "div",
4310
4400
  {
4311
4401
  ref: viewportRef,
@@ -4350,14 +4440,14 @@ function UnderlineTabs({
4350
4440
  onClick: () => onValueChange(tab.value),
4351
4441
  onMouseDown: preventMouseDownDefault ? (event) => event.preventDefault() : void 0,
4352
4442
  children: [
4353
- /* @__PURE__ */ jsx36("span", { children: tab.label }),
4354
- tab.count !== void 0 ? /* @__PURE__ */ jsx36("span", { className: "text-[11px] font-medium leading-6 text-[inherit]", children: tab.count }) : null
4443
+ /* @__PURE__ */ jsx37("span", { children: tab.label }),
4444
+ tab.count !== void 0 ? /* @__PURE__ */ jsx37("span", { className: "text-[11px] font-medium leading-6 text-[inherit]", children: tab.count }) : null
4355
4445
  ]
4356
4446
  },
4357
4447
  tab.value
4358
4448
  );
4359
4449
  }),
4360
- /* @__PURE__ */ jsx36(
4450
+ /* @__PURE__ */ jsx37(
4361
4451
  "div",
4362
4452
  {
4363
4453
  "aria-hidden": true,
@@ -4374,7 +4464,7 @@ function UnderlineTabs({
4374
4464
  )
4375
4465
  }
4376
4466
  ),
4377
- /* @__PURE__ */ jsx36(
4467
+ /* @__PURE__ */ jsx37(
4378
4468
  "button",
4379
4469
  {
4380
4470
  "aria-label": scrollLeftLabel,
@@ -4385,10 +4475,10 @@ function UnderlineTabs({
4385
4475
  disabled: !overflow.canScrollLeft,
4386
4476
  type: "button",
4387
4477
  onClick: () => scrollTabs("left"),
4388
- children: /* @__PURE__ */ jsx36(ArrowLeftIcon, { size: 16 })
4478
+ children: /* @__PURE__ */ jsx37(ArrowLeftIcon, { size: 16 })
4389
4479
  }
4390
4480
  ),
4391
- /* @__PURE__ */ jsx36(
4481
+ /* @__PURE__ */ jsx37(
4392
4482
  "button",
4393
4483
  {
4394
4484
  "aria-label": scrollRightLabel,
@@ -4399,7 +4489,7 @@ function UnderlineTabs({
4399
4489
  disabled: !overflow.canScrollRight,
4400
4490
  type: "button",
4401
4491
  onClick: () => scrollTabs("right"),
4402
- children: /* @__PURE__ */ jsx36(ArrowRightIcon, { size: 16 })
4492
+ children: /* @__PURE__ */ jsx37(ArrowRightIcon, { size: 16 })
4403
4493
  }
4404
4494
  )
4405
4495
  ]
@@ -4410,7 +4500,7 @@ function UnderlineTabs({
4410
4500
  // src/components/viewport-menu-surface/viewport-menu-surface.tsx
4411
4501
  import * as React14 from "react";
4412
4502
  import { createPortal as createPortal3 } from "react-dom";
4413
- import { jsx as jsx37 } from "react/jsx-runtime";
4503
+ import { jsx as jsx38 } from "react/jsx-runtime";
4414
4504
  var VIEWPORT_MENU_PADDING = 12;
4415
4505
  var MENU_BOUNDARY_PADDING = 8;
4416
4506
  function clampMenuCoordinate(origin, size, viewportExtent, padding) {
@@ -4680,7 +4770,7 @@ var ViewportMenuSurface = React14.forwardRef(function ViewportMenuSurface2({
4680
4770
  }
4681
4771
  const portalTarget = resolvedPlacement.portalTarget ?? document.body;
4682
4772
  return createPortal3(
4683
- /* @__PURE__ */ jsx37(
4773
+ /* @__PURE__ */ jsx38(
4684
4774
  MenuSurface,
4685
4775
  {
4686
4776
  ...rest,
@@ -4786,6 +4876,7 @@ export {
4786
4876
  DropdownMenuSub,
4787
4877
  DropdownMenuSubTrigger,
4788
4878
  DropdownMenuSubContent,
4879
+ ImageWithFallback,
4789
4880
  TooltipProvider,
4790
4881
  Tooltip,
4791
4882
  TooltipTrigger,
@@ -4842,4 +4933,4 @@ export {
4842
4933
  UnderlineTabs,
4843
4934
  ViewportMenuSurface
4844
4935
  };
4845
- //# sourceMappingURL=chunk-Q3PM56DM.js.map
4936
+ //# sourceMappingURL=chunk-V2BIMM2U.js.map