@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
@@ -0,0 +1,94 @@
1
+ /*
2
+ * ArrangeList: rows a reader puts in order and switches on and off.
3
+ *
4
+ * The row is a quiet inset band rather than a card: a panel holding eight of
5
+ * them is a list, and eight bordered boxes read as eight separate objects.
6
+ */
7
+
8
+ .crewlet-arrange-list {
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: var(--spacing-1);
12
+ margin: 0;
13
+ padding: 0;
14
+ list-style: none;
15
+ }
16
+
17
+ .crewlet-arrange-list__item {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--spacing-2);
21
+ min-height: var(--size-row-lg);
22
+ padding: var(--spacing-1) var(--spacing-2) var(--spacing-1) var(--spacing-1);
23
+ border: 1px solid transparent;
24
+ border-radius: var(--radius-md);
25
+ background: var(--color-surface-subtle);
26
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-default),
27
+ border-color var(--motion-duration-fast) var(--motion-easing-default);
28
+ }
29
+
30
+ .crewlet-arrange-list__item:hover {
31
+ border-color: var(--color-border-default);
32
+ }
33
+
34
+ /* The row being carried is a gap in the list, outlined where it will land. */
35
+ .crewlet-arrange-list__item[data-reorder='dragging'] {
36
+ border-style: dashed;
37
+ border-color: var(--color-border-strong);
38
+ background: transparent;
39
+ }
40
+ .crewlet-arrange-list__item[data-reorder='dragging'] > * {
41
+ opacity: 0.4;
42
+ }
43
+
44
+ .crewlet-arrange-list__handle {
45
+ flex-shrink: 0;
46
+ cursor: grab;
47
+ color: var(--color-text-tertiary);
48
+ }
49
+ .crewlet-arrange-list__handle:active {
50
+ cursor: grabbing;
51
+ }
52
+
53
+ .crewlet-arrange-list__label {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ gap: var(--spacing-2);
57
+ }
58
+
59
+ .crewlet-arrange-list__icon {
60
+ display: inline-flex;
61
+ flex-shrink: 0;
62
+ color: var(--color-text-secondary);
63
+ }
64
+
65
+ /* The toggle takes the row's width, so its label is the row's target. */
66
+ .crewlet-arrange-list__toggle {
67
+ flex: 1 1 auto;
68
+ min-width: 0;
69
+ }
70
+
71
+ /* Off, the words step back; the switch itself already says off. */
72
+ .crewlet-arrange-list__item.is-off .crewlet-arrange-list__icon,
73
+ .crewlet-arrange-list__item.is-off .crewlet-switch__label,
74
+ .crewlet-arrange-list__item.is-off .crewlet-checkbox__label {
75
+ color: var(--color-text-tertiary);
76
+ }
77
+
78
+ .crewlet-arrange-list__trailing {
79
+ display: inline-flex;
80
+ flex-shrink: 0;
81
+ align-items: center;
82
+ }
83
+
84
+ .crewlet-arrange-list__moves {
85
+ display: inline-flex;
86
+ flex-shrink: 0;
87
+ gap: 2px;
88
+ }
89
+
90
+ @media (prefers-reduced-motion: reduce) {
91
+ .crewlet-arrange-list__item {
92
+ transition: none;
93
+ }
94
+ }
@@ -0,0 +1,61 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type GlyphSize } from '@crewlethq/icons/glyphs';
3
+ import { type AvatarStackMember } from '../Avatar/index.js';
4
+ import { type Principal } from '../Principal/index.js';
5
+ import { type TimeValue } from '../RelativeTime/index.js';
6
+ /** What an artifact is, as the engine names it (`artifacts.Kind`), which decides how it is drawn. */
7
+ export type ArtifactKind = 'html' | 'markdown' | 'sheet';
8
+ export declare const ARTIFACT_KINDS: readonly ["html", "markdown", "sheet"];
9
+ /** The glyph a kind is drawn with, wherever a kind is drawn, at a glyph size step or in px. */
10
+ export declare function ArtifactKindGlyph({ kind, size }: {
11
+ kind: ArtifactKind;
12
+ size?: GlyphSize | undefined;
13
+ }): import("react").JSX.Element;
14
+ export type ArtifactCardSize = 'card' | 'compact';
15
+ export interface ArtifactCardLabels {
16
+ kinds: Record<ArtifactKind, string>;
17
+ pinned: string;
18
+ version: (version: number) => string;
19
+ changes: (count: number) => string;
20
+ present: (count: number) => string;
21
+ updated: string;
22
+ }
23
+ export interface ArtifactCardProps {
24
+ title: string;
25
+ kind: ArtifactKind;
26
+ /** Where the card goes: the artifact's viewer. The whole card is one real link. */
27
+ href: string;
28
+ /**
29
+ * A thumbnail drawn natively: a sheet's first rows, an author's cover image.
30
+ * Never a screenshot. The kind's glyph stands in when there is none.
31
+ */
32
+ preview?: ReactNode;
33
+ owner?: Principal | undefined;
34
+ updatedAt: TimeValue;
35
+ /** Who made the latest change, when it is worth saying ("Maya"). */
36
+ updatedBy?: string | undefined;
37
+ /** Who has it open now. */
38
+ presence?: readonly AvatarStackMember[] | undefined;
39
+ /** Changes since this reader last opened it. Nothing is drawn for none or for never opened. */
40
+ changes?: number | undefined;
41
+ pinned?: boolean | undefined;
42
+ version?: number | undefined;
43
+ /** The project or task it belongs to, as its key ("OPS", "ENG-412"). */
44
+ project?: string | undefined;
45
+ /** `compact` is a row for a narrow rail or a phone, with no preview. */
46
+ size?: ArtifactCardSize | undefined;
47
+ className?: string | undefined;
48
+ /** Overrides the shared clock, for a story or a suite. */
49
+ now?: number | undefined;
50
+ labels?: Partial<ArtifactCardLabels> | undefined;
51
+ }
52
+ /**
53
+ * One artifact, as a card in a gallery, a row in a task's rail or an embed.
54
+ *
55
+ * THE WHOLE CARD IS ONE LINK, named by the title alone and described by the
56
+ * rest, so a reader moving through a gallery by link hears "Vendor scorecard"
57
+ * and then, if they wait, what it is and who changed it. Nothing inside is a
58
+ * second control: a pin or a menu inside a link is a control nobody can reach
59
+ * without opening the artifact. Those live on the gallery row's own menu.
60
+ */
61
+ export declare function ArtifactCard({ title, kind, href, preview, owner, updatedAt, updatedBy, presence, changes, pinned, version, project, size, className, now, labels, }: ArtifactCardProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './ArtifactCard.css';
2
+ export { ARTIFACT_KINDS, ArtifactCard, ArtifactKindGlyph } from './ArtifactCard.js';
3
+ export type { ArtifactCardLabels, ArtifactCardProps, ArtifactCardSize, ArtifactKind } from './ArtifactCard.js';
@@ -0,0 +1,12 @@
1
+ export { ARTIFACT_KINDS, ArtifactCard, ArtifactKindGlyph } from '../chunk-TODND5AD.js';
2
+ import '../chunk-4KP4RC3O.js';
3
+ import '../chunk-3CZ7XAVY.js';
4
+ import '../chunk-EUCC37WY.js';
5
+ import '../chunk-UAN5NE7M.js';
6
+ import '../chunk-5OM447RW.js';
7
+ import '../chunk-YZCJ63JF.js';
8
+ import '../chunk-AV2DXAEL.js';
9
+ import '../chunk-PQADV6P6.js';
10
+ import '../chunk-BHHIIK3M.js';
11
+ import '../chunk-BZFWDIV6.js';
12
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,109 @@
1
+ /*
2
+ * A card in a gallery: the preview on top at a fixed ratio, so a grid of them
3
+ * lines up whatever each preview is, then the title and up to three lines of
4
+ * facts. `compact` is a row with the kind's glyph in place of the preview.
5
+ */
6
+
7
+ .crewlet-artifact-card {
8
+ display: flex;
9
+ flex-direction: column;
10
+ min-width: 0;
11
+ overflow: hidden;
12
+ color: inherit;
13
+ text-decoration: none;
14
+ }
15
+
16
+ .crewlet-artifact-card--compact {
17
+ flex-direction: row;
18
+ align-items: flex-start;
19
+ gap: var(--spacing-3);
20
+ padding: var(--spacing-3);
21
+ }
22
+
23
+ .crewlet-artifact-card__preview {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ aspect-ratio: 16 / 9;
28
+ overflow: hidden;
29
+ border-bottom: 1px solid var(--color-border-default);
30
+ background: var(--color-surface-inset);
31
+ color: var(--color-text-tertiary);
32
+ }
33
+
34
+ .crewlet-artifact-card__glyph {
35
+ display: inline-flex;
36
+ color: var(--color-text-tertiary);
37
+ }
38
+
39
+ .crewlet-artifact-card__glyph--compact {
40
+ flex: none;
41
+ align-items: center;
42
+ justify-content: center;
43
+ width: var(--size-control-md);
44
+ height: var(--size-control-md);
45
+ border-radius: var(--radius-md);
46
+ background: var(--color-surface-inset);
47
+ }
48
+
49
+ .crewlet-artifact-card__body {
50
+ display: flex;
51
+ flex-direction: column;
52
+ gap: var(--spacing-1);
53
+ min-width: 0;
54
+ padding: var(--spacing-3);
55
+ }
56
+
57
+ .crewlet-artifact-card--compact .crewlet-artifact-card__body {
58
+ padding: 0;
59
+ }
60
+
61
+ .crewlet-artifact-card__title-row {
62
+ display: flex;
63
+ align-items: center;
64
+ gap: var(--spacing-1);
65
+ min-width: 0;
66
+ }
67
+
68
+ .crewlet-artifact-card__title {
69
+ overflow: hidden;
70
+ color: var(--color-text-primary);
71
+ font-weight: var(--font-weight-semibold);
72
+ text-overflow: ellipsis;
73
+ white-space: nowrap;
74
+ }
75
+
76
+ .crewlet-artifact-card__pin {
77
+ display: inline-flex;
78
+ flex: none;
79
+ color: var(--color-text-tertiary);
80
+ }
81
+
82
+ .crewlet-artifact-card__facts {
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: var(--spacing-1);
86
+ color: var(--color-text-tertiary);
87
+ font-size: var(--font-size-xs);
88
+ }
89
+
90
+ .crewlet-artifact-card__line {
91
+ display: flex;
92
+ flex-wrap: wrap;
93
+ align-items: center;
94
+ gap: var(--spacing-1) var(--spacing-2);
95
+ min-width: 0;
96
+ }
97
+
98
+ .crewlet-artifact-card__owner,
99
+ .crewlet-artifact-card__presence {
100
+ display: inline-flex;
101
+ align-items: center;
102
+ gap: var(--spacing-1);
103
+ min-width: 0;
104
+ }
105
+
106
+ .crewlet-artifact-card__changes {
107
+ color: var(--color-text-secondary);
108
+ font-weight: var(--font-weight-medium);
109
+ }
@@ -1,6 +1,6 @@
1
- export { AuthLayout } from '../chunk-7QFAORCY.js';
1
+ export { AuthLayout } from '../chunk-WHZFDS62.js';
2
2
  import '../chunk-7KBNFFM3.js';
3
- import '../chunk-EG6NYWVK.js';
3
+ import '../chunk-YZCJ63JF.js';
4
4
  import '../chunk-AV2DXAEL.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-BHHIIK3M.js';
@@ -1,14 +1,14 @@
1
- export { AvatarPicker } from '../chunk-HENOTGUV.js';
2
- import '../chunk-NXDEPUVG.js';
3
- import '../chunk-AYKXMIOR.js';
1
+ export { AvatarPicker } from '../chunk-T7ICFXEC.js';
2
+ import '../chunk-XU4ZUGLE.js';
4
3
  import '../chunk-26PEPONN.js';
5
4
  import '../chunk-4LDTQWS7.js';
6
5
  import '../chunk-BWRGFKJP.js';
6
+ import '../chunk-AYKXMIOR.js';
7
7
  import '../chunk-5PSXBL73.js';
8
8
  import '../chunk-CBOICT64.js';
9
+ import '../chunk-5OM447RW.js';
10
+ import '../chunk-BHHIIK3M.js';
9
11
  import '../chunk-HMPFGIWM.js';
10
12
  import '../chunk-R25RGPUB.js';
11
- import '../chunk-BHHIIK3M.js';
12
13
  import '../chunk-BZFWDIV6.js';
13
- import '../chunk-5OM447RW.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -1,8 +1,8 @@
1
- export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-AMH67MLM.js';
1
+ export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-TXAFKH2A.js';
2
2
  import '../chunk-VYOKRN2I.js';
3
3
  import '../chunk-OG6CL3EB.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';
@@ -1,4 +1,4 @@
1
- export { Card } from '../chunk-EG6NYWVK.js';
1
+ export { Card } from '../chunk-YZCJ63JF.js';
2
2
  export { useCardHeaderSlot } from '../chunk-AV2DXAEL.js';
3
3
  import '../chunk-PQADV6P6.js';
4
4
  import '../chunk-BHHIIK3M.js';
@@ -0,0 +1,26 @@
1
+ import { type SheetChange, type SheetLabels } from '../SheetModel/index.js';
2
+ export interface ChangeMarkProps {
3
+ /** Who changed it, by display name. */
4
+ by: string;
5
+ at: SheetChange['at'];
6
+ /** The value before the change, already written for a reader ("6.8"), or null to say nothing of it. */
7
+ previous?: string | null | undefined;
8
+ /** A BCP 47 tag for the time; the reader's own locale when absent. */
9
+ locale?: string | undefined;
10
+ className?: string | undefined;
11
+ labels?: Pick<Partial<SheetLabels>, 'changed'> | undefined;
12
+ }
13
+ /**
14
+ * The corner mark on a cell or an element that changed since the reader last
15
+ * looked, with a tooltip that says who changed it, when, and what it was:
16
+ * "Changed by Maya Ortiz, 10:42. Was 6.8."
17
+ *
18
+ * A SHAPE AND WORDS, never colour alone: the mark is a corner notch in
19
+ * `--color-change-mark`, and the tooltip is the meaning. The mark itself is
20
+ * decorative to assistive technology, because the element it sits on carries
21
+ * the same sentence in its description (SheetGrid writes it into every focused
22
+ * cell's), and a mark read out on top of that would say it twice. A host
23
+ * drawing the mark on an element of its own says the sentence the same way,
24
+ * with `changeText` from the sheet model.
25
+ */
26
+ export declare function ChangeMark({ by, at, previous, locale, className, labels }: ChangeMarkProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './ChangeMark.css';
2
+ export { ChangeMark } from './ChangeMark.js';
3
+ export type { ChangeMarkProps } from './ChangeMark.js';
@@ -0,0 +1,8 @@
1
+ export { ChangeMark } from '../chunk-PPAQFGS2.js';
2
+ import '../chunk-YYZRLLLY.js';
3
+ import '../chunk-S35G6PNC.js';
4
+ import '../chunk-QWOPX2MN.js';
5
+ import '../chunk-AYKXMIOR.js';
6
+ import '../chunk-HMPFGIWM.js';
7
+ import '../chunk-R25RGPUB.js';
8
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,22 @@
1
+ /*
2
+ * A change mark (ChangeMark.tsx): a notch in the top end corner of whatever
3
+ * it sits on, which is the nearest positioned ancestor. A triangle drawn by
4
+ * two borders, so it is a shape at any zoom and needs no glyph.
5
+ */
6
+
7
+ .crewlet-change-mark {
8
+ position: absolute;
9
+ top: 0;
10
+ inset-inline-end: 0;
11
+ width: 0;
12
+ height: 0;
13
+ border-top: var(--spacing-2) solid var(--color-change-mark);
14
+ border-inline-start: var(--spacing-2) solid transparent;
15
+ pointer-events: auto;
16
+ }
17
+
18
+ @media (forced-colors: active) {
19
+ .crewlet-change-mark {
20
+ border-top-color: CanvasText;
21
+ }
22
+ }
@@ -1,6 +1,6 @@
1
- export { Checkbox, CheckboxGroup } from '../chunk-75CLJNDQ.js';
2
- import '../chunk-4GB57WIT.js';
3
- import '../chunk-4FQT6ZAY.js';
1
+ export { Checkbox, CheckboxGroup } from '../chunk-I6NZKJGK.js';
2
+ import '../chunk-Q55TXPA3.js';
4
3
  import '../chunk-PQADV6P6.js';
4
+ import '../chunk-4FQT6ZAY.js';
5
5
  import '../chunk-BZFWDIV6.js';
6
6
  import '../chunk-ODEQTPFM.js';
@@ -1,8 +1,8 @@
1
- export { Combobox } from '../chunk-ZFH7H7GS.js';
1
+ export { Combobox } from '../chunk-LOLELDBW.js';
2
2
  import '../chunk-F73MC7EZ.js';
3
- import '../chunk-4GB57WIT.js';
4
- import '../chunk-4FQT6ZAY.js';
3
+ import '../chunk-Q55TXPA3.js';
5
4
  import '../chunk-PQADV6P6.js';
6
5
  import '../chunk-R25RGPUB.js';
6
+ import '../chunk-4FQT6ZAY.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { CommandPalette } from '../chunk-PQ63NLFC.js';
2
- import '../chunk-DEEVA6TV.js';
1
+ export { CommandPalette } from '../chunk-UXELEORU.js';
2
+ import '../chunk-7IJARUIF.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
4
  import '../chunk-SMBKXWML.js';
5
- import '../chunk-4GB57WIT.js';
6
5
  import '../chunk-OG6CL3EB.js';
7
- import '../chunk-4FQT6ZAY.js';
6
+ import '../chunk-Q55TXPA3.js';
8
7
  import '../chunk-PQADV6P6.js';
8
+ import '../chunk-BHHIIK3M.js';
9
9
  import '../chunk-HMPFGIWM.js';
10
10
  import '../chunk-R25RGPUB.js';
11
- import '../chunk-BHHIIK3M.js';
11
+ import '../chunk-4FQT6ZAY.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { COMPOSER_COUNTER_AT, Composer } from '../chunk-6NIMZ5XC.js';
1
+ export { COMPOSER_COUNTER_AT, Composer } from '../chunk-VJLYGPPE.js';
2
2
  import '../chunk-SMBKXWML.js';
3
- import '../chunk-4GB57WIT.js';
4
- import '../chunk-4FQT6ZAY.js';
3
+ import '../chunk-Q55TXPA3.js';
5
4
  import '../chunk-PQADV6P6.js';
5
+ import '../chunk-4FQT6ZAY.js';
6
6
  import '../chunk-BZFWDIV6.js';
7
7
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { ConfirmField, confirmMatches } from '../chunk-CXBAIVYZ.js';
1
+ export { ConfirmField, confirmMatches } from '../chunk-YSY6UJ4F.js';
2
2
  import '../chunk-5CLW2CXT.js';
3
- import '../chunk-4GB57WIT.js';
4
- import '../chunk-4FQT6ZAY.js';
3
+ import '../chunk-Q55TXPA3.js';
5
4
  import '../chunk-PQADV6P6.js';
5
+ import '../chunk-4FQT6ZAY.js';
6
6
  import '../chunk-BZFWDIV6.js';
7
7
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,34 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ import type { NodeHue } from '../utils/nodeHue.js';
3
+ /**
4
+ * Where a flag stands against the element it labels: above its end edge, below
5
+ * it, or in the flow for a component that places it itself (a live cursor).
6
+ */
7
+ export type CursorFlagPlacement = 'top-end' | 'bottom-end' | 'inline';
8
+ export interface CursorFlagProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
9
+ /** The name, or several when more than one collaborator is on the same element ("Maya, @pm"). */
10
+ name: string | readonly string[];
11
+ hue: NodeHue;
12
+ /** A person's flag is a pill, an agent's a squircle, as their badges are. */
13
+ kind?: 'human' | 'agent' | undefined;
14
+ /** The collaborator is editing rather than looking: a pencil leads the name. */
15
+ editing?: boolean | undefined;
16
+ placement?: CursorFlagPlacement | undefined;
17
+ }
18
+ /**
19
+ * The name flag pinned to a collaborator's mark: a cell they are on, a cursor,
20
+ * a selection.
21
+ *
22
+ * THE NAME IS ALWAYS ON IT. A flag is the half of the presence colour
23
+ * exception (D22) that makes the hue mean somebody: a ring in a hue with no
24
+ * name beside it would be colour carrying identity on its own. The name is
25
+ * drawn in `--color-presence-flag-text`, which the palette suite holds at
26
+ * 4.5:1 on each of the six hues in every theme, and a long name is truncated
27
+ * rather than wrapped, so a flag never covers the row under it.
28
+ *
29
+ * DECORATIVE TO ASSISTIVE TECHNOLOGY. A flag moves with somebody else's
30
+ * attention, and announcing it would read the room out loud. The same fact is
31
+ * said in words wherever presence is listed, and in the focused element's
32
+ * description.
33
+ */
34
+ export declare function CursorFlag({ name, hue, kind, editing, placement, className, ...rest }: CursorFlagProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './CursorFlag.css';
2
+ export { CursorFlag } from './CursorFlag.js';
3
+ export type { CursorFlagPlacement, CursorFlagProps } from './CursorFlag.js';
@@ -0,0 +1,3 @@
1
+ export { CursorFlag } from '../chunk-3BYIWOTV.js';
2
+ import '../chunk-I6POAB4V.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,61 @@
1
+ /*
2
+ * A collaborator's name flag (CursorFlag.tsx): the name on a plate of their
3
+ * presence hue, in the ink the palette suite holds at 4.5:1 on every hue.
4
+ */
5
+
6
+ .crewlet-cursor-flag {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ gap: var(--spacing-1);
10
+ box-sizing: border-box;
11
+ max-width: 16em;
12
+ padding: 0 calc(var(--spacing-1) * 1.5);
13
+ border-radius: var(--radius-pill);
14
+ background: var(--crewlet-presence-hue);
15
+ box-shadow: var(--shadow-cursor);
16
+ color: var(--color-presence-flag-text);
17
+ font-family: var(--font-family-sans);
18
+ font-size: var(--font-size-2xs);
19
+ font-weight: var(--font-weight-semibold);
20
+ line-height: var(--font-line-height-normal);
21
+ white-space: nowrap;
22
+ pointer-events: none;
23
+ user-select: none;
24
+ }
25
+
26
+ .crewlet-cursor-flag--agent {
27
+ border-radius: var(--radius-xs);
28
+ }
29
+
30
+ .crewlet-cursor-flag__name {
31
+ overflow: hidden;
32
+ text-overflow: ellipsis;
33
+ }
34
+
35
+ .crewlet-cursor-flag__glyph {
36
+ flex: none;
37
+ }
38
+
39
+ /* Pinned to the element it labels, which is the nearest positioned ancestor. */
40
+ .crewlet-cursor-flag--top-end,
41
+ .crewlet-cursor-flag--bottom-end {
42
+ position: absolute;
43
+ inset-inline-end: 0;
44
+ z-index: var(--z-index-presence);
45
+ }
46
+
47
+ .crewlet-cursor-flag--top-end {
48
+ bottom: 100%;
49
+ }
50
+
51
+ .crewlet-cursor-flag--bottom-end {
52
+ top: 100%;
53
+ }
54
+
55
+ @media (forced-colors: active) {
56
+ .crewlet-cursor-flag {
57
+ border: 1px solid CanvasText;
58
+ background: Canvas;
59
+ color: CanvasText;
60
+ }
61
+ }
@@ -1,16 +1,16 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-FSKTOIYC.js';
2
- import '../chunk-NS7BVLL3.js';
3
- import '../chunk-EUCC37WY.js';
4
- import '../chunk-75CLJNDQ.js';
5
- import '../chunk-DEEVA6TV.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-AJESMWJS.js';
2
+ import '../chunk-JULMZNGT.js';
6
3
  import '../chunk-STJ7QBC3.js';
7
4
  import '../chunk-DTIW4CHZ.js';
8
- import '../chunk-4GB57WIT.js';
5
+ import '../chunk-7IJARUIF.js';
9
6
  import '../chunk-OG6CL3EB.js';
10
- import '../chunk-4FQT6ZAY.js';
7
+ import '../chunk-I6NZKJGK.js';
8
+ import '../chunk-Q55TXPA3.js';
9
+ import '../chunk-EUCC37WY.js';
11
10
  import '../chunk-AV2DXAEL.js';
12
11
  import '../chunk-PQADV6P6.js';
13
12
  import '../chunk-HMPFGIWM.js';
14
13
  import '../chunk-R25RGPUB.js';
14
+ import '../chunk-4FQT6ZAY.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -1,26 +1,26 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-6NN2F7GM.js';
2
- import '../chunk-3CZ7XAVY.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-OIMAK5AE.js';
3
2
  import '../chunk-HOXGBLEY.js';
4
3
  import '../chunk-PGRPNDWM.js';
5
- import '../chunk-FSKTOIYC.js';
6
- import '../chunk-NS7BVLL3.js';
7
- import '../chunk-EUCC37WY.js';
8
- import '../chunk-2UU5IGZI.js';
9
- import '../chunk-75CLJNDQ.js';
10
- import '../chunk-DEEVA6TV.js';
11
- import '../chunk-F73MC7EZ.js';
4
+ import '../chunk-AJESMWJS.js';
5
+ import '../chunk-JULMZNGT.js';
6
+ import '../chunk-L4H7SSWF.js';
12
7
  import '../chunk-STJ7QBC3.js';
13
8
  import '../chunk-DTIW4CHZ.js';
9
+ import '../chunk-7IJARUIF.js';
10
+ import '../chunk-F73MC7EZ.js';
14
11
  import '../chunk-SMBKXWML.js';
15
- import '../chunk-4GB57WIT.js';
16
12
  import '../chunk-GXQ3B46I.js';
17
13
  import '../chunk-OG6CL3EB.js';
18
- import '../chunk-4FQT6ZAY.js';
14
+ import '../chunk-I6NZKJGK.js';
15
+ import '../chunk-Q55TXPA3.js';
16
+ import '../chunk-3CZ7XAVY.js';
17
+ import '../chunk-EUCC37WY.js';
18
+ import '../chunk-BWRGFKJP.js';
19
19
  import '../chunk-AV2DXAEL.js';
20
20
  import '../chunk-PQADV6P6.js';
21
- import '../chunk-BWRGFKJP.js';
21
+ import '../chunk-BHHIIK3M.js';
22
22
  import '../chunk-HMPFGIWM.js';
23
23
  import '../chunk-R25RGPUB.js';
24
- import '../chunk-BHHIIK3M.js';
24
+ import '../chunk-4FQT6ZAY.js';
25
25
  import '../chunk-BZFWDIV6.js';
26
26
  import '../chunk-ODEQTPFM.js';
@@ -1,9 +1,9 @@
1
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-2UU5IGZI.js';
1
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-L4H7SSWF.js';
2
2
  import '../chunk-GXQ3B46I.js';
3
3
  import '../chunk-OG6CL3EB.js';
4
- import '../chunk-4FQT6ZAY.js';
5
4
  import '../chunk-BWRGFKJP.js';
6
5
  import '../chunk-HMPFGIWM.js';
7
6
  import '../chunk-R25RGPUB.js';
7
+ import '../chunk-4FQT6ZAY.js';
8
8
  import '../chunk-BZFWDIV6.js';
9
9
  import '../chunk-ODEQTPFM.js';