@crewlethq/ui 0.40.1 → 0.41.1

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.
package/README.md CHANGED
@@ -204,6 +204,14 @@ places:
204
204
  - A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
205
205
  when the content beneath it moves, and every panel anchored inside follows.
206
206
 
207
+ ## Changes in 0.41.1
208
+
209
+ **The rail's search field is compact and stands on the nav's content columns** (`SearchTrigger variant="rail"` in the `AppShell.Rail` search slot). It is 26px tall (the small control step, never under the 24px target) where it was 34px, with 6px inside each end where it had 10px. Its glyph stays on the nav's glyph column, and its shortcut now ends where a row's words end, so the field is 210px wide in a 236px rail where it ran 219px from gutter to gutter. The slot names the pad (`--crewlet-rail-field-pad`), so its inset and the field's pad are one measure; outside the slot the field keeps the trigger's own pad. The slot no longer adds its own 12px under the field, so the nav's top inset (8px) is the one gap between the field and the first row, where it was 20px. The rail's rows start 20px higher. A label longer than the field still truncates before the shortcut does.
210
+
211
+ ## Changes in 0.41.0
212
+
213
+ **The rail's head carries a status** (`AppShell.Rail` `status`, drawn with `AppShell.RailStatus`). An application's own state, such as its engine's, stands compact at the end of the head's line, beside the name: a status dot and, when something stands against it, a count in the foot row's inks (the warning ink with its mark for alarms). The state's words are the status's name and title rather than a line of the rail ("Engine serving, 1 alarm"), so the count is read once, in words. A status that opens a panel is the panel's trigger, as a foot row is (`aria-haspopup`, `aria-expanded` and `aria-controls` reach its button, and a `Popover` anchors to it), and `label` names it where a press does something the state does not say ("Engine signed out. Sign in"). A status nothing presses is a statement with no place in the tab order. It reserves the width of a dot and a two-figure count, and a `BrandLockup` beside it gives up its end inset to the head's gap, so the name truncates at one place whatever the count says, it is a 24px target each way with its focus ring inside its box, and it ends on the nav's gutter, where every row's background ends. It stands in the drawer's head the same way. The foot's doc now names it the place for what a reader reaches for rarely.
214
+
207
215
  ## Changes in 0.40.1
208
216
 
209
217
  **The rail's foot stands on the compact step.** What a reader reaches for rarely (a settings link, a status row, who they are) takes less of the rail's height: the foot's rows are 26px (`--size-control-sm`, through `--crewlet-rail-foot-row`) where they were the nav's 30px, the foot's gap is 2px and its inset 4px where they were 4px and 8px, and the account row spends 2px around its name and detail where it spent 8px. A foot of Settings, an engine row and the account row is 101px tall where it was 133px. Only heights change: every row keeps its order, its columns, its glyphs and its words, the rows above the foot keep their 30px step, and every target still clears 24px, with the targets of neighbouring rows meeting across the gap.
@@ -103,6 +103,7 @@ export declare function AppShell({ sidebar, topbar, banner, footer, mainId, main
103
103
  export declare namespace AppShell {
104
104
  var Rail: typeof AppShellRail;
105
105
  var RailRow: import("react").ForwardRefExoticComponent<AppShellRailRowProps & import("react").RefAttributes<HTMLElement>>;
106
+ var RailStatus: import("react").ForwardRefExoticComponent<AppShellRailStatusProps & import("react").RefAttributes<HTMLElement>>;
106
107
  var Topbar: typeof AppShellTopbar;
107
108
  var Toggle: typeof AppShellToggle;
108
109
  var AccountRow: typeof import("./AccountRow.js").AccountRow;
@@ -122,16 +123,24 @@ export interface AppShellRailProps {
122
123
  */
123
124
  search?: ReactNode;
124
125
  /**
125
- * The foot: what the engine is doing, the theme and density controls. An
126
- * `<AppShell.RailRow>` puts a line there on the rail's own insets, so its
127
- * mark lands on the line every nav glyph above it sits on.
126
+ * A compact status at the end of the head's line, beside the name the head
127
+ * carries: an `<AppShell.RailStatus>`, the application's own state in a
128
+ * dot and a count. It takes its own width, so the name keeps the rest and
129
+ * truncates there, and it stands in the drawer's head the same way.
130
+ */
131
+ status?: ReactNode;
132
+ /**
133
+ * The foot: what a reader reaches for rarely, such as a settings link and
134
+ * their own account row. An `<AppShell.RailRow>` puts a line there on the
135
+ * rail's own insets, so its mark lands on the line every nav glyph above it
136
+ * sits on. A state the application reports belongs in `status`, compact.
128
137
  */
129
138
  footer?: ReactNode;
130
139
  className?: string | undefined;
131
140
  children?: ReactNode;
132
141
  }
133
142
  /** The rail's three regions: a head, a scrolling middle, and a foot. */
134
- export declare function AppShellRail({ header, search, footer, className, children }: AppShellRailProps): import("react").JSX.Element;
143
+ export declare function AppShellRail({ header, search, status, footer, className, children }: AppShellRailProps): import("react").JSX.Element;
135
144
  /**
136
145
  * A figure at the end of a row in the foot, and what it counts.
137
146
  *
@@ -262,6 +271,65 @@ export type AppShellRailRowProps = StaticRailRowProps | ActionRailRowProps;
262
271
  * says whether it is open.
263
272
  */
264
273
  export declare const AppShellRailRow: import("react").ForwardRefExoticComponent<AppShellRailRowProps & import("react").RefAttributes<HTMLElement>>;
274
+ /** What the head's status says, whether or not it is a control. */
275
+ interface RailStatusContent {
276
+ /** The state's mark: a status dot. The status draws no words, so the mark and the count are what is seen. */
277
+ icon: ReactNode;
278
+ /**
279
+ * The state in words, "Engine serving". Not drawn: it is the status's name,
280
+ * read by assistive technology and shown as its title, with the count's
281
+ * words after it ("Engine serving, 1 alarm").
282
+ */
283
+ children: string;
284
+ /** How many of something stands against the state, drawn as a row's count is. */
285
+ count?: RailRowCount | undefined;
286
+ /** A mark after the count, for a state a press resolves: the key beside "sign in". */
287
+ trailing?: ReactNode;
288
+ className?: string | undefined;
289
+ }
290
+ /** A status the head states and nothing presses. */
291
+ export interface StaticRailStatusProps extends RailStatusContent {
292
+ onClick?: undefined;
293
+ label?: undefined;
294
+ 'aria-expanded'?: undefined;
295
+ 'aria-haspopup'?: undefined;
296
+ 'aria-controls'?: undefined;
297
+ }
298
+ /** A status that opens something: the engine's panel. */
299
+ export interface ActionRailStatusProps extends RailStatusContent {
300
+ onClick: MouseEventHandler<HTMLButtonElement>;
301
+ /**
302
+ * Names the control where the state and its count are not what pressing it
303
+ * does ("Engine signed out. Sign in"). It replaces that name, and the title.
304
+ */
305
+ label?: string | undefined;
306
+ /** Whether the panel it opens is open, as a `Popover` or a `Menu` trigger passes it. */
307
+ 'aria-expanded'?: boolean | undefined;
308
+ /** What it opens. */
309
+ 'aria-haspopup'?: AriaAttributes['aria-haspopup'];
310
+ /** The panel it opens, while it is open. */
311
+ 'aria-controls'?: string | undefined;
312
+ }
313
+ export type AppShellRailStatusProps = StaticRailStatusProps | ActionRailStatusProps;
314
+ /**
315
+ * The application's state, compact, at the end of the rail head's line.
316
+ *
317
+ * A FOOT ROW'S MEANING IN A DOT AND A COUNT. The state's words are its name
318
+ * and its title rather than a line of the rail ("Engine serving, 1 alarm"),
319
+ * so a sighted reader reads the dot and the count, and hovers for the words,
320
+ * and a screen reader is told what a foot row would have told it. The count
321
+ * is the row's own (`RailRowCount`), in the same inks.
322
+ *
323
+ * IT TAKES A FIXED FLOOR OF WIDTH, a dot and a two-figure count, so the
324
+ * name beside it truncates at one place whatever the count says: the name
325
+ * does not lose a character when an alarm is raised. A count wider than the
326
+ * floor still grows the status rather than being cut.
327
+ *
328
+ * A STATUS THAT OPENS A PANEL IS ITS TRIGGER, as the foot's row is: the
329
+ * element goes to `ref` and the popup attributes reach the button, so a
330
+ * `Popover` anchors to it and it says whether the panel is open.
331
+ */
332
+ export declare const AppShellRailStatus: import("react").ForwardRefExoticComponent<AppShellRailStatusProps & import("react").RefAttributes<HTMLElement>>;
265
333
  export interface AppShellToggleProps {
266
334
  className?: string | undefined;
267
335
  }
@@ -1,6 +1,6 @@
1
1
  import '../HitArea/HitArea.css';
2
2
  import './AppShell.css';
3
- export { AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './AppShell.js';
3
+ export { AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell } from './AppShell.js';
4
4
  export { AccountRow } from './AccountRow.js';
5
5
  export type { AccountRowMenu, AccountRowProps } from './AccountRow.js';
6
- export type { ActionRailRowProps, AppShellContextValue, AppShellProps, AppShellRailProps, AppShellRailRowProps, AppShellToggleProps, AppShellTopbarProps, RailRowCount, StaticRailRowProps, } from './AppShell.js';
6
+ export type { ActionRailRowProps, ActionRailStatusProps, AppShellContextValue, AppShellProps, AppShellRailProps, AppShellRailRowProps, AppShellRailStatusProps, AppShellToggleProps, AppShellTopbarProps, RailRowCount, StaticRailRowProps, StaticRailStatusProps, } from './AppShell.js';
@@ -1,4 +1,4 @@
1
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-GR4YM7HT.js';
1
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-NURXCBCW.js';
2
2
  import '../chunk-RTPQDNW3.js';
3
3
  import '../chunk-D6FEHY5G.js';
4
4
  import '../chunk-OMV5W53A.js';
@@ -156,18 +156,83 @@
156
156
  }
157
157
 
158
158
  /*
159
- * THE RAIL'S FIELD ON THE NAV'S COLUMNS. It stands on the nav's gutter, so
160
- * its right edge is where every row's background ends; and its glyph stands
161
- * on the nav's glyph column: a row's glyph is the gutter and the row's pad
162
- * in, the field's is the gutter, its own 1px edge and its pad
163
- * (`SearchTrigger`'s two steps and a half), so the inset at its start makes
164
- * up the difference from those measures.
159
+ * THE HEAD'S STATUS, at the end of the name's line (`AppShell.RailStatus`):
160
+ * the application's state as a dot and a count, its words in its name and
161
+ * title. It ends on the nav's gutter, where every row's background ends, and
162
+ * it reserves the width of a dot and a two-figure count, so the name beside
163
+ * it truncates at one place whether the engine is healthy or has alarms.
164
+ */
165
+ .crewlet-app-shell__rail-status {
166
+ display: flex;
167
+ flex: none;
168
+ align-items: center;
169
+ justify-content: flex-end;
170
+ min-width: calc(var(--size-target-min) * 2 + var(--spacing-1));
171
+ margin-inline-end: var(--size-nav-gutter);
172
+ }
173
+
174
+ /* A lockup beside a status gives up its end inset: the head's gap parts the
175
+ two, and the inset is what kept a lockup alone on its line off the edge. */
176
+ .crewlet-app-shell__rail-head:has(> .crewlet-app-shell__rail-status) > .crewlet-brand {
177
+ padding-inline-end: 0;
178
+ }
179
+
180
+ /* The dot and the count on one compact target: the 24px floor each way. */
181
+ .crewlet-app-shell__rail-status-mark {
182
+ display: inline-flex;
183
+ align-items: center;
184
+ justify-content: center;
185
+ gap: calc(var(--spacing-1) + var(--spacing-1) / 2);
186
+ min-width: var(--size-target-min);
187
+ min-height: var(--size-target-min);
188
+ margin: 0;
189
+ padding: 0 var(--spacing-1);
190
+ border: 0;
191
+ border-radius: var(--radius-md);
192
+ background: transparent;
193
+ color: var(--color-text-secondary);
194
+ font: inherit;
195
+ }
196
+
197
+ .crewlet-app-shell__rail-status-icon,
198
+ .crewlet-app-shell__rail-status-trailing {
199
+ display: inline-flex;
200
+ align-items: center;
201
+ }
202
+
203
+ .crewlet-app-shell__rail-status-mark--action {
204
+ cursor: pointer;
205
+ transition: background var(--motion-duration-fast) var(--motion-easing-default);
206
+ }
207
+
208
+ /* Open is pointed at, as the foot's row draws it: the lift stays while the panel is open. */
209
+ .crewlet-app-shell__rail-status-mark--action:hover,
210
+ .crewlet-app-shell__rail-status-mark--action[aria-expanded='true'] {
211
+ background: var(--color-surface-hover);
212
+ }
213
+
214
+ /* Inside its own box, so the ring is never cut by the head or the drawer's edge. */
215
+ .crewlet-app-shell__rail-status-mark--action:focus-visible {
216
+ outline: 2px solid var(--color-focus);
217
+ outline-offset: var(--size-focus-ring-inset-offset);
218
+ }
219
+
220
+ /*
221
+ * THE RAIL'S FIELD ON THE NAV'S CONTENT COLUMNS, compact. Its glyph stands on
222
+ * the nav's glyph column and its shortcut ends where a row's words can end:
223
+ * a row's content is the gutter and the row's pad in from each edge, the
224
+ * field's is the slot's inset, its own 1px edge and its pad
225
+ * (`--crewlet-rail-field-pad`, which the rail variant of `SearchTrigger`
226
+ * takes), so the inset at each end makes up the difference. Standing on the
227
+ * rows' content rather than on their backgrounds' edges, the field is
228
+ * narrower than a row, a field in the rail rather than a bar across it.
229
+ *
230
+ * And it is held off the nav by the nav's own top inset alone, one step, so
231
+ * the field and the rows read as one group with the field first.
165
232
  */
166
233
  .crewlet-app-shell__rail-search {
167
- padding: 0 var(--size-nav-gutter) var(--spacing-3);
168
- padding-inline-start: calc(
169
- var(--size-nav-gutter) + var(--size-nav-row-pad) - (var(--spacing-2) + var(--spacing-1) / 2) - 1px
170
- );
234
+ --crewlet-rail-field-pad: calc(var(--spacing-1) + var(--spacing-1) / 2);
235
+ padding: 0 calc(var(--size-nav-gutter) + var(--size-nav-row-pad) - var(--crewlet-rail-field-pad) - 1px);
171
236
  }
172
237
 
173
238
  /* The same gutter the nav takes, so what the foot says lines up with the rows
@@ -700,7 +765,8 @@
700
765
  .crewlet-app-shell__rail,
701
766
  .crewlet-app-shell__rail[data-open='true'],
702
767
  .crewlet-app-shell__rail-row--action,
703
- .crewlet-app-shell__rail-foot > .crewlet-btn {
768
+ .crewlet-app-shell__rail-foot > .crewlet-btn,
769
+ .crewlet-app-shell__rail-status-mark--action {
704
770
  transition: none;
705
771
  }
706
772
  }
@@ -1,13 +1,13 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-QRKT4XTT.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-H6CEFQTR.js';
2
2
  import '../chunk-HOXGBLEY.js';
3
- import '../chunk-UB6MLXUL.js';
3
+ import '../chunk-RFFXB3PR.js';
4
4
  import '../chunk-FXBGEANQ.js';
5
5
  import '../chunk-STJ7QBC3.js';
6
6
  import '../chunk-DTIW4CHZ.js';
7
7
  import '../chunk-IAGYPTEJ.js';
8
8
  import '../chunk-7KHM2FZH.js';
9
- import '../chunk-KHJIEPZV.js';
10
9
  import '../chunk-GXQ3B46I.js';
10
+ import '../chunk-KHJIEPZV.js';
11
11
  import '../chunk-NR4CPM4T.js';
12
12
  import '../chunk-AXS6MBNH.js';
13
13
  import '../chunk-3CZ7XAVY.js';
@@ -1,6 +1,6 @@
1
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-UB6MLXUL.js';
2
- import '../chunk-KHJIEPZV.js';
1
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-RFFXB3PR.js';
3
2
  import '../chunk-GXQ3B46I.js';
3
+ import '../chunk-KHJIEPZV.js';
4
4
  import '../chunk-OMV5W53A.js';
5
5
  import '../chunk-H5XTJ7GJ.js';
6
6
  import '../chunk-OG6CL3EB.js';
@@ -1,4 +1,4 @@
1
- export { RichEditor, preloadRichEditor } from '../chunk-X3UYTAOG.js';
1
+ export { RichEditor, preloadRichEditor } from '../chunk-PFZOFAQ6.js';
2
2
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
3
3
  import '../chunk-BAKPMH3S.js';
4
4
  import '../chunk-SZZRIHGT.js';
@@ -1,2 +1,2 @@
1
- export { SearchTrigger } from '../chunk-6DRDCT22.js';
1
+ export { SearchTrigger } from '../chunk-YZR57QGE.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -27,16 +27,18 @@
27
27
  }
28
28
 
29
29
  /*
30
- * THE RAIL'S FIELD: the full width of the sidebar, on the SHEET's ground, and
31
- * a step taller than a control. It is the rail's one field and the first
32
- * thing in it under the company's name, and the design stands it at 34px,
33
- * the medium control and one scale step, so it reads as the way in rather
34
- * than as one more button.
30
+ * THE RAIL'S FIELD: the width of the slot it stands in, on the SHEET's
31
+ * ground, on the rail's compact step (the small control, 26px, never under
32
+ * the 24px target), with a tighter pad at each end. The rail's search slot
33
+ * names the pad (`--crewlet-rail-field-pad`), so its inset and the field's
34
+ * pad are one measure and the glyph lands on the nav's glyph column; outside
35
+ * that slot the field keeps the trigger's own pad.
35
36
  */
36
37
  .crewlet-search-trigger--rail {
37
38
  display: flex;
38
39
  width: 100%;
39
- height: calc(var(--size-control-md) + var(--spacing-1));
40
+ height: var(--size-control-sm);
41
+ padding-inline: var(--crewlet-rail-field-pad, calc(var(--spacing-2) + var(--spacing-1) / 2));
40
42
  background: var(--color-surface-background);
41
43
  }
42
44
 
@@ -1,9 +1,9 @@
1
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-DKNBGL26.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
7
  import '../chunk-66X5WDKE.js';
8
8
  import '../chunk-LFSIKGRQ.js';
9
9
  import '../chunk-Z7JYG5TF.js';
@@ -1,8 +1,8 @@
1
- export { Switcher } from '../chunk-JKAGN4V4.js';
1
+ export { Switcher } from '../chunk-UVBHK6IU.js';
2
2
  import '../chunk-IAGYPTEJ.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
- import '../chunk-KHJIEPZV.js';
5
4
  import '../chunk-FYTIJM2T.js';
5
+ import '../chunk-KHJIEPZV.js';
6
6
  import '../chunk-TEUQWOWZ.js';
7
7
  import '../chunk-TYONQSOK.js';
8
8
  import '../chunk-PQADV6P6.js';
@@ -1,8 +1,8 @@
1
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-YPMGP2X4.js';
1
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-HQAGGQWJ.js';
2
2
  import '../chunk-XQZ6EWOE.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
- import '../chunk-KHJIEPZV.js';
5
4
  import '../chunk-GXQ3B46I.js';
5
+ import '../chunk-KHJIEPZV.js';
6
6
  import '../chunk-TYONQSOK.js';
7
7
  import '../chunk-PQADV6P6.js';
8
8
  import '../chunk-OMV5W53A.js';
@@ -1,5 +1,5 @@
1
1
  import { PageHeader } from './chunk-HOXGBLEY.js';
2
- import { DateTimePicker } from './chunk-UB6MLXUL.js';
2
+ import { DateTimePicker } from './chunk-RFFXB3PR.js';
3
3
  import { DataTable } from './chunk-FXBGEANQ.js';
4
4
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
5
5
  import { Popover } from './chunk-KHJIEPZV.js';
@@ -6,7 +6,7 @@ import { IconButton } from './chunk-4FQT6ZAY.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './HitArea-QUOS6ZDJ.css';
9
- import './AppShell-VE2MAV42.css';
9
+ import './AppShell-3R4ZU4ND.css';
10
10
  import { createContext, forwardRef, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
11
11
  import { breakpoint } from '@crewlethq/tokens';
12
12
  import { ChevronUpGlyph, ChevronsUpDownGlyph, ChevronRightGlyph, MenuGlyph } from '@crewlethq/icons/glyphs';
@@ -231,9 +231,12 @@ function ShellDrawer({
231
231
  }
232
232
  );
233
233
  }
234
- function AppShellRail({ header, search, footer, className, children }) {
234
+ function AppShellRail({ header, search, status, footer, className, children }) {
235
235
  return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-app-shell__rail-inner", className), children: [
236
- header ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-head", children: header }) : null,
236
+ header || status ? /* @__PURE__ */ jsxs("div", { className: "crewlet-app-shell__rail-head", children: [
237
+ header,
238
+ status ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-status", children: status }) : null
239
+ ] }) : null,
237
240
  /* @__PURE__ */ jsxs("div", { className: "crewlet-app-shell__rail-body", children: [
238
241
  search ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-search", children: search }) : null,
239
242
  children
@@ -241,6 +244,25 @@ function AppShellRail({ header, search, footer, className, children }) {
241
244
  footer ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-foot", children: footer }) : null
242
245
  ] });
243
246
  }
247
+ function countWords(count) {
248
+ return `, ${String(count.value)} ${count.label}`;
249
+ }
250
+ function RailCountFigure({ count }) {
251
+ return /* @__PURE__ */ jsxs(
252
+ "span",
253
+ {
254
+ className: cx(
255
+ "crewlet-app-shell__rail-row-count",
256
+ count.tone === "warning" && "crewlet-app-shell__rail-row-count--warning"
257
+ ),
258
+ "aria-hidden": true,
259
+ children: [
260
+ count.mark ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-count-mark", children: count.mark }) : null,
261
+ count.value
262
+ ]
263
+ }
264
+ );
265
+ }
244
266
  function opensSomething(haspopup) {
245
267
  return haspopup !== void 0 && haspopup !== false && haspopup !== "false";
246
268
  }
@@ -265,7 +287,7 @@ var AppShellRailRow = forwardRef(function AppShellRailRow2({
265
287
  /* @__PURE__ */ jsxs("span", { className: "crewlet-app-shell__rail-row-text", children: [
266
288
  /* @__PURE__ */ jsxs("span", { className: "crewlet-app-shell__rail-row-label", children: [
267
289
  children,
268
- count ? /* @__PURE__ */ jsx(VisuallyHidden, { children: `, ${String(count.value)} ${count.label}` }) : null
290
+ count ? /* @__PURE__ */ jsx(VisuallyHidden, { children: countWords(count) }) : null
269
291
  ] }),
270
292
  block ? /* @__PURE__ */ jsxs(Fragment, { children: [
271
293
  " ",
@@ -274,20 +296,7 @@ var AppShellRailRow = forwardRef(function AppShellRailRow2({
274
296
  ] }),
275
297
  count ? /* @__PURE__ */ jsxs(Fragment, { children: [
276
298
  " ",
277
- /* @__PURE__ */ jsxs(
278
- "span",
279
- {
280
- className: cx(
281
- "crewlet-app-shell__rail-row-count",
282
- count.tone === "warning" && "crewlet-app-shell__rail-row-count--warning"
283
- ),
284
- "aria-hidden": true,
285
- children: [
286
- count.mark ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-count-mark", children: count.mark }) : null,
287
- count.value
288
- ]
289
- }
290
- )
299
+ /* @__PURE__ */ jsx(RailCountFigure, { count })
291
300
  ] }) : null,
292
301
  trailing ? /* @__PURE__ */ jsxs(Fragment, { children: [
293
302
  " ",
@@ -315,6 +324,47 @@ var AppShellRailRow = forwardRef(function AppShellRailRow2({
315
324
  }
316
325
  );
317
326
  });
327
+ var AppShellRailStatus = forwardRef(function AppShellRailStatus2({
328
+ icon,
329
+ children,
330
+ count,
331
+ trailing,
332
+ onClick,
333
+ label,
334
+ className,
335
+ "aria-expanded": expanded,
336
+ "aria-haspopup": haspopup,
337
+ "aria-controls": controls
338
+ }, ref) {
339
+ const name = label ?? `${children}${count ? countWords(count) : ""}`;
340
+ const marks = /* @__PURE__ */ jsxs(Fragment, { children: [
341
+ /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-status-icon", "aria-hidden": true, children: icon }),
342
+ count ? /* @__PURE__ */ jsx(RailCountFigure, { count }) : null,
343
+ trailing ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-status-trailing", "aria-hidden": true, children: trailing }) : null
344
+ ] });
345
+ const shape = cx("crewlet-app-shell__rail-status-mark", className);
346
+ if (onClick === void 0) {
347
+ return /* @__PURE__ */ jsxs("span", { ref, className: shape, title: name, children: [
348
+ marks,
349
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: name })
350
+ ] });
351
+ }
352
+ return /* @__PURE__ */ jsx(
353
+ "button",
354
+ {
355
+ ref,
356
+ type: "button",
357
+ className: cx(shape, "crewlet-app-shell__rail-status-mark--action", HIT_AREA_CLASS),
358
+ "aria-label": name,
359
+ title: name,
360
+ "aria-expanded": expanded,
361
+ "aria-haspopup": haspopup,
362
+ "aria-controls": controls,
363
+ onClick,
364
+ children: marks
365
+ }
366
+ );
367
+ });
318
368
  function AppShellToggle({ className }) {
319
369
  const { drawerOpen, toggleDrawer, railId, toggleLabel, hasRail } = useAppShell();
320
370
  if (!hasRail) return null;
@@ -341,8 +391,9 @@ function AppShellTopbar({ title, titleId, actions, className, children, ...rest
341
391
  }
342
392
  AppShell.Rail = AppShellRail;
343
393
  AppShell.RailRow = AppShellRailRow;
394
+ AppShell.RailStatus = AppShellRailStatus;
344
395
  AppShell.Topbar = AppShellTopbar;
345
396
  AppShell.Toggle = AppShellToggle;
346
397
  AppShell.AccountRow = AccountRow;
347
398
 
348
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell };
399
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell };
@@ -9,7 +9,7 @@ import { jsx } from 'react/jsx-runtime';
9
9
  var engine = null;
10
10
  var loading = null;
11
11
  function loadEngine() {
12
- loading ??= import('./Editor-QV4JP242.js').then(
12
+ loading ??= import('./Editor-IRDQ3JDZ.js').then(
13
13
  (module) => {
14
14
  engine = module.Editor;
15
15
  return engine;
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './SearchTrigger-KIZLWBEH.css';
2
+ import './SearchTrigger-UAKWW5HT.css';
3
3
  import { forwardRef } from 'react';
4
4
  import { SearchGlyph } from '@crewlethq/icons/glyphs';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,19 +1,19 @@
1
1
  import '../chunk-S3QTFUJX.js';
2
2
  export { WidgetFrame } from '../chunk-DFK5EQTU.js';
3
- export { Prose } from '../chunk-JCSA3XVH.js';
4
3
  export { ElementToPngError, elementToPng, parseCsv, serializeElement, toCsv } from '../chunk-FEJANUZK.js';
4
+ export { Prose } from '../chunk-JCSA3XVH.js';
5
5
  export { ToastProvider, Toaster, useToast } from '../chunk-AC22RZKC.js';
6
6
  export { TreeCanvas } from '../chunk-5BUOMF6N.js';
7
7
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-JSWOXRRE.js';
8
8
  export { VersionTimeline } from '../chunk-NQCY44B3.js';
9
9
  export { ThemeGallery } from '../chunk-E4BOVKNJ.js';
10
10
  export { ThemeSwatch } from '../chunk-MNFU2RNT.js';
11
- export { ThemeToggle } from '../chunk-NP2C4Y4E.js';
12
11
  export { DensitySwitcher, ThemeSwitcher } from '../chunk-KWWP3D7M.js';
12
+ export { ThemeToggle } from '../chunk-NP2C4Y4E.js';
13
13
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-Z24ZUSTX.js';
14
14
  export { TileGrid } from '../chunk-NNTO3TNC.js';
15
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-YPMGP2X4.js';
16
- export { Switcher } from '../chunk-JKAGN4V4.js';
15
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-HQAGGQWJ.js';
16
+ export { Switcher } from '../chunk-UVBHK6IU.js';
17
17
  export { Table } from '../chunk-V2N3BMOT.js';
18
18
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-4BJK7FE5.js';
19
19
  export { TagsInput } from '../chunk-BH52LIY6.js';
@@ -23,12 +23,12 @@ export { StatCard } from '../chunk-YPTTSJPM.js';
23
23
  export { StatGroup } from '../chunk-OUD75UB2.js';
24
24
  export { Stepper } from '../chunk-5QWIJSQM.js';
25
25
  export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-GFYQKMQZ.js';
26
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-DKNBGL26.js';
26
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-3PR65I3H.js';
27
27
  export { TagGroup } from '../chunk-O2EGEONV.js';
28
28
  export { matchesShortcut, useShortcut } from '../chunk-AYHIF6DH.js';
29
29
  export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-7CGPPAYR.js';
30
30
  export { SlideFilmstrip } from '../chunk-FBW3Q2OY.js';
31
- export { SearchTrigger } from '../chunk-6DRDCT22.js';
31
+ export { SearchTrigger } from '../chunk-YZR57QGE.js';
32
32
  export { SectionFrame, SectionFrameBody, SectionFrameNav } from '../chunk-INVSUFJK.js';
33
33
  export { NavGroup, NavItem, SidebarNav } from '../chunk-E7QLG3PG.js';
34
34
  export { SegmentedMeter, segmentedMeterLabel } from '../chunk-4AK52VHB.js';
@@ -39,15 +39,15 @@ export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } fro
39
39
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from '../chunk-ZAJHGDAW.js';
40
40
  export { RelatedRow } from '../chunk-ZUTUI27P.js';
41
41
  export { Text } from '../chunk-IKBK4A5O.js';
42
+ export { RichEditor, preloadRichEditor } from '../chunk-PFZOFAQ6.js';
43
+ export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
42
44
  export { canonicalMarkdown, roundTripMarkdown } from '../chunk-SWD4QBL6.js';
43
45
  import '../chunk-QH6VYJ3X.js';
44
- export { RichEditor, preloadRichEditor } from '../chunk-X3UYTAOG.js';
45
- export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
46
46
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from '../chunk-356JNSER.js';
47
+ export { PresenceStack } from '../chunk-3LYWD3BO.js';
47
48
  export { PresenterView, formatStopwatch } from '../chunk-UXYEOWG5.js';
48
49
  export { SLIDE_NAV_LABELS, SlideNav } from '../chunk-6VOS2GMB.js';
49
50
  export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from '../chunk-RMEBFYL7.js';
50
- export { PresenceStack } from '../chunk-3LYWD3BO.js';
51
51
  export { PricingCard } from '../chunk-U3ILLCR2.js';
52
52
  export { PrincipalPicker } from '../chunk-D2OL3ZSS.js';
53
53
  export { PropertyList } from '../chunk-T6MXORP5.js';
@@ -65,22 +65,22 @@ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTo
65
65
  export { NewItemsNotice } from '../chunk-PXU6HOZB.js';
66
66
  export { OrgLabel } from '../chunk-ONQKKHON.js';
67
67
  export { FactLine, ObjectHeader, SetByLine } from '../chunk-ODOJJGXH.js';
68
- export { List, ListItem } from '../chunk-NZWX27J7.js';
68
+ export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-XYCADWZN.js';
69
69
  export { LIVE_CURSOR_HIDE_MS, LIVE_CURSOR_REST_MS, LiveCursor } from '../chunk-5XACKNYR.js';
70
70
  export { LIVE_PREVIEW_DWELL_MS, LIVE_PREVIEW_MARGIN, LIVE_PREVIEW_MAX, LIVE_PREVIEW_MAX_FRAMES, LIVE_PREVIEW_RENDER_MS, LIVE_PREVIEW_STILLS_KEPT, LivePreview, LivePreviewBudgetProvider, PREVIEW_FILL_MAX_CUT, PreviewScale, createLivePreviewBudget, createLivePreviewStills, immediately, perFrame, useLivePreview } from '../chunk-CQFQGAZI.js';
71
71
  export { LockedLabel } from '../chunk-OHGH7O6T.js';
72
72
  export { MARKDOWN_CALLOUT_NAMES, MARKDOWN_CALLOUT_TONES, markdownBreaks, markdownClosesFence, markdownCodeText, markdownFenceOf, markdownHeadingOf, markdownInline, markdownLines, parseMarkdown, parseMarkdownSpans, safeHref } from '../chunk-BAKPMH3S.js';
73
73
  export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-EX22Q5SH.js';
74
+ export { LAYERS_LIST_LABELS, LayersList } from '../chunk-M6NQ4XGK.js';
74
75
  export { AutoGrid, Inline, Spacer, Stack } from '../chunk-ZAC7SKUN.js';
75
76
  export { Link } from '../chunk-FBSEJO2C.js';
76
77
  export { LinkInterstitial, openExternal } from '../chunk-N3TFYBN3.js';
77
- export { LAYERS_LIST_LABELS, LayersList } from '../chunk-M6NQ4XGK.js';
78
+ export { List, ListItem } from '../chunk-NZWX27J7.js';
78
79
  export { ListInput } from '../chunk-WYYCPV46.js';
79
- import '../chunk-MICRGE3J.js';
80
+ export { Highlight, highlightRanges, highlightTerms } from '../chunk-H6VKCIWV.js';
80
81
  import '../chunk-FFMCMSJB.js';
81
82
  export { IconTile } from '../chunk-IXJHTFXG.js';
82
83
  export { ImageUpload } from '../chunk-FWYHRU7M.js';
83
- export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-XYCADWZN.js';
84
84
  export { FactList } from '../chunk-RLJXVFEH.js';
85
85
  export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from '../chunk-THDGBD6Y.js';
86
86
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from '../chunk-UYZZV4DZ.js';
@@ -89,30 +89,29 @@ export { FollowBanner } from '../chunk-OED6LUWE.js';
89
89
  export { DEFAULT_FRAME_THEME, EXTERNAL_URL_MAX, FRAME_BRIDGE, FRAME_MESSAGE, FRAME_ORIGIN_MODES, FRAME_SANDBOX_TOKENS, applyFrameTheme, checkFrameSandbox, externalUrl, frameFragment, frameOriginMatches, frameThemeMessage, httpOrigin, isFocusExit, isFrameNonce, negotiateBridge, parseFrameFragment, portTargetOrigin, readFrameHello, readFramePortMessage, readFrameTheme, readOpenLink } from '../chunk-F6V2PTN6.js';
90
90
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from '../chunk-ZXXDZJQN.js';
91
91
  export { IDLE_AFTER_MS, useFullscreen, useIdle } from '../chunk-W5XCNEZC.js';
92
- export { Highlight, highlightRanges, highlightTerms } from '../chunk-H6VKCIWV.js';
92
+ import '../chunk-MICRGE3J.js';
93
93
  export { DownloadButton } from '../chunk-BEHFTRMZ.js';
94
94
  export { downloadBlob, downloadText, safeFilename, useDownload } from '../chunk-IW55G7XG.js';
95
95
  export { EditingStatus } from '../chunk-TC7DJTXI.js';
96
96
  export { EntityChip } from '../chunk-OSKJZNBT.js';
97
97
  export { ErrorBoundary } from '../chunk-XX2VQE55.js';
98
98
  export { Eyebrow } from '../chunk-RK4XPHVG.js';
99
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-QRKT4XTT.js';
100
- export { PageHeader } from '../chunk-HOXGBLEY.js';
101
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-UB6MLXUL.js';
99
+ export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-HQJ24WPM.js';
100
+ export { Tag } from '../chunk-KYIAFNU7.js';
102
101
  export { DescriptionList, DescriptionListItem } from '../chunk-MFS6F2P7.js';
103
102
  export { DIFF_LIST_LABELS, DiffList } from '../chunk-LFHCXZO5.js';
104
103
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from '../chunk-BVWSLXTY.js';
105
- export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-SYBYFQTY.js';
106
104
  export { Divider } from '../chunk-6KWNXIDE.js';
105
+ export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-SYBYFQTY.js';
107
106
  export { CONFLICT_NOTE_LABELS, ConflictNote } from '../chunk-UO7JZVCO.js';
108
107
  export { Container } from '../chunk-HJO4WCH6.js';
109
108
  export { CursorFlag } from '../chunk-3BYIWOTV.js';
110
109
  export { PresenceRing, presenceHueClass } from '../chunk-I6POAB4V.js';
111
110
  export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, fitGridColumns, parseGridSort } from '../chunk-XIDD7PJO.js';
111
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-H6CEFQTR.js';
112
+ export { PageHeader } from '../chunk-HOXGBLEY.js';
113
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-RFFXB3PR.js';
112
114
  export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-FXBGEANQ.js';
113
- export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-HQJ24WPM.js';
114
- export { Tag } from '../chunk-KYIAFNU7.js';
115
- export { ChoiceButtons } from '../chunk-BWOIUOO3.js';
116
115
  export { ChoiceList } from '../chunk-EAQLI2SO.js';
117
116
  export { CodeBlock } from '../chunk-SEC2GR2V.js';
118
117
  export { CopyButton, Copyable } from '../chunk-W46LPU4R.js';
@@ -125,21 +124,21 @@ export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, use
125
124
  export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-MMPKN7WV.js';
126
125
  export { ConfirmField, confirmMatches } from '../chunk-PEUGPAKH.js';
127
126
  export { InlineCode } from '../chunk-5CLW2CXT.js';
128
- export { CanvasSchematic } from '../chunk-NBWNLYWZ.js';
129
127
  export { CatalogTile } from '../chunk-PCT47E7O.js';
130
128
  export { ChangeMark } from '../chunk-66X5WDKE.js';
131
129
  export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_BOUNDS, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, SHEET_FIT_SAMPLES, SHEET_LABELS, SHEET_ROW_HEIGHT, SHEET_ROW_NUMBER_WIDTH, SheetPendingEdits, TEXT_MAX_DEFAULT, URL_MAX, cellDescription, cellKey, cellSpeech, changeText, changeTime, checkValue, columnOffsets, columnWidth, compareValues, displayText, drawnColumns, editText, editorSide, findOption, findPerson, fitSamples, fittedWidth, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, retypeColumn, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from '../chunk-LFSIKGRQ.js';
132
130
  export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from '../chunk-Z7JYG5TF.js';
133
- import '../chunk-3L5NHASN.js';
131
+ export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from '../chunk-GXQ3B46I.js';
134
132
  export { ActivityStrip, BarList, ChartEmpty, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Histogram, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, histogramTicks, niceScale, useChartHover } from '../chunk-HMVQQEHW.js';
133
+ import '../chunk-3L5NHASN.js';
134
+ export { ChoiceButtons } from '../chunk-BWOIUOO3.js';
135
+ export { Breadcrumb } from '../chunk-VWNC2L6W.js';
136
+ export { KeyChip } from '../chunk-FYTIJM2T.js';
135
137
  export { AvatarPicker } from '../chunk-A44YHLCQ.js';
136
138
  export { HuePicker, HueSwatch } from '../chunk-BA32AVKS.js';
137
139
  export { Popover } from '../chunk-KHJIEPZV.js';
138
140
  export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
139
141
  export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-SNQRGH4A.js';
140
- export { Breadcrumb } from '../chunk-VWNC2L6W.js';
141
- export { KeyChip } from '../chunk-FYTIJM2T.js';
142
- export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from '../chunk-GXQ3B46I.js';
143
142
  export { Callout } from '../chunk-SZZRIHGT.js';
144
143
  export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-C7OKDYBH.js';
145
144
  export { Note } from '../chunk-5SZGKSGL.js';
@@ -147,17 +146,17 @@ export { CanvasToolbar, toolForKey } from '../chunk-B5UHX5UC.js';
147
146
  export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-NR4CPM4T.js';
148
147
  export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-DAERKOOG.js';
149
148
  import '../chunk-LM3ISVJA.js';
149
+ export { CanvasSchematic } from '../chunk-NBWNLYWZ.js';
150
150
  export { ArtifactMakeRow } from '../chunk-R2IBCEU6.js';
151
151
  export { ArtifactNameCell } from '../chunk-P5VGSVWG.js';
152
152
  export { AuthLayout } from '../chunk-S4DREXGM.js';
153
153
  export { BrandLockup } from '../chunk-7KBNFFM3.js';
154
- export { ArrangeFrame, useGridResize } from '../chunk-WMXAX6VA.js';
155
- export { ArrangeGrid } from '../chunk-QBA5B2Z5.js';
156
- export { ArrangeGroup } from '../chunk-M5KZX5JE.js';
157
154
  export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-ZMWXE4GT.js';
158
155
  export { Switch } from '../chunk-A722MUNR.js';
159
156
  export { DEFAULT_REORDER_LABELS, moveKey, useReorder, useReorderLists } from '../chunk-XJ2QEBMM.js';
160
157
  export { Checkbox, CheckboxGroup } from '../chunk-AXS6MBNH.js';
158
+ export { ArrangeFrame, useGridResize } from '../chunk-WMXAX6VA.js';
159
+ export { ArrangeGrid } from '../chunk-QBA5B2Z5.js';
161
160
  export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-2VOHUGUA.js';
162
161
  import '../chunk-OOC7Q67K.js';
163
162
  export { SegmentedControl } from '../chunk-4OK4DX3V.js';
@@ -165,7 +164,6 @@ export { TabPanel, Tabs, tabId } from '../chunk-X4IXXLWM.js';
165
164
  export { StatusDot } from '../chunk-WIATRXEJ.js';
166
165
  import '../chunk-EGMQURBR.js';
167
166
  export { Tooltip } from '../chunk-I33UIUZD.js';
168
- export { ARTIFACT_ICON_WORDS, ArtifactIcon, artifactIconGlyph } from '../chunk-ILDNJHRU.js';
169
167
  export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-U2XAJONO.js';
170
168
  export { Skeleton } from '../chunk-TEUQWOWZ.js';
171
169
  export { PRINCIPAL_KINDS, PrincipalAvatar } from '../chunk-CI3VPIJN.js';
@@ -179,11 +177,12 @@ export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, AVATAR
179
177
  export { ARTIFACT_ACCESSES, ARTIFACT_ACCESS_LABELS, ArtifactAccessGlyph, ArtifactAccessLabel } from '../chunk-BGLKLXL3.js';
180
178
  export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from '../chunk-FWBKMPNR.js';
181
179
  export { Document, DocumentTitle, DocumentTitleField } from '../chunk-PWG3VHRQ.js';
180
+ export { ArrangeGroup } from '../chunk-M5KZX5JE.js';
181
+ export { ARTIFACT_ICON_WORDS, ArtifactIcon, artifactIconGlyph } from '../chunk-ILDNJHRU.js';
182
182
  export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-CE2THTQR.js';
183
183
  export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-KV3ODJXH.js';
184
184
  export { EmptyState } from '../chunk-RA2ULG6H.js';
185
185
  export { Accordion, AccordionItem } from '../chunk-ZNOXQACX.js';
186
- export { ADD_PILL_MS, AddPill } from '../chunk-TROLVEZY.js';
187
186
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-3TXY3PJZ.js';
188
187
  export { Timeline, TimelineItem } from '../chunk-AUQPBL4O.js';
189
188
  export { Section } from '../chunk-3TFDQLW3.js';
@@ -195,9 +194,9 @@ export { Kbd, isApplePlatform, keyGlyph } from '../chunk-SMBKXWML.js';
195
194
  export { DisclosureAnatomy } from '../chunk-FZVJDJFN.js';
196
195
  export { Count } from '../chunk-BHHIIK3M.js';
197
196
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
197
+ export { ADD_PILL_MS, AddPill } from '../chunk-TROLVEZY.js';
198
198
  export { Announcer, announce, useAnnouncer } from '../chunk-RSAQOKH3.js';
199
- export { ArrangeBoard } from '../chunk-QO7QEQKV.js';
200
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-GR4YM7HT.js';
199
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-NURXCBCW.js';
201
200
  export { useMediaMatch } from '../chunk-RTPQDNW3.js';
202
201
  export { Menu } from '../chunk-D6FEHY5G.js';
203
202
  export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, anchorGone, outsideBounds, placePopup, useLayerContainer, viewportBounds } from '../chunk-OMV5W53A.js';
@@ -207,4 +206,5 @@ export { Button, ButtonLink } from '../chunk-OG6CL3EB.js';
207
206
  export { IconButton } from '../chunk-4FQT6ZAY.js';
208
207
  export { FOCUS_MODALITY_ATTRIBUTE, FOCUS_RETURNED_ATTRIBUTE, returnFocus, trackFocusModality, useFocusModality } from '../chunk-NUZHC6MM.js';
209
208
  export { VisuallyHidden } from '../chunk-BZFWDIV6.js';
209
+ export { ArrangeBoard } from '../chunk-QO7QEQKV.js';
210
210
  export { cx } from '../chunk-ODEQTPFM.js';
package/dist/index.js CHANGED
@@ -1,19 +1,19 @@
1
1
  import './chunk-S3QTFUJX.js';
2
2
  export { WidgetFrame } from './chunk-DFK5EQTU.js';
3
- export { Prose } from './chunk-JCSA3XVH.js';
4
3
  export { ElementToPngError, elementToPng, parseCsv, serializeElement, toCsv } from './chunk-FEJANUZK.js';
4
+ export { Prose } from './chunk-JCSA3XVH.js';
5
5
  export { ToastProvider, Toaster, useToast } from './chunk-AC22RZKC.js';
6
6
  export { TreeCanvas } from './chunk-5BUOMF6N.js';
7
7
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from './chunk-JSWOXRRE.js';
8
8
  export { VersionTimeline } from './chunk-NQCY44B3.js';
9
9
  export { ThemeGallery } from './chunk-E4BOVKNJ.js';
10
10
  export { ThemeSwatch } from './chunk-MNFU2RNT.js';
11
- export { ThemeToggle } from './chunk-NP2C4Y4E.js';
12
11
  export { DensitySwitcher, ThemeSwitcher } from './chunk-KWWP3D7M.js';
12
+ export { ThemeToggle } from './chunk-NP2C4Y4E.js';
13
13
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-Z24ZUSTX.js';
14
14
  export { TileGrid } from './chunk-NNTO3TNC.js';
15
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-YPMGP2X4.js';
16
- export { Switcher } from './chunk-JKAGN4V4.js';
15
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-HQAGGQWJ.js';
16
+ export { Switcher } from './chunk-UVBHK6IU.js';
17
17
  export { Table } from './chunk-V2N3BMOT.js';
18
18
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from './chunk-4BJK7FE5.js';
19
19
  export { TagsInput } from './chunk-BH52LIY6.js';
@@ -23,12 +23,12 @@ export { StatCard } from './chunk-YPTTSJPM.js';
23
23
  export { StatGroup } from './chunk-OUD75UB2.js';
24
24
  export { Stepper } from './chunk-5QWIJSQM.js';
25
25
  export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from './chunk-GFYQKMQZ.js';
26
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-DKNBGL26.js';
26
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-3PR65I3H.js';
27
27
  export { TagGroup } from './chunk-O2EGEONV.js';
28
28
  export { matchesShortcut, useShortcut } from './chunk-AYHIF6DH.js';
29
29
  export { SLIDE_COMPARE_LABELS, SlideCompare } from './chunk-7CGPPAYR.js';
30
30
  export { SlideFilmstrip } from './chunk-FBW3Q2OY.js';
31
- export { SearchTrigger } from './chunk-6DRDCT22.js';
31
+ export { SearchTrigger } from './chunk-YZR57QGE.js';
32
32
  export { SectionFrame, SectionFrameBody, SectionFrameNav } from './chunk-INVSUFJK.js';
33
33
  export { NavGroup, NavItem, SidebarNav } from './chunk-E7QLG3PG.js';
34
34
  export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
@@ -39,15 +39,15 @@ export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } fro
39
39
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from './chunk-ZAJHGDAW.js';
40
40
  export { RelatedRow } from './chunk-ZUTUI27P.js';
41
41
  export { Text } from './chunk-IKBK4A5O.js';
42
+ export { RichEditor, preloadRichEditor } from './chunk-PFZOFAQ6.js';
43
+ export { RICH_EDITOR_LABELS, richEditorLabels } from './chunk-CSQTDGTS.js';
42
44
  export { canonicalMarkdown, roundTripMarkdown } from './chunk-SWD4QBL6.js';
43
45
  import './chunk-QH6VYJ3X.js';
44
- export { RichEditor, preloadRichEditor } from './chunk-X3UYTAOG.js';
45
- export { RICH_EDITOR_LABELS, richEditorLabels } from './chunk-CSQTDGTS.js';
46
46
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from './chunk-356JNSER.js';
47
+ export { PresenceStack } from './chunk-3LYWD3BO.js';
47
48
  export { PresenterView, formatStopwatch } from './chunk-UXYEOWG5.js';
48
49
  export { SLIDE_NAV_LABELS, SlideNav } from './chunk-6VOS2GMB.js';
49
50
  export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from './chunk-RMEBFYL7.js';
50
- export { PresenceStack } from './chunk-3LYWD3BO.js';
51
51
  export { PricingCard } from './chunk-U3ILLCR2.js';
52
52
  export { PrincipalPicker } from './chunk-D2OL3ZSS.js';
53
53
  export { PropertyList } from './chunk-T6MXORP5.js';
@@ -65,22 +65,22 @@ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTo
65
65
  export { NewItemsNotice } from './chunk-PXU6HOZB.js';
66
66
  export { OrgLabel } from './chunk-ONQKKHON.js';
67
67
  export { FactLine, ObjectHeader, SetByLine } from './chunk-ODOJJGXH.js';
68
- export { List, ListItem } from './chunk-NZWX27J7.js';
68
+ export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from './chunk-XYCADWZN.js';
69
69
  export { LIVE_CURSOR_HIDE_MS, LIVE_CURSOR_REST_MS, LiveCursor } from './chunk-5XACKNYR.js';
70
70
  export { LIVE_PREVIEW_DWELL_MS, LIVE_PREVIEW_MARGIN, LIVE_PREVIEW_MAX, LIVE_PREVIEW_MAX_FRAMES, LIVE_PREVIEW_RENDER_MS, LIVE_PREVIEW_STILLS_KEPT, LivePreview, LivePreviewBudgetProvider, PREVIEW_FILL_MAX_CUT, PreviewScale, createLivePreviewBudget, createLivePreviewStills, immediately, perFrame, useLivePreview } from './chunk-CQFQGAZI.js';
71
71
  export { LockedLabel } from './chunk-OHGH7O6T.js';
72
72
  export { MARKDOWN_CALLOUT_NAMES, MARKDOWN_CALLOUT_TONES, markdownBreaks, markdownClosesFence, markdownCodeText, markdownFenceOf, markdownHeadingOf, markdownInline, markdownLines, parseMarkdown, parseMarkdownSpans, safeHref } from './chunk-BAKPMH3S.js';
73
73
  export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from './chunk-EX22Q5SH.js';
74
+ export { LAYERS_LIST_LABELS, LayersList } from './chunk-M6NQ4XGK.js';
74
75
  export { AutoGrid, Inline, Spacer, Stack } from './chunk-ZAC7SKUN.js';
75
76
  export { Link } from './chunk-FBSEJO2C.js';
76
77
  export { LinkInterstitial, openExternal } from './chunk-N3TFYBN3.js';
77
- export { LAYERS_LIST_LABELS, LayersList } from './chunk-M6NQ4XGK.js';
78
+ export { List, ListItem } from './chunk-NZWX27J7.js';
78
79
  export { ListInput } from './chunk-WYYCPV46.js';
79
- import './chunk-MICRGE3J.js';
80
+ export { Highlight, highlightRanges, highlightTerms } from './chunk-H6VKCIWV.js';
80
81
  import './chunk-FFMCMSJB.js';
81
82
  export { IconTile } from './chunk-IXJHTFXG.js';
82
83
  export { ImageUpload } from './chunk-FWYHRU7M.js';
83
- export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from './chunk-XYCADWZN.js';
84
84
  export { FactList } from './chunk-RLJXVFEH.js';
85
85
  export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from './chunk-THDGBD6Y.js';
86
86
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from './chunk-UYZZV4DZ.js';
@@ -89,30 +89,29 @@ export { FollowBanner } from './chunk-OED6LUWE.js';
89
89
  export { DEFAULT_FRAME_THEME, EXTERNAL_URL_MAX, FRAME_BRIDGE, FRAME_MESSAGE, FRAME_ORIGIN_MODES, FRAME_SANDBOX_TOKENS, applyFrameTheme, checkFrameSandbox, externalUrl, frameFragment, frameOriginMatches, frameThemeMessage, httpOrigin, isFocusExit, isFrameNonce, negotiateBridge, parseFrameFragment, portTargetOrigin, readFrameHello, readFramePortMessage, readFrameTheme, readOpenLink } from './chunk-F6V2PTN6.js';
90
90
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from './chunk-ZXXDZJQN.js';
91
91
  export { IDLE_AFTER_MS, useFullscreen, useIdle } from './chunk-W5XCNEZC.js';
92
- export { Highlight, highlightRanges, highlightTerms } from './chunk-H6VKCIWV.js';
92
+ import './chunk-MICRGE3J.js';
93
93
  export { DownloadButton } from './chunk-BEHFTRMZ.js';
94
94
  export { downloadBlob, downloadText, safeFilename, useDownload } from './chunk-IW55G7XG.js';
95
95
  export { EditingStatus } from './chunk-TC7DJTXI.js';
96
96
  export { EntityChip } from './chunk-OSKJZNBT.js';
97
97
  export { ErrorBoundary } from './chunk-XX2VQE55.js';
98
98
  export { Eyebrow } from './chunk-RK4XPHVG.js';
99
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-QRKT4XTT.js';
100
- export { PageHeader } from './chunk-HOXGBLEY.js';
101
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-UB6MLXUL.js';
99
+ export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from './chunk-HQJ24WPM.js';
100
+ export { Tag } from './chunk-KYIAFNU7.js';
102
101
  export { DescriptionList, DescriptionListItem } from './chunk-MFS6F2P7.js';
103
102
  export { DIFF_LIST_LABELS, DiffList } from './chunk-LFHCXZO5.js';
104
103
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from './chunk-BVWSLXTY.js';
105
- export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from './chunk-SYBYFQTY.js';
106
104
  export { Divider } from './chunk-6KWNXIDE.js';
105
+ export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from './chunk-SYBYFQTY.js';
107
106
  export { CONFLICT_NOTE_LABELS, ConflictNote } from './chunk-UO7JZVCO.js';
108
107
  export { Container } from './chunk-HJO4WCH6.js';
109
108
  export { CursorFlag } from './chunk-3BYIWOTV.js';
110
109
  export { PresenceRing, presenceHueClass } from './chunk-I6POAB4V.js';
111
110
  export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, fitGridColumns, parseGridSort } from './chunk-XIDD7PJO.js';
111
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-H6CEFQTR.js';
112
+ export { PageHeader } from './chunk-HOXGBLEY.js';
113
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-RFFXB3PR.js';
112
114
  export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-FXBGEANQ.js';
113
- export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from './chunk-HQJ24WPM.js';
114
- export { Tag } from './chunk-KYIAFNU7.js';
115
- export { ChoiceButtons } from './chunk-BWOIUOO3.js';
116
115
  export { ChoiceList } from './chunk-EAQLI2SO.js';
117
116
  export { CodeBlock } from './chunk-SEC2GR2V.js';
118
117
  export { CopyButton, Copyable } from './chunk-W46LPU4R.js';
@@ -125,21 +124,21 @@ export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, use
125
124
  export { COMMENT_THREAD_LABELS, CommentThread } from './chunk-MMPKN7WV.js';
126
125
  export { ConfirmField, confirmMatches } from './chunk-PEUGPAKH.js';
127
126
  export { InlineCode } from './chunk-5CLW2CXT.js';
128
- export { CanvasSchematic } from './chunk-NBWNLYWZ.js';
129
127
  export { CatalogTile } from './chunk-PCT47E7O.js';
130
128
  export { ChangeMark } from './chunk-66X5WDKE.js';
131
129
  export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_BOUNDS, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, SHEET_FIT_SAMPLES, SHEET_LABELS, SHEET_ROW_HEIGHT, SHEET_ROW_NUMBER_WIDTH, SheetPendingEdits, TEXT_MAX_DEFAULT, URL_MAX, cellDescription, cellKey, cellSpeech, changeText, changeTime, checkValue, columnOffsets, columnWidth, compareValues, displayText, drawnColumns, editText, editorSide, findOption, findPerson, fitSamples, fittedWidth, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, retypeColumn, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from './chunk-LFSIKGRQ.js';
132
130
  export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from './chunk-Z7JYG5TF.js';
133
- import './chunk-3L5NHASN.js';
131
+ export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from './chunk-GXQ3B46I.js';
134
132
  export { ActivityStrip, BarList, ChartEmpty, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Histogram, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, histogramTicks, niceScale, useChartHover } from './chunk-HMVQQEHW.js';
133
+ import './chunk-3L5NHASN.js';
134
+ export { ChoiceButtons } from './chunk-BWOIUOO3.js';
135
+ export { Breadcrumb } from './chunk-VWNC2L6W.js';
136
+ export { KeyChip } from './chunk-FYTIJM2T.js';
135
137
  export { AvatarPicker } from './chunk-A44YHLCQ.js';
136
138
  export { HuePicker, HueSwatch } from './chunk-BA32AVKS.js';
137
139
  export { Popover } from './chunk-KHJIEPZV.js';
138
140
  export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from './chunk-AYKXMIOR.js';
139
141
  export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from './chunk-SNQRGH4A.js';
140
- export { Breadcrumb } from './chunk-VWNC2L6W.js';
141
- export { KeyChip } from './chunk-FYTIJM2T.js';
142
- export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from './chunk-GXQ3B46I.js';
143
142
  export { Callout } from './chunk-SZZRIHGT.js';
144
143
  export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from './chunk-C7OKDYBH.js';
145
144
  export { Note } from './chunk-5SZGKSGL.js';
@@ -147,17 +146,17 @@ export { CanvasToolbar, toolForKey } from './chunk-B5UHX5UC.js';
147
146
  export { Toolbar, ToolbarOverflow, ToolbarWide } from './chunk-NR4CPM4T.js';
148
147
  export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from './chunk-DAERKOOG.js';
149
148
  import './chunk-LM3ISVJA.js';
149
+ export { CanvasSchematic } from './chunk-NBWNLYWZ.js';
150
150
  export { ArtifactMakeRow } from './chunk-R2IBCEU6.js';
151
151
  export { ArtifactNameCell } from './chunk-P5VGSVWG.js';
152
152
  export { AuthLayout } from './chunk-S4DREXGM.js';
153
153
  export { BrandLockup } from './chunk-7KBNFFM3.js';
154
- export { ArrangeFrame, useGridResize } from './chunk-WMXAX6VA.js';
155
- export { ArrangeGrid } from './chunk-QBA5B2Z5.js';
156
- export { ArrangeGroup } from './chunk-M5KZX5JE.js';
157
154
  export { ArrangeList, DEFAULT_ARRANGE_LABELS } from './chunk-ZMWXE4GT.js';
158
155
  export { Switch } from './chunk-A722MUNR.js';
159
156
  export { DEFAULT_REORDER_LABELS, moveKey, useReorder, useReorderLists } from './chunk-XJ2QEBMM.js';
160
157
  export { Checkbox, CheckboxGroup } from './chunk-AXS6MBNH.js';
158
+ export { ArrangeFrame, useGridResize } from './chunk-WMXAX6VA.js';
159
+ export { ArrangeGrid } from './chunk-QBA5B2Z5.js';
161
160
  export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from './chunk-2VOHUGUA.js';
162
161
  import './chunk-OOC7Q67K.js';
163
162
  export { SegmentedControl } from './chunk-4OK4DX3V.js';
@@ -165,7 +164,6 @@ export { TabPanel, Tabs, tabId } from './chunk-X4IXXLWM.js';
165
164
  export { StatusDot } from './chunk-WIATRXEJ.js';
166
165
  import './chunk-EGMQURBR.js';
167
166
  export { Tooltip } from './chunk-I33UIUZD.js';
168
- export { ARTIFACT_ICON_WORDS, ArtifactIcon, artifactIconGlyph } from './chunk-ILDNJHRU.js';
169
167
  export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from './chunk-U2XAJONO.js';
170
168
  export { Skeleton } from './chunk-TEUQWOWZ.js';
171
169
  export { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-CI3VPIJN.js';
@@ -179,11 +177,12 @@ export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, AVATAR
179
177
  export { ARTIFACT_ACCESSES, ARTIFACT_ACCESS_LABELS, ArtifactAccessGlyph, ArtifactAccessLabel } from './chunk-BGLKLXL3.js';
180
178
  export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from './chunk-FWBKMPNR.js';
181
179
  export { Document, DocumentTitle, DocumentTitleField } from './chunk-PWG3VHRQ.js';
180
+ export { ArrangeGroup } from './chunk-M5KZX5JE.js';
181
+ export { ARTIFACT_ICON_WORDS, ArtifactIcon, artifactIconGlyph } from './chunk-ILDNJHRU.js';
182
182
  export { ARTIFACT_KINDS, ArtifactKindGlyph } from './chunk-CE2THTQR.js';
183
183
  export { ACCESS_DENIED_REASONS, AccessDeniedCard } from './chunk-KV3ODJXH.js';
184
184
  export { EmptyState } from './chunk-RA2ULG6H.js';
185
185
  export { Accordion, AccordionItem } from './chunk-ZNOXQACX.js';
186
- export { ADD_PILL_MS, AddPill } from './chunk-TROLVEZY.js';
187
186
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from './chunk-3TXY3PJZ.js';
188
187
  export { Timeline, TimelineItem } from './chunk-AUQPBL4O.js';
189
188
  export { Section } from './chunk-3TFDQLW3.js';
@@ -195,9 +194,9 @@ export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
195
194
  export { DisclosureAnatomy } from './chunk-FZVJDJFN.js';
196
195
  export { Count } from './chunk-BHHIIK3M.js';
197
196
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from './chunk-PQADV6P6.js';
197
+ export { ADD_PILL_MS, AddPill } from './chunk-TROLVEZY.js';
198
198
  export { Announcer, announce, useAnnouncer } from './chunk-RSAQOKH3.js';
199
- export { ArrangeBoard } from './chunk-QO7QEQKV.js';
200
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './chunk-GR4YM7HT.js';
199
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell } from './chunk-NURXCBCW.js';
201
200
  export { useMediaMatch } from './chunk-RTPQDNW3.js';
202
201
  export { Menu } from './chunk-D6FEHY5G.js';
203
202
  export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, anchorGone, outsideBounds, placePopup, useLayerContainer, viewportBounds } from './chunk-OMV5W53A.js';
@@ -207,4 +206,5 @@ export { Button, ButtonLink } from './chunk-OG6CL3EB.js';
207
206
  export { IconButton } from './chunk-4FQT6ZAY.js';
208
207
  export { FOCUS_MODALITY_ATTRIBUTE, FOCUS_RETURNED_ATTRIBUTE, returnFocus, trackFocusModality, useFocusModality } from './chunk-NUZHC6MM.js';
209
208
  export { VisuallyHidden } from './chunk-BZFWDIV6.js';
209
+ export { ArrangeBoard } from './chunk-QO7QEQKV.js';
210
210
  export { cx } from './chunk-ODEQTPFM.js';
package/dist/styles.css CHANGED
@@ -702,7 +702,7 @@
702
702
  }
703
703
 
704
704
 
705
- /* AppShell-VE2MAV42.css */
705
+ /* AppShell-3R4ZU4ND.css */
706
706
  /*
707
707
  * The application frame: a rail on the FRAME, and the screen on a SHEET that
708
708
  * floats beside it.
@@ -861,18 +861,83 @@
861
861
  }
862
862
 
863
863
  /*
864
- * THE RAIL'S FIELD ON THE NAV'S COLUMNS. It stands on the nav's gutter, so
865
- * its right edge is where every row's background ends; and its glyph stands
866
- * on the nav's glyph column: a row's glyph is the gutter and the row's pad
867
- * in, the field's is the gutter, its own 1px edge and its pad
868
- * (`SearchTrigger`'s two steps and a half), so the inset at its start makes
869
- * up the difference from those measures.
864
+ * THE HEAD'S STATUS, at the end of the name's line (`AppShell.RailStatus`):
865
+ * the application's state as a dot and a count, its words in its name and
866
+ * title. It ends on the nav's gutter, where every row's background ends, and
867
+ * it reserves the width of a dot and a two-figure count, so the name beside
868
+ * it truncates at one place whether the engine is healthy or has alarms.
869
+ */
870
+ .crewlet-app-shell__rail-status {
871
+ display: flex;
872
+ flex: none;
873
+ align-items: center;
874
+ justify-content: flex-end;
875
+ min-width: calc(var(--size-target-min) * 2 + var(--spacing-1));
876
+ margin-inline-end: var(--size-nav-gutter);
877
+ }
878
+
879
+ /* A lockup beside a status gives up its end inset: the head's gap parts the
880
+ two, and the inset is what kept a lockup alone on its line off the edge. */
881
+ .crewlet-app-shell__rail-head:has(> .crewlet-app-shell__rail-status) > .crewlet-brand {
882
+ padding-inline-end: 0;
883
+ }
884
+
885
+ /* The dot and the count on one compact target: the 24px floor each way. */
886
+ .crewlet-app-shell__rail-status-mark {
887
+ display: inline-flex;
888
+ align-items: center;
889
+ justify-content: center;
890
+ gap: calc(var(--spacing-1) + var(--spacing-1) / 2);
891
+ min-width: var(--size-target-min);
892
+ min-height: var(--size-target-min);
893
+ margin: 0;
894
+ padding: 0 var(--spacing-1);
895
+ border: 0;
896
+ border-radius: var(--radius-md);
897
+ background: transparent;
898
+ color: var(--color-text-secondary);
899
+ font: inherit;
900
+ }
901
+
902
+ .crewlet-app-shell__rail-status-icon,
903
+ .crewlet-app-shell__rail-status-trailing {
904
+ display: inline-flex;
905
+ align-items: center;
906
+ }
907
+
908
+ .crewlet-app-shell__rail-status-mark--action {
909
+ cursor: pointer;
910
+ transition: background var(--motion-duration-fast) var(--motion-easing-default);
911
+ }
912
+
913
+ /* Open is pointed at, as the foot's row draws it: the lift stays while the panel is open. */
914
+ .crewlet-app-shell__rail-status-mark--action:hover,
915
+ .crewlet-app-shell__rail-status-mark--action[aria-expanded='true'] {
916
+ background: var(--color-surface-hover);
917
+ }
918
+
919
+ /* Inside its own box, so the ring is never cut by the head or the drawer's edge. */
920
+ .crewlet-app-shell__rail-status-mark--action:focus-visible {
921
+ outline: 2px solid var(--color-focus);
922
+ outline-offset: var(--size-focus-ring-inset-offset);
923
+ }
924
+
925
+ /*
926
+ * THE RAIL'S FIELD ON THE NAV'S CONTENT COLUMNS, compact. Its glyph stands on
927
+ * the nav's glyph column and its shortcut ends where a row's words can end:
928
+ * a row's content is the gutter and the row's pad in from each edge, the
929
+ * field's is the slot's inset, its own 1px edge and its pad
930
+ * (`--crewlet-rail-field-pad`, which the rail variant of `SearchTrigger`
931
+ * takes), so the inset at each end makes up the difference. Standing on the
932
+ * rows' content rather than on their backgrounds' edges, the field is
933
+ * narrower than a row, a field in the rail rather than a bar across it.
934
+ *
935
+ * And it is held off the nav by the nav's own top inset alone, one step, so
936
+ * the field and the rows read as one group with the field first.
870
937
  */
871
938
  .crewlet-app-shell__rail-search {
872
- padding: 0 var(--size-nav-gutter) var(--spacing-3);
873
- padding-inline-start: calc(
874
- var(--size-nav-gutter) + var(--size-nav-row-pad) - (var(--spacing-2) + var(--spacing-1) / 2) - 1px
875
- );
939
+ --crewlet-rail-field-pad: calc(var(--spacing-1) + var(--spacing-1) / 2);
940
+ padding: 0 calc(var(--size-nav-gutter) + var(--size-nav-row-pad) - var(--crewlet-rail-field-pad) - 1px);
876
941
  }
877
942
 
878
943
  /* The same gutter the nav takes, so what the foot says lines up with the rows
@@ -1405,7 +1470,8 @@
1405
1470
  .crewlet-app-shell__rail,
1406
1471
  .crewlet-app-shell__rail[data-open='true'],
1407
1472
  .crewlet-app-shell__rail-row--action,
1408
- .crewlet-app-shell__rail-foot > .crewlet-btn {
1473
+ .crewlet-app-shell__rail-foot > .crewlet-btn,
1474
+ .crewlet-app-shell__rail-status-mark--action {
1409
1475
  transition: none;
1410
1476
  }
1411
1477
  }
@@ -22865,7 +22931,7 @@ button.crewlet-presence-stack__member:focus-visible {
22865
22931
  }
22866
22932
 
22867
22933
 
22868
- /* SearchTrigger-KIZLWBEH.css */
22934
+ /* SearchTrigger-UAKWW5HT.css */
22869
22935
  /*
22870
22936
  * A button drawn as the field it stands in for.
22871
22937
  *
@@ -22895,16 +22961,18 @@ button.crewlet-presence-stack__member:focus-visible {
22895
22961
  }
22896
22962
 
22897
22963
  /*
22898
- * THE RAIL'S FIELD: the full width of the sidebar, on the SHEET's ground, and
22899
- * a step taller than a control. It is the rail's one field and the first
22900
- * thing in it under the company's name, and the design stands it at 34px,
22901
- * the medium control and one scale step, so it reads as the way in rather
22902
- * than as one more button.
22964
+ * THE RAIL'S FIELD: the width of the slot it stands in, on the SHEET's
22965
+ * ground, on the rail's compact step (the small control, 26px, never under
22966
+ * the 24px target), with a tighter pad at each end. The rail's search slot
22967
+ * names the pad (`--crewlet-rail-field-pad`), so its inset and the field's
22968
+ * pad are one measure and the glyph lands on the nav's glyph column; outside
22969
+ * that slot the field keeps the trigger's own pad.
22903
22970
  */
22904
22971
  .crewlet-search-trigger--rail {
22905
22972
  display: flex;
22906
22973
  width: 100%;
22907
- height: calc(var(--size-control-md) + var(--spacing-1));
22974
+ height: var(--size-control-sm);
22975
+ padding-inline: var(--crewlet-rail-field-pad, calc(var(--spacing-2) + var(--spacing-1) / 2));
22908
22976
  background: var(--color-surface-background);
22909
22977
  }
22910
22978
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.40.1",
3
+ "version": "0.41.1",
4
4
  "description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,8 +42,8 @@
42
42
  "clean": "rm -rf dist src/generated"
43
43
  },
44
44
  "dependencies": {
45
- "@crewlethq/icons": "0.40.1",
46
- "@crewlethq/tokens": "0.40.1",
45
+ "@crewlethq/icons": "0.41.1",
46
+ "@crewlethq/tokens": "0.41.1",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",
@@ -1,5 +1,5 @@
1
- import { schema, readMarkdown, writeMarkdown } from './chunk-QH6VYJ3X.js';
2
1
  import { richEditorLabels } from './chunk-CSQTDGTS.js';
2
+ import { schema, readMarkdown, writeMarkdown } from './chunk-QH6VYJ3X.js';
3
3
  import { safeHref, MARKDOWN_CALLOUT_TONES } from './chunk-BAKPMH3S.js';
4
4
  import { Toolbar } from './chunk-NR4CPM4T.js';
5
5
  import { FormField, Input } from './chunk-TYONQSOK.js';
@@ -1,7 +1,7 @@
1
1
  import { TagGroup } from './chunk-O2EGEONV.js';
2
+ import { Tag } from './chunk-KYIAFNU7.js';
2
3
  import { CursorFlag } from './chunk-3BYIWOTV.js';
3
4
  import { presenceHueClass } from './chunk-I6POAB4V.js';
4
- import { Tag } from './chunk-KYIAFNU7.js';
5
5
  import { ChangeMark } from './chunk-66X5WDKE.js';
6
6
  import { isEmptyValue, displayText, ratingMax, findPerson, findOption, statusTone, editText, textMax, sheetLabels, normalizeValue, sameValue, spokenText, drawnColumns, fitSamples, fittedWidth, columnWidth, SHEET_COLUMN_BOUNDS, sortRows, SHEET_ROW_HEIGHT, cellKey, columnOffsets, SHEET_ROW_NUMBER_WIDTH, rangeOf, presenceByCell, presenceByRow, presenceByColumn, scrollToRow, planClear, visibleRows, cellDescription, nextSort, rowName, inRange, hasPrevious, flagText, toTSV, planPaste, parseTSV, isMod, moveFrom, isTypingKey, editorSide, optionHue, parseText, liveOptions, checkValue } from './chunk-LFSIKGRQ.js';
7
7
  import { presenceLabels } from './chunk-Z7JYG5TF.js';
@@ -1,6 +1,6 @@
1
1
  import { Select } from './chunk-XQZ6EWOE.js';
2
- import { Popover } from './chunk-KHJIEPZV.js';
3
2
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
3
+ import { Popover } from './chunk-KHJIEPZV.js';
4
4
  import { Input } from './chunk-TYONQSOK.js';
5
5
  import { isComposing } from './chunk-H5XTJ7GJ.js';
6
6
  import { Button } from './chunk-OG6CL3EB.js';
@@ -1,5 +1,5 @@
1
- import { Popover } from './chunk-KHJIEPZV.js';
2
1
  import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
2
+ import { Popover } from './chunk-KHJIEPZV.js';
3
3
  import { Button } from './chunk-OG6CL3EB.js';
4
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
5
5
  import { useFocusModality } from './chunk-NUZHC6MM.js';
@@ -1,7 +1,7 @@
1
1
  import { Modal } from './chunk-IAGYPTEJ.js';
2
2
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
3
- import { Popover } from './chunk-KHJIEPZV.js';
4
3
  import { KeyChip, highlightMatch } from './chunk-FYTIJM2T.js';
4
+ import { Popover } from './chunk-KHJIEPZV.js';
5
5
  import { Skeleton } from './chunk-TEUQWOWZ.js';
6
6
  import { Input } from './chunk-TYONQSOK.js';
7
7
  import { announce } from './chunk-RSAQOKH3.js';