@ohif/app 3.13.0-beta.51 → 3.13.0-beta.53

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 (34) hide show
  1. package/dist/{147.bundle.3c8fa1f478644636898a.js → 147.bundle.173b4a11960d03a3b5b0.js} +2 -2
  2. package/dist/{1608.bundle.c10d9aef452fe5a86d77.js → 1608.bundle.e4aadbf17d38143dacdf.js} +2 -2
  3. package/dist/{1933.bundle.d1c853d4459eabcac0fc.js → 1933.bundle.68ab0d4f329f6438520f.js} +5 -5
  4. package/dist/{2701.bundle.28b3ca0e6ae5a13f78b3.js → 2701.bundle.b591cf6385ed53ed6093.js} +2 -2
  5. package/dist/{3138.bundle.5594231be4399fa822f2.js → 3138.bundle.2da3ce5b42ce97e92fac.js} +2 -2
  6. package/dist/{3461.bundle.c453ad511e18741f5b36.js → 3461.bundle.75e15ea13e39c5d80e62.js} +3 -3
  7. package/dist/{4202.bundle.f11f02596e30a22d1105.js → 4202.bundle.850a7c7c011800b3daea.js} +1 -1
  8. package/dist/{4688.bundle.05c4c23606587b3e82bd.js → 4688.bundle.6797ff151db0973c8e3b.js} +9 -9
  9. package/dist/{4819.bundle.b29eaf88762b95912d1d.js → 4819.bundle.b184a0f0c159ce8f1f8d.js} +4 -4
  10. package/dist/{5015.bundle.322992b6dcb647ecf70e.js → 5015.bundle.21b2a904762fa1690648.js} +2 -2
  11. package/dist/{5802.bundle.8b2c04396d68ba668af5.js → 5802.bundle.addd0259c8f9d0a18244.js} +2 -2
  12. package/dist/{8305.bundle.accd9d9b56fd08402c9e.js → 8305.bundle.bf9c862af030865ea106.js} +5 -5
  13. package/dist/{8558.bundle.c778f722abdb0a66bc34.js → 8558.bundle.6ec562e3d201780f1444.js} +4 -4
  14. package/dist/{8583.bundle.243229c3ff277630ddb8.js → 8583.bundle.422aa3bbdde39826560a.js} +2 -2
  15. package/dist/{9195.bundle.95ca6983f6a87e433d79.js → 9195.bundle.3578183b4f9e9baf11b2.js} +9 -9
  16. package/dist/{9845.bundle.36b3563ae1dba65b6b9a.js → 9845.bundle.267831496ba080d9f8da.js} +2 -2
  17. package/dist/{9862.bundle.51a1e7030f6b635d9528.js → 9862.bundle.09783830f0cb75a84d2a.js} +1 -1
  18. package/dist/{app.bundle.f5b1d8747965f98a72a8.js → app.bundle.c04905256ae115737ab1.js} +746 -46
  19. package/dist/index.html +1 -1
  20. package/dist/sw.js +1 -1
  21. package/package.json +20 -20
  22. /package/dist/{1459.bundle.03f6812bbebed223ac0a.js → 1459.bundle.1578fc874558784d3a2a.js} +0 -0
  23. /package/dist/{2018.bundle.df77dcb95a7eb7194752.js → 2018.bundle.815cdd7ef9d4c3edc816.js} +0 -0
  24. /package/dist/{213.bundle.4f2dc5a26c4bdfea9038.js → 213.bundle.7ea13f79d28e6b79d0dc.js} +0 -0
  25. /package/dist/{2424.bundle.225f1b88d037ff1e8d2b.js → 2424.bundle.c562d715a07cc15002ea.js} +0 -0
  26. /package/dist/{4507.bundle.152cf927b86b6e295b7f.js → 4507.bundle.697a334d7d3686b4f9a3.js} +0 -0
  27. /package/dist/{5028.bundle.d5e5ec2e2fae9a8c0dfa.js → 5028.bundle.b1060271494c162341c1.js} +0 -0
  28. /package/dist/{5457.bundle.bd64924038b08fa7154b.js → 5457.bundle.b9bd5c411e8db274a88f.js} +0 -0
  29. /package/dist/{5485.bundle.538097cf423423cc9cae.js → 5485.bundle.541c61d8e24cb145cb94.js} +0 -0
  30. /package/dist/{6027.bundle.f36aa36a2281dff6e29b.js → 6027.bundle.e1d958d21d152f917461.js} +0 -0
  31. /package/dist/{7639.bundle.f89778f572ee3caeb6fb.js → 7639.bundle.3518e5907ec688a4aa04.js} +0 -0
  32. /package/dist/{8499.bundle.26a487dbfa7be0837750.js → 8499.bundle.fd282ff4fe499abdd01f.js} +0 -0
  33. /package/dist/{85.bundle.85120dcfbb03af4fa5a7.js → 85.bundle.be3de438b31fcd0bdf98.js} +0 -0
  34. /package/dist/{9927.bundle.fa13d8f3b034e48c00d3.js → 9927.bundle.481f2fefa9787af307c0.js} +0 -0
@@ -80732,7 +80732,7 @@ const detectionOptions = {
80732
80732
  }
80733
80733
  });
80734
80734
  ;// ../../i18n/package.json
80735
- const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.13.0-beta.50"}');
80735
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.13.0-beta.52"}');
80736
80736
  ;// ../../i18n/src/utils.js
80737
80737
  const languagesMap = {
80738
80738
  ar: 'Arabic',
@@ -82101,7 +82101,7 @@ i18next/* default */.A.currentLanguage = () => ({
82101
82101
 
82102
82102
  /***/ },
82103
82103
 
82104
- /***/ 2343
82104
+ /***/ 15953
82105
82105
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
82106
82106
 
82107
82107
  "use strict";
@@ -82228,7 +82228,7 @@ __webpack_require__.d(__webpack_exports__, {
82228
82228
  WpD: () => (/* reexport */ src_utils_namespaceObject)
82229
82229
  });
82230
82230
 
82231
- // UNUSED EXPORTS: BackItem, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DisplaySetMessageListTooltip, DividerItem, DoubleSlider, DropdownMenuCheckboxItem, DropdownMenuGroup, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuShortcut, HeaderItem, HorizontalDirection, IconMenu, ImageViewerContext, InputNumber, Item, ItemPanel, Menu, PanelSelector, PatientInfo, ScrollBar, StudyBrowserSort, StudyBrowserViewOptions, StudyItem, SubMenu, Thumbnail, ThumbnailList, Toaster, Toggle, ToolboxUI, Types, VerticalDirection, ViewportActionBar, ViewportActionCornersLocations, ViewportGridContext, WindowLevelHistogram, buttonVariants, toggleVariants, useDialog, useDynamicMaxHeight, useNotification, useSegmentStatistics
82231
+ // UNUSED EXPORTS: BackItem, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DisplaySetMessageListTooltip, DividerItem, DoubleSlider, DropdownMenuCheckboxItem, DropdownMenuGroup, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuShortcut, HeaderItem, HorizontalDirection, IconMenu, ImageViewerContext, InputNumber, Item, ItemPanel, Menu, PanelSelector, PatientInfo, ScrollBar, SmartScrollbar, SmartScrollbarEndpoints, SmartScrollbarFill, SmartScrollbarIndicator, SmartScrollbarTrack, StudyBrowserSort, StudyBrowserViewOptions, StudyItem, SubMenu, Thumbnail, ThumbnailList, Toaster, Toggle, ToolboxUI, Types, VerticalDirection, ViewportActionBar, ViewportActionCornersLocations, ViewportGridContext, WindowLevelHistogram, buttonVariants, toggleVariants, useByteArray, useDialog, useDynamicMaxHeight, useNotification, useSegmentStatistics, useSmartScrollbarLayoutContext, useSmartScrollbarScrollContext
82232
82232
 
82233
82233
  // NAMESPACE OBJECT: ../../ui-next/src/utils/index.ts
82234
82234
  var src_utils_namespaceObject = {};
@@ -85143,6 +85143,710 @@ Button.displayName = 'Button';
85143
85143
 
85144
85144
  ;// ../../ui-next/src/components/Button/index.ts
85145
85145
 
85146
+ ;// ../../ui-next/src/components/SmartScrollbar/utils.ts
85147
+ /**
85148
+ * Given a Uint8Array where each non-zero byte represents a set position,
85149
+ * returns contiguous runs in a single O(n) pass. No sorting or heap
85150
+ * allocations inside the loop.
85151
+ */
85152
+ function computeContiguousRuns(bytes) {
85153
+ const runs = [];
85154
+ const n = bytes.length;
85155
+ let i = 0;
85156
+ while (i < n) {
85157
+ while (i < n && bytes[i] === 0) i++;
85158
+ if (i >= n) break;
85159
+ const start = i;
85160
+ while (i < n && bytes[i] !== 0) i++;
85161
+ runs.push({
85162
+ start,
85163
+ length: i - start
85164
+ });
85165
+ }
85166
+ return runs;
85167
+ }
85168
+
85169
+ /**
85170
+ * Convert marked items (0/1 bytes) into a per-pixel fill mask (0/1 bytes).
85171
+ * The result is conservative in the sense that a pixel row is filled only when
85172
+ * its mapped items are all marked, so the fill never overstates coverage.
85173
+ *
85174
+ * - If `total >= pixelCount`: each pixel row maps to a disjoint item-index
85175
+ * range; a pixel row is filled only if all items in that range are marked.
85176
+ * - If `pixelCount > total`: each item spans multiple pixel rows; if the item
85177
+ * is marked, its entire pixel span is filled.
85178
+ */
85179
+ function computePixelFilledFromMarked(marked, pixelCount) {
85180
+ const total = marked.length;
85181
+ const count = Math.max(0, Math.floor(pixelCount));
85182
+ if (count === 0 || total <= 0) return new Uint8Array(0);
85183
+ const pixelFilled = new Uint8Array(count);
85184
+ if (total >= count) {
85185
+ for (let pixelIndex = 0; pixelIndex < count; pixelIndex++) {
85186
+ const start = Math.floor(pixelIndex * total / count);
85187
+ const end = Math.floor((pixelIndex + 1) * total / count);
85188
+ if (end <= start) continue;
85189
+ let filled = 1;
85190
+ for (let itemIndex = start; itemIndex < end; itemIndex++) {
85191
+ if (marked[itemIndex] === 0) {
85192
+ filled = 0;
85193
+ break;
85194
+ }
85195
+ }
85196
+ pixelFilled[pixelIndex] = filled;
85197
+ }
85198
+ } else {
85199
+ for (let itemIndex = 0; itemIndex < total; itemIndex++) {
85200
+ if (marked[itemIndex] === 0) continue;
85201
+ const topPx = Math.floor(itemIndex * count / total);
85202
+ const bottomPx = Math.floor((itemIndex + 1) * count / total);
85203
+ for (let pixel = topPx; pixel < bottomPx; pixel++) {
85204
+ pixelFilled[pixel] = 1;
85205
+ }
85206
+ }
85207
+ }
85208
+ return pixelFilled;
85209
+ }
85210
+
85211
+ /**
85212
+ * Compute the indicator's total visual dimensions and horizontal position.
85213
+ * Design 27: pill shape, center position, 1px border.
85214
+ */
85215
+ function getIndicatorLayout(trackWidth, indicatorSize, borderWidth) {
85216
+ const visualSize = indicatorSize * 1.25;
85217
+ const fillWidth = visualSize;
85218
+ const fillHeight = Math.round(visualSize / 2); // pill = half height
85219
+ const totalWidth = fillWidth + borderWidth * 2;
85220
+ const totalHeight = fillHeight + borderWidth * 2;
85221
+ const centerX = trackWidth / 2;
85222
+ const leftPos = centerX - totalWidth / 2;
85223
+ return {
85224
+ totalWidth,
85225
+ totalHeight,
85226
+ fillWidth,
85227
+ fillHeight,
85228
+ leftPos
85229
+ };
85230
+ }
85231
+ ;// ../../ui-next/src/components/SmartScrollbar/SmartScrollbarIndicator.tsx
85232
+ /* unused harmony import specifier */ var React;
85233
+ /* unused harmony import specifier */ var useSmartScrollbarLayoutContext;
85234
+ /* unused harmony import specifier */ var useSmartScrollbarScrollContext;
85235
+ /* unused harmony import specifier */ var SmartScrollbarIndicator_getIndicatorLayout;
85236
+
85237
+
85238
+
85239
+
85240
+ // ── Indicator dimensions and colors ─────────────────────────────
85241
+ const INDICATOR_SIZE = 8;
85242
+ const BORDER_WIDTH = 1;
85243
+ const INDICATOR_COLOR = 'hsl(var(--foreground) / 0.9)';
85244
+ const BORDER_COLOR = 'hsl(var(--neutral) / 0.9)';
85245
+ function SmartScrollbarIndicator({
85246
+ className
85247
+ }) {
85248
+ const {
85249
+ total,
85250
+ trackHeight,
85251
+ effectiveWidth,
85252
+ fillPadding
85253
+ } = useSmartScrollbarLayoutContext();
85254
+ const value = useSmartScrollbarScrollContext();
85255
+ if (trackHeight === 0 || total <= 1) return null;
85256
+ const {
85257
+ totalWidth,
85258
+ totalHeight,
85259
+ fillWidth,
85260
+ fillHeight,
85261
+ leftPos
85262
+ } = SmartScrollbarIndicator_getIndicatorLayout(effectiveWidth, INDICATOR_SIZE, BORDER_WIDTH);
85263
+ const offsetY = (totalHeight - INDICATOR_SIZE) / 2;
85264
+ const fillAreaTop = fillPadding;
85265
+ const pixelCount = Math.max(0, Math.floor(trackHeight - fillPadding * 2));
85266
+ if (pixelCount === 0) return null;
85267
+
85268
+ // Align the indicator with the item’s pixel bucket(s) so it sits “over” the
85269
+ // same pixel-space mapping used by fill/endpoints.
85270
+ const clampedValue = Math.max(0, Math.min(total - 1, value));
85271
+ const itemStartPx = Math.floor(clampedValue * pixelCount / total);
85272
+ const maxTopInFill = Math.max(0, pixelCount - INDICATOR_SIZE);
85273
+ const topInFill = Math.max(0, Math.min(maxTopInFill, itemStartPx));
85274
+ const y = fillAreaTop + topInFill;
85275
+ return /*#__PURE__*/React.createElement("div", {
85276
+ className: `pointer-events-none absolute ${className ?? ''}`,
85277
+ style: {
85278
+ left: leftPos,
85279
+ top: y - offsetY,
85280
+ width: totalWidth,
85281
+ height: totalHeight,
85282
+ transition: 'left 300ms ease, opacity 300ms ease'
85283
+ }
85284
+ }, /*#__PURE__*/React.createElement("svg", {
85285
+ width: totalWidth,
85286
+ height: totalHeight,
85287
+ viewBox: `0 0 ${totalWidth} ${totalHeight}`
85288
+ }, /*#__PURE__*/React.createElement("rect", {
85289
+ x: 0,
85290
+ y: 0,
85291
+ width: totalWidth,
85292
+ height: totalHeight,
85293
+ rx: totalHeight / 2,
85294
+ ry: totalHeight / 2,
85295
+ fill: BORDER_COLOR
85296
+ }), /*#__PURE__*/React.createElement("rect", {
85297
+ x: BORDER_WIDTH,
85298
+ y: BORDER_WIDTH,
85299
+ width: fillWidth,
85300
+ height: fillHeight,
85301
+ rx: fillHeight / 2,
85302
+ ry: fillHeight / 2,
85303
+ fill: INDICATOR_COLOR
85304
+ })));
85305
+ }
85306
+ ;// ../../ui-next/src/components/SmartScrollbar/SmartScrollbar.tsx
85307
+ /* unused harmony import specifier */ var Children;
85308
+ /* unused harmony import specifier */ var isValidElement;
85309
+ /* unused harmony import specifier */ var createContext;
85310
+ /* unused harmony import specifier */ var useContext;
85311
+ /* unused harmony import specifier */ var useRef;
85312
+ /* unused harmony import specifier */ var useState;
85313
+ /* unused harmony import specifier */ var useEffect;
85314
+ /* unused harmony import specifier */ var useCallback;
85315
+ /* unused harmony import specifier */ var useMemo;
85316
+ /* unused harmony import specifier */ var SmartScrollbar_React;
85317
+ /* unused harmony import specifier */ var SmartScrollbar_getIndicatorLayout;
85318
+ /* unused harmony import specifier */ var SmartScrollbar_SmartScrollbarIndicator;
85319
+
85320
+
85321
+
85322
+
85323
+ // ── Child validation ────────────────────────────────────────────
85324
+ function validateChildren(children) {
85325
+ let hasIndicator = false;
85326
+ Children.forEach(children, child => {
85327
+ if (! /*#__PURE__*/isValidElement(child)) return;
85328
+ if (child.type === SmartScrollbar_SmartScrollbarIndicator) hasIndicator = true;
85329
+ });
85330
+ if (!hasIndicator) {
85331
+ throw new Error('SmartScrollbar: <SmartScrollbarIndicator> is a required child. ' + 'Users will not see their current scroll position without it.');
85332
+ }
85333
+ }
85334
+
85335
+ // ── Layout and timing constants ─────────────────────────────────
85336
+ const TRACK_WIDTH = 8;
85337
+ const RESTING_WIDTH = 4;
85338
+ const FILL_PADDING = 3;
85339
+ const SmartScrollbar_INDICATOR_SIZE = 8;
85340
+ const INDICATOR_BORDER_WIDTH = 1;
85341
+ const SETTLE_DELAY = 600;
85342
+
85343
+ // ── Contexts ───────────────────────────────────────────────────
85344
+
85345
+ const SmartScrollbarLayoutContext = /*#__PURE__*/(/* unused pure expression or super */ null && (createContext(null)));
85346
+ const SmartScrollbarScrollContext = /*#__PURE__*/(/* unused pure expression or super */ null && (createContext(null)));
85347
+ function SmartScrollbar_useSmartScrollbarLayoutContext() {
85348
+ const ctx = useContext(SmartScrollbarLayoutContext);
85349
+ if (!ctx) throw new Error('SmartScrollbar compound components must be used inside <SmartScrollbar>');
85350
+ return ctx;
85351
+ }
85352
+ function SmartScrollbar_useSmartScrollbarScrollContext() {
85353
+ const value = useContext(SmartScrollbarScrollContext);
85354
+ if (value === null) throw new Error('SmartScrollbar compound components must be used inside <SmartScrollbar>');
85355
+ return value;
85356
+ }
85357
+
85358
+ // ── Props ──────────────────────────────────────────────────────
85359
+
85360
+ // ── Component ──────────────────────────────────────────────────
85361
+ function SmartScrollbar({
85362
+ value,
85363
+ total,
85364
+ onValueChange,
85365
+ isLoading = false,
85366
+ enableKeyboardNavigation = false,
85367
+ 'aria-label': ariaLabel = 'Scroll position',
85368
+ className,
85369
+ children
85370
+ }) {
85371
+ validateChildren(children);
85372
+
85373
+ // ── ResizeObserver for trackHeight ───────────────────────────
85374
+ const containerRef = useRef(null);
85375
+ const [trackHeight, setTrackHeight] = useState(0);
85376
+ useEffect(() => {
85377
+ const el = containerRef.current;
85378
+ if (!el) return;
85379
+ const ro = new ResizeObserver(([entry]) => {
85380
+ setTrackHeight(entry.contentRect.height);
85381
+ });
85382
+ ro.observe(el);
85383
+ return () => ro.disconnect();
85384
+ }, []);
85385
+
85386
+ // ── Contraction state ────────────────────────────────────────
85387
+ const [isHovered, setIsHovered] = useState(false);
85388
+ const [isDragging, setIsDragging] = useState(false);
85389
+ const isDraggingRef = useRef(false);
85390
+ const trackTopRef = useRef(0);
85391
+
85392
+ // Settle delay — only contract after a real loading→done transition
85393
+ const [hasSettled, setHasSettled] = useState(false);
85394
+ const wasEverLoading = useRef(false);
85395
+ useEffect(() => {
85396
+ if (isLoading) {
85397
+ wasEverLoading.current = true;
85398
+ setHasSettled(false);
85399
+ } else if (wasEverLoading.current) {
85400
+ const timer = setTimeout(() => setHasSettled(true), SETTLE_DELAY);
85401
+ return () => clearTimeout(timer);
85402
+ }
85403
+ }, [isLoading]);
85404
+ const isExpanded = !hasSettled || isHovered || isDragging;
85405
+ const effectiveWidth = isExpanded ? TRACK_WIDTH : RESTING_WIDTH;
85406
+
85407
+ // ── Hit zone extension ───────────────────────────────────────
85408
+ const {
85409
+ leftPos
85410
+ } = SmartScrollbar_getIndicatorLayout(TRACK_WIDTH, SmartScrollbar_INDICATOR_SIZE, INDICATOR_BORDER_WIDTH);
85411
+ const hitZoneLeftExtension = Math.max(0, -leftPos);
85412
+
85413
+ // ── Stable layer (for elements that shouldn't move during contraction) ──
85414
+ // Uses useState + callback ref so React triggers a re-render when the
85415
+ // DOM node mounts — ensuring endpoints render on the first valid pass.
85416
+ const [stableLayerEl, setStableLayerEl] = useState(null);
85417
+
85418
+ // ── Pointer helpers ──────────────────────────────────────────
85419
+ const clamp = useCallback(val => Math.max(0, Math.min(total - 1, val)), [total]);
85420
+ const indexFromPointerY = useCallback(clientY => {
85421
+ const ratio = Math.max(0, Math.min(1, (clientY - trackTopRef.current) / trackHeight));
85422
+ return Math.round(ratio * (total - 1));
85423
+ }, [trackHeight, total]);
85424
+ const handlePointerDown = useCallback(e => {
85425
+ trackTopRef.current = e.currentTarget.getBoundingClientRect().top;
85426
+ isDraggingRef.current = true;
85427
+ setIsDragging(true);
85428
+ e.currentTarget.setPointerCapture(e.pointerId);
85429
+ onValueChange(clamp(indexFromPointerY(e.clientY)));
85430
+ }, [clamp, indexFromPointerY, onValueChange]);
85431
+ const handlePointerMove = useCallback(e => {
85432
+ if (!isDraggingRef.current) return;
85433
+ onValueChange(clamp(indexFromPointerY(e.clientY)));
85434
+ }, [clamp, indexFromPointerY, onValueChange]);
85435
+ const handlePointerUp = useCallback(e => {
85436
+ isDraggingRef.current = false;
85437
+ setIsDragging(false);
85438
+ e.currentTarget.releasePointerCapture(e.pointerId);
85439
+ }, []);
85440
+
85441
+ // ── Keyboard interaction (WAI-ARIA slider spec) ────────────
85442
+ const PAGE_STEP = 10;
85443
+ const handleKeyDown = useCallback(e => {
85444
+ let next = null;
85445
+ switch (e.key) {
85446
+ case 'ArrowUp':
85447
+ case 'ArrowLeft':
85448
+ next = value - 1;
85449
+ break;
85450
+ case 'ArrowDown':
85451
+ case 'ArrowRight':
85452
+ next = value + 1;
85453
+ break;
85454
+ case 'PageUp':
85455
+ next = value - PAGE_STEP;
85456
+ break;
85457
+ case 'PageDown':
85458
+ next = value + PAGE_STEP;
85459
+ break;
85460
+ case 'Home':
85461
+ next = 0;
85462
+ break;
85463
+ case 'End':
85464
+ next = total - 1;
85465
+ break;
85466
+ default:
85467
+ return;
85468
+ }
85469
+ e.preventDefault();
85470
+ onValueChange(clamp(next));
85471
+ }, [value, total, clamp, onValueChange]);
85472
+
85473
+ // ── Context values ───────────────────────────────────────────
85474
+ const layoutCtx = useMemo(() => ({
85475
+ total,
85476
+ trackHeight,
85477
+ isLoading,
85478
+ effectiveWidth,
85479
+ trackWidth: TRACK_WIDTH,
85480
+ fillPadding: FILL_PADDING,
85481
+ stableLayerEl
85482
+ }), [total, trackHeight, isLoading, effectiveWidth, stableLayerEl]);
85483
+ return /*#__PURE__*/SmartScrollbar_React.createElement(SmartScrollbarLayoutContext.Provider, {
85484
+ value: layoutCtx
85485
+ }, /*#__PURE__*/SmartScrollbar_React.createElement(SmartScrollbarScrollContext.Provider, {
85486
+ value: value
85487
+ }, /*#__PURE__*/SmartScrollbar_React.createElement("div", {
85488
+ ref: containerRef,
85489
+ role: "slider",
85490
+ "aria-valuenow": value,
85491
+ "aria-valuemin": 0,
85492
+ "aria-valuemax": total - 1,
85493
+ "aria-orientation": "vertical",
85494
+ "aria-label": ariaLabel,
85495
+ tabIndex: 0,
85496
+ className: className,
85497
+ style: {
85498
+ width: TRACK_WIDTH + hitZoneLeftExtension,
85499
+ height: '100%',
85500
+ position: 'relative',
85501
+ marginLeft: -hitZoneLeftExtension,
85502
+ cursor: isDragging ? 'grabbing' : 'grab',
85503
+ touchAction: 'none'
85504
+ },
85505
+ onPointerEnter: () => setIsHovered(true),
85506
+ onPointerLeave: () => setIsHovered(false),
85507
+ onPointerDown: handlePointerDown,
85508
+ onPointerMove: handlePointerMove,
85509
+ onPointerUp: handlePointerUp,
85510
+ onPointerCancel: handlePointerUp,
85511
+ onKeyDown: enableKeyboardNavigation ? handleKeyDown : undefined
85512
+ }, trackHeight > 0 && /*#__PURE__*/SmartScrollbar_React.createElement("div", {
85513
+ style: {
85514
+ position: 'absolute',
85515
+ right: 0,
85516
+ top: 0,
85517
+ width: TRACK_WIDTH,
85518
+ height: trackHeight,
85519
+ display: 'flex',
85520
+ justifyContent: 'center'
85521
+ }
85522
+ }, /*#__PURE__*/SmartScrollbar_React.createElement("div", {
85523
+ className: "relative",
85524
+ style: {
85525
+ width: effectiveWidth,
85526
+ height: trackHeight,
85527
+ transition: 'width 300ms ease'
85528
+ }
85529
+ }, children), /*#__PURE__*/SmartScrollbar_React.createElement("div", {
85530
+ ref: setStableLayerEl,
85531
+ style: {
85532
+ position: 'absolute',
85533
+ inset: 0,
85534
+ pointerEvents: 'none'
85535
+ }
85536
+ })))));
85537
+ }
85538
+ ;// ../../ui-next/src/components/SmartScrollbar/SmartScrollbarTrack.tsx
85539
+ /* unused harmony import specifier */ var SmartScrollbarTrack_React;
85540
+ /* unused harmony import specifier */ var useId;
85541
+ /* unused harmony import specifier */ var SmartScrollbarTrack_useState;
85542
+ /* unused harmony import specifier */ var SmartScrollbarTrack_useEffect;
85543
+ /* unused harmony import specifier */ var SmartScrollbarTrack_useSmartScrollbarLayoutContext;
85544
+
85545
+
85546
+
85547
+ // ── Dot-grid pattern constants ──────────────────────────────────
85548
+ const DOT_SIZE = 2;
85549
+ const DOT_GAP = 4;
85550
+ const DOT_STEP = DOT_SIZE + DOT_GAP; // 6px
85551
+ const DOT_RADIUS = DOT_SIZE / 2;
85552
+ const FADE_DURATION_MS = 500;
85553
+ function DotGrid({
85554
+ w,
85555
+ h,
85556
+ patternId
85557
+ }) {
85558
+ const dotColor = `hsl(var(--neutral) / 0.5)`;
85559
+ return /*#__PURE__*/SmartScrollbarTrack_React.createElement("svg", {
85560
+ width: w,
85561
+ height: h,
85562
+ className: "absolute inset-0"
85563
+ }, /*#__PURE__*/SmartScrollbarTrack_React.createElement("defs", null, /*#__PURE__*/SmartScrollbarTrack_React.createElement("pattern", {
85564
+ id: patternId,
85565
+ width: DOT_STEP,
85566
+ height: DOT_STEP,
85567
+ patternUnits: "userSpaceOnUse"
85568
+ }, /*#__PURE__*/SmartScrollbarTrack_React.createElement("circle", {
85569
+ cx: DOT_RADIUS,
85570
+ cy: DOT_RADIUS,
85571
+ r: DOT_RADIUS,
85572
+ fill: dotColor
85573
+ })), /*#__PURE__*/SmartScrollbarTrack_React.createElement("clipPath", {
85574
+ id: `${patternId}-clip`
85575
+ }, /*#__PURE__*/SmartScrollbarTrack_React.createElement("rect", {
85576
+ x: 0,
85577
+ y: 0,
85578
+ width: w,
85579
+ height: h
85580
+ }))), /*#__PURE__*/SmartScrollbarTrack_React.createElement("rect", {
85581
+ x: 0,
85582
+ y: 0,
85583
+ width: w,
85584
+ height: h,
85585
+ fill: `url(#${patternId})`,
85586
+ clipPath: `url(#${patternId}-clip)`
85587
+ }));
85588
+ }
85589
+ const SmartScrollbarTrack = /*#__PURE__*/(/* unused pure expression or super */ null && (SmartScrollbarTrack_React.memo(function SmartScrollbarTrack({
85590
+ className,
85591
+ children
85592
+ }) {
85593
+ const {
85594
+ trackHeight,
85595
+ effectiveWidth,
85596
+ isLoading
85597
+ } = SmartScrollbarTrack_useSmartScrollbarLayoutContext();
85598
+ const patternId = useId();
85599
+
85600
+ // Keep the dot grid mounted long enough to fade out, then unmount entirely.
85601
+ const [dotGridMounted, setDotGridMounted] = SmartScrollbarTrack_useState(isLoading);
85602
+ SmartScrollbarTrack_useEffect(() => {
85603
+ if (isLoading) {
85604
+ setDotGridMounted(true);
85605
+ return;
85606
+ }
85607
+ const t = setTimeout(() => setDotGridMounted(false), FADE_DURATION_MS);
85608
+ return () => clearTimeout(t);
85609
+ }, [isLoading]);
85610
+ if (trackHeight === 0) return null;
85611
+ const w = effectiveWidth;
85612
+ const h = trackHeight;
85613
+ return /*#__PURE__*/SmartScrollbarTrack_React.createElement("div", {
85614
+ className: `absolute inset-0 ${className ?? ''}`
85615
+ }, dotGridMounted && /*#__PURE__*/SmartScrollbarTrack_React.createElement("div", {
85616
+ className: "absolute inset-0",
85617
+ style: {
85618
+ width: w,
85619
+ height: h,
85620
+ opacity: isLoading ? 1 : 0,
85621
+ transition: `opacity ${FADE_DURATION_MS}ms ease`
85622
+ }
85623
+ }, /*#__PURE__*/SmartScrollbarTrack_React.createElement(DotGrid, {
85624
+ w: w,
85625
+ h: h,
85626
+ patternId: patternId
85627
+ })), children);
85628
+ })));
85629
+ ;// ../../ui-next/src/components/SmartScrollbar/SmartScrollbarFill.tsx
85630
+ /* unused harmony import specifier */ var SmartScrollbarFill_React;
85631
+ /* unused harmony import specifier */ var SmartScrollbarFill_useMemo;
85632
+ /* unused harmony import specifier */ var SmartScrollbarFill_useSmartScrollbarLayoutContext;
85633
+ /* unused harmony import specifier */ var SmartScrollbarFill_computePixelFilledFromMarked;
85634
+ /* unused harmony import specifier */ var SmartScrollbarFill_computeContiguousRuns;
85635
+
85636
+
85637
+
85638
+ const SmartScrollbarFill = /*#__PURE__*/(/* unused pure expression or super */ null && (SmartScrollbarFill_React.memo(function SmartScrollbarFill({
85639
+ marked,
85640
+ version,
85641
+ className,
85642
+ loadingClassName
85643
+ }) {
85644
+ const {
85645
+ trackHeight,
85646
+ effectiveWidth,
85647
+ fillPadding,
85648
+ isLoading
85649
+ } = SmartScrollbarFill_useSmartScrollbarLayoutContext();
85650
+ const runs = SmartScrollbarFill_useMemo(() => {
85651
+ // Render fill in pixel space so the fill never overstates coverage when
85652
+ // many indices map into a single pixel row (subpixel heights).
85653
+ const pixelCount = Math.max(0, Math.floor(trackHeight - fillPadding * 2));
85654
+ const pixelFilled = SmartScrollbarFill_computePixelFilledFromMarked(marked, pixelCount);
85655
+ return SmartScrollbarFill_computeContiguousRuns(pixelFilled);
85656
+ }, [marked, version, trackHeight, fillPadding]);
85657
+ if (runs.length === 0 || trackHeight === 0) return null;
85658
+ const fillAreaTop = fillPadding;
85659
+ const activeClass = isLoading && loadingClassName ? loadingClassName : className;
85660
+ return /*#__PURE__*/SmartScrollbarFill_React.createElement(SmartScrollbarFill_React.Fragment, null, runs.map((run, index) => {
85661
+ const top = fillAreaTop + run.start;
85662
+ const height = run.length;
85663
+ return /*#__PURE__*/SmartScrollbarFill_React.createElement("div", {
85664
+ key: index,
85665
+ className: `absolute ${activeClass ?? ''}`,
85666
+ style: {
85667
+ left: 0,
85668
+ top,
85669
+ width: effectiveWidth,
85670
+ height,
85671
+ transition: 'width 300ms ease, left 300ms ease'
85672
+ }
85673
+ });
85674
+ }));
85675
+ })));
85676
+ // EXTERNAL MODULE: ../../../node_modules/react-dom/index.js
85677
+ var react_dom = __webpack_require__(35623);
85678
+ ;// ../../ui-next/src/components/SmartScrollbar/SmartScrollbarEndpoints.tsx
85679
+ /* unused harmony import specifier */ var SmartScrollbarEndpoints_React;
85680
+ /* unused harmony import specifier */ var createPortal;
85681
+ /* unused harmony import specifier */ var SmartScrollbarEndpoints_useSmartScrollbarLayoutContext;
85682
+ /* unused harmony import specifier */ var SmartScrollbarEndpoints_computePixelFilledFromMarked;
85683
+
85684
+
85685
+
85686
+
85687
+
85688
+ // ── Endpoint cap dimensions and color ───────────────────────────
85689
+ const CAP_SIZE = 4;
85690
+ const CAP_HEIGHT = CAP_SIZE / 2 + 1; // 3
85691
+ const CAP_COLOR = 'hsl(var(--neutral) / 1.0)';
85692
+ const SmartScrollbarEndpoints = /*#__PURE__*/(/* unused pure expression or super */ null && (SmartScrollbarEndpoints_React.memo(function SmartScrollbarEndpoints({
85693
+ marked,
85694
+ // `marked` is mutated in-place (stable reference). We accept `version` only to
85695
+ // invalidate React.memo and force a re-render when the bytes change. The
85696
+ // leading underscore indicates the value is intentionally unused in this component.
85697
+ version: _version,
85698
+ className
85699
+ }) {
85700
+ const {
85701
+ trackHeight,
85702
+ trackWidth,
85703
+ fillPadding,
85704
+ stableLayerEl
85705
+ } = SmartScrollbarEndpoints_useSmartScrollbarLayoutContext();
85706
+ const fillAreaTop = fillPadding;
85707
+ const pixelCount = Math.max(0, Math.floor(trackHeight - fillPadding * 2));
85708
+ if (pixelCount === 0) return null;
85709
+ const pixelFilled = SmartScrollbarEndpoints_computePixelFilledFromMarked(marked, pixelCount);
85710
+
85711
+ // Scan for the first and last filled pixel row in O(n) so endpoints align
85712
+ // exactly with the fill rendering in pixel space.
85713
+ let firstFilledPixel = -1;
85714
+ let lastFilledPixel = -1;
85715
+ for (let pixel = 0; pixel < pixelFilled.length; pixel++) {
85716
+ if (pixelFilled[pixel]) {
85717
+ firstFilledPixel = pixel;
85718
+ break;
85719
+ }
85720
+ }
85721
+ for (let pixel = pixelFilled.length - 1; pixel >= 0; pixel--) {
85722
+ if (pixelFilled[pixel]) {
85723
+ lastFilledPixel = pixel;
85724
+ break;
85725
+ }
85726
+ }
85727
+ if (firstFilledPixel === -1 || trackHeight === 0 || !stableLayerEl) return null;
85728
+
85729
+ // Use trackWidth (always 8px) not effectiveWidth — endpoints must stay
85730
+ // stationary during contraction/expansion transitions.
85731
+ const cx = trackWidth / 2;
85732
+ const halfCap = CAP_SIZE / 2;
85733
+ const topEdge = fillAreaTop + firstFilledPixel;
85734
+ const bottomEdge = fillAreaTop + (lastFilledPixel + 1);
85735
+
85736
+ // Portal into the stable layer so position isn't affected by the
85737
+ // contracting track div's width transition.
85738
+ return /*#__PURE__*/createPortal(/*#__PURE__*/SmartScrollbarEndpoints_React.createElement("svg", {
85739
+ width: trackWidth,
85740
+ height: trackHeight,
85741
+ className: `pointer-events-none absolute inset-0 ${className ?? ''}`
85742
+ }, /*#__PURE__*/SmartScrollbarEndpoints_React.createElement("rect", {
85743
+ x: cx - halfCap,
85744
+ y: topEdge - CAP_HEIGHT,
85745
+ width: CAP_SIZE,
85746
+ height: CAP_HEIGHT,
85747
+ fill: CAP_COLOR
85748
+ }), /*#__PURE__*/SmartScrollbarEndpoints_React.createElement("rect", {
85749
+ x: cx - halfCap,
85750
+ y: bottomEdge,
85751
+ width: CAP_SIZE,
85752
+ height: CAP_HEIGHT,
85753
+ fill: CAP_COLOR
85754
+ })), stableLayerEl);
85755
+ })));
85756
+ // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
85757
+ var lodash_debounce = __webpack_require__(62051);
85758
+ var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
85759
+ ;// ../../ui-next/src/components/SmartScrollbar/useByteArray.ts
85760
+ /* unused harmony import specifier */ var debounce;
85761
+ /* unused harmony import specifier */ var useByteArray_useRef;
85762
+ /* unused harmony import specifier */ var useByteArray_useState;
85763
+ /* unused harmony import specifier */ var useByteArray_useMemo;
85764
+ /* unused harmony import specifier */ var useByteArray_useEffect;
85765
+ /* unused harmony import specifier */ var useByteArray_useCallback;
85766
+
85767
+
85768
+ /**
85769
+ * Manages a mutable Uint8Array (one byte per position) with React change
85770
+ * detection via an incrementing version counter.
85771
+ *
85772
+ * @param size - Number of positions (e.g. total slices in a viewport).
85773
+ * @param debounceMs - When > 0, version bumps are debounced by this many
85774
+ * milliseconds. Byte writes are always immediate. Use for
85775
+ * high-frequency sources (cache prefetch) to batch renders.
85776
+ * Omit or pass 0 for immediate re-renders (e.g. viewed tracking).
85777
+ */
85778
+ function useByteArray(size, debounceMs = 0) {
85779
+ const bytesRef = useByteArray_useRef(new Uint8Array(size));
85780
+ const countRef = useByteArray_useRef(0);
85781
+ const [version, setVersion] = useByteArray_useState(0);
85782
+
85783
+ // Debounced bump — recreated when debounceMs changes; cancelled on unmount
85784
+ // or when debounceMs changes, following the lodash.debounce pattern used
85785
+ // throughout ui-next (InputFilter, CinePlayer).
85786
+ const debouncedBump = useByteArray_useMemo(() => debounceMs > 0 ? debounce(() => setVersion(v => v + 1), debounceMs) : null, [debounceMs]);
85787
+ useByteArray_useEffect(() => {
85788
+ return () => debouncedBump?.cancel();
85789
+ }, [debouncedBump]);
85790
+
85791
+ // Reset array only when size actually changes — skip on initial mount since
85792
+ // bytesRef is already initialised to the correct size via useRef.
85793
+ useByteArray_useEffect(() => {
85794
+ if (bytesRef.current.length === size) return;
85795
+ debouncedBump?.cancel();
85796
+ bytesRef.current = new Uint8Array(size);
85797
+ countRef.current = 0;
85798
+ setVersion(v => v + 1);
85799
+ }, [size, debouncedBump]);
85800
+ const bump = useByteArray_useCallback(() => {
85801
+ if (debouncedBump) {
85802
+ debouncedBump();
85803
+ } else {
85804
+ setVersion(v => v + 1);
85805
+ }
85806
+ }, [debouncedBump]);
85807
+ const setByte = useByteArray_useCallback(index => {
85808
+ const bytes = bytesRef.current;
85809
+ if (index < 0 || index >= bytes.length || bytes[index] === 1) return;
85810
+ bytes[index] = 1;
85811
+ countRef.current++;
85812
+ bump();
85813
+ }, [bump]);
85814
+ const clearByte = useByteArray_useCallback(index => {
85815
+ const bytes = bytesRef.current;
85816
+ if (index < 0 || index >= bytes.length || bytes[index] === 0) return;
85817
+ bytes[index] = 0;
85818
+ countRef.current--;
85819
+ bump();
85820
+ }, [bump]);
85821
+ const resetWith = useByteArray_useCallback(populate => {
85822
+ const bytes = bytesRef.current;
85823
+ bytes.fill(0);
85824
+ populate(bytes);
85825
+ let count = 0;
85826
+ for (let i = 0; i < bytes.length; i++) {
85827
+ if (bytes[i]) count++;
85828
+ }
85829
+ countRef.current = count;
85830
+ bump();
85831
+ }, [bump]);
85832
+ return {
85833
+ bytes: bytesRef.current,
85834
+ version,
85835
+ // countRef.current is read at render time (triggered by version bump) so
85836
+ // it is always up to date when this value is consumed.
85837
+ isFull: size > 0 && countRef.current === size,
85838
+ setByte,
85839
+ clearByte,
85840
+ resetWith
85841
+ };
85842
+ }
85843
+ ;// ../../ui-next/src/components/SmartScrollbar/index.ts
85844
+
85845
+
85846
+
85847
+
85848
+
85849
+
85146
85850
  ;// ../../ui-next/src/tailwind.css
85147
85851
  // extracted by mini-css-extract-plugin
85148
85852
 
@@ -85270,7 +85974,7 @@ var useLayoutEffect2 = globalThis?.document ? react.useLayoutEffect : () => {
85270
85974
 
85271
85975
  var useReactId = react_namespaceObject[" useId ".trim().toString()] || (() => void 0);
85272
85976
  var count = 0;
85273
- function useId(deterministicId) {
85977
+ function dist_useId(deterministicId) {
85274
85978
  const [id, setId] = react.useState(useReactId());
85275
85979
  useLayoutEffect2(() => {
85276
85980
  if (!deterministicId) setId((reactId) => reactId ?? String(count++));
@@ -85282,7 +85986,7 @@ function useId(deterministicId) {
85282
85986
 
85283
85987
  ;// ../../../node_modules/@radix-ui/react-use-effect-event/dist/index.mjs
85284
85988
  /* unused harmony import specifier */ var useLayoutEffect;
85285
- /* unused harmony import specifier */ var React;
85989
+ /* unused harmony import specifier */ var dist_React;
85286
85990
  // src/use-effect-event.tsx
85287
85991
 
85288
85992
 
@@ -85292,7 +85996,7 @@ function useEffectEvent(callback) {
85292
85996
  if (typeof useReactEffectEvent === "function") {
85293
85997
  return useReactEffectEvent(callback);
85294
85998
  }
85295
- const ref = React.useRef(() => {
85999
+ const ref = dist_React.useRef(() => {
85296
86000
  throw new Error("Cannot call an event handler while rendering.");
85297
86001
  });
85298
86002
  if (typeof useReactInsertionEffect === "function") {
@@ -85304,7 +86008,7 @@ function useEffectEvent(callback) {
85304
86008
  ref.current = callback;
85305
86009
  });
85306
86010
  }
85307
- return React.useMemo(() => (...args) => ref.current?.(...args), []);
86011
+ return dist_React.useMemo(() => (...args) => ref.current?.(...args), []);
85308
86012
  }
85309
86013
 
85310
86014
  //# sourceMappingURL=index.mjs.map
@@ -85446,8 +86150,6 @@ function useControllableStateReducer(reducer, userArgs, initialArg, init) {
85446
86150
 
85447
86151
  //# sourceMappingURL=index.mjs.map
85448
86152
 
85449
- // EXTERNAL MODULE: ../../../node_modules/react-dom/index.js
85450
- var react_dom = __webpack_require__(35623);
85451
86153
  ;// ../../../node_modules/@radix-ui/react-primitive/dist/index.mjs
85452
86154
  // src/primitive.tsx
85453
86155
 
@@ -86441,8 +87143,8 @@ var env = {
86441
87143
  };
86442
87144
 
86443
87145
  ;// ../../../node_modules/use-sidecar/dist/es2015/hook.js
86444
- /* unused harmony import specifier */ var useState;
86445
- /* unused harmony import specifier */ var useEffect;
87146
+ /* unused harmony import specifier */ var hook_useState;
87147
+ /* unused harmony import specifier */ var hook_useEffect;
86446
87148
  /* unused harmony import specifier */ var hook_env;
86447
87149
 
86448
87150
 
@@ -86459,9 +87161,9 @@ function useSidecar(importer, effect) {
86459
87161
  function useRealSidecar(importer, effect) {
86460
87162
  var options = (effect && effect.options) || NO_OPTIONS;
86461
87163
  var couldUseCache = hook_env.forceCache || (hook_env.isNode && !!options.ssr) || !options.async;
86462
- var _a = useState(couldUseCache ? function () { return cache.get(importer); } : undefined), Car = _a[0], setCar = _a[1];
86463
- var _b = useState(null), error = _b[0], setError = _b[1];
86464
- useEffect(function () {
87164
+ var _a = hook_useState(couldUseCache ? function () { return cache.get(importer); } : undefined), Car = _a[0], setCar = _a[1];
87165
+ var _b = hook_useState(null), error = _b[0], setError = _b[1];
87166
+ hook_useEffect(function () {
86465
87167
  if (!Car) {
86466
87168
  importer().then(function (car) {
86467
87169
  var resolved = effect ? effect.read() : car.default || car;
@@ -86597,7 +87299,7 @@ function createSidecarMedium(options) {
86597
87299
  ;// ../../../node_modules/use-sidecar/dist/es2015/renderProp.js
86598
87300
  /* unused harmony import specifier */ var renderProp_assign;
86599
87301
  /* unused harmony import specifier */ var renderProp_React;
86600
- /* unused harmony import specifier */ var useCallback;
87302
+ /* unused harmony import specifier */ var renderProp_useCallback;
86601
87303
  /* unused harmony import specifier */ var renderProp_useLayoutEffect;
86602
87304
  /* unused harmony import specifier */ var renderProp_useState;
86603
87305
  /* unused harmony import specifier */ var renderProp_useEffect;
@@ -86607,7 +87309,7 @@ function createSidecarMedium(options) {
86607
87309
  function renderCar(WrappedComponent, defaults) {
86608
87310
  function State(_a) {
86609
87311
  var stateRef = _a.stateRef, props = _a.props;
86610
- var renderTarget = useCallback(function SideTarget() {
87312
+ var renderTarget = renderProp_useCallback(function SideTarget() {
86611
87313
  var args = [];
86612
87314
  for (var _i = 0; _i < arguments.length; _i++) {
86613
87315
  args[_i] = arguments[_i];
@@ -87436,9 +88138,9 @@ var Dialog = (props) => {
87436
88138
  scope: __scopeDialog,
87437
88139
  triggerRef,
87438
88140
  contentRef,
87439
- contentId: useId(),
87440
- titleId: useId(),
87441
- descriptionId: useId(),
88141
+ contentId: dist_useId(),
88142
+ titleId: dist_useId(),
88143
+ descriptionId: dist_useId(),
87442
88144
  open,
87443
88145
  onOpenChange: setOpen,
87444
88146
  onOpenToggle: react.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
@@ -87716,7 +88418,7 @@ var Close = DialogClose;
87716
88418
  //# sourceMappingURL=index.mjs.map
87717
88419
 
87718
88420
  ;// ../../../node_modules/cmdk/dist/index.mjs
87719
- "use client";var N='[cmdk-group=""]',dist_Y='[cmdk-group-items=""]',be='[cmdk-group-heading=""]',le='[cmdk-item=""]',ce=`${le}:not([aria-disabled="true"])`,Z="cmdk-item-select",T="data-value",Re=(r,o,n)=>W(r,o,n),ue=react.createContext(void 0),dist_K=()=>react.useContext(ue),de=react.createContext(void 0),ee=()=>react.useContext(de),fe=react.createContext(void 0),me=react.forwardRef((r,o)=>{let n=L(()=>{var e,a;return{search:"",value:(a=(e=r.value)!=null?e:r.defaultValue)!=null?a:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),u=L(()=>new Set),c=L(()=>new Map),d=L(()=>new Map),f=L(()=>new Set),p=pe(r),{label:b,children:m,value:R,onValueChange:x,filter:C,shouldFilter:S,loop:A,disablePointerSelection:ge=!1,vimBindings:j=!0,...O}=r,$=useId(),q=useId(),_=useId(),I=react.useRef(null),v=ke();dist_k(()=>{if(R!==void 0){let e=R.trim();n.current.value=e,E.emit()}},[R]),dist_k(()=>{v(6,ne)},[]);let E=react.useMemo(()=>({subscribe:e=>(f.current.add(e),()=>f.current.delete(e)),snapshot:()=>n.current,setState:(e,a,s)=>{var i,l,g,y;if(!Object.is(n.current[e],a)){if(n.current[e]=a,e==="search")J(),z(),v(1,W);else if(e==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let h=document.getElementById(_);h?h.focus():(i=document.getElementById($))==null||i.focus()}if(v(7,()=>{var h;n.current.selectedItemId=(h=M())==null?void 0:h.id,E.emit()}),s||v(5,ne),((l=p.current)==null?void 0:l.value)!==void 0){let h=a!=null?a:"";(y=(g=p.current).onValueChange)==null||y.call(g,h);return}}E.emit()}},emit:()=>{f.current.forEach(e=>e())}}),[]),U=react.useMemo(()=>({value:(e,a,s)=>{var i;a!==((i=d.current.get(e))==null?void 0:i.value)&&(d.current.set(e,{value:a,keywords:s}),n.current.filtered.items.set(e,te(a,s)),v(2,()=>{z(),E.emit()}))},item:(e,a)=>(u.current.add(e),a&&(c.current.has(a)?c.current.get(a).add(e):c.current.set(a,new Set([e]))),v(3,()=>{J(),z(),n.current.value||W(),E.emit()}),()=>{d.current.delete(e),u.current.delete(e),n.current.filtered.items.delete(e);let s=M();v(4,()=>{J(),(s==null?void 0:s.getAttribute("id"))===e&&W(),E.emit()})}),group:e=>(c.current.has(e)||c.current.set(e,new Set),()=>{d.current.delete(e),c.current.delete(e)}),filter:()=>p.current.shouldFilter,label:b||r["aria-label"],getDisablePointerSelection:()=>p.current.disablePointerSelection,listId:$,inputId:_,labelId:q,listInnerRef:I}),[]);function te(e,a){var i,l;let s=(l=(i=p.current)==null?void 0:i.filter)!=null?l:Re;return e?s(e,n.current.search,a):0}function z(){if(!n.current.search||p.current.shouldFilter===!1)return;let e=n.current.filtered.items,a=[];n.current.filtered.groups.forEach(i=>{let l=c.current.get(i),g=0;l.forEach(y=>{let h=e.get(y);g=Math.max(h,g)}),a.push([i,g])});let s=I.current;V().sort((i,l)=>{var h,F;let g=i.getAttribute("id"),y=l.getAttribute("id");return((h=e.get(y))!=null?h:0)-((F=e.get(g))!=null?F:0)}).forEach(i=>{let l=i.closest(dist_Y);l?l.appendChild(i.parentElement===l?i:i.closest(`${dist_Y} > *`)):s.appendChild(i.parentElement===s?i:i.closest(`${dist_Y} > *`))}),a.sort((i,l)=>l[1]-i[1]).forEach(i=>{var g;let l=(g=I.current)==null?void 0:g.querySelector(`${N}[${T}="${encodeURIComponent(i[0])}"]`);l==null||l.parentElement.appendChild(l)})}function W(){let e=V().find(s=>s.getAttribute("aria-disabled")!=="true"),a=e==null?void 0:e.getAttribute(T);E.setState("value",a||void 0)}function J(){var a,s,i,l;if(!n.current.search||p.current.shouldFilter===!1){n.current.filtered.count=u.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let g of u.current){let y=(s=(a=d.current.get(g))==null?void 0:a.value)!=null?s:"",h=(l=(i=d.current.get(g))==null?void 0:i.keywords)!=null?l:[],F=te(y,h);n.current.filtered.items.set(g,F),F>0&&e++}for(let[g,y]of c.current)for(let h of y)if(n.current.filtered.items.get(h)>0){n.current.filtered.groups.add(g);break}n.current.filtered.count=e}function ne(){var a,s,i;let e=M();e&&(((a=e.parentElement)==null?void 0:a.firstChild)===e&&((i=(s=e.closest(N))==null?void 0:s.querySelector(be))==null||i.scrollIntoView({block:"nearest"})),e.scrollIntoView({block:"nearest"}))}function M(){var e;return(e=I.current)==null?void 0:e.querySelector(`${le}[aria-selected="true"]`)}function V(){var e;return Array.from(((e=I.current)==null?void 0:e.querySelectorAll(ce))||[])}function X(e){let s=V()[e];s&&E.setState("value",s.getAttribute(T))}function Q(e){var g;let a=M(),s=V(),i=s.findIndex(y=>y===a),l=s[i+e];(g=p.current)!=null&&g.loop&&(l=i+e<0?s[s.length-1]:i+e===s.length?s[0]:s[i+e]),l&&E.setState("value",l.getAttribute(T))}function re(e){let a=M(),s=a==null?void 0:a.closest(N),i;for(;s&&!i;)s=e>0?we(s,N):De(s,N),i=s==null?void 0:s.querySelector(ce);i?E.setState("value",i.getAttribute(T)):Q(e)}let oe=()=>X(V().length-1),ie=e=>{e.preventDefault(),e.metaKey?oe():e.altKey?re(1):Q(1)},se=e=>{e.preventDefault(),e.metaKey?X(0):e.altKey?re(-1):Q(-1)};return react.createElement(Primitive.div,{ref:o,tabIndex:-1,...O,"cmdk-root":"",onKeyDown:e=>{var s;(s=O.onKeyDown)==null||s.call(O,e);let a=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||a))switch(e.key){case"n":case"j":{j&&e.ctrlKey&&ie(e);break}case"ArrowDown":{ie(e);break}case"p":case"k":{j&&e.ctrlKey&&se(e);break}case"ArrowUp":{se(e);break}case"Home":{e.preventDefault(),X(0);break}case"End":{e.preventDefault(),oe();break}case"Enter":{e.preventDefault();let i=M();if(i){let l=new Event(Z);i.dispatchEvent(l)}}}}},react.createElement("label",{"cmdk-label":"",htmlFor:U.inputId,id:U.labelId,style:Te},b),dist_B(r,e=>react.createElement(de.Provider,{value:E},react.createElement(ue.Provider,{value:U},e))))}),he=react.forwardRef((r,o)=>{var _,I;let n=useId(),u=react.useRef(null),c=react.useContext(fe),d=dist_K(),f=pe(r),p=(I=(_=f.current)==null?void 0:_.forceMount)!=null?I:c==null?void 0:c.forceMount;dist_k(()=>{if(!p)return d.item(n,c==null?void 0:c.id)},[p]);let b=ve(n,u,[r.value,r.children,u],r.keywords),m=ee(),R=P(v=>v.value&&v.value===b.current),x=P(v=>p||d.filter()===!1?!0:v.search?v.filtered.items.get(n)>0:!0);react.useEffect(()=>{let v=u.current;if(!(!v||r.disabled))return v.addEventListener(Z,C),()=>v.removeEventListener(Z,C)},[x,r.onSelect,r.disabled]);function C(){var v,E;S(),(E=(v=f.current).onSelect)==null||E.call(v,b.current)}function S(){m.setState("value",b.current,!0)}if(!x)return null;let{disabled:A,value:ge,onSelect:j,forceMount:O,keywords:$,...q}=r;return react.createElement(Primitive.div,{ref:composeRefs(u,o),...q,id:n,"cmdk-item":"",role:"option","aria-disabled":!!A,"aria-selected":!!R,"data-disabled":!!A,"data-selected":!!R,onPointerMove:A||d.getDisablePointerSelection()?void 0:S,onClick:A?void 0:C},r.children)}),Ee=react.forwardRef((r,o)=>{let{heading:n,children:u,forceMount:c,...d}=r,f=useId(),p=react.useRef(null),b=react.useRef(null),m=useId(),R=dist_K(),x=P(S=>c||R.filter()===!1?!0:S.search?S.filtered.groups.has(f):!0);dist_k(()=>R.group(f),[]),ve(f,p,[r.value,r.heading,b]);let C=react.useMemo(()=>({id:f,forceMount:c}),[c]);return react.createElement(Primitive.div,{ref:composeRefs(p,o),...d,"cmdk-group":"",role:"presentation",hidden:x?void 0:!0},n&&react.createElement("div",{ref:b,"cmdk-group-heading":"","aria-hidden":!0,id:m},n),dist_B(r,S=>react.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":n?m:void 0},react.createElement(fe.Provider,{value:C},S))))}),ye=react.forwardRef((r,o)=>{let{alwaysRender:n,...u}=r,c=react.useRef(null),d=P(f=>!f.search);return!n&&!d?null:react.createElement(Primitive.div,{ref:composeRefs(c,o),...u,"cmdk-separator":"",role:"separator"})}),Se=react.forwardRef((r,o)=>{let{onValueChange:n,...u}=r,c=r.value!=null,d=ee(),f=P(m=>m.search),p=P(m=>m.selectedItemId),b=dist_K();return react.useEffect(()=>{r.value!=null&&d.setState("search",r.value)},[r.value]),react.createElement(Primitive.input,{ref:o,...u,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":b.listId,"aria-labelledby":b.labelId,"aria-activedescendant":p,id:b.inputId,type:"text",value:c?r.value:f,onChange:m=>{c||d.setState("search",m.target.value),n==null||n(m.target.value)}})}),Ce=react.forwardRef((r,o)=>{let{children:n,label:u="Suggestions",...c}=r,d=react.useRef(null),f=react.useRef(null),p=P(m=>m.selectedItemId),b=dist_K();return react.useEffect(()=>{if(f.current&&d.current){let m=f.current,R=d.current,x,C=new ResizeObserver(()=>{x=requestAnimationFrame(()=>{let S=m.offsetHeight;R.style.setProperty("--cmdk-list-height",S.toFixed(1)+"px")})});return C.observe(m),()=>{cancelAnimationFrame(x),C.unobserve(m)}}},[]),react.createElement(Primitive.div,{ref:composeRefs(d,o),...c,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":p,"aria-label":u,id:b.listId},dist_B(r,m=>react.createElement("div",{ref:composeRefs(f,b.listInnerRef),"cmdk-list-sizer":""},m)))}),xe=react.forwardRef((r,o)=>{let{open:n,onOpenChange:u,overlayClassName:c,contentClassName:d,container:f,...p}=r;return react.createElement(react_dialog_dist_Root,{open:n,onOpenChange:u},react.createElement(dist_Portal,{container:f},react.createElement(Overlay,{"cmdk-overlay":"",className:c}),react.createElement(Content,{"aria-label":r.label,"cmdk-dialog":"",className:d},react.createElement(me,{ref:o,...p}))))}),Ie=react.forwardRef((r,o)=>P(u=>u.filtered.count===0)?react.createElement(Primitive.div,{ref:o,...r,"cmdk-empty":"",role:"presentation"}):null),Pe=react.forwardRef((r,o)=>{let{progress:n,children:u,label:c="Loading...",...d}=r;return react.createElement(Primitive.div,{ref:o,...d,"cmdk-loading":"",role:"progressbar","aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":c},dist_B(r,f=>react.createElement("div",{"aria-hidden":!0},f)))}),_e=Object.assign(me,{List:Ce,Item:he,Input:Se,Group:Ee,Separator:ye,Dialog:xe,Empty:Ie,Loading:Pe});function we(r,o){let n=r.nextElementSibling;for(;n;){if(n.matches(o))return n;n=n.nextElementSibling}}function De(r,o){let n=r.previousElementSibling;for(;n;){if(n.matches(o))return n;n=n.previousElementSibling}}function pe(r){let o=react.useRef(r);return dist_k(()=>{o.current=r}),o}var dist_k=typeof window=="undefined"?react.useEffect:react.useLayoutEffect;function L(r){let o=react.useRef();return o.current===void 0&&(o.current=r()),o}function P(r){let o=ee(),n=()=>r(o.snapshot());return react.useSyncExternalStore(o.subscribe,n,n)}function ve(r,o,n,u=[]){let c=react.useRef(),d=dist_K();return dist_k(()=>{var b;let f=(()=>{var m;for(let R of n){if(typeof R=="string")return R.trim();if(typeof R=="object"&&"current"in R)return R.current?(m=R.current.textContent)==null?void 0:m.trim():c.current}})(),p=u.map(m=>m.trim());d.value(r,f,p),(b=o.current)==null||b.setAttribute(T,f),c.current=f}),c}var ke=()=>{let[r,o]=react.useState(),n=L(()=>new Map);return dist_k(()=>{n.current.forEach(u=>u()),n.current=new Map},[r]),(u,c)=>{n.current.set(u,c),o({})}};function Me(r){let o=r.type;return typeof o=="function"?o(r.props):"render"in o?o.render(r.props):r}function dist_B({asChild:r,children:o},n){return r&&react.isValidElement(o)?react.cloneElement(Me(o),{ref:o.ref},n(o.props.children)):n(o)}var Te={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};
88421
+ "use client";var N='[cmdk-group=""]',dist_Y='[cmdk-group-items=""]',be='[cmdk-group-heading=""]',le='[cmdk-item=""]',ce=`${le}:not([aria-disabled="true"])`,Z="cmdk-item-select",T="data-value",Re=(r,o,n)=>W(r,o,n),ue=react.createContext(void 0),dist_K=()=>react.useContext(ue),de=react.createContext(void 0),ee=()=>react.useContext(de),fe=react.createContext(void 0),me=react.forwardRef((r,o)=>{let n=L(()=>{var e,a;return{search:"",value:(a=(e=r.value)!=null?e:r.defaultValue)!=null?a:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),u=L(()=>new Set),c=L(()=>new Map),d=L(()=>new Map),f=L(()=>new Set),p=pe(r),{label:b,children:m,value:R,onValueChange:x,filter:C,shouldFilter:S,loop:A,disablePointerSelection:ge=!1,vimBindings:j=!0,...O}=r,$=dist_useId(),q=dist_useId(),_=dist_useId(),I=react.useRef(null),v=ke();dist_k(()=>{if(R!==void 0){let e=R.trim();n.current.value=e,E.emit()}},[R]),dist_k(()=>{v(6,ne)},[]);let E=react.useMemo(()=>({subscribe:e=>(f.current.add(e),()=>f.current.delete(e)),snapshot:()=>n.current,setState:(e,a,s)=>{var i,l,g,y;if(!Object.is(n.current[e],a)){if(n.current[e]=a,e==="search")J(),z(),v(1,W);else if(e==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let h=document.getElementById(_);h?h.focus():(i=document.getElementById($))==null||i.focus()}if(v(7,()=>{var h;n.current.selectedItemId=(h=M())==null?void 0:h.id,E.emit()}),s||v(5,ne),((l=p.current)==null?void 0:l.value)!==void 0){let h=a!=null?a:"";(y=(g=p.current).onValueChange)==null||y.call(g,h);return}}E.emit()}},emit:()=>{f.current.forEach(e=>e())}}),[]),U=react.useMemo(()=>({value:(e,a,s)=>{var i;a!==((i=d.current.get(e))==null?void 0:i.value)&&(d.current.set(e,{value:a,keywords:s}),n.current.filtered.items.set(e,te(a,s)),v(2,()=>{z(),E.emit()}))},item:(e,a)=>(u.current.add(e),a&&(c.current.has(a)?c.current.get(a).add(e):c.current.set(a,new Set([e]))),v(3,()=>{J(),z(),n.current.value||W(),E.emit()}),()=>{d.current.delete(e),u.current.delete(e),n.current.filtered.items.delete(e);let s=M();v(4,()=>{J(),(s==null?void 0:s.getAttribute("id"))===e&&W(),E.emit()})}),group:e=>(c.current.has(e)||c.current.set(e,new Set),()=>{d.current.delete(e),c.current.delete(e)}),filter:()=>p.current.shouldFilter,label:b||r["aria-label"],getDisablePointerSelection:()=>p.current.disablePointerSelection,listId:$,inputId:_,labelId:q,listInnerRef:I}),[]);function te(e,a){var i,l;let s=(l=(i=p.current)==null?void 0:i.filter)!=null?l:Re;return e?s(e,n.current.search,a):0}function z(){if(!n.current.search||p.current.shouldFilter===!1)return;let e=n.current.filtered.items,a=[];n.current.filtered.groups.forEach(i=>{let l=c.current.get(i),g=0;l.forEach(y=>{let h=e.get(y);g=Math.max(h,g)}),a.push([i,g])});let s=I.current;V().sort((i,l)=>{var h,F;let g=i.getAttribute("id"),y=l.getAttribute("id");return((h=e.get(y))!=null?h:0)-((F=e.get(g))!=null?F:0)}).forEach(i=>{let l=i.closest(dist_Y);l?l.appendChild(i.parentElement===l?i:i.closest(`${dist_Y} > *`)):s.appendChild(i.parentElement===s?i:i.closest(`${dist_Y} > *`))}),a.sort((i,l)=>l[1]-i[1]).forEach(i=>{var g;let l=(g=I.current)==null?void 0:g.querySelector(`${N}[${T}="${encodeURIComponent(i[0])}"]`);l==null||l.parentElement.appendChild(l)})}function W(){let e=V().find(s=>s.getAttribute("aria-disabled")!=="true"),a=e==null?void 0:e.getAttribute(T);E.setState("value",a||void 0)}function J(){var a,s,i,l;if(!n.current.search||p.current.shouldFilter===!1){n.current.filtered.count=u.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let g of u.current){let y=(s=(a=d.current.get(g))==null?void 0:a.value)!=null?s:"",h=(l=(i=d.current.get(g))==null?void 0:i.keywords)!=null?l:[],F=te(y,h);n.current.filtered.items.set(g,F),F>0&&e++}for(let[g,y]of c.current)for(let h of y)if(n.current.filtered.items.get(h)>0){n.current.filtered.groups.add(g);break}n.current.filtered.count=e}function ne(){var a,s,i;let e=M();e&&(((a=e.parentElement)==null?void 0:a.firstChild)===e&&((i=(s=e.closest(N))==null?void 0:s.querySelector(be))==null||i.scrollIntoView({block:"nearest"})),e.scrollIntoView({block:"nearest"}))}function M(){var e;return(e=I.current)==null?void 0:e.querySelector(`${le}[aria-selected="true"]`)}function V(){var e;return Array.from(((e=I.current)==null?void 0:e.querySelectorAll(ce))||[])}function X(e){let s=V()[e];s&&E.setState("value",s.getAttribute(T))}function Q(e){var g;let a=M(),s=V(),i=s.findIndex(y=>y===a),l=s[i+e];(g=p.current)!=null&&g.loop&&(l=i+e<0?s[s.length-1]:i+e===s.length?s[0]:s[i+e]),l&&E.setState("value",l.getAttribute(T))}function re(e){let a=M(),s=a==null?void 0:a.closest(N),i;for(;s&&!i;)s=e>0?we(s,N):De(s,N),i=s==null?void 0:s.querySelector(ce);i?E.setState("value",i.getAttribute(T)):Q(e)}let oe=()=>X(V().length-1),ie=e=>{e.preventDefault(),e.metaKey?oe():e.altKey?re(1):Q(1)},se=e=>{e.preventDefault(),e.metaKey?X(0):e.altKey?re(-1):Q(-1)};return react.createElement(Primitive.div,{ref:o,tabIndex:-1,...O,"cmdk-root":"",onKeyDown:e=>{var s;(s=O.onKeyDown)==null||s.call(O,e);let a=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||a))switch(e.key){case"n":case"j":{j&&e.ctrlKey&&ie(e);break}case"ArrowDown":{ie(e);break}case"p":case"k":{j&&e.ctrlKey&&se(e);break}case"ArrowUp":{se(e);break}case"Home":{e.preventDefault(),X(0);break}case"End":{e.preventDefault(),oe();break}case"Enter":{e.preventDefault();let i=M();if(i){let l=new Event(Z);i.dispatchEvent(l)}}}}},react.createElement("label",{"cmdk-label":"",htmlFor:U.inputId,id:U.labelId,style:Te},b),dist_B(r,e=>react.createElement(de.Provider,{value:E},react.createElement(ue.Provider,{value:U},e))))}),he=react.forwardRef((r,o)=>{var _,I;let n=dist_useId(),u=react.useRef(null),c=react.useContext(fe),d=dist_K(),f=pe(r),p=(I=(_=f.current)==null?void 0:_.forceMount)!=null?I:c==null?void 0:c.forceMount;dist_k(()=>{if(!p)return d.item(n,c==null?void 0:c.id)},[p]);let b=ve(n,u,[r.value,r.children,u],r.keywords),m=ee(),R=P(v=>v.value&&v.value===b.current),x=P(v=>p||d.filter()===!1?!0:v.search?v.filtered.items.get(n)>0:!0);react.useEffect(()=>{let v=u.current;if(!(!v||r.disabled))return v.addEventListener(Z,C),()=>v.removeEventListener(Z,C)},[x,r.onSelect,r.disabled]);function C(){var v,E;S(),(E=(v=f.current).onSelect)==null||E.call(v,b.current)}function S(){m.setState("value",b.current,!0)}if(!x)return null;let{disabled:A,value:ge,onSelect:j,forceMount:O,keywords:$,...q}=r;return react.createElement(Primitive.div,{ref:composeRefs(u,o),...q,id:n,"cmdk-item":"",role:"option","aria-disabled":!!A,"aria-selected":!!R,"data-disabled":!!A,"data-selected":!!R,onPointerMove:A||d.getDisablePointerSelection()?void 0:S,onClick:A?void 0:C},r.children)}),Ee=react.forwardRef((r,o)=>{let{heading:n,children:u,forceMount:c,...d}=r,f=dist_useId(),p=react.useRef(null),b=react.useRef(null),m=dist_useId(),R=dist_K(),x=P(S=>c||R.filter()===!1?!0:S.search?S.filtered.groups.has(f):!0);dist_k(()=>R.group(f),[]),ve(f,p,[r.value,r.heading,b]);let C=react.useMemo(()=>({id:f,forceMount:c}),[c]);return react.createElement(Primitive.div,{ref:composeRefs(p,o),...d,"cmdk-group":"",role:"presentation",hidden:x?void 0:!0},n&&react.createElement("div",{ref:b,"cmdk-group-heading":"","aria-hidden":!0,id:m},n),dist_B(r,S=>react.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":n?m:void 0},react.createElement(fe.Provider,{value:C},S))))}),ye=react.forwardRef((r,o)=>{let{alwaysRender:n,...u}=r,c=react.useRef(null),d=P(f=>!f.search);return!n&&!d?null:react.createElement(Primitive.div,{ref:composeRefs(c,o),...u,"cmdk-separator":"",role:"separator"})}),Se=react.forwardRef((r,o)=>{let{onValueChange:n,...u}=r,c=r.value!=null,d=ee(),f=P(m=>m.search),p=P(m=>m.selectedItemId),b=dist_K();return react.useEffect(()=>{r.value!=null&&d.setState("search",r.value)},[r.value]),react.createElement(Primitive.input,{ref:o,...u,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":b.listId,"aria-labelledby":b.labelId,"aria-activedescendant":p,id:b.inputId,type:"text",value:c?r.value:f,onChange:m=>{c||d.setState("search",m.target.value),n==null||n(m.target.value)}})}),Ce=react.forwardRef((r,o)=>{let{children:n,label:u="Suggestions",...c}=r,d=react.useRef(null),f=react.useRef(null),p=P(m=>m.selectedItemId),b=dist_K();return react.useEffect(()=>{if(f.current&&d.current){let m=f.current,R=d.current,x,C=new ResizeObserver(()=>{x=requestAnimationFrame(()=>{let S=m.offsetHeight;R.style.setProperty("--cmdk-list-height",S.toFixed(1)+"px")})});return C.observe(m),()=>{cancelAnimationFrame(x),C.unobserve(m)}}},[]),react.createElement(Primitive.div,{ref:composeRefs(d,o),...c,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":p,"aria-label":u,id:b.listId},dist_B(r,m=>react.createElement("div",{ref:composeRefs(f,b.listInnerRef),"cmdk-list-sizer":""},m)))}),xe=react.forwardRef((r,o)=>{let{open:n,onOpenChange:u,overlayClassName:c,contentClassName:d,container:f,...p}=r;return react.createElement(react_dialog_dist_Root,{open:n,onOpenChange:u},react.createElement(dist_Portal,{container:f},react.createElement(Overlay,{"cmdk-overlay":"",className:c}),react.createElement(Content,{"aria-label":r.label,"cmdk-dialog":"",className:d},react.createElement(me,{ref:o,...p}))))}),Ie=react.forwardRef((r,o)=>P(u=>u.filtered.count===0)?react.createElement(Primitive.div,{ref:o,...r,"cmdk-empty":"",role:"presentation"}):null),Pe=react.forwardRef((r,o)=>{let{progress:n,children:u,label:c="Loading...",...d}=r;return react.createElement(Primitive.div,{ref:o,...d,"cmdk-loading":"",role:"progressbar","aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":c},dist_B(r,f=>react.createElement("div",{"aria-hidden":!0},f)))}),_e=Object.assign(me,{List:Ce,Item:he,Input:Se,Group:Ee,Separator:ye,Dialog:xe,Empty:Ie,Loading:Pe});function we(r,o){let n=r.nextElementSibling;for(;n;){if(n.matches(o))return n;n=n.nextElementSibling}}function De(r,o){let n=r.previousElementSibling;for(;n;){if(n.matches(o))return n;n=n.previousElementSibling}}function pe(r){let o=react.useRef(r);return dist_k(()=>{o.current=r}),o}var dist_k=typeof window=="undefined"?react.useEffect:react.useLayoutEffect;function L(r){let o=react.useRef();return o.current===void 0&&(o.current=r()),o}function P(r){let o=ee(),n=()=>r(o.snapshot());return react.useSyncExternalStore(o.subscribe,n,n)}function ve(r,o,n,u=[]){let c=react.useRef(),d=dist_K();return dist_k(()=>{var b;let f=(()=>{var m;for(let R of n){if(typeof R=="string")return R.trim();if(typeof R=="object"&&"current"in R)return R.current?(m=R.current.textContent)==null?void 0:m.trim():c.current}})(),p=u.map(m=>m.trim());d.value(r,f,p),(b=o.current)==null||b.setAttribute(T,f),c.current=f}),c}var ke=()=>{let[r,o]=react.useState(),n=L(()=>new Map);return dist_k(()=>{n.current.forEach(u=>u()),n.current=new Map},[r]),(u,c)=>{n.current.set(u,c),o({})}};function Me(r){let o=r.type;return typeof o=="function"?o(r.props):"render"in o?o.render(r.props):r}function dist_B({asChild:r,children:o},n){return r&&react.isValidElement(o)?react.cloneElement(Me(o),{ref:o.ref},n(o.props.children)):n(o)}var Te={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};
87720
88422
 
87721
88423
  ;// ../../ui-next/src/components/Dialog/useDraggable.ts
87722
88424
 
@@ -89448,7 +90150,7 @@ var Select = (props) => {
89448
90150
  onValueNodeChange: setValueNode,
89449
90151
  valueNodeHasChildren,
89450
90152
  onValueNodeHasChildrenChange: setValueNodeHasChildren,
89451
- contentId: useId(),
90153
+ contentId: dist_useId(),
89452
90154
  value,
89453
90155
  onValueChange: setValue,
89454
90156
  open,
@@ -90140,7 +90842,7 @@ var [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GR
90140
90842
  var SelectGroup = react.forwardRef(
90141
90843
  (props, forwardedRef) => {
90142
90844
  const { __scopeSelect, ...groupProps } = props;
90143
- const groupId = useId();
90845
+ const groupId = dist_useId();
90144
90846
  return /* @__PURE__ */ (0,jsx_runtime.jsx)(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ (0,jsx_runtime.jsx)(Primitive.div, { role: "group", "aria-labelledby": groupId, ...groupProps, ref: forwardedRef }) });
90145
90847
  }
90146
90848
  );
@@ -90174,7 +90876,7 @@ var SelectItem = react.forwardRef(
90174
90876
  forwardedRef,
90175
90877
  (node) => contentContext.itemRefCallback?.(node, value, disabled)
90176
90878
  );
90177
- const textId = useId();
90879
+ const textId = dist_useId();
90178
90880
  const pointerTypeRef = react.useRef("touch");
90179
90881
  const handleSelect = () => {
90180
90882
  if (!disabled) {
@@ -134415,7 +135117,7 @@ var Popover = (props) => {
134415
135117
  PopoverProvider,
134416
135118
  {
134417
135119
  scope: __scopePopover,
134418
- contentId: useId(),
135120
+ contentId: dist_useId(),
134419
135121
  triggerRef,
134420
135122
  open,
134421
135123
  onOpenChange: setOpen,
@@ -201260,9 +201962,6 @@ Calendar_Calendar.displayName = 'Calendar';
201260
201962
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
201261
201963
  var prop_types = __webpack_require__(97598);
201262
201964
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
201263
- // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
201264
- var lodash_debounce = __webpack_require__(62051);
201265
- var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
201266
201965
  ;// ../../ui-next/src/components/Input/Input.tsx
201267
201966
  function Input_extends() { return Input_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, Input_extends.apply(null, arguments); }
201268
201967
 
@@ -202814,7 +203513,7 @@ var RovingFocusGroupItem = react.forwardRef(
202814
203513
  children,
202815
203514
  ...itemProps
202816
203515
  } = props;
202817
- const autoId = useId();
203516
+ const autoId = dist_useId();
202818
203517
  const id = tabStopId || autoId;
202819
203518
  const context = useRovingFocusContext(dist_ITEM_NAME, __scopeRovingFocusGroup);
202820
203519
  const isCurrentTabStop = context.currentTabStopId === id;
@@ -202954,7 +203653,7 @@ var Tabs = react.forwardRef(
202954
203653
  TabsProvider,
202955
203654
  {
202956
203655
  scope: __scopeTabs,
202957
- baseId: useId(),
203656
+ baseId: dist_useId(),
202958
203657
  value,
202959
203658
  onValueChange: setValue,
202960
203659
  orientation,
@@ -205175,7 +205874,7 @@ var Collapsible = react.forwardRef(
205175
205874
  {
205176
205875
  scope: __scopeCollapsible,
205177
205876
  disabled,
205178
- contentId: useId(),
205877
+ contentId: dist_useId(),
205179
205878
  open,
205180
205879
  onOpenToggle: react.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
205181
205880
  children: /* @__PURE__ */ (0,jsx_runtime.jsx)(
@@ -205484,7 +206183,7 @@ var AccordionItem = react.forwardRef(
205484
206183
  const accordionContext = useAccordionContext(react_accordion_dist_ITEM_NAME, __scopeAccordion);
205485
206184
  const valueContext = useAccordionValueContext(react_accordion_dist_ITEM_NAME, __scopeAccordion);
205486
206185
  const collapsibleScope = useCollapsibleScope(__scopeAccordion);
205487
- const triggerId = useId();
206186
+ const triggerId = dist_useId();
205488
206187
  const open = value && valueContext.value.includes(value) || false;
205489
206188
  const disabled = accordionContext.disabled || props.disabled;
205490
206189
  return /* @__PURE__ */ (0,jsx_runtime.jsx)(
@@ -205725,7 +206424,7 @@ var Tooltip = (props) => {
205725
206424
  const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);
205726
206425
  const popperScope = react_tooltip_dist_usePopperScope(__scopeTooltip);
205727
206426
  const [trigger, setTrigger] = react.useState(null);
205728
- const contentId = useId();
206427
+ const contentId = dist_useId();
205729
206428
  const openTimerRef = react.useRef(0);
205730
206429
  const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;
205731
206430
  const delayDuration = delayDurationProp ?? providerContext.delayDuration;
@@ -212938,8 +213637,8 @@ var MenuSub = (props) => {
212938
213637
  MenuSubProvider,
212939
213638
  {
212940
213639
  scope: __scopeMenu,
212941
- contentId: useId(),
212942
- triggerId: useId(),
213640
+ contentId: dist_useId(),
213641
+ triggerId: dist_useId(),
212943
213642
  trigger,
212944
213643
  onTriggerChange: setTrigger,
212945
213644
  children
@@ -213215,9 +213914,9 @@ var DropdownMenu = (props) => {
213215
213914
  DropdownMenuProvider,
213216
213915
  {
213217
213916
  scope: __scopeDropdownMenu,
213218
- triggerId: useId(),
213917
+ triggerId: dist_useId(),
213219
213918
  triggerRef,
213220
- contentId: useId(),
213919
+ contentId: dist_useId(),
213221
213920
  open,
213222
213921
  onOpenChange: setOpen,
213223
213922
  onOpenToggle: react.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
@@ -218776,13 +219475,13 @@ const ManagedDialog = /*#__PURE__*/(0,react.forwardRef)(({
218776
219475
  ManagedDialog.displayName = 'ManagedDialog';
218777
219476
  /* harmony default export */ const contextProviders_ManagedDialog = (ManagedDialog);
218778
219477
  ;// ../../ui-next/src/contextProviders/DialogProvider.tsx
218779
- /* unused harmony import specifier */ var useContext;
219478
+ /* unused harmony import specifier */ var DialogProvider_useContext;
218780
219479
  function DialogProvider_extends() { return DialogProvider_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, DialogProvider_extends.apply(null, arguments); }
218781
219480
 
218782
219481
 
218783
219482
  const DialogProvider_DialogContext = /*#__PURE__*/(0,react.createContext)(null);
218784
219483
  const useDialog = () => {
218785
- const context = useContext(DialogProvider_DialogContext);
219484
+ const context = DialogProvider_useContext(DialogProvider_DialogContext);
218786
219485
  if (!context) {
218787
219486
  throw new Error('useDialog must be used within a DialogProvider');
218788
219487
  }
@@ -222394,7 +223093,7 @@ DataRow.Status = Status;
222394
223093
 
222395
223094
  // https://github.com/reach/reach-ui/blob/dev/packages/utils/src/context.tsx
222396
223095
 
222397
- function createContext(rootComponentName, defaultContext) {
223096
+ function createContext_createContext(rootComponentName, defaultContext) {
222398
223097
  const Ctx = /*#__PURE__*/react.createContext(defaultContext);
222399
223098
  function Provider(props) {
222400
223099
  const {
@@ -222428,7 +223127,7 @@ function createContext(rootComponentName, defaultContext) {
222428
223127
 
222429
223128
 
222430
223129
 
222431
- const [MeasurementTableProvider, useMeasurementTableContext] = createContext('MeasurementTable', {
223130
+ const [MeasurementTableProvider, useMeasurementTableContext] = createContext_createContext('MeasurementTable', {
222432
223131
  data: [],
222433
223132
  isExpanded: true
222434
223133
  });
@@ -230686,6 +231385,7 @@ const LabellingFlow = ({
230686
231385
 
230687
231386
 
230688
231387
 
231388
+
230689
231389
 
230690
231390
 
230691
231391
  // Segmentation Context Exports
@@ -230995,8 +231695,8 @@ Typography.propTypes = {
230995
231695
  ;// ../../ui/src/components/Typography/index.js
230996
231696
 
230997
231697
  /* harmony default export */ const components_Typography = (Typography_Typography);
230998
- // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3076 modules
230999
- var src = __webpack_require__(2343);
231698
+ // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3084 modules
231699
+ var src = __webpack_require__(15953);
231000
231700
  ;// ../../ui/src/components/EmptyStudies/EmptyStudies.tsx
231001
231701
 
231002
231702
 
@@ -239681,8 +240381,8 @@ Compose.propTypes = {
239681
240381
  };
239682
240382
  // EXTERNAL MODULE: ../../core/src/index.ts + 69 modules
239683
240383
  var core_src = __webpack_require__(42356);
239684
- // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3076 modules
239685
- var ui_next_src = __webpack_require__(2343);
240384
+ // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3084 modules
240385
+ var ui_next_src = __webpack_require__(15953);
239686
240386
  // EXTERNAL MODULE: ./state/index.js + 1 modules
239687
240387
  var state = __webpack_require__(45981);
239688
240388
  // EXTERNAL MODULE: ../../../node_modules/react-router/dist/index.js
@@ -241802,7 +242502,7 @@ async function defaultRouteInit({
241802
242502
  hangingProtocolService.run({
241803
242503
  studies,
241804
242504
  activeStudy,
241805
- displaySets
242505
+ displaySets: sortedDisplaySets
241806
242506
  }, hangingProtocolId, {
241807
242507
  stageIndex
241808
242508
  });
@@ -396694,7 +397394,7 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
396694
397394
  /******/ // This function allow to reference async chunks
396695
397395
  /******/ __webpack_require__.u = (chunkId) => {
396696
397396
  /******/ // return url for filenames based on template
396697
- /******/ return "" + ({"572":"polySeg","2007":"interpolation","3054":"histogram-worker","3694":"compute"}[chunkId] || chunkId) + ".bundle." + {"85":"85120dcfbb03af4fa5a7","147":"3c8fa1f478644636898a","213":"4f2dc5a26c4bdfea9038","572":"70369a8c69b843375431","732":"ea6f9d8504e37e01a208","1459":"03f6812bbebed223ac0a","1608":"c10d9aef452fe5a86d77","1927":"be67b3aafe238ca9f191","1933":"d1c853d4459eabcac0fc","2007":"53073c15cca1c5a41ae4","2018":"df77dcb95a7eb7194752","2075":"0e69a126a39539ff8e9a","2108":"aea8d3b39486dd5ab39e","2424":"225f1b88d037ff1e8d2b","2701":"28b3ca0e6ae5a13f78b3","3054":"a2a50c4674d99c619ca7","3138":"5594231be4399fa822f2","3461":"c453ad511e18741f5b36","3694":"ba3878791df68055b11d","4202":"f11f02596e30a22d1105","4287":"b7840e7b94cbbc102236","4406":"573d234b4641d23cf8db","4507":"152cf927b86b6e295b7f","4688":"05c4c23606587b3e82bd","4819":"b29eaf88762b95912d1d","5015":"322992b6dcb647ecf70e","5028":"d5e5ec2e2fae9a8c0dfa","5261":"2655560097e9250eac44","5457":"bd64924038b08fa7154b","5485":"538097cf423423cc9cae","5802":"8b2c04396d68ba668af5","6027":"f36aa36a2281dff6e29b","6939":"41fbdef87597b5172ec6","7159":"fb9df255868960f69765","7431":"5e14641f2c71e852abe7","7639":"f89778f572ee3caeb6fb","8094":"148a66619607e37cbf19","8305":"accd9d9b56fd08402c9e","8499":"26a487dbfa7be0837750","8558":"c778f722abdb0a66bc34","8583":"243229c3ff277630ddb8","8963":"0f106869f9d0eb0bba03","9195":"95ca6983f6a87e433d79","9205":"9a5f5dd04fd0831d9a4a","9567":"be350438bed4e656f278","9845":"36b3563ae1dba65b6b9a","9862":"51a1e7030f6b635d9528","9927":"fa13d8f3b034e48c00d3"}[chunkId] + ".js";
397397
+ /******/ return "" + ({"572":"polySeg","2007":"interpolation","3054":"histogram-worker","3694":"compute"}[chunkId] || chunkId) + ".bundle." + {"85":"be3de438b31fcd0bdf98","147":"173b4a11960d03a3b5b0","213":"7ea13f79d28e6b79d0dc","572":"70369a8c69b843375431","732":"ea6f9d8504e37e01a208","1459":"1578fc874558784d3a2a","1608":"e4aadbf17d38143dacdf","1927":"be67b3aafe238ca9f191","1933":"68ab0d4f329f6438520f","2007":"53073c15cca1c5a41ae4","2018":"815cdd7ef9d4c3edc816","2075":"0e69a126a39539ff8e9a","2108":"aea8d3b39486dd5ab39e","2424":"c562d715a07cc15002ea","2701":"b591cf6385ed53ed6093","3054":"a2a50c4674d99c619ca7","3138":"2da3ce5b42ce97e92fac","3461":"75e15ea13e39c5d80e62","3694":"ba3878791df68055b11d","4202":"850a7c7c011800b3daea","4287":"b7840e7b94cbbc102236","4406":"573d234b4641d23cf8db","4507":"697a334d7d3686b4f9a3","4688":"6797ff151db0973c8e3b","4819":"b184a0f0c159ce8f1f8d","5015":"21b2a904762fa1690648","5028":"b1060271494c162341c1","5261":"2655560097e9250eac44","5457":"b9bd5c411e8db274a88f","5485":"541c61d8e24cb145cb94","5802":"addd0259c8f9d0a18244","6027":"e1d958d21d152f917461","6939":"41fbdef87597b5172ec6","7159":"fb9df255868960f69765","7431":"5e14641f2c71e852abe7","7639":"3518e5907ec688a4aa04","8094":"148a66619607e37cbf19","8305":"bf9c862af030865ea106","8499":"fd282ff4fe499abdd01f","8558":"6ec562e3d201780f1444","8583":"422aa3bbdde39826560a","8963":"0f106869f9d0eb0bba03","9195":"3578183b4f9e9baf11b2","9205":"9a5f5dd04fd0831d9a4a","9567":"be350438bed4e656f278","9845":"267831496ba080d9f8da","9862":"09783830f0cb75a84d2a","9927":"481f2fefa9787af307c0"}[chunkId] + ".js";
396698
397398
  /******/ };
396699
397399
  /******/ })();
396700
397400
  /******/