@crewlethq/ui 0.82.0 → 0.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +63 -1
  2. package/dist/ActionCard/ActionCard.d.ts +7 -7
  3. package/dist/ActionCard/index.js +1 -1
  4. package/dist/ActionCard-YZKL3CKR.css +130 -0
  5. package/dist/AppShell/AccountRow.d.ts +6 -1
  6. package/dist/AppShell/AppShell.d.ts +25 -13
  7. package/dist/AppShell/index.d.ts +1 -1
  8. package/dist/AppShell/index.js +8 -5
  9. package/dist/AppShell/railMotion.d.ts +60 -0
  10. package/dist/AppShell/railShape.d.ts +5 -0
  11. package/dist/{AppShell-F7RID4P4.css → AppShell-NX5HCD4O.css} +251 -90
  12. package/dist/ArrangeList/index.js +3 -2
  13. package/dist/ArtifactBar/index.js +7 -5
  14. package/dist/ArtifactCard/index.js +3 -3
  15. package/dist/ArtifactKindIllustration/index.js +1 -1
  16. package/dist/{ArtifactKinds-3EH4KR3F.css → ArtifactKinds-27TE3KJL.css} +7 -7
  17. package/dist/ArtifactMakeRow/index.js +1 -1
  18. package/dist/ArtifactNameCell/index.js +1 -1
  19. package/dist/AuthLayout/index.js +3 -3
  20. package/dist/AvatarPicker/index.js +7 -6
  21. package/dist/BrandLockup/index.js +2 -2
  22. package/dist/BriefCard/index.js +2 -1
  23. package/dist/Canvas/index.js +4 -2
  24. package/dist/CanvasBoard/index.js +6 -4
  25. package/dist/CanvasToolbar/index.js +5 -3
  26. package/dist/CatalogTile/CatalogTile.d.ts +23 -5
  27. package/dist/CatalogTile/index.d.ts +1 -1
  28. package/dist/CatalogTile/index.js +2 -1
  29. package/dist/{CatalogTile-6VF36JWA.css → CatalogTile-TMOSGSV3.css} +4 -3
  30. package/dist/ChangeMark/index.js +4 -2
  31. package/dist/ChatThread/index.js +2 -2
  32. package/dist/CommandPalette/index.js +3 -2
  33. package/dist/CompactNav/CompactNav.d.ts +10 -6
  34. package/dist/CompactNav/index.js +2 -1
  35. package/dist/ContrastHelp/index.js +3 -2
  36. package/dist/DataGrid/index.js +2 -2
  37. package/dist/DataTable/index.js +4 -3
  38. package/dist/DataView/index.js +8 -7
  39. package/dist/DateTimePicker/index.js +3 -2
  40. package/dist/DeepWorkCard/index.js +2 -2
  41. package/dist/DirectoryList/index.js +1 -1
  42. package/dist/{DirectoryList-XZOWYOA3.css → DirectoryList-IXQIMNFS.css} +8 -1
  43. package/dist/DocTabsEditor/index.js +5 -3
  44. package/dist/DockColumn/DockColumn.d.ts +68 -0
  45. package/dist/DockColumn/index.d.ts +3 -0
  46. package/dist/DockColumn/index.js +6 -0
  47. package/dist/DockColumn-SMJCXHS4.css +61 -0
  48. package/dist/{Editor-7EQWP3RN.js → Editor-VGNB35NJ.js} +2 -1
  49. package/dist/EmojiPicker/index.js +5 -3
  50. package/dist/FactList/index.js +4 -2
  51. package/dist/HuePicker/index.js +5 -4
  52. package/dist/InboxList/InboxList.d.ts +28 -2
  53. package/dist/InboxList/index.d.ts +1 -1
  54. package/dist/InboxList/index.js +6 -1
  55. package/dist/{InboxList-OFGSX5IH.css → InboxList-X5Q5WWAI.css} +63 -2
  56. package/dist/LinkInterstitial/index.js +3 -2
  57. package/dist/ListDetail/ListDetail.d.ts +6 -0
  58. package/dist/ListDetail/index.js +1 -1
  59. package/dist/{ListDetail-N3L7PB46.css → ListDetail-JGESKTR7.css} +38 -0
  60. package/dist/ListInput/index.js +3 -2
  61. package/dist/MarkdownEditor/index.js +5 -4
  62. package/dist/MediaMatch/index.d.ts +1 -1
  63. package/dist/MediaMatch/index.js +1 -1
  64. package/dist/MediaMatch/useMediaMatch.d.ts +14 -0
  65. package/dist/Menu/index.js +2 -1
  66. package/dist/MergeConflicts/index.js +5 -4
  67. package/dist/MessageActions/index.js +6 -4
  68. package/dist/Modal/index.js +2 -1
  69. package/dist/OpenInAppCard/index.js +2 -2
  70. package/dist/Outline/index.js +2 -1
  71. package/dist/Popover/index.js +2 -1
  72. package/dist/Presence/index.d.ts +2 -0
  73. package/dist/Presence/index.js +4 -0
  74. package/dist/Presence/usePresence.d.ts +109 -0
  75. package/dist/ReactionBar/index.js +6 -4
  76. package/dist/ReadingPane/ReadingPane.d.ts +17 -1
  77. package/dist/ReadingPane/index.d.ts +1 -1
  78. package/dist/ReadingPane/index.js +2 -1
  79. package/dist/{ReadingPane-VLYOWMCM.css → ReadingPane-VFTRDPC5.css} +19 -0
  80. package/dist/RecordChip/index.js +3 -2
  81. package/dist/Reorder/index.js +2 -1
  82. package/dist/RichEditor/index.js +1 -1
  83. package/dist/SectionFrame/index.js +2 -2
  84. package/dist/SegmentedControl/index.js +4 -3
  85. package/dist/SetupWizard/index.js +2 -2
  86. package/dist/ShareDialog/index.js +5 -4
  87. package/dist/SheetColumnEditor/index.js +6 -5
  88. package/dist/SheetGrid/index.js +8 -6
  89. package/dist/SidebarNav/SidebarNav.d.ts +18 -2
  90. package/dist/SidebarNav/index.d.ts +1 -1
  91. package/dist/SidebarNav/index.js +1 -1
  92. package/dist/{SidebarNav-E7PZGGA6.css → SidebarNav-IKBKGXW4.css} +20 -0
  93. package/dist/SlideFilmstrip/index.js +5 -3
  94. package/dist/Switcher/index.js +5 -4
  95. package/dist/Tabs/index.js +3 -2
  96. package/dist/ThemeSwitcher/index.js +5 -4
  97. package/dist/TimeRangePicker/index.js +6 -5
  98. package/dist/TimeWindowPicker/index.js +3 -2
  99. package/dist/Tooltip/index.js +3 -1
  100. package/dist/TreeCanvas/index.js +6 -3
  101. package/dist/VersionCompare/index.js +5 -4
  102. package/dist/{chunk-KJR5X4II.js → chunk-22CU7V4J.js} +2 -2
  103. package/dist/{chunk-4RYELYWG.js → chunk-2SVQBQAD.js} +2 -2
  104. package/dist/{chunk-N2T7Y5KR.js → chunk-3AMWXJQX.js} +1 -1
  105. package/dist/{chunk-HQFOZJQ4.js → chunk-46FIBJCV.js} +4 -4
  106. package/dist/{chunk-LQRN2XZK.js → chunk-4DEKONVJ.js} +2 -2
  107. package/dist/chunk-5JPOFAVN.js +58 -0
  108. package/dist/{chunk-C7UHDM7Y.js → chunk-5V6GW6HK.js} +1 -1
  109. package/dist/{chunk-Q7N2ATMC.js → chunk-64JNKLLP.js} +57 -9
  110. package/dist/chunk-6C7GQOBV.js +10 -0
  111. package/dist/{chunk-YRNNUCQP.js → chunk-7BDBO2NP.js} +1 -1
  112. package/dist/{chunk-XGLMPPDW.js → chunk-7K6LVM5I.js} +1 -1
  113. package/dist/{chunk-FKAJBN6G.js → chunk-7M7WKYOV.js} +3 -3
  114. package/dist/{chunk-A5YKNRG6.js → chunk-7QCSISHM.js} +2 -1
  115. package/dist/{chunk-3QQIGMY3.js → chunk-7ZSEUO5Q.js} +6 -30
  116. package/dist/{chunk-57BFL323.js → chunk-ABRWL5FJ.js} +1 -1
  117. package/dist/{chunk-HFOTRZFU.js → chunk-AQNP3KQU.js} +2 -2
  118. package/dist/{chunk-GZVAZ3LL.js → chunk-AZYE7NR4.js} +1 -1
  119. package/dist/{chunk-6IOQWMYJ.js → chunk-BN5FEJL5.js} +1 -1
  120. package/dist/{chunk-25JQNHTC.js → chunk-BRK3HXGZ.js} +8 -2
  121. package/dist/{chunk-MPVMB2DV.js → chunk-BVML4UVB.js} +3 -2
  122. package/dist/{chunk-OAHRMR4U.js → chunk-C42XW5YP.js} +1 -1
  123. package/dist/{chunk-2H6YDUR5.js → chunk-C4JTX25K.js} +3 -3
  124. package/dist/{chunk-QE4OIE3Q.js → chunk-DJIWCW5Z.js} +6 -4
  125. package/dist/{chunk-HA2PL7PA.js → chunk-DRFOTWJE.js} +1 -1
  126. package/dist/{chunk-SM4P2SHB.js → chunk-EC6EUIAD.js} +7 -4
  127. package/dist/{chunk-QPHD4UUG.js → chunk-F6ZUM66S.js} +160 -25
  128. package/dist/{chunk-AMUXSJ2A.js → chunk-FPU7AA3X.js} +4 -15
  129. package/dist/{chunk-KLAVEJIO.js → chunk-GLKQHN7G.js} +1 -1
  130. package/dist/{chunk-MVMVMHYI.js → chunk-HDEKHP65.js} +1 -1
  131. package/dist/{chunk-XY4O2XMR.js → chunk-HKUZ2GYX.js} +4 -4
  132. package/dist/chunk-HTS5RJ7S.js +6 -0
  133. package/dist/{chunk-ZB3E2Z4Y.js → chunk-J5T5TDM2.js} +1 -1
  134. package/dist/{chunk-ISQANI6Q.js → chunk-JLOESTT2.js} +2 -1
  135. package/dist/{chunk-C75WZMXG.js → chunk-K6RWEQ6P.js} +1 -1
  136. package/dist/{chunk-GVPUCEWH.js → chunk-KXWJJWBD.js} +1 -1
  137. package/dist/chunk-L72URIHR.js +36 -0
  138. package/dist/{chunk-2TOGGCDM.js → chunk-LT44RL62.js} +2 -2
  139. package/dist/{chunk-C46DDVTK.js → chunk-LTD7KLOU.js} +1 -1
  140. package/dist/{chunk-HCUECVZ3.js → chunk-MVKUE4FI.js} +1 -1
  141. package/dist/{chunk-6YBBQAEM.js → chunk-MYAARF4Z.js} +1 -1
  142. package/dist/{chunk-SEKO6P3Y.js → chunk-NCUSI4ZU.js} +1 -1
  143. package/dist/{chunk-YBC2CYPD.js → chunk-O4VTQMEF.js} +1 -1
  144. package/dist/{chunk-HTBTAIH6.js → chunk-OM2LABPS.js} +2 -2
  145. package/dist/{chunk-T4IEESXN.js → chunk-ORONAXSF.js} +91 -25
  146. package/dist/chunk-PCAT2EFB.js +104 -0
  147. package/dist/{chunk-GP5TNTZH.js → chunk-QWRAWKB2.js} +53 -14
  148. package/dist/{chunk-TGCGLKD4.js → chunk-RBQRTGXX.js} +1 -1
  149. package/dist/{chunk-B3X4DHRB.js → chunk-RDIQB5ZE.js} +2 -2
  150. package/dist/{chunk-SRDNGGZE.js → chunk-RKIJAXQA.js} +1 -1
  151. package/dist/{chunk-T7WESRZF.js → chunk-RO5JU6SN.js} +2 -2
  152. package/dist/{chunk-IUWP2LSE.js → chunk-SGMWLUYQ.js} +2 -2
  153. package/dist/{chunk-LSOR77RZ.js → chunk-SHH7UD5U.js} +1 -1
  154. package/dist/{chunk-JV6JM6W6.js → chunk-SNQ7PH3D.js} +1 -1
  155. package/dist/{chunk-MPYRC3GO.js → chunk-SPNTUQBV.js} +2 -2
  156. package/dist/{chunk-YM77TZ7Q.js → chunk-T3S3D4FC.js} +1 -1
  157. package/dist/{chunk-YOJAGKTS.js → chunk-TGGYSQRD.js} +3 -4
  158. package/dist/{chunk-2KJCUCVE.js → chunk-TQKQRS2J.js} +2 -2
  159. package/dist/{chunk-ONNXUS5Y.js → chunk-VB3FVKNI.js} +1 -1
  160. package/dist/{chunk-JHQGNFN3.js → chunk-VONEKR3J.js} +2 -2
  161. package/dist/{chunk-P6F3PE4V.js → chunk-WANKINXG.js} +2 -2
  162. package/dist/{chunk-PXLS6JKL.js → chunk-WMO722J2.js} +1 -1
  163. package/dist/{chunk-SYVQXMLO.js → chunk-XRWHDW6F.js} +4 -4
  164. package/dist/{chunk-WT3B76MG.js → chunk-XTJHMP3W.js} +1 -1
  165. package/dist/{chunk-CF4M6N6A.js → chunk-XYSSFI5C.js} +1 -7
  166. package/dist/{chunk-RTPQDNW3.js → chunk-YJQXESOJ.js} +5 -1
  167. package/dist/{chunk-VGOWSOUA.js → chunk-YXKSUILG.js} +1 -1
  168. package/dist/{chunk-G6ZFSUIH.js → chunk-ZJVLGYE3.js} +2 -2
  169. package/dist/{chunk-BSAU7QRW.js → chunk-ZPTKAYJK.js} +1 -1
  170. package/dist/{chunk-XXDB6KPV.js → chunk-ZXXZESCD.js} +3 -4
  171. package/dist/generated/index.d.ts +2 -0
  172. package/dist/generated/index.js +108 -103
  173. package/dist/index.js +108 -103
  174. package/dist/styles.css +525 -134
  175. package/dist/utils/composedRef.d.ts +39 -0
  176. package/dist/utils/developing.d.ts +10 -0
  177. package/dist/utils/index.d.ts +2 -0
  178. package/dist/utils/index.js +3 -1
  179. package/dist/utils/tokenMs.d.ts +6 -0
  180. package/package.json +5 -5
  181. package/dist/ActionCard-47WSZ2O5.css +0 -110
  182. package/dist/{chunk-IYI6HWKN.js → chunk-CV2LU2T2.js} +1 -1
  183. package/dist/{chunk-FVZPSTL2.js → chunk-G4EHZHKM.js} +1 -1
  184. /package/dist/{chunk-FEJANUZK.js → chunk-KBSD476L.js} +0 -0
  185. /package/dist/{chunk-KLWWNV25.js → chunk-REEZQCML.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  import { Select } from './chunk-3IWZVEXA.js';
2
- import { Modal } from './chunk-XXDB6KPV.js';
2
+ import { Modal } from './chunk-ZXXZESCD.js';
3
3
  import { CopyButton } from './chunk-T5GBTXNC.js';
4
4
  import { Callout } from './chunk-BPCY7ZID.js';
5
5
  import { PrincipalAvatar } from './chunk-HF5L56YQ.js';
6
- import { useMediaMatch } from './chunk-RTPQDNW3.js';
6
+ import { useMediaMatch } from './chunk-YJQXESOJ.js';
7
7
  import { Button } from './chunk-DGXZ635L.js';
8
8
  import { IconButton } from './chunk-UAUP6XGK.js';
9
9
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
@@ -1,4 +1,4 @@
1
- import { tabId } from './chunk-HCUECVZ3.js';
1
+ import { tabId } from './chunk-MVKUE4FI.js';
2
2
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
3
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { Count } from './chunk-D2GT3CR4.js';
@@ -1,4 +1,4 @@
1
- import { BrandLockup } from './chunk-GVPUCEWH.js';
1
+ import { BrandLockup } from './chunk-KXWJJWBD.js';
2
2
  import { Card } from './chunk-U2IQNDDR.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './AuthLayout-ODHBUPHQ.css';
@@ -4,7 +4,7 @@ import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './HitArea-QUOS6ZDJ.css';
7
- import './SidebarNav-E7PZGGA6.css';
7
+ import './SidebarNav-IKBKGXW4.css';
8
8
  import { createContext, useId, useState, useContext } from 'react';
9
9
  import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
10
10
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -136,7 +136,13 @@ function NavItem({
136
136
  count || badge || state ? /* @__PURE__ */ jsx(VisuallyHidden, { children: `${spoken([count, badge])}${state}` }) : null
137
137
  ] }),
138
138
  count ? /* @__PURE__ */ jsx(Figure, { figure: count, mark: count.mark, className: "crewlet-nav-item__count" }) : null,
139
- badge ? /* @__PURE__ */ jsx(Figure, { figure: badge, className: "crewlet-nav-item__badge" }) : null
139
+ badge ? /* @__PURE__ */ jsx(
140
+ Figure,
141
+ {
142
+ figure: badge,
143
+ className: cx("crewlet-nav-item__badge", badge.tone === "quiet" && "crewlet-nav-item__badge--quiet")
144
+ }
145
+ ) : null
140
146
  ] });
141
147
  const rowClass = cx("crewlet-nav-item__row", HIT_AREA_CLASS);
142
148
  let row;
@@ -1,3 +1,4 @@
1
+ import { prefersReducedMotion } from './chunk-YJQXESOJ.js';
1
2
  import { announce } from './chunk-2G355KDJ.js';
2
3
  import { useId, useState, useRef, useCallback, useLayoutEffect, useMemo } from 'react';
3
4
 
@@ -24,7 +25,7 @@ function place(lists, key, list, index) {
24
25
  return next;
25
26
  }
26
27
  var SETTLE_MS = 200;
27
- var settleMs = () => typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches ? 20 : SETTLE_MS;
28
+ var settleMs = () => prefersReducedMotion() ? 20 : SETTLE_MS;
28
29
  var now = () => typeof performance !== "undefined" ? performance.now() : Date.now();
29
30
  function byRows(node, axis) {
30
31
  if (axis === "vertical") return true;
@@ -79,7 +80,7 @@ function useReorderLists({
79
80
  const last = before.current;
80
81
  before.current = /* @__PURE__ */ new Map();
81
82
  if (last.size === 0) return;
82
- if (typeof window === "undefined" || window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) return;
83
+ if (typeof window === "undefined" || prefersReducedMotion()) return;
83
84
  for (const [key, node] of nodes.current) {
84
85
  const was = last.get(key);
85
86
  if (!was) continue;
@@ -1,4 +1,4 @@
1
- import { SegmentedControl } from './chunk-GZVAZ3LL.js';
1
+ import { SegmentedControl } from './chunk-AZYE7NR4.js';
2
2
  import { Button } from './chunk-DGXZ635L.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './MergeConflicts-HCXPRQVR.css';
@@ -3,13 +3,13 @@ import { PrincipalAvatar } from './chunk-HF5L56YQ.js';
3
3
  import { RelativeTime } from './chunk-EJNJMHQG.js';
4
4
  import { Card } from './chunk-U2IQNDDR.js';
5
5
  import { AvatarStack } from './chunk-IRONPJB4.js';
6
- import { ArtifactKindGround } from './chunk-ZB3E2Z4Y.js';
7
- import { ArtifactAccessGlyph } from './chunk-DOY3KC6I.js';
6
+ import { ArtifactKindGround } from './chunk-J5T5TDM2.js';
8
7
  import { Checkbox } from './chunk-YQ7Q52XU.js';
8
+ import { ArtifactAccessGlyph } from './chunk-DOY3KC6I.js';
9
9
  import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
10
10
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
11
11
  import { cx } from './chunk-ODEQTPFM.js';
12
- import './ArtifactKinds-3EH4KR3F.css';
12
+ import './ArtifactKinds-27TE3KJL.css';
13
13
  import './ArtifactCard-B2QE5CVL.css';
14
14
  import { useId } from 'react';
15
15
  import { PinGlyph } from '@crewlethq/icons/glyphs';
@@ -1,8 +1,9 @@
1
+ import { StatusDot } from './chunk-CYQBDZ6M.js';
1
2
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
2
3
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './CatalogTile-6VF36JWA.css';
4
+ import './CatalogTile-TMOSGSV3.css';
4
5
  import { useId } from 'react';
5
- import { jsxs, jsx } from 'react/jsx-runtime';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
7
 
7
8
  function CatalogTile({
8
9
  as: Element = "article",
@@ -22,6 +23,7 @@ function CatalogTile({
22
23
  const Heading = headingTag(headingLevel ?? level);
23
24
  const titleId = useId();
24
25
  const foot = meta !== void 0 || action !== void 0;
26
+ const state = status ? /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__status", children: /* @__PURE__ */ jsx(StatusDot, { tone: status.tone, children: status.label }) }) : null;
25
27
  if (density === "compact") {
26
28
  return /* @__PURE__ */ jsxs(
27
29
  Element,
@@ -39,7 +41,7 @@ function CatalogTile({
39
41
  /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__mark", "aria-hidden": "true", children: mark }),
40
42
  /* @__PURE__ */ jsxs("span", { className: "crewlet-catalog-tile__title", children: [
41
43
  /* @__PURE__ */ jsx(Heading, { id: titleId, className: "crewlet-catalog-tile__name", children: title }),
42
- status === void 0 || status === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__status", children: status }),
44
+ state,
43
45
  meta === void 0 || meta === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__meta", children: meta })
44
46
  ] }),
45
47
  action === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__action", children: action })
@@ -67,7 +69,7 @@ function CatalogTile({
67
69
  /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__mark", "aria-hidden": "true", children: mark }),
68
70
  /* @__PURE__ */ jsxs("span", { className: "crewlet-catalog-tile__title", children: [
69
71
  /* @__PURE__ */ jsx(Heading, { id: titleId, className: "crewlet-catalog-tile__name", children: title }),
70
- status === void 0 || status === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__status", children: status })
72
+ state
71
73
  ] })
72
74
  ] }),
73
75
  description === void 0 ? null : /* @__PURE__ */ jsx("p", { className: "crewlet-catalog-tile__description", children: description }),
@@ -1,5 +1,5 @@
1
1
  import { Toolbar } from './chunk-NXFTCPF6.js';
2
- import { ShortcutTip } from './chunk-SEKO6P3Y.js';
2
+ import { ShortcutTip } from './chunk-NCUSI4ZU.js';
3
3
  import { IconButton } from './chunk-UAUP6XGK.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './CanvasToolbar-EM5EVZED.css';
@@ -1,3 +1,4 @@
1
+ import { useComposedRef } from './chunk-L72URIHR.js';
1
2
  import { useLayerContainer, viewportBounds, LAYER_GAP, anchorGone, placePopup, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
2
3
  import { usePopupLayer, focusables } from './chunk-TUEM2XIW.js';
3
4
  import { returnFocus } from './chunk-4ITETIGZ.js';
@@ -122,11 +123,13 @@ function Popover({
122
123
  }, [close, open, setOpen]);
123
124
  const triggerEl = trigger(open, toggle);
124
125
  const haspopup = role === "none" ? void 0 : role;
126
+ const anchorRef = useComposedRef(
127
+ anchor,
128
+ layer.insideRef,
129
+ triggerEl.props.ref
130
+ );
125
131
  const anchored = cloneElement(triggerEl, {
126
- ref: (el) => {
127
- anchor.current = el;
128
- layer.insideRef(el);
129
- },
132
+ ref: anchorRef,
130
133
  "aria-expanded": open,
131
134
  "aria-haspopup": triggerEl.props["aria-haspopup"] ?? haspopup,
132
135
  "aria-controls": open ? panelId : void 0
@@ -1,15 +1,108 @@
1
1
  import { Eyebrow } from './chunk-RK4XPHVG.js';
2
+ import { developing } from './chunk-6C7GQOBV.js';
3
+ import { usePresence, releaseFocus } from './chunk-PCAT2EFB.js';
2
4
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
3
5
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
6
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './InboxList-OFGSX5IH.css';
6
- import { useId, useState } from 'react';
7
+ import './InboxList-X5Q5WWAI.css';
8
+ import { useId, useState, useRef, useLayoutEffect, useEffect, useCallback, cloneElement, Children, isValidElement } from 'react';
7
9
  import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
8
10
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
11
 
10
12
  function InboxList({ label, className, children, ...rest }) {
11
13
  return /* @__PURE__ */ jsx("nav", { ...rest, "aria-label": label, className: cx("crewlet-inbox-list", className), children });
12
14
  }
15
+ var INBOX_ROW_LEAVE = { transitions: ["grid-template-rows"] };
16
+ function rowsOf(children) {
17
+ const given = [];
18
+ Children.forEach(children, (child) => {
19
+ if (isValidElement(child)) given.push(child.key !== null);
20
+ });
21
+ return Children.toArray(children).filter((child) => isValidElement(child)).map((element, index) => ({
22
+ key: String(element.key),
23
+ element,
24
+ keyed: given[index] === true,
25
+ component: typeof element.type !== "string"
26
+ }));
27
+ }
28
+ function sameKeys(a, b) {
29
+ return a.length === b.length && a.every((key, index) => key === b[index]);
30
+ }
31
+ function keepPlaces(previous, next, kept) {
32
+ const placed = new Set(next);
33
+ const order = [...next];
34
+ previous.forEach((key, index) => {
35
+ if (placed.has(key) || !kept.has(key)) return;
36
+ let at = 0;
37
+ for (let back = index - 1; back >= 0; back -= 1) {
38
+ if (placed.has(previous[back])) {
39
+ at = order.indexOf(previous[back]) + 1;
40
+ break;
41
+ }
42
+ }
43
+ order.splice(at, 0, key);
44
+ placed.add(key);
45
+ });
46
+ return order;
47
+ }
48
+ function useLeavingRows(children) {
49
+ const rows = rowsOf(children);
50
+ const keys = rows.map((row) => row.key);
51
+ const [shown, setRows] = useState(() => ({
52
+ keys,
53
+ order: keys,
54
+ leaving: /* @__PURE__ */ new Map()
55
+ }));
56
+ const drawn = useRef(/* @__PURE__ */ new Map());
57
+ useLayoutEffect(() => {
58
+ drawn.current = new Map(rows.map((row) => [row.key, row]));
59
+ });
60
+ let now = shown;
61
+ if (!sameKeys(shown.keys, keys)) {
62
+ const present = new Set(keys);
63
+ const leaving = new Map([...shown.leaving].filter(([key]) => !present.has(key)));
64
+ for (const key of shown.keys) {
65
+ if (present.has(key)) continue;
66
+ const last = drawn.current.get(key);
67
+ if (last?.keyed && last.component) leaving.set(key, last.element);
68
+ }
69
+ now = { keys, order: keepPlaces(shown.order, keys, new Set(leaving.keys())), leaving };
70
+ setRows(now);
71
+ }
72
+ const warned = useRef(false);
73
+ useEffect(() => {
74
+ if (warned.current || !developing()) return;
75
+ if (rows.some((row) => row.component && !row.keyed)) {
76
+ warned.current = true;
77
+ console.warn(
78
+ "[crewlet] InboxGroup was handed a row without a key of its own. Give each row a stable key, such as its id: a row without one is told apart by its position, and is not kept while it leaves."
79
+ );
80
+ }
81
+ });
82
+ const drop = useCallback((key) => {
83
+ setRows((was) => {
84
+ if (!was.leaving.has(key)) return was;
85
+ const leaving = new Map(was.leaving);
86
+ leaving.delete(key);
87
+ return { ...was, leaving, order: was.order.filter((each) => each !== key) };
88
+ });
89
+ }, []);
90
+ if (now.leaving.size === 0) return rows.map((row) => row.element);
91
+ const live = new Map(rows.map((row) => [row.key, row.element]));
92
+ return now.order.map((key) => {
93
+ const row = live.get(key);
94
+ if (row) return row;
95
+ const last = now.leaving.get(key);
96
+ if (!last) return null;
97
+ return cloneElement(last, {
98
+ leaving: true,
99
+ onLeft: () => {
100
+ last.props.onLeft?.();
101
+ drop(key);
102
+ }
103
+ });
104
+ });
105
+ }
13
106
  function InboxGroup({
14
107
  label,
15
108
  hideLabel = false,
@@ -19,10 +112,12 @@ function InboxGroup({
19
112
  open: controlledOpen,
20
113
  defaultOpen = false,
21
114
  onOpenChange,
115
+ arrived,
22
116
  className,
23
117
  children,
24
118
  ...rest
25
119
  }) {
120
+ const rows = useLeavingRows(children);
26
121
  const level = useHeadingLevel();
27
122
  const Heading = headingTag(headingLevel ?? level);
28
123
  const labelId = useId();
@@ -40,6 +135,7 @@ function InboxGroup({
40
135
  " ",
41
136
  /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-list__count", children: count })
42
137
  ] });
138
+ const arrival = arrived === void 0 ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "crewlet-inbox-list__arrival" }, arrived);
43
139
  return /* @__PURE__ */ jsxs(
44
140
  "section",
45
141
  {
@@ -54,27 +150,31 @@ function InboxGroup({
54
150
  // A DISCLOSURE INSIDE THE HEADING, never a heading inside a button: a
55
151
  // reader moving by heading still lands on the group, and the button
56
152
  // in it says whether the rows are shown.
57
- /* @__PURE__ */ jsx(Heading, { className: "crewlet-inbox-list__label", children: /* @__PURE__ */ jsxs(
58
- "button",
59
- {
60
- type: "button",
61
- id: labelId,
62
- className: "crewlet-inbox-list__disclosure",
63
- "aria-expanded": open,
64
- "aria-controls": rowsId,
65
- onClick: toggle,
66
- children: [
67
- /* @__PURE__ */ jsx(ChevronDownGlyph, { "aria-hidden": true, size: "sm", className: "crewlet-inbox-list__chevron" }),
68
- /* @__PURE__ */ jsx(Eyebrow, { children: label }),
69
- counted
70
- ]
71
- }
72
- ) })
153
+ /* @__PURE__ */ jsxs(Heading, { className: "crewlet-inbox-list__label", children: [
154
+ /* @__PURE__ */ jsxs(
155
+ "button",
156
+ {
157
+ type: "button",
158
+ id: labelId,
159
+ className: "crewlet-inbox-list__disclosure",
160
+ "aria-expanded": open,
161
+ "aria-controls": rowsId,
162
+ onClick: toggle,
163
+ children: [
164
+ /* @__PURE__ */ jsx(ChevronDownGlyph, { "aria-hidden": true, size: "sm", className: "crewlet-inbox-list__chevron" }),
165
+ /* @__PURE__ */ jsx(Eyebrow, { children: label }),
166
+ counted
167
+ ]
168
+ }
169
+ ),
170
+ arrival
171
+ ] })
73
172
  ) : /* @__PURE__ */ jsxs(Heading, { id: labelId, className: "crewlet-inbox-list__label", children: [
74
173
  /* @__PURE__ */ jsx(Eyebrow, { children: label }),
75
- counted
174
+ counted,
175
+ arrival
76
176
  ] }),
77
- /* @__PURE__ */ jsx("ul", { id: rowsId, className: "crewlet-inbox-list__rows", hidden: !open, children })
177
+ /* @__PURE__ */ jsx("ul", { id: rowsId, className: "crewlet-inbox-list__rows", hidden: !open, children: rows })
78
178
  ]
79
179
  }
80
180
  );
@@ -99,10 +199,29 @@ function InboxRow({
99
199
  outcomeTone = "neutral",
100
200
  href,
101
201
  onClick,
202
+ leaving = false,
203
+ onLeft,
204
+ arrived = false,
102
205
  className,
103
206
  children,
104
207
  ...rest
105
208
  }) {
209
+ const self = useRef(null);
210
+ const presence = usePresence(!leaving, self, INBOX_ROW_LEAVE);
211
+ const gone = !presence.present;
212
+ useLayoutEffect(() => {
213
+ if (presence.leaving) releaseFocus(self.current);
214
+ }, [presence.leaving]);
215
+ const told = useRef(false);
216
+ useEffect(() => {
217
+ if (!gone) {
218
+ told.current = false;
219
+ return;
220
+ }
221
+ if (told.current) return;
222
+ told.current = true;
223
+ onLeft?.();
224
+ }, [gone, onLeft]);
106
225
  const contents = /* @__PURE__ */ jsxs(Fragment, { children: [
107
226
  leading === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
108
227
  /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__leading", children: leading }),
@@ -157,10 +276,26 @@ function InboxRow({
157
276
  );
158
277
  const current = selected ? "true" : void 0;
159
278
  const control = href !== void 0 ? /* @__PURE__ */ jsx("a", { className: controlClass, href, "aria-current": current, onClick, children: contents }) : /* @__PURE__ */ jsx("button", { type: "button", className: controlClass, "aria-current": current, onClick, children: contents });
160
- return /* @__PURE__ */ jsxs("li", { ...rest, className: cx("crewlet-inbox-row", selected && "crewlet-inbox-row--selected", className), children: [
161
- control,
162
- aside === void 0 || aside === null || aside === false ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-inbox-row__aside", children: aside })
163
- ] });
279
+ if (gone) return null;
280
+ return /* @__PURE__ */ jsx(
281
+ "li",
282
+ {
283
+ ...rest,
284
+ ref: self,
285
+ inert: presence.leaving,
286
+ className: cx(
287
+ "crewlet-inbox-row",
288
+ selected && "crewlet-inbox-row--selected",
289
+ arrived && "crewlet-inbox-row--arrived",
290
+ presence.leaving && "crewlet-inbox-row--leaving",
291
+ className
292
+ ),
293
+ children: /* @__PURE__ */ jsxs("div", { className: "crewlet-inbox-row__body", children: [
294
+ control,
295
+ aside === void 0 || aside === null || aside === false ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-inbox-row__aside", children: aside })
296
+ ] })
297
+ }
298
+ );
164
299
  }
165
300
  function InboxMore({ className, children, ...rest }) {
166
301
  return /* @__PURE__ */ jsx("div", { ...rest, className: cx("crewlet-inbox-list__more", className), children });
@@ -173,4 +308,4 @@ InboxList.Row = InboxRow;
173
308
  InboxList.More = InboxMore;
174
309
  InboxList.Toggle = InboxToggle;
175
310
 
176
- export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle };
311
+ export { INBOX_ROW_LEAVE, InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle };
@@ -1,9 +1,10 @@
1
1
  import { useTreeState, useMeasuredSizes, layoutForest, treeAncestors, useLayoutAnchor, treeExpandable, layoutConnectors, treeItemAction, treeStep, treePosInSet, treeSetSize, treeLevel, placeGroups } from './chunk-MY374UUD.js';
2
- import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-SEKO6P3Y.js';
2
+ import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-NCUSI4ZU.js';
3
+ import { useMediaMatch, REDUCED_MOTION_QUERY } from './chunk-YJQXESOJ.js';
3
4
  import { focusables } from './chunk-TUEM2XIW.js';
4
5
  import { cx } from './chunk-ODEQTPFM.js';
5
6
  import './TreeCanvas-5FPK4CII.css';
6
- import { useState, useRef, useMemo, useLayoutEffect, useCallback, useImperativeHandle, useId, useSyncExternalStore } from 'react';
7
+ import { useState, useRef, useMemo, useLayoutEffect, useCallback, useImperativeHandle, useId } from 'react';
7
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
9
 
9
10
  var ENTRANCE_STEP_MS = 60;
@@ -14,19 +15,7 @@ function entranceOrder(layout) {
14
15
  return [...layout.nodes].sort((a, b) => row(a) - row(b) || a.x - b.x || (a.id < b.id ? -1 : 1)).map((one) => one.id);
15
16
  }
16
17
  function useStillness() {
17
- const query = "(prefers-reduced-motion: reduce)";
18
- const subscribe = useCallback((notify) => {
19
- if (typeof window === "undefined" || typeof window.matchMedia !== "function") return () => {
20
- };
21
- const list = window.matchMedia(query);
22
- list.addEventListener("change", notify);
23
- return () => list.removeEventListener("change", notify);
24
- }, []);
25
- const read = useCallback(
26
- () => typeof window !== "undefined" && typeof window.matchMedia === "function" ? window.matchMedia(query).matches : false,
27
- []
28
- );
29
- return useSyncExternalStore(subscribe, read, () => false);
18
+ return useMediaMatch(REDUCED_MOTION_QUERY);
30
19
  }
31
20
  function useEntrance(layout, still) {
32
21
  const [shown, setShown] = useState(null);
@@ -1,4 +1,4 @@
1
- import { useReorder } from './chunk-MPVMB2DV.js';
1
+ import { useReorder } from './chunk-BVML4UVB.js';
2
2
  import { FormField, Textarea } from './chunk-O7N6W52M.js';
3
3
  import { characterCountState, CharacterCount, countCharacters } from './chunk-PGCLHYVP.js';
4
4
  import { Kbd } from './chunk-CMAZZY2I.js';
@@ -3,7 +3,7 @@ import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './HitArea-QUOS6ZDJ.css';
6
- import './ArtifactKinds-3EH4KR3F.css';
6
+ import './ArtifactKinds-27TE3KJL.css';
7
7
  import './ArtifactMakeRow-6UX2LTF7.css';
8
8
  import { useId } from 'react';
9
9
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,13 +1,13 @@
1
- import { SegmentedControl } from './chunk-GZVAZ3LL.js';
1
+ import { SegmentedControl } from './chunk-AZYE7NR4.js';
2
2
  import { ArtifactIcon } from './chunk-AVL52EME.js';
3
- import { Tooltip } from './chunk-3QQIGMY3.js';
4
- import { Menu } from './chunk-YOJAGKTS.js';
3
+ import { Tooltip } from './chunk-7ZSEUO5Q.js';
4
+ import { Menu } from './chunk-TGGYSQRD.js';
5
5
  import { isApplePlatform, Kbd, ariaKeyshortcuts } from './chunk-CMAZZY2I.js';
6
6
  import { Button } from './chunk-DGXZ635L.js';
7
7
  import { returnFocus } from './chunk-4ITETIGZ.js';
8
8
  import { IconButton } from './chunk-UAUP6XGK.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
- import './ArtifactKinds-3EH4KR3F.css';
10
+ import './ArtifactKinds-27TE3KJL.css';
11
11
  import './ArtifactBar-X46WJNW7.css';
12
12
  import { useId, useState, useRef, useEffect } from 'react';
13
13
  import { ChevronLeftGlyph, EllipsisGlyph, ChevronDownGlyph } from '@crewlethq/icons/glyphs';
@@ -0,0 +1,6 @@
1
+ // src/utils/tokenMs.ts
2
+ function tokenMs(value) {
3
+ return Number.parseFloat(value);
4
+ }
5
+
6
+ export { tokenMs };
@@ -1,6 +1,6 @@
1
1
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './ArtifactKinds-3EH4KR3F.css';
3
+ import './ArtifactKinds-27TE3KJL.css';
4
4
  import './ArtifactKindIllustration-D2J3HJMJ.css';
5
5
  import { useId } from 'react';
6
6
  import { CheckGlyph } from '@crewlethq/icons/glyphs';
@@ -5,5 +5,6 @@ var RailShapeContext = createContext("full");
5
5
  function useRailShape() {
6
6
  return useContext(RailShapeContext);
7
7
  }
8
+ var RailLeavingContext = createContext(false);
8
9
 
9
- export { RailShapeContext, useRailShape };
10
+ export { RailLeavingContext, RailShapeContext, useRailShape };
@@ -1,6 +1,6 @@
1
1
  import { Stepper } from './chunk-RJWO2PC5.js';
2
2
  import { PageHeader } from './chunk-FPDIHEM4.js';
3
- import { useMediaMatch } from './chunk-RTPQDNW3.js';
3
+ import { useMediaMatch } from './chunk-YJQXESOJ.js';
4
4
  import { Disclosure } from './chunk-LVJGN5II.js';
5
5
  import { useHeadingLevel, nextHeadingLevel, headingTag, HeadingLevelProvider } from './chunk-PQADV6P6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { useRailShape } from './chunk-ISQANI6Q.js';
1
+ import { useRailShape } from './chunk-JLOESTT2.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './BrandLockup-JKGXFCZF.css';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -0,0 +1,36 @@
1
+ import { useRef } from 'react';
2
+
3
+ // src/utils/composedRef.ts
4
+ function attachRef(ref, element) {
5
+ if (typeof ref === "function") {
6
+ const release = ref(element);
7
+ return typeof release === "function" ? release : () => void ref(null);
8
+ }
9
+ if (!ref) return () => {
10
+ };
11
+ const box = ref;
12
+ box.current = element;
13
+ return () => {
14
+ box.current = null;
15
+ };
16
+ }
17
+ function composeRefs(...refs) {
18
+ return (element) => {
19
+ const releases = refs.map((ref) => attachRef(ref, element));
20
+ return () => {
21
+ for (const release of releases) release();
22
+ };
23
+ };
24
+ }
25
+ function sameRefs(a, b) {
26
+ return a.length === b.length && a.every((ref, index) => ref === b[index]);
27
+ }
28
+ function useComposedRef(...refs) {
29
+ const joined = useRef(null);
30
+ if (!joined.current || !sameRefs(joined.current.refs, refs)) {
31
+ joined.current = { refs, callback: composeRefs(...refs) };
32
+ }
33
+ return joined.current.callback;
34
+ }
35
+
36
+ export { attachRef, composeRefs, useComposedRef };
@@ -1,7 +1,7 @@
1
1
  import { heldHint } from './chunk-TDFLCUBE.js';
2
- import { emojiName } from './chunk-MPYRC3GO.js';
2
+ import { emojiName } from './chunk-SPNTUQBV.js';
3
3
  import { Toolbar } from './chunk-NXFTCPF6.js';
4
- import { Tooltip } from './chunk-3QQIGMY3.js';
4
+ import { Tooltip } from './chunk-7ZSEUO5Q.js';
5
5
  import { IconButton } from './chunk-UAUP6XGK.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './ChatScale-L4SIHSKL.css';
@@ -1,7 +1,7 @@
1
1
  import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
2
2
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './ArtifactKinds-3EH4KR3F.css';
4
+ import './ArtifactKinds-27TE3KJL.css';
5
5
  import './ArtifactNameCell-3AHLUSE5.css';
6
6
  import { FolderGlyph, PinGlyph } from '@crewlethq/icons/glyphs';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
2
2
  import { StatusDot } from './chunk-CYQBDZ6M.js';
3
- import { Menu } from './chunk-YOJAGKTS.js';
3
+ import { Menu } from './chunk-TGGYSQRD.js';
4
4
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
5
5
  import { Count } from './chunk-D2GT3CR4.js';
6
6
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -1,4 +1,4 @@
1
- import { ConfirmModal } from './chunk-XXDB6KPV.js';
1
+ import { ConfirmModal } from './chunk-ZXXZESCD.js';
2
2
  import { InlineCode } from './chunk-PLL7ZJHY.js';
3
3
  import { Callout } from './chunk-BPCY7ZID.js';
4
4
  import './LinkInterstitial-ET4MSVSV.css';
@@ -1,5 +1,5 @@
1
1
  import { LayerNodeBridge } from './chunk-LM3ISVJA.js';
2
- import { Tooltip } from './chunk-3QQIGMY3.js';
2
+ import { Tooltip } from './chunk-7ZSEUO5Q.js';
3
3
  import { Kbd } from './chunk-CMAZZY2I.js';
4
4
  import { Button } from './chunk-DGXZ635L.js';
5
5
  import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-OMV5W53A.js';
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './ListDetail-N3L7PB46.css';
2
+ import './ListDetail-JGESKTR7.css';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
5
5
  function ListDetail({ list, children, showing = "list", className, ...rest }) {
@@ -1,6 +1,6 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './ArtifactKinds-3EH4KR3F.css';
3
- import './ActionCard-47WSZ2O5.css';
2
+ import './ArtifactKinds-27TE3KJL.css';
3
+ import './ActionCard-YZKL3CKR.css';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
6
6
  var ACTION_CARD_GROUND = {