@crewlethq/ui 0.38.0 → 0.40.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 (157) hide show
  1. package/README.md +79 -3
  2. package/dist/AgentHandoffPanel/index.js +3 -3
  3. package/dist/AppShell/AppShell.d.ts +13 -2
  4. package/dist/AppShell/index.js +1 -1
  5. package/dist/{AppShell-NDU4XMGF.css → AppShell-NPSWZ3XW.css} +45 -4
  6. package/dist/ArtifactBar/index.js +6 -5
  7. package/dist/{ArtifactBar-FWPBBKQ5.css → ArtifactBar-6PGWGKN2.css} +13 -1
  8. package/dist/ArtifactCard/index.js +2 -2
  9. package/dist/AuthLayout/index.js +2 -2
  10. package/dist/AvatarPicker/index.js +10 -6
  11. package/dist/Card/Card.d.ts +14 -2
  12. package/dist/Card/index.js +1 -1
  13. package/dist/{Card-G2ZGT5Z6.css → Card-JR2UPQH7.css} +20 -0
  14. package/dist/CatalogTile/CatalogTile.d.ts +47 -0
  15. package/dist/CatalogTile/index.d.ts +3 -0
  16. package/dist/CatalogTile/index.js +3 -0
  17. package/dist/CatalogTile-XL4XLFUH.css +135 -0
  18. package/dist/CharacterPicker/index.js +2 -2
  19. package/dist/Charts/Histogram.d.ts +71 -0
  20. package/dist/Charts/index.d.ts +2 -0
  21. package/dist/Charts/index.js +1 -1
  22. package/dist/{Charts-MBJG72BS.css → Charts-TZ744HT6.css} +118 -0
  23. package/dist/CodeBlock/index.js +1 -1
  24. package/dist/{CodeBlock-GYNJ2HI6.css → CodeBlock-N5ETJF24.css} +13 -0
  25. package/dist/CommandPalette/index.js +3 -3
  26. package/dist/CommentThread/index.js +3 -3
  27. package/dist/Composer/index.js +2 -2
  28. package/dist/DataGrid/DataGrid.d.ts +267 -0
  29. package/dist/DataGrid/index.d.ts +3 -0
  30. package/dist/DataGrid/index.js +7 -0
  31. package/dist/DataGrid-AQKPJD7W.css +482 -0
  32. package/dist/DataTable/index.js +2 -2
  33. package/dist/DataView/index.js +4 -4
  34. package/dist/DatasetSource/DatasetSource.d.ts +7 -1
  35. package/dist/DatasetSource/index.js +1 -1
  36. package/dist/HuePicker/index.js +11 -4
  37. package/dist/LayersList/index.js +2 -2
  38. package/dist/LinkInterstitial/index.js +2 -2
  39. package/dist/List/List.d.ts +8 -0
  40. package/dist/List/index.js +1 -1
  41. package/dist/{List-MYJIV6MP.css → List-YHLIZFK4.css} +46 -0
  42. package/dist/ListInput/ListInput.d.ts +9 -1
  43. package/dist/ListInput/index.js +2 -2
  44. package/dist/LockedLabel/LockedLabel.d.ts +34 -0
  45. package/dist/LockedLabel/index.d.ts +3 -0
  46. package/dist/LockedLabel/index.js +3 -0
  47. package/dist/LockedLabel-VQEGEB7G.css +16 -0
  48. package/dist/MarkdownEditor/index.js +8 -5
  49. package/dist/MergeConflicts/index.js +11 -5
  50. package/dist/Modal/index.js +1 -1
  51. package/dist/{Modal-7MWRCWAI.css → Modal-TOEWHDCQ.css} +5 -0
  52. package/dist/ObjectHeader/index.js +1 -1
  53. package/dist/{ObjectHeader-D7GU7QNI.css → ObjectHeader-ZOS22FKX.css} +7 -8
  54. package/dist/PageNote/PageNote.d.ts +14 -0
  55. package/dist/PageNote/index.d.ts +3 -0
  56. package/dist/PageNote/index.js +2 -0
  57. package/dist/PageNote-RHLXH3ML.css +12 -0
  58. package/dist/PropertyList/PropertyList.d.ts +88 -0
  59. package/dist/PropertyList/index.d.ts +3 -0
  60. package/dist/PropertyList/index.js +7 -0
  61. package/dist/PropertyList-SCYM66LL.css +96 -0
  62. package/dist/RelatedRow/RelatedRow.d.ts +27 -0
  63. package/dist/RelatedRow/index.d.ts +3 -0
  64. package/dist/RelatedRow/index.js +9 -0
  65. package/dist/RelatedRow-2FVS6QQA.css +6 -0
  66. package/dist/RichEditor/index.js +1 -1
  67. package/dist/SectionFrame/SectionFrame.d.ts +76 -0
  68. package/dist/SectionFrame/index.d.ts +3 -0
  69. package/dist/SectionFrame/index.js +7 -0
  70. package/dist/SectionFrame-M62UUVFQ.css +164 -0
  71. package/dist/SegmentedControl/index.js +11 -4
  72. package/dist/SettingsTable/SettingsTable.d.ts +66 -0
  73. package/dist/SettingsTable/index.d.ts +3 -0
  74. package/dist/SettingsTable/index.js +3 -0
  75. package/dist/SettingsTable-6DUFAFXG.css +160 -0
  76. package/dist/ShareDialog/index.js +2 -2
  77. package/dist/SheetColumnEditor/index.js +7 -6
  78. package/dist/SheetGrid/index.js +3 -3
  79. package/dist/SidebarNav/SidebarNav.d.ts +35 -2
  80. package/dist/SidebarNav/index.js +2 -1
  81. package/dist/{SidebarNav-7SGUZYKK.css → SidebarNav-YI74SPDC.css} +10 -0
  82. package/dist/StatCard/index.js +1 -1
  83. package/dist/{StatCard-4T7TMWMN.css → StatCard-HAA3F5GX.css} +8 -3
  84. package/dist/StatGroup/index.js +1 -1
  85. package/dist/{StatGroup-DOFHX5QJ.css → StatGroup-ZMW7VQWP.css} +27 -0
  86. package/dist/Switcher/index.js +2 -2
  87. package/dist/Tabs/Tabs.d.ts +55 -1
  88. package/dist/Tabs/fold.d.ts +54 -0
  89. package/dist/Tabs/index.d.ts +1 -1
  90. package/dist/Tabs/index.js +9 -2
  91. package/dist/Tabs/roving.d.ts +3 -3
  92. package/dist/{Tabs-WIF7457H.css → Tabs-S7F4RWAN.css} +77 -0
  93. package/dist/TagsInput/index.js +1 -1
  94. package/dist/ThemeGallery/index.js +2 -2
  95. package/dist/ThemeSwitcher/index.js +12 -5
  96. package/dist/TileGrid/TileGrid.d.ts +33 -0
  97. package/dist/TileGrid/index.d.ts +3 -0
  98. package/dist/TileGrid/index.js +2 -0
  99. package/dist/TileGrid-I6LNYD2H.css +52 -0
  100. package/dist/VersionCompare/index.js +12 -5
  101. package/dist/{chunk-B5J23C73.js → chunk-2PEXZ7L4.js} +1 -1
  102. package/dist/{chunk-S27UBCVX.js → chunk-2VOHUGUA.js} +2 -2
  103. package/dist/{chunk-XBURIXHO.js → chunk-3TXY3PJZ.js} +1 -1
  104. package/dist/{chunk-2QZ2VPHR.js → chunk-4OK4DX3V.js} +2 -2
  105. package/dist/chunk-4RKTZSEW.js +64 -0
  106. package/dist/{chunk-ECGGQX2H.js → chunk-A44YHLCQ.js} +2 -2
  107. package/dist/{chunk-F4LPQA4E.js → chunk-BA32AVKS.js} +1 -1
  108. package/dist/chunk-CV4NES3P.js +9 -0
  109. package/dist/{chunk-PPHTIKZO.js → chunk-E4BOVKNJ.js} +1 -1
  110. package/dist/{chunk-W7PAIVAP.js → chunk-E7QLG3PG.js} +30 -9
  111. package/dist/{chunk-RKKO7QHH.js → chunk-EGMQURBR.js} +5 -4
  112. package/dist/{chunk-GMW4ZHST.js → chunk-EX22Q5SH.js} +2 -2
  113. package/dist/{chunk-A23KDROH.js → chunk-FXBGEANQ.js} +1 -1
  114. package/dist/{chunk-4L2BWSHR.js → chunk-GFYQKMQZ.js} +2 -2
  115. package/dist/{chunk-HG5VF3TZ.js → chunk-HMVQQEHW.js} +91 -2
  116. package/dist/{chunk-IPWU6ERC.js → chunk-HQJ24WPM.js} +4 -2
  117. package/dist/{chunk-SVGARBDY.js → chunk-IAGYPTEJ.js} +2 -2
  118. package/dist/{chunk-ZK3VYY7L.js → chunk-INHXF2CL.js} +24 -11
  119. package/dist/chunk-INVSUFJK.js +71 -0
  120. package/dist/{chunk-6NNY5WBF.js → chunk-JKAGN4V4.js} +1 -1
  121. package/dist/{chunk-4LRAJXHL.js → chunk-JSWOXRRE.js} +1 -1
  122. package/dist/{chunk-DYB66CNM.js → chunk-KKNHMXTE.js} +6 -3
  123. package/dist/{chunk-UWRBD2YO.js → chunk-KNHUBHFX.js} +1 -1
  124. package/dist/{chunk-ZMDYQ2HH.js → chunk-KWWP3D7M.js} +1 -1
  125. package/dist/{chunk-46RL3E54.js → chunk-M6NQ4XGK.js} +1 -1
  126. package/dist/{chunk-PT6WKXKW.js → chunk-MMPKN7WV.js} +1 -1
  127. package/dist/{chunk-NRBAXRWE.js → chunk-N3TFYBN3.js} +1 -1
  128. package/dist/chunk-NNTO3TNC.js +9 -0
  129. package/dist/{chunk-DS2C73RJ.js → chunk-NZWX27J7.js} +2 -2
  130. package/dist/{chunk-VGE3G3T4.js → chunk-ODOJJGXH.js} +1 -1
  131. package/dist/chunk-OHGH7O6T.js +19 -0
  132. package/dist/{chunk-4ISUIS6F.js → chunk-OOC7Q67K.js} +1 -1
  133. package/dist/{chunk-BT5H2THK.js → chunk-OUD75UB2.js} +1 -1
  134. package/dist/chunk-PCT47E7O.js +48 -0
  135. package/dist/{chunk-X3UYTAOG.js → chunk-PFZOFAQ6.js} +1 -1
  136. package/dist/{chunk-YQG4PZGC.js → chunk-QRKT4XTT.js} +2 -2
  137. package/dist/{chunk-BJI3RFXG.js → chunk-S4DREXGM.js} +1 -1
  138. package/dist/{chunk-GDDE4UM7.js → chunk-SEC2GR2V.js} +1 -1
  139. package/dist/{chunk-YEVG2X5R.js → chunk-SNQRGH4A.js} +1 -1
  140. package/dist/chunk-T6MXORP5.js +116 -0
  141. package/dist/{chunk-OTCXRJ7D.js → chunk-U2XAJONO.js} +1 -1
  142. package/dist/{chunk-3ZUINC7C.js → chunk-WYYCPV46.js} +6 -1
  143. package/dist/chunk-X4IXXLWM.js +306 -0
  144. package/dist/{chunk-PAQXOP2M.js → chunk-XGBUUQDU.js} +2 -2
  145. package/dist/chunk-XIDD7PJO.js +416 -0
  146. package/dist/{chunk-XO7PUL4F.js → chunk-YPTTSJPM.js} +1 -1
  147. package/dist/chunk-ZUTUI27P.js +21 -0
  148. package/dist/generated/index.d.ts +9 -0
  149. package/dist/generated/index.js +83 -74
  150. package/dist/index.js +83 -74
  151. package/dist/styles.css +1627 -104
  152. package/package.json +3 -3
  153. package/dist/chunk-7SDUKCNW.js +0 -141
  154. package/dist/{Editor-QV4JP242.js → Editor-IRDQ3JDZ.js} +1 -1
  155. package/dist/{chunk-JZPK4IXR.js → chunk-3PR65I3H.js} +2 -2
  156. package/dist/{chunk-ETVEGR2Y.js → chunk-ISA2O2BK.js} +1 -1
  157. /package/dist/{chunk-4QQ3MND5.js → chunk-S3QTFUJX.js} +0 -0
@@ -0,0 +1,164 @@
1
+ /*
2
+ * SectionFrame: a column of sections beside the screen, and the one-row
3
+ * picker it folds to.
4
+ */
5
+
6
+ /* THE FRAME TAKES THE CONTENT COLUMN'S PADDING BACK and gives it to the body,
7
+ so the column is flush with the sheet and the section keeps the inset. */
8
+ .crewlet-app-shell__content:has(> .crewlet-section-frame) {
9
+ min-height: 100%;
10
+ padding: 0;
11
+ }
12
+
13
+ .crewlet-section-frame {
14
+ display: grid;
15
+ flex: 1 1 auto;
16
+ grid-template-columns: var(--crewlet-section-frame-column) minmax(0, 1fr);
17
+ min-height: 100%;
18
+ }
19
+
20
+ /*
21
+ * AS TALL AS THE VIEW, NEVER AS THE GRID. A sticky box moves only inside its
22
+ * grid area, which the section beside it makes as tall as its content; sized
23
+ * against that area the column was exactly as tall as the section, had
24
+ * nowhere to stick, and a wheel over a long section carried the list off the
25
+ * top. At the view's height (`100cqb`: the shell's scroller is a size
26
+ * container) it sticks for the whole scroll and a long list scrolls in itself.
27
+ *
28
+ * IT KEEPS THE WHEEL AT ITS ENDS. A box whose bottom is below the fold traps
29
+ * the wheel; this one is exactly the view and always all on screen, so what
30
+ * chaining would do is move the section beside it at the list's end, which
31
+ * is not what the pointer is over.
32
+ */
33
+ .crewlet-section-frame__nav {
34
+ position: sticky;
35
+ top: 0;
36
+ align-self: start;
37
+ height: 100cqb;
38
+ overflow-y: auto;
39
+ overscroll-behavior: contain;
40
+ padding: var(--spacing-4) 0;
41
+ border-right: 1px solid var(--color-border-default);
42
+ }
43
+
44
+ .crewlet-section-frame__body {
45
+ display: flex;
46
+ flex-direction: column;
47
+ gap: var(--spacing-5);
48
+ min-width: 0;
49
+ padding: var(--spacing-5) var(--spacing-5) var(--spacing-10);
50
+ }
51
+
52
+ /* BESIDE THE SECTION there is room for the whole list: no toggle, and the
53
+ list is always drawn. */
54
+ .crewlet-section-frame__toggle {
55
+ display: none;
56
+ }
57
+
58
+ /*
59
+ * FOLDED: one pane, the picker above the section. The picker's row is its
60
+ * own height and the section takes the rest: two `auto` rows split a short
61
+ * section's spare height and opened a band of nothing between the picker
62
+ * and the section it names.
63
+ */
64
+ .crewlet-section-frame[data-folded] {
65
+ grid-template-columns: minmax(0, 1fr);
66
+ grid-template-rows: auto 1fr;
67
+ }
68
+
69
+ /* IN THE FLOW, as tall as it is, on the section's own gutter: the list it
70
+ unfolds is part of the page rather than a pane of its own. */
71
+ .crewlet-section-frame[data-folded] > .crewlet-section-frame__nav {
72
+ position: static;
73
+ height: auto;
74
+ overflow-y: visible;
75
+ padding: var(--spacing-2) var(--spacing-5);
76
+ border-right: none;
77
+ border-bottom: 1px solid var(--color-border-default);
78
+ }
79
+
80
+ /* ONE ROW NAMING WHERE THE READER IS, which unfolds the list. Its glyph and
81
+ name stand over the glyphs and names of the rows: the rows' own inset,
82
+ less the toggle's border. */
83
+ .crewlet-section-frame[data-folded] .crewlet-section-frame__toggle {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: var(--spacing-2);
87
+ width: 100%;
88
+ min-height: var(--size-target-min);
89
+ padding: 0 calc(var(--size-nav-row-pad) - 1px);
90
+ border: 1px solid var(--color-border-default);
91
+ border-radius: var(--radius-sm);
92
+ background: var(--color-surface-elevated);
93
+ color: var(--color-text-primary);
94
+ font: inherit;
95
+ font-weight: var(--font-weight-medium);
96
+ text-align: left;
97
+ cursor: pointer;
98
+ }
99
+
100
+ .crewlet-section-frame[data-folded] .crewlet-section-frame__toggle:hover {
101
+ background: var(--color-surface-hover);
102
+ }
103
+
104
+ /* INSIDE ITS OWN EDGE, as every control that draws one rings. */
105
+ .crewlet-section-frame__toggle:focus-visible {
106
+ outline: 2px solid var(--color-focus);
107
+ outline-offset: var(--size-focus-ring-inset-offset);
108
+ }
109
+
110
+ .crewlet-section-frame__toggle-icon {
111
+ display: inline-flex;
112
+ flex: none;
113
+ }
114
+
115
+ .crewlet-section-frame__toggle-name {
116
+ flex: 1 1 auto;
117
+ min-width: 0;
118
+ overflow: hidden;
119
+ text-overflow: ellipsis;
120
+ white-space: nowrap;
121
+ }
122
+
123
+ /* "Section ·" BEFORE THE NAME, in the quiet ink, so the row reads as a
124
+ control holding the other sections rather than as the page's title. */
125
+ .crewlet-section-frame__toggle-prefix {
126
+ color: var(--color-text-tertiary);
127
+ font-weight: var(--font-weight-regular);
128
+ }
129
+
130
+ .crewlet-section-frame__chevron {
131
+ flex: none;
132
+ color: var(--color-text-tertiary);
133
+ }
134
+
135
+ .crewlet-section-frame__nav[data-open] .crewlet-section-frame__chevron {
136
+ transform: rotate(180deg);
137
+ }
138
+
139
+ .crewlet-section-frame[data-folded] .crewlet-section-frame__nav:not([data-open]) .crewlet-section-frame__list {
140
+ display: none;
141
+ }
142
+
143
+ .crewlet-section-frame[data-folded] .crewlet-section-frame__nav[data-open] .crewlet-section-frame__list {
144
+ padding-top: var(--spacing-2);
145
+ }
146
+
147
+ /* THE LIST TAKES NO GUTTER OF ITS OWN inside the folded picker, which is
148
+ inset already: with the rail's gutter on top, its glyphs sat 11px right of
149
+ the toggle's. */
150
+ .crewlet-section-frame[data-folded] .crewlet-section-frame__list > .crewlet-sidebar-nav {
151
+ padding-inline: 0;
152
+ }
153
+
154
+ /* A PHONE'S ONE GUTTER: the section and the picker start where every other
155
+ screen's content does. */
156
+ @media (width < 640px) {
157
+ .crewlet-section-frame__body {
158
+ padding: var(--spacing-4) var(--spacing-4) var(--spacing-9);
159
+ }
160
+
161
+ .crewlet-section-frame[data-folded] > .crewlet-section-frame__nav {
162
+ padding-inline: var(--spacing-4);
163
+ }
164
+ }
@@ -1,8 +1,15 @@
1
- import '../chunk-4ISUIS6F.js';
2
- export { SegmentedControl } from '../chunk-2QZ2VPHR.js';
3
- import '../chunk-7SDUKCNW.js';
4
- import '../chunk-RKKO7QHH.js';
1
+ import '../chunk-OOC7Q67K.js';
2
+ export { SegmentedControl } from '../chunk-4OK4DX3V.js';
3
+ import '../chunk-X4IXXLWM.js';
4
+ import '../chunk-WIATRXEJ.js';
5
+ import '../chunk-EGMQURBR.js';
5
6
  import '../chunk-BHHIIK3M.js';
7
+ import '../chunk-D6FEHY5G.js';
8
+ import '../chunk-OMV5W53A.js';
9
+ import '../chunk-H5XTJ7GJ.js';
6
10
  import '../chunk-2YTOOH3A.js';
11
+ import '../chunk-OG6CL3EB.js';
12
+ import '../chunk-4FQT6ZAY.js';
13
+ import '../chunk-NUZHC6MM.js';
7
14
  import '../chunk-BZFWDIV6.js';
8
15
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,66 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ /** The words the three columns are named by, for assistive technology and the optional header row. */
3
+ export interface SettingsTableColumns {
4
+ setting?: string | undefined;
5
+ value?: string | undefined;
6
+ source?: string | undefined;
7
+ }
8
+ export interface SettingsTableProps extends HTMLAttributes<HTMLDivElement> {
9
+ /**
10
+ * Draws the column names as a header row. Off by default: a page that
11
+ * stacks one table per group (a card each) would repeat the same three
12
+ * words over every card. The names are always exposed to assistive
13
+ * technology, drawn or not.
14
+ */
15
+ header?: boolean | undefined;
16
+ /** The column names. Defaults to Setting, Value and Source. */
17
+ columns?: SettingsTableColumns | undefined;
18
+ children?: ReactNode;
19
+ }
20
+ /**
21
+ * A read-only table of settings: what each is called, the value in force and
22
+ * where that value comes from.
23
+ *
24
+ * ONE COLUMN GRID FOR EVERY TABLE ON A PAGE. The tracks are fractions of the
25
+ * table's own width (`--crewlet-settings-table-columns`), never the width of
26
+ * the longest label, so a page that stacks a table per group in cards of one
27
+ * width puts every value and every source on one vertical line down the page.
28
+ * A term column sized to its own longest term started the values at a
29
+ * different place in every card, and a fixed one left them floating a third
30
+ * of the way across a wide card with the rest of the row empty.
31
+ *
32
+ * THE SOURCE IS QUIET UNLESS IT IS NEWS. A value that is the default says so
33
+ * in the tertiary ink, as a word rather than a tag: a tag on every row is
34
+ * noise that teaches a reader to skip the column. A value that differs from
35
+ * its default (`changed`) carries a mark before its source, which is the one
36
+ * row in the table a reader scanning it came to find.
37
+ *
38
+ * A TABLE, BECAUSE IT IS ONE. Every row carries the same three fields, so it
39
+ * is announced as a table with its column names, and each setting's name is
40
+ * the row's header. The roles are written out rather than taken from table
41
+ * elements because the row folds into two lines on a narrow table, and a
42
+ * table element that changes its display loses its semantics in some
43
+ * browsers.
44
+ */
45
+ export declare function SettingsTable({ header, columns, className, children, ...rest }: SettingsTableProps): import("react").JSX.Element;
46
+ export declare namespace SettingsTable {
47
+ var Row: typeof SettingsTableRow;
48
+ }
49
+ export interface SettingsTableRowProps extends HTMLAttributes<HTMLDivElement> {
50
+ /** What the setting is called, in a reader's words. */
51
+ label: ReactNode;
52
+ /**
53
+ * The setting's address in the document it is written in
54
+ * (`turn_engine.max_iterations`), drawn quietly under its name in the
55
+ * monospace face. For the reader who will go and change it there.
56
+ */
57
+ settingKey?: string | undefined;
58
+ /** The value in force, in its own unit. Drawn in tabular figures. */
59
+ children?: ReactNode;
60
+ /** Where the value comes from: "Default", "Set in the company document". */
61
+ source?: ReactNode;
62
+ /** The value differs from its default: the source carries a mark. */
63
+ changed?: boolean | undefined;
64
+ }
65
+ /** One setting: its name (and key), its value and its source. */
66
+ export declare function SettingsTableRow({ label, settingKey, source, changed, className, children, ...rest }: SettingsTableRowProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './SettingsTable.css';
2
+ export { SettingsTable, SettingsTableRow } from './SettingsTable.js';
3
+ export type { SettingsTableColumns, SettingsTableProps, SettingsTableRowProps } from './SettingsTable.js';
@@ -0,0 +1,3 @@
1
+ export { SettingsTable, SettingsTableRow } from '../chunk-4RKTZSEW.js';
2
+ import '../chunk-WIATRXEJ.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,160 @@
1
+ /*
2
+ * SettingsTable: a read-only table of settings, one row each, on one grid.
3
+ *
4
+ * THE TRACKS ARE FRACTIONS OF THE TABLE, so every table of one width shares
5
+ * them: a page that stacks a table per group puts each column on one line
6
+ * down the page with nothing to coordinate. `--crewlet-settings-table-columns`
7
+ * is inherited, so a page that wants other proportions sets it once.
8
+ *
9
+ * Each row is its own grid on those tracks rather than a subgrid of the
10
+ * table's, because the tracks are fractions: one row's long label can never
11
+ * move another row's value, which is what a content-sized track would do.
12
+ */
13
+
14
+ .crewlet-settings-table {
15
+ container: crewlet-settings-table / inline-size;
16
+ display: flex;
17
+ flex-direction: column;
18
+ min-width: 0;
19
+ font-size: var(--font-size-compact);
20
+ /* The flush-panel recipe, standing on its own: the card's surface, its
21
+ hairline and its corner. Inside a card it gives them up (below). */
22
+ background: var(--color-surface-subtle);
23
+ border: 1px solid var(--color-border-default);
24
+ border-radius: var(--radius-lg);
25
+ overflow: hidden;
26
+ }
27
+
28
+ /*
29
+ * A TABLE THAT IS A CARD'S CONTENT IS THAT CARD'S TABLE. It draws no edge or
30
+ * corner of its own inside one, so a card never holds a box inside a box; its
31
+ * rows' hairlines run to the card's edges under the card's own head rule.
32
+ */
33
+ .crewlet-card > .crewlet-settings-table,
34
+ .crewlet-card__body > .crewlet-settings-table {
35
+ background: transparent;
36
+ border: 0;
37
+ border-radius: var(--radius-none);
38
+ }
39
+
40
+ .crewlet-settings-table__row {
41
+ display: grid;
42
+ grid-template-columns: var(
43
+ --crewlet-settings-table-columns,
44
+ minmax(0, 5fr) minmax(0, 3fr) minmax(0, 2fr)
45
+ );
46
+ column-gap: var(--spacing-6);
47
+ /* ONE BASELINE PER ROW: the name, the value and the source sit on the
48
+ first line's baseline, whatever the name's key adds under it. */
49
+ align-items: baseline;
50
+ min-height: var(--size-row-md);
51
+ padding: var(--spacing-3) var(--spacing-4);
52
+ }
53
+
54
+ .crewlet-settings-table__body > .crewlet-settings-table__row + .crewlet-settings-table__row {
55
+ border-top: 1px solid var(--color-border-default);
56
+ }
57
+
58
+ /*
59
+ * The column names, in the micro-label register a table's header takes
60
+ * across the system, on the panel's own ground. Hidden by default (see the
61
+ * component): still the table's column headers for assistive technology.
62
+ */
63
+ .crewlet-settings-table__head .crewlet-settings-table__row {
64
+ min-height: 0;
65
+ padding-block: var(--spacing-2);
66
+ border-bottom: 1px solid var(--color-border-default);
67
+ }
68
+
69
+ .crewlet-settings-table__name {
70
+ font-size: var(--font-size-2xs);
71
+ font-weight: var(--font-weight-medium);
72
+ letter-spacing: var(--font-letter-spacing-wide);
73
+ text-transform: uppercase;
74
+ color: var(--color-text-tertiary);
75
+ white-space: nowrap;
76
+ }
77
+
78
+ .crewlet-settings-table__head--hidden {
79
+ position: absolute;
80
+ width: 1px;
81
+ height: 1px;
82
+ margin: -1px;
83
+ padding: 0;
84
+ border: 0;
85
+ overflow: hidden;
86
+ clip-path: inset(50%);
87
+ white-space: nowrap;
88
+ }
89
+
90
+ .crewlet-settings-table__setting {
91
+ display: flex;
92
+ flex-direction: column;
93
+ gap: var(--spacing-1);
94
+ min-width: 0;
95
+ }
96
+
97
+ .crewlet-settings-table__label {
98
+ color: var(--color-text-primary);
99
+ line-height: var(--font-line-height-snug);
100
+ }
101
+
102
+ /*
103
+ * THE KEY IS FOR THE READER WHO WILL GO AND CHANGE IT, so it is there and
104
+ * quiet: the monospace face at the smallest step, in the tertiary ink, and
105
+ * free to break anywhere, since a dotted path is one word to a line breaker.
106
+ */
107
+ .crewlet-settings-table__key {
108
+ font-family: var(--font-family-mono);
109
+ font-size: var(--font-size-2xs);
110
+ line-height: var(--font-line-height-snug);
111
+ color: var(--color-text-tertiary);
112
+ overflow-wrap: anywhere;
113
+ }
114
+
115
+ /* Tabular figures, so a column of numbers reads down its digits. */
116
+ .crewlet-settings-table__value {
117
+ min-width: 0;
118
+ color: var(--color-text-primary);
119
+ font-weight: var(--font-weight-medium);
120
+ font-variant-numeric: tabular-nums;
121
+ overflow-wrap: anywhere;
122
+ }
123
+
124
+ .crewlet-settings-table__source {
125
+ display: inline-flex;
126
+ align-items: baseline;
127
+ gap: var(--spacing-2);
128
+ min-width: 0;
129
+ font-size: var(--font-size-xs);
130
+ color: var(--color-text-tertiary);
131
+ }
132
+
133
+ /* A value that differs from its default is the row a reader came to find. */
134
+ .crewlet-settings-table__source--changed {
135
+ color: var(--color-text-secondary);
136
+ }
137
+
138
+ .crewlet-settings-table__source--changed .crewlet-status-dot {
139
+ align-self: center;
140
+ }
141
+
142
+ /*
143
+ * NARROW: the name takes the row's first line, and the value and its source
144
+ * share the second. Three columns at this width leave a name column a word
145
+ * wide, which wraps every name into a stack of single words.
146
+ */
147
+ @container crewlet-settings-table (width < 32rem) {
148
+ .crewlet-settings-table__row {
149
+ grid-template-columns: minmax(0, 1fr) auto;
150
+ row-gap: var(--spacing-1);
151
+ }
152
+
153
+ .crewlet-settings-table__setting {
154
+ grid-column: 1 / -1;
155
+ }
156
+
157
+ .crewlet-settings-table__source {
158
+ justify-self: end;
159
+ }
160
+ }
@@ -1,9 +1,9 @@
1
- export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-UWRBD2YO.js';
1
+ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-KNHUBHFX.js';
2
2
  import '../chunk-XQZ6EWOE.js';
3
3
  import '../chunk-W46LPU4R.js';
4
4
  import '../chunk-STJ7QBC3.js';
5
5
  import '../chunk-DTIW4CHZ.js';
6
- import '../chunk-SVGARBDY.js';
6
+ import '../chunk-IAGYPTEJ.js';
7
7
  import '../chunk-7KHM2FZH.js';
8
8
  import '../chunk-SZZRIHGT.js';
9
9
  import '../chunk-CI3VPIJN.js';
@@ -1,17 +1,18 @@
1
- export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-4L2BWSHR.js';
1
+ export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-GFYQKMQZ.js';
2
2
  import '../chunk-XQZ6EWOE.js';
3
3
  import '../chunk-FFMCMSJB.js';
4
4
  import '../chunk-7KHM2FZH.js';
5
5
  import '../chunk-LFSIKGRQ.js';
6
6
  import '../chunk-Z7JYG5TF.js';
7
- import '../chunk-F4LPQA4E.js';
7
+ import '../chunk-BA32AVKS.js';
8
8
  import '../chunk-AYKXMIOR.js';
9
- import '../chunk-2QZ2VPHR.js';
10
- import '../chunk-7SDUKCNW.js';
11
- import '../chunk-RKKO7QHH.js';
12
9
  import '../chunk-AXS6MBNH.js';
13
- import '../chunk-SMBKXWML.js';
10
+ import '../chunk-4OK4DX3V.js';
11
+ import '../chunk-X4IXXLWM.js';
12
+ import '../chunk-WIATRXEJ.js';
13
+ import '../chunk-EGMQURBR.js';
14
14
  import '../chunk-TYONQSOK.js';
15
+ import '../chunk-SMBKXWML.js';
15
16
  import '../chunk-BHHIIK3M.js';
16
17
  import '../chunk-PQADV6P6.js';
17
18
  import '../chunk-D6FEHY5G.js';
@@ -1,15 +1,15 @@
1
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-JZPK4IXR.js';
1
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-3PR65I3H.js';
2
2
  import '../chunk-O2EGEONV.js';
3
3
  import '../chunk-CENOOTAV.js';
4
+ import '../chunk-KYIAFNU7.js';
4
5
  import '../chunk-3BYIWOTV.js';
5
6
  import '../chunk-I6POAB4V.js';
6
- import '../chunk-KYIAFNU7.js';
7
- import '../chunk-WIATRXEJ.js';
8
7
  import '../chunk-66X5WDKE.js';
9
8
  import '../chunk-LFSIKGRQ.js';
10
9
  import '../chunk-Z7JYG5TF.js';
11
10
  import '../chunk-KHJIEPZV.js';
12
11
  import '../chunk-AYKXMIOR.js';
12
+ import '../chunk-WIATRXEJ.js';
13
13
  import '../chunk-I33UIUZD.js';
14
14
  import '../chunk-5AQBPHZD.js';
15
15
  import '../chunk-PZKHBB7D.js';
@@ -69,6 +69,17 @@ export interface NavGroupProps {
69
69
  * first row.
70
70
  */
71
71
  action?: NavGroupAction | undefined;
72
+ /**
73
+ * Every row in the group is closed to this reader, for this reason
74
+ * ("Needs Admin access"). The key is drawn ONCE, after the group's label,
75
+ * which names the reason for a screen reader and as its title; the rows
76
+ * stay links, in the quiet ink, without a key each, so a reader who holds
77
+ * none of a column's access meets one mark per group rather than a wall of
78
+ * keys. A row still says its own reason (its `locked`) as its title and
79
+ * after its name. Only for a NAMED group: a run with no label has no
80
+ * heading to carry the key, so its rows keep theirs.
81
+ */
82
+ locked?: string | undefined;
72
83
  className?: string | undefined;
73
84
  children?: ReactNode;
74
85
  }
@@ -79,6 +90,11 @@ export interface NavLinkProps {
79
90
  href?: string | undefined;
80
91
  'aria-current'?: 'page' | undefined;
81
92
  onClick?: MouseEventHandler<HTMLElement> | undefined;
93
+ /** The row's hint, as the pointer's title. */
94
+ title?: string | undefined;
95
+ /** The row's `onPrefetch`, on the pointer reaching it and on focus. */
96
+ onPointerEnter?: (() => void) | undefined;
97
+ onFocus?: (() => void) | undefined;
82
98
  }
83
99
  /**
84
100
  * A figure at the end of a row, and what it counts.
@@ -145,6 +161,23 @@ export interface NavItemProps {
145
161
  * read after its name.
146
162
  */
147
163
  disabledReason?: string | undefined;
164
+ /**
165
+ * Closed to this reader, and why, as a sentence: "Needs Admin access". The
166
+ * row stays and stays a link (a place that vanished is one the reader
167
+ * cannot ask for); its words carry the key after them, the pointer's title
168
+ * says why, and a screen reader hears the reason after the name. See
169
+ * `LockedLabel`. Unlike `disabledReason`, the destination is reachable: it
170
+ * is the page that says the reader may not read it.
171
+ */
172
+ locked?: string | undefined;
173
+ /** The row's hint, as the pointer's title: what the destination answers. */
174
+ title?: string | undefined;
175
+ /**
176
+ * Called when the pointer reaches the row and when it takes focus: the
177
+ * reader deciding, which is the moment to start fetching where it leads,
178
+ * so the destination is usually in by the time the press lands.
179
+ */
180
+ onPrefetch?: (() => void) | undefined;
148
181
  /** Draws the row's element, for a router that owns navigation. */
149
182
  renderLink?: ((props: NavLinkProps) => ReactNode) | undefined;
150
183
  onClick?: MouseEventHandler<HTMLElement> | undefined;
@@ -172,6 +205,6 @@ export declare namespace SidebarNav {
172
205
  * `<div>` here still carries the label's own padding, which put sixteen blank
173
206
  * pixels at the top of the rail and named a group nothing could read.
174
207
  */
175
- export declare function NavGroup({ label, action, className, children }: NavGroupProps): import("react").JSX.Element;
208
+ export declare function NavGroup({ label, action, locked, className, children }: NavGroupProps): import("react").JSX.Element;
176
209
  /** One row: a glyph, a label, an optional badge, and optionally rows beneath. */
177
- export declare function NavItem({ label, icon, lead, count, badge, href, current, disabledReason, renderLink, onClick, children, expanded, defaultExpanded, onExpandedChange, expandLabel, className, }: NavItemProps): import("react").JSX.Element;
210
+ export declare function NavItem({ label, icon, lead, count, badge, href, current, disabledReason, locked, title, onPrefetch, renderLink, onClick, children, expanded, defaultExpanded, onExpandedChange, expandLabel, className, }: NavItemProps): import("react").JSX.Element;
@@ -1,4 +1,5 @@
1
- export { NavGroup, NavItem, SidebarNav } from '../chunk-W7PAIVAP.js';
1
+ export { NavGroup, NavItem, SidebarNav } from '../chunk-E7QLG3PG.js';
2
+ import '../chunk-OHGH7O6T.js';
2
3
  import '../chunk-FYTIJM2T.js';
3
4
  import '../chunk-2YTOOH3A.js';
4
5
  import '../chunk-BZFWDIV6.js';
@@ -426,3 +426,13 @@
426
426
  transition: none;
427
427
  }
428
428
  }
429
+
430
+ /*
431
+ * A GROUP THE READER HOLDS NONE OF: the key once, after its label (see
432
+ * `NavGroup`'s `locked`), and its resting rows in the quiet ink, so a closed
433
+ * column reads as closed at a glance without a key on every row. A pointed
434
+ * row and the reader's own still lift to the primary step, as every row does.
435
+ */
436
+ .crewlet-nav-group--locked .crewlet-nav-item__row:not([aria-current]):not(:hover) {
437
+ color: var(--color-text-tertiary);
438
+ }
@@ -1,3 +1,3 @@
1
- export { StatCard } from '../chunk-XO7PUL4F.js';
1
+ export { StatCard } from '../chunk-YPTTSJPM.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -186,6 +186,12 @@
186
186
  * tiles where only some carry one still stands at one height: its leading is
187
187
  * set here and the reserve is exactly one line of it, where a reserve in `em`
188
188
  * was a line shorter than the one a sub actually draws.
189
+ *
190
+ * IT WRAPS, balanced, rather than ending in an ellipsis. The line qualifies
191
+ * the number, so its end is the half that says what the number means, and
192
+ * `nowrap` cut it: "6 seats idle and waiting for ..." on a phone, a caption
193
+ * mid-clause at 1440. A grid of tiles (a StatGroup, or a caller's own) gives
194
+ * every tile in a row one height, so a second line costs no alignment.
189
195
  */
190
196
  .crewlet-statcard__sub {
191
197
  min-height: calc(1em * var(--font-line-height-body));
@@ -194,9 +200,8 @@
194
200
  /* The quiet step, with the label. The line qualifies the number rather than
195
201
  being a second one. */
196
202
  color: var(--color-text-tertiary);
197
- overflow: hidden;
198
- text-overflow: ellipsis;
199
- white-space: nowrap;
203
+ overflow-wrap: anywhere;
204
+ text-wrap: balance;
200
205
  }
201
206
 
202
207
  /*
@@ -1,2 +1,2 @@
1
- export { StatGroup } from '../chunk-BT5H2THK.js';
1
+ export { StatGroup } from '../chunk-OUD75UB2.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -75,6 +75,33 @@
75
75
  border-radius: var(--radius-none);
76
76
  }
77
77
 
78
+ /*
79
+ * A ROW OF TILES SHARES ITS LINES. A tile stacks its label, its number and its
80
+ * sub in a column of its own, so a label that wrapped pushed its own number
81
+ * down and no other: beside a node's peek at 1440, "Behind on config" broke
82
+ * over two lines and its figure sat 18px below the other three. Inside a row
83
+ * each tile is a SUBGRID over the row's lines, one per line the tile renders
84
+ * (StatCard always renders three, an absent sub included), so a line is as
85
+ * tall as the tallest of it across the row and every figure starts together.
86
+ *
87
+ * A LABEL SITS ON ITS NUMBER: where one label in the row takes two lines, the
88
+ * others end at the foot of the label row, one gap above their figure, rather
89
+ * than floating at its top a line away from what they name.
90
+ *
91
+ * These were the engine dashboard's own rules over this component, held there
92
+ * with a note that the kit should carry them; they are the kit's now, with the
93
+ * sub's wrap (see StatCard), which the engine applied to every tile.
94
+ */
95
+ .crewlet-stat-group > .crewlet-statcard {
96
+ display: grid;
97
+ grid-template-rows: subgrid;
98
+ grid-row: span 3;
99
+ }
100
+
101
+ .crewlet-stat-group > .crewlet-statcard > .crewlet-statcard__label {
102
+ align-self: end;
103
+ }
104
+
78
105
  /*
79
106
  * Each tile spans its share of the twelve tracks: the row's `columns`, set on
80
107
  * it as `--crewlet-stat-group-cols`, a row.
@@ -1,5 +1,5 @@
1
- export { Switcher } from '../chunk-6NNY5WBF.js';
2
- import '../chunk-SVGARBDY.js';
1
+ export { Switcher } from '../chunk-JKAGN4V4.js';
2
+ import '../chunk-IAGYPTEJ.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-KHJIEPZV.js';
5
5
  import '../chunk-FYTIJM2T.js';