@crewlethq/ui 0.24.0 → 0.26.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 (172) hide show
  1. package/README.md +85 -3
  2. package/dist/ArrangeList/index.js +2 -2
  3. package/dist/ArtifactCover/ArtifactCover.d.ts +37 -0
  4. package/dist/ArtifactCover/DashboardCover.d.ts +46 -0
  5. package/dist/ArtifactCover/index.d.ts +6 -0
  6. package/dist/ArtifactCover/index.js +14 -0
  7. package/dist/ArtifactCover-D4MBEJ5H.css +67 -0
  8. package/dist/ArtifactIcon/ArtifactIcon.d.ts +29 -0
  9. package/dist/ArtifactIcon/index.d.ts +2 -0
  10. package/dist/ArtifactIcon/index.js +13 -0
  11. package/dist/AvatarPicker/index.js +6 -6
  12. package/dist/Canvas/Canvas.d.ts +13 -2
  13. package/dist/Canvas/index.js +1 -1
  14. package/dist/CanvasBoard/CanvasBoard.d.ts +117 -0
  15. package/dist/CanvasBoard/budget.d.ts +38 -0
  16. package/dist/CanvasBoard/index.d.ts +5 -0
  17. package/dist/CanvasBoard/index.js +10 -0
  18. package/dist/CanvasBoard-ZLPDINSM.css +236 -0
  19. package/dist/CanvasSchematic/CanvasSchematic.d.ts +31 -0
  20. package/dist/CanvasSchematic/index.d.ts +3 -0
  21. package/dist/CanvasSchematic/index.js +2 -0
  22. package/dist/CanvasSchematic-PLB3N46J.css +36 -0
  23. package/dist/ChangeMark/index.js +3 -3
  24. package/dist/CharacterPicker/index.js +2 -2
  25. package/dist/Checkbox/Checkbox.d.ts +6 -0
  26. package/dist/Checkbox/index.js +1 -1
  27. package/dist/{Checkbox-KT7RS6QQ.css → Checkbox-5UORUG3F.css} +16 -0
  28. package/dist/CommentThread/index.js +2 -2
  29. package/dist/DashboardCover-RMINBODB.css +143 -0
  30. package/dist/DataTable/index.js +3 -3
  31. package/dist/DataView/index.js +5 -5
  32. package/dist/DatasetSource/DatasetSource.d.ts +83 -0
  33. package/dist/DatasetSource/index.d.ts +3 -0
  34. package/dist/DatasetSource/index.js +7 -0
  35. package/dist/DatasetSource-47LBDMPR.css +129 -0
  36. package/dist/DocTabsEditor/DocTabsEditor.d.ts +60 -0
  37. package/dist/DocTabsEditor/index.d.ts +3 -0
  38. package/dist/DocTabsEditor/index.js +9 -0
  39. package/dist/DocTabsEditor-RCOWHX5J.css +78 -0
  40. package/dist/DownloadButton/index.js +2 -2
  41. package/dist/HuePicker/index.js +4 -4
  42. package/dist/LinkInterstitial/index.js +2 -2
  43. package/dist/MarkdownEditor/index.js +5 -5
  44. package/dist/MergeConflicts/MergeConflicts.d.ts +51 -0
  45. package/dist/MergeConflicts/index.d.ts +3 -0
  46. package/dist/MergeConflicts/index.js +9 -0
  47. package/dist/MergeConflicts-O44ESH4T.css +77 -0
  48. package/dist/Meter/index.js +1 -1
  49. package/dist/{Meter-5VCSFMZW.css → Meter-ZZRFUEOH.css} +15 -0
  50. package/dist/ObjectHeader/ObjectHeader.d.ts +7 -1
  51. package/dist/ObjectHeader/index.js +1 -1
  52. package/dist/{ObjectHeader-UNVYM2KD.css → ObjectHeader-D7GU7QNI.css} +15 -0
  53. package/dist/PeopleRail/index.js +2 -2
  54. package/dist/PresenceModel/index.d.ts +1 -1
  55. package/dist/PresenceModel/index.js +1 -1
  56. package/dist/PresenceModel/presence.d.ts +10 -2
  57. package/dist/PresenceStack/index.js +2 -2
  58. package/dist/PresenterView/PresenterView.d.ts +52 -0
  59. package/dist/PresenterView/index.d.ts +3 -0
  60. package/dist/PresenterView/index.js +8 -0
  61. package/dist/PresenterView-T2C6ZZ3N.css +103 -0
  62. package/dist/Section/index.js +1 -1
  63. package/dist/{Section-QRUPRIQ2.css → Section-QR3ILQVK.css} +4 -1
  64. package/dist/SegmentedControl/SegmentedControl.d.ts +17 -0
  65. package/dist/SegmentedControl/index.js +4 -4
  66. package/dist/{SegmentedControl-PKBLJVSA.css → SegmentedControl-FLI45IOW.css} +13 -0
  67. package/dist/ShareDialog/index.js +3 -3
  68. package/dist/SheetGrid/SheetGrid.d.ts +24 -2
  69. package/dist/SheetGrid/index.js +10 -6
  70. package/dist/{SheetGrid-4HOXDVIB.css → SheetGrid-J3TKKXZL.css} +87 -17
  71. package/dist/SheetModel/edits.d.ts +7 -1
  72. package/dist/SheetModel/index.js +2 -2
  73. package/dist/SheetModel/labels.d.ts +9 -0
  74. package/dist/SheetModel/types.d.ts +6 -0
  75. package/dist/SlideCompare/SlideCompare.d.ts +52 -0
  76. package/dist/SlideCompare/index.d.ts +3 -0
  77. package/dist/SlideCompare/index.js +7 -0
  78. package/dist/SlideCompare-MGM3U2ME.css +80 -0
  79. package/dist/SlideFilmstrip/SlideFilmstrip.d.ts +50 -0
  80. package/dist/SlideFilmstrip/index.d.ts +3 -0
  81. package/dist/SlideFilmstrip/index.js +8 -0
  82. package/dist/SlideFilmstrip-BCLNAHFX.css +108 -0
  83. package/dist/SlideGrid/SlideGrid.d.ts +32 -0
  84. package/dist/SlideGrid/index.d.ts +3 -0
  85. package/dist/SlideGrid/index.js +5 -0
  86. package/dist/SlideGrid-RT6QEQEE.css +82 -0
  87. package/dist/SlideStage/SlideStage.d.ts +47 -0
  88. package/dist/SlideStage/index.d.ts +5 -0
  89. package/dist/SlideStage/index.js +4 -0
  90. package/dist/SlideStage/useSlideKeys.d.ts +21 -0
  91. package/dist/SlideStage-XIOTMMRU.css +32 -0
  92. package/dist/Switcher/index.js +2 -2
  93. package/dist/TableCells/index.js +2 -2
  94. package/dist/Tabs/index.js +2 -2
  95. package/dist/Tabs/roving.d.ts +1 -0
  96. package/dist/TagGroup/TagGroup.d.ts +16 -1
  97. package/dist/TagGroup/index.js +1 -1
  98. package/dist/{TagGroup-BCQZD7ZD.css → TagGroup-NAXTJHDS.css} +22 -0
  99. package/dist/ThemeGallery/index.js +2 -2
  100. package/dist/ThemeSwitcher/index.js +5 -5
  101. package/dist/TreeCanvas/index.js +2 -2
  102. package/dist/VersionCompare/VersionCompare.d.ts +8 -1
  103. package/dist/VersionCompare/index.js +5 -5
  104. package/dist/VersionTimeline/index.js +1 -1
  105. package/dist/{VersionTimeline-EBJ6MIPJ.css → VersionTimeline-6KRXEEOO.css} +7 -7
  106. package/dist/WidgetFrame/WidgetFrame.d.ts +73 -0
  107. package/dist/WidgetFrame/index.d.ts +3 -0
  108. package/dist/WidgetFrame/index.js +6 -0
  109. package/dist/WidgetFrame-4EFJOJMW.css +127 -0
  110. package/dist/chunk-3D7PSL2L.js +438 -0
  111. package/dist/{chunk-SJCKMSQK.js → chunk-5LUI3WQP.js} +1 -1
  112. package/dist/{chunk-IASV5UCP.js → chunk-7T42VQQT.js} +3 -1
  113. package/dist/{chunk-BJCFNRGH.js → chunk-BEHFTRMZ.js} +1 -1
  114. package/dist/chunk-BQYQWJPK.js +80 -0
  115. package/dist/{chunk-KLIEPFEZ.js → chunk-C2FRTWKO.js} +1 -1
  116. package/dist/{chunk-APS747CR.js → chunk-EHQTPVV4.js} +5 -3
  117. package/dist/{chunk-A2UXBCLO.js → chunk-FAQGGX2Z.js} +1 -1
  118. package/dist/chunk-FQCLKD7U.js +2 -0
  119. package/dist/{chunk-J4OKGJQ6.js → chunk-FVLCTCMV.js} +1 -1
  120. package/dist/{chunk-XJFOOXCF.js → chunk-HJEVSQN6.js} +1 -1
  121. package/dist/chunk-HONZQ4UR.js +107 -0
  122. package/dist/{chunk-5PSXBL73.js → chunk-HVIX5ECM.js} +1 -1
  123. package/dist/{chunk-36CWC2NH.js → chunk-INTEH4F3.js} +271 -143
  124. package/dist/{chunk-F6NZOVWL.js → chunk-IW55G7XG.js} +6 -2
  125. package/dist/chunk-KNLJL3VP.js +101 -0
  126. package/dist/chunk-KSSSFLE2.js +105 -0
  127. package/dist/{chunk-TXAFKH2A.js → chunk-KZOGQXSP.js} +6 -0
  128. package/dist/{chunk-CS65QSIJ.js → chunk-LZHLSQYK.js} +2 -2
  129. package/dist/chunk-MQEEQVG6.js +62 -0
  130. package/dist/chunk-NBWNLYWZ.js +62 -0
  131. package/dist/{chunk-YYZRLLLY.js → chunk-NHBP2XS5.js} +19 -3
  132. package/dist/chunk-O2EGEONV.js +90 -0
  133. package/dist/{chunk-YM3GJHGW.js → chunk-ODT5H4MN.js} +1 -1
  134. package/dist/{chunk-JCSXFAXG.js → chunk-OJRDEVHV.js} +1 -1
  135. package/dist/{chunk-U63Y5OCW.js → chunk-PRNX5AFE.js} +2 -2
  136. package/dist/chunk-Q4A5CGUB.js +43 -0
  137. package/dist/{chunk-7QL2OFP6.js → chunk-RCQXUT5K.js} +25 -9
  138. package/dist/{chunk-CBOICT64.js → chunk-RKKO7QHH.js} +2 -0
  139. package/dist/{chunk-TBIZSQHB.js → chunk-RSC7UJCR.js} +1 -1
  140. package/dist/chunk-RWA4H2TV.js +73 -0
  141. package/dist/{chunk-OQT7GSKJ.js → chunk-SGIQCI6Y.js} +1 -1
  142. package/dist/{chunk-35UKQ33X.js → chunk-SVW3VG72.js} +2 -2
  143. package/dist/{chunk-4PZ6FJKW.js → chunk-UGNUUVRI.js} +2 -2
  144. package/dist/chunk-UOR7TOAU.js +191 -0
  145. package/dist/{chunk-XMGB3ZAT.js → chunk-URUGEAFB.js} +3 -2
  146. package/dist/chunk-UZ7ZUSLH.js +179 -0
  147. package/dist/chunk-V2Z24W2Z.js +75 -0
  148. package/dist/{chunk-I7WXZOWA.js → chunk-VGE3G3T4.js} +3 -1
  149. package/dist/{chunk-UNZ7TVV5.js → chunk-W4XYY73O.js} +7 -9
  150. package/dist/{chunk-IPM2E6UI.js → chunk-WJDQ7XQA.js} +1 -1
  151. package/dist/{chunk-PPAQFGS2.js → chunk-YEKYVJQR.js} +1 -1
  152. package/dist/chunk-Z54BPRL6.js +74 -0
  153. package/dist/{chunk-S35G6PNC.js → chunk-Z7JYG5TF.js} +5 -4
  154. package/dist/chunk-ZZDY4XL7.js +112 -0
  155. package/dist/generated/index.d.ts +13 -0
  156. package/dist/generated/index.js +84 -71
  157. package/dist/index.js +84 -71
  158. package/dist/styles.css +1644 -153
  159. package/dist/utils/csv.d.ts +18 -0
  160. package/dist/utils/elementToPng.d.ts +49 -0
  161. package/dist/utils/index.d.ts +4 -1
  162. package/dist/utils/index.js +2 -2
  163. package/dist/utils/useDownload.d.ts +14 -4
  164. package/package.json +3 -3
  165. package/dist/chunk-E6UWRXNM.js +0 -52
  166. package/dist/chunk-M54K52ZU.js +0 -2
  167. package/dist/chunk-U5LQ2AS5.js +0 -1
  168. package/dist/{chunk-KG6XRG5Z.js → chunk-5OY4LJFH.js} +1 -1
  169. package/dist/{chunk-ZM7HLFOA.js → chunk-L2OQRPXJ.js} +1 -1
  170. package/dist/{chunk-MUGM7SEG.js → chunk-LFNUH4GY.js} +1 -1
  171. package/dist/{chunk-PBNP7H2C.js → chunk-M2VJGNCD.js} +1 -1
  172. /package/dist/{chunk-MSSZHDZI.js → chunk-SLRKS5PF.js} +0 -0
@@ -0,0 +1,129 @@
1
+ /*
2
+ * DatasetSource: one entry of a dashboard's Sources rail. The title and its
3
+ * source kind, the definition, then where the rows stand, how many there are
4
+ * and how they are kept current, with the host's rows preview under it when
5
+ * selected.
6
+ */
7
+
8
+ .crewlet-dataset-source {
9
+ display: flex;
10
+ flex-direction: column;
11
+ min-width: 0;
12
+ border-radius: var(--radius-md);
13
+ }
14
+
15
+ .crewlet-dataset-source__summary {
16
+ box-sizing: border-box;
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: var(--spacing-1);
20
+ width: 100%;
21
+ min-width: 0;
22
+ margin: 0;
23
+ padding: var(--spacing-2) var(--spacing-3);
24
+ border: 1px solid transparent;
25
+ border-radius: var(--radius-md);
26
+ background: none;
27
+ color: inherit;
28
+ font: inherit;
29
+ text-align: start;
30
+ }
31
+
32
+ button.crewlet-dataset-source__summary {
33
+ cursor: pointer;
34
+ }
35
+
36
+ button.crewlet-dataset-source__summary:hover {
37
+ background: var(--color-surface-hover);
38
+ }
39
+
40
+ button.crewlet-dataset-source__summary:focus-visible {
41
+ outline: 2px solid var(--color-focus);
42
+ outline-offset: var(--size-focus-ring-inset-offset);
43
+ }
44
+
45
+ /* The accent boundary, as a selected card takes it, and the soft accent fill. */
46
+ .crewlet-dataset-source--selected .crewlet-dataset-source__summary {
47
+ border-color: var(--color-brand-accent);
48
+ background: var(--color-brand-accent-soft);
49
+ }
50
+
51
+ .crewlet-dataset-source__head {
52
+ display: flex;
53
+ align-items: center;
54
+ gap: var(--spacing-2);
55
+ min-width: 0;
56
+ }
57
+
58
+ .crewlet-dataset-source__title {
59
+ flex: 1;
60
+ min-width: 0;
61
+ overflow: hidden;
62
+ color: var(--color-text-primary);
63
+ font-size: var(--font-size-sm);
64
+ font-weight: var(--font-weight-semibold);
65
+ line-height: var(--font-line-height-snug);
66
+ text-overflow: ellipsis;
67
+ white-space: nowrap;
68
+ }
69
+
70
+ .crewlet-dataset-source__kind {
71
+ flex: none;
72
+ }
73
+
74
+ .crewlet-dataset-source__definition {
75
+ min-width: 0;
76
+ overflow-wrap: anywhere;
77
+ color: var(--color-text-secondary);
78
+ font-size: var(--font-size-xs);
79
+ line-height: var(--font-line-height-normal);
80
+ }
81
+
82
+ .crewlet-dataset-source__meta {
83
+ display: flex;
84
+ flex-wrap: wrap;
85
+ align-items: center;
86
+ gap: 0 var(--spacing-2);
87
+ color: var(--color-text-tertiary);
88
+ font-size: var(--font-size-xs);
89
+ line-height: var(--font-line-height-snug);
90
+ }
91
+
92
+ .crewlet-dataset-source__state--blocked {
93
+ color: var(--color-text-secondary);
94
+ }
95
+
96
+ /* The separators are drawn, not typed, so a screen reader hears the facts alone. */
97
+ .crewlet-dataset-source__rows::before,
98
+ .crewlet-dataset-source__refresh::before {
99
+ content: '\00b7' / '';
100
+ margin-inline-end: var(--spacing-2);
101
+ }
102
+
103
+ .crewlet-dataset-source__meta > :first-child::before {
104
+ content: none;
105
+ }
106
+
107
+ .crewlet-dataset-source__stale {
108
+ display: inline-flex;
109
+ vertical-align: middle;
110
+ color: var(--color-feedback-warning-ink);
111
+ }
112
+
113
+ .crewlet-dataset-source__preview {
114
+ min-width: 0;
115
+ padding: var(--spacing-2) var(--spacing-3) var(--spacing-3);
116
+ }
117
+
118
+ .crewlet-dataset-source-list {
119
+ display: flex;
120
+ flex-direction: column;
121
+ gap: var(--spacing-1);
122
+ margin: 0;
123
+ padding: 0;
124
+ list-style: none;
125
+ }
126
+
127
+ .crewlet-dataset-source-list__item {
128
+ min-width: 0;
129
+ }
@@ -0,0 +1,60 @@
1
+ import { type ReorderLabels } from '../Reorder/index.js';
2
+ /** One tab as the editor lists it. */
3
+ export interface DocTabsEditorItem {
4
+ /** Stable identity: the tab's file. */
5
+ key: string;
6
+ title: string;
7
+ }
8
+ export interface DocTabsEditorLabels extends ReorderLabels {
9
+ /** The name of a tab's title field, by its position (from 1). */
10
+ titleField: (position: number) => string;
11
+ /** The name of the control that opens a tab's text; it is pressed while that text is open. */
12
+ editText: (title: string) => string;
13
+ remove: (title: string) => string;
14
+ /** Why the last tab cannot be removed. */
15
+ lastTab: string;
16
+ moveUp: (title: string) => string;
17
+ moveDown: (title: string) => string;
18
+ atTop: (title: string) => string;
19
+ atBottom: (title: string) => string;
20
+ newTitle: string;
21
+ add: string;
22
+ /** Why Add waits for a title. */
23
+ addNeedsTitle: string;
24
+ untitled: string;
25
+ }
26
+ export declare const DOC_TABS_EDITOR_LABELS: DocTabsEditorLabels;
27
+ export interface DocTabsEditorProps {
28
+ /** What the list is, for its accessible name: "Tabs of On-call handbook". */
29
+ label: string;
30
+ items: readonly DocTabsEditorItem[];
31
+ /** The tab whose text is open. */
32
+ selected: string;
33
+ onSelect: (key: string) => void;
34
+ onRename: (key: string, title: string) => void;
35
+ onReorder: (keys: string[]) => void;
36
+ onRemove: (key: string) => void;
37
+ /** Adds a tab after the selected one. */
38
+ onAdd: (title: string) => void;
39
+ /** Why a title cannot be saved, said at its field; null for a title that can. */
40
+ titleProblem?: ((title: string) => string | null) | undefined;
41
+ /** Why no tab can be added now (a doc at its most tabs), shown on Add. */
42
+ addBlocked?: string | undefined;
43
+ disabled?: boolean | undefined;
44
+ labels?: Partial<DocTabsEditorLabels> | undefined;
45
+ className?: string | undefined;
46
+ }
47
+ /**
48
+ * The tabs of a document an editor arranges: each tab's title edited in place,
49
+ * its text opened beside the list, moved by its handle, the arrow keys or the
50
+ * move buttons, and removed; and a tab added after the one open.
51
+ *
52
+ * THE HOST OWNS THE TABS. Every change is reported and nothing is kept here
53
+ * but the new tab's title as it is typed, so a draft the host merges or
54
+ * resets is what the list shows. A title is held to the host's rules at its
55
+ * field (`titleProblem`), said beside it rather than after a save.
56
+ *
57
+ * THE LAST TAB IS NOT REMOVED: a document keeps one, so its Remove says why
58
+ * rather than disappearing.
59
+ */
60
+ export declare function DocTabsEditor({ label, items, selected, onSelect, onRename, onReorder, onRemove, onAdd, titleProblem, addBlocked, disabled, labels: overrides, className, }: DocTabsEditorProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './DocTabsEditor.css';
2
+ export { DocTabsEditor, DOC_TABS_EDITOR_LABELS } from './DocTabsEditor.js';
3
+ export type { DocTabsEditorItem, DocTabsEditorLabels, DocTabsEditorProps } from './DocTabsEditor.js';
@@ -0,0 +1,9 @@
1
+ export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-UZ7ZUSLH.js';
2
+ import '../chunk-XJ2QEBMM.js';
3
+ import '../chunk-6QFAK2WV.js';
4
+ import '../chunk-PQADV6P6.js';
5
+ import '../chunk-OG6CL3EB.js';
6
+ import '../chunk-RSAQOKH3.js';
7
+ import '../chunk-4FQT6ZAY.js';
8
+ import '../chunk-BZFWDIV6.js';
9
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,78 @@
1
+ /*
2
+ * DocTabsEditor: a document's tabs as rows an editor titles, opens, moves and
3
+ * removes, with the row whose text is open marked, and a field to add one.
4
+ * The rows are quiet inset bands, as ArrangeList's are.
5
+ */
6
+
7
+ .crewlet-doc-tabs-editor {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: var(--spacing-2);
11
+ min-width: 0;
12
+ }
13
+
14
+ .crewlet-doc-tabs-editor__list {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--spacing-1);
18
+ margin: 0;
19
+ padding: 0;
20
+ list-style: none;
21
+ }
22
+
23
+ .crewlet-doc-tabs-editor__item {
24
+ display: flex;
25
+ align-items: flex-start;
26
+ gap: var(--spacing-1);
27
+ padding: var(--spacing-1);
28
+ border: 1px solid transparent;
29
+ border-radius: var(--radius-md);
30
+ background: var(--color-surface-subtle);
31
+ }
32
+
33
+ .crewlet-doc-tabs-editor__item.is-open {
34
+ border-color: var(--color-border-strong);
35
+ }
36
+
37
+ .crewlet-doc-tabs-editor__item[data-reorder='dragging'] {
38
+ border-style: dashed;
39
+ border-color: var(--color-border-strong);
40
+ background: transparent;
41
+ }
42
+ .crewlet-doc-tabs-editor__item[data-reorder='dragging'] > * {
43
+ opacity: 0.4;
44
+ }
45
+
46
+ .crewlet-doc-tabs-editor__handle {
47
+ flex-shrink: 0;
48
+ cursor: grab;
49
+ color: var(--color-text-tertiary);
50
+ }
51
+ .crewlet-doc-tabs-editor__handle:active {
52
+ cursor: grabbing;
53
+ }
54
+
55
+ .crewlet-doc-tabs-editor__field {
56
+ display: flex;
57
+ flex: 1 1 12rem;
58
+ flex-direction: column;
59
+ gap: var(--spacing-1);
60
+ min-width: 0;
61
+ }
62
+
63
+ .crewlet-doc-tabs-editor__problem {
64
+ color: var(--color-feedback-danger-ink);
65
+ font-size: var(--font-size-xs);
66
+ }
67
+
68
+ .crewlet-doc-tabs-editor__moves {
69
+ display: inline-flex;
70
+ flex-shrink: 0;
71
+ }
72
+
73
+ .crewlet-doc-tabs-editor__add {
74
+ display: flex;
75
+ flex-wrap: wrap;
76
+ align-items: center;
77
+ gap: var(--spacing-2);
78
+ }
@@ -1,5 +1,5 @@
1
- export { DownloadButton } from '../chunk-BJCFNRGH.js';
2
- import '../chunk-F6NZOVWL.js';
1
+ export { DownloadButton } from '../chunk-BEHFTRMZ.js';
2
+ import '../chunk-IW55G7XG.js';
3
3
  import '../chunk-DTIW4CHZ.js';
4
4
  import '../chunk-OG6CL3EB.js';
5
5
  import '../chunk-BZFWDIV6.js';
@@ -1,9 +1,9 @@
1
1
  import '../chunk-FFMCMSJB.js';
2
- export { HuePicker } from '../chunk-OQT7GSKJ.js';
3
- import '../chunk-7QL2OFP6.js';
4
- import '../chunk-XJFOOXCF.js';
2
+ export { HuePicker } from '../chunk-SGIQCI6Y.js';
3
+ import '../chunk-RCQXUT5K.js';
4
+ import '../chunk-HJEVSQN6.js';
5
5
  import '../chunk-AYKXMIOR.js';
6
- import '../chunk-CBOICT64.js';
6
+ import '../chunk-RKKO7QHH.js';
7
7
  import '../chunk-BHHIIK3M.js';
8
8
  import '../chunk-BZFWDIV6.js';
9
9
  import '../chunk-ODEQTPFM.js';
@@ -1,6 +1,6 @@
1
- export { LinkInterstitial, openExternal } from '../chunk-ZM7HLFOA.js';
2
- import '../chunk-5CLW2CXT.js';
1
+ export { LinkInterstitial, openExternal } from '../chunk-L2OQRPXJ.js';
3
2
  import '../chunk-F4DPAJCN.js';
3
+ import '../chunk-5CLW2CXT.js';
4
4
  import '../chunk-SVSCLHHI.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-OG6CL3EB.js';
@@ -1,9 +1,9 @@
1
- export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-CS65QSIJ.js';
2
- import '../chunk-M54K52ZU.js';
1
+ export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-LZHLSQYK.js';
2
+ import '../chunk-FQCLKD7U.js';
3
3
  import '../chunk-PGRPNDWM.js';
4
- import '../chunk-7QL2OFP6.js';
5
- import '../chunk-XJFOOXCF.js';
6
- import '../chunk-CBOICT64.js';
4
+ import '../chunk-RCQXUT5K.js';
5
+ import '../chunk-HJEVSQN6.js';
6
+ import '../chunk-RKKO7QHH.js';
7
7
  import '../chunk-BHHIIK3M.js';
8
8
  import '../chunk-HMPFGIWM.js';
9
9
  import '../chunk-R25RGPUB.js';
@@ -0,0 +1,51 @@
1
+ /** Which side of one clash a person keeps. */
2
+ export type MergeChoice = 'theirs' | 'mine' | 'both';
3
+ /** One passage both edits changed: their lines and the draft's. */
4
+ export interface MergeClash {
5
+ theirs: readonly string[];
6
+ mine: readonly string[];
7
+ }
8
+ export interface MergeConflictsLabels {
9
+ /** The heading, by how many places clash, naming the other side ("revision 4"). */
10
+ heading: (count: number, theirs: string) => string;
11
+ intro: string;
12
+ /** A side's caption over its lines. */
13
+ theirsCaption: (theirs: string) => string;
14
+ mineCaption: string;
15
+ /** What a side shows when it removed the passage. */
16
+ removed: string;
17
+ /** The choice control's name, for place n (from 1). */
18
+ choiceLabel: (place: number) => string;
19
+ choices: Record<MergeChoice, string>;
20
+ apply: string;
21
+ applyBlocked: string;
22
+ cancel: string;
23
+ /** How many places still have no answer. */
24
+ remaining: (count: number) => string;
25
+ }
26
+ export declare const MERGE_CONFLICTS_LABELS: MergeConflictsLabels;
27
+ export interface MergeConflictsProps {
28
+ /** Every passage both edits changed, in document order. */
29
+ clashes: readonly MergeClash[];
30
+ /** What the other side is called: "revision 4", "version 7". */
31
+ theirs: string;
32
+ /** Called with one choice per clash, in order, once every clash has one. */
33
+ onApply: (choices: MergeChoice[]) => void;
34
+ onCancel: () => void;
35
+ className?: string | undefined;
36
+ labels?: Partial<MergeConflictsLabels> | undefined;
37
+ }
38
+ /**
39
+ * Settling the passages two edits of one text both changed: each clash shows
40
+ * the other side's lines beside the draft's, and the person keeps theirs,
41
+ * their own or both.
42
+ *
43
+ * NOTHING IS PRE-CHOSEN. A default would be the interface deciding whose
44
+ * sentence survives, so Apply waits for every clash to have an answer. The
45
+ * merge itself (which passages clash, and the text a set of choices makes) is
46
+ * the host's: this draws the decision and reports it.
47
+ *
48
+ * FOCUS MOVES TO THE HEADING when it opens, since it replaces the editor the
49
+ * person was typing in and they need to hear why.
50
+ */
51
+ export declare function MergeConflicts({ clashes, theirs, onApply, onCancel, className, labels: overrides }: MergeConflictsProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './MergeConflicts.css';
2
+ export { MergeConflicts, MERGE_CONFLICTS_LABELS } from './MergeConflicts.js';
3
+ export type { MergeChoice, MergeClash, MergeConflictsLabels, MergeConflictsProps } from './MergeConflicts.js';
@@ -0,0 +1,9 @@
1
+ export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-RWA4H2TV.js';
2
+ import '../chunk-FQCLKD7U.js';
3
+ import '../chunk-RCQXUT5K.js';
4
+ import '../chunk-HJEVSQN6.js';
5
+ import '../chunk-RKKO7QHH.js';
6
+ import '../chunk-BHHIIK3M.js';
7
+ import '../chunk-OG6CL3EB.js';
8
+ import '../chunk-BZFWDIV6.js';
9
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,77 @@
1
+ /* MergeConflicts: each clash as the other side's lines beside the draft's,
2
+ with the choice under them, in one framed block that replaces the editor
3
+ until it is settled. */
4
+ .crewlet-merge-conflicts {
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: var(--spacing-3);
8
+ padding: var(--spacing-4);
9
+ border: 1px solid var(--color-border-strong);
10
+ border-radius: var(--radius-lg);
11
+ }
12
+
13
+ .crewlet-merge-conflicts__title {
14
+ margin: 0;
15
+ font-size: var(--font-size-md);
16
+ font-weight: var(--font-weight-semibold);
17
+ color: var(--color-text-primary);
18
+ }
19
+
20
+ .crewlet-merge-conflicts__note {
21
+ margin: 0;
22
+ font-size: var(--font-size-xs);
23
+ color: var(--color-text-tertiary);
24
+ }
25
+
26
+ .crewlet-merge-conflicts__list {
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: var(--spacing-4);
30
+ margin: 0;
31
+ padding: 0;
32
+ list-style: none;
33
+ }
34
+
35
+ .crewlet-merge-conflicts__item {
36
+ display: flex;
37
+ flex-direction: column;
38
+ gap: var(--spacing-2);
39
+ }
40
+
41
+ .crewlet-merge-conflicts__sides {
42
+ display: grid;
43
+ grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
44
+ gap: var(--spacing-3);
45
+ }
46
+
47
+ .crewlet-merge-conflicts__side {
48
+ display: flex;
49
+ flex-direction: column;
50
+ gap: var(--spacing-1);
51
+ min-width: 0;
52
+ margin: 0;
53
+ }
54
+
55
+ .crewlet-merge-conflicts__side figcaption {
56
+ font-size: var(--font-size-xs);
57
+ color: var(--color-text-tertiary);
58
+ }
59
+
60
+ .crewlet-merge-conflicts__side pre {
61
+ margin: 0;
62
+ padding: var(--spacing-2);
63
+ overflow-x: auto;
64
+ border: 1px solid var(--color-border-default);
65
+ border-radius: var(--radius-md);
66
+ background: var(--color-surface-inset);
67
+ font-family: var(--font-family-mono);
68
+ font-size: var(--font-size-xs);
69
+ white-space: pre-wrap;
70
+ }
71
+
72
+ .crewlet-merge-conflicts__foot {
73
+ display: flex;
74
+ flex-wrap: wrap;
75
+ align-items: center;
76
+ gap: var(--spacing-2);
77
+ }
@@ -1,3 +1,3 @@
1
- export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from '../chunk-4PZ6FJKW.js';
1
+ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from '../chunk-UGNUUVRI.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -22,6 +22,7 @@
22
22
  */
23
23
  .crewlet-meter__legend {
24
24
  display: flex;
25
+ flex-wrap: wrap;
25
26
  align-items: baseline;
26
27
  justify-content: space-between;
27
28
  gap: var(--spacing-2);
@@ -30,7 +31,11 @@
30
31
  min-width: 0;
31
32
  }
32
33
 
34
+ /* THE LABEL KEEPS ITS WORDS: where the row is too narrow for both, the figure
35
+ moves to its own line rather than cutting the name to one letter. */
33
36
  .crewlet-meter__label {
37
+ flex: 1 0 auto;
38
+ max-width: 100%;
34
39
  overflow: hidden;
35
40
  text-overflow: ellipsis;
36
41
  white-space: nowrap;
@@ -63,6 +68,10 @@
63
68
  height: 6px;
64
69
  border-radius: var(--radius-pill);
65
70
  background: var(--color-surface-elevated);
71
+ /* An inset hairline gives the track an edge on ANY ground, so on the page
72
+ sheet in the light theme, where the raised rung is nearly the ground's
73
+ own tone, the extent of the bar is still there. */
74
+ box-shadow: inset 0 0 0 1px var(--color-border-default);
66
75
  overflow: hidden;
67
76
  }
68
77
 
@@ -80,6 +89,12 @@
80
89
  transition: width var(--motion-duration-slow) var(--motion-easing-emphasized);
81
90
  }
82
91
 
92
+ /* A READING ABOVE ZERO IS NEVER AN EMPTY TRACK: a few bytes of a gigabyte
93
+ rounds to no width at all, which reads as nothing used. */
94
+ .crewlet-meter__fill--some {
95
+ min-width: var(--spacing-1);
96
+ }
97
+
83
98
  .crewlet-meter__fill[data-tone='success'] { background: var(--color-feedback-success); }
84
99
  .crewlet-meter__fill[data-tone='warning'] { background: var(--color-feedback-warning); }
85
100
  .crewlet-meter__fill[data-tone='danger'] { background: var(--color-feedback-danger); }
@@ -114,6 +114,12 @@ export interface ObjectHeaderProps {
114
114
  * a second reading. The header draws exactly what it is handed.
115
115
  */
116
116
  facts?: readonly ObjectFact[] | undefined;
117
+ /**
118
+ * What the object says about itself, in a sentence its author wrote: drawn
119
+ * under the title at the compact step in the secondary ink, at most two
120
+ * lines.
121
+ */
122
+ description?: ReactNode;
117
123
  /** What the reader can do with the object. */
118
124
  actions?: ReactNode;
119
125
  /** A page's header, or the tighter one a peek or a hover card draws. */
@@ -135,4 +141,4 @@ export interface ObjectHeaderProps {
135
141
  * the actions wrap onto a line of their own instead of each giving up a few
136
142
  * characters.
137
143
  */
138
- export declare function ObjectHeader({ kind, icon, identifier, within, title, status, facts, actions, size, className, }: ObjectHeaderProps): import("react").JSX.Element;
144
+ export declare function ObjectHeader({ kind, icon, identifier, within, title, status, facts, description, actions, size, className, }: ObjectHeaderProps): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- export { FactLine, ObjectHeader, SetByLine } from '../chunk-I7WXZOWA.js';
1
+ export { FactLine, ObjectHeader, SetByLine } from '../chunk-VGE3G3T4.js';
2
2
  import '../chunk-FBSEJO2C.js';
3
3
  import '../chunk-BZFWDIV6.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -70,6 +70,21 @@
70
70
  color: var(--color-text-primary);
71
71
  }
72
72
 
73
+ /* The author's own sentence about the object: under the title, quieter than
74
+ it, and never more than two lines however long the sentence is. */
75
+ .crewlet-object-header__description {
76
+ display: -webkit-box;
77
+ -webkit-box-orient: vertical;
78
+ -webkit-line-clamp: 2;
79
+ line-clamp: 2;
80
+ overflow: hidden;
81
+ max-width: var(--size-measure);
82
+ margin: 0;
83
+ font-size: var(--font-size-compact);
84
+ line-height: var(--font-line-height-normal);
85
+ color: var(--color-text-secondary);
86
+ }
87
+
73
88
  .crewlet-object-header--peek .crewlet-object-header__title {
74
89
  font-size: var(--font-size-lg);
75
90
  }
@@ -1,6 +1,6 @@
1
- export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-J4OKGJQ6.js';
1
+ export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-FVLCTCMV.js';
2
2
  import '../chunk-CENOOTAV.js';
3
- import '../chunk-S35G6PNC.js';
3
+ import '../chunk-Z7JYG5TF.js';
4
4
  import '../chunk-UAN5NE7M.js';
5
5
  import '../chunk-AYKXMIOR.js';
6
6
  import '../chunk-5OM447RW.js';
@@ -1,2 +1,2 @@
1
- export { PRESENCE_ACTIVITIES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder, } from './presence.js';
1
+ export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder, } from './presence.js';
2
2
  export type { PresenceActivity, PresenceKind, PresenceLabels, PresenceMember } from './presence.js';
@@ -1,3 +1,3 @@
1
1
  import '../chunk-CENOOTAV.js';
2
- export { PRESENCE_ACTIVITIES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from '../chunk-S35G6PNC.js';
2
+ export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from '../chunk-Z7JYG5TF.js';
3
3
  import '../chunk-AYKXMIOR.js';
@@ -48,13 +48,21 @@ export declare function presenceOrder<M extends Pick<PresenceMember, 'kind' | 'a
48
48
  * The first tab's position in the list is kept, so collapsing never reorders.
49
49
  */
50
50
  export declare function collapseSessions<M extends Pick<PresenceMember, 'id' | 'seat' | 'activity'>>(members: readonly M[]): M[];
51
+ /**
52
+ * The hues presence ASSIGNS, in rotation: the six node hues without purple,
53
+ * the one nearest the accent. The accent is the reader's own active cell and
54
+ * the focus ring, so a collaborator ringed in violet read as the reader's own
55
+ * selection. An agent whose chosen hue is purple keeps it: that hue is its
56
+ * identity, picked by a person, not handed out here.
57
+ */
58
+ export declare const PRESENCE_HUES: readonly NodeHue[];
51
59
  /**
52
60
  * The hue each member's marks are drawn in.
53
61
  *
54
62
  * An agent with a chosen hue keeps it. Every other member keeps the hue it was
55
63
  * given before (`held`, the previous answer) while it stays present, and a
56
- * newcomer, in the order given, takes the first of the six hues nobody present
57
- * wears; past six, the hue the fewest members wear, so hues repeat as evenly
64
+ * newcomer, in the order given, takes the first of the PRESENCE_HUES nobody
65
+ * present wears; past five, the hue the fewest members wear, so hues repeat as evenly
58
66
  * as they can and the name on the flag tells the two apart.
59
67
  */
60
68
  export declare function assignPresenceHues(members: readonly Pick<PresenceMember, 'id' | 'kind' | 'hue'>[], held?: ReadonlyMap<string, NodeHue>): Map<string, NodeHue>;
@@ -1,7 +1,7 @@
1
- export { PresenceStack } from '../chunk-YM3GJHGW.js';
1
+ export { PresenceStack } from '../chunk-ODT5H4MN.js';
2
2
  import '../chunk-CENOOTAV.js';
3
3
  import '../chunk-I6POAB4V.js';
4
- import '../chunk-S35G6PNC.js';
4
+ import '../chunk-Z7JYG5TF.js';
5
5
  import '../chunk-UAN5NE7M.js';
6
6
  import '../chunk-AYKXMIOR.js';
7
7
  import '../chunk-5OM447RW.js';