@crewlethq/ui 0.18.0 → 0.20.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 (155) hide show
  1. package/README.md +40 -4
  2. package/dist/AccessDeniedCard/index.js +2 -2
  3. package/dist/AppShell/index.js +2 -2
  4. package/dist/ArrangeBoard/ArrangeBoard.d.ts +32 -0
  5. package/dist/ArrangeBoard/index.d.ts +3 -0
  6. package/dist/ArrangeBoard/index.js +2 -0
  7. package/dist/ArrangeBoard-MQE35P6Z.css +80 -0
  8. package/dist/ArrangeFrame/ArrangeFrame.d.ts +82 -0
  9. package/dist/ArrangeFrame/index.d.ts +5 -0
  10. package/dist/ArrangeFrame/index.js +5 -0
  11. package/dist/ArrangeFrame/useGridResize.d.ts +66 -0
  12. package/dist/ArrangeFrame-3PLZAG22.css +329 -0
  13. package/dist/ArrangeGroup/ArrangeGroup.d.ts +42 -0
  14. package/dist/ArrangeGroup/index.d.ts +3 -0
  15. package/dist/ArrangeGroup/index.js +4 -0
  16. package/dist/ArrangeGroup-SHFHA7BE.css +170 -0
  17. package/dist/ArrangeList/ArrangeList.d.ts +64 -0
  18. package/dist/ArrangeList/index.d.ts +3 -0
  19. package/dist/ArrangeList/index.js +10 -0
  20. package/dist/ArrangeList-NNRTDFI5.css +94 -0
  21. package/dist/ArtifactCard/index.js +2 -2
  22. package/dist/AuthLayout/index.js +2 -2
  23. package/dist/AvatarPicker/index.js +4 -4
  24. package/dist/Canvas/index.js +2 -2
  25. package/dist/Card/index.js +1 -1
  26. package/dist/Checkbox/index.js +3 -3
  27. package/dist/Combobox/index.js +4 -4
  28. package/dist/CommandPalette/index.js +6 -6
  29. package/dist/CommentThread/CommentThread.d.ts +85 -0
  30. package/dist/CommentThread/index.d.ts +3 -0
  31. package/dist/CommentThread/index.js +16 -0
  32. package/dist/CommentThread-7VXOFTZO.css +90 -0
  33. package/dist/Composer/index.js +3 -3
  34. package/dist/ConfirmField/index.js +3 -3
  35. package/dist/ConflictNote/ConflictNote.d.ts +42 -0
  36. package/dist/ConflictNote/index.d.ts +3 -0
  37. package/dist/ConflictNote/index.js +4 -0
  38. package/dist/ConflictNote-DH77PYF7.css +27 -0
  39. package/dist/DataTable/index.js +8 -8
  40. package/dist/DataView/index.js +13 -13
  41. package/dist/DateTimePicker/index.js +3 -3
  42. package/dist/DiffView/DiffView.d.ts +59 -0
  43. package/dist/DiffView/diff.d.ts +97 -0
  44. package/dist/DiffView/index.d.ts +5 -0
  45. package/dist/DiffView/index.js +3 -0
  46. package/dist/DiffView-RVLIHTKG.css +91 -0
  47. package/dist/Divider/Divider.d.ts +15 -0
  48. package/dist/Divider/index.d.ts +3 -0
  49. package/dist/Divider/index.js +2 -0
  50. package/dist/Divider-3Z77ZAJH.css +37 -0
  51. package/dist/HuePicker/HuePicker.d.ts +16 -4
  52. package/dist/HuePicker/index.js +2 -2
  53. package/dist/{HuePicker-5QIUR6L7.css → HuePicker-PAIGH6LR.css} +6 -0
  54. package/dist/IconTile/IconTile.d.ts +23 -0
  55. package/dist/IconTile/index.d.ts +3 -0
  56. package/dist/IconTile/index.js +2 -0
  57. package/dist/IconTile-4GNWTLAW.css +30 -0
  58. package/dist/Input/index.js +2 -2
  59. package/dist/LinkInterstitial/index.js +4 -4
  60. package/dist/ListInput/index.js +5 -5
  61. package/dist/MarkdownEditor/index.js +2 -2
  62. package/dist/Menu/index.js +2 -2
  63. package/dist/Modal/Modal.d.ts +20 -0
  64. package/dist/Modal/index.js +3 -3
  65. package/dist/{Modal-RQAYGG4L.css → Modal-XOSV6FAH.css} +14 -0
  66. package/dist/Note/Note.d.ts +23 -0
  67. package/dist/Note/index.d.ts +3 -0
  68. package/dist/Note/index.js +2 -0
  69. package/dist/Note-RT4L6VUT.css +58 -0
  70. package/dist/OrgTable/index.js +5 -5
  71. package/dist/PeopleRail/PeopleRail.d.ts +52 -0
  72. package/dist/PeopleRail/index.d.ts +3 -0
  73. package/dist/PeopleRail/index.js +11 -0
  74. package/dist/PeopleRail-R64WVOSH.css +75 -0
  75. package/dist/PinTile/PinTile.d.ts +37 -0
  76. package/dist/PinTile/index.d.ts +3 -0
  77. package/dist/PinTile/index.js +4 -0
  78. package/dist/PinTile-IIA25MNZ.css +141 -0
  79. package/dist/PresenceStack/index.js +1 -1
  80. package/dist/PrincipalPicker/index.js +5 -5
  81. package/dist/Reorder/index.d.ts +2 -0
  82. package/dist/Reorder/index.js +4 -0
  83. package/dist/Reorder/useReorder.d.ts +138 -0
  84. package/dist/ShareDialog/index.js +7 -7
  85. package/dist/SheetGrid/index.js +5 -5
  86. package/dist/StatGroup/StatGroup.d.ts +7 -1
  87. package/dist/StatGroup/index.js +1 -1
  88. package/dist/{StatGroup-HVG6O62W.css → StatGroup-PADTJCUQ.css} +7 -0
  89. package/dist/Switcher/index.js +8 -8
  90. package/dist/TableCells/TableCells.d.ts +153 -0
  91. package/dist/TableCells/index.d.ts +3 -0
  92. package/dist/TableCells/index.js +10 -0
  93. package/dist/TableCells-3VN5N2M3.css +104 -0
  94. package/dist/TagsInput/index.js +3 -3
  95. package/dist/TimeWindowPicker/index.js +5 -5
  96. package/dist/TreeCanvas/index.js +3 -3
  97. package/dist/TreeGrid/index.js +2 -2
  98. package/dist/VersionCompare/VersionCompare.d.ts +70 -0
  99. package/dist/VersionCompare/index.d.ts +3 -0
  100. package/dist/VersionCompare/index.js +11 -0
  101. package/dist/VersionCompare-UUZOPTQO.css +68 -0
  102. package/dist/chunk-35XVR5JQ.js +81 -0
  103. package/dist/chunk-63WJLRB2.js +24 -0
  104. package/dist/{chunk-L4ZLXYPO.js → chunk-6A7P6II6.js} +1 -1
  105. package/dist/chunk-6KWNXIDE.js +18 -0
  106. package/dist/chunk-6MIXD6IW.js +49 -0
  107. package/dist/chunk-73QBUUYX.js +102 -0
  108. package/dist/{chunk-NZY77ZDU.js → chunk-7FQEUNHX.js} +4 -4
  109. package/dist/{chunk-2TZATTIU.js → chunk-7IJARUIF.js} +18 -5
  110. package/dist/{chunk-A7EBCHEG.js → chunk-A4VMJMXJ.js} +1 -1
  111. package/dist/chunk-AIVZVKYZ.js +126 -0
  112. package/dist/{chunk-76FXDZAZ.js → chunk-AJESMWJS.js} +4 -4
  113. package/dist/chunk-BVWSLXTY.js +187 -0
  114. package/dist/chunk-DEJHAOC5.js +279 -0
  115. package/dist/{chunk-ERV5BUS3.js → chunk-EIGEIT4O.js} +3 -3
  116. package/dist/chunk-EZBLOUWX.js +176 -0
  117. package/dist/chunk-FFMCMSJB.js +1 -0
  118. package/dist/{chunk-LFZ45HV2.js → chunk-G3EEUNZQ.js} +1 -1
  119. package/dist/{chunk-2YR5ZPQ3.js → chunk-HTCJSUIZ.js} +3 -3
  120. package/dist/{chunk-75CLJNDQ.js → chunk-I6NZKJGK.js} +1 -1
  121. package/dist/chunk-IXJHTFXG.js +17 -0
  122. package/dist/{chunk-3UAA4IWJ.js → chunk-JEDWC3GI.js} +1 -1
  123. package/dist/{chunk-QVAFL2LE.js → chunk-JXRI5YD2.js} +3 -3
  124. package/dist/{chunk-ZFH7H7GS.js → chunk-LOLELDBW.js} +1 -1
  125. package/dist/chunk-MUGM7SEG.js +88 -0
  126. package/dist/chunk-N4GFRW5C.js +96 -0
  127. package/dist/{chunk-KVT3TJVG.js → chunk-OIMAK5AE.js} +6 -6
  128. package/dist/chunk-QO7QEQKV.js +24 -0
  129. package/dist/{chunk-BOW2VUCH.js → chunk-T7ICFXEC.js} +1 -1
  130. package/dist/{chunk-2OLCUNG7.js → chunk-TBIZSQHB.js} +1 -1
  131. package/dist/{chunk-4U3GQ7D2.js → chunk-TODND5AD.js} +1 -1
  132. package/dist/chunk-UO7JZVCO.js +35 -0
  133. package/dist/{chunk-IFKBDRNJ.js → chunk-UXELEORU.js} +3 -3
  134. package/dist/{chunk-6NIMZ5XC.js → chunk-VJLYGPPE.js} +1 -1
  135. package/dist/{chunk-7QFAORCY.js → chunk-WHZFDS62.js} +1 -1
  136. package/dist/chunk-XJ2QEBMM.js +277 -0
  137. package/dist/{chunk-PA4CYTBY.js → chunk-XU4ZUGLE.js} +19 -4
  138. package/dist/{chunk-T3ZWBZ65.js → chunk-YSJYWQSP.js} +2 -2
  139. package/dist/{chunk-CXBAIVYZ.js → chunk-YSY6UJ4F.js} +1 -1
  140. package/dist/{chunk-EG6NYWVK.js → chunk-YZCJ63JF.js} +1 -1
  141. package/dist/generated/index.d.ts +15 -0
  142. package/dist/generated/index.js +89 -74
  143. package/dist/index.js +89 -74
  144. package/dist/styles.css +1533 -70
  145. package/package.json +3 -3
  146. package/dist/chunk-EXHQ2QVW.js +0 -1
  147. package/dist/{chunk-AQCV62K6.js → chunk-7ZNKEPLN.js} +1 -1
  148. package/dist/{chunk-OYOQU7O5.js → chunk-EDGCPVVD.js} +1 -1
  149. package/dist/{chunk-FYXRWBJJ.js → chunk-J2G4HGQM.js} +1 -1
  150. package/dist/{chunk-NS7BVLL3.js → chunk-JULMZNGT.js} +1 -1
  151. package/dist/{chunk-5NVKTB6E.js → chunk-L4H7SSWF.js} +1 -1
  152. package/dist/{chunk-ESKP3TXM.js → chunk-MSSZHDZI.js} +0 -0
  153. package/dist/{chunk-4GB57WIT.js → chunk-Q55TXPA3.js} +1 -1
  154. package/dist/{chunk-B2Z2CDM5.js → chunk-T5TFZ2JB.js} +1 -1
  155. package/dist/{chunk-AMH67MLM.js → chunk-TXAFKH2A.js} +1 -1
@@ -0,0 +1,97 @@
1
+ /**
2
+ * What changed between two versions of a document, by line.
3
+ *
4
+ * OVER LINES, by the classic longest-common-subsequence table. The shape is
5
+ * the one a prose document wants: a paragraph somebody rewrote is a line
6
+ * replaced, not thirty character edits scattered through it. Word-level
7
+ * refinement inside a changed line is deliberately absent: it makes a small
8
+ * edit prettier and a large one unreadable, and documents are rewritten in
9
+ * paragraphs.
10
+ *
11
+ * THE TABLE RATHER THAN MYERS, and [MAX_DIFF_LINES] is what pays for that
12
+ * choice. The table is quadratic on every input, but it is a dozen lines
13
+ * anybody can check by reading; the cap keeps the quadratic term small, and a
14
+ * document past it is reported as a whole replacement rather than freezing the
15
+ * tab.
16
+ *
17
+ * FRAMEWORK FREE. Nothing here imports React, so a host can compute a diff in
18
+ * a worker or a test and hand the sections to [DiffView].
19
+ */
20
+ /** One line of the result. `same` lines carry both numbers. */
21
+ export interface DiffLine {
22
+ kind: 'same' | 'add' | 'remove';
23
+ text: string;
24
+ /** 1-based line number in the OLD document, or null on an addition. */
25
+ before: number | null;
26
+ /** 1-based line number in the NEW document, or null on a removal. */
27
+ after: number | null;
28
+ }
29
+ /** What a diff amounts to, for a one-line summary above it. */
30
+ export interface DiffStat {
31
+ added: number;
32
+ removed: number;
33
+ /** True when the two documents are identical, which is a real outcome. */
34
+ identical: boolean;
35
+ }
36
+ /**
37
+ * A run of lines kept for display, and how many unchanged lines were dropped
38
+ * before it. The gap is a count rather than a marker line, so the renderer
39
+ * decides what a gap looks like.
40
+ */
41
+ export interface DiffSection {
42
+ /** The lines of this section, in order. */
43
+ lines: DiffLine[];
44
+ /** How many unchanged lines were dropped BEFORE this section. */
45
+ skipped: number;
46
+ }
47
+ /**
48
+ * The size past which the table is not worth building.
49
+ *
50
+ * SIZED FROM THE TABLE'S MEMORY, because that is the quantity that binds and
51
+ * it is paid on every input: `(N+1)` rows of `(M+1)` `Uint32` entries, every
52
+ * cell filled. At two thousand lines that is about 16 MB and 60 ms, which a
53
+ * tab holds without noticing; at ten thousand it is hundreds of megabytes and
54
+ * seconds on the main thread. Raising it means replacing the table with Myers
55
+ * or Hirschberg first.
56
+ */
57
+ export declare const MAX_DIFF_LINES = 2000;
58
+ /**
59
+ * Split a document into the lines a diff compares.
60
+ *
61
+ * A trailing newline is not a line. Every file that ends properly has one, so
62
+ * counting it would report an added last line on every document that gained
63
+ * one. Both line endings read as one.
64
+ */
65
+ export declare function splitLines(text: string): string[];
66
+ /**
67
+ * The line diff of two documents: every line of the result in order, context
68
+ * included, because a document diff is read as a document rather than as a
69
+ * patch.
70
+ */
71
+ export declare function diffLines(before: string, after: string): DiffLine[];
72
+ /**
73
+ * Count the additions and removals, and say when there are none: identical is
74
+ * its own answer, not "0 added, 0 removed".
75
+ */
76
+ export declare function diffStat(diff: readonly DiffLine[]): DiffStat;
77
+ /**
78
+ * Drop the runs of unchanged lines a reader does not need, keeping `context`
79
+ * lines either side of every change.
80
+ *
81
+ * A HOLE IS REPORTED, never silently closed: each section carries how many
82
+ * lines were dropped before it, so a reader can tell a document with two edits
83
+ * at its ends from one rewritten in the middle.
84
+ */
85
+ export declare function collapseDiff(diff: readonly DiffLine[], context?: number): DiffSection[];
86
+ /**
87
+ * The first `max` changed lines of a collapsed diff, and how many changed
88
+ * lines are left out: what a preview of a save shows, with the count that says
89
+ * it is one. An unchanged context line is drawn and not counted.
90
+ *
91
+ * A COUNT, never a quiet cut: a preview ending at its sixth line reads as a
92
+ * save that changed six lines.
93
+ */
94
+ export declare function firstChangedLines(sections: readonly DiffSection[], max: number): {
95
+ sections: DiffSection[];
96
+ more: number;
97
+ };
@@ -0,0 +1,5 @@
1
+ import './DiffView.css';
2
+ export { DiffView, DiffSummary, DIFF_VIEW_LABELS, DIFF_SUMMARY_LABELS } from './DiffView.js';
3
+ export type { DiffViewLabels, DiffViewProps, DiffSummaryLabels, DiffSummaryProps } from './DiffView.js';
4
+ export { MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from './diff.js';
5
+ export type { DiffLine, DiffSection, DiffStat } from './diff.js';
@@ -0,0 +1,3 @@
1
+ export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from '../chunk-BVWSLXTY.js';
2
+ import '../chunk-BZFWDIV6.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,91 @@
1
+ /* DiffView: a line diff, monospace and line-numbered on both sides.
2
+
3
+ A changed line is marked three ways, a tint, a drawn mark and a word read
4
+ in its place, because colour alone is not a signal and a printed or
5
+ forced-colours render loses the tint entirely. The tint is the soft step of
6
+ the state and the mark the matching ink step, the pairing the palette suite
7
+ measures. */
8
+ .crewlet-diff-view {
9
+ overflow: hidden;
10
+ border: 1px solid var(--color-border-default);
11
+ border-radius: var(--radius-sm);
12
+ font-family: var(--font-family-mono);
13
+ font-size: var(--font-size-xs);
14
+ line-height: var(--font-line-height-normal);
15
+ }
16
+
17
+ .crewlet-diff-view__section + .crewlet-diff-view__section,
18
+ .crewlet-diff-view__skip + .crewlet-diff-view__line {
19
+ border-top: 1px solid var(--color-border-default);
20
+ }
21
+
22
+ /* A GAP SAYS WHAT IT STANDS FOR. Silently closed, a document edited at both
23
+ ends looks like one rewritten in the middle. */
24
+ .crewlet-diff-view__skip {
25
+ padding: var(--spacing-1) var(--spacing-3);
26
+ background: var(--color-surface-elevated);
27
+ color: var(--color-text-tertiary);
28
+ font-family: var(--font-family-sans);
29
+ font-size: var(--font-size-xs);
30
+ }
31
+
32
+ .crewlet-diff-view__line {
33
+ display: grid;
34
+ grid-template-columns: 3.5ch 3.5ch 2ch minmax(0, 1fr);
35
+ gap: var(--spacing-2);
36
+ padding: calc(var(--spacing-1) / 4) var(--spacing-3) calc(var(--spacing-1) / 4) var(--spacing-2);
37
+ }
38
+
39
+ .crewlet-diff-view__number {
40
+ color: var(--color-text-tertiary);
41
+ text-align: right;
42
+ user-select: none;
43
+ font-variant-numeric: tabular-nums;
44
+ }
45
+
46
+ .crewlet-diff-view__mark {
47
+ text-align: center;
48
+ user-select: none;
49
+ }
50
+
51
+ .crewlet-diff-view__text {
52
+ white-space: pre-wrap;
53
+ overflow-wrap: anywhere;
54
+ }
55
+
56
+ .crewlet-diff-view__line--add {
57
+ background: var(--color-feedback-success-soft);
58
+ }
59
+
60
+ .crewlet-diff-view__line--add .crewlet-diff-view__mark {
61
+ color: var(--color-feedback-success-ink);
62
+ }
63
+
64
+ .crewlet-diff-view__line--remove {
65
+ background: var(--color-feedback-danger-soft);
66
+ }
67
+
68
+ .crewlet-diff-view__line--remove .crewlet-diff-view__mark {
69
+ color: var(--color-feedback-danger-ink);
70
+ }
71
+
72
+ /* DiffSummary: the size of the change, in the same inks as its lines. */
73
+ .crewlet-diff-summary {
74
+ margin: 0;
75
+ color: var(--color-text-secondary);
76
+ font-size: var(--font-size-compact);
77
+ }
78
+
79
+ .crewlet-diff-summary__added,
80
+ .crewlet-diff-summary__removed {
81
+ font-family: var(--font-family-mono);
82
+ font-variant-numeric: tabular-nums;
83
+ }
84
+
85
+ .crewlet-diff-summary__added {
86
+ color: var(--color-feedback-success-ink);
87
+ }
88
+
89
+ .crewlet-diff-summary__removed {
90
+ color: var(--color-feedback-danger-ink);
91
+ }
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ export interface DividerProps extends HTMLAttributes<HTMLDivElement> {
3
+ /** Words on the rule, for a divider that names what follows: "History". */
4
+ label?: string | undefined;
5
+ /** Where the words sit: at the start, as a section's name, or centred. */
6
+ align?: 'start' | 'center' | undefined;
7
+ }
8
+ /**
9
+ * A rule between parts of a page, with or without a name.
10
+ *
11
+ * A SEPARATOR TO A SCREEN READER, and a named one says its name, so a reader
12
+ * moving through the page hears where one part ends and "History" begins
13
+ * rather than nothing at all.
14
+ */
15
+ export declare function Divider({ label, align, className, ...rest }: DividerProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './Divider.css';
2
+ export { Divider } from './Divider.js';
3
+ export type { DividerProps } from './Divider.js';
@@ -0,0 +1,2 @@
1
+ export { Divider } from '../chunk-6KWNXIDE.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,37 @@
1
+ /* Divider: a rule across its space, with its name at its start or in its middle. */
2
+
3
+ .crewlet-divider {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: var(--spacing-3);
7
+ min-height: var(--size-row-sm);
8
+ min-width: 0;
9
+ }
10
+ .crewlet-divider::before,
11
+ .crewlet-divider::after {
12
+ content: '';
13
+ flex: 1 1 auto;
14
+ border-top: 1px solid var(--color-border-strong);
15
+ }
16
+ /* One rule unless the words sit in the middle of it. */
17
+ .crewlet-divider:not(.crewlet-divider--center)::before {
18
+ display: none;
19
+ }
20
+ .crewlet-divider:not(.crewlet-divider--labelled)::before {
21
+ display: block;
22
+ }
23
+ .crewlet-divider:not(.crewlet-divider--labelled)::after {
24
+ display: none;
25
+ }
26
+
27
+ .crewlet-divider__label {
28
+ flex: 0 1 auto;
29
+ overflow: hidden;
30
+ font-size: var(--font-size-xs);
31
+ font-weight: var(--font-weight-medium);
32
+ letter-spacing: var(--font-letter-spacing-wide);
33
+ color: var(--color-text-tertiary);
34
+ text-transform: uppercase;
35
+ text-overflow: ellipsis;
36
+ white-space: nowrap;
37
+ }
@@ -1,15 +1,26 @@
1
1
  import { type SegmentedSize } from '../SegmentedControl/SegmentedControl.js';
2
2
  import { type NodeHue } from '../utils/nodeHue.js';
3
- export interface HuePickerProps {
3
+ interface HuePickerBase {
4
4
  /** The group's name, said on entering it: "Color". */
5
5
  label: string;
6
- value: NodeHue;
7
- onValueChange: (hue: NodeHue) => void;
8
6
  size?: SegmentedSize | undefined;
9
7
  /** Nothing can be chosen, and the row says so. */
10
8
  disabled?: boolean | undefined;
11
9
  className?: string | undefined;
12
10
  }
11
+ /**
12
+ * The six hues, or the six and NO HUE first, named by `none` ("Plain"): a
13
+ * surface that may carry a colour (a group's band, a note) but need not.
14
+ */
15
+ export type HuePickerProps = HuePickerBase & ({
16
+ none?: undefined;
17
+ value: NodeHue;
18
+ onValueChange: (hue: NodeHue) => void;
19
+ } | {
20
+ none: string;
21
+ value: NodeHue | 'none';
22
+ onValueChange: (hue: NodeHue | 'none') => void;
23
+ });
13
24
  /**
14
25
  * The choice of an entity's hue: the six node hues as a row of chips, each a
15
26
  * swatch and the hue's name.
@@ -23,4 +34,5 @@ export interface HuePickerProps {
23
34
  * row is still read and the chosen hue still shown, and nothing in it takes
24
35
  * focus or a press.
25
36
  */
26
- export declare function HuePicker({ label, value, onValueChange, size, disabled, className }: HuePickerProps): import("react").JSX.Element;
37
+ export declare function HuePicker(props: HuePickerProps): import("react").JSX.Element;
38
+ export {};
@@ -1,5 +1,5 @@
1
- import '../chunk-EXHQ2QVW.js';
2
- export { HuePicker } from '../chunk-PA4CYTBY.js';
1
+ import '../chunk-FFMCMSJB.js';
2
+ export { HuePicker } from '../chunk-XU4ZUGLE.js';
3
3
  import '../chunk-26PEPONN.js';
4
4
  import '../chunk-4LDTQWS7.js';
5
5
  import '../chunk-AYKXMIOR.js';
@@ -16,3 +16,9 @@
16
16
  .crewlet-hue-picker__swatch--amber { background: var(--color-node-amber); }
17
17
  .crewlet-hue-picker__swatch--rose { background: var(--color-node-rose); }
18
18
  .crewlet-hue-picker__swatch--blue { background: var(--color-node-blue); }
19
+
20
+ /* No hue: a ring in the hairline, so the row still reads as swatches. */
21
+ .crewlet-hue-picker__swatch--none {
22
+ box-sizing: border-box;
23
+ border: 1px solid var(--color-border-strong);
24
+ }
@@ -0,0 +1,23 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import type { NodeHue } from '../utils/nodeHue.js';
3
+ export interface IconTileProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
4
+ /** The glyph, at the size the tile is drawn at: `sm` in a `sm` or `md` tile, `md` in a `lg` one. */
5
+ children: ReactNode;
6
+ /** The hue it is tinted in. Left out, the brand accent's soft fill and ink. */
7
+ hue?: NodeHue | undefined;
8
+ /** One of the row heights: `sm` 28px, `md` 36px, `lg` 48px. */
9
+ size?: 'sm' | 'md' | 'lg' | undefined;
10
+ }
11
+ /**
12
+ * A glyph on a tinted square: what a choice in a library or a catalog is
13
+ * told apart by before its name is read. The widget tray draws one per widget
14
+ * it offers.
15
+ *
16
+ * A HUE PER KIND, NOT PER STATE. The tint is decorative and picked for the
17
+ * thing it marks (`NodeHue`), so a tile in rose says nothing is wrong; a state
18
+ * is a `StatusDot` or a `Tag`.
19
+ *
20
+ * DECORATION. The tile is hidden from assistive technology: the name beside it
21
+ * is what is read.
22
+ */
23
+ export declare function IconTile({ children, hue, size, className, ...rest }: IconTileProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './IconTile.css';
2
+ export { IconTile } from './IconTile.js';
3
+ export type { IconTileProps } from './IconTile.js';
@@ -0,0 +1,2 @@
1
+ export { IconTile } from '../chunk-IXJHTFXG.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,30 @@
1
+ /*
2
+ * IconTile: a glyph on a tinted square. Each hue pairs its fill and its ink
3
+ * from one measured family (`--color-node-*`); left out, the brand accent's
4
+ * soft fill and ink. No edge: the tile sits inside a card that has one.
5
+ */
6
+ .crewlet-icon-tile {
7
+ --crewlet-icon-tile-fill: var(--color-brand-accent-soft);
8
+ --crewlet-icon-tile-ink: var(--color-brand-accent-ink);
9
+ --crewlet-icon-tile-size: var(--size-row-md);
10
+
11
+ display: inline-flex;
12
+ flex: none;
13
+ align-items: center;
14
+ justify-content: center;
15
+ width: var(--crewlet-icon-tile-size);
16
+ height: var(--crewlet-icon-tile-size);
17
+ border-radius: var(--radius-md);
18
+ background: var(--crewlet-icon-tile-fill);
19
+ color: var(--crewlet-icon-tile-ink);
20
+ }
21
+
22
+ .crewlet-icon-tile--sm { --crewlet-icon-tile-size: var(--size-row-sm); }
23
+ .crewlet-icon-tile--lg { --crewlet-icon-tile-size: var(--size-row-lg); border-radius: var(--radius-lg); }
24
+
25
+ .crewlet-icon-tile--purple { --crewlet-icon-tile-fill: var(--color-node-purple-fill); --crewlet-icon-tile-ink: var(--color-node-purple-ink); }
26
+ .crewlet-icon-tile--cyan { --crewlet-icon-tile-fill: var(--color-node-cyan-fill); --crewlet-icon-tile-ink: var(--color-node-cyan-ink); }
27
+ .crewlet-icon-tile--green { --crewlet-icon-tile-fill: var(--color-node-green-fill); --crewlet-icon-tile-ink: var(--color-node-green-ink); }
28
+ .crewlet-icon-tile--amber { --crewlet-icon-tile-fill: var(--color-node-amber-fill); --crewlet-icon-tile-ink: var(--color-node-amber-ink); }
29
+ .crewlet-icon-tile--rose { --crewlet-icon-tile-fill: var(--color-node-rose-fill); --crewlet-icon-tile-ink: var(--color-node-rose-ink); }
30
+ .crewlet-icon-tile--blue { --crewlet-icon-tile-fill: var(--color-node-blue-fill); --crewlet-icon-tile-ink: var(--color-node-blue-ink); }
@@ -1,5 +1,5 @@
1
- export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-4GB57WIT.js';
2
- import '../chunk-4FQT6ZAY.js';
1
+ export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-Q55TXPA3.js';
3
2
  import '../chunk-PQADV6P6.js';
3
+ import '../chunk-4FQT6ZAY.js';
4
4
  import '../chunk-BZFWDIV6.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
- export { LinkInterstitial, openExternal } from '../chunk-A7EBCHEG.js';
2
- import '../chunk-2TZATTIU.js';
1
+ export { LinkInterstitial, openExternal } from '../chunk-A4VMJMXJ.js';
3
2
  import '../chunk-5CLW2CXT.js';
3
+ import '../chunk-7IJARUIF.js';
4
4
  import '../chunk-SVSCLHHI.js';
5
5
  import '../chunk-OG6CL3EB.js';
6
- import '../chunk-4FQT6ZAY.js';
6
+ import '../chunk-PQADV6P6.js';
7
7
  import '../chunk-HMPFGIWM.js';
8
8
  import '../chunk-R25RGPUB.js';
9
- import '../chunk-PQADV6P6.js';
9
+ import '../chunk-4FQT6ZAY.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { ListInput } from '../chunk-T3ZWBZ65.js';
1
+ export { ListInput } from '../chunk-YSJYWQSP.js';
2
2
  import '../chunk-SMBKXWML.js';
3
- import '../chunk-4GB57WIT.js';
4
- import '../chunk-RSAQOKH3.js';
5
- import '../chunk-4FQT6ZAY.js';
3
+ import '../chunk-Q55TXPA3.js';
4
+ import '../chunk-PQADV6P6.js';
6
5
  import '../chunk-HMPFGIWM.js';
7
6
  import '../chunk-R25RGPUB.js';
8
- import '../chunk-PQADV6P6.js';
7
+ import '../chunk-RSAQOKH3.js';
8
+ import '../chunk-4FQT6ZAY.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -4,9 +4,9 @@ import '../chunk-PGRPNDWM.js';
4
4
  import '../chunk-26PEPONN.js';
5
5
  import '../chunk-4LDTQWS7.js';
6
6
  import '../chunk-CBOICT64.js';
7
- import '../chunk-4FQT6ZAY.js';
7
+ import '../chunk-BHHIIK3M.js';
8
8
  import '../chunk-HMPFGIWM.js';
9
9
  import '../chunk-R25RGPUB.js';
10
- import '../chunk-BHHIIK3M.js';
10
+ import '../chunk-4FQT6ZAY.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { Menu } from '../chunk-NS7BVLL3.js';
1
+ export { Menu } from '../chunk-JULMZNGT.js';
2
2
  import '../chunk-OG6CL3EB.js';
3
- import '../chunk-4FQT6ZAY.js';
4
3
  import '../chunk-HMPFGIWM.js';
5
4
  import '../chunk-R25RGPUB.js';
5
+ import '../chunk-4FQT6ZAY.js';
6
6
  import '../chunk-BZFWDIV6.js';
7
7
  import '../chunk-ODEQTPFM.js';
@@ -85,6 +85,18 @@ export interface ModalProps extends FrameAttributes {
85
85
  * one glance keeps its actions in the foot, where the eye ends up.
86
86
  */
87
87
  headerActions?: ReactNode;
88
+ /**
89
+ * A step back, drawn first in the head, before the title.
90
+ *
91
+ * For a surface reached FROM another one that stays the reader's place: a
92
+ * widget's options opened from a library of widgets, a record opened from a
93
+ * list in the same sheet. The way back belongs where the reader looks to
94
+ * learn where they are, beside the title, and not in a foot they have to
95
+ * scroll to. Closing is still the close control; this only goes back.
96
+ */
97
+ onBack?: (() => void) | undefined;
98
+ /** The back control's name, saying where it goes: "Back to widgets". */
99
+ backLabel?: string | undefined;
88
100
  children?: ReactNode;
89
101
  size?: ModalSize | undefined;
90
102
  variant?: ModalVariant | undefined;
@@ -99,6 +111,14 @@ export interface ModalProps extends FrameAttributes {
99
111
  dismissable?: boolean | undefined;
100
112
  /** A veil-only switch: the surface still closes on Escape and on its close control. */
101
113
  closeOnBackdrop?: boolean | undefined;
114
+ /**
115
+ * What the page behind looks like. `veil` dims and softens it, which is what
116
+ * a surface asking for the reader's whole attention wants. `clear` leaves it
117
+ * as it is, for a sheet whose changes ARE the page behind it (a page's
118
+ * customize sheet): a preview under a veil is a preview nobody can read. The
119
+ * surface is still modal; only the paint changes.
120
+ */
121
+ backdrop?: 'veil' | 'clear' | undefined;
102
122
  showCloseButton?: boolean | undefined;
103
123
  /** Stacks the body's children in a column with a gap, which most forms want. */
104
124
  stackBody?: boolean | undefined;
@@ -1,8 +1,8 @@
1
- export { ConfirmModal, Modal } from '../chunk-2TZATTIU.js';
1
+ export { ConfirmModal, Modal } from '../chunk-7IJARUIF.js';
2
2
  import '../chunk-OG6CL3EB.js';
3
- import '../chunk-4FQT6ZAY.js';
3
+ import '../chunk-PQADV6P6.js';
4
4
  import '../chunk-HMPFGIWM.js';
5
5
  import '../chunk-R25RGPUB.js';
6
- import '../chunk-PQADV6P6.js';
6
+ import '../chunk-4FQT6ZAY.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -57,6 +57,12 @@
57
57
  }
58
58
 
59
59
  /* Inside a LayerHost the overlay covers the host, not the window. */
60
+ /* The page behind stays as it is: see `backdrop` in Modal.tsx. */
61
+ .crewlet-modal-overlay--clear {
62
+ background: transparent;
63
+ backdrop-filter: none;
64
+ }
65
+
60
66
  .crewlet-modal-overlay--in-host {
61
67
  position: absolute;
62
68
  }
@@ -376,6 +382,14 @@
376
382
  margin: calc(var(--spacing-1) * -1);
377
383
  }
378
384
 
385
+ /* The step back leads the head, its glyph on the title's inline start, as
386
+ the close control's sits on the head's end. */
387
+ .crewlet-modal__back {
388
+ flex-shrink: 0;
389
+ margin-inline-start: calc(var(--spacing-2) * -1);
390
+ margin-block: calc(var(--spacing-1) * -1);
391
+ }
392
+
379
393
  .crewlet-modal__body {
380
394
  flex: 1 1 auto;
381
395
  min-height: 0;
@@ -0,0 +1,23 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import type { SurfaceTone } from '../ArrangeGroup/index.js';
3
+ export interface NoteProps extends HTMLAttributes<HTMLDivElement> {
4
+ /** The paper it is written on: one of the six hues, or the page's own. */
5
+ tone?: SurfaceTone | undefined;
6
+ align?: 'start' | 'center' | undefined;
7
+ /** `lg` for a line meant to be read across the room: a goal, a rule. */
8
+ size?: 'md' | 'lg' | undefined;
9
+ children: ReactNode;
10
+ }
11
+ /**
12
+ * Words a reader leaves on their own page: a team's goal this week, how to
13
+ * read the cards below it, a link to the runbook. A dashboard's note.
14
+ *
15
+ * THE TONE IS THE PAPER, and the ink keeps its contrast on every one: each
16
+ * hue's fill with that hue's ink, which the palette gate measures as a pair.
17
+ * A note is never coloured to mean a state; the hues here are the reader's
18
+ * labels, the same six a group's band takes.
19
+ *
20
+ * IT SCROLLS rather than clipping when the reader makes it shorter than its
21
+ * words.
22
+ */
23
+ export declare const Note: import("react").ForwardRefExoticComponent<NoteProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,3 @@
1
+ import './Note.css';
2
+ export { Note } from './Note.js';
3
+ export type { NoteProps } from './Note.js';
@@ -0,0 +1,2 @@
1
+ export { Note } from '../chunk-63WJLRB2.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,58 @@
1
+ /*
2
+ * Note: words on a coloured paper. Each hue pairs its fill with its own ink.
3
+ */
4
+
5
+ .crewlet-note {
6
+ --crewlet-note-paper: var(--color-surface-subtle);
7
+ --crewlet-note-edge: var(--color-border-default);
8
+ --crewlet-note-ink: var(--color-text-primary);
9
+
10
+ box-sizing: border-box;
11
+ min-width: 0;
12
+ min-height: 0;
13
+ padding: var(--spacing-4);
14
+ overflow: auto;
15
+ border: 1px solid var(--crewlet-note-edge);
16
+ border-radius: var(--radius-lg);
17
+ background: var(--crewlet-note-paper);
18
+ color: var(--crewlet-note-ink);
19
+ font-size: var(--font-size-sm);
20
+ line-height: var(--font-line-height-normal);
21
+ overflow-wrap: anywhere;
22
+ }
23
+
24
+ .crewlet-note--purple { --crewlet-note-paper: var(--color-node-purple-fill); --crewlet-note-edge: var(--color-node-purple-line); --crewlet-note-ink: var(--color-node-purple-ink); }
25
+ .crewlet-note--cyan { --crewlet-note-paper: var(--color-node-cyan-fill); --crewlet-note-edge: var(--color-node-cyan-line); --crewlet-note-ink: var(--color-node-cyan-ink); }
26
+ .crewlet-note--green { --crewlet-note-paper: var(--color-node-green-fill); --crewlet-note-edge: var(--color-node-green-line); --crewlet-note-ink: var(--color-node-green-ink); }
27
+ .crewlet-note--amber { --crewlet-note-paper: var(--color-node-amber-fill); --crewlet-note-edge: var(--color-node-amber-line); --crewlet-note-ink: var(--color-node-amber-ink); }
28
+ .crewlet-note--rose { --crewlet-note-paper: var(--color-node-rose-fill); --crewlet-note-edge: var(--color-node-rose-line); --crewlet-note-ink: var(--color-node-rose-ink); }
29
+ .crewlet-note--blue { --crewlet-note-paper: var(--color-node-blue-fill); --crewlet-note-edge: var(--color-node-blue-line); --crewlet-note-ink: var(--color-node-blue-ink); }
30
+
31
+ .crewlet-note--center {
32
+ display: flex;
33
+ flex-direction: column;
34
+ justify-content: center;
35
+ text-align: center;
36
+ }
37
+
38
+ .crewlet-note--lg {
39
+ font-size: var(--font-size-lg);
40
+ font-weight: var(--font-weight-medium);
41
+ letter-spacing: var(--font-letter-spacing-tight);
42
+ }
43
+
44
+ /* Prose inside takes the note's ink, links included. */
45
+ .crewlet-note :is(p, li, h2, h3, h4, strong, em) {
46
+ color: inherit;
47
+ }
48
+ .crewlet-note a {
49
+ color: inherit;
50
+ text-decoration: underline;
51
+ text-underline-offset: 2px;
52
+ }
53
+ .crewlet-note > :first-child {
54
+ margin-top: 0;
55
+ }
56
+ .crewlet-note > :last-child {
57
+ margin-bottom: 0;
58
+ }
@@ -1,13 +1,13 @@
1
- export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-L4ZLXYPO.js';
2
- import '../chunk-B2Z2CDM5.js';
1
+ export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-6A7P6II6.js';
2
+ import '../chunk-T5TFZ2JB.js';
3
3
  import '../chunk-MY374UUD.js';
4
4
  import '../chunk-AKEZ3G5V.js';
5
5
  import '../chunk-VYOKRN2I.js';
6
+ import '../chunk-UAN5NE7M.js';
7
+ import '../chunk-5OM447RW.js';
6
8
  import '../chunk-TROLVEZY.js';
7
- import '../chunk-4FQT6ZAY.js';
8
9
  import '../chunk-HMPFGIWM.js';
9
10
  import '../chunk-R25RGPUB.js';
10
- import '../chunk-UAN5NE7M.js';
11
- import '../chunk-5OM447RW.js';
11
+ import '../chunk-4FQT6ZAY.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';