@crewlethq/ui 0.17.1 → 0.19.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 (226) hide show
  1. package/README.md +55 -3
  2. package/dist/AccessDeniedCard/AccessDeniedCard.d.ts +39 -0
  3. package/dist/AccessDeniedCard/index.d.ts +3 -0
  4. package/dist/AccessDeniedCard/index.js +8 -0
  5. package/dist/AccessDeniedCard-WXM5DBDZ.css +8 -0
  6. package/dist/AppShell/index.js +2 -2
  7. package/dist/ArrangeBoard/ArrangeBoard.d.ts +32 -0
  8. package/dist/ArrangeBoard/index.d.ts +3 -0
  9. package/dist/ArrangeBoard/index.js +2 -0
  10. package/dist/ArrangeBoard-MQE35P6Z.css +80 -0
  11. package/dist/ArrangeFrame/ArrangeFrame.d.ts +82 -0
  12. package/dist/ArrangeFrame/index.d.ts +5 -0
  13. package/dist/ArrangeFrame/index.js +5 -0
  14. package/dist/ArrangeFrame/useGridResize.d.ts +66 -0
  15. package/dist/ArrangeFrame-3PLZAG22.css +329 -0
  16. package/dist/ArrangeGroup/ArrangeGroup.d.ts +42 -0
  17. package/dist/ArrangeGroup/index.d.ts +3 -0
  18. package/dist/ArrangeGroup/index.js +4 -0
  19. package/dist/ArrangeGroup-SHFHA7BE.css +170 -0
  20. package/dist/ArrangeList/ArrangeList.d.ts +64 -0
  21. package/dist/ArrangeList/index.d.ts +3 -0
  22. package/dist/ArrangeList/index.js +10 -0
  23. package/dist/ArrangeList-NNRTDFI5.css +94 -0
  24. package/dist/ArtifactCard/ArtifactCard.d.ts +61 -0
  25. package/dist/ArtifactCard/index.d.ts +3 -0
  26. package/dist/ArtifactCard/index.js +12 -0
  27. package/dist/ArtifactCard-EXVAEBV6.css +109 -0
  28. package/dist/AuthLayout/index.js +2 -2
  29. package/dist/AvatarPicker/index.js +5 -5
  30. package/dist/Canvas/index.js +2 -2
  31. package/dist/Card/index.js +1 -1
  32. package/dist/ChangeMark/ChangeMark.d.ts +26 -0
  33. package/dist/ChangeMark/index.d.ts +3 -0
  34. package/dist/ChangeMark/index.js +8 -0
  35. package/dist/ChangeMark-3VMTW7MT.css +22 -0
  36. package/dist/Checkbox/index.js +3 -3
  37. package/dist/Combobox/index.js +3 -3
  38. package/dist/CommandPalette/index.js +5 -5
  39. package/dist/Composer/index.js +3 -3
  40. package/dist/ConfirmField/index.js +3 -3
  41. package/dist/CursorFlag/CursorFlag.d.ts +34 -0
  42. package/dist/CursorFlag/index.d.ts +3 -0
  43. package/dist/CursorFlag/index.js +3 -0
  44. package/dist/CursorFlag-AJQJBUGY.css +61 -0
  45. package/dist/DataTable/index.js +7 -7
  46. package/dist/DataView/index.js +13 -13
  47. package/dist/DateTimePicker/index.js +2 -2
  48. package/dist/Divider/Divider.d.ts +15 -0
  49. package/dist/Divider/index.d.ts +3 -0
  50. package/dist/Divider/index.js +2 -0
  51. package/dist/Divider-3Z77ZAJH.css +37 -0
  52. package/dist/FollowBanner/FollowBanner.d.ts +35 -0
  53. package/dist/FollowBanner/index.d.ts +2 -0
  54. package/dist/FollowBanner/index.js +7 -0
  55. package/dist/FrameProtocol/index.d.ts +2 -0
  56. package/dist/FrameProtocol/index.js +2 -0
  57. package/dist/FrameProtocol/protocol.d.ts +164 -0
  58. package/dist/HuePicker/HuePicker.d.ts +16 -4
  59. package/dist/HuePicker/index.js +3 -3
  60. package/dist/{HuePicker-5QIUR6L7.css → HuePicker-PAIGH6LR.css} +6 -0
  61. package/dist/IconTile/IconTile.d.ts +23 -0
  62. package/dist/IconTile/index.d.ts +3 -0
  63. package/dist/IconTile/index.js +2 -0
  64. package/dist/IconTile-4GNWTLAW.css +30 -0
  65. package/dist/Input/index.js +2 -2
  66. package/dist/LinkInterstitial/LinkInterstitial.d.ts +41 -0
  67. package/dist/LinkInterstitial/index.d.ts +3 -0
  68. package/dist/LinkInterstitial/index.js +11 -0
  69. package/dist/LinkInterstitial-ET4MSVSV.css +34 -0
  70. package/dist/ListInput/index.js +4 -4
  71. package/dist/LiveCursor/LiveCursor.d.ts +34 -0
  72. package/dist/LiveCursor/index.d.ts +3 -0
  73. package/dist/LiveCursor/index.js +4 -0
  74. package/dist/LiveCursor-DZHGIYWE.css +47 -0
  75. package/dist/MarkdownEditor/index.js +3 -3
  76. package/dist/Menu/index.js +2 -2
  77. package/dist/Modal/Modal.d.ts +20 -0
  78. package/dist/Modal/index.js +2 -2
  79. package/dist/{Modal-RQAYGG4L.css → Modal-XOSV6FAH.css} +14 -0
  80. package/dist/Note/Note.d.ts +23 -0
  81. package/dist/Note/index.d.ts +3 -0
  82. package/dist/Note/index.js +2 -0
  83. package/dist/Note-RT4L6VUT.css +58 -0
  84. package/dist/OrgTable/index.js +5 -5
  85. package/dist/PinTile/PinTile.d.ts +37 -0
  86. package/dist/PinTile/index.d.ts +3 -0
  87. package/dist/PinTile/index.js +4 -0
  88. package/dist/PinTile-IIA25MNZ.css +141 -0
  89. package/dist/PresenceModel/index.d.ts +2 -0
  90. package/dist/PresenceModel/index.js +3 -0
  91. package/dist/PresenceModel/presence.d.ts +80 -0
  92. package/dist/PresenceRing/PresenceRing.d.ts +31 -0
  93. package/dist/PresenceRing/index.d.ts +3 -0
  94. package/dist/PresenceRing/index.js +2 -0
  95. package/dist/PresenceRing-M4C22Q6U.css +68 -0
  96. package/dist/PresenceStack/PresenceStack.d.ts +36 -0
  97. package/dist/PresenceStack/index.d.ts +3 -0
  98. package/dist/PresenceStack/index.js +9 -0
  99. package/dist/PresenceStack-QSXQJND5.css +59 -0
  100. package/dist/PricingCard/index.js +2 -2
  101. package/dist/Principal/Principal.d.ts +35 -0
  102. package/dist/Principal/index.d.ts +2 -0
  103. package/dist/Principal/index.js +4 -0
  104. package/dist/PrincipalPicker/PrincipalPicker.d.ts +45 -0
  105. package/dist/PrincipalPicker/index.d.ts +3 -0
  106. package/dist/PrincipalPicker/index.js +12 -0
  107. package/dist/PrincipalPicker-7NNZTGUP.css +41 -0
  108. package/dist/Reorder/index.d.ts +2 -0
  109. package/dist/Reorder/index.js +4 -0
  110. package/dist/Reorder/useReorder.d.ts +138 -0
  111. package/dist/SandboxedFrame/SandboxedFrame.d.ts +142 -0
  112. package/dist/SandboxedFrame/index.d.ts +3 -0
  113. package/dist/SandboxedFrame/index.js +8 -0
  114. package/dist/SandboxedFrame-L6HBQZCD.css +50 -0
  115. package/dist/ShareDialog/ShareDialog.d.ts +101 -0
  116. package/dist/ShareDialog/index.d.ts +5 -0
  117. package/dist/ShareDialog/index.js +19 -0
  118. package/dist/ShareDialog/roles.d.ts +10 -0
  119. package/dist/ShareDialog-YZ4F37MW.css +146 -0
  120. package/dist/SheetGrid/SheetGrid.d.ts +78 -0
  121. package/dist/SheetGrid/cells.d.ts +117 -0
  122. package/dist/SheetGrid/index.d.ts +5 -0
  123. package/dist/SheetGrid/index.js +18 -0
  124. package/dist/SheetGrid-4HOXDVIB.css +595 -0
  125. package/dist/SheetModel/clipboard.d.ts +37 -0
  126. package/dist/SheetModel/edits.d.ts +68 -0
  127. package/dist/SheetModel/index.d.ts +14 -0
  128. package/dist/SheetModel/index.js +3 -0
  129. package/dist/SheetModel/labels.d.ts +71 -0
  130. package/dist/SheetModel/navigation.d.ts +79 -0
  131. package/dist/SheetModel/options.d.ts +28 -0
  132. package/dist/SheetModel/types.d.ts +126 -0
  133. package/dist/SheetModel/values.d.ts +76 -0
  134. package/dist/SheetModel/view.d.ts +32 -0
  135. package/dist/StatGroup/StatGroup.d.ts +7 -1
  136. package/dist/StatGroup/index.js +1 -1
  137. package/dist/{StatGroup-HVG6O62W.css → StatGroup-PADTJCUQ.css} +7 -0
  138. package/dist/Switcher/index.js +8 -8
  139. package/dist/Tag/Tag.d.ts +13 -0
  140. package/dist/Tag/index.js +1 -1
  141. package/dist/{Tag-4BRQS6GN.css → Tag-SRGTK5KI.css} +42 -0
  142. package/dist/TagsInput/index.js +4 -4
  143. package/dist/ThemeSwitcher/apply.d.ts +43 -0
  144. package/dist/ThemeSwitcher/index.d.ts +4 -2
  145. package/dist/ThemeSwitcher/index.js +3 -2
  146. package/dist/ThemeSwitcher/preferences.d.ts +2 -19
  147. package/dist/ThemeToggle/index.js +3 -2
  148. package/dist/TimeWindowPicker/index.js +4 -4
  149. package/dist/Timeline/Timeline.d.ts +7 -2
  150. package/dist/Timeline/index.js +1 -1
  151. package/dist/TreeCanvas/index.js +3 -3
  152. package/dist/TreeGrid/index.js +2 -2
  153. package/dist/VersionTimeline/VersionTimeline.d.ts +76 -0
  154. package/dist/VersionTimeline/index.d.ts +3 -0
  155. package/dist/VersionTimeline/index.js +10 -0
  156. package/dist/VersionTimeline-EBJ6MIPJ.css +108 -0
  157. package/dist/{chunk-SBRE7IML.js → chunk-2ONWEDQT.js} +1 -1
  158. package/dist/chunk-35XVR5JQ.js +81 -0
  159. package/dist/chunk-3BYIWOTV.js +29 -0
  160. package/dist/chunk-4KP4RC3O.js +25 -0
  161. package/dist/chunk-5XACKNYR.js +53 -0
  162. package/dist/chunk-63WJLRB2.js +24 -0
  163. package/dist/{chunk-L4ZLXYPO.js → chunk-6A7P6II6.js} +1 -1
  164. package/dist/chunk-6KWNXIDE.js +18 -0
  165. package/dist/chunk-6MIXD6IW.js +49 -0
  166. package/dist/{chunk-FA2V2VT6.js → chunk-7FQEUNHX.js} +4 -4
  167. package/dist/{chunk-DEEVA6TV.js → chunk-7IJARUIF.js} +17 -4
  168. package/dist/{chunk-JCO3SIST.js → chunk-7ZNKEPLN.js} +2 -2
  169. package/dist/chunk-AIVZVKYZ.js +126 -0
  170. package/dist/{chunk-FSKTOIYC.js → chunk-AJESMWJS.js} +5 -5
  171. package/dist/{chunk-O67VF5MS.js → chunk-AUQPBL4O.js} +2 -2
  172. package/dist/chunk-CENOOTAV.js +1 -0
  173. package/dist/chunk-DEJHAOC5.js +279 -0
  174. package/dist/{chunk-UCYIRDND.js → chunk-DQSXWQMJ.js} +1 -1
  175. package/dist/{chunk-JF7X673Z.js → chunk-EIGEIT4O.js} +2 -2
  176. package/dist/chunk-F6V2PTN6.js +142 -0
  177. package/dist/chunk-FFMCMSJB.js +1 -0
  178. package/dist/chunk-FW7HN6AP.js +40 -0
  179. package/dist/chunk-G3EEUNZQ.js +46 -0
  180. package/dist/{chunk-LOECRMHA.js → chunk-GFV4LJHH.js} +4 -3
  181. package/dist/chunk-HTCJSUIZ.js +216 -0
  182. package/dist/{chunk-75CLJNDQ.js → chunk-I6NZKJGK.js} +1 -1
  183. package/dist/chunk-I6POAB4V.js +20 -0
  184. package/dist/chunk-IXJHTFXG.js +17 -0
  185. package/dist/chunk-JEDWC3GI.js +98 -0
  186. package/dist/{chunk-QVAFL2LE.js → chunk-JXRI5YD2.js} +3 -3
  187. package/dist/{chunk-ZFH7H7GS.js → chunk-LOLELDBW.js} +1 -1
  188. package/dist/{chunk-6TSZCBID.js → chunk-NP2C4Y4E.js} +1 -1
  189. package/dist/{chunk-6NN2F7GM.js → chunk-OIMAK5AE.js} +6 -6
  190. package/dist/chunk-PPAQFGS2.js +12 -0
  191. package/dist/chunk-PUQY4WXR.js +1235 -0
  192. package/dist/chunk-QO7QEQKV.js +24 -0
  193. package/dist/chunk-RT323I4I.js +49 -0
  194. package/dist/chunk-S35G6PNC.js +80 -0
  195. package/dist/{chunk-HENOTGUV.js → chunk-T7ICFXEC.js} +2 -2
  196. package/dist/{chunk-2OLCUNG7.js → chunk-TBIZSQHB.js} +1 -1
  197. package/dist/chunk-TODND5AD.js +99 -0
  198. package/dist/{chunk-PQ63NLFC.js → chunk-UXELEORU.js} +3 -3
  199. package/dist/{chunk-6NIMZ5XC.js → chunk-VJLYGPPE.js} +1 -1
  200. package/dist/chunk-VYDFB6PJ.js +243 -0
  201. package/dist/{chunk-7QFAORCY.js → chunk-WHZFDS62.js} +1 -1
  202. package/dist/chunk-WXAULPBH.js +135 -0
  203. package/dist/chunk-XJ2QEBMM.js +277 -0
  204. package/dist/{chunk-NXDEPUVG.js → chunk-XU4ZUGLE.js} +20 -5
  205. package/dist/chunk-YM3GJHGW.js +69 -0
  206. package/dist/{chunk-T3ZWBZ65.js → chunk-YSJYWQSP.js} +2 -2
  207. package/dist/{chunk-CXBAIVYZ.js → chunk-YSY6UJ4F.js} +1 -1
  208. package/dist/chunk-YYZRLLLY.js +822 -0
  209. package/dist/{chunk-EG6NYWVK.js → chunk-YZCJ63JF.js} +1 -1
  210. package/dist/{chunk-K3OWD7BJ.js → chunk-Z24ZUSTX.js} +4 -19
  211. package/dist/chunk-ZXXDZJQN.js +36 -0
  212. package/dist/generated/index.d.ts +27 -0
  213. package/dist/generated/index.js +98 -69
  214. package/dist/index.js +98 -69
  215. package/dist/styles.css +13625 -11206
  216. package/dist/utils/index.js +1 -1
  217. package/package.json +3 -3
  218. package/dist/chunk-EXHQ2QVW.js +0 -1
  219. package/dist/{chunk-CRVETI5L.js → chunk-4Z7PW3L6.js} +0 -0
  220. package/dist/{chunk-OYOQU7O5.js → chunk-EDGCPVVD.js} +1 -1
  221. package/dist/{chunk-NS7BVLL3.js → chunk-JULMZNGT.js} +1 -1
  222. package/dist/{chunk-2UU5IGZI.js → chunk-L4H7SSWF.js} +1 -1
  223. package/dist/{chunk-4GB57WIT.js → chunk-Q55TXPA3.js} +1 -1
  224. package/dist/{chunk-77IEHFY4.js → chunk-QQGWES46.js} +1 -1
  225. package/dist/{chunk-B2Z2CDM5.js → chunk-T5TFZ2JB.js} +1 -1
  226. package/dist/{chunk-AMH67MLM.js → chunk-TXAFKH2A.js} +1 -1
@@ -1,22 +1,5 @@
1
- /** What a reader can ask the palette to be. `system` follows the platform. */
2
- export type ThemePreference = 'system' | 'light' | 'dark';
3
- /** How much room the interface gives itself. `normal` is the unscaled step. */
4
- export type DensityPreference = 'normal' | 'compact' | 'comfortable';
5
- /**
6
- * Puts the theme on the root element.
7
- *
8
- * `system` REMOVES the attribute rather than writing a third value, because
9
- * following the system IS the absence of a choice, and the stylesheet's own
10
- * default is the system's: a document with no attribute is dark, or light
11
- * where the platform asks for light. What beats the system is an explicit
12
- * value, in both directions: `light` by a block of its own, `dark` by keeping
13
- * the light media block from matching. A `data-theme="system"` names no
14
- * palette, so it would be a choice only to the code that asks whether the
15
- * attribute is there at all, which is the wrong answer to give it.
16
- */
17
- export declare function applyTheme(theme: ThemePreference): void;
18
- /** Puts the density on the root element. `normal` removes the attribute. */
19
- export declare function applyDensity(density: DensityPreference): void;
1
+ import { type DensityPreference, type ThemePreference } from './apply.js';
2
+ export type { DensityPreference, ThemePreference } from './apply.js';
20
3
  export interface PreferenceOptions {
21
4
  /** Where the choice is kept. An application picks its own name. */
22
5
  storageKey: string;
@@ -1,5 +1,6 @@
1
- export { ThemeToggle } from '../chunk-6TSZCBID.js';
2
- import '../chunk-K3OWD7BJ.js';
1
+ export { ThemeToggle } from '../chunk-NP2C4Y4E.js';
2
+ import '../chunk-Z24ZUSTX.js';
3
+ import '../chunk-ZXXDZJQN.js';
3
4
  import '../chunk-4FQT6ZAY.js';
4
5
  import '../chunk-BZFWDIV6.js';
5
6
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-JF7X673Z.js';
1
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-EIGEIT4O.js';
2
2
  import '../chunk-FC4YTTFJ.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
- import '../chunk-4GB57WIT.js';
5
4
  import '../chunk-GXQ3B46I.js';
6
5
  import '../chunk-OG6CL3EB.js';
7
- import '../chunk-4FQT6ZAY.js';
8
- import '../chunk-PQADV6P6.js';
6
+ import '../chunk-Q55TXPA3.js';
9
7
  import '../chunk-BWRGFKJP.js';
8
+ import '../chunk-PQADV6P6.js';
10
9
  import '../chunk-HMPFGIWM.js';
11
10
  import '../chunk-R25RGPUB.js';
11
+ import '../chunk-4FQT6ZAY.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -38,8 +38,13 @@ export interface TimelineItemProps extends LiHTMLAttributes<HTMLLIElement> {
38
38
  * numbered ledger wants; a glyph where the step has an identity of its own.
39
39
  */
40
40
  marker?: ReactNode;
41
- /** Overrides the hidden label, for a step whose name is not its number. */
42
- label?: string | undefined;
41
+ /**
42
+ * Overrides the hidden label, for a step whose name is not its number.
43
+ * `false` draws no hidden label at all, for an item whose own content
44
+ * already says what it is: a hidden "Version 12" in front of a visible
45
+ * "Version 12" is read twice.
46
+ */
47
+ label?: string | false | undefined;
43
48
  }
44
49
  /**
45
50
  * One step.
@@ -1,3 +1,3 @@
1
- export { Timeline, TimelineItem } from '../chunk-O67VF5MS.js';
1
+ export { Timeline, TimelineItem } from '../chunk-AUQPBL4O.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { TreeCanvas } from '../chunk-2OLCUNG7.js';
1
+ export { TreeCanvas } from '../chunk-TBIZSQHB.js';
2
2
  import '../chunk-MY374UUD.js';
3
- import '../chunk-AMH67MLM.js';
3
+ import '../chunk-TXAFKH2A.js';
4
4
  import '../chunk-VYOKRN2I.js';
5
5
  import '../chunk-OG6CL3EB.js';
6
- import '../chunk-4FQT6ZAY.js';
7
6
  import '../chunk-HMPFGIWM.js';
8
7
  import '../chunk-R25RGPUB.js';
8
+ import '../chunk-4FQT6ZAY.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,8 +1,8 @@
1
- export { TreeGrid } from '../chunk-B2Z2CDM5.js';
1
+ export { TreeGrid } from '../chunk-T5TFZ2JB.js';
2
2
  import '../chunk-MY374UUD.js';
3
3
  import '../chunk-VYOKRN2I.js';
4
- import '../chunk-4FQT6ZAY.js';
5
4
  import '../chunk-HMPFGIWM.js';
6
5
  import '../chunk-R25RGPUB.js';
6
+ import '../chunk-4FQT6ZAY.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,76 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import { type Principal } from '../Principal/index.js';
3
+ import { type TimeValue } from '../RelativeTime/index.js';
4
+ /**
5
+ * What made a version.
6
+ *
7
+ * A schema or a capability change has a row of its own, because it changes
8
+ * what the page CAN DO rather than what it shows. A restore is a publish of an
9
+ * old version as a new one, never a rewrite of history, so it names the
10
+ * version it brought back.
11
+ */
12
+ export type VersionKind = 'publish' | 'restore' | 'schema' | 'capabilities';
13
+ export interface VersionItem {
14
+ version: number;
15
+ kind?: VersionKind | undefined;
16
+ /** A name somebody gave this version ("Review draft"). */
17
+ label?: string | undefined;
18
+ /** What changed, in the author's words or the engine's ("Added totals row"). */
19
+ summary?: string | undefined;
20
+ author: Principal;
21
+ at: TimeValue;
22
+ /** Where it came from: a task and a turn, as a link or as words. */
23
+ source?: ReactNode;
24
+ /** For a restore: the version it brought back. */
25
+ restoredFrom?: number | undefined;
26
+ }
27
+ export interface VersionTimelineLabels {
28
+ list: string;
29
+ version: (version: number) => string;
30
+ latest: string;
31
+ publish: string;
32
+ restore: (from: number | undefined) => string;
33
+ schema: string;
34
+ capabilities: string;
35
+ compare: string;
36
+ /** The compare control's accessible name; it is a toggle, pressed while this version is compared. */
37
+ compareWith: (version: number) => string;
38
+ restoreAction: string;
39
+ restoreVersion: (version: number) => string;
40
+ labelAction: string;
41
+ labelVersion: (version: number) => string;
42
+ /** The line for versions the engine no longer keeps, given the oldest it does. */
43
+ retention: (oldestKept: number) => string;
44
+ }
45
+ export interface VersionTimelineProps extends Omit<HTMLAttributes<HTMLElement>, 'onSelect'> {
46
+ /** Newest first. */
47
+ versions: readonly VersionItem[];
48
+ /** The newest version. The highest one listed when left out. */
49
+ latest?: number | undefined;
50
+ /** The version on show. */
51
+ selected: number;
52
+ /** The version the one on show is compared with, if any. */
53
+ against?: number | undefined;
54
+ onSelect: (version: number) => void;
55
+ /** Compares the version on show with this one; `null` stops comparing. Without it there is no compare control. */
56
+ onCompare?: ((version: number | null) => void) | undefined;
57
+ /** Publishes this version again as a new one. Without it there is no restore control. */
58
+ onRestore?: ((version: number) => void) | undefined;
59
+ /** Names this version. Without it there is no name control. */
60
+ onLabel?: ((version: number) => void) | undefined;
61
+ /** The oldest version the engine still keeps; anything below it is said to be past retention. */
62
+ oldestKept?: number | undefined;
63
+ /** Overrides the shared clock, for a story or a suite. */
64
+ now?: number | undefined;
65
+ labels?: Partial<VersionTimelineLabels> | undefined;
66
+ }
67
+ /**
68
+ * An artifact's versions, newest first, with the one on show and the one it is
69
+ * compared with marked.
70
+ *
71
+ * SELECTING IS NOT RESTORING. Choosing a row shows that version; Restore is a
72
+ * separate control, and it publishes the old version as a new one, so nothing
73
+ * a reader does here rewrites history. The newest version offers no Restore,
74
+ * because it is already what everybody sees.
75
+ */
76
+ export declare function VersionTimeline({ versions, latest, selected, against, onSelect, onCompare, onRestore, onLabel, oldestKept, now, labels, className, ...rest }: VersionTimelineProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './VersionTimeline.css';
2
+ export { VersionTimeline } from './VersionTimeline.js';
3
+ export type { VersionItem, VersionKind, VersionTimelineLabels, VersionTimelineProps } from './VersionTimeline.js';
@@ -0,0 +1,10 @@
1
+ export { VersionTimeline } from '../chunk-WXAULPBH.js';
2
+ import '../chunk-AUQPBL4O.js';
3
+ import '../chunk-OG6CL3EB.js';
4
+ import '../chunk-4KP4RC3O.js';
5
+ import '../chunk-3CZ7XAVY.js';
6
+ import '../chunk-EUCC37WY.js';
7
+ import '../chunk-UAN5NE7M.js';
8
+ import '../chunk-5OM447RW.js';
9
+ import '../chunk-BZFWDIV6.js';
10
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,108 @@
1
+ /*
2
+ * A version list beside the version on show. The row's main line is the
3
+ * button that shows it; the controls sit under the facts, so a reader scanning
4
+ * the list reads numbers and names rather than a column of buttons.
5
+ */
6
+
7
+ .crewlet-version-timeline {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: var(--spacing-2);
11
+ min-width: 0;
12
+ }
13
+
14
+ .crewlet-version-timeline__select {
15
+ display: flex;
16
+ flex-direction: column;
17
+ align-items: flex-start;
18
+ gap: var(--spacing-1);
19
+ width: 100%;
20
+ margin: 0;
21
+ padding: var(--spacing-1) var(--spacing-2);
22
+ border: 0;
23
+ border-radius: var(--radius-sm);
24
+ background: transparent;
25
+ color: var(--color-text-primary);
26
+ font: inherit;
27
+ text-align: start;
28
+ cursor: pointer;
29
+ }
30
+
31
+ .crewlet-version-timeline__select:hover {
32
+ background: var(--color-surface-hover);
33
+ }
34
+
35
+ /* The version on show. The accent means "where the reader is", which is
36
+ exactly what this row is. */
37
+ .crewlet-version-timeline__select[aria-current='true'] {
38
+ background: var(--color-brand-accent-soft);
39
+ box-shadow: inset 2px 0 0 var(--color-brand-accent);
40
+ }
41
+
42
+ .crewlet-version-timeline__head {
43
+ display: flex;
44
+ flex-wrap: wrap;
45
+ align-items: baseline;
46
+ gap: var(--spacing-2);
47
+ }
48
+
49
+ .crewlet-version-timeline__number {
50
+ font-weight: var(--font-weight-semibold);
51
+ font-variant-numeric: tabular-nums;
52
+ }
53
+
54
+ .crewlet-version-timeline__latest,
55
+ .crewlet-version-timeline__label {
56
+ padding: 0 var(--spacing-1);
57
+ border-radius: var(--radius-xs);
58
+ font-size: var(--font-size-xs);
59
+ }
60
+
61
+ .crewlet-version-timeline__latest {
62
+ background: var(--color-surface-inset);
63
+ color: var(--color-text-secondary);
64
+ }
65
+
66
+ .crewlet-version-timeline__label {
67
+ border: 1px solid var(--color-border-default);
68
+ color: var(--color-text-primary);
69
+ }
70
+
71
+ .crewlet-version-timeline__summary {
72
+ color: var(--color-text-secondary);
73
+ overflow-wrap: anywhere;
74
+ }
75
+
76
+ .crewlet-version-timeline__meta,
77
+ .crewlet-version-timeline__source {
78
+ display: flex;
79
+ flex-wrap: wrap;
80
+ align-items: center;
81
+ gap: var(--spacing-1);
82
+ padding-inline: var(--spacing-2);
83
+ color: var(--color-text-tertiary);
84
+ font-size: var(--font-size-xs);
85
+ }
86
+
87
+ .crewlet-version-timeline__actions {
88
+ display: flex;
89
+ flex-wrap: wrap;
90
+ gap: var(--spacing-1);
91
+ padding-inline: var(--spacing-1);
92
+ }
93
+
94
+ /* The version compared against carries the same edge in the strong neutral:
95
+ it is the other side of the comparison, not where the reader is, so it does
96
+ not take the accent. */
97
+ .is-compared > .crewlet-timeline__body > .crewlet-version-timeline__select {
98
+ box-shadow: inset 2px 0 0 var(--color-border-strong);
99
+ }
100
+
101
+ .crewlet-version-timeline__gap {
102
+ margin: 0;
103
+ padding: var(--spacing-2) var(--spacing-3);
104
+ border: 1px dashed var(--color-border-default);
105
+ border-radius: var(--radius-md);
106
+ color: var(--color-text-tertiary);
107
+ font-size: var(--font-size-xs);
108
+ }
@@ -1,4 +1,4 @@
1
- import { useThemePreference, useDensityPreference } from './chunk-K3OWD7BJ.js';
1
+ import { useThemePreference, useDensityPreference } from './chunk-Z24ZUSTX.js';
2
2
  import { SegmentedControl } from './chunk-26PEPONN.js';
3
3
  import { SunGlyph, MonitorGlyph, MoonGlyph } from '@crewlethq/icons/glyphs';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -0,0 +1,81 @@
1
+ import { Count } from './chunk-BHHIIK3M.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './ArrangeGroup-SHFHA7BE.css';
4
+ import { useId } from 'react';
5
+ import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var PLACEHOLDER = "Name this group";
9
+ function ArrangeGroup({
10
+ title,
11
+ tone = "none",
12
+ collapsed,
13
+ onCollapsedChange,
14
+ count,
15
+ onTitleChange,
16
+ bodyProps,
17
+ empty,
18
+ columns = 12,
19
+ actions,
20
+ className,
21
+ children,
22
+ ...rest
23
+ }) {
24
+ const bodyId = `${useId()}-body`;
25
+ const { className: bodyClass, style: bodyStyle, ...body } = bodyProps ?? {};
26
+ const hasChildren = Array.isArray(children) ? children.some(Boolean) : Boolean(children);
27
+ return /* @__PURE__ */ jsxs(
28
+ "section",
29
+ {
30
+ className: cx("crewlet-arrange-group", `crewlet-arrange-group--${tone}`, collapsed && "is-collapsed", className),
31
+ "aria-label": title || "Untitled group",
32
+ ...rest,
33
+ children: [
34
+ /* @__PURE__ */ jsxs("header", { className: "crewlet-arrange-group__head", children: [
35
+ /* @__PURE__ */ jsxs(
36
+ "button",
37
+ {
38
+ type: "button",
39
+ className: cx("crewlet-arrange-group__toggle", onTitleChange && "is-icon"),
40
+ "aria-expanded": !collapsed,
41
+ "aria-controls": bodyId,
42
+ "aria-label": onTitleChange ? `${collapsed ? "Expand" : "Collapse"} ${title || "group"}` : void 0,
43
+ onClick: () => onCollapsedChange(!collapsed),
44
+ children: [
45
+ /* @__PURE__ */ jsx(ChevronDownGlyph, { size: "sm", className: "crewlet-arrange-group__chevron" }),
46
+ onTitleChange ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-arrange-group__title", children: title || "Untitled group" })
47
+ ]
48
+ }
49
+ ),
50
+ onTitleChange ? /* @__PURE__ */ jsx(
51
+ "input",
52
+ {
53
+ className: "crewlet-arrange-group__title-field",
54
+ "aria-label": "Group name",
55
+ value: title,
56
+ maxLength: 60,
57
+ placeholder: PLACEHOLDER,
58
+ size: Math.max(3, (title || PLACEHOLDER).length),
59
+ onChange: (e) => onTitleChange(e.target.value)
60
+ }
61
+ ) : null,
62
+ count !== void 0 ? /* @__PURE__ */ jsx(Count, { value: count, className: "crewlet-arrange-group__count" }) : null,
63
+ actions ? /* @__PURE__ */ jsx("span", { className: "crewlet-arrange-group__actions", children: actions }) : null
64
+ ] }),
65
+ /* @__PURE__ */ jsx(
66
+ "div",
67
+ {
68
+ id: bodyId,
69
+ className: cx("crewlet-arrange-group__body", bodyClass),
70
+ style: { ...bodyStyle, ["--crewlet-arrange-columns"]: columns },
71
+ hidden: collapsed,
72
+ ...body,
73
+ children: hasChildren ? children : empty ? /* @__PURE__ */ jsx("div", { className: "crewlet-arrange-group__empty", children: empty }) : null
74
+ }
75
+ )
76
+ ]
77
+ }
78
+ );
79
+ }
80
+
81
+ export { ArrangeGroup };
@@ -0,0 +1,29 @@
1
+ import { presenceHueClass } from './chunk-I6POAB4V.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './CursorFlag-AJQJBUGY.css';
4
+ import { PencilGlyph } from '@crewlethq/icons/glyphs';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ function CursorFlag({ name, hue, kind = "human", editing = false, placement = "top-end", className, ...rest }) {
8
+ const text = typeof name === "string" ? name : name.join(", ");
9
+ return /* @__PURE__ */ jsxs(
10
+ "span",
11
+ {
12
+ ...rest,
13
+ "aria-hidden": "true",
14
+ className: cx(
15
+ "crewlet-cursor-flag",
16
+ presenceHueClass(hue),
17
+ `crewlet-cursor-flag--${kind}`,
18
+ `crewlet-cursor-flag--${placement}`,
19
+ className
20
+ ),
21
+ children: [
22
+ editing ? /* @__PURE__ */ jsx(PencilGlyph, { size: "xs", className: "crewlet-cursor-flag__glyph" }) : null,
23
+ /* @__PURE__ */ jsx("span", { className: "crewlet-cursor-flag__name", children: text })
24
+ ]
25
+ }
26
+ );
27
+ }
28
+
29
+ export { CursorFlag };
@@ -0,0 +1,25 @@
1
+ import { Avatar } from './chunk-5OM447RW.js';
2
+ import { UsersGlyph } from '@crewlethq/icons/glyphs';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var PRINCIPAL_KINDS = ["person", "agent", "team"];
6
+ function PrincipalAvatar({ principal, size = "sm", decorative = true }) {
7
+ const { kind, name, character, hue, src } = principal;
8
+ if (kind === "team") {
9
+ return /* @__PURE__ */ jsx(Avatar, { name, size, kind: "agent", icon: /* @__PURE__ */ jsx(UsersGlyph, {}), decorative });
10
+ }
11
+ return /* @__PURE__ */ jsx(
12
+ Avatar,
13
+ {
14
+ name,
15
+ size,
16
+ kind: kind === "person" ? "human" : "agent",
17
+ character: kind === "agent" ? character : void 0,
18
+ hue: kind === "agent" ? hue : void 0,
19
+ src,
20
+ decorative
21
+ }
22
+ );
23
+ }
24
+
25
+ export { PRINCIPAL_KINDS, PrincipalAvatar };
@@ -0,0 +1,53 @@
1
+ import { CursorFlag } from './chunk-3BYIWOTV.js';
2
+ import { presenceHueClass } from './chunk-I6POAB4V.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './LiveCursor-DZHGIYWE.css';
5
+ import { useState, useEffect } from 'react';
6
+ import { MousePointer2Glyph } from '@crewlethq/icons/glyphs';
7
+ import { jsxs, jsx } from 'react/jsx-runtime';
8
+
9
+ var LIVE_CURSOR_REST_MS = 5e3;
10
+ var LIVE_CURSOR_HIDE_MS = 3e4;
11
+ function LiveCursor({
12
+ x,
13
+ y,
14
+ name,
15
+ hue,
16
+ kind = "human",
17
+ idleAfterMs = LIVE_CURSOR_REST_MS,
18
+ hideAfterMs = LIVE_CURSOR_HIDE_MS,
19
+ interpolate = true,
20
+ className
21
+ }) {
22
+ const [phase, setPhase] = useState("live");
23
+ useEffect(() => {
24
+ setPhase("live");
25
+ const rest = setTimeout(() => setPhase("resting"), idleAfterMs);
26
+ const hide = setTimeout(() => setPhase("gone"), hideAfterMs);
27
+ return () => {
28
+ clearTimeout(rest);
29
+ clearTimeout(hide);
30
+ };
31
+ }, [x, y, idleAfterMs, hideAfterMs]);
32
+ return /* @__PURE__ */ jsxs(
33
+ "span",
34
+ {
35
+ "aria-hidden": "true",
36
+ "data-phase": phase,
37
+ className: cx(
38
+ "crewlet-live-cursor",
39
+ presenceHueClass(hue),
40
+ interpolate && "crewlet-live-cursor--glide",
41
+ phase !== "live" && `crewlet-live-cursor--${phase}`,
42
+ className
43
+ ),
44
+ style: { transform: `translate(${x}px, ${y}px)` },
45
+ children: [
46
+ /* @__PURE__ */ jsx(MousePointer2Glyph, { size: "lg", filled: true, className: "crewlet-live-cursor__pointer" }),
47
+ /* @__PURE__ */ jsx(CursorFlag, { name, hue, kind, placement: "inline", className: "crewlet-live-cursor__flag" })
48
+ ]
49
+ }
50
+ );
51
+ }
52
+
53
+ export { LIVE_CURSOR_HIDE_MS, LIVE_CURSOR_REST_MS, LiveCursor };
@@ -0,0 +1,24 @@
1
+ import { cx } from './chunk-ODEQTPFM.js';
2
+ import './Note-RT4L6VUT.css';
3
+ import { forwardRef } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var Note = forwardRef(function Note2({ tone = "amber", align = "start", size = "md", className, children, ...rest }, ref) {
7
+ return /* @__PURE__ */ jsx(
8
+ "div",
9
+ {
10
+ ref,
11
+ className: cx(
12
+ "crewlet-note",
13
+ `crewlet-note--${tone}`,
14
+ align === "center" && "crewlet-note--center",
15
+ size === "lg" && "crewlet-note--lg",
16
+ className
17
+ ),
18
+ ...rest,
19
+ children
20
+ }
21
+ );
22
+ });
23
+
24
+ export { Note };
@@ -1,4 +1,4 @@
1
- import { TreeGrid } from './chunk-B2Z2CDM5.js';
1
+ import { TreeGrid } from './chunk-T5TFZ2JB.js';
2
2
  import { createTreeModel, treeParent } from './chunk-MY374UUD.js';
3
3
  import { OrgLabel } from './chunk-AKEZ3G5V.js';
4
4
  import { AddPill } from './chunk-TROLVEZY.js';
@@ -0,0 +1,18 @@
1
+ import { cx } from './chunk-ODEQTPFM.js';
2
+ import './Divider-3Z77ZAJH.css';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Divider({ label, align = "start", className, ...rest }) {
6
+ return /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ role: "separator",
10
+ "aria-label": label || void 0,
11
+ className: cx("crewlet-divider", label && "crewlet-divider--labelled", label && align === "center" && "crewlet-divider--center", className),
12
+ ...rest,
13
+ children: label ? /* @__PURE__ */ jsx("span", { className: "crewlet-divider__label", children: label }) : null
14
+ }
15
+ );
16
+ }
17
+
18
+ export { Divider };
@@ -0,0 +1,49 @@
1
+ import { IconButton } from './chunk-4FQT6ZAY.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './PinTile-IIA25MNZ.css';
4
+ import { forwardRef } from 'react';
5
+ import { GripVerticalGlyph, PinGlyph } from '@crewlethq/icons/glyphs';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var PinTile = forwardRef(function PinTile2({ title, href, kind, meta, leading, status, figure, onUnpin, handle, className, ...rest }, ref) {
9
+ const { "aria-label": handleName, ...handleRest } = handle ?? { "aria-label": "" };
10
+ return /* @__PURE__ */ jsxs("div", { ref, className: cx("crewlet-pin-tile", className), ...rest, children: [
11
+ handle ? /* @__PURE__ */ jsx(
12
+ IconButton,
13
+ {
14
+ size: "sm",
15
+ variant: "ghost",
16
+ className: "crewlet-pin-tile__handle",
17
+ label: handleName,
18
+ icon: /* @__PURE__ */ jsx(GripVerticalGlyph, { size: "sm" }),
19
+ ...handleRest
20
+ }
21
+ ) : null,
22
+ leading ? /* @__PURE__ */ jsx("span", { className: "crewlet-pin-tile__leading", "aria-hidden": "true", children: leading }) : null,
23
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-pin-tile__body", children: [
24
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-pin-tile__head", children: [
25
+ /* @__PURE__ */ jsx("a", { className: "crewlet-pin-tile__link", href, children: title }),
26
+ status ? /* @__PURE__ */ jsx("span", { className: "crewlet-pin-tile__status", children: status }) : null
27
+ ] }),
28
+ kind || meta ? /* @__PURE__ */ jsxs("span", { className: "crewlet-pin-tile__meta", children: [
29
+ kind ? /* @__PURE__ */ jsx("span", { className: "crewlet-pin-tile__kind", children: kind }) : null,
30
+ kind && meta ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: " \xB7 " }) : null,
31
+ meta
32
+ ] }) : null
33
+ ] }),
34
+ figure !== void 0 && figure !== null ? /* @__PURE__ */ jsx("span", { className: "crewlet-pin-tile__figure", children: figure }) : null,
35
+ onUnpin ? /* @__PURE__ */ jsx(
36
+ IconButton,
37
+ {
38
+ size: "sm",
39
+ variant: "ghost",
40
+ className: "crewlet-pin-tile__unpin",
41
+ label: `Unpin ${title}`,
42
+ icon: /* @__PURE__ */ jsx(PinGlyph, { size: "sm" }),
43
+ onClick: onUnpin
44
+ }
45
+ ) : null
46
+ ] });
47
+ });
48
+
49
+ export { PinTile };
@@ -1,12 +1,12 @@
1
1
  import { Skeleton } from './chunk-W5J7R5EB.js';
2
- import { Modal } from './chunk-DEEVA6TV.js';
2
+ import { Modal } from './chunk-7IJARUIF.js';
3
3
  import { useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
4
- import { Input } from './chunk-4GB57WIT.js';
4
+ import { Input } from './chunk-Q55TXPA3.js';
5
+ import { Popover } from './chunk-BWRGFKJP.js';
5
6
  import { KeyChip, highlightMatch } from './chunk-FYTIJM2T.js';
6
- import { announce } from './chunk-RSAQOKH3.js';
7
7
  import { useMediaMatch } from './chunk-IG75YMUN.js';
8
- import { Popover } from './chunk-BWRGFKJP.js';
9
8
  import { focusables, isComposing } from './chunk-R25RGPUB.js';
9
+ import { announce } from './chunk-RSAQOKH3.js';
10
10
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
11
11
  import { cx } from './chunk-ODEQTPFM.js';
12
12
  import './Switcher-B44Q4WF4.css';