@crewlethq/ui 0.95.0 → 0.97.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.
package/README.md CHANGED
@@ -170,8 +170,11 @@ drawn as a ligature, anything loaded from a host, a theme painted on a body
170
170
  class, the decoration step used as text, and a focus rule that turns the
171
171
  outline off without putting one back. A second, literal check refuses a colour,
172
172
  font size, radius, duration or z-index spelled out where a token belongs, a
173
- `color-mix()`, a media query off the breakpoint steps and a hover overlay drawn
174
- on a pseudo element. `npm run lint` in this package runs both over every
173
+ `color-mix()`, a media query off the breakpoint steps, a hover overlay drawn
174
+ on a pseudo element, and a `scrollbar-width` or `scrollbar-color` set outside
175
+ `@supports not selector(::-webkit-scrollbar)`, where Chromium would ignore the
176
+ slim bar `@crewlethq/tokens/css/base` draws and paint its native one (`none`
177
+ and `auto` pass). `npm run lint` in this package runs both over every
175
178
  stylesheet in `src`, and `npx crewlet-css-check <folder>` runs both over an
176
179
  application's own stylesheets.
177
180
 
@@ -1,4 +1,4 @@
1
- export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-ORONAXSF.js';
1
+ export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-CWJLDCB7.js';
2
2
  import '../chunk-PCAT2EFB.js';
3
3
  import '../chunk-JLOESTT2.js';
4
4
  import '../chunk-YJQXESOJ.js';
@@ -208,7 +208,18 @@
208
208
  flex: 1 1 auto;
209
209
  min-height: 0;
210
210
  overflow-y: auto;
211
- scrollbar-color: var(--color-scrollbar) transparent;
211
+ }
212
+
213
+ /* The rail's bar, only where `::-webkit-scrollbar` is not read: set where it
214
+ is, Chromium would draw its native bar instead of the base sheet's slim one. */
215
+ @supports not selector(::-webkit-scrollbar) {
216
+ .crewlet-app-shell__rail-body {
217
+ scrollbar-color: var(--color-scrollbar) transparent;
218
+ }
219
+
220
+ .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-body {
221
+ scrollbar-width: thin;
222
+ }
212
223
  }
213
224
 
214
225
  /*
@@ -1033,7 +1044,6 @@
1033
1044
 
1034
1045
  .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-body {
1035
1046
  padding: var(--spacing-1) 0;
1036
- scrollbar-width: thin;
1037
1047
  }
1038
1048
 
1039
1049
  /*
@@ -1,11 +1,32 @@
1
1
  import type { HTMLAttributes, ReactNode } from 'react';
2
+ /** The room the layout is drawn in: a whole page, or a detail pane beside a list. */
3
+ export type AsideLayoutFit = 'page' | 'pane';
4
+ /**
5
+ * The layout's own width, in rem, from which the aside stands beside the main
6
+ * column, by `fit`. The stylesheet's container queries split at these widths.
7
+ */
8
+ export declare const ASIDE_LAYOUT_SPLIT_REM: Readonly<Record<AsideLayoutFit, number>>;
2
9
  export interface AsideLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
3
10
  /** The page's main column: what the page is about. */
4
11
  children: ReactNode;
5
- /** The column beside it: facts about the subject, how it is used, related places. */
6
- aside: ReactNode;
12
+ /**
13
+ * The column beside it: facts about the subject, how it is used, related
14
+ * places. Left out (or null), the main column stands alone at the full width.
15
+ */
16
+ aside?: ReactNode;
7
17
  /** What the aside is, for a screen reader's landmark: "About the company". */
8
18
  asideLabel: string;
19
+ /**
20
+ * `page` (the default): the aside stands beside the main column from 56rem,
21
+ * 18rem wide. `pane`: from 44rem, 16rem wide and 16px apart, for a detail
22
+ * pane beside a list, such as setup steps beside the form they explain.
23
+ */
24
+ fit?: AsideLayoutFit | undefined;
25
+ /**
26
+ * Beside the main column, the aside's content stays at the scroller's top
27
+ * while the main column scrolls past. For an aside shorter than its scroller.
28
+ */
29
+ sticky?: boolean | undefined;
9
30
  }
10
31
  /**
11
32
  * A page's main column with an aside beside it, each a stack of blocks one
@@ -13,12 +34,15 @@ export interface AsideLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, '
13
34
  *
14
35
  * THE COLUMNS FOLLOW THE ROOM THE PAGE HAS, NOT THE WINDOW. It is a container
15
36
  * query on its own width, because a page beside a navigation rail is narrow
16
- * on a wide screen too: from 56rem the aside stands beside the main column at
17
- * `--crewlet-aside-layout-aside` (18rem by default), and below that it
18
- * follows the main column under one hairline, so a phone reads the subject
19
- * first and its facts after it.
37
+ * on a wide screen too: from 56rem (44rem in a `pane`) the aside stands beside
38
+ * the main column at `--crewlet-aside-layout-aside` (18rem by default, 16rem
39
+ * in a pane), and below that it follows the main column under one hairline,
40
+ * so a phone reads the subject first and its facts after it.
41
+ *
42
+ * THE MAIN COLUMN IS ALWAYS THE FIRST CHILD, so it stays the same element as
43
+ * an aside comes and goes, and nothing in it is drawn afresh.
20
44
  *
21
45
  * THE ASIDE IS A COMPLEMENTARY LANDMARK named by `asideLabel`, so a screen
22
46
  * reader can skip to it or past it.
23
47
  */
24
- export declare function AsideLayout({ children, aside, asideLabel, className, ...rest }: AsideLayoutProps): import("react").JSX.Element;
48
+ export declare function AsideLayout({ children, aside, asideLabel, fit, sticky, className, ...rest }: AsideLayoutProps): import("react").JSX.Element;
@@ -1,3 +1,3 @@
1
1
  import './AsideLayout.css';
2
- export { AsideLayout } from './AsideLayout.js';
3
- export type { AsideLayoutProps } from './AsideLayout.js';
2
+ export { ASIDE_LAYOUT_SPLIT_REM, AsideLayout } from './AsideLayout.js';
3
+ export type { AsideLayoutFit, AsideLayoutProps } from './AsideLayout.js';
@@ -1,2 +1,2 @@
1
- export { AsideLayout } from '../chunk-QOXLP5PE.js';
1
+ export { ASIDE_LAYOUT_SPLIT_REM, AsideLayout } from '../chunk-7UQQEUOT.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,93 @@
1
+ /*
2
+ * AsideLayout: a main column with an aside beside it from 56rem of its own
3
+ * width (44rem in a pane), and after it below that (AsideLayout.tsx).
4
+ */
5
+
6
+ .crewlet-aside-layout {
7
+ container-type: inline-size;
8
+ min-width: 0;
9
+ }
10
+
11
+ .crewlet-aside-layout__columns {
12
+ --crewlet-aside-layout-gap: var(--spacing-7);
13
+
14
+ display: grid;
15
+ grid-template-columns: minmax(0, 1fr);
16
+ align-items: start;
17
+ gap: var(--crewlet-aside-layout-gap);
18
+ }
19
+
20
+ /* EACH COLUMN IS A STACK one step apart, so the blocks in it stand apart
21
+ evenly without each carrying a margin of its own. */
22
+ .crewlet-aside-layout__main,
23
+ .crewlet-aside-layout__aside {
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: var(--spacing-6);
27
+ min-width: 0;
28
+ }
29
+
30
+ /* FOLLOWING THE MAIN COLUMN, the aside is set off by one hairline, so its
31
+ facts read as about the page rather than as more of it. The hairline sits
32
+ midway: the aside takes the gap's own step under it, where the stack's
33
+ smaller step left it 32px under the main column and 24px over the aside. */
34
+ .crewlet-aside-layout__aside {
35
+ --crewlet-aside-layout-stick: static;
36
+
37
+ padding-top: var(--crewlet-aside-layout-gap);
38
+ border-top: 1px solid var(--color-border-default);
39
+ }
40
+
41
+ @container (min-width: 56rem) {
42
+ .crewlet-aside-layout__columns {
43
+ grid-template-columns: minmax(0, 1fr) var(--crewlet-aside-layout-aside, 18rem);
44
+ gap: var(--spacing-8);
45
+ }
46
+
47
+ .crewlet-aside-layout__aside {
48
+ --crewlet-aside-layout-stick: sticky;
49
+
50
+ padding-top: 0;
51
+ border-top: 0;
52
+ }
53
+ }
54
+
55
+ /* A PANE (`fit="pane"`) is narrower than a page by the list beside it: it
56
+ splits sooner, at a narrower aside, one step apart. */
57
+ .crewlet-aside-layout--pane .crewlet-aside-layout__columns {
58
+ --crewlet-aside-layout-gap: var(--spacing-6);
59
+ }
60
+
61
+ @container (min-width: 44rem) {
62
+ .crewlet-aside-layout--pane .crewlet-aside-layout__columns {
63
+ grid-template-columns: minmax(0, 1fr) var(--crewlet-aside-layout-aside, 16rem);
64
+ gap: var(--spacing-4);
65
+ }
66
+
67
+ .crewlet-aside-layout--pane .crewlet-aside-layout__aside {
68
+ --crewlet-aside-layout-stick: sticky;
69
+
70
+ padding-top: 0;
71
+ border-top: 0;
72
+ }
73
+ }
74
+
75
+ /* STICKY (`sticky`): the aside's content as one stack, as tall as itself, so
76
+ it has the aside's length to stick along. Only a split sets the aside's
77
+ `--crewlet-aside-layout-stick`, so it sticks beside the main column alone. */
78
+ .crewlet-aside-layout--sticky > .crewlet-aside-layout__columns {
79
+ align-items: stretch;
80
+ }
81
+
82
+ .crewlet-aside-layout__stick {
83
+ position: var(--crewlet-aside-layout-stick);
84
+ top: 0;
85
+ display: flex;
86
+ flex-direction: column;
87
+ gap: var(--spacing-6);
88
+ }
89
+
90
+ /* ALONE (no aside), the main column is the whole width at every size. */
91
+ .crewlet-aside-layout--alone > .crewlet-aside-layout__columns {
92
+ grid-template-columns: minmax(0, 1fr);
93
+ }
@@ -1,7 +1,7 @@
1
- export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-XJOTW2FB.js';
1
+ export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-5U6XAUYM.js';
2
2
  import '../chunk-KUMHQY2B.js';
3
- import '../chunk-RQFRRPV6.js';
4
3
  import '../chunk-ZWCK4N4L.js';
4
+ import '../chunk-RQFRRPV6.js';
5
5
  import '../chunk-4BEMS6Q7.js';
6
6
  import '../chunk-SJ3EUCFD.js';
7
7
  import '../chunk-U2IQNDDR.js';
@@ -47,6 +47,14 @@ export interface ListProps extends HTMLAttributes<HTMLElement> {
47
47
  * Unset, the words take the row's width, as a feed's do.
48
48
  */
49
49
  measure?: 'normal' | 'wide' | undefined;
50
+ /**
51
+ * Where a `bulleted` or `numbered` list's markers stand. `indented` (the
52
+ * default) gives them a gutter inside the list. `hanging` sets them in the
53
+ * margin before it, so the words line up with the text above and a narrow
54
+ * box keeps its width for them. For a container that keeps that margin free,
55
+ * such as a titled Callout's icon column.
56
+ */
57
+ markers?: 'indented' | 'hanging' | undefined;
50
58
  }
51
59
  /**
52
60
  * The non-tabular list: an activity feed, a set of search results, a
@@ -58,7 +66,7 @@ export interface ListProps extends HTMLAttributes<HTMLElement> {
58
66
  * means nothing. What a feed does want is alignment, which `template` gives it
59
67
  * without the promise.
60
68
  */
61
- export declare function List({ variant, template, density, measure, className, style, children, ...rest }: ListProps): import("react").JSX.Element;
69
+ export declare function List({ variant, template, density, measure, markers, className, style, children, ...rest }: ListProps): import("react").JSX.Element;
62
70
  export declare namespace List {
63
71
  var Item: typeof ListItem;
64
72
  }
@@ -1,3 +1,3 @@
1
- export { List, ListItem } from '../chunk-A7UOYLK3.js';
1
+ export { List, ListItem } from '../chunk-F2ZSFDJZ.js';
2
2
  import '../chunk-UT6CW3C7.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -127,6 +127,13 @@
127
127
  display: list-item;
128
128
  }
129
129
 
130
+ /* HANGING MARKERS stand in the margin before the list, so its words line up
131
+ with the text above rather than one gutter inside it. */
132
+ .crewlet-list--hanging.crewlet-list--bulleted,
133
+ .crewlet-list--hanging.crewlet-list--numbered {
134
+ padding-inline-start: 0;
135
+ }
136
+
130
137
  .crewlet-list--bulleted .crewlet-list__row,
131
138
  .crewlet-list--numbered .crewlet-list__row {
132
139
  min-height: 0;
@@ -1,14 +1,14 @@
1
- export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-I46ZTLDW.js';
1
+ export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-DWQYV5AV.js';
2
2
  import '../chunk-ZDWAIVWL.js';
3
3
  import '../chunk-MY374UUD.js';
4
4
  import '../chunk-5YXMKZUA.js';
5
5
  import '../chunk-LM3ISVJA.js';
6
6
  import '../chunk-YTLWOHOY.js';
7
7
  import '../chunk-XZY6S3UC.js';
8
+ import '../chunk-CVKANYHD.js';
8
9
  import '../chunk-OMV5W53A.js';
9
10
  import '../chunk-TUEM2XIW.js';
10
11
  import '../chunk-4ITETIGZ.js';
11
12
  import '../chunk-UAUP6XGK.js';
12
- import '../chunk-CVKANYHD.js';
13
13
  import '../chunk-UT6CW3C7.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { RoomRow } from '../chunk-Z34W5TM6.js';
2
- import '../chunk-A7UOYLK3.js';
1
+ export { RoomRow } from '../chunk-PQDQ64KY.js';
2
+ import '../chunk-F2ZSFDJZ.js';
3
3
  import '../chunk-UT6CW3C7.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { Switcher } from '../chunk-ET4I3IEA.js';
1
+ export { Switcher } from '../chunk-O3II3KJY.js';
2
2
  import '../chunk-ZXXZESCD.js';
3
3
  import '../chunk-YGRTX67J.js';
4
4
  import '../chunk-HBDA76EZ.js';
@@ -202,7 +202,14 @@ svg.crewlet-switcher-trigger__chevron {
202
202
  overflow-y: auto;
203
203
  overscroll-behavior: contain;
204
204
  padding: var(--spacing-1);
205
- scrollbar-width: thin;
205
+ }
206
+
207
+ /* Thin only where `::-webkit-scrollbar` is not read: set where it is, Chromium
208
+ would draw its native bar instead of the base sheet's slim one. */
209
+ @supports not selector(::-webkit-scrollbar) {
210
+ .crewlet-switcher__scroller {
211
+ scrollbar-width: thin;
212
+ }
206
213
  }
207
214
 
208
215
  .crewlet-switcher__list {
@@ -0,0 +1,35 @@
1
+ import { cx } from './chunk-ODEQTPFM.js';
2
+ import './AsideLayout-SJO7VLPQ.css';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ var ASIDE_LAYOUT_SPLIT_REM = { page: 56, pane: 44 };
6
+ function AsideLayout({
7
+ children,
8
+ aside,
9
+ asideLabel,
10
+ fit = "page",
11
+ sticky = false,
12
+ className,
13
+ ...rest
14
+ }) {
15
+ const alone = aside === null || aside === void 0 || aside === false;
16
+ return /* @__PURE__ */ jsx(
17
+ "div",
18
+ {
19
+ ...rest,
20
+ className: cx(
21
+ "crewlet-aside-layout",
22
+ fit === "pane" && "crewlet-aside-layout--pane",
23
+ sticky && "crewlet-aside-layout--sticky",
24
+ alone && "crewlet-aside-layout--alone",
25
+ className
26
+ ),
27
+ children: /* @__PURE__ */ jsxs("div", { className: "crewlet-aside-layout__columns", children: [
28
+ /* @__PURE__ */ jsx("div", { className: "crewlet-aside-layout__main", children }),
29
+ alone ? null : /* @__PURE__ */ jsx("aside", { className: "crewlet-aside-layout__aside", "aria-label": asideLabel, children: sticky ? /* @__PURE__ */ jsx("div", { className: "crewlet-aside-layout__stick", children: aside }) : aside })
30
+ ] })
31
+ }
32
+ );
33
+ }
34
+
35
+ export { ASIDE_LAYOUT_SPLIT_REM, AsideLayout };
@@ -12,7 +12,7 @@ import { IconButton } from './chunk-UAUP6XGK.js';
12
12
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
13
13
  import { cx } from './chunk-ODEQTPFM.js';
14
14
  import './HitArea-QUOS6ZDJ.css';
15
- import './AppShell-NX5HCD4O.css';
15
+ import './AppShell-24IM2GC3.css';
16
16
  import './ResizeHandle-2UNSZ4ZQ.css';
17
17
  import { createContext, forwardRef, useContext, useSyncExternalStore, useCallback, useId, useState, useRef, useEffect, useLayoutEffect } from 'react';
18
18
  import { breakpoint } from '@crewlethq/tokens';
@@ -1,6 +1,6 @@
1
1
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './List-ZZF6ZHRT.css';
3
+ import './List-BNA4XGMH.css';
4
4
  import { createContext, useContext, Children, isValidElement, cloneElement } from 'react';
5
5
  import { CircleAlertGlyph } from '@crewlethq/icons/glyphs';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -11,6 +11,7 @@ function List({
11
11
  template,
12
12
  density = "comfortable",
13
13
  measure,
14
+ markers = "indented",
14
15
  className,
15
16
  style,
16
17
  children,
@@ -28,6 +29,7 @@ function List({
28
29
  templated && "crewlet-list--templated",
29
30
  density === "compact" && "crewlet-list--compact",
30
31
  measure && `crewlet-list--measure-${measure}`,
32
+ markers === "hanging" && "crewlet-list--hanging",
31
33
  className
32
34
  ),
33
35
  style: templated ? { ...style, "--crewlet-list-template": template } : style,
@@ -10,7 +10,7 @@ import { returnFocus } from './chunk-4ITETIGZ.js';
10
10
  import { announce } from './chunk-2G355KDJ.js';
11
11
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
12
12
  import { cx } from './chunk-ODEQTPFM.js';
13
- import './Switcher-VWQMZUTN.css';
13
+ import './Switcher-ZGRTTVCS.css';
14
14
  import { forwardRef, useId, useRef, useCallback, useMemo, useEffect } from 'react';
15
15
  import { ChevronDownGlyph, SearchGlyph } from '@crewlethq/icons/glyphs';
16
16
  import { breakpoint } from '@crewlethq/tokens';
@@ -1,4 +1,4 @@
1
- import { ListItem } from './chunk-A7UOYLK3.js';
1
+ import { ListItem } from './chunk-F2ZSFDJZ.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './ChatScale-L4SIHSKL.css';
4
4
  import './RoomRow-3OTEY6GK.css';
@@ -9,27 +9,27 @@ export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '
9
9
  export { ThemeToggle } from '../chunk-IPMJGK2Q.js';
10
10
  export { THREAD_SUMMARY_LABELS, ThreadSummary } from '../chunk-JXDJVUWN.js';
11
11
  export { TileGrid } from '../chunk-UFID3DSP.js';
12
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-2BZ2W2YU.js';
13
12
  export { TIME_RANGE_CUSTOM, TIME_RANGE_PICKER_LABELS, TimeRangePicker, timeRangeFieldKey, timeRangeProblem } from '../chunk-T5HZ5AYW.js';
13
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-2BZ2W2YU.js';
14
14
  export { ToastProvider, Toaster, readingDuration, toasterInsetStyle, useToast } from '../chunk-JIBWNHTC.js';
15
15
  export { TagsInput } from '../chunk-3LKOXQWZ.js';
16
16
  export { ThemeGallery } from '../chunk-4TAMRAUQ.js';
17
17
  export { ThemeSwatch } from '../chunk-3XQUEF5C.js';
18
18
  export { DensitySwitcher, ThemeSwitcher } from '../chunk-FRERGOW3.js';
19
19
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-Z24ZUSTX.js';
20
- export { Switcher } from '../chunk-ET4I3IEA.js';
20
+ export { Switcher } from '../chunk-O3II3KJY.js';
21
21
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell, TableTwoLineCell } from '../chunk-QW4LAFTX.js';
22
- export { SlideGrid } from '../chunk-6M2N6ETA.js';
23
22
  export { SOURCE_EDITOR_KEYS, SourceEditor, lineStart } from '../chunk-PW57R4BN.js';
24
23
  export { StatCard } from '../chunk-G5IZGAWS.js';
25
- export { Statement } from '../chunk-MZJKPTA5.js';
26
24
  export { StatGroup } from '../chunk-OUD75UB2.js';
27
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-ZDMZP5H4.js';
28
- export { TagGroup } from '../chunk-UEOEBOBR.js';
25
+ export { Statement } from '../chunk-MZJKPTA5.js';
29
26
  export { matchesShortcut, useShortcut } from '../chunk-LZNPL266.js';
30
27
  import '../chunk-5AHNW5CP.js';
28
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-ZDMZP5H4.js';
29
+ export { TagGroup } from '../chunk-UEOEBOBR.js';
31
30
  export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-XJMES7AE.js';
32
31
  export { SlideFilmstrip } from '../chunk-RO5JU6SN.js';
32
+ export { SlideGrid } from '../chunk-6M2N6ETA.js';
33
33
  export { SegmentedMeter, segmentedMeterLabel } from '../chunk-4AK52VHB.js';
34
34
  export { SelectionBar } from '../chunk-XA2QKGBJ.js';
35
35
  export { SEND_BUTTON_LABELS, SendButton } from '../chunk-T2GC7UAP.js';
@@ -37,19 +37,19 @@ export { SettingsTable, SettingsTableRow } from '../chunk-SOYPCCSJ.js';
37
37
  export { SetupWizard } from '../chunk-IX6CHGM4.js';
38
38
  export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-Y7PPKQFQ.js';
39
39
  export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-WJZTI2WC.js';
40
- export { canonicalMarkdown, roundTripMarkdown } from '../chunk-GBASM5EV.js';
41
- import '../chunk-7CSTEH5I.js';
42
- export { RoomRow } from '../chunk-Z34W5TM6.js';
40
+ export { RoomRow } from '../chunk-PQDQ64KY.js';
43
41
  export { RUN_STATES, RunChip } from '../chunk-MYFSVZKZ.js';
44
42
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from '../chunk-V6WDJUYK.js';
45
43
  export { SearchTrigger } from '../chunk-ERNT3UTB.js';
46
44
  export { SectionFrame, SectionFrameBody, SectionFrameNav } from '../chunk-7BDBO2NP.js';
45
+ export { RelatedRow } from '../chunk-CL3FWLDO.js';
47
46
  export { RecordChip, RecordChipList } from '../chunk-ZPTKAYJK.js';
48
47
  export { REFUSAL_CARD_LABELS, RefusalCard } from '../chunk-GKBH5JHE.js';
49
- export { RelatedRow } from '../chunk-CL3FWLDO.js';
50
48
  export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard } from '../chunk-BMBQ6UMD.js';
51
49
  export { Table } from '../chunk-75NQV4R4.js';
52
50
  export { ReviewList } from '../chunk-AGVGX52B.js';
51
+ export { canonicalMarkdown, roundTripMarkdown } from '../chunk-GBASM5EV.js';
52
+ import '../chunk-7CSTEH5I.js';
53
53
  export { RichEditor, preloadRichEditor } from '../chunk-3P7XS5VT.js';
54
54
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-2DMTW2Y3.js';
55
55
  export { PropertyList } from '../chunk-OPVTNHPH.js';
@@ -60,8 +60,8 @@ export { RAIL_LIST_LABELS, RailList } from '../chunk-M576OESX.js';
60
60
  export { Select } from '../chunk-3IWZVEXA.js';
61
61
  export { NavGroup, NavItem, SidebarNav } from '../chunk-BRK3HXGZ.js';
62
62
  export { Text } from '../chunk-O5CEG7TQ.js';
63
- export { READING_PANE_ENTER, ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from '../chunk-64JNKLLP.js';
64
63
  export { AddReaction, REACTION_BAR_LABELS, ReactionBar, reactionWho } from '../chunk-B3BJ66GQ.js';
64
+ export { READING_PANE_ENTER, ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from '../chunk-64JNKLLP.js';
65
65
  export { PresenceStack } from '../chunk-F7HZYTZT.js';
66
66
  export { PresenterView, formatStopwatch } from '../chunk-LMEMH6DO.js';
67
67
  export { SLIDE_NAV_LABELS, SlideNav } from '../chunk-5AJR6X75.js';
@@ -78,10 +78,11 @@ export { NewItemsNotice } from '../chunk-463DNZXI.js';
78
78
  export { FactLine, ObjectHeader, SetByLine } from '../chunk-AXEXOAZQ.js';
79
79
  export { OPEN_IN_APP_CARD_LABELS, OpenInAppCard } from '../chunk-HZBXC3YD.js';
80
80
  export { OrgNodeDisclosure, OrgNodeLabel, OrgNodeLead } from '../chunk-NKBKHOMU.js';
81
- export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-I46ZTLDW.js';
81
+ export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-DWQYV5AV.js';
82
82
  export { TreeGrid } from '../chunk-ZDWAIVWL.js';
83
83
  export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, placeGroups, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from '../chunk-MY374UUD.js';
84
84
  export { OrgLabel } from '../chunk-5YXMKZUA.js';
85
+ export { MEMBER_PICKER_LABELS, MemberPicker, chosenMembers } from '../chunk-SDHLAW3G.js';
85
86
  export { MentionChip } from '../chunk-PX5BOALQ.js';
86
87
  export { MENTION_MENU_LABELS, MentionMenu, mentionQuery } from '../chunk-G7SAFRSJ.js';
87
88
  export { PersonRow } from '../chunk-6TD2PCZB.js';
@@ -93,21 +94,20 @@ export { LIVE_CURSOR_HIDE_MS, LIVE_CURSOR_REST_MS, LiveCursor } from '../chunk-D
93
94
  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';
94
95
  export { LogoSlot, LogoSlotGroup } from '../chunk-LAZ72JOP.js';
95
96
  export { MARKDOWN_FORMATS, MARKDOWN_TEXT_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-XSJSDNRR.js';
96
- export { MEMBER_PICKER_LABELS, MemberPicker, chosenMembers } from '../chunk-SDHLAW3G.js';
97
97
  export { LAYERS_LIST_LABELS, LayersList } from '../chunk-VUYNNILP.js';
98
98
  export { AutoGrid, Inline, Spacer, Stack } from '../chunk-ZAC7SKUN.js';
99
99
  export { Link } from '../chunk-QF5UNP4T.js';
100
100
  export { LinkCard } from '../chunk-O3MYBNRO.js';
101
101
  import '../chunk-KOJPDCGQ.js';
102
- export { List, ListItem } from '../chunk-A7UOYLK3.js';
103
- export { ListDetail } from '../chunk-P33VNG7Q.js';
104
102
  export { LinkInterstitial, openExternal } from '../chunk-OC6BMY3C.js';
103
+ export { List, ListItem } from '../chunk-F2ZSFDJZ.js';
104
+ export { ListDetail } from '../chunk-P33VNG7Q.js';
105
105
  export { ListInput, withDraft } from '../chunk-PICHV3PC.js';
106
106
  export { INLINE_EDITOR_LABELS, InlineEditor } from '../chunk-CFJ7FQZI.js';
107
107
  export { InlineRef } from '../chunk-JGDCVLD4.js';
108
108
  export { MARKDOWN_CALLOUT_NAMES, MARKDOWN_CALLOUT_TONES, markdownBreaks, markdownClosesFence, markdownCodeText, markdownFenceOf, markdownHeadingOf, markdownInline, markdownLines, parseMarkdown, parseMarkdownSpans, safeHref } from '../chunk-KBZO4B33.js';
109
109
  export { KeyValueRows, keyValueRowsLabels } from '../chunk-SRHLFQ4J.js';
110
- export { IDLE_AFTER_MS, useFullscreen, useIdle } from '../chunk-W5XCNEZC.js';
110
+ export { Highlight, highlightRanges, highlightTerms } from '../chunk-H6VKCIWV.js';
111
111
  import '../chunk-MICRGE3J.js';
112
112
  import '../chunk-FFMCMSJB.js';
113
113
  export { IconTile } from '../chunk-3LI4TRUR.js';
@@ -121,7 +121,7 @@ export { FolderTile, describeFolderContents, folderContentsParts } from '../chun
121
121
  export { FollowBanner } from '../chunk-NTRKC2JV.js';
122
122
  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';
123
123
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from '../chunk-ZXXDZJQN.js';
124
- export { Highlight, highlightRanges, highlightTerms } from '../chunk-H6VKCIWV.js';
124
+ export { IDLE_AFTER_MS, useFullscreen, useIdle } from '../chunk-W5XCNEZC.js';
125
125
  export { EntityChip } from '../chunk-65RFU7LF.js';
126
126
  export { EntityList } from '../chunk-TN3BH3Q4.js';
127
127
  export { ErrorBoundary } from '../chunk-IJ7KLXUZ.js';
@@ -136,10 +136,10 @@ export { downloadBlob, downloadText, safeFilename, useDownload } from '../chunk-
136
136
  export { EditingStatus } from '../chunk-OU6ZSWEJ.js';
137
137
  export { EMOJI_GROUPS, EMOJI_PICKER_COLUMNS, EMOJI_PICKER_LABELS, EmojiPicker, emojiName, searchEmoji } from '../chunk-HZPUMGQV.js';
138
138
  export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-C2HIMGFI.js';
139
- export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-XJOTW2FB.js';
139
+ export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-5U6XAUYM.js';
140
140
  export { STEP_STATES, STEP_STATE_LABELS, StepList, StepStateMark, Stepper, stepDetailPieces } from '../chunk-KUMHQY2B.js';
141
- export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from '../chunk-RQFRRPV6.js';
142
141
  export { REFUSAL_STRIP_LABELS, ReceiptStrip, RefusalStrip } from '../chunk-ZWCK4N4L.js';
142
+ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from '../chunk-RQFRRPV6.js';
143
143
  export { DELIVERY_RECEIPT_LABELS, DeliveryReceipt } from '../chunk-NGJWRR7E.js';
144
144
  export { DescriptionList, DescriptionListItem } from '../chunk-LH4OF7FI.js';
145
145
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from '../chunk-AOFVXE6V.js';
@@ -208,7 +208,7 @@ export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth,
208
208
  export { Callout } from '../chunk-BPCY7ZID.js';
209
209
  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-NCUSI4ZU.js';
210
210
  import '../chunk-LM3ISVJA.js';
211
- export { AsideLayout } from '../chunk-QOXLP5PE.js';
211
+ export { ASIDE_LAYOUT_SPLIT_REM, AsideLayout } from '../chunk-7UQQEUOT.js';
212
212
  export { ATTACHMENT_CHIP_LABELS, AttachmentChip } from '../chunk-MTDISM7I.js';
213
213
  export { Tag } from '../chunk-SJ3EUCFD.js';
214
214
  export { ATTENTION_LIST_LABELS, AttentionList } from '../chunk-AELKT34H.js';
@@ -234,7 +234,7 @@ export { Document, DocumentTitle, DocumentTitleField } from '../chunk-I4PBFJGX.j
234
234
  export { ArtifactKindGround, ArtifactKindIllustration, ArtifactKindTile } from '../chunk-J5T5TDM2.js';
235
235
  export { ArtifactMakeRow } from '../chunk-HDEKHP65.js';
236
236
  export { ArtifactNameCell } from '../chunk-LTD7KLOU.js';
237
- export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-ORONAXSF.js';
237
+ export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-CWJLDCB7.js';
238
238
  export { afterMotion, releaseFocus, runningMotion, usePresence } from '../chunk-PCAT2EFB.js';
239
239
  import '../chunk-JLOESTT2.js';
240
240
  export { ArrangeBoard } from '../chunk-QO7QEQKV.js';
@@ -262,9 +262,10 @@ export { attachRef, composeRefs, useComposedRef } from '../chunk-L72URIHR.js';
262
262
  export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-QTMUKRTN.js';
263
263
  export { EmptyState } from '../chunk-PPUR46MK.js';
264
264
  export { Accordion, AccordionItem } from '../chunk-E2QPZGLG.js';
265
- export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from '../chunk-OM2LABPS.js';
266
265
  export { ActivityLine } from '../chunk-V7N5XWZ6.js';
267
266
  export { ThinkingIndicator } from '../chunk-3OIVYHAA.js';
267
+ export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from '../chunk-OM2LABPS.js';
268
+ export { ADD_PILL_MS, AddPill } from '../chunk-CVKANYHD.js';
268
269
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-BHVEHAAX.js';
269
270
  export { Timeline, TimelineItem } from '../chunk-ZDJQQ4LU.js';
270
271
  export { Section } from '../chunk-WFCWPXJN.js';
@@ -287,7 +288,6 @@ export { IconButton, IconButtonLink } from '../chunk-UAUP6XGK.js';
287
288
  export { DisclosureAnatomy } from '../chunk-ULYHDP7U.js';
288
289
  export { Count } from '../chunk-D2GT3CR4.js';
289
290
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
290
- export { ADD_PILL_MS, AddPill } from '../chunk-CVKANYHD.js';
291
291
  export { Announcer, announce, useAnnouncer } from '../chunk-2G355KDJ.js';
292
292
  export { VisuallyHidden } from '../chunk-UT6CW3C7.js';
293
293
  export { cx } from '../chunk-ODEQTPFM.js';
package/dist/index.js CHANGED
@@ -9,27 +9,27 @@ export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '
9
9
  export { ThemeToggle } from './chunk-IPMJGK2Q.js';
10
10
  export { THREAD_SUMMARY_LABELS, ThreadSummary } from './chunk-JXDJVUWN.js';
11
11
  export { TileGrid } from './chunk-UFID3DSP.js';
12
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-2BZ2W2YU.js';
13
12
  export { TIME_RANGE_CUSTOM, TIME_RANGE_PICKER_LABELS, TimeRangePicker, timeRangeFieldKey, timeRangeProblem } from './chunk-T5HZ5AYW.js';
13
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-2BZ2W2YU.js';
14
14
  export { ToastProvider, Toaster, readingDuration, toasterInsetStyle, useToast } from './chunk-JIBWNHTC.js';
15
15
  export { TagsInput } from './chunk-3LKOXQWZ.js';
16
16
  export { ThemeGallery } from './chunk-4TAMRAUQ.js';
17
17
  export { ThemeSwatch } from './chunk-3XQUEF5C.js';
18
18
  export { DensitySwitcher, ThemeSwitcher } from './chunk-FRERGOW3.js';
19
19
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-Z24ZUSTX.js';
20
- export { Switcher } from './chunk-ET4I3IEA.js';
20
+ export { Switcher } from './chunk-O3II3KJY.js';
21
21
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell, TableTwoLineCell } from './chunk-QW4LAFTX.js';
22
- export { SlideGrid } from './chunk-6M2N6ETA.js';
23
22
  export { SOURCE_EDITOR_KEYS, SourceEditor, lineStart } from './chunk-PW57R4BN.js';
24
23
  export { StatCard } from './chunk-G5IZGAWS.js';
25
- export { Statement } from './chunk-MZJKPTA5.js';
26
24
  export { StatGroup } from './chunk-OUD75UB2.js';
27
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-ZDMZP5H4.js';
28
- export { TagGroup } from './chunk-UEOEBOBR.js';
25
+ export { Statement } from './chunk-MZJKPTA5.js';
29
26
  export { matchesShortcut, useShortcut } from './chunk-LZNPL266.js';
30
27
  import './chunk-5AHNW5CP.js';
28
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-ZDMZP5H4.js';
29
+ export { TagGroup } from './chunk-UEOEBOBR.js';
31
30
  export { SLIDE_COMPARE_LABELS, SlideCompare } from './chunk-XJMES7AE.js';
32
31
  export { SlideFilmstrip } from './chunk-RO5JU6SN.js';
32
+ export { SlideGrid } from './chunk-6M2N6ETA.js';
33
33
  export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
34
34
  export { SelectionBar } from './chunk-XA2QKGBJ.js';
35
35
  export { SEND_BUTTON_LABELS, SendButton } from './chunk-T2GC7UAP.js';
@@ -37,19 +37,19 @@ export { SettingsTable, SettingsTableRow } from './chunk-SOYPCCSJ.js';
37
37
  export { SetupWizard } from './chunk-IX6CHGM4.js';
38
38
  export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from './chunk-Y7PPKQFQ.js';
39
39
  export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from './chunk-WJZTI2WC.js';
40
- export { canonicalMarkdown, roundTripMarkdown } from './chunk-GBASM5EV.js';
41
- import './chunk-7CSTEH5I.js';
42
- export { RoomRow } from './chunk-Z34W5TM6.js';
40
+ export { RoomRow } from './chunk-PQDQ64KY.js';
43
41
  export { RUN_STATES, RunChip } from './chunk-MYFSVZKZ.js';
44
42
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from './chunk-V6WDJUYK.js';
45
43
  export { SearchTrigger } from './chunk-ERNT3UTB.js';
46
44
  export { SectionFrame, SectionFrameBody, SectionFrameNav } from './chunk-7BDBO2NP.js';
45
+ export { RelatedRow } from './chunk-CL3FWLDO.js';
47
46
  export { RecordChip, RecordChipList } from './chunk-ZPTKAYJK.js';
48
47
  export { REFUSAL_CARD_LABELS, RefusalCard } from './chunk-GKBH5JHE.js';
49
- export { RelatedRow } from './chunk-CL3FWLDO.js';
50
48
  export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard } from './chunk-BMBQ6UMD.js';
51
49
  export { Table } from './chunk-75NQV4R4.js';
52
50
  export { ReviewList } from './chunk-AGVGX52B.js';
51
+ export { canonicalMarkdown, roundTripMarkdown } from './chunk-GBASM5EV.js';
52
+ import './chunk-7CSTEH5I.js';
53
53
  export { RichEditor, preloadRichEditor } from './chunk-3P7XS5VT.js';
54
54
  export { RICH_EDITOR_LABELS, richEditorLabels } from './chunk-2DMTW2Y3.js';
55
55
  export { PropertyList } from './chunk-OPVTNHPH.js';
@@ -60,8 +60,8 @@ export { RAIL_LIST_LABELS, RailList } from './chunk-M576OESX.js';
60
60
  export { Select } from './chunk-3IWZVEXA.js';
61
61
  export { NavGroup, NavItem, SidebarNav } from './chunk-BRK3HXGZ.js';
62
62
  export { Text } from './chunk-O5CEG7TQ.js';
63
- export { READING_PANE_ENTER, ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from './chunk-64JNKLLP.js';
64
63
  export { AddReaction, REACTION_BAR_LABELS, ReactionBar, reactionWho } from './chunk-B3BJ66GQ.js';
64
+ export { READING_PANE_ENTER, ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from './chunk-64JNKLLP.js';
65
65
  export { PresenceStack } from './chunk-F7HZYTZT.js';
66
66
  export { PresenterView, formatStopwatch } from './chunk-LMEMH6DO.js';
67
67
  export { SLIDE_NAV_LABELS, SlideNav } from './chunk-5AJR6X75.js';
@@ -78,10 +78,11 @@ export { NewItemsNotice } from './chunk-463DNZXI.js';
78
78
  export { FactLine, ObjectHeader, SetByLine } from './chunk-AXEXOAZQ.js';
79
79
  export { OPEN_IN_APP_CARD_LABELS, OpenInAppCard } from './chunk-HZBXC3YD.js';
80
80
  export { OrgNodeDisclosure, OrgNodeLabel, OrgNodeLead } from './chunk-NKBKHOMU.js';
81
- export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from './chunk-I46ZTLDW.js';
81
+ export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from './chunk-DWQYV5AV.js';
82
82
  export { TreeGrid } from './chunk-ZDWAIVWL.js';
83
83
  export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, placeGroups, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from './chunk-MY374UUD.js';
84
84
  export { OrgLabel } from './chunk-5YXMKZUA.js';
85
+ export { MEMBER_PICKER_LABELS, MemberPicker, chosenMembers } from './chunk-SDHLAW3G.js';
85
86
  export { MentionChip } from './chunk-PX5BOALQ.js';
86
87
  export { MENTION_MENU_LABELS, MentionMenu, mentionQuery } from './chunk-G7SAFRSJ.js';
87
88
  export { PersonRow } from './chunk-6TD2PCZB.js';
@@ -93,21 +94,20 @@ export { LIVE_CURSOR_HIDE_MS, LIVE_CURSOR_REST_MS, LiveCursor } from './chunk-DP
93
94
  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';
94
95
  export { LogoSlot, LogoSlotGroup } from './chunk-LAZ72JOP.js';
95
96
  export { MARKDOWN_FORMATS, MARKDOWN_TEXT_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from './chunk-XSJSDNRR.js';
96
- export { MEMBER_PICKER_LABELS, MemberPicker, chosenMembers } from './chunk-SDHLAW3G.js';
97
97
  export { LAYERS_LIST_LABELS, LayersList } from './chunk-VUYNNILP.js';
98
98
  export { AutoGrid, Inline, Spacer, Stack } from './chunk-ZAC7SKUN.js';
99
99
  export { Link } from './chunk-QF5UNP4T.js';
100
100
  export { LinkCard } from './chunk-O3MYBNRO.js';
101
101
  import './chunk-KOJPDCGQ.js';
102
- export { List, ListItem } from './chunk-A7UOYLK3.js';
103
- export { ListDetail } from './chunk-P33VNG7Q.js';
104
102
  export { LinkInterstitial, openExternal } from './chunk-OC6BMY3C.js';
103
+ export { List, ListItem } from './chunk-F2ZSFDJZ.js';
104
+ export { ListDetail } from './chunk-P33VNG7Q.js';
105
105
  export { ListInput, withDraft } from './chunk-PICHV3PC.js';
106
106
  export { INLINE_EDITOR_LABELS, InlineEditor } from './chunk-CFJ7FQZI.js';
107
107
  export { InlineRef } from './chunk-JGDCVLD4.js';
108
108
  export { MARKDOWN_CALLOUT_NAMES, MARKDOWN_CALLOUT_TONES, markdownBreaks, markdownClosesFence, markdownCodeText, markdownFenceOf, markdownHeadingOf, markdownInline, markdownLines, parseMarkdown, parseMarkdownSpans, safeHref } from './chunk-KBZO4B33.js';
109
109
  export { KeyValueRows, keyValueRowsLabels } from './chunk-SRHLFQ4J.js';
110
- export { IDLE_AFTER_MS, useFullscreen, useIdle } from './chunk-W5XCNEZC.js';
110
+ export { Highlight, highlightRanges, highlightTerms } from './chunk-H6VKCIWV.js';
111
111
  import './chunk-MICRGE3J.js';
112
112
  import './chunk-FFMCMSJB.js';
113
113
  export { IconTile } from './chunk-3LI4TRUR.js';
@@ -121,7 +121,7 @@ export { FolderTile, describeFolderContents, folderContentsParts } from './chunk
121
121
  export { FollowBanner } from './chunk-NTRKC2JV.js';
122
122
  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';
123
123
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from './chunk-ZXXDZJQN.js';
124
- export { Highlight, highlightRanges, highlightTerms } from './chunk-H6VKCIWV.js';
124
+ export { IDLE_AFTER_MS, useFullscreen, useIdle } from './chunk-W5XCNEZC.js';
125
125
  export { EntityChip } from './chunk-65RFU7LF.js';
126
126
  export { EntityList } from './chunk-TN3BH3Q4.js';
127
127
  export { ErrorBoundary } from './chunk-IJ7KLXUZ.js';
@@ -136,10 +136,10 @@ export { downloadBlob, downloadText, safeFilename, useDownload } from './chunk-Y
136
136
  export { EditingStatus } from './chunk-OU6ZSWEJ.js';
137
137
  export { EMOJI_GROUPS, EMOJI_PICKER_COLUMNS, EMOJI_PICKER_LABELS, EmojiPicker, emojiName, searchEmoji } from './chunk-HZPUMGQV.js';
138
138
  export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from './chunk-C2HIMGFI.js';
139
- export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from './chunk-XJOTW2FB.js';
139
+ export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from './chunk-5U6XAUYM.js';
140
140
  export { STEP_STATES, STEP_STATE_LABELS, StepList, StepStateMark, Stepper, stepDetailPieces } from './chunk-KUMHQY2B.js';
141
- export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-RQFRRPV6.js';
142
141
  export { REFUSAL_STRIP_LABELS, ReceiptStrip, RefusalStrip } from './chunk-ZWCK4N4L.js';
142
+ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-RQFRRPV6.js';
143
143
  export { DELIVERY_RECEIPT_LABELS, DeliveryReceipt } from './chunk-NGJWRR7E.js';
144
144
  export { DescriptionList, DescriptionListItem } from './chunk-LH4OF7FI.js';
145
145
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from './chunk-AOFVXE6V.js';
@@ -208,7 +208,7 @@ export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth,
208
208
  export { Callout } from './chunk-BPCY7ZID.js';
209
209
  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-NCUSI4ZU.js';
210
210
  import './chunk-LM3ISVJA.js';
211
- export { AsideLayout } from './chunk-QOXLP5PE.js';
211
+ export { ASIDE_LAYOUT_SPLIT_REM, AsideLayout } from './chunk-7UQQEUOT.js';
212
212
  export { ATTACHMENT_CHIP_LABELS, AttachmentChip } from './chunk-MTDISM7I.js';
213
213
  export { Tag } from './chunk-SJ3EUCFD.js';
214
214
  export { ATTENTION_LIST_LABELS, AttentionList } from './chunk-AELKT34H.js';
@@ -234,7 +234,7 @@ export { Document, DocumentTitle, DocumentTitleField } from './chunk-I4PBFJGX.js
234
234
  export { ArtifactKindGround, ArtifactKindIllustration, ArtifactKindTile } from './chunk-J5T5TDM2.js';
235
235
  export { ArtifactMakeRow } from './chunk-HDEKHP65.js';
236
236
  export { ArtifactNameCell } from './chunk-LTD7KLOU.js';
237
- export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from './chunk-ORONAXSF.js';
237
+ export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from './chunk-CWJLDCB7.js';
238
238
  export { afterMotion, releaseFocus, runningMotion, usePresence } from './chunk-PCAT2EFB.js';
239
239
  import './chunk-JLOESTT2.js';
240
240
  export { ArrangeBoard } from './chunk-QO7QEQKV.js';
@@ -262,9 +262,10 @@ export { attachRef, composeRefs, useComposedRef } from './chunk-L72URIHR.js';
262
262
  export { ACCESS_DENIED_REASONS, AccessDeniedCard } from './chunk-QTMUKRTN.js';
263
263
  export { EmptyState } from './chunk-PPUR46MK.js';
264
264
  export { Accordion, AccordionItem } from './chunk-E2QPZGLG.js';
265
- export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from './chunk-OM2LABPS.js';
266
265
  export { ActivityLine } from './chunk-V7N5XWZ6.js';
267
266
  export { ThinkingIndicator } from './chunk-3OIVYHAA.js';
267
+ export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from './chunk-OM2LABPS.js';
268
+ export { ADD_PILL_MS, AddPill } from './chunk-CVKANYHD.js';
268
269
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from './chunk-BHVEHAAX.js';
269
270
  export { Timeline, TimelineItem } from './chunk-ZDJQQ4LU.js';
270
271
  export { Section } from './chunk-WFCWPXJN.js';
@@ -287,7 +288,6 @@ export { IconButton, IconButtonLink } from './chunk-UAUP6XGK.js';
287
288
  export { DisclosureAnatomy } from './chunk-ULYHDP7U.js';
288
289
  export { Count } from './chunk-D2GT3CR4.js';
289
290
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from './chunk-PQADV6P6.js';
290
- export { ADD_PILL_MS, AddPill } from './chunk-CVKANYHD.js';
291
291
  export { Announcer, announce, useAnnouncer } from './chunk-2G355KDJ.js';
292
292
  export { VisuallyHidden } from './chunk-UT6CW3C7.js';
293
293
  export { cx } from './chunk-ODEQTPFM.js';
package/dist/styles.css CHANGED
@@ -964,7 +964,7 @@
964
964
  }
965
965
 
966
966
 
967
- /* AppShell-NX5HCD4O.css */
967
+ /* AppShell-24IM2GC3.css */
968
968
  /*
969
969
  * The application frame: a rail on the FRAME, and the screen on a SHEET that
970
970
  * floats beside it.
@@ -1175,7 +1175,18 @@
1175
1175
  flex: 1 1 auto;
1176
1176
  min-height: 0;
1177
1177
  overflow-y: auto;
1178
- scrollbar-color: var(--color-scrollbar) transparent;
1178
+ }
1179
+
1180
+ /* The rail's bar, only where `::-webkit-scrollbar` is not read: set where it
1181
+ is, Chromium would draw its native bar instead of the base sheet's slim one. */
1182
+ @supports not selector(::-webkit-scrollbar) {
1183
+ .crewlet-app-shell__rail-body {
1184
+ scrollbar-color: var(--color-scrollbar) transparent;
1185
+ }
1186
+
1187
+ .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-body {
1188
+ scrollbar-width: thin;
1189
+ }
1179
1190
  }
1180
1191
 
1181
1192
  /*
@@ -2000,7 +2011,6 @@
2000
2011
 
2001
2012
  .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-body {
2002
2013
  padding: var(--spacing-1) 0;
2003
- scrollbar-width: thin;
2004
2014
  }
2005
2015
 
2006
2016
  /*
@@ -4938,10 +4948,10 @@ a.crewlet-make-row__item:active {
4938
4948
  }
4939
4949
 
4940
4950
 
4941
- /* AsideLayout-AA3DEJKN.css */
4951
+ /* AsideLayout-SJO7VLPQ.css */
4942
4952
  /*
4943
4953
  * AsideLayout: a main column with an aside beside it from 56rem of its own
4944
- * width, and after it below that (AsideLayout.tsx).
4954
+ * width (44rem in a pane), and after it below that (AsideLayout.tsx).
4945
4955
  */
4946
4956
 
4947
4957
  .crewlet-aside-layout {
@@ -4973,6 +4983,8 @@ a.crewlet-make-row__item:active {
4973
4983
  midway: the aside takes the gap's own step under it, where the stack's
4974
4984
  smaller step left it 32px under the main column and 24px over the aside. */
4975
4985
  .crewlet-aside-layout__aside {
4986
+ --crewlet-aside-layout-stick: static;
4987
+
4976
4988
  padding-top: var(--crewlet-aside-layout-gap);
4977
4989
  border-top: 1px solid var(--color-border-default);
4978
4990
  }
@@ -4984,11 +4996,53 @@ a.crewlet-make-row__item:active {
4984
4996
  }
4985
4997
 
4986
4998
  .crewlet-aside-layout__aside {
4999
+ --crewlet-aside-layout-stick: sticky;
5000
+
4987
5001
  padding-top: 0;
4988
5002
  border-top: 0;
4989
5003
  }
4990
5004
  }
4991
5005
 
5006
+ /* A PANE (`fit="pane"`) is narrower than a page by the list beside it: it
5007
+ splits sooner, at a narrower aside, one step apart. */
5008
+ .crewlet-aside-layout--pane .crewlet-aside-layout__columns {
5009
+ --crewlet-aside-layout-gap: var(--spacing-6);
5010
+ }
5011
+
5012
+ @container (min-width: 44rem) {
5013
+ .crewlet-aside-layout--pane .crewlet-aside-layout__columns {
5014
+ grid-template-columns: minmax(0, 1fr) var(--crewlet-aside-layout-aside, 16rem);
5015
+ gap: var(--spacing-4);
5016
+ }
5017
+
5018
+ .crewlet-aside-layout--pane .crewlet-aside-layout__aside {
5019
+ --crewlet-aside-layout-stick: sticky;
5020
+
5021
+ padding-top: 0;
5022
+ border-top: 0;
5023
+ }
5024
+ }
5025
+
5026
+ /* STICKY (`sticky`): the aside's content as one stack, as tall as itself, so
5027
+ it has the aside's length to stick along. Only a split sets the aside's
5028
+ `--crewlet-aside-layout-stick`, so it sticks beside the main column alone. */
5029
+ .crewlet-aside-layout--sticky > .crewlet-aside-layout__columns {
5030
+ align-items: stretch;
5031
+ }
5032
+
5033
+ .crewlet-aside-layout__stick {
5034
+ position: var(--crewlet-aside-layout-stick);
5035
+ top: 0;
5036
+ display: flex;
5037
+ flex-direction: column;
5038
+ gap: var(--spacing-6);
5039
+ }
5040
+
5041
+ /* ALONE (no aside), the main column is the whole width at every size. */
5042
+ .crewlet-aside-layout--alone > .crewlet-aside-layout__columns {
5043
+ grid-template-columns: minmax(0, 1fr);
5044
+ }
5045
+
4992
5046
 
4993
5047
  /* AttachmentChip-RZ6ZCB43.css */
4994
5048
  /*
@@ -25257,7 +25311,7 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25257
25311
  }
25258
25312
 
25259
25313
 
25260
- /* List-ZZF6ZHRT.css */
25314
+ /* List-BNA4XGMH.css */
25261
25315
  /*
25262
25316
  * The non-tabular list. One row recipe, four framings.
25263
25317
  *
@@ -25387,6 +25441,13 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25387
25441
  display: list-item;
25388
25442
  }
25389
25443
 
25444
+ /* HANGING MARKERS stand in the margin before the list, so its words line up
25445
+ with the text above rather than one gutter inside it. */
25446
+ .crewlet-list--hanging.crewlet-list--bulleted,
25447
+ .crewlet-list--hanging.crewlet-list--numbered {
25448
+ padding-inline-start: 0;
25449
+ }
25450
+
25390
25451
  .crewlet-list--bulleted .crewlet-list__row,
25391
25452
  .crewlet-list--numbered .crewlet-list__row {
25392
25453
  min-height: 0;
@@ -41008,7 +41069,7 @@ svg.crewlet-select__chevron {
41008
41069
  }
41009
41070
 
41010
41071
 
41011
- /* Switcher-VWQMZUTN.css */
41072
+ /* Switcher-ZGRTTVCS.css */
41012
41073
  /*
41013
41074
  * The switcher: a button that is the page's name, and a banded panel under it
41014
41075
  * (a search band, a list that scrolls, and a footer that does not).
@@ -41213,7 +41274,14 @@ svg.crewlet-switcher-trigger__chevron {
41213
41274
  overflow-y: auto;
41214
41275
  overscroll-behavior: contain;
41215
41276
  padding: var(--spacing-1);
41216
- scrollbar-width: thin;
41277
+ }
41278
+
41279
+ /* Thin only where `::-webkit-scrollbar` is not read: set where it is, Chromium
41280
+ would draw its native bar instead of the base sheet's slim one. */
41281
+ @supports not selector(::-webkit-scrollbar) {
41282
+ .crewlet-switcher__scroller {
41283
+ scrollbar-width: thin;
41284
+ }
41217
41285
  }
41218
41286
 
41219
41287
  .crewlet-switcher__list {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.95.0",
3
+ "version": "0.97.0",
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.95.0",
46
- "@crewlethq/tokens": "0.95.0",
45
+ "@crewlethq/icons": "0.97.0",
46
+ "@crewlethq/tokens": "0.97.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",
@@ -47,6 +47,10 @@
47
47
  // the hover overlay, never both, because both are a background on the same
48
48
  // element and the selected state wins. Drawing the hover on a ::before is
49
49
  // the one way to stack them, and it produces a composite nothing measured.
50
+ // 7. `scrollbar-width` and `scrollbar-color` only inside
51
+ // `@supports not selector(::-webkit-scrollbar)`, apart from `auto` and a
52
+ // hidden bar's `none`. Chromium ignores every `::-webkit-scrollbar` rule on
53
+ // an element that sets either, and draws its native bar instead.
50
54
 
51
55
  import { dirname, resolve } from 'node:path';
52
56
  import { fileURLToPath } from 'node:url';
@@ -76,6 +80,16 @@ const MOTION = new Map([
76
80
  /** The one query a stop is read inside: exactly this, with nothing else around it. */
77
81
  const REDUCE = /^@media\s*\(\s*prefers-reduced-motion\s*:\s*reduce\s*\)$/;
78
82
 
83
+ /** The condition a scrollbar's standard properties are set under (rule 7). */
84
+ const WITHOUT_WEBKIT_SCROLLBAR = /^@supports not \(?\s*selector\(\s*::-webkit-scrollbar\s*\)\s*\)?$/;
85
+
86
+ /** Whether a declaration switches Chromium off the `::-webkit-scrollbar` rules. */
87
+ function overridesWebkitScrollbar(property, value) {
88
+ const bare = value.replace(/!\s*important\s*$/i, '').trim().toLowerCase();
89
+ if (property === 'scrollbar-width') return bare !== 'auto' && bare !== 'none';
90
+ return property === 'scrollbar-color' && bare !== 'auto';
91
+ }
92
+
79
93
  function declarations(body) {
80
94
  const found = [];
81
95
  for (const part of body.split(';')) {
@@ -235,8 +249,10 @@ export async function findings(roots, base = packageRoot) {
235
249
  for (const file of files) {
236
250
  const at = (index) => `${file.where}:${lineOf(file.text, index)}`;
237
251
 
238
- for (const { selector, body, index, nestedDeclarations } of rules(file.text)) {
252
+ for (const block of rules(file.text)) {
253
+ const { selector, body, index, nestedDeclarations } = block;
239
254
  const where = at(index);
255
+ const withoutWebkitScrollbar = conditions(block).some((head) => WITHOUT_WEBKIT_SCROLLBAR.test(head));
240
256
 
241
257
  // Declarations resumed after a nested block carry their block's head
242
258
  // again, and the head was read with the block.
@@ -279,6 +295,11 @@ export async function findings(roots, base = packageRoot) {
279
295
  if (property === 'z-index' && /^-?\d+$/.test(bare.trim()) && Math.abs(Number(bare.trim())) > 1) {
280
296
  problems.push(`${where}: z-index is a literal (${value.trim()}). Use a --z-index-* token, or the Layer module's own depth`);
281
297
  }
298
+ if (!withoutWebkitScrollbar && overridesWebkitScrollbar(property, value)) {
299
+ problems.push(
300
+ `${where}: ${property} is set where Chromium reads ::-webkit-scrollbar, so it ignores those rules and draws its native bar. Set it inside @supports not selector(::-webkit-scrollbar)`,
301
+ );
302
+ }
282
303
  }
283
304
  }
284
305
 
@@ -1,49 +0,0 @@
1
- /*
2
- * AsideLayout: a main column with an aside beside it from 56rem of its own
3
- * width, and after it below that (AsideLayout.tsx).
4
- */
5
-
6
- .crewlet-aside-layout {
7
- container-type: inline-size;
8
- min-width: 0;
9
- }
10
-
11
- .crewlet-aside-layout__columns {
12
- --crewlet-aside-layout-gap: var(--spacing-7);
13
-
14
- display: grid;
15
- grid-template-columns: minmax(0, 1fr);
16
- align-items: start;
17
- gap: var(--crewlet-aside-layout-gap);
18
- }
19
-
20
- /* EACH COLUMN IS A STACK one step apart, so the blocks in it stand apart
21
- evenly without each carrying a margin of its own. */
22
- .crewlet-aside-layout__main,
23
- .crewlet-aside-layout__aside {
24
- display: flex;
25
- flex-direction: column;
26
- gap: var(--spacing-6);
27
- min-width: 0;
28
- }
29
-
30
- /* FOLLOWING THE MAIN COLUMN, the aside is set off by one hairline, so its
31
- facts read as about the page rather than as more of it. The hairline sits
32
- midway: the aside takes the gap's own step under it, where the stack's
33
- smaller step left it 32px under the main column and 24px over the aside. */
34
- .crewlet-aside-layout__aside {
35
- padding-top: var(--crewlet-aside-layout-gap);
36
- border-top: 1px solid var(--color-border-default);
37
- }
38
-
39
- @container (min-width: 56rem) {
40
- .crewlet-aside-layout__columns {
41
- grid-template-columns: minmax(0, 1fr) var(--crewlet-aside-layout-aside, 18rem);
42
- gap: var(--spacing-8);
43
- }
44
-
45
- .crewlet-aside-layout__aside {
46
- padding-top: 0;
47
- border-top: 0;
48
- }
49
- }
@@ -1,12 +0,0 @@
1
- import { cx } from './chunk-ODEQTPFM.js';
2
- import './AsideLayout-AA3DEJKN.css';
3
- import { jsx, jsxs } from 'react/jsx-runtime';
4
-
5
- function AsideLayout({ children, aside, asideLabel, className, ...rest }) {
6
- return /* @__PURE__ */ jsx("div", { ...rest, className: cx("crewlet-aside-layout", className), children: /* @__PURE__ */ jsxs("div", { className: "crewlet-aside-layout__columns", children: [
7
- /* @__PURE__ */ jsx("div", { className: "crewlet-aside-layout__main", children }),
8
- /* @__PURE__ */ jsx("aside", { className: "crewlet-aside-layout__aside", "aria-label": asideLabel, children: aside })
9
- ] }) });
10
- }
11
-
12
- export { AsideLayout };
@@ -1,6 +1,6 @@
1
1
  import { StepList } from './chunk-KUMHQY2B.js';
2
- import { Meter } from './chunk-RQFRRPV6.js';
3
2
  import { ReceiptStrip } from './chunk-ZWCK4N4L.js';
3
+ import { Meter } from './chunk-RQFRRPV6.js';
4
4
  import { StatusCard } from './chunk-4BEMS6Q7.js';
5
5
  import { Disclosure } from './chunk-NAHA62WD.js';
6
6
  import { Spinner } from './chunk-XSPCITPN.js';
@@ -1,8 +1,8 @@
1
1
  import { TreeGrid } from './chunk-ZDWAIVWL.js';
2
2
  import { createTreeModel, treeParent } from './chunk-MY374UUD.js';
3
3
  import { OrgLabel } from './chunk-5YXMKZUA.js';
4
- import { IconButton } from './chunk-UAUP6XGK.js';
5
4
  import { AddPill } from './chunk-CVKANYHD.js';
5
+ import { IconButton } from './chunk-UAUP6XGK.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './OrgTable-JZSYTUIK.css';
8
8
  import { useMemo, useRef, useImperativeHandle, useCallback } from 'react';