@dxos/react-ui-stack 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

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 (38) hide show
  1. package/dist/lib/browser/{chunk-SM27YTH3.mjs → chunk-3F2KBXLP.mjs} +130 -66
  2. package/dist/lib/browser/chunk-3F2KBXLP.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/playwright/index.mjs +10 -23
  6. package/dist/lib/browser/playwright/index.mjs.map +2 -2
  7. package/dist/lib/browser/testing/index.mjs +1 -1
  8. package/dist/lib/node-esm/{chunk-MMAOXKOM.mjs → chunk-SYKFLQGK.mjs} +130 -66
  9. package/dist/lib/node-esm/chunk-SYKFLQGK.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +1 -1
  11. package/dist/lib/node-esm/meta.json +1 -1
  12. package/dist/lib/node-esm/playwright/index.mjs +10 -23
  13. package/dist/lib/node-esm/playwright/index.mjs.map +2 -2
  14. package/dist/lib/node-esm/testing/index.mjs +1 -1
  15. package/dist/types/src/components/Image/Image.d.ts +5 -2
  16. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  17. package/dist/types/src/components/Image/Image.stories.d.ts +3 -0
  18. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Stack/Stack.d.ts +6 -6
  20. package/dist/types/src/components/Stack/Stack.d.ts.map +1 -1
  21. package/dist/types/src/components/StackItem/StackItem.d.ts +1 -1
  22. package/dist/types/src/components/StackItem/StackItemContent.d.ts +10 -8
  23. package/dist/types/src/components/StackItem/StackItemContent.d.ts.map +1 -1
  24. package/dist/types/src/exemplars/Card/Card.d.ts +12 -8
  25. package/dist/types/src/exemplars/Card/Card.d.ts.map +1 -1
  26. package/dist/types/src/hooks/useStackDropForElements.d.ts +2 -2
  27. package/dist/types/src/hooks/useStackDropForElements.d.ts.map +1 -1
  28. package/dist/types/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +21 -21
  30. package/src/components/Image/Image.stories.tsx +33 -5
  31. package/src/components/Image/Image.tsx +158 -73
  32. package/src/components/Stack/Stack.tsx +14 -14
  33. package/src/components/StackItem/StackItem.stories.tsx +1 -1
  34. package/src/components/StackItem/StackItemContent.tsx +8 -8
  35. package/src/exemplars/Card/Card.tsx +25 -19
  36. package/src/hooks/useStackDropForElements.ts +42 -35
  37. package/dist/lib/browser/chunk-SM27YTH3.mjs.map +0 -7
  38. package/dist/lib/node-esm/chunk-MMAOXKOM.mjs.map +0 -7
@@ -1,66 +1,48 @@
1
1
  // src/components/Image/Image.tsx
2
2
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
3
- import React, { useRef, useState } from "react";
3
+ import React, { useCallback, useRef, useState } from "react";
4
4
  import { mx } from "@dxos/react-ui-theme";
5
- var Image = ({ classNames, src, alt = "", crossOrigin = "anonymous", sampleSize = 64, contrast = 0.95 }) => {
5
+ var cache = /* @__PURE__ */ new Map();
6
+ var Image = ({ classNames, src, alt = "", crossOrigin = "anonymous", sampleSize = 64, contrast = 0.9 }) => {
6
7
  var _effect = _useSignals();
7
8
  try {
8
9
  const [crossOriginState, setCrossOriginState] = useState(crossOrigin);
9
10
  const [dominantColor, setDominantColor] = useState(void 0);
10
11
  const [imageLoaded, setImageLoaded] = useState(false);
11
12
  const canvasRef = useRef(null);
12
- const extractDominantColor = (img) => {
13
- const canvas = canvasRef.current;
14
- const ctx = canvas?.getContext("2d");
15
- if (!canvas || !ctx) {
13
+ const handleImageError = () => {
14
+ setCrossOriginState(void 0);
15
+ };
16
+ const handleImageLoad = useCallback(({ target }) => {
17
+ const rgb = cache.get(src);
18
+ if (rgb) {
19
+ setDominantColor(rgb);
20
+ setImageLoaded(true);
21
+ return;
22
+ }
23
+ const img = target;
24
+ if (!canvasRef.current) {
16
25
  return;
17
26
  }
18
- canvas.width = sampleSize;
19
- canvas.height = sampleSize;
20
- ctx.drawImage(img, 0, 0, sampleSize, sampleSize);
21
27
  try {
22
- const imageData = ctx.getImageData(0, 0, sampleSize, sampleSize);
23
- const pixels = imageData.data;
24
- let r = 0;
25
- let g = 0;
26
- let b = 0;
27
- let totalWeight = 0;
28
- for (let i = 0; i < pixels.length; i += 4) {
29
- const red = pixels[i];
30
- const green = pixels[i + 1];
31
- const blue = pixels[i + 2];
32
- const alpha = pixels[i + 3];
33
- if (alpha === 0) continue;
34
- const max = Math.max(red, green, blue);
35
- const min = Math.min(red, green, blue);
36
- const saturation = max === 0 ? 0 : (max - min) / max;
37
- const weight = 1 + saturation * 2;
38
- r += red * weight;
39
- g += green * weight;
40
- b += blue * weight;
41
- totalWeight += weight;
42
- }
43
- if (totalWeight > 0) {
44
- r = Math.round(r / totalWeight);
45
- g = Math.round(g / totalWeight);
46
- b = Math.round(b / totalWeight);
47
- r = Math.round(r * contrast);
48
- g = Math.round(g * contrast);
49
- b = Math.round(b * contrast);
50
- setDominantColor(`rgb(${r}, ${g}, ${b})`);
28
+ const color = extractDominantColor(canvasRef.current, img, {
29
+ sampleSize,
30
+ contrast
31
+ });
32
+ if (color) {
33
+ const rgb2 = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;
34
+ cache.set(src, rgb2);
35
+ setDominantColor(rgb2);
51
36
  }
52
37
  } catch {
53
38
  setCrossOriginState(void 0);
54
39
  }
55
- };
56
- const handleImageError = () => {
57
- setCrossOriginState(void 0);
58
- };
59
- const handleImageLoad = (ev) => {
60
- const img = ev.target;
61
- extractDominantColor(img);
62
40
  setImageLoaded(true);
63
- };
41
+ }, [
42
+ sampleSize,
43
+ contrast,
44
+ src
45
+ ]);
64
46
  return /* @__PURE__ */ React.createElement("div", {
65
47
  className: mx(`relative flex is-full justify-center overflow-hidden transition-all duration-700`, classNames),
66
48
  style: {
@@ -94,6 +76,78 @@ var Image = ({ classNames, src, alt = "", crossOrigin = "anonymous", sampleSize
94
76
  _effect.f();
95
77
  }
96
78
  };
79
+ var extractDominantColor = (canvas, img, { sampleSize = 64, contrast = 0.95 }) => {
80
+ const ctx = canvas.getContext("2d");
81
+ if (!ctx) {
82
+ return null;
83
+ }
84
+ canvas.width = sampleSize;
85
+ canvas.height = sampleSize;
86
+ ctx.drawImage(img, 0, 0, sampleSize, sampleSize);
87
+ const imageData = ctx.getImageData(0, 0, sampleSize, sampleSize);
88
+ const pixels = imageData.data;
89
+ if (isTransparent(pixels, sampleSize)) {
90
+ return null;
91
+ }
92
+ let r = 0;
93
+ let g = 0;
94
+ let b = 0;
95
+ let totalWeight = 0;
96
+ const cornerSize = Math.floor(sampleSize * 0.125);
97
+ for (let y = 0; y < sampleSize; y++) {
98
+ for (let x = 0; x < sampleSize; x++) {
99
+ const isInTopLeft = x < cornerSize && y < cornerSize;
100
+ const isInTopRight = x >= sampleSize - cornerSize && y < cornerSize;
101
+ const isInBottomLeft = x < cornerSize && y >= sampleSize - cornerSize;
102
+ const isInBottomRight = x >= sampleSize - cornerSize && y >= sampleSize - cornerSize;
103
+ if (!isInTopLeft && !isInTopRight && !isInBottomLeft && !isInBottomRight) {
104
+ continue;
105
+ }
106
+ const i = (y * sampleSize + x) * 4;
107
+ const red = pixels[i];
108
+ const green = pixels[i + 1];
109
+ const blue = pixels[i + 2];
110
+ const alpha = pixels[i + 3];
111
+ if (alpha === 0) continue;
112
+ const max = Math.max(red, green, blue);
113
+ const min = Math.min(red, green, blue);
114
+ const saturation = max === 0 ? 0 : (max - min) / max;
115
+ const weight = 1 + saturation * 2;
116
+ r += red * weight;
117
+ g += green * weight;
118
+ b += blue * weight;
119
+ totalWeight += weight;
120
+ }
121
+ }
122
+ if (totalWeight > 0) {
123
+ r = Math.round(Math.round(r / totalWeight) * contrast);
124
+ g = Math.round(Math.round(g / totalWeight) * contrast);
125
+ b = Math.round(Math.round(b / totalWeight) * contrast);
126
+ return [
127
+ r,
128
+ g,
129
+ b
130
+ ];
131
+ }
132
+ return null;
133
+ };
134
+ var isTransparent = (pixels, sampleSize, threshold = 0.5) => {
135
+ let edgeTransparentPixels = 0;
136
+ const edgePixels = sampleSize * 4 - 4;
137
+ for (let x = 0; x < sampleSize; x++) {
138
+ const topIndex = x * 4;
139
+ if (pixels[topIndex + 3] === 0) edgeTransparentPixels++;
140
+ const bottomIndex = ((sampleSize - 1) * sampleSize + x) * 4;
141
+ if (pixels[bottomIndex + 3] === 0) edgeTransparentPixels++;
142
+ }
143
+ for (let y = 1; y < sampleSize - 1; y++) {
144
+ const leftIndex = y * sampleSize * 4;
145
+ if (pixels[leftIndex + 3] === 0) edgeTransparentPixels++;
146
+ const rightIndex = (y * sampleSize + sampleSize - 1) * 4;
147
+ if (pixels[rightIndex + 3] === 0) edgeTransparentPixels++;
148
+ }
149
+ return edgeTransparentPixels / edgePixels > threshold;
150
+ };
97
151
 
98
152
  // src/components/StackContext.tsx
99
153
  import { createContext, useContext } from "react";
@@ -121,7 +175,7 @@ var useStackItem = () => useContext(StackItemContext);
121
175
  // src/components/Stack/Stack.tsx
122
176
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
123
177
  import { composeRefs } from "@radix-ui/react-compose-refs";
124
- import React2, { Children, forwardRef, useCallback, useEffect, useMemo, useState as useState3 } from "react";
178
+ import React2, { Children, forwardRef, useCallback as useCallback2, useEffect, useMemo, useState as useState3 } from "react";
125
179
  import { ListItem, useId } from "@dxos/react-ui";
126
180
  import { mx as mx2 } from "@dxos/react-ui-theme";
127
181
 
@@ -131,14 +185,16 @@ import { dropTargetForElements } from "@atlaskit/pragmatic-drag-and-drop/element
131
185
  import { autoScrollForElements } from "@atlaskit/pragmatic-drag-and-drop-auto-scroll/element";
132
186
  import { attachClosestEdge, extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
133
187
  import { useLayoutEffect, useState as useState2 } from "react";
134
- var useStackDropForElements = ({ id, element, scrollElement = element, selfDroppable, orientation, onRearrange }) => {
188
+ var noop = () => {
189
+ };
190
+ var useStackDropForElements = ({ id, element, scrollElement = element, orientation, selfDroppable, onRearrange }) => {
135
191
  const [dropping, setDropping] = useState2(false);
136
192
  useLayoutEffect(() => {
137
- if (!element || !selfDroppable) {
193
+ if (!element) {
138
194
  return;
139
195
  }
140
196
  const acceptSourceType = orientation === "horizontal" ? "column" : "card";
141
- return combine(dropTargetForElements({
197
+ return combine(selfDroppable ? dropTargetForElements({
142
198
  element,
143
199
  getData: ({ input, element: element2 }) => {
144
200
  return attachClosestEdge({
@@ -171,10 +227,10 @@ var useStackDropForElements = ({ id, element, scrollElement = element, selfDropp
171
227
  onRearrange(source.data, self.data, extractClosestEdge(self.data));
172
228
  }
173
229
  }
174
- }), autoScrollForElements({
230
+ }) : noop, scrollElement ? autoScrollForElements({
175
231
  element: scrollElement,
176
232
  getAllowedAxis: () => orientation
177
- }));
233
+ }) : noop);
178
234
  }, [
179
235
  element,
180
236
  scrollElement,
@@ -224,7 +280,7 @@ var Stack = /* @__PURE__ */ forwardRef(({ children, classNames, style, orientati
224
280
  orientation,
225
281
  onRearrange
226
282
  });
227
- const handleScroll = useCallback(() => {
283
+ const handleScroll = useCallback2(() => {
228
284
  if (stackElement && Number.isFinite(separatorOnScroll)) {
229
285
  const scrollPosition = orientation === "horizontal" ? stackElement.scrollLeft : stackElement.scrollTop;
230
286
  const scrollSize = orientation === "horizontal" ? stackElement.scrollWidth : stackElement.scrollHeight;
@@ -240,7 +296,7 @@ var Stack = /* @__PURE__ */ forwardRef(({ children, classNames, style, orientati
240
296
  separatorOnScroll,
241
297
  orientation
242
298
  ]);
243
- const handleBlur = useCallback((event) => {
299
+ const handleBlur = useCallback2((event) => {
244
300
  if (event.target) {
245
301
  const target = event.target;
246
302
  const closestStackItem = target.closest(`[data-dx-item-id]`);
@@ -253,7 +309,7 @@ var Stack = /* @__PURE__ */ forwardRef(({ children, classNames, style, orientati
253
309
  stackId,
254
310
  props.onBlur
255
311
  ]);
256
- const handleKeyDown = useCallback((event) => {
312
+ const handleKeyDown = useCallback2((event) => {
257
313
  const target = event.target;
258
314
  if (event.key.startsWith("Arrow") && !target.closest(`input, textarea, [role="textbox"], [data-tabster*="mover"], [data-arrow-keys="all"], [data-arrow-keys~="${event.key.toLowerCase().slice(5)}"]`)) {
259
315
  const closestOwnedItem = target.closest(`[data-dx-stack-item="${stackId}"]`);
@@ -438,7 +494,7 @@ import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/el
438
494
  import { attachClosestEdge as attachClosestEdge2, extractClosestEdge as extractClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
439
495
  import { useFocusableGroup } from "@fluentui/react-tabster";
440
496
  import { composeRefs as composeRefs2 } from "@radix-ui/react-compose-refs";
441
- import React9, { forwardRef as forwardRef5, useCallback as useCallback2, useLayoutEffect as useLayoutEffect2, useMemo as useMemo3, useState as useState5 } from "react";
497
+ import React9, { forwardRef as forwardRef5, useCallback as useCallback3, useLayoutEffect as useLayoutEffect2, useMemo as useMemo3, useState as useState5 } from "react";
442
498
  import { createPortal } from "react-dom";
443
499
  import { ListItem as ListItem2 } from "@dxos/react-ui";
444
500
  import { resizeAttributes, sizeStyle } from "@dxos/react-ui-dnd";
@@ -471,7 +527,7 @@ var StackItemContent = /* @__PURE__ */ forwardRef2(({ children, toolbar, statusb
471
527
  return /* @__PURE__ */ React3.createElement("div", {
472
528
  role: "none",
473
529
  ...props,
474
- className: mx3("group grid grid-cols-[100%] density-coarse", stackItemSize === "contain" && "min-bs-0 overflow-hidden", size === "video" ? "aspect-video" : size === "square" && "aspect-square", toolbar && "[&>.dx-toolbar]:relative [&>.dx-toolbar]:border-be [&>.dx-toolbar]:border-subduedSeparator", scrollable ? "min-bs-0 overflow-y-auto scrollbar-thin contain-layout" : "overflow-hidden", role === "section" && toolbar && "[&_.dx-toolbar]:sticky [&_.dx-toolbar]:z-[1] [&_.dx-toolbar]:block-start-0 [&_.dx-toolbar]:-mbe-px [&_.dx-toolbar]:min-is-0", classNames),
530
+ className: mx3("group grid grid-cols-[100%] density-coarse", size === "video" ? "aspect-video" : size === "square" && "aspect-square", stackItemSize === "contain" && "min-bs-0 overflow-hidden", scrollable ? "min-bs-0 overflow-y-auto scrollbar-thin contain-layout" : "overflow-hidden", role === "section" && toolbar && "[&_.dx-toolbar]:sticky [&_.dx-toolbar]:z-[1] [&_.dx-toolbar]:block-start-0 [&_.dx-toolbar]:-mbe-px [&_.dx-toolbar]:min-is-0", toolbar && "[&>.dx-toolbar]:relative [&>.dx-toolbar]:border-be [&>.dx-toolbar]:border-subduedSeparator", classNames),
475
531
  style,
476
532
  "data-popover-collision-boundary": true,
477
533
  ref: forwardedRef
@@ -714,7 +770,7 @@ var StackItemRoot = /* @__PURE__ */ forwardRef5(({ item, children, classNames, s
714
770
  const [size = orientation === "horizontal" ? DEFAULT_HORIZONTAL_SIZE : DEFAULT_VERTICAL_SIZE, setInternalSize] = useState5(propsSize);
715
771
  const Root = role ?? "div";
716
772
  const composedItemRef = composeRefs2(itemRef, forwardedRef);
717
- const setSize = useCallback2((nextSize, commit) => {
773
+ const setSize = useCallback3((nextSize, commit) => {
718
774
  setInternalSize(nextSize);
719
775
  if (commit) {
720
776
  onSizeChange?.(nextSize);
@@ -924,10 +980,10 @@ import { Primitive } from "@radix-ui/react-primitive";
924
980
  import { Slot as Slot3 } from "@radix-ui/react-slot";
925
981
  import React10, { forwardRef as forwardRef6 } from "react";
926
982
  import { Icon as Icon2, IconButton, Toolbar, useTranslation as useTranslation2 } from "@dxos/react-ui";
927
- import { hoverableControls, mx as mx7 } from "@dxos/react-ui-theme";
928
- var cardDefaultInlineSize = 18;
983
+ import { cardMinInlineSize, hoverableControls, mx as mx7 } from "@dxos/react-ui-theme";
984
+ var cardDefaultInlineSize = cardMinInlineSize;
929
985
  var cardStackDefaultInlineSizeRem = cardDefaultInlineSize + 2.125;
930
- var CardStaticRoot = /* @__PURE__ */ forwardRef6(({ children, classNames, asChild, role = "group", ...props }, forwardedRef) => {
986
+ var CardStaticRoot = /* @__PURE__ */ forwardRef6(({ children, classNames, id, asChild, role = "group", ...props }, forwardedRef) => {
931
987
  var _effect = _useSignals10();
932
988
  try {
933
989
  const Root = asChild ? Slot3 : "div";
@@ -941,6 +997,9 @@ var CardStaticRoot = /* @__PURE__ */ forwardRef6(({ children, classNames, asChil
941
997
  role
942
998
  };
943
999
  return /* @__PURE__ */ React10.createElement(Root, {
1000
+ ...id && {
1001
+ "data-object-id": id
1002
+ },
944
1003
  ...props,
945
1004
  ...rootProps,
946
1005
  ref: forwardedRef
@@ -949,7 +1008,7 @@ var CardStaticRoot = /* @__PURE__ */ forwardRef6(({ children, classNames, asChil
949
1008
  _effect.f();
950
1009
  }
951
1010
  });
952
- var CardSurfaceRoot = ({ role = "never", children, classNames }) => {
1011
+ var CardSurfaceRoot = ({ id, role = "never", children, classNames }) => {
953
1012
  var _effect = _useSignals10();
954
1013
  try {
955
1014
  if ([
@@ -958,6 +1017,9 @@ var CardSurfaceRoot = ({ role = "never", children, classNames }) => {
958
1017
  "card--extrinsic"
959
1018
  ].includes(role)) {
960
1019
  return /* @__PURE__ */ React10.createElement("div", {
1020
+ ...id && {
1021
+ "data-object-id": id
1022
+ },
961
1023
  className: mx7(role === "card--popover" ? "popover-card-width" : [
962
1024
  "card--intrinsic",
963
1025
  "card--extrinsic"
@@ -965,6 +1027,7 @@ var CardSurfaceRoot = ({ role = "never", children, classNames }) => {
965
1027
  }, children);
966
1028
  } else {
967
1029
  return /* @__PURE__ */ React10.createElement(CardStaticRoot, {
1030
+ id,
968
1031
  classNames: [
969
1032
  role === "card--transclusion" && "mlb-1",
970
1033
  role === "card--transclusion" && hoverableControls,
@@ -1042,8 +1105,9 @@ var CardPoster = (props) => {
1042
1105
  if (props.image) {
1043
1106
  return /* @__PURE__ */ React10.createElement(Image, {
1044
1107
  classNames: [
1045
- `dx-card__poster is-full __bs-auto`,
1046
- aspect
1108
+ `dx-card__poster is-full`,
1109
+ aspect,
1110
+ props.classNames
1047
1111
  ],
1048
1112
  src: props.image,
1049
1113
  alt: props.alt
@@ -1052,7 +1116,7 @@ var CardPoster = (props) => {
1052
1116
  if (props.icon) {
1053
1117
  return /* @__PURE__ */ React10.createElement("div", {
1054
1118
  role: "image",
1055
- className: mx7(`dx-card__poster grid place-items-center bg-inputSurface text-subdued`, aspect),
1119
+ className: mx7(`dx-card__poster grid place-items-center bg-inputSurface text-subdued`, aspect, props.classNames),
1056
1120
  "aria-label": props.alt
1057
1121
  }, /* @__PURE__ */ React10.createElement(Icon2, {
1058
1122
  icon: props.icon,
@@ -1415,4 +1479,4 @@ export {
1415
1479
  CardStack,
1416
1480
  CardStackDragPreview
1417
1481
  };
1418
- //# sourceMappingURL=chunk-SM27YTH3.mjs.map
1482
+ //# sourceMappingURL=chunk-3F2KBXLP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Image/Image.tsx", "../../../src/components/StackContext.tsx", "../../../src/components/Stack/Stack.tsx", "../../../src/hooks/useStackDropForElements.ts", "../../../src/translations.ts", "../../../src/components/StackItem/StackItem.tsx", "../../../src/components/StackItem/StackItemContent.tsx", "../../../src/components/StackItem/StackItemDragHandle.tsx", "../../../src/components/StackItem/StackItemHeading.tsx", "../../../src/components/StackItem/StackItemResizeHandle.tsx", "../../../src/components/StackItem/StackItemSigil.tsx", "../../../src/components/StackItem/MenuSignifier.tsx", "../../../src/exemplars/Card/fragments.ts", "../../../src/exemplars/Card/Card.tsx", "../../../src/exemplars/Card/CardDragPreview.tsx", "../../../src/exemplars/CardStack/CardStack.tsx", "../../../src/exemplars/CardStack/CardStackDragPreview.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type SyntheticEvent, useCallback, useRef, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst cache = new Map<string, string>();\n\nexport type ImageProps = ThemedClassName<\n {\n src: string;\n alt?: string;\n crossOrigin?: 'anonymous' | 'use-credentials' | '';\n } & ColorOptions\n>;\n\nexport const Image = ({\n classNames,\n src,\n alt = '',\n crossOrigin = 'anonymous',\n sampleSize = 64,\n contrast = 0.9,\n}: ImageProps) => {\n const [crossOriginState, setCrossOriginState] = useState<ImageProps['crossOrigin']>(crossOrigin);\n const [dominantColor, setDominantColor] = useState<string | undefined>(undefined);\n const [imageLoaded, setImageLoaded] = useState<boolean>(false);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n // CORS not supported by server.\n const handleImageError = (): void => {\n setCrossOriginState(undefined);\n };\n\n const handleImageLoad = useCallback(\n ({ target }: SyntheticEvent<HTMLImageElement>): void => {\n const rgb = cache.get(src);\n if (rgb) {\n setDominantColor(rgb);\n setImageLoaded(true);\n return;\n }\n\n const img = target as HTMLImageElement;\n if (!canvasRef.current) {\n return;\n }\n\n try {\n const color = extractDominantColor(canvasRef.current, img, { sampleSize, contrast });\n if (color) {\n const rgb = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;\n cache.set(src, rgb);\n setDominantColor(rgb);\n }\n } catch {\n setCrossOriginState(undefined);\n }\n\n setImageLoaded(true);\n },\n [sampleSize, contrast, src],\n );\n\n return (\n <div\n className={mx(`relative flex is-full justify-center overflow-hidden transition-all duration-700`, classNames)}\n style={{\n backgroundColor: dominantColor,\n }}\n >\n {/* Hidden canvas for color extraction. */}\n <canvas ref={canvasRef} style={{ display: 'none' }} aria-hidden='true' />\n\n {/* Background gradient overlay for smooth transition. */}\n <div\n className='absolute inset-0 pointer-events-none'\n style={{\n background: dominantColor\n ? `radial-gradient(circle at center, transparent 30%, ${dominantColor} 100%)`\n : undefined,\n transition: 'opacity 0.7s ease-in-out',\n opacity: 0.5,\n }}\n />\n\n <img\n src={src}\n alt={alt}\n crossOrigin={crossOriginState}\n onError={handleImageError}\n onLoad={handleImageLoad}\n className={mx('z-10 object-contain transition-opacity duration-500', classNames)}\n style={{\n opacity: imageLoaded ? 1 : 0,\n }}\n />\n </div>\n );\n};\n\ntype ColorOptions = {\n sampleSize?: number;\n contrast?: number;\n};\n\n/**\n * Get dominant color from image (esp. from corners).\n */\nconst extractDominantColor = (\n canvas: HTMLCanvasElement,\n img: HTMLImageElement,\n { sampleSize = 64, contrast = 0.95 }: ColorOptions,\n): [number, number, number] | null => {\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n // Draw the image scaled down.\n canvas.width = sampleSize;\n canvas.height = sampleSize;\n ctx.drawImage(img, 0, 0, sampleSize, sampleSize);\n\n // Get image data.\n const imageData = ctx.getImageData(0, 0, sampleSize, sampleSize);\n const pixels = imageData.data;\n\n // Check for transparent background.\n if (isTransparent(pixels, sampleSize)) {\n return null;\n }\n\n let r = 0;\n let g = 0;\n let b = 0;\n let totalWeight = 0;\n\n // Define corner sampling areas (e.g., 25% of each dimension from each corner).\n const cornerSize = Math.floor(sampleSize * 0.125);\n\n // Sample only pixels in corner areas.\n for (let y = 0; y < sampleSize; y++) {\n for (let x = 0; x < sampleSize; x++) {\n // Check if pixel is in any corner area.\n const isInTopLeft = x < cornerSize && y < cornerSize;\n const isInTopRight = x >= sampleSize - cornerSize && y < cornerSize;\n const isInBottomLeft = x < cornerSize && y >= sampleSize - cornerSize;\n const isInBottomRight = x >= sampleSize - cornerSize && y >= sampleSize - cornerSize;\n if (!isInTopLeft && !isInTopRight && !isInBottomLeft && !isInBottomRight) {\n continue; // Skip pixels not in corner areas.\n }\n\n const i = (y * sampleSize + x) * 4;\n const red = pixels[i];\n const green = pixels[i + 1];\n const blue = pixels[i + 2];\n const alpha = pixels[i + 3];\n\n // Skip transparent pixels.\n if (alpha === 0) continue;\n\n // Calculate saturation to weight vibrant colors more.\n const max = Math.max(red, green, blue);\n const min = Math.min(red, green, blue);\n const saturation = max === 0 ? 0 : (max - min) / max;\n const weight = 1 + saturation * 2;\n\n r += red * weight;\n g += green * weight;\n b += blue * weight;\n totalWeight += weight;\n }\n }\n\n if (totalWeight > 0) {\n // Slightly darken the color for better contrast.\n r = Math.round(Math.round(r / totalWeight) * contrast);\n g = Math.round(Math.round(g / totalWeight) * contrast);\n b = Math.round(Math.round(b / totalWeight) * contrast);\n return [r, g, b];\n }\n\n return null;\n};\n\n/**\n * Detects if an image has a transparent background by examining edge pixels.\n * @param pixels - Image pixel data from canvas\n * @param sampleSize - Size of the sampled image\n * @param threshold - Percentage threshold for considering background transparent (default: 0.5)\n * @returns True if the image has a transparent background\n */\nconst isTransparent = (pixels: Uint8ClampedArray, sampleSize: number, threshold: number = 0.5): boolean => {\n let edgeTransparentPixels = 0;\n const edgePixels = sampleSize * 4 - 4; // Perimeter minus corners counted twice.\n\n for (let x = 0; x < sampleSize; x++) {\n // Top edge.\n const topIndex = x * 4;\n if (pixels[topIndex + 3] === 0) edgeTransparentPixels++;\n\n // Bottom edge.\n const bottomIndex = ((sampleSize - 1) * sampleSize + x) * 4;\n if (pixels[bottomIndex + 3] === 0) edgeTransparentPixels++;\n }\n\n for (let y = 1; y < sampleSize - 1; y++) {\n // Left edge.\n const leftIndex = y * sampleSize * 4;\n if (pixels[leftIndex + 3] === 0) edgeTransparentPixels++;\n\n // Right edge.\n const rightIndex = (y * sampleSize + sampleSize - 1) * 4;\n if (pixels[rightIndex + 3] === 0) edgeTransparentPixels++;\n }\n\n return edgeTransparentPixels / edgePixels > threshold;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\nimport { type StackItemRearrangeHandler, type StackItemSize } from './defs';\nimport { type Orientation, type Size } from './Stack';\n\nexport type StackContextValue = {\n orientation: Orientation;\n rail: boolean;\n size: Size;\n onRearrange?: StackItemRearrangeHandler;\n stackId?: string;\n};\n\nexport const StackContext = createContext<StackContextValue>({\n orientation: 'vertical',\n rail: true,\n size: 'intrinsic',\n});\n\nexport const useStack = () => useContext(StackContext);\n\nexport type ItemDragState =\n | {\n type: 'idle';\n }\n | {\n type: 'preview';\n container: HTMLElement;\n item: any;\n }\n | {\n type: 'is-dragging';\n item: any;\n };\n\nexport const idle: ItemDragState = { type: 'idle' };\n\nexport type StackItemContextValue = {\n selfDragHandleRef: (element: HTMLDivElement | null) => void;\n size: StackItemSize;\n setSize: (nextSize: StackItemSize, commit?: boolean) => void;\n state: ItemDragState;\n setState: (state: ItemDragState) => void;\n role?: string;\n};\n\nexport const StackItemContext = createContext<StackItemContextValue>({\n selfDragHandleRef: () => {},\n size: 'min-content',\n setSize: () => {},\n state: idle,\n setState: () => {},\n});\n\nexport const useStackItem = () => useContext(StackItemContext);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport React, {\n type CSSProperties,\n Children,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { ListItem, type ThemedClassName, useId } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStackDropForElements } from '../../hooks';\nimport { type StackContextValue } from '../defs';\nimport { StackContext } from '../StackContext';\n\nexport type Orientation = 'horizontal' | 'vertical';\n\n/**\n * Size is how Stack and its StackItems coordinate the dimensions of the items with the available space.\n * - `intrinsic` signals to Stack and its StackItems to occupy their intrinsic size\n * - Any other size will extrinsically fill the available space along the axis of its orientation and handle overflow:\n * - `contain` causes StackItems to occupy their intrinsic size\n * - `split` divides the Stack’s available space among the StackItems\n */\nexport type Size = 'intrinsic' | 'contain' | 'split';\n\nexport const railGridHorizontal = 'grid-rows-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]';\nexport const railGridVertical = 'grid-cols-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]';\n\n// TODO(ZaymonFC): Magic 2px to stop overflow.\nexport const railGridHorizontalContainFitContent =\n 'grid-rows-[[rail-start]_var(--rail-size)_[content-start]_fit-content(calc(100%-var(--rail-size)*2+2px))_[content-end]]';\nexport const railGridVerticalContainFitContent =\n 'grid-cols-[[rail-start]_var(--rail-size)_[content-start]_fit-content(calc(100%-var(--rail-size)*2+2px))_[content-end]]';\n\nexport const autoScrollRootAttributes = { 'data-drag-autoscroll': 'idle' };\n\nconst PERPENDICULAR_FOCUS_THRESHHOLD = 128;\n\nconst scrollIntoViewAndFocus = (el: HTMLElement, orientation: StackProps['orientation']) => {\n el.scrollIntoView({\n behavior: 'instant',\n [orientation === 'vertical' ? 'block' : 'inline']: 'center',\n });\n return el.focus();\n};\n\nexport type StackProps = Omit<ThemedClassName<ComponentPropsWithRef<'div'>>, 'aria-orientation'> &\n Partial<StackContextValue> & {\n itemsCount?: number;\n getDropElement?: (stackElement: HTMLDivElement) => HTMLDivElement;\n separatorOnScroll?: number;\n circularFocus?: boolean;\n };\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n (\n {\n children,\n classNames,\n style,\n orientation = 'vertical',\n rail = true, // TODO(burdon): Change default to false.\n size = 'intrinsic',\n onRearrange,\n itemsCount = Children.count(children),\n getDropElement,\n separatorOnScroll,\n circularFocus,\n ...props\n },\n forwardedRef,\n ) => {\n const stackId = useId('stack', props.id);\n const [stackElement, stackRef] = useState<HTMLDivElement | null>(null);\n const [lastFocusedItem, setLastFocusedItem] = useState<string>();\n const composedItemRef = composeRefs<HTMLDivElement>(stackRef, forwardedRef);\n\n const styles: CSSProperties = {\n [orientation === 'horizontal' ? 'gridTemplateColumns' : 'gridTemplateRows']:\n size === 'split' ? `repeat(${itemsCount}, 1fr)` : `repeat(${itemsCount}, min-content) [tabster-dummies] 0`,\n ...style,\n };\n\n const selfDroppable = !!(itemsCount < 1 && onRearrange && props.id);\n\n const { dropping } = useStackDropForElements({\n id: props.id,\n element: getDropElement && stackElement ? getDropElement(stackElement) : stackElement,\n scrollElement: stackElement,\n selfDroppable,\n orientation,\n onRearrange,\n });\n\n const handleScroll = useCallback(() => {\n if (stackElement && Number.isFinite(separatorOnScroll)) {\n const scrollPosition = orientation === 'horizontal' ? stackElement.scrollLeft : stackElement.scrollTop;\n const scrollSize = orientation === 'horizontal' ? stackElement.scrollWidth : stackElement.scrollHeight;\n const clientSize = orientation === 'horizontal' ? stackElement.clientWidth : stackElement.clientHeight;\n const separatorHost = stackElement.closest('[data-scroll-separator]');\n if (separatorHost) {\n separatorHost.setAttribute('data-scroll-separator', String(scrollPosition > separatorOnScroll!));\n separatorHost.setAttribute(\n 'data-scroll-separator-end',\n String(scrollSize - (scrollPosition + clientSize) > separatorOnScroll!),\n );\n }\n }\n }, [stackElement, separatorOnScroll, orientation]);\n\n /**\n * Handles blur events to track the last focused item within this stack.\n */\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (event.target) {\n const target = event.target as HTMLElement;\n const closestStackItem = target.closest(`[data-dx-item-id]`) as HTMLElement | null;\n if (closestStackItem?.closest(`[data-dx-stack=\"${stackId}\"]`)) {\n setLastFocusedItem(closestStackItem?.getAttribute('data-dx-item-id') ?? undefined);\n }\n }\n props.onBlur?.(event);\n },\n [stackId, props.onBlur],\n );\n\n /**\n * Handles moving focus using the arrow keys. Focus is only handled by the nearest stack;\n * if the arrow key matches the orientation, focus cycles between items, otherwise focus is passed to an adjacent stack item;\n * or, if there is no such stack item, focus is passed to the adjacent empty stack if one can be found.\n */\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n if (\n event.key.startsWith('Arrow') &&\n !target.closest(\n `input, textarea, [role=\"textbox\"], [data-tabster*=\"mover\"], [data-arrow-keys=\"all\"], [data-arrow-keys~=\"${event.key.toLowerCase().slice(5)}\"]`,\n )\n ) {\n const closestOwnedItem = target.closest(`[data-dx-stack-item=\"${stackId}\"]`);\n const closestStack = target.closest('[data-dx-stack]') as HTMLElement | null;\n const closestStackItems = Array.from(\n closestStack?.querySelectorAll(`[data-dx-stack-item=\"${stackId}\"]`) ?? [],\n );\n const closestStackOrientation = closestStack?.getAttribute('aria-orientation') as Orientation;\n const ancestorStack = closestStack?.parentElement?.closest('[data-dx-stack]') as HTMLElement | null;\n if (closestOwnedItem && closestStack) {\n const ancestorOrientation = ancestorStack?.getAttribute('aria-orientation') as Orientation | undefined;\n const parallelDelta = (\n closestStackOrientation === 'vertical' ? event.key === 'ArrowUp' : event.key === 'ArrowLeft'\n )\n ? -1\n : (closestStackOrientation === 'vertical' ? event.key === 'ArrowDown' : event.key === 'ArrowRight')\n ? 1\n : 0;\n const perpendicularDelta = (\n closestStackOrientation === 'vertical' ? event.key === 'ArrowLeft' : event.key === 'ArrowUp'\n )\n ? -1\n : (closestStackOrientation === 'vertical' ? event.key === 'ArrowRight' : event.key === 'ArrowDown')\n ? 1\n : 0;\n if (parallelDelta !== 0) {\n const currentIndex = closestStackItems.indexOf(closestOwnedItem);\n const nextIndex = currentIndex + parallelDelta;\n let adjacentItem: HTMLElement | undefined;\n\n if (circularFocus) {\n // Circular navigation: wrap around using modulo.\n adjacentItem = closestStackItems[(nextIndex + closestStackItems.length) % closestStackItems.length] as\n | HTMLElement\n | undefined;\n } else {\n // Non-circular navigation: only move if within bounds.\n if (nextIndex >= 0 && nextIndex < closestStackItems.length) {\n adjacentItem = closestStackItems[nextIndex] as HTMLElement | undefined;\n }\n }\n\n if (adjacentItem) {\n event.preventDefault();\n scrollIntoViewAndFocus(adjacentItem, closestStackOrientation);\n }\n }\n if (perpendicularDelta !== 0) {\n if (ancestorStack && ancestorOrientation !== closestStackOrientation) {\n const siblingStacks = Array.from(\n ancestorStack.querySelectorAll(\n `[data-dx-stack-item=\"${ancestorStack.getAttribute('data-dx-stack')}\"] [data-dx-stack]`,\n ),\n ) as HTMLElement[];\n const currentStackIndex = siblingStacks.indexOf(closestStack);\n const nextStackIndex = currentStackIndex + perpendicularDelta;\n let adjacentStack: HTMLElement | undefined;\n\n if (ancestorStack.getAttribute('data-dx-stack-circular-focus') === 'true') {\n // Circular navigation: wrap around using modulo.\n adjacentStack = siblingStacks[(nextStackIndex + siblingStacks.length) % siblingStacks.length] as\n | HTMLElement\n | undefined;\n } else {\n // Non-circular navigation: only move if within bounds.\n if (nextStackIndex >= 0 && nextStackIndex < siblingStacks.length) {\n adjacentStack = siblingStacks[nextStackIndex] as HTMLElement | undefined;\n }\n }\n const adjacentStackSelfItem = adjacentStack?.closest(\n `[data-dx-stack-item=${ancestorStack.getAttribute('data-dx-stack')}]`,\n ) as HTMLElement | undefined;\n const adjacentStackItems = adjacentStack\n ? (Array.from(\n adjacentStack.querySelectorAll(\n `[data-dx-stack-item=\"${adjacentStack.getAttribute('data-dx-stack')}\"]`,\n ),\n ) as HTMLElement[])\n : [];\n if (adjacentStack && adjacentStackItems.length > 0) {\n // Check if the adjacent stack has a last focused item recorded, otherwise find the closest item by position.\n let closestItem = adjacentStackItems[0];\n // Try to find an item with matching data-dx-stack-item value.\n const lastFocusedItem = adjacentStack.querySelector(\n `[data-dx-item-id=\"${adjacentStack.getAttribute('data-dx-last-focused-item') ?? 'never'}\"]`,\n );\n if (lastFocusedItem) {\n closestItem = lastFocusedItem as HTMLElement;\n } else {\n // Fall back to positional calculation\n const ownedItemRect = closestOwnedItem.getBoundingClientRect();\n const targetPosition =\n closestStackOrientation === 'vertical' ? ownedItemRect.top : ownedItemRect.left;\n\n let closestDistance = Infinity;\n for (const item of adjacentStackItems) {\n const itemRect = item.getBoundingClientRect();\n const itemPosition = closestStackOrientation === 'vertical' ? itemRect.top : itemRect.left;\n const distance = Math.abs(itemPosition - targetPosition);\n if (distance < closestDistance) {\n closestDistance = distance;\n closestItem = item;\n }\n if (closestDistance <= PERPENDICULAR_FOCUS_THRESHHOLD) {\n break;\n }\n }\n }\n\n event.preventDefault();\n scrollIntoViewAndFocus(closestItem, closestStackOrientation);\n } else if (adjacentStackSelfItem) {\n event.preventDefault();\n scrollIntoViewAndFocus(adjacentStackSelfItem, ancestorOrientation);\n }\n } else if (closestOwnedItem) {\n const closestOwnedItemStack = closestOwnedItem.querySelector('[data-dx-stack]');\n const closestOwnedItemStackItems = closestOwnedItemStack\n ? (Array.from(\n closestOwnedItemStack.querySelectorAll(\n `[data-dx-stack-item=\"${closestOwnedItemStack.getAttribute('data-dx-stack')}\"]`,\n ),\n ) as HTMLElement[])\n : [];\n if (closestOwnedItemStackItems.length > 0) {\n event.preventDefault();\n scrollIntoViewAndFocus(\n closestOwnedItemStackItems[\n ['ArrowUp', 'ArrowLeft'].includes(event.key) ? closestOwnedItemStackItems.length - 1 : 0\n ],\n closestOwnedItemStack?.getAttribute('aria-orientation') as Orientation,\n );\n }\n }\n }\n }\n }\n props.onKeyDown?.(event);\n },\n [props.onKeyDown, stackId, circularFocus],\n );\n\n const gridClasses = useMemo(() => {\n if (!rail) {\n return orientation === 'horizontal' ? 'grid-rows-1 pli-[--stack-gap]' : 'grid-cols-1 plb-[--stack-gap]';\n }\n\n if (orientation === 'horizontal') {\n return railGridHorizontal;\n } else {\n return railGridVertical;\n }\n }, [rail, orientation, size]);\n\n useEffect(() => {\n if (!(stackElement && Number.isFinite(separatorOnScroll))) {\n return;\n }\n\n const observer = new MutationObserver(() => {\n handleScroll();\n });\n\n observer.observe(stackElement, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n };\n }, [stackElement, handleScroll]);\n\n return (\n <StackContext.Provider value={{ orientation, rail, size, onRearrange, stackId }}>\n <div\n {...props}\n className={mx(\n 'grid relative [--stack-gap:var(--dx-trimXs)]',\n gridClasses,\n size === 'contain' &&\n (orientation === 'horizontal'\n ? 'overflow-x-auto overscroll-x-contain min-bs-0 max-bs-full bs-full'\n : 'overflow-y-auto min-is-0 max-is-full is-full'),\n classNames,\n )}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n data-dx-stack={stackId}\n data-dx-stack-circular-focus={circularFocus}\n data-dx-last-focused-item={lastFocusedItem}\n data-rail={rail}\n aria-orientation={orientation}\n style={styles}\n ref={composedItemRef}\n {...(Number.isFinite(separatorOnScroll) && { onScroll: handleScroll })}\n >\n {children}\n {selfDroppable && dropping && (\n <ListItem.DropIndicator\n lineInset={8}\n terminalInset={-8}\n gap={-8}\n edge={orientation === 'horizontal' ? 'left' : 'top'}\n />\n )}\n </div>\n </StackContext.Provider>\n );\n },\n);\n\nexport { StackContext };\n\nexport type { StackContextValue };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { attachClosestEdge, extractClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { useLayoutEffect, useState } from 'react';\n\nimport { type Orientation, type StackItemData, type StackItemRearrangeHandler } from '../components';\n\nconst noop = () => {};\n\n/**\n * Hook to handle drag and drop functionality for Stack components.\n */\nexport const useStackDropForElements = ({\n id,\n element,\n scrollElement = element,\n orientation,\n selfDroppable,\n onRearrange,\n}: {\n id?: string;\n element: HTMLDivElement | null;\n scrollElement?: HTMLDivElement | null;\n orientation: Orientation;\n selfDroppable: boolean;\n onRearrange?: StackItemRearrangeHandler;\n}) => {\n const [dropping, setDropping] = useState(false);\n\n useLayoutEffect(() => {\n if (!element) {\n return;\n }\n\n const acceptSourceType = orientation === 'horizontal' ? 'column' : 'card';\n\n return combine(\n selfDroppable\n ? dropTargetForElements({\n element,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id, type: orientation === 'horizontal' ? 'card' : 'column' },\n { input, element, allowedEdges: [orientation === 'horizontal' ? 'left' : 'top'] },\n );\n },\n onDragEnter: ({ source }) => {\n if (source.data.type === acceptSourceType) {\n setDropping(true);\n }\n },\n onDrag: ({ source }) => {\n if (source.data.type === acceptSourceType) {\n setDropping(true);\n }\n },\n onDragLeave: () => {\n return setDropping(false);\n },\n onDrop: ({ self, source }) => {\n setDropping(false);\n if (source.data.type === acceptSourceType && selfDroppable && onRearrange) {\n onRearrange(source.data as StackItemData, self.data as StackItemData, extractClosestEdge(self.data));\n }\n },\n })\n : noop,\n\n scrollElement\n ? autoScrollForElements({\n element: scrollElement,\n getAllowedAxis: () => orientation,\n })\n : noop,\n );\n }, [element, scrollElement, selfDroppable, orientation, id, onRearrange]);\n\n return { dropping };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = 'react-ui-stack';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'resize label': 'Drag to resize',\n 'drag handle label': 'Drag to rearrange',\n 'pin start label': 'Pin to the left sidebar',\n 'pin end label': 'Pin to the right sidebar',\n 'increment start label': 'Move to the left',\n 'increment end label': 'Move to the right',\n 'close label': 'Close',\n 'minify label': 'Minify',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport React, {\n type ComponentPropsWithRef,\n type ReactNode,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { ListItem, type ThemedClassName } from '@dxos/react-ui';\nimport { resizeAttributes, sizeStyle } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type StackItemData, type StackItemSize } from '../defs';\nimport { type ItemDragState, StackItemContext, idle, useStack, useStackItem } from '../StackContext';\n\nimport { StackItemContent, type StackItemContentProps } from './StackItemContent';\nimport { StackItemDragHandle, type StackItemDragHandleProps } from './StackItemDragHandle';\nimport {\n StackItemHeading,\n StackItemHeadingLabel,\n type StackItemHeadingLabelProps,\n type StackItemHeadingProps,\n StackItemHeadingStickyContent,\n} from './StackItemHeading';\nimport { StackItemResizeHandle, type StackItemResizeHandleProps } from './StackItemResizeHandle';\nimport {\n StackItemSigil,\n type StackItemSigilAction,\n StackItemSigilButton,\n type StackItemSigilButtonProps,\n type StackItemSigilProps,\n} from './StackItemSigil';\n\n// NOTE: 48rem fills the screen on a MacbookPro with the sidebars closed.\nexport const DEFAULT_HORIZONTAL_SIZE = 48 satisfies StackItemSize;\nexport const DEFAULT_VERTICAL_SIZE = 'min-content' satisfies StackItemSize;\nexport const DEFAULT_EXTRINSIC_SIZE = DEFAULT_HORIZONTAL_SIZE satisfies StackItemSize;\n\ntype StackItemRootProps = ThemedClassName<ComponentPropsWithRef<'div'>> & {\n item: Omit<StackItemData, 'type'>;\n order?: number;\n prevSiblingId?: string;\n nextSiblingId?: string;\n size?: StackItemSize;\n onSizeChange?: (nextSize: StackItemSize) => void;\n role?: 'article' | 'section';\n disableRearrange?: boolean;\n focusIndicatorVariant?: 'over-all' | 'group' | 'over-all-always' | 'group-always';\n};\n\nconst StackItemRoot = forwardRef<HTMLDivElement, StackItemRootProps>(\n (\n {\n item,\n children,\n classNames,\n size: propsSize,\n onSizeChange,\n role,\n order,\n prevSiblingId,\n nextSiblingId,\n style,\n disableRearrange,\n focusIndicatorVariant = 'over-all',\n ...props\n },\n forwardedRef,\n ) => {\n const [itemElement, itemRef] = useState<HTMLDivElement | null>(null);\n const [selfDragHandleElement, selfDragHandleRef] = useState<HTMLDivElement | null>(null);\n const [closestEdge, setEdge] = useState<Edge | null>(null);\n const [sourceId, setSourceId] = useState<string | null>(null);\n const [dragState, setDragState] = useState<ItemDragState>(idle);\n const { orientation, rail, onRearrange, size: stackSize, stackId } = useStack();\n const [size = orientation === 'horizontal' ? DEFAULT_HORIZONTAL_SIZE : DEFAULT_VERTICAL_SIZE, setInternalSize] =\n useState(propsSize);\n\n const Root = role ?? 'div';\n\n const composedItemRef = composeRefs<HTMLDivElement>(itemRef, forwardedRef);\n\n const setSize = useCallback(\n (nextSize: StackItemSize, commit?: boolean) => {\n setInternalSize(nextSize);\n if (commit) {\n onSizeChange?.(nextSize);\n }\n },\n [onSizeChange],\n );\n\n const type = orientation === 'horizontal' ? 'column' : 'card';\n\n useLayoutEffect(() => {\n if (!itemElement || !onRearrange || disableRearrange) {\n return;\n }\n\n return combine(\n draggable({\n element: itemElement,\n ...(selfDragHandleElement && { dragHandle: selfDragHandleElement }),\n getInitialData: () => ({ id: item.id, type }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n document.body.setAttribute('data-drag-preview', 'true');\n const offsetFn = preserveOffsetOnSource({ element: source.element, input: location.current.input });\n const rect = source.element.getBoundingClientRect();\n setCustomNativeDragPreview({\n nativeSetDragImage,\n getOffset: ({ container }) => {\n return offsetFn({ container });\n },\n render: ({ container }) => {\n container.style.width = rect.width + 'px';\n setDragState({ type: 'preview', container, item });\n return () => {};\n },\n });\n },\n onDragStart: () => {\n document.body.removeAttribute('data-drag-preview');\n itemElement?.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'active');\n setDragState({ type: 'is-dragging', item });\n },\n onDrop: () => {\n itemElement?.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'idle');\n setDragState(idle);\n },\n }),\n dropTargetForElements({\n element: itemElement,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: item.id, type },\n { input, element, allowedEdges: orientation === 'horizontal' ? ['left', 'right'] : ['top', 'bottom'] },\n );\n },\n onDragEnter: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n setSourceId(source.data.id as string);\n }\n },\n onDrag: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n setSourceId(source.data.id as string);\n }\n },\n onDragLeave: () => {\n setEdge(null);\n setSourceId(null);\n },\n onDrop: ({ self, source }) => {\n setEdge(null);\n setSourceId(null);\n if (source.data.type === self.data.type) {\n onRearrange(source.data as StackItemData, self.data as StackItemData, extractClosestEdge(self.data));\n }\n },\n }),\n );\n }, [orientation, item, onRearrange, selfDragHandleElement, itemElement]);\n\n const focusableGroupAttrs = useFocusableGroup({ tabBehavior: 'limited' });\n\n // Determine if the drop would result in any changes\n const shouldShowDropIndicator = () => {\n if (!closestEdge || !sourceId) {\n return false;\n }\n\n // Don't show indicator when dragged item is over itself\n if (sourceId === item.id) {\n return false;\n }\n\n // Don't show indicator when dragged item is over the trailing edge of its previous sibling\n const isTrailingEdgeOfPrevSibling =\n prevSiblingId !== undefined &&\n sourceId === prevSiblingId &&\n ((orientation === 'horizontal' && closestEdge === 'left') ||\n (orientation === 'vertical' && closestEdge === 'top'));\n if (isTrailingEdgeOfPrevSibling) {\n return false;\n }\n\n // Don't show indicator when dragged item is over the leading edge of its next sibling\n const isLeadingEdgeOfNextSibling =\n nextSiblingId !== undefined &&\n sourceId === nextSiblingId &&\n ((orientation === 'horizontal' && closestEdge === 'right') ||\n (orientation === 'vertical' && closestEdge === 'bottom'));\n if (isLeadingEdgeOfNextSibling) {\n return false;\n }\n\n return true;\n };\n\n const stackItemContextValue = useMemo(\n () => ({ selfDragHandleRef, size, setSize, state: dragState, setState: setDragState, role }),\n [selfDragHandleRef, size, setSize, dragState, setDragState, role],\n );\n\n return (\n <StackItemContext.Provider value={stackItemContextValue}>\n <Root\n {...props}\n tabIndex={0}\n {...focusableGroupAttrs}\n className={mx(\n 'group/stack-item grid relative',\n focusIndicatorVariant === 'over-all'\n ? 'dx-focus-ring-inset-over-all'\n : focusIndicatorVariant === 'over-all-always'\n ? 'dx-focus-ring-inset-over-all-always'\n : orientation === 'horizontal'\n ? focusIndicatorVariant === 'group-always'\n ? 'dx-focus-ring-group-x-always'\n : 'dx-focus-ring-group-x'\n : focusIndicatorVariant === 'group-always'\n ? 'dx-focus-ring-group-y-always'\n : 'dx-focus-ring-group-y',\n orientation === 'horizontal' ? 'grid-rows-subgrid' : 'grid-cols-subgrid',\n rail && (orientation === 'horizontal' ? 'row-span-2' : 'col-span-2'),\n role === 'section' && orientation !== 'horizontal' && 'border-be border-subduedSeparator',\n classNames,\n )}\n data-dx-stack-item={stackId}\n data-dx-item-id={item.id}\n {...resizeAttributes}\n style={{\n ...(stackSize !== 'split' && sizeStyle(size, orientation)),\n ...(Number.isFinite(order) && {\n [orientation === 'horizontal' ? 'gridColumn' : 'gridRow']: `${order}`,\n }),\n ...style,\n }}\n ref={composedItemRef}\n >\n {children}\n {shouldShowDropIndicator() && closestEdge && (\n <ListItem.DropIndicator lineInset={8} terminalInset={-8} edge={closestEdge} />\n )}\n </Root>\n </StackItemContext.Provider>\n );\n },\n);\n\ntype StackItemDragPreviewProps = {\n children: ({ item }: { item: any }) => ReactNode;\n};\n\nexport const StackItemDragPreview = ({ children }: StackItemDragPreviewProps) => {\n const { state } = useStackItem();\n return state?.type === 'preview' ? createPortal(children({ item: state.item }), state.container) : null;\n};\n\nexport const StackItem = {\n Root: StackItemRoot,\n Content: StackItemContent,\n Heading: StackItemHeading,\n HeadingLabel: StackItemHeadingLabel,\n HeadingStickyContent: StackItemHeadingStickyContent,\n ResizeHandle: StackItemResizeHandle,\n DragHandle: StackItemDragHandle,\n Sigil: StackItemSigil,\n SigilButton: StackItemSigilButton,\n DragPreview: StackItemDragPreview,\n};\n\nexport type {\n StackItemRootProps,\n StackItemContentProps,\n StackItemHeadingProps,\n StackItemHeadingLabelProps,\n StackItemResizeHandleProps,\n StackItemDragHandleProps,\n StackItemSigilProps,\n StackItemSigilButtonProps,\n StackItemSigilAction,\n StackItemDragPreviewProps,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, forwardRef, useMemo } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack, useStackItem } from '../StackContext';\n\n// TODO(burdon): Add prop for container-max-width?\nexport type StackItemContentProps = ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'role' | 'scrollable'>> & {\n /**\n * This flag is required in order to clarify a developer experience that seemed like it needed extra boilerplate\n * (`row-span-2`) or was buggy. See the description of the StackItem.Content component itself for more information.\n */\n toolbar?: boolean;\n\n /**\n * Whether to provide for the layout of a statusbar after the content.\n */\n statusbar?: boolean;\n\n /**\n * Whether to support y-axis scrolling.\n */\n scrollable?: boolean;\n\n /**\n * Whether to set a certain aspect ratio on the content, including the toolbar and statusbar.\n * This is provided for convenience and consistency; it can instead be specified by the `classNames` or `style` props as needed.\n */\n size?: 'intrinsic' | 'video' | 'square';\n\n /**\n * Whether the consumer intends to do something custom and typical affordances should not apply.\n * @deprecated Replace with override for gridTempateRows.\n */\n layoutManaged?: boolean;\n};\n\n/**\n * This component should be used by plugins for rendering content within a stack item, a.k.a. a “plank” or “section”.\n * The `toolbar` flag must be provided since this component provides for the layout of content with the toolbar.\n */\nexport const StackItemContent = forwardRef<HTMLDivElement, StackItemContentProps>(\n (\n { children, toolbar, statusbar, layoutManaged, classNames, size = 'intrinsic', scrollable, ...props },\n forwardedRef,\n ) => {\n const { size: stackItemSize } = useStack();\n const { role } = useStackItem();\n const style = useMemo(\n () =>\n layoutManaged\n ? {}\n : {\n gridTemplateRows: [\n ...(toolbar ? [role === 'section' ? 'calc(var(--toolbar-size) - 1px)' : 'var(--toolbar-size)'] : []),\n '1fr',\n ...(statusbar ? ['var(--statusbar-size)'] : []),\n ].join(' '),\n },\n [toolbar, statusbar, layoutManaged],\n );\n\n return (\n <div\n role='none'\n {...props}\n className={mx(\n 'group grid grid-cols-[100%] density-coarse',\n size === 'video' ? 'aspect-video' : size === 'square' && 'aspect-square',\n stackItemSize === 'contain' && 'min-bs-0 overflow-hidden',\n scrollable ? 'min-bs-0 overflow-y-auto scrollbar-thin contain-layout' : 'overflow-hidden',\n role === 'section' &&\n toolbar &&\n '[&_.dx-toolbar]:sticky [&_.dx-toolbar]:z-[1] [&_.dx-toolbar]:block-start-0 [&_.dx-toolbar]:-mbe-px [&_.dx-toolbar]:min-is-0',\n toolbar && '[&>.dx-toolbar]:relative [&>.dx-toolbar]:border-be [&>.dx-toolbar]:border-subduedSeparator',\n classNames,\n )}\n style={style}\n data-popover-collision-boundary={true}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type ComponentPropsWithoutRef } from 'react';\n\nimport { useStackItem } from '../StackContext';\n\nexport type StackItemDragHandleProps = ComponentPropsWithoutRef<'button'> & { asChild?: boolean };\n\nexport const StackItemDragHandle = ({ asChild, children }: StackItemDragHandleProps) => {\n const { selfDragHandleRef } = useStackItem();\n\n const Root = asChild ? Slot : 'div';\n\n return (\n <Root ref={selfDragHandleRef} role='button'>\n {children}\n </Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Slot } from '@radix-ui/react-slot';\nimport React, {\n type ComponentPropsWithRef,\n type ComponentPropsWithoutRef,\n type PropsWithChildren,\n forwardRef,\n} from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { type AttendableId, type Related, useAttention } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack } from '../StackContext';\n\nexport type StackItemHeadingProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {\n asChild?: boolean;\n separateOnScroll?: boolean;\n};\n\nexport const StackItemHeading = ({\n children,\n classNames,\n asChild,\n separateOnScroll,\n ...props\n}: StackItemHeadingProps) => {\n const { orientation } = useStack();\n\n const Root = asChild ? Slot : 'div';\n\n return (\n <Root\n role='heading'\n {...props}\n className={mx(\n 'flex items-center !border-is-0 bg-headerSurface',\n separateOnScroll\n ? 'border-transparent [[data-scroll-separator=\"true\"]_&]:border-subduedSeparator'\n : 'border-subduedSeparator',\n orientation === 'horizontal' ? 'bs-[--rail-size]' : 'is-[--rail-size] flex-col',\n orientation === 'horizontal' ? 'border-be' : 'border-ie',\n classNames,\n )}\n >\n {children}\n </Root>\n );\n};\n\nexport const StackItemHeadingStickyContent = ({ children }: PropsWithChildren<{}>) => {\n return (\n <div role='none' className='sticky block-start-0 bg-[--sticky-bg] p-1 is-full'>\n {children}\n </div>\n );\n};\n\nexport type StackItemHeadingLabelProps = ThemedClassName<ComponentPropsWithRef<'h1'>> & AttendableId & Related;\n\nexport const StackItemHeadingLabel = forwardRef<HTMLHeadingElement, StackItemHeadingLabelProps>(\n ({ attendableId, related, classNames, ...props }, forwardedRef) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(attendableId);\n\n return (\n <h1\n {...props}\n data-attention={((related && isRelated) || hasAttention || isAncestor).toString()}\n className={mx(\n 'pli-1 min-is-0 is-0 grow truncate font-medium text-baseText data-[attention=true]:text-accentText self-center',\n classNames,\n )}\n ref={forwardedRef}\n />\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { ResizeHandle } from '@dxos/react-ui-dnd';\n\nimport { useStack, useStackItem } from '../StackContext';\n\nimport { DEFAULT_EXTRINSIC_SIZE } from './StackItem';\n\nconst MIN_WIDTH = 20;\nconst MIN_HEIGHT = 3;\n\nexport type StackItemResizeHandleProps = {};\n\nexport const StackItemResizeHandle = () => {\n const { orientation } = useStack();\n const { setSize, size } = useStackItem();\n\n return (\n <ResizeHandle\n side={orientation === 'horizontal' ? 'inline-end' : 'block-end'}\n fallbackSize={DEFAULT_EXTRINSIC_SIZE}\n minSize={orientation === 'horizontal' ? MIN_WIDTH : MIN_HEIGHT}\n size={size}\n onSizeChange={setSize}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, type PropsWithChildren, forwardRef, useState } from 'react';\n\nimport { type ActionLike } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport { Button, type ButtonProps, DropdownMenu, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type AttendableId, type Related, useAttention } from '@dxos/react-ui-attention';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { translationKey } from '../../translations';\n\nimport { MenuSignifierHorizontal } from './MenuSignifier';\n\nexport type KeyBinding = {\n windows?: string;\n macos?: string;\n ios?: string;\n linux?: string;\n unknown?: string;\n};\n\nexport type StackItemSigilAction = Pick<ActionLike, 'id' | 'properties' | 'data'>;\n\nexport type StackItemSigilButtonProps = Omit<ButtonProps, 'variant'> &\n AttendableId &\n Related & {\n isMenu?: boolean;\n };\n\nexport const StackItemSigilButton = forwardRef<HTMLButtonElement, StackItemSigilButtonProps>(\n ({ attendableId, classNames, related, isMenu = true, children, ...props }, forwardedRef) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(attendableId);\n const variant = (related && isRelated) || hasAttention || isAncestor ? 'primary' : 'ghost';\n // TODO(wittjosiah): Disable hover styles when isMenu is false.\n return (\n <Button\n {...props}\n variant={variant}\n classNames={['shrink-0 pli-0 min-bs-0 is-[--rail-action] bs-[--rail-action] relative app-no-drag', classNames]}\n ref={forwardedRef}\n >\n {isMenu && <MenuSignifierHorizontal />}\n {children}\n </Button>\n );\n },\n);\n\nexport type StackItemSigilProps = PropsWithChildren<\n {\n attendableId?: string;\n triggerLabel: string;\n actions?: StackItemSigilAction[][];\n icon: string;\n onAction?: (action: StackItemSigilAction) => void;\n } & Related\n>;\n\nexport const StackItemSigil = forwardRef<HTMLButtonElement, StackItemSigilProps>(\n ({ actions: actionGroups, onAction, triggerLabel, attendableId, icon, related, children }, forwardedRef) => {\n const { t } = useTranslation(translationKey);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);\n\n const hasActions = actionGroups && actionGroups.length > 0;\n\n const button = (\n <StackItemSigilButton\n attendableId={attendableId}\n related={related}\n isMenu={hasActions}\n // TODO(wittjosiah): Better disabling of interactive styles when no action are available.\n // Remove underscore icon when no actions are available?\n classNames={!hasActions && 'cursor-default'}\n >\n <span className='sr-only'>{triggerLabel}</span>\n <Icon icon={icon} size={5} />\n </StackItemSigilButton>\n );\n\n if (!hasActions) {\n return button;\n }\n\n return (\n <DropdownMenu.Root open={optionsMenuOpen} onOpenChange={setOptionsMenuOpen}>\n <DropdownMenu.Trigger asChild ref={forwardedRef}>\n {button}\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content classNames='z-[31]'>\n <DropdownMenu.Viewport>\n {actionGroups?.map((actions, index) => {\n const separator = index > 0 ? <DropdownMenu.Separator /> : null;\n return (\n <Fragment key={index}>\n {separator}\n {actions.map((action) => {\n const shortcut =\n typeof action.properties.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties.keyBinding?.[getHostPlatform()];\n\n const menuItemType = action.properties.menuItemType;\n const Root = menuItemType === 'toggle' ? DropdownMenu.CheckboxItem : DropdownMenu.Item;\n\n return (\n <Root\n key={action.id}\n onClick={(event) => {\n if (action.properties.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties.disabled}\n checked={menuItemType === 'toggle' ? action.properties.isChecked : undefined}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon ?? 'ph--placeholder--regular'} size={4} />\n <span className='grow truncate'>{toLocalizedString(action.properties.label ?? '', t)}</span>\n {menuItemType === 'toggle' && (\n <DropdownMenu.ItemIndicator asChild>\n <Icon icon='ph--check--regular' size={4} />\n </DropdownMenu.ItemIndicator>\n )}\n {shortcut && (\n <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>\n )}\n </Root>\n );\n })}\n </Fragment>\n );\n })}\n {children}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nexport const MenuSignifierHorizontal = () => (\n <svg\n className='absolute block-end-[7px]'\n width={20}\n height={2}\n viewBox='0 0 20 2'\n stroke='currentColor'\n opacity={0.5}\n >\n <line\n x1={0.5}\n y1={0.75}\n x2={19}\n y2={0.75}\n strokeWidth={1.25}\n strokeLinecap='round'\n strokeDasharray='6 20'\n strokeDashoffset='-6.5'\n />\n </svg>\n);\n\nexport const MenuSignifierVertical = () => (\n <svg className='absolute inline-start-1' width={2} height={18} viewBox='0 0 2 18' stroke='currentColor'>\n <line x1={1} y1={3} x2={1} y2={18} strokeWidth={1.5} strokeLinecap='round' strokeDasharray='0 6' />\n </svg>\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport const cardRoot =\n 'rounded overflow-hidden bg-cardSurface border border-separator dark:border-subduedSeparator dx-focus-ring-group-y-indicator relative min-bs-[--rail-item] group/card';\n\nexport const cardSpacing = 'pli-cardSpacingInline mlb-cardSpacingBlock';\nexport const cardNoSpacing = 'pli-0 mlb-0';\nexport const labelSpacing = 'mbs-inputSpacingBlock mbe-labelSpacingBlock';\n\nexport const cardDialogContent = 'p-0 bs-content min-bs-[8rem] max-bs-full md:max-is-[32rem] overflow-hidden';\nexport const cardDialogHeader = 'pli-cardSpacingInline mbs-cardSpacingBlock flex justify-between';\nexport const cardDialogOverflow = 'overflow-y-auto min-bs-0 flex-1';\nexport const cardDialogPaddedOverflow = `${cardDialogOverflow} plb-cardSpacingBlock`;\nexport const cardDialogSearchListRoot =\n 'pli-cardSpacingInline pbs-cardSpacingBlock [&>input]:mbe-0 min-bs-0 flex-1 flex flex-col';\n\nexport const cardText = cardSpacing;\n\nexport const cardHeading = 'text-lg font-medium line-clamp-2 grow';\n\nexport const cardChrome =\n 'pli-[--dx-cardSpacingChrome] mlb-[--dx-cardSpacingChrome] [&_.dx-button]:text-start [&_.dx-button]:is-full [&_.dx-button]:pis-[calc(var(--dx-cardSpacingInline)-var(--dx-cardSpacingChrome))]';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, {\n type ComponentPropsWithRef,\n type ComponentPropsWithoutRef,\n type FC,\n type PropsWithChildren,\n forwardRef,\n} from 'react';\n\nimport { Icon, IconButton, type ThemedClassName, Toolbar, type ToolbarRootProps, useTranslation } from '@dxos/react-ui';\nimport { cardMinInlineSize, hoverableControls, mx } from '@dxos/react-ui-theme';\n\nimport { Image, StackItem } from '../../components';\nimport { translationKey } from '../../translations';\n\nimport { cardChrome, cardHeading, cardRoot, cardSpacing, cardText } from './fragments';\n\n/**\n * The default width of cards. It should be no larger than 320px per WCAG 2.1 SC 1.4.10.\n */\nconst cardDefaultInlineSize = cardMinInlineSize;\n\n/**\n * This is `cardDefaultInlineSize` plus 2 times the sum of the inner and outer spacing applied by CardStack on the inline axis.\n */\nconst cardStackDefaultInlineSizeRem = cardDefaultInlineSize + 2.125;\n\ntype SharedCardProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & { asChild?: boolean };\n\nconst CardStaticRoot = forwardRef<HTMLDivElement, SharedCardProps & { id?: string }>(\n ({ children, classNames, id, asChild, role = 'group', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild ? { classNames: [cardRoot, classNames] } : { className: mx(cardRoot, classNames), role };\n return (\n <Root {...(id && { 'data-object-id': id })} {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\n/**\n * This should be used by Surface fulfillments in cases where the content may or may not already be encapsulated (e.g., in a Popover) and knows this based on the `role` it receives.\n * This will render a `Card.StaticRoot` by default, otherwise it will render a `div` primitive with the appropriate styling for specific handled situations.\n */\nconst CardSurfaceRoot = ({\n id,\n role = 'never',\n children,\n classNames,\n}: ThemedClassName<PropsWithChildren<{ id?: string; role?: string }>>) => {\n if (['card--popover', 'card--intrinsic', 'card--extrinsic'].includes(role)) {\n return (\n <div\n {...(id && { 'data-object-id': id })}\n className={mx(\n role === 'card--popover'\n ? 'popover-card-width'\n : ['card--intrinsic', 'card--extrinsic'].includes(role)\n ? 'contents'\n : '',\n classNames,\n )}\n >\n {children}\n </div>\n );\n } else {\n return (\n <CardStaticRoot\n id={id}\n classNames={[\n role === 'card--transclusion' && 'mlb-1',\n role === 'card--transclusion' && hoverableControls,\n classNames,\n ]}\n >\n {children}\n </CardStaticRoot>\n );\n }\n};\n\nconst CardHeading = forwardRef<HTMLDivElement, SharedCardProps>(\n ({ children, classNames, asChild, role = 'heading', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild\n ? { classNames: [cardHeading, cardText, classNames] }\n : { className: mx(cardHeading, cardText, classNames), role };\n return (\n <Root {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nconst CardToolbar = forwardRef<HTMLDivElement, ToolbarRootProps>(({ children, classNames, ...props }, forwardedRef) => {\n return (\n <Toolbar.Root {...props} classNames={['bg-transparent density-coarse', classNames]} ref={forwardedRef}>\n {children}\n </Toolbar.Root>\n );\n});\n\nconst CardToolbarIconButton = Toolbar.IconButton;\nconst CardToolbarSeparator = Toolbar.Separator;\n\nconst CardDragHandle = forwardRef<HTMLButtonElement, { toolbarItem?: boolean }>(({ toolbarItem }, forwardedRef) => {\n const { t } = useTranslation(translationKey);\n const Root = toolbarItem ? Toolbar.IconButton : IconButton;\n return (\n <Root\n iconOnly\n icon='ph--dots-six-vertical--regular'\n variant='ghost'\n label={t('drag handle label')}\n classNames='pli-2'\n ref={forwardedRef}\n />\n );\n});\n\nconst CardDragPreview = StackItem.DragPreview;\n\nconst CardMenu = Primitive.div as FC<ComponentPropsWithRef<'div'>>;\n\ntype CardPosterProps = ThemedClassName<\n {\n alt: string;\n aspect?: 'video' | 'auto';\n } & Partial<{ image: string; icon: string }>\n>;\n\nconst CardPoster = (props: CardPosterProps) => {\n const aspect = props.aspect === 'auto' ? 'aspect-auto' : 'aspect-video';\n if (props.image) {\n return (\n <Image classNames={[`dx-card__poster is-full`, aspect, props.classNames]} src={props.image} alt={props.alt} />\n );\n }\n\n if (props.icon) {\n return (\n <div\n role='image'\n className={mx(`dx-card__poster grid place-items-center bg-inputSurface text-subdued`, aspect, props.classNames)}\n aria-label={props.alt}\n >\n <Icon icon={props.icon} size={10} />\n </div>\n );\n }\n};\n\nconst CardChrome = forwardRef<HTMLDivElement, SharedCardProps>(\n ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild\n ? { classNames: [cardChrome, classNames] }\n : { className: mx(cardChrome, classNames), role };\n return (\n <Root {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nconst CardText = forwardRef<HTMLDivElement, SharedCardProps>(\n ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild ? { classNames: [cardText, classNames] } : { className: mx(cardText, classNames), role };\n return (\n <Root {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nexport const Card = {\n StaticRoot: CardStaticRoot,\n SurfaceRoot: CardSurfaceRoot,\n Heading: CardHeading,\n Toolbar: CardToolbar,\n ToolbarIconButton: CardToolbarIconButton,\n ToolbarSeparator: CardToolbarSeparator,\n DragHandle: CardDragHandle,\n DragPreview: CardDragPreview,\n Menu: CardMenu,\n Poster: CardPoster,\n Chrome: CardChrome,\n Text: CardText,\n};\n\nexport {\n cardRoot,\n cardHeading,\n cardText,\n cardChrome,\n cardSpacing,\n cardStackDefaultInlineSizeRem,\n cardDefaultInlineSize,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { cardRoot } from './fragments';\n\nconst CardDragPreviewRoot = ({ children }: PropsWithChildren<{}>) => {\n return <div className='p-2'>{children}</div>;\n};\n\nconst CardDragPreviewContent = ({ children }: PropsWithChildren<{}>) => {\n return <div className={mx(cardRoot, 'ring-focusLine ring-neutralFocusIndicator')}>{children}</div>;\n};\n\nexport const CardDragPreview = {\n Root: CardDragPreviewRoot,\n Content: CardDragPreviewContent,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport type { ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Stack, type StackProps, railGridHorizontalContainFitContent } from '../../components';\nimport { Card } from '../Card';\n\ntype SharedCardStackProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & { asChild?: boolean };\n\nconst CardStackStack = forwardRef<\n HTMLDivElement,\n Omit<StackProps, 'orientation' | 'size' | 'rail' | 'separatorOnScroll'>\n>(({ children, classNames, itemsCount = 0, ...props }, forwardedRef) => {\n return (\n <Stack\n orientation='vertical'\n size='contain'\n rail={false}\n classNames={\n /* NOTE(thure): Do not let this element have zero intrinsic size, otherwise the drop indicator will not display. See #9035. */\n ['plb-1', itemsCount > 0 && 'plb-2', classNames]\n }\n itemsCount={itemsCount}\n separatorOnScroll={9}\n data-density='fine'\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Stack>\n );\n});\n\nconst CardStackDragHandle = Card.DragHandle;\n\nconst cardStackHeading = 'mli-2 order-first bg-transparent rounded-bs-md flex items-center';\n\nconst CardStackHeading = forwardRef<HTMLDivElement, SharedCardStackProps>(\n ({ children, classNames, asChild, role = 'heading', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild\n ? { classNames: [cardStackHeading, classNames] }\n : { className: mx(cardStackHeading, classNames), role };\n return (\n <Root {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nconst cardStackFooter =\n 'plb-2 mli-2 border-bs border-transparent [[data-scroll-separator-end=\"true\"]_&]:border-subduedSeparator';\n\nconst CardStackFooter = forwardRef<HTMLDivElement, SharedCardStackProps>(\n ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild\n ? { classNames: [cardStackFooter, classNames] }\n : { className: mx(cardStackFooter, classNames), role };\n return (\n <Root {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nconst cardStackContent =\n 'shrink min-bs-0 bg-baseSurface border border-separator rounded-md grid dx-focus-ring-group-x-indicator kanban-drop';\n\ntype CardStackContentProps = SharedCardStackProps & {\n footer?: boolean;\n};\n\nconst CardStackContent = forwardRef<HTMLDivElement, CardStackContentProps>(\n ({ children, classNames, asChild, role = 'none', footer = true, ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const baseClassNames = footer ? [cardStackContent, railGridHorizontalContainFitContent] : [cardStackContent];\n const rootProps = asChild\n ? { classNames: [...baseClassNames, classNames] }\n : { className: mx(...baseClassNames, classNames), role };\n return (\n <Root {...props} {...rootProps} data-scroll-separator='false' ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nconst cardStackRoot = 'flex flex-col pli-2 plb-2';\n\nconst CardStackRoot = forwardRef<HTMLDivElement, SharedCardStackProps>(\n ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild\n ? { classNames: [cardStackRoot, classNames] }\n : { className: mx(cardStackRoot, classNames), role };\n return (\n <Root {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nconst cardStackItem = 'contain-layout pli-2 plb-1 first-of-type:pbs-0 last-of-type:pbe-0';\n\nconst CardStackItem = forwardRef<HTMLDivElement, SharedCardStackProps>(\n ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n const rootProps = asChild\n ? { classNames: [cardStackItem, classNames] }\n : { className: mx(cardStackItem, classNames), role };\n return (\n <Root {...props} {...rootProps} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nexport const CardStack = {\n Root: CardStackRoot,\n Content: CardStackContent,\n Stack: CardStackStack,\n Heading: CardStackHeading,\n Footer: CardStackFooter,\n DragHandle: CardStackDragHandle,\n Item: CardStackItem,\n};\n\nexport { cardStackRoot, cardStackFooter, cardStackHeading, cardStackContent, cardStackItem };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type StackProps } from '../../components';\nimport { translationKey } from '../../translations';\n\nconst CardStackDragPreviewRoot = ({ children }: PropsWithChildren<{}>) => {\n return (\n <div className='p-2'>\n <div className='rounded-md max-bs-[calc(100dvh-1rem)] overflow-hidden bg-baseSurface border border-separator ring-focusLine ring-neutralFocusIndicator flex flex-col'>\n {children}\n </div>\n </div>\n );\n};\n\nconst CardStackDragPreviewHeading = ({ children }: PropsWithChildren<{}>) => {\n const { t } = useTranslation(translationKey);\n return (\n <div className='flex items-center p-2'>\n <IconButton\n iconOnly\n icon='ph--dots-six-vertical--regular'\n variant='ghost'\n label={t('column drag handle label')}\n classNames='pli-2'\n />\n {children}\n </div>\n );\n};\n\nconst CardStackDragPreviewContent = ({\n children,\n itemsCount = 0,\n}: PropsWithChildren<Pick<StackProps, 'itemsCount'>>) => {\n return (\n <div\n className={mx('overflow-y-auto flex-1 pli-2 flex flex-col gap-2', 'plb-1', itemsCount > 0 ? 'plb-2' : 'plb-1')}\n >\n {children}\n </div>\n );\n};\n\nconst CardStackDragPreviewFooter = ({ children }: PropsWithChildren<{}>) => {\n return <div className='p-2 border-t border-separator'>{children}</div>;\n};\n\nexport const CardStackDragPreview = {\n Root: CardStackDragPreviewRoot,\n Heading: CardStackDragPreviewHeading,\n Content: CardStackDragPreviewContent,\n Footer: CardStackDragPreviewFooter,\n};\n"],
5
+ "mappings": ";;AAIA,OAAOA,SAA8BC,aAAaC,QAAQC,gBAAgB;AAG1E,SAASC,UAAU;AAEnB,IAAMC,QAAQ,oBAAIC,IAAAA;AAUX,IAAMC,QAAQ,CAAC,EACpBC,YACAC,KACAC,MAAM,IACNC,cAAc,aACdC,aAAa,IACbC,WAAW,IAAG,MACH;;;AACX,UAAM,CAACC,kBAAkBC,mBAAAA,IAAuBC,SAAoCL,WAAAA;AACpF,UAAM,CAACM,eAAeC,gBAAAA,IAAoBF,SAA6BG,MAAAA;AACvE,UAAM,CAACC,aAAaC,cAAAA,IAAkBL,SAAkB,KAAA;AACxD,UAAMM,YAAYC,OAA0B,IAAA;AAG5C,UAAMC,mBAAmB,MAAA;AACvBT,0BAAoBI,MAAAA;IACtB;AAEA,UAAMM,kBAAkBC,YACtB,CAAC,EAAEC,OAAM,MAAoC;AAC3C,YAAMC,MAAMvB,MAAMwB,IAAIpB,GAAAA;AACtB,UAAImB,KAAK;AACPV,yBAAiBU,GAAAA;AACjBP,uBAAe,IAAA;AACf;MACF;AAEA,YAAMS,MAAMH;AACZ,UAAI,CAACL,UAAUS,SAAS;AACtB;MACF;AAEA,UAAI;AACF,cAAMC,QAAQC,qBAAqBX,UAAUS,SAASD,KAAK;UAAElB;UAAYC;QAAS,CAAA;AAClF,YAAImB,OAAO;AACT,gBAAMJ,OAAM,OAAOI,MAAM,CAAA,CAAE,KAAKA,MAAM,CAAA,CAAE,KAAKA,MAAM,CAAA,CAAE;AACrD3B,gBAAM6B,IAAIzB,KAAKmB,IAAAA;AACfV,2BAAiBU,IAAAA;QACnB;MACF,QAAQ;AACNb,4BAAoBI,MAAAA;MACtB;AAEAE,qBAAe,IAAA;IACjB,GACA;MAACT;MAAYC;MAAUJ;KAAI;AAG7B,WACE,sBAAA,cAAC0B,OAAAA;MACCC,WAAWC,GAAG,oFAAoF7B,UAAAA;MAClG8B,OAAO;QACLC,iBAAiBtB;MACnB;OAGA,sBAAA,cAACuB,UAAAA;MAAOC,KAAKnB;MAAWgB,OAAO;QAAEI,SAAS;MAAO;MAAGC,eAAY;QAGhE,sBAAA,cAACR,OAAAA;MACCC,WAAU;MACVE,OAAO;QACLM,YAAY3B,gBACR,sDAAsDA,aAAAA,WACtDE;QACJ0B,YAAY;QACZC,SAAS;MACX;QAGF,sBAAA,cAAChB,OAAAA;MACCrB;MACAC;MACAC,aAAaG;MACbiC,SAASvB;MACTwB,QAAQvB;MACRW,WAAWC,GAAG,uDAAuD7B,UAAAA;MACrE8B,OAAO;QACLQ,SAAS1B,cAAc,IAAI;MAC7B;;;;;AAIR;AAUA,IAAMa,uBAAuB,CAC3BO,QACAV,KACA,EAAElB,aAAa,IAAIC,WAAW,KAAI,MAAgB;AAElD,QAAMoC,MAAMT,OAAOU,WAAW,IAAA;AAC9B,MAAI,CAACD,KAAK;AACR,WAAO;EACT;AAGAT,SAAOW,QAAQvC;AACf4B,SAAOY,SAASxC;AAChBqC,MAAII,UAAUvB,KAAK,GAAG,GAAGlB,YAAYA,UAAAA;AAGrC,QAAM0C,YAAYL,IAAIM,aAAa,GAAG,GAAG3C,YAAYA,UAAAA;AACrD,QAAM4C,SAASF,UAAUG;AAGzB,MAAIC,cAAcF,QAAQ5C,UAAAA,GAAa;AACrC,WAAO;EACT;AAEA,MAAI+C,IAAI;AACR,MAAIC,IAAI;AACR,MAAIC,IAAI;AACR,MAAIC,cAAc;AAGlB,QAAMC,aAAaC,KAAKC,MAAMrD,aAAa,KAAA;AAG3C,WAASsD,IAAI,GAAGA,IAAItD,YAAYsD,KAAK;AACnC,aAASC,IAAI,GAAGA,IAAIvD,YAAYuD,KAAK;AAEnC,YAAMC,cAAcD,IAAIJ,cAAcG,IAAIH;AAC1C,YAAMM,eAAeF,KAAKvD,aAAamD,cAAcG,IAAIH;AACzD,YAAMO,iBAAiBH,IAAIJ,cAAcG,KAAKtD,aAAamD;AAC3D,YAAMQ,kBAAkBJ,KAAKvD,aAAamD,cAAcG,KAAKtD,aAAamD;AAC1E,UAAI,CAACK,eAAe,CAACC,gBAAgB,CAACC,kBAAkB,CAACC,iBAAiB;AACxE;MACF;AAEA,YAAMC,KAAKN,IAAItD,aAAauD,KAAK;AACjC,YAAMM,MAAMjB,OAAOgB,CAAAA;AACnB,YAAME,QAAQlB,OAAOgB,IAAI,CAAA;AACzB,YAAMG,OAAOnB,OAAOgB,IAAI,CAAA;AACxB,YAAMI,QAAQpB,OAAOgB,IAAI,CAAA;AAGzB,UAAII,UAAU,EAAG;AAGjB,YAAMC,MAAMb,KAAKa,IAAIJ,KAAKC,OAAOC,IAAAA;AACjC,YAAMG,MAAMd,KAAKc,IAAIL,KAAKC,OAAOC,IAAAA;AACjC,YAAMI,aAAaF,QAAQ,IAAI,KAAKA,MAAMC,OAAOD;AACjD,YAAMG,SAAS,IAAID,aAAa;AAEhCpB,WAAKc,MAAMO;AACXpB,WAAKc,QAAQM;AACbnB,WAAKc,OAAOK;AACZlB,qBAAekB;IACjB;EACF;AAEA,MAAIlB,cAAc,GAAG;AAEnBH,QAAIK,KAAKiB,MAAMjB,KAAKiB,MAAMtB,IAAIG,WAAAA,IAAejD,QAAAA;AAC7C+C,QAAII,KAAKiB,MAAMjB,KAAKiB,MAAMrB,IAAIE,WAAAA,IAAejD,QAAAA;AAC7CgD,QAAIG,KAAKiB,MAAMjB,KAAKiB,MAAMpB,IAAIC,WAAAA,IAAejD,QAAAA;AAC7C,WAAO;MAAC8C;MAAGC;MAAGC;;EAChB;AAEA,SAAO;AACT;AASA,IAAMH,gBAAgB,CAACF,QAA2B5C,YAAoBsE,YAAoB,QAAG;AAC3F,MAAIC,wBAAwB;AAC5B,QAAMC,aAAaxE,aAAa,IAAI;AAEpC,WAASuD,IAAI,GAAGA,IAAIvD,YAAYuD,KAAK;AAEnC,UAAMkB,WAAWlB,IAAI;AACrB,QAAIX,OAAO6B,WAAW,CAAA,MAAO,EAAGF;AAGhC,UAAMG,gBAAgB1E,aAAa,KAAKA,aAAauD,KAAK;AAC1D,QAAIX,OAAO8B,cAAc,CAAA,MAAO,EAAGH;EACrC;AAEA,WAASjB,IAAI,GAAGA,IAAItD,aAAa,GAAGsD,KAAK;AAEvC,UAAMqB,YAAYrB,IAAItD,aAAa;AACnC,QAAI4C,OAAO+B,YAAY,CAAA,MAAO,EAAGJ;AAGjC,UAAMK,cAActB,IAAItD,aAAaA,aAAa,KAAK;AACvD,QAAI4C,OAAOgC,aAAa,CAAA,MAAO,EAAGL;EACpC;AAEA,SAAOA,wBAAwBC,aAAaF;AAC9C;;;ACzNA,SAASO,eAAeC,kBAAkB;AAanC,IAAMC,eAAeC,8BAAiC;EAC3DC,aAAa;EACbC,MAAM;EACNC,MAAM;AACR,CAAA;AAEO,IAAMC,WAAW,MAAMC,WAAWN,YAAAA;AAgBlC,IAAMO,OAAsB;EAAEC,MAAM;AAAO;AAW3C,IAAMC,mBAAmBR,8BAAqC;EACnES,mBAAmB,MAAA;EAAO;EAC1BN,MAAM;EACNO,SAAS,MAAA;EAAO;EAChBC,OAAOL;EACPM,UAAU,MAAA;EAAO;AACnB,CAAA;AAEO,IAAMC,eAAe,MAAMR,WAAWG,gBAAAA;;;;ACtD7C,SAASM,mBAAmB;AAC5B,OAAOC,UAELC,UAGAC,YACAC,eAAAA,cACAC,WACAC,SACAC,YAAAA,iBACK;AAEP,SAASC,UAAgCC,aAAa;AACtD,SAASC,MAAAA,WAAU;;;ACdnB,SAASC,eAAe;AACxB,SAASC,6BAA6B;AACtC,SAASC,6BAA6B;AACtC,SAASC,mBAAmBC,0BAA0B;AACtD,SAASC,iBAAiBC,YAAAA,iBAAgB;AAI1C,IAAMC,OAAO,MAAA;AAAO;AAKb,IAAMC,0BAA0B,CAAC,EACtCC,IACAC,SACAC,gBAAgBD,SAChBE,aACAC,eACAC,YAAW,MAQZ;AACC,QAAM,CAACC,UAAUC,WAAAA,IAAeC,UAAS,KAAA;AAEzCC,kBAAgB,MAAA;AACd,QAAI,CAACR,SAAS;AACZ;IACF;AAEA,UAAMS,mBAAmBP,gBAAgB,eAAe,WAAW;AAEnE,WAAOQ,QACLP,gBACIQ,sBAAsB;MACpBX;MACAY,SAAS,CAAC,EAAEC,OAAOb,SAAAA,SAAO,MAAE;AAC1B,eAAOc,kBACL;UAAEf;UAAIgB,MAAMb,gBAAgB,eAAe,SAAS;QAAS,GAC7D;UAAEW;UAAOb,SAAAA;UAASgB,cAAc;YAACd,gBAAgB,eAAe,SAAS;;QAAO,CAAA;MAEpF;MACAe,aAAa,CAAC,EAAEC,OAAM,MAAE;AACtB,YAAIA,OAAOC,KAAKJ,SAASN,kBAAkB;AACzCH,sBAAY,IAAA;QACd;MACF;MACAc,QAAQ,CAAC,EAAEF,OAAM,MAAE;AACjB,YAAIA,OAAOC,KAAKJ,SAASN,kBAAkB;AACzCH,sBAAY,IAAA;QACd;MACF;MACAe,aAAa,MAAA;AACX,eAAOf,YAAY,KAAA;MACrB;MACAgB,QAAQ,CAAC,EAAEC,MAAML,OAAM,MAAE;AACvBZ,oBAAY,KAAA;AACZ,YAAIY,OAAOC,KAAKJ,SAASN,oBAAoBN,iBAAiBC,aAAa;AACzEA,sBAAYc,OAAOC,MAAuBI,KAAKJ,MAAuBK,mBAAmBD,KAAKJ,IAAI,CAAA;QACpG;MACF;IACF,CAAA,IACAtB,MAEJI,gBACIwB,sBAAsB;MACpBzB,SAASC;MACTyB,gBAAgB,MAAMxB;IACxB,CAAA,IACAL,IAAAA;EAER,GAAG;IAACG;IAASC;IAAeE;IAAeD;IAAaH;IAAIK;GAAY;AAExE,SAAO;IAAEC;EAAS;AACpB;;;ADhDO,IAAMsB,qBAAqB;AAC3B,IAAMC,mBAAmB;AAGzB,IAAMC,sCACX;AACK,IAAMC,oCACX;AAEK,IAAMC,2BAA2B;EAAE,wBAAwB;AAAO;AAEzE,IAAMC,iCAAiC;AAEvC,IAAMC,yBAAyB,CAACC,IAAiBC,gBAAAA;AAC/CD,KAAGE,eAAe;IAChBC,UAAU;IACV,CAACF,gBAAgB,aAAa,UAAU,QAAA,GAAW;EACrD,CAAA;AACA,SAAOD,GAAGI,MAAK;AACjB;AAUO,IAAMC,QAAQC,2BACnB,CACE,EACEC,UACAC,YACAC,OACAR,cAAc,YACdS,OAAO,MACPC,OAAO,aACPC,aACAC,aAAaC,SAASC,MAAMR,QAAAA,GAC5BS,gBACAC,mBACAC,eACA,GAAGC,MAAAA,GAELC,iBAAAA;;;AAEA,UAAMC,UAAUC,MAAM,SAASH,MAAMI,EAAE;AACvC,UAAM,CAACC,cAAcC,QAAAA,IAAYC,UAAgC,IAAA;AACjE,UAAM,CAACC,iBAAiBC,kBAAAA,IAAsBF,UAAAA;AAC9C,UAAMG,kBAAkBC,YAA4BL,UAAUL,YAAAA;AAE9D,UAAMW,SAAwB;MAC5B,CAAC9B,gBAAgB,eAAe,wBAAwB,kBAAA,GACtDU,SAAS,UAAU,UAAUE,UAAAA,WAAqB,UAAUA,UAAAA;MAC9D,GAAGJ;IACL;AAEA,UAAMuB,gBAAgB,CAAC,EAAEnB,aAAa,KAAKD,eAAeO,MAAMI;AAEhE,UAAM,EAAEU,SAAQ,IAAKC,wBAAwB;MAC3CX,IAAIJ,MAAMI;MACVY,SAASnB,kBAAkBQ,eAAeR,eAAeQ,YAAAA,IAAgBA;MACzEY,eAAeZ;MACfQ;MACA/B;MACAW;IACF,CAAA;AAEA,UAAMyB,eAAeC,aAAY,MAAA;AAC/B,UAAId,gBAAgBe,OAAOC,SAASvB,iBAAAA,GAAoB;AACtD,cAAMwB,iBAAiBxC,gBAAgB,eAAeuB,aAAakB,aAAalB,aAAamB;AAC7F,cAAMC,aAAa3C,gBAAgB,eAAeuB,aAAaqB,cAAcrB,aAAasB;AAC1F,cAAMC,aAAa9C,gBAAgB,eAAeuB,aAAawB,cAAcxB,aAAayB;AAC1F,cAAMC,gBAAgB1B,aAAa2B,QAAQ,yBAAA;AAC3C,YAAID,eAAe;AACjBA,wBAAcE,aAAa,yBAAyBC,OAAOZ,iBAAiBxB,iBAAAA,CAAAA;AAC5EiC,wBAAcE,aACZ,6BACAC,OAAOT,cAAcH,iBAAiBM,cAAc9B,iBAAAA,CAAAA;QAExD;MACF;IACF,GAAG;MAACO;MAAcP;MAAmBhB;KAAY;AAKjD,UAAMqD,aAAahB,aACjB,CAACiB,UAAAA;AACC,UAAIA,MAAMC,QAAQ;AAChB,cAAMA,SAASD,MAAMC;AACrB,cAAMC,mBAAmBD,OAAOL,QAAQ,mBAAmB;AAC3D,YAAIM,kBAAkBN,QAAQ,mBAAmB9B,OAAAA,IAAW,GAAG;AAC7DO,6BAAmB6B,kBAAkBC,aAAa,iBAAA,KAAsBC,MAAAA;QAC1E;MACF;AACAxC,YAAMyC,SAASL,KAAAA;IACjB,GACA;MAAClC;MAASF,MAAMyC;KAAO;AAQzB,UAAMC,gBAAgBvB,aACpB,CAACiB,UAAAA;AACC,YAAMC,SAASD,MAAMC;AACrB,UACED,MAAMO,IAAIC,WAAW,OAAA,KACrB,CAACP,OAAOL,QACN,2GAA2GI,MAAMO,IAAIE,YAAW,EAAGC,MAAM,CAAA,CAAA,IAAM,GAEjJ;AACA,cAAMC,mBAAmBV,OAAOL,QAAQ,wBAAwB9B,OAAAA,IAAW;AAC3E,cAAM8C,eAAeX,OAAOL,QAAQ,iBAAA;AACpC,cAAMiB,oBAAoBC,MAAMC,KAC9BH,cAAcI,iBAAiB,wBAAwBlD,OAAAA,IAAW,KAAK,CAAA,CAAE;AAE3E,cAAMmD,0BAA0BL,cAAcT,aAAa,kBAAA;AAC3D,cAAMe,gBAAgBN,cAAcO,eAAevB,QAAQ,iBAAA;AAC3D,YAAIe,oBAAoBC,cAAc;AACpC,gBAAMQ,sBAAsBF,eAAef,aAAa,kBAAA;AACxD,gBAAMkB,iBACJJ,4BAA4B,aAAajB,MAAMO,QAAQ,YAAYP,MAAMO,QAAQ,eAE/E,MACCU,4BAA4B,aAAajB,MAAMO,QAAQ,cAAcP,MAAMO,QAAQ,gBAClF,IACA;AACN,gBAAMe,sBACJL,4BAA4B,aAAajB,MAAMO,QAAQ,cAAcP,MAAMO,QAAQ,aAEjF,MACCU,4BAA4B,aAAajB,MAAMO,QAAQ,eAAeP,MAAMO,QAAQ,eACnF,IACA;AACN,cAAIc,kBAAkB,GAAG;AACvB,kBAAME,eAAeV,kBAAkBW,QAAQb,gBAAAA;AAC/C,kBAAMc,YAAYF,eAAeF;AACjC,gBAAIK;AAEJ,gBAAI/D,eAAe;AAEjB+D,6BAAeb,mBAAmBY,YAAYZ,kBAAkBc,UAAUd,kBAAkBc,MAAM;YAGpG,OAAO;AAEL,kBAAIF,aAAa,KAAKA,YAAYZ,kBAAkBc,QAAQ;AAC1DD,+BAAeb,kBAAkBY,SAAAA;cACnC;YACF;AAEA,gBAAIC,cAAc;AAChB1B,oBAAM4B,eAAc;AACpBpF,qCAAuBkF,cAAcT,uBAAAA;YACvC;UACF;AACA,cAAIK,uBAAuB,GAAG;AAC5B,gBAAIJ,iBAAiBE,wBAAwBH,yBAAyB;AACpE,oBAAMY,gBAAgBf,MAAMC,KAC1BG,cAAcF,iBACZ,wBAAwBE,cAAcf,aAAa,eAAA,CAAA,oBAAoC,CAAA;AAG3F,oBAAM2B,oBAAoBD,cAAcL,QAAQZ,YAAAA;AAChD,oBAAMmB,iBAAiBD,oBAAoBR;AAC3C,kBAAIU;AAEJ,kBAAId,cAAcf,aAAa,8BAAA,MAAoC,QAAQ;AAEzE6B,gCAAgBH,eAAeE,iBAAiBF,cAAcF,UAAUE,cAAcF,MAAM;cAG9F,OAAO;AAEL,oBAAII,kBAAkB,KAAKA,iBAAiBF,cAAcF,QAAQ;AAChEK,kCAAgBH,cAAcE,cAAAA;gBAChC;cACF;AACA,oBAAME,wBAAwBD,eAAepC,QAC3C,uBAAuBsB,cAAcf,aAAa,eAAA,CAAA,GAAmB;AAEvE,oBAAM+B,qBAAqBF,gBACtBlB,MAAMC,KACLiB,cAAchB,iBACZ,wBAAwBgB,cAAc7B,aAAa,eAAA,CAAA,IAAoB,CAAA,IAG3E,CAAA;AACJ,kBAAI6B,iBAAiBE,mBAAmBP,SAAS,GAAG;AAElD,oBAAIQ,cAAcD,mBAAmB,CAAA;AAErC,sBAAM9D,mBAAkB4D,cAAcI,cACpC,qBAAqBJ,cAAc7B,aAAa,2BAAA,KAAgC,OAAA,IAAW;AAE7F,oBAAI/B,kBAAiB;AACnB+D,gCAAc/D;gBAChB,OAAO;AAEL,wBAAMiE,gBAAgB1B,iBAAiB2B,sBAAqB;AAC5D,wBAAMC,iBACJtB,4BAA4B,aAAaoB,cAAcG,MAAMH,cAAcI;AAE7E,sBAAIC,kBAAkBC;AACtB,6BAAWC,QAAQV,oBAAoB;AACrC,0BAAMW,WAAWD,KAAKN,sBAAqB;AAC3C,0BAAMQ,eAAe7B,4BAA4B,aAAa4B,SAASL,MAAMK,SAASJ;AACtF,0BAAMM,WAAWC,KAAKC,IAAIH,eAAeP,cAAAA;AACzC,wBAAIQ,WAAWL,iBAAiB;AAC9BA,wCAAkBK;AAClBZ,oCAAcS;oBAChB;AACA,wBAAIF,mBAAmBnG,gCAAgC;AACrD;oBACF;kBACF;gBACF;AAEAyD,sBAAM4B,eAAc;AACpBpF,uCAAuB2F,aAAalB,uBAAAA;cACtC,WAAWgB,uBAAuB;AAChCjC,sBAAM4B,eAAc;AACpBpF,uCAAuByF,uBAAuBb,mBAAAA;cAChD;YACF,WAAWT,kBAAkB;AAC3B,oBAAMuC,wBAAwBvC,iBAAiByB,cAAc,iBAAA;AAC7D,oBAAMe,6BAA6BD,wBAC9BpC,MAAMC,KACLmC,sBAAsBlC,iBACpB,wBAAwBkC,sBAAsB/C,aAAa,eAAA,CAAA,IAAoB,CAAA,IAGnF,CAAA;AACJ,kBAAIgD,2BAA2BxB,SAAS,GAAG;AACzC3B,sBAAM4B,eAAc;AACpBpF,uCACE2G,2BACE;kBAAC;kBAAW;kBAAaC,SAASpD,MAAMO,GAAG,IAAI4C,2BAA2BxB,SAAS,IAAI,CAAA,GAEzFuB,uBAAuB/C,aAAa,kBAAA,CAAA;cAExC;YACF;UACF;QACF;MACF;AACAvC,YAAMyF,YAAYrD,KAAAA;IACpB,GACA;MAACpC,MAAMyF;MAAWvF;MAASH;KAAc;AAG3C,UAAM2F,cAAcC,QAAQ,MAAA;AAC1B,UAAI,CAACpG,MAAM;AACT,eAAOT,gBAAgB,eAAe,kCAAkC;MAC1E;AAEA,UAAIA,gBAAgB,cAAc;AAChC,eAAOR;MACT,OAAO;AACL,eAAOC;MACT;IACF,GAAG;MAACgB;MAAMT;MAAaU;KAAK;AAE5BoG,cAAU,MAAA;AACR,UAAI,EAAEvF,gBAAgBe,OAAOC,SAASvB,iBAAAA,IAAqB;AACzD;MACF;AAEA,YAAM+F,WAAW,IAAIC,iBAAiB,MAAA;AACpC5E,qBAAAA;MACF,CAAA;AAEA2E,eAASE,QAAQ1F,cAAc;QAAE2F,WAAW;QAAMC,SAAS;MAAK,CAAA;AAEhE,aAAO,MAAA;AACLJ,iBAASK,WAAU;MACrB;IACF,GAAG;MAAC7F;MAAca;KAAa;AAE/B,WACE,gBAAAiF,OAAA,cAACC,aAAaC,UAAQ;MAACC,OAAO;QAAExH;QAAaS;QAAMC;QAAMC;QAAaS;MAAQ;OAC5E,gBAAAiG,OAAA,cAACI,OAAAA;MACE,GAAGvG;MACJwG,WAAWC,IACT,gDACAf,aACAlG,SAAS,cACNV,gBAAgB,eACb,sEACA,iDACNO,UAAAA;MAEFoG,WAAW/C;MACXD,QAAQN;MACRuE,iBAAexG;MACfyG,gCAA8B5G;MAC9B6G,6BAA2BpG;MAC3BqG,aAAWtH;MACXuH,oBAAkBhI;MAClBQ,OAAOsB;MACPmG,KAAKrG;MACJ,GAAIU,OAAOC,SAASvB,iBAAAA,KAAsB;QAAEkH,UAAU9F;MAAa;OAEnE9B,UACAyB,iBAAiBC,YAChB,gBAAAqF,OAAA,cAACc,SAASC,eAAa;MACrBC,WAAW;MACXC,eAAe;MACfC,KAAK;MACLC,MAAMxI,gBAAgB,eAAe,SAAS;;;;;AAM1D,CAAA;;;AE7VK,IAAMyI,iBAAiB;AAEvB,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACD,cAAAA,GAAiB;QAChB,gBAAgB;QAChB,qBAAqB;QACrB,mBAAmB;QACnB,iBAAiB;QACjB,yBAAyB;QACzB,uBAAuB;QACvB,eAAe;QACf,gBAAgB;MAClB;IACF;EACF;;;;;AClBF,SAASE,WAAAA,gBAAe;AACxB,SAASC,WAAWC,yBAAAA,8BAA6B;AACjD,SAASC,8BAA8B;AACvC,SAASC,kCAAkC;AAC3C,SAEEC,qBAAAA,oBACAC,sBAAAA,2BACK;AACP,SAASC,yBAAyB;AAClC,SAASC,eAAAA,oBAAmB;AAC5B,OAAOC,UAGLC,cAAAA,aACAC,eAAAA,cACAC,mBAAAA,kBACAC,WAAAA,UACAC,YAAAA,iBACK;AACP,SAASC,oBAAoB;AAE7B,SAASC,YAAAA,iBAAsC;AAC/C,SAASC,kBAAkBC,iBAAiB;AAC5C,SAASC,MAAAA,WAAU;;;;ACxBnB,OAAOC,UAAwCC,cAAAA,aAAYC,WAAAA,gBAAe;AAG1E,SAASC,MAAAA,WAAU;AAuCZ,IAAMC,mBAAmBC,gBAAAA,YAC9B,CACE,EAAEC,UAAUC,SAASC,WAAWC,eAAeC,YAAYC,OAAO,aAAaC,YAAY,GAAGC,MAAAA,GAC9FC,iBAAAA;;;AAEA,UAAM,EAAEH,MAAMI,cAAa,IAAKC,SAAAA;AAChC,UAAM,EAAEC,KAAI,IAAKC,aAAAA;AACjB,UAAMC,QAAQC,SACZ,MACEX,gBACI,CAAC,IACD;MACEY,kBAAkB;WACZd,UAAU;UAACU,SAAS,YAAY,oCAAoC;YAAyB,CAAA;QACjG;WACIT,YAAY;UAAC;YAA2B,CAAA;QAC5Cc,KAAK,GAAA;IACT,GACN;MAACf;MAASC;MAAWC;KAAc;AAGrC,WACE,gBAAAc,OAAA,cAACC,OAAAA;MACCP,MAAK;MACJ,GAAGJ;MACJY,WAAWC,IACT,8CACAf,SAAS,UAAU,iBAAiBA,SAAS,YAAY,iBACzDI,kBAAkB,aAAa,4BAC/BH,aAAa,2DAA2D,mBACxEK,SAAS,aACPV,WACA,+HACFA,WAAW,8FACXG,UAAAA;MAEFS;MACAQ,mCAAiC;MACjCC,KAAKd;OAEJR,QAAAA;;;;AAGP,CAAA;;;;ACrFF,SAASuB,YAAY;AACrB,OAAOC,YAA8C;AAM9C,IAAMC,sBAAsB,CAAC,EAAEC,SAASC,SAAQ,MAA4B;;;AACjF,UAAM,EAAEC,kBAAiB,IAAKC,aAAAA;AAE9B,UAAMC,OAAOJ,UAAUK,OAAO;AAE9B,WACE,gBAAAC,OAAA,cAACF,MAAAA;MAAKG,KAAKL;MAAmBM,MAAK;OAChCP,QAAAA;;;;AAGP;;;;ACjBA,SAASQ,QAAAA,aAAY;AACrB,OAAOC,UAILC,cAAAA,mBACK;AAGP,SAA0CC,oBAAoB;AAC9D,SAASC,MAAAA,WAAU;AASZ,IAAMC,mBAAmB,CAAC,EAC/BC,UACAC,YACAC,SACAC,kBACA,GAAGC,MAAAA,MACmB;;;AACtB,UAAM,EAAEC,YAAW,IAAKC,SAAAA;AAExB,UAAMC,OAAOL,UAAUM,QAAO;AAE9B,WACE,gBAAAC,OAAA,cAACF,MAAAA;MACCG,MAAK;MACJ,GAAGN;MACJO,WAAWC,IACT,mDACAT,mBACI,kFACA,2BACJE,gBAAgB,eAAe,qBAAqB,6BACpDA,gBAAgB,eAAe,cAAc,aAC7CJ,UAAAA;OAGDD,QAAAA;;;;AAGP;AAEO,IAAMa,gCAAgC,CAAC,EAAEb,SAAQ,MAAyB;;;AAC/E,WACE,gBAAAS,OAAA,cAACK,OAAAA;MAAIJ,MAAK;MAAOC,WAAU;OACxBX,QAAAA;;;;AAGP;AAIO,IAAMe,wBAAwBC,gBAAAA,YACnC,CAAC,EAAEC,cAAcC,SAASjB,YAAY,GAAGG,MAAAA,GAASe,iBAAAA;;;AAChD,UAAM,EAAEC,cAAcC,YAAYC,UAAS,IAAKC,aAAaN,YAAAA;AAE7D,WACE,gBAAAR,OAAA,cAACe,MAAAA;MACE,GAAGpB;MACJqB,mBAAkBP,WAAWI,aAAcF,gBAAgBC,YAAYK,SAAQ;MAC/Ef,WAAWC,IACT,iHACAX,UAAAA;MAEF0B,KAAKR;;;;;AAGX,CAAA;;;;AC1EF,OAAOS,YAAW;AAElB,SAASC,oBAAoB;AAM7B,IAAMC,YAAY;AAClB,IAAMC,aAAa;AAIZ,IAAMC,wBAAwB,MAAA;;;AACnC,UAAM,EAAEC,YAAW,IAAKC,SAAAA;AACxB,UAAM,EAAEC,SAASC,KAAI,IAAKC,aAAAA;AAE1B,WACE,gBAAAC,OAAA,cAACC,cAAAA;MACCC,MAAMP,gBAAgB,eAAe,eAAe;MACpDQ,cAAcC;MACdC,SAASV,gBAAgB,eAAeH,YAAYC;MACpDK;MACAQ,cAAcT;;;;;AAGpB;;;;AC1BA,OAAOU,UAASC,UAAkCC,cAAAA,aAAYC,YAAAA,iBAAgB;AAG9E,SAASC,kBAAkB;AAC3B,SAASC,QAA0BC,cAAcC,MAAMC,mBAAmBC,sBAAsB;AAChG,SAA0CC,gBAAAA,qBAAoB;AAC9D,SAASC,iBAAiBC,MAAAA,WAAU;AACpC,SAASC,uBAAuB;;;;ACPhC,OAAOC,YAAW;AAEX,IAAMC,0BAA0B,MAAA;;;WACrC,gBAAAC,OAAA,cAACC,OAAAA;MACCC,WAAU;MACVC,OAAO;MACPC,QAAQ;MACRC,SAAQ;MACRC,QAAO;MACPC,SAAS;OAET,gBAAAP,OAAA,cAACQ,QAAAA;MACCC,IAAI;MACJC,IAAI;MACJC,IAAI;MACJC,IAAI;MACJC,aAAa;MACbC,eAAc;MACdC,iBAAgB;MAChBC,kBAAiB;;;;;;;;ADUhB,IAAMC,uBAAuBC,gBAAAA,YAClC,CAAC,EAAEC,cAAcC,YAAYC,SAASC,SAAS,MAAMC,UAAU,GAAGC,MAAAA,GAASC,iBAAAA;;;AACzE,UAAM,EAAEC,cAAcC,YAAYC,UAAS,IAAKC,cAAaV,YAAAA;AAC7D,UAAMW,UAAWT,WAAWO,aAAcF,gBAAgBC,aAAa,YAAY;AAEnF,WACE,gBAAAI,OAAA,cAACC,QAAAA;MACE,GAAGR;MACJM;MACAV,YAAY;QAAC;QAAsFA;;MACnGa,KAAKR;OAEJH,UAAU,gBAAAS,OAAA,cAACG,yBAAAA,IAAAA,GACXX,QAAAA;;;;AAGP,CAAA;AAaK,IAAMY,iBAAiBjB,gBAAAA,YAC5B,CAAC,EAAEkB,SAASC,cAAcC,UAAUC,cAAcpB,cAAcqB,MAAMnB,SAASE,SAAQ,GAAIE,iBAAAA;;;AACzF,UAAM,EAAEgB,EAAC,IAAKC,eAAeC,cAAAA;AAE7B,UAAM,CAACC,iBAAiBC,kBAAAA,IAAsBC,UAAS,KAAA;AAEvD,UAAMC,aAAaV,gBAAgBA,aAAaW,SAAS;AAEzD,UAAMC,SACJ,gBAAAlB,OAAA,cAACd,sBAAAA;MACCE;MACAE;MACAC,QAAQyB;;;MAGR3B,YAAY,CAAC2B,cAAc;OAE3B,gBAAAhB,OAAA,cAACmB,QAAAA;MAAKC,WAAU;OAAWZ,YAAAA,GAC3B,gBAAAR,OAAA,cAACqB,MAAAA;MAAKZ;MAAYa,MAAM;;AAI5B,QAAI,CAACN,YAAY;AACf,aAAOE;IACT;AAEA,WACE,gBAAAlB,OAAA,cAACuB,aAAaC,MAAI;MAACC,MAAMZ;MAAiBa,cAAcZ;OACtD,gBAAAd,OAAA,cAACuB,aAAaI,SAAO;MAACC,SAAAA;MAAQ1B,KAAKR;OAChCwB,MAAAA,GAEH,gBAAAlB,OAAA,cAACuB,aAAaM,QAAM,MAClB,gBAAA7B,OAAA,cAACuB,aAAaO,SAAO;MAACzC,YAAW;OAC/B,gBAAAW,OAAA,cAACuB,aAAaQ,UAAQ,MACnBzB,cAAc0B,IAAI,CAAC3B,SAAS4B,UAAAA;AAC3B,YAAMC,YAAYD,QAAQ,IAAI,gBAAAjC,OAAA,cAACuB,aAAaY,WAAS,IAAA,IAAM;AAC3D,aACE,gBAAAnC,OAAA,cAACoC,UAAAA;QAASC,KAAKJ;SACZC,WACA7B,QAAQ2B,IAAI,CAACM,WAAAA;AACZ,cAAMC,WACJ,OAAOD,OAAOE,WAAWC,eAAe,WACpCH,OAAOE,WAAWC,aAClBH,OAAOE,WAAWC,aAAaC,gBAAAA,CAAAA;AAErC,cAAMC,eAAeL,OAAOE,WAAWG;AACvC,cAAMnB,OAAOmB,iBAAiB,WAAWpB,aAAaqB,eAAerB,aAAasB;AAElF,eACE,gBAAA7C,OAAA,cAACwB,MAAAA;UACCa,KAAKC,OAAOQ;UACZC,SAAS,CAACC,UAAAA;AACR,gBAAIV,OAAOE,WAAWS,UAAU;AAC9B;YACF;AACAD,kBAAME,gBAAe;AAErBpC,+BAAmB,KAAA;AACnBP,uBAAW+B,MAAAA;UACb;UACAjD,YAAW;UACX4D,UAAUX,OAAOE,WAAWS;UAC5BE,SAASR,iBAAiB,WAAWL,OAAOE,WAAWY,YAAYC;UAClE,GAAIf,OAAOE,YAAYc,UAAU;YAAE,eAAehB,OAAOE,WAAWc;UAAO;WAE5E,gBAAAtD,OAAA,cAACqB,MAAAA;UAAKZ,MAAM6B,OAAOE,WAAW/B,QAAQ;UAA4Ba,MAAM;YACxE,gBAAAtB,OAAA,cAACmB,QAAAA;UAAKC,WAAU;WAAiBmC,kBAAkBjB,OAAOE,WAAWgB,SAAS,IAAI9C,CAAAA,CAAAA,GACjFiC,iBAAiB,YAChB,gBAAA3C,OAAA,cAACuB,aAAakC,eAAa;UAAC7B,SAAAA;WAC1B,gBAAA5B,OAAA,cAACqB,MAAAA;UAAKZ,MAAK;UAAqBa,MAAM;aAGzCiB,YACC,gBAAAvC,OAAA,cAACmB,QAAAA;UAAKC,WAAWsC,IAAG,YAAYC,eAAAA;WAAmBC,WAAWrB,QAAAA,EAAUsB,KAAK,EAAA,CAAA,CAAA;MAIrF,CAAA,CAAA;IAGN,CAAA,GACCrE,QAAAA,GAEH,gBAAAQ,OAAA,cAACuB,aAAauC,OAAK,IAAA,CAAA,CAAA,CAAA;;;;AAK7B,CAAA;;;ALlGK,IAAMC,0BAA0B;AAChC,IAAMC,wBAAwB;AAC9B,IAAMC,yBAAyBF;AActC,IAAMG,gBAAgBC,gBAAAA,YACpB,CACE,EACEC,MACAC,UACAC,YACAC,MAAMC,WACNC,cACAC,MACAC,OACAC,eACAC,eACAC,OACAC,kBACAC,wBAAwB,YACxB,GAAGC,MAAAA,GAELC,iBAAAA;;;AAEA,UAAM,CAACC,aAAaC,OAAAA,IAAWC,UAAgC,IAAA;AAC/D,UAAM,CAACC,uBAAuBC,iBAAAA,IAAqBF,UAAgC,IAAA;AACnF,UAAM,CAACG,aAAaC,OAAAA,IAAWJ,UAAsB,IAAA;AACrD,UAAM,CAACK,UAAUC,WAAAA,IAAeN,UAAwB,IAAA;AACxD,UAAM,CAACO,WAAWC,YAAAA,IAAgBR,UAAwBS,IAAAA;AAC1D,UAAM,EAAEC,aAAaC,MAAMC,aAAa1B,MAAM2B,WAAWC,QAAO,IAAKC,SAAAA;AACrE,UAAM,CAAC7B,OAAOwB,gBAAgB,eAAehC,0BAA0BC,uBAAuBqC,eAAAA,IAC5FhB,UAASb,SAAAA;AAEX,UAAM8B,OAAO5B,QAAQ;AAErB,UAAM6B,kBAAkBC,aAA4BpB,SAASF,YAAAA;AAE7D,UAAMuB,UAAUC,aACd,CAACC,UAAyBC,WAAAA;AACxBP,sBAAgBM,QAAAA;AAChB,UAAIC,QAAQ;AACVnC,uBAAekC,QAAAA;MACjB;IACF,GACA;MAAClC;KAAa;AAGhB,UAAMoC,OAAOd,gBAAgB,eAAe,WAAW;AAEvDe,IAAAA,iBAAgB,MAAA;AACd,UAAI,CAAC3B,eAAe,CAACc,eAAelB,kBAAkB;AACpD;MACF;AAEA,aAAOgC,SACLC,UAAU;QACRC,SAAS9B;QACT,GAAIG,yBAAyB;UAAE4B,YAAY5B;QAAsB;QACjE6B,gBAAgB,OAAO;UAAEC,IAAIhD,KAAKgD;UAAIP;QAAK;QAC3CQ,uBAAuB,CAAC,EAAEC,oBAAoBC,QAAQC,SAAQ,MAAE;AAC9DC,mBAASC,KAAKC,aAAa,qBAAqB,MAAA;AAChD,gBAAMC,WAAWC,uBAAuB;YAAEZ,SAASM,OAAON;YAASa,OAAON,SAASO,QAAQD;UAAM,CAAA;AACjG,gBAAME,OAAOT,OAAON,QAAQgB,sBAAqB;AACjDC,qCAA2B;YACzBZ;YACAa,WAAW,CAAC,EAAEC,UAAS,MAAE;AACvB,qBAAOR,SAAS;gBAAEQ;cAAU,CAAA;YAC9B;YACAC,QAAQ,CAAC,EAAED,UAAS,MAAE;AACpBA,wBAAUtD,MAAMwD,QAAQN,KAAKM,QAAQ;AACrCzC,2BAAa;gBAAEgB,MAAM;gBAAWuB;gBAAWhE;cAAK,CAAA;AAChD,qBAAO,MAAA;cAAO;YAChB;UACF,CAAA;QACF;QACAmE,aAAa,MAAA;AACXd,mBAASC,KAAKc,gBAAgB,mBAAA;AAC9BrD,uBAAasD,QAAQ,wBAAA,GAA2Bd,aAAa,wBAAwB,QAAA;AACrF9B,uBAAa;YAAEgB,MAAM;YAAezC;UAAK,CAAA;QAC3C;QACAsE,QAAQ,MAAA;AACNvD,uBAAasD,QAAQ,wBAAA,GAA2Bd,aAAa,wBAAwB,MAAA;AACrF9B,uBAAaC,IAAAA;QACf;MACF,CAAA,GACA6C,uBAAsB;QACpB1B,SAAS9B;QACTyD,SAAS,CAAC,EAAEd,OAAOb,QAAO,MAAE;AAC1B,iBAAO4B,mBACL;YAAEzB,IAAIhD,KAAKgD;YAAIP;UAAK,GACpB;YAAEiB;YAAOb;YAAS6B,cAAc/C,gBAAgB,eAAe;cAAC;cAAQ;gBAAW;cAAC;cAAO;;UAAU,CAAA;QAEzG;QACAgD,aAAa,CAAC,EAAEC,MAAMzB,OAAM,MAAE;AAC5B,cAAIA,OAAO0B,KAAKpC,SAASmC,KAAKC,KAAKpC,MAAM;AACvCpB,oBAAQyD,oBAAmBF,KAAKC,IAAI,CAAA;AACpCtD,wBAAY4B,OAAO0B,KAAK7B,EAAE;UAC5B;QACF;QACA+B,QAAQ,CAAC,EAAEH,MAAMzB,OAAM,MAAE;AACvB,cAAIA,OAAO0B,KAAKpC,SAASmC,KAAKC,KAAKpC,MAAM;AACvCpB,oBAAQyD,oBAAmBF,KAAKC,IAAI,CAAA;AACpCtD,wBAAY4B,OAAO0B,KAAK7B,EAAE;UAC5B;QACF;QACAgC,aAAa,MAAA;AACX3D,kBAAQ,IAAA;AACRE,sBAAY,IAAA;QACd;QACA+C,QAAQ,CAAC,EAAEM,MAAMzB,OAAM,MAAE;AACvB9B,kBAAQ,IAAA;AACRE,sBAAY,IAAA;AACZ,cAAI4B,OAAO0B,KAAKpC,SAASmC,KAAKC,KAAKpC,MAAM;AACvCZ,wBAAYsB,OAAO0B,MAAuBD,KAAKC,MAAuBC,oBAAmBF,KAAKC,IAAI,CAAA;UACpG;QACF;MACF,CAAA,CAAA;IAEJ,GAAG;MAAClD;MAAa3B;MAAM6B;MAAaX;MAAuBH;KAAY;AAEvE,UAAMkE,sBAAsBC,kBAAkB;MAAEC,aAAa;IAAU,CAAA;AAGvE,UAAMC,0BAA0B,MAAA;AAC9B,UAAI,CAAChE,eAAe,CAACE,UAAU;AAC7B,eAAO;MACT;AAGA,UAAIA,aAAatB,KAAKgD,IAAI;AACxB,eAAO;MACT;AAGA,YAAMqC,8BACJ7E,kBAAkB8E,UAClBhE,aAAad,kBACXmB,gBAAgB,gBAAgBP,gBAAgB,UAC/CO,gBAAgB,cAAcP,gBAAgB;AACnD,UAAIiE,6BAA6B;AAC/B,eAAO;MACT;AAGA,YAAME,6BACJ9E,kBAAkB6E,UAClBhE,aAAab,kBACXkB,gBAAgB,gBAAgBP,gBAAgB,WAC/CO,gBAAgB,cAAcP,gBAAgB;AACnD,UAAImE,4BAA4B;AAC9B,eAAO;MACT;AAEA,aAAO;IACT;AAEA,UAAMC,wBAAwBC,SAC5B,OAAO;MAAEtE;MAAmBhB;MAAMkC;MAASqD,OAAOlE;MAAWmE,UAAUlE;MAAcnB;IAAK,IAC1F;MAACa;MAAmBhB;MAAMkC;MAASb;MAAWC;MAAcnB;KAAK;AAGnE,WACE,gBAAAsF,OAAA,cAACC,iBAAiBC,UAAQ;MAACC,OAAOP;OAChC,gBAAAI,OAAA,cAAC1D,MAAAA;MACE,GAAGrB;MACJmF,UAAU;MACT,GAAGf;MACJgB,WAAWC,IACT,kCACAtF,0BAA0B,aACtB,iCACAA,0BAA0B,oBACxB,wCACAe,gBAAgB,eACdf,0BAA0B,iBACxB,iCACA,0BACFA,0BAA0B,iBACxB,iCACA,yBACVe,gBAAgB,eAAe,sBAAsB,qBACrDC,SAASD,gBAAgB,eAAe,eAAe,eACvDrB,SAAS,aAAaqB,gBAAgB,gBAAgB,qCACtDzB,UAAAA;MAEFiG,sBAAoBpE;MACpBqE,mBAAiBpG,KAAKgD;MACrB,GAAGqD;MACJ3F,OAAO;QACL,GAAIoB,cAAc,WAAWwE,UAAUnG,MAAMwB,WAAAA;QAC7C,GAAI4E,OAAOC,SAASjG,KAAAA,KAAU;UAC5B,CAACoB,gBAAgB,eAAe,eAAe,SAAA,GAAY,GAAGpB,KAAAA;QAChE;QACA,GAAGG;MACL;MACA+F,KAAKtE;OAEJlC,UACAmF,wBAAAA,KAA6BhE,eAC5B,gBAAAwE,OAAA,cAACc,UAASC,eAAa;MAACC,WAAW;MAAGC,eAAe;MAAIC,MAAM1F;;;;;AAKzE,CAAA;AAOK,IAAM2F,uBAAuB,CAAC,EAAE9G,SAAQ,MAA6B;AAC1E,QAAM,EAAEyF,MAAK,IAAKsB,aAAAA;AAClB,SAAOtB,OAAOjD,SAAS,YAAYwE,6BAAahH,SAAS;IAAED,MAAM0F,MAAM1F;EAAK,CAAA,GAAI0F,MAAM1B,SAAS,IAAI;AACrG;AAEO,IAAMkD,YAAY;EACvBhF,MAAMpC;EACNqH,SAASC;EACTC,SAASC;EACTC,cAAcC;EACdC,sBAAsBC;EACtBC,cAAcC;EACdC,YAAYC;EACZC,OAAOC;EACPC,aAAaC;EACbC,aAAapB;AACf;;;AO9RO,IAAMqB,WACX;AAEK,IAAMC,cAAc;AACpB,IAAMC,gBAAgB;AACtB,IAAMC,eAAe;AAErB,IAAMC,oBAAoB;AAC1B,IAAMC,mBAAmB;AACzB,IAAMC,qBAAqB;AAC3B,IAAMC,2BAA2B,GAAGD,kBAAAA;AACpC,IAAME,2BACX;AAEK,IAAMC,WAAWR;AAEjB,IAAMS,cAAc;AAEpB,IAAMC,aACX;;;;ACnBF,SAASC,iBAAiB;AAC1B,SAASC,QAAAA,aAAY;AACrB,OAAOC,WAKLC,cAAAA,mBACK;AAEP,SAASC,QAAAA,OAAMC,YAAkCC,SAAgCC,kBAAAA,uBAAsB;AACvG,SAASC,mBAAmBC,mBAAmBC,MAAAA,WAAU;AAUzD,IAAMC,wBAAwBC;AAK9B,IAAMC,gCAAgCF,wBAAwB;AAI9D,IAAMG,iBAAiBC,gBAAAA,YACrB,CAAC,EAAEC,UAAUC,YAAYC,IAAIC,SAASC,OAAO,SAAS,GAAGC,MAAAA,GAASC,iBAAAA;;;AAChE,UAAMC,OAAOJ,UAAUK,QAAO;AAC9B,UAAMC,YAAYN,UAAU;MAAEF,YAAY;QAACS;QAAUT;;IAAY,IAAI;MAAEU,WAAWC,IAAGF,UAAUT,UAAAA;MAAaG;IAAK;AACjH,WACE,gBAAAS,QAAA,cAACN,MAAAA;MAAM,GAAIL,MAAM;QAAE,kBAAkBA;MAAG;MAAK,GAAGG;MAAQ,GAAGI;MAAWK,KAAKR;OACxEN,QAAAA;;;;AAGP,CAAA;AAOF,IAAMe,kBAAkB,CAAC,EACvBb,IACAE,OAAO,SACPJ,UACAC,WAAU,MACyD;;;AACnE,QAAI;MAAC;MAAiB;MAAmB;MAAmBe,SAASZ,IAAAA,GAAO;AAC1E,aACE,gBAAAS,QAAA,cAACI,OAAAA;QACE,GAAIf,MAAM;UAAE,kBAAkBA;QAAG;QAClCS,WAAWC,IACTR,SAAS,kBACL,uBACA;UAAC;UAAmB;UAAmBY,SAASZ,IAAAA,IAC9C,aACA,IACNH,UAAAA;SAGDD,QAAAA;IAGP,OAAO;AACL,aACE,gBAAAa,QAAA,cAACf,gBAAAA;QACCI;QACAD,YAAY;UACVG,SAAS,wBAAwB;UACjCA,SAAS,wBAAwBc;UACjCjB;;SAGDD,QAAAA;IAGP;;;;AACF;AAEA,IAAMmB,cAAcpB,gBAAAA,YAClB,CAAC,EAAEC,UAAUC,YAAYE,SAASC,OAAO,WAAW,GAAGC,MAAAA,GAASC,iBAAAA;;;AAC9D,UAAMC,OAAOJ,UAAUK,QAAO;AAC9B,UAAMC,YAAYN,UACd;MAAEF,YAAY;QAACmB;QAAaC;QAAUpB;;IAAY,IAClD;MAAEU,WAAWC,IAAGQ,aAAaC,UAAUpB,UAAAA;MAAaG;IAAK;AAC7D,WACE,gBAAAS,QAAA,cAACN,MAAAA;MAAM,GAAGF;MAAQ,GAAGI;MAAWK,KAAKR;OAClCN,QAAAA;;;;AAGP,CAAA;AAGF,IAAMsB,cAAcvB,gBAAAA,YAA6C,CAAC,EAAEC,UAAUC,YAAY,GAAGI,MAAAA,GAASC,iBAAAA;;;AACpG,WACE,gBAAAO,QAAA,cAACU,QAAQhB,MAAI;MAAE,GAAGF;MAAOJ,YAAY;QAAC;QAAiCA;;MAAaa,KAAKR;OACtFN,QAAAA;;;;AAGP,CAAA;AAEA,IAAMwB,wBAAwBD,QAAQE;AACtC,IAAMC,uBAAuBH,QAAQI;AAErC,IAAMC,iBAAiB7B,gBAAAA,YAAyD,CAAC,EAAE8B,YAAW,GAAIvB,iBAAAA;;;AAChG,UAAM,EAAEwB,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,UAAMzB,OAAOsB,cAAcN,QAAQE,aAAaA;AAChD,WACE,gBAAAZ,QAAA,cAACN,MAAAA;MACC0B,UAAAA;MACAC,MAAK;MACLC,SAAQ;MACRC,OAAON,EAAE,mBAAA;MACT7B,YAAW;MACXa,KAAKR;;;;;AAGX,CAAA;AAEA,IAAM+B,kBAAkBC,UAAUC;AAElC,IAAMC,WAAWC,UAAUxB;AAS3B,IAAMyB,aAAa,CAACrC,UAAAA;;;AAClB,UAAMsC,SAAStC,MAAMsC,WAAW,SAAS,gBAAgB;AACzD,QAAItC,MAAMuC,OAAO;AACf,aACE,gBAAA/B,QAAA,cAACgC,OAAAA;QAAM5C,YAAY;UAAC;UAA2B0C;UAAQtC,MAAMJ;;QAAa6C,KAAKzC,MAAMuC;QAAOG,KAAK1C,MAAM0C;;IAE3G;AAEA,QAAI1C,MAAM6B,MAAM;AACd,aACE,gBAAArB,QAAA,cAACI,OAAAA;QACCb,MAAK;QACLO,WAAWC,IAAG,wEAAwE+B,QAAQtC,MAAMJ,UAAU;QAC9G+C,cAAY3C,MAAM0C;SAElB,gBAAAlC,QAAA,cAACoC,OAAAA;QAAKf,MAAM7B,MAAM6B;QAAMgB,MAAM;;IAGpC;;;;AACF;AAEA,IAAMC,aAAapD,gBAAAA,YACjB,CAAC,EAAEC,UAAUC,YAAYE,SAASC,OAAO,QAAQ,GAAGC,MAAAA,GAASC,iBAAAA;;;AAC3D,UAAMC,OAAOJ,UAAUK,QAAO;AAC9B,UAAMC,YAAYN,UACd;MAAEF,YAAY;QAACmD;QAAYnD;;IAAY,IACvC;MAAEU,WAAWC,IAAGwC,YAAYnD,UAAAA;MAAaG;IAAK;AAClD,WACE,gBAAAS,QAAA,cAACN,MAAAA;MAAM,GAAGF;MAAQ,GAAGI;MAAWK,KAAKR;OAClCN,QAAAA;;;;AAGP,CAAA;AAGF,IAAMqD,WAAWtD,gBAAAA,YACf,CAAC,EAAEC,UAAUC,YAAYE,SAASC,OAAO,QAAQ,GAAGC,MAAAA,GAASC,iBAAAA;;;AAC3D,UAAMC,OAAOJ,UAAUK,QAAO;AAC9B,UAAMC,YAAYN,UAAU;MAAEF,YAAY;QAACoB;QAAUpB;;IAAY,IAAI;MAAEU,WAAWC,IAAGS,UAAUpB,UAAAA;MAAaG;IAAK;AACjH,WACE,gBAAAS,QAAA,cAACN,MAAAA;MAAM,GAAGF;MAAQ,GAAGI;MAAWK,KAAKR;OAClCN,QAAAA;;;;AAGP,CAAA;AAGK,IAAMsD,OAAO;EAClBC,YAAYzD;EACZ0D,aAAazC;EACb0C,SAAStC;EACTI,SAASD;EACToC,mBAAmBlC;EACnBmC,kBAAkBjC;EAClBkC,YAAYhC;EACZW,aAAaF;EACbwB,MAAMrB;EACNsB,QAAQpB;EACRqB,QAAQZ;EACRa,MAAMX;AACR;;;;ACnMA,OAAOY,aAAuC;AAE9C,SAASC,MAAAA,WAAU;AAInB,IAAMC,sBAAsB,CAAC,EAAEC,SAAQ,MAAyB;;;AAC9D,WAAO,gBAAAC,QAAA,cAACC,OAAAA;MAAIC,WAAU;OAAOH,QAAAA;;;;AAC/B;AAEA,IAAMI,yBAAyB,CAAC,EAAEJ,SAAQ,MAAyB;;;AACjE,WAAO,gBAAAC,QAAA,cAACC,OAAAA;MAAIC,WAAWE,IAAGC,UAAU,2CAAA;OAA+CN,QAAAA;;;;AACrF;AAEO,IAAMO,mBAAkB;EAC7BC,MAAMT;EACNU,SAASL;AACX;;;;ACjBA,SAASM,QAAAA,aAAY;AACrB,OAAOC,WAAwCC,cAAAA,mBAAkB;AAGjE,SAASC,MAAAA,WAAU;AAOnB,IAAMC,iBAAiBC,gBAAAA,YAGrB,CAAC,EAAEC,UAAUC,YAAYC,aAAa,GAAG,GAAGC,MAAAA,GAASC,iBAAAA;;;AACrD,WACE,gBAAAC,QAAA,cAACC,OAAAA;MACCC,aAAY;MACZC,MAAK;MACLC,MAAM;MACNR;;QAEE;UAAC;UAASC,aAAa,KAAK;UAASD;;;MAEvCC;MACAQ,mBAAmB;MACnBC,gBAAa;MACZ,GAAGR;MACJS,KAAKR;OAEJJ,QAAAA;;;;AAGP,CAAA;AAEA,IAAMa,sBAAsBC,KAAKC;AAEjC,IAAMC,mBAAmB;AAEzB,IAAMC,mBAAmBlB,gBAAAA,YACvB,CAAC,EAAEC,UAAUC,YAAYiB,SAASC,OAAO,WAAW,GAAGhB,MAAAA,GAASC,iBAAAA;;;AAC9D,UAAMgB,OAAOF,UAAUG,QAAO;AAC9B,UAAMC,YAAYJ,UACd;MAAEjB,YAAY;QAACe;QAAkBf;;IAAY,IAC7C;MAAEsB,WAAWC,IAAGR,kBAAkBf,UAAAA;MAAakB;IAAK;AACxD,WACE,gBAAAd,QAAA,cAACe,MAAAA;MAAM,GAAGjB;MAAQ,GAAGmB;MAAWV,KAAKR;OAClCJ,QAAAA;;;;AAGP,CAAA;AAGF,IAAMyB,kBACJ;AAEF,IAAMC,kBAAkB3B,gBAAAA,YACtB,CAAC,EAAEC,UAAUC,YAAYiB,SAASC,OAAO,QAAQ,GAAGhB,MAAAA,GAASC,iBAAAA;;;AAC3D,UAAMgB,OAAOF,UAAUG,QAAO;AAC9B,UAAMC,YAAYJ,UACd;MAAEjB,YAAY;QAACwB;QAAiBxB;;IAAY,IAC5C;MAAEsB,WAAWC,IAAGC,iBAAiBxB,UAAAA;MAAakB;IAAK;AACvD,WACE,gBAAAd,QAAA,cAACe,MAAAA;MAAM,GAAGjB;MAAQ,GAAGmB;MAAWV,KAAKR;OAClCJ,QAAAA;;;;AAGP,CAAA;AAGF,IAAM2B,mBACJ;AAMF,IAAMC,mBAAmB7B,gBAAAA,YACvB,CAAC,EAAEC,UAAUC,YAAYiB,SAASC,OAAO,QAAQU,SAAS,MAAM,GAAG1B,MAAAA,GAASC,iBAAAA;;;AAC1E,UAAMgB,OAAOF,UAAUG,QAAO;AAC9B,UAAMS,iBAAiBD,SAAS;MAACF;MAAkBI;QAAuC;MAACJ;;AAC3F,UAAML,YAAYJ,UACd;MAAEjB,YAAY;WAAI6B;QAAgB7B;;IAAY,IAC9C;MAAEsB,WAAWC,IAAAA,GAAMM,gBAAgB7B,UAAAA;MAAakB;IAAK;AACzD,WACE,gBAAAd,QAAA,cAACe,MAAAA;MAAM,GAAGjB;MAAQ,GAAGmB;MAAWU,yBAAsB;MAAQpB,KAAKR;OAChEJ,QAAAA;;;;AAGP,CAAA;AAGF,IAAMiC,gBAAgB;AAEtB,IAAMC,gBAAgBnC,gBAAAA,YACpB,CAAC,EAAEC,UAAUC,YAAYiB,SAASC,OAAO,QAAQ,GAAGhB,MAAAA,GAASC,iBAAAA;;;AAC3D,UAAMgB,OAAOF,UAAUG,QAAO;AAC9B,UAAMC,YAAYJ,UACd;MAAEjB,YAAY;QAACgC;QAAehC;;IAAY,IAC1C;MAAEsB,WAAWC,IAAGS,eAAehC,UAAAA;MAAakB;IAAK;AACrD,WACE,gBAAAd,QAAA,cAACe,MAAAA;MAAM,GAAGjB;MAAQ,GAAGmB;MAAWV,KAAKR;OAClCJ,QAAAA;;;;AAGP,CAAA;AAGF,IAAMmC,gBAAgB;AAEtB,IAAMC,gBAAgBrC,gBAAAA,YACpB,CAAC,EAAEC,UAAUC,YAAYiB,SAASC,OAAO,QAAQ,GAAGhB,MAAAA,GAASC,iBAAAA;;;AAC3D,UAAMgB,OAAOF,UAAUG,QAAO;AAC9B,UAAMC,YAAYJ,UACd;MAAEjB,YAAY;QAACkC;QAAelC;;IAAY,IAC1C;MAAEsB,WAAWC,IAAGW,eAAelC,UAAAA;MAAakB;IAAK;AACrD,WACE,gBAAAd,QAAA,cAACe,MAAAA;MAAM,GAAGjB;MAAQ,GAAGmB;MAAWV,KAAKR;OAClCJ,QAAAA;;;;AAGP,CAAA;AAGK,IAAMqC,YAAY;EACvBjB,MAAMc;EACNI,SAASV;EACTtB,OAAOR;EACPyC,SAAStB;EACTuB,QAAQd;EACRX,YAAYF;EACZ4B,MAAML;AACR;;;;ACpIA,OAAOM,aAAuC;AAE9C,SAASC,cAAAA,aAAYC,kBAAAA,uBAAsB;AAC3C,SAASC,MAAAA,YAAU;AAKnB,IAAMC,2BAA2B,CAAC,EAAEC,SAAQ,MAAyB;;;AACnE,WACE,gBAAAC,QAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,gBAAAF,QAAA,cAACC,OAAAA;MAAIC,WAAU;OACZH,QAAAA,CAAAA;;;;AAIT;AAEA,IAAMI,8BAA8B,CAAC,EAAEJ,SAAQ,MAAyB;;;AACtE,UAAM,EAAEK,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,WACE,gBAAAN,QAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,gBAAAF,QAAA,cAACO,aAAAA;MACCC,UAAAA;MACAC,MAAK;MACLC,SAAQ;MACRC,OAAOP,EAAE,0BAAA;MACTQ,YAAW;QAEZb,QAAAA;;;;AAGP;AAEA,IAAMc,8BAA8B,CAAC,EACnCd,UACAe,aAAa,EAAC,MACoC;;;AAClD,WACE,gBAAAd,QAAA,cAACC,OAAAA;MACCC,WAAWa,KAAG,oDAAoD,SAASD,aAAa,IAAI,UAAU,OAAA;OAErGf,QAAAA;;;;AAGP;AAEA,IAAMiB,6BAA6B,CAAC,EAAEjB,SAAQ,MAAyB;;;AACrE,WAAO,gBAAAC,QAAA,cAACC,OAAAA;MAAIC,WAAU;OAAiCH,QAAAA;;;;AACzD;AAEO,IAAMkB,uBAAuB;EAClCC,MAAMpB;EACNqB,SAAShB;EACTiB,SAASP;EACTQ,QAAQL;AACV;",
6
+ "names": ["React", "useCallback", "useRef", "useState", "mx", "cache", "Map", "Image", "classNames", "src", "alt", "crossOrigin", "sampleSize", "contrast", "crossOriginState", "setCrossOriginState", "useState", "dominantColor", "setDominantColor", "undefined", "imageLoaded", "setImageLoaded", "canvasRef", "useRef", "handleImageError", "handleImageLoad", "useCallback", "target", "rgb", "get", "img", "current", "color", "extractDominantColor", "set", "div", "className", "mx", "style", "backgroundColor", "canvas", "ref", "display", "aria-hidden", "background", "transition", "opacity", "onError", "onLoad", "ctx", "getContext", "width", "height", "drawImage", "imageData", "getImageData", "pixels", "data", "isTransparent", "r", "g", "b", "totalWeight", "cornerSize", "Math", "floor", "y", "x", "isInTopLeft", "isInTopRight", "isInBottomLeft", "isInBottomRight", "i", "red", "green", "blue", "alpha", "max", "min", "saturation", "weight", "round", "threshold", "edgeTransparentPixels", "edgePixels", "topIndex", "bottomIndex", "leftIndex", "rightIndex", "createContext", "useContext", "StackContext", "createContext", "orientation", "rail", "size", "useStack", "useContext", "idle", "type", "StackItemContext", "selfDragHandleRef", "setSize", "state", "setState", "useStackItem", "composeRefs", "React", "Children", "forwardRef", "useCallback", "useEffect", "useMemo", "useState", "ListItem", "useId", "mx", "combine", "dropTargetForElements", "autoScrollForElements", "attachClosestEdge", "extractClosestEdge", "useLayoutEffect", "useState", "noop", "useStackDropForElements", "id", "element", "scrollElement", "orientation", "selfDroppable", "onRearrange", "dropping", "setDropping", "useState", "useLayoutEffect", "acceptSourceType", "combine", "dropTargetForElements", "getData", "input", "attachClosestEdge", "type", "allowedEdges", "onDragEnter", "source", "data", "onDrag", "onDragLeave", "onDrop", "self", "extractClosestEdge", "autoScrollForElements", "getAllowedAxis", "railGridHorizontal", "railGridVertical", "railGridHorizontalContainFitContent", "railGridVerticalContainFitContent", "autoScrollRootAttributes", "PERPENDICULAR_FOCUS_THRESHHOLD", "scrollIntoViewAndFocus", "el", "orientation", "scrollIntoView", "behavior", "focus", "Stack", "forwardRef", "children", "classNames", "style", "rail", "size", "onRearrange", "itemsCount", "Children", "count", "getDropElement", "separatorOnScroll", "circularFocus", "props", "forwardedRef", "stackId", "useId", "id", "stackElement", "stackRef", "useState", "lastFocusedItem", "setLastFocusedItem", "composedItemRef", "composeRefs", "styles", "selfDroppable", "dropping", "useStackDropForElements", "element", "scrollElement", "handleScroll", "useCallback", "Number", "isFinite", "scrollPosition", "scrollLeft", "scrollTop", "scrollSize", "scrollWidth", "scrollHeight", "clientSize", "clientWidth", "clientHeight", "separatorHost", "closest", "setAttribute", "String", "handleBlur", "event", "target", "closestStackItem", "getAttribute", "undefined", "onBlur", "handleKeyDown", "key", "startsWith", "toLowerCase", "slice", "closestOwnedItem", "closestStack", "closestStackItems", "Array", "from", "querySelectorAll", "closestStackOrientation", "ancestorStack", "parentElement", "ancestorOrientation", "parallelDelta", "perpendicularDelta", "currentIndex", "indexOf", "nextIndex", "adjacentItem", "length", "preventDefault", "siblingStacks", "currentStackIndex", "nextStackIndex", "adjacentStack", "adjacentStackSelfItem", "adjacentStackItems", "closestItem", "querySelector", "ownedItemRect", "getBoundingClientRect", "targetPosition", "top", "left", "closestDistance", "Infinity", "item", "itemRect", "itemPosition", "distance", "Math", "abs", "closestOwnedItemStack", "closestOwnedItemStackItems", "includes", "onKeyDown", "gridClasses", "useMemo", "useEffect", "observer", "MutationObserver", "observe", "childList", "subtree", "disconnect", "React", "StackContext", "Provider", "value", "div", "className", "mx", "data-dx-stack", "data-dx-stack-circular-focus", "data-dx-last-focused-item", "data-rail", "aria-orientation", "ref", "onScroll", "ListItem", "DropIndicator", "lineInset", "terminalInset", "gap", "edge", "translationKey", "translations", "combine", "draggable", "dropTargetForElements", "preserveOffsetOnSource", "setCustomNativeDragPreview", "attachClosestEdge", "extractClosestEdge", "useFocusableGroup", "composeRefs", "React", "forwardRef", "useCallback", "useLayoutEffect", "useMemo", "useState", "createPortal", "ListItem", "resizeAttributes", "sizeStyle", "mx", "React", "forwardRef", "useMemo", "mx", "StackItemContent", "forwardRef", "children", "toolbar", "statusbar", "layoutManaged", "classNames", "size", "scrollable", "props", "forwardedRef", "stackItemSize", "useStack", "role", "useStackItem", "style", "useMemo", "gridTemplateRows", "join", "React", "div", "className", "mx", "data-popover-collision-boundary", "ref", "Slot", "React", "StackItemDragHandle", "asChild", "children", "selfDragHandleRef", "useStackItem", "Root", "Slot", "React", "ref", "role", "Slot", "React", "forwardRef", "useAttention", "mx", "StackItemHeading", "children", "classNames", "asChild", "separateOnScroll", "props", "orientation", "useStack", "Root", "Slot", "React", "role", "className", "mx", "StackItemHeadingStickyContent", "div", "StackItemHeadingLabel", "forwardRef", "attendableId", "related", "forwardedRef", "hasAttention", "isAncestor", "isRelated", "useAttention", "h1", "data-attention", "toString", "ref", "React", "ResizeHandle", "MIN_WIDTH", "MIN_HEIGHT", "StackItemResizeHandle", "orientation", "useStack", "setSize", "size", "useStackItem", "React", "ResizeHandle", "side", "fallbackSize", "DEFAULT_EXTRINSIC_SIZE", "minSize", "onSizeChange", "React", "Fragment", "forwardRef", "useState", "keySymbols", "Button", "DropdownMenu", "Icon", "toLocalizedString", "useTranslation", "useAttention", "descriptionText", "mx", "getHostPlatform", "React", "MenuSignifierHorizontal", "React", "svg", "className", "width", "height", "viewBox", "stroke", "opacity", "line", "x1", "y1", "x2", "y2", "strokeWidth", "strokeLinecap", "strokeDasharray", "strokeDashoffset", "StackItemSigilButton", "forwardRef", "attendableId", "classNames", "related", "isMenu", "children", "props", "forwardedRef", "hasAttention", "isAncestor", "isRelated", "useAttention", "variant", "React", "Button", "ref", "MenuSignifierHorizontal", "StackItemSigil", "actions", "actionGroups", "onAction", "triggerLabel", "icon", "t", "useTranslation", "translationKey", "optionsMenuOpen", "setOptionsMenuOpen", "useState", "hasActions", "length", "button", "span", "className", "Icon", "size", "DropdownMenu", "Root", "open", "onOpenChange", "Trigger", "asChild", "Portal", "Content", "Viewport", "map", "index", "separator", "Separator", "Fragment", "key", "action", "shortcut", "properties", "keyBinding", "getHostPlatform", "menuItemType", "CheckboxItem", "Item", "id", "onClick", "event", "disabled", "stopPropagation", "checked", "isChecked", "undefined", "testId", "toLocalizedString", "label", "ItemIndicator", "mx", "descriptionText", "keySymbols", "join", "Arrow", "DEFAULT_HORIZONTAL_SIZE", "DEFAULT_VERTICAL_SIZE", "DEFAULT_EXTRINSIC_SIZE", "StackItemRoot", "forwardRef", "item", "children", "classNames", "size", "propsSize", "onSizeChange", "role", "order", "prevSiblingId", "nextSiblingId", "style", "disableRearrange", "focusIndicatorVariant", "props", "forwardedRef", "itemElement", "itemRef", "useState", "selfDragHandleElement", "selfDragHandleRef", "closestEdge", "setEdge", "sourceId", "setSourceId", "dragState", "setDragState", "idle", "orientation", "rail", "onRearrange", "stackSize", "stackId", "useStack", "setInternalSize", "Root", "composedItemRef", "composeRefs", "setSize", "useCallback", "nextSize", "commit", "type", "useLayoutEffect", "combine", "draggable", "element", "dragHandle", "getInitialData", "id", "onGenerateDragPreview", "nativeSetDragImage", "source", "location", "document", "body", "setAttribute", "offsetFn", "preserveOffsetOnSource", "input", "current", "rect", "getBoundingClientRect", "setCustomNativeDragPreview", "getOffset", "container", "render", "width", "onDragStart", "removeAttribute", "closest", "onDrop", "dropTargetForElements", "getData", "attachClosestEdge", "allowedEdges", "onDragEnter", "self", "data", "extractClosestEdge", "onDrag", "onDragLeave", "focusableGroupAttrs", "useFocusableGroup", "tabBehavior", "shouldShowDropIndicator", "isTrailingEdgeOfPrevSibling", "undefined", "isLeadingEdgeOfNextSibling", "stackItemContextValue", "useMemo", "state", "setState", "React", "StackItemContext", "Provider", "value", "tabIndex", "className", "mx", "data-dx-stack-item", "data-dx-item-id", "resizeAttributes", "sizeStyle", "Number", "isFinite", "ref", "ListItem", "DropIndicator", "lineInset", "terminalInset", "edge", "StackItemDragPreview", "useStackItem", "createPortal", "StackItem", "Content", "StackItemContent", "Heading", "StackItemHeading", "HeadingLabel", "StackItemHeadingLabel", "HeadingStickyContent", "StackItemHeadingStickyContent", "ResizeHandle", "StackItemResizeHandle", "DragHandle", "StackItemDragHandle", "Sigil", "StackItemSigil", "SigilButton", "StackItemSigilButton", "DragPreview", "cardRoot", "cardSpacing", "cardNoSpacing", "labelSpacing", "cardDialogContent", "cardDialogHeader", "cardDialogOverflow", "cardDialogPaddedOverflow", "cardDialogSearchListRoot", "cardText", "cardHeading", "cardChrome", "Primitive", "Slot", "React", "forwardRef", "Icon", "IconButton", "Toolbar", "useTranslation", "cardMinInlineSize", "hoverableControls", "mx", "cardDefaultInlineSize", "cardMinInlineSize", "cardStackDefaultInlineSizeRem", "CardStaticRoot", "forwardRef", "children", "classNames", "id", "asChild", "role", "props", "forwardedRef", "Root", "Slot", "rootProps", "cardRoot", "className", "mx", "React", "ref", "CardSurfaceRoot", "includes", "div", "hoverableControls", "CardHeading", "cardHeading", "cardText", "CardToolbar", "Toolbar", "CardToolbarIconButton", "IconButton", "CardToolbarSeparator", "Separator", "CardDragHandle", "toolbarItem", "t", "useTranslation", "translationKey", "iconOnly", "icon", "variant", "label", "CardDragPreview", "StackItem", "DragPreview", "CardMenu", "Primitive", "CardPoster", "aspect", "image", "Image", "src", "alt", "aria-label", "Icon", "size", "CardChrome", "cardChrome", "CardText", "Card", "StaticRoot", "SurfaceRoot", "Heading", "ToolbarIconButton", "ToolbarSeparator", "DragHandle", "Menu", "Poster", "Chrome", "Text", "React", "mx", "CardDragPreviewRoot", "children", "React", "div", "className", "CardDragPreviewContent", "mx", "cardRoot", "CardDragPreview", "Root", "Content", "Slot", "React", "forwardRef", "mx", "CardStackStack", "forwardRef", "children", "classNames", "itemsCount", "props", "forwardedRef", "React", "Stack", "orientation", "size", "rail", "separatorOnScroll", "data-density", "ref", "CardStackDragHandle", "Card", "DragHandle", "cardStackHeading", "CardStackHeading", "asChild", "role", "Root", "Slot", "rootProps", "className", "mx", "cardStackFooter", "CardStackFooter", "cardStackContent", "CardStackContent", "footer", "baseClassNames", "railGridHorizontalContainFitContent", "data-scroll-separator", "cardStackRoot", "CardStackRoot", "cardStackItem", "CardStackItem", "CardStack", "Content", "Heading", "Footer", "Item", "React", "IconButton", "useTranslation", "mx", "CardStackDragPreviewRoot", "children", "React", "div", "className", "CardStackDragPreviewHeading", "t", "useTranslation", "translationKey", "IconButton", "iconOnly", "icon", "variant", "label", "classNames", "CardStackDragPreviewContent", "itemsCount", "mx", "CardStackDragPreviewFooter", "CardStackDragPreview", "Root", "Heading", "Content", "Footer"]
7
+ }