@crewlethq/ui 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +10 -0
  2. package/dist/AppShell/AccountRow.d.ts +24 -2
  3. package/dist/AppShell/index.d.ts +1 -1
  4. package/dist/AppShell/index.js +3 -1
  5. package/dist/{AppShell-RUNVM4WH.css → AppShell-APHZKJYH.css} +25 -3
  6. package/dist/CommandPalette/index.js +3 -3
  7. package/dist/CommentThread/index.js +2 -2
  8. package/dist/DataTable/index.js +4 -4
  9. package/dist/DataView/index.js +6 -6
  10. package/dist/DateTimePicker/index.js +2 -2
  11. package/dist/LinkInterstitial/index.js +3 -3
  12. package/dist/Menu/Menu.d.ts +28 -2
  13. package/dist/Menu/index.d.ts +1 -1
  14. package/dist/Menu/index.js +1 -1
  15. package/dist/{Menu-BT5PMFJI.css → Menu-XIJ4LQUT.css} +15 -0
  16. package/dist/Modal/index.js +2 -2
  17. package/dist/PeopleRail/index.js +2 -2
  18. package/dist/ShareDialog/index.js +3 -3
  19. package/dist/SheetGrid/index.js +2 -2
  20. package/dist/Switcher/index.js +3 -3
  21. package/dist/TimeWindowPicker/index.js +2 -2
  22. package/dist/VersionTimeline/index.js +2 -2
  23. package/dist/{chunk-UXELEORU.js → chunk-4HRB62EA.js} +1 -1
  24. package/dist/{chunk-JULMZNGT.js → chunk-4MIM356A.js} +18 -7
  25. package/dist/{chunk-7FQEUNHX.js → chunk-7X5WOECO.js} +1 -1
  26. package/dist/{chunk-OIMAK5AE.js → chunk-AV6YX4GZ.js} +4 -4
  27. package/dist/{chunk-EDGCPVVD.js → chunk-G5TAKMEA.js} +27 -3
  28. package/dist/{chunk-AJESMWJS.js → chunk-LG244LY7.js} +3 -3
  29. package/dist/{chunk-HTCJSUIZ.js → chunk-XMGB3ZAT.js} +2 -2
  30. package/dist/{chunk-A4VMJMXJ.js → chunk-ZM7HLFOA.js} +1 -1
  31. package/dist/generated/index.js +29 -29
  32. package/dist/index.js +29 -29
  33. package/dist/styles.css +42 -5
  34. package/package.json +3 -3
  35. package/dist/{chunk-J2G4HGQM.js → chunk-36CWC2NH.js} +1 -1
  36. package/dist/{chunk-7IJARUIF.js → chunk-F4DPAJCN.js} +1 -1
  37. package/dist/{chunk-EZBLOUWX.js → chunk-IC64IWOO.js} +1 -1
  38. package/dist/{chunk-N4GFRW5C.js → chunk-J4OKGJQ6.js} +1 -1
  39. package/dist/{chunk-EIGEIT4O.js → chunk-NUZC6PJX.js} +1 -1
  40. package/dist/{chunk-L4H7SSWF.js → chunk-RE6ED5TO.js} +1 -1
  41. package/dist/{chunk-WXAULPBH.js → chunk-UNZ7TVV5.js} +1 -1
package/README.md CHANGED
@@ -203,6 +203,16 @@ places:
203
203
  - A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
204
204
  when the content beneath it moves, and every panel anchored inside follows.
205
205
 
206
+ ## Changes in 0.21.0
207
+
208
+ **`AppShell.AccountRow` takes `menu`** (`AccountRowMenu`: `label`, `header`, `items`): pressing who you are opens the reader's own menu instead of linking anywhere, which is where a reader looks for their account and for signing out. The row becomes the menu button, ending in the up-and-down chevron a menu's trigger draws, keeps the account page's current-row lift (`data-current`), and the menu's header holds the facts the row does not already say, such as the reader's access. Given, `menu` takes the place of `href`.
209
+
210
+ **`Menu` takes `header` and `renderTrigger`.** `header` is a line of facts above the items: never an item, so the arrows never stop on it, and the menu's description, so a screen reader hears it when the menu opens. `renderTrigger` makes the caller's own element the trigger, given the props it spreads (`MenuTriggerProps`), keeping every rule of the menu's button, focus coming back to it included.
211
+
212
+ **`@crewlethq/icons` vendors `log-out` and `log-in`**, for signing out and in from that menu.
213
+
214
+ What to change: nothing. Everything is new.
215
+
206
216
  ## Changes in 0.20.0
207
217
 
208
218
  0.20.0 adds the review surfaces the engine dashboard drew for itself: a line diff, two versions compared, a document's comment thread, the note a lost edit race leaves, the People rail beside a shared document, and the read-only cells its tables share. Each takes its data and its callbacks as props, so nothing in it fetches or knows a route.
@@ -1,4 +1,14 @@
1
1
  import type { ReactNode } from 'react';
2
+ import { type MenuEntry } from '../Menu/index.js';
3
+ /** The menu the row opens (`AccountRowProps.menu`). */
4
+ export interface AccountRowMenu {
5
+ /** The menu's name. Defaults to "Your account". */
6
+ label?: string | undefined;
7
+ /** Facts above the items that the row does not already say: the reader's access. */
8
+ header?: ReactNode;
9
+ /** The reader's own actions: their account, signing out. */
10
+ items: readonly MenuEntry[];
11
+ }
2
12
  export interface AccountRowProps {
3
13
  /** The reader's badge, drawn decorative: the name beside it says who it is. */
4
14
  avatar: ReactNode;
@@ -6,8 +16,14 @@ export interface AccountRowProps {
6
16
  name: ReactNode;
7
17
  /** The line under the name: a login, a seat. Left out where it would repeat the name. */
8
18
  detail?: ReactNode;
9
- /** The reader's account page. Without it the row states who is signed in and goes nowhere. */
19
+ /** The reader's account page. Without it (or `menu`) the row states who is signed in and goes nowhere. */
10
20
  href?: string | undefined;
21
+ /**
22
+ * The reader's own menu, which the row OPENS rather than linking anywhere:
23
+ * their account among its items, and signing out. Given, it takes the place
24
+ * of `href`.
25
+ */
26
+ menu?: AccountRowMenu | undefined;
11
27
  /** Whether the reader is on that page, which marks the row as the rail marks its current row. */
12
28
  current?: boolean | undefined;
13
29
  /** What the link opens, as its tooltip. */
@@ -36,5 +52,11 @@ export interface AccountRowProps {
36
52
  *
37
53
  * The controls are siblings of the link, never inside it, so each keeps its
38
54
  * own name and the link's name stays the reader's.
55
+ *
56
+ * OR THE ROW OPENS THE READER'S MENU (`menu`): pressing who you are is where a
57
+ * reader looks for their account and for signing out, so the row is the menu
58
+ * button, ending in the up-and-down chevron a menu's trigger draws, and the
59
+ * account is one item of it. The menu says only what the row does not, in its
60
+ * header (their access), above the actions.
39
61
  */
40
- export declare function AccountRow({ avatar, name, detail, href, current, title, linkSuffix, actions, className, }: AccountRowProps): import("react").JSX.Element;
62
+ export declare function AccountRow({ avatar, name, detail, href, menu, current, title, linkSuffix, actions, className, }: AccountRowProps): import("react").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import './AppShell.css';
2
2
  export { AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './AppShell.js';
3
3
  export { AccountRow } from './AccountRow.js';
4
- export type { AccountRowProps } from './AccountRow.js';
4
+ export type { AccountRowMenu, AccountRowProps } from './AccountRow.js';
5
5
  export type { ActionRailRowProps, AppShellContextValue, AppShellProps, AppShellRailProps, AppShellRailRowProps, AppShellToggleProps, AppShellTopbarProps, RailRowCount, StaticRailRowProps, } from './AppShell.js';
@@ -1,5 +1,7 @@
1
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-EDGCPVVD.js';
1
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-G5TAKMEA.js';
2
2
  import '../chunk-IG75YMUN.js';
3
+ import '../chunk-4MIM356A.js';
4
+ import '../chunk-OG6CL3EB.js';
3
5
  import '../chunk-HMPFGIWM.js';
4
6
  import '../chunk-R25RGPUB.js';
5
7
  import '../chunk-4FQT6ZAY.js';
@@ -651,18 +651,40 @@
651
651
  transition: background var(--motion-duration-fast) var(--motion-easing-default);
652
652
  }
653
653
 
654
- a.crewlet-account-row__who:hover {
654
+ /* The row as the reader's menu button: a button drawn as the link is. */
655
+ button.crewlet-account-row__who {
656
+ width: 100%;
657
+ margin: 0;
658
+ border: 0;
659
+ background: none;
660
+ font: inherit;
661
+ text-align: start;
662
+ cursor: pointer;
663
+ }
664
+
665
+ /* A row that opens a menu fills the row as the link does. */
666
+ .crewlet-account-row > .crewlet-menu-anchor {
667
+ display: flex;
668
+ flex: 1 1 auto;
669
+ min-width: 0;
670
+ }
671
+
672
+ a.crewlet-account-row__who:hover,
673
+ button.crewlet-account-row__who:hover,
674
+ button.crewlet-account-row__who[aria-expanded='true'] {
655
675
  background: var(--color-surface-hover);
656
676
  }
657
677
 
658
678
  /* After :hover, so the current row shows the lift rather than the overlay. */
659
- a.crewlet-account-row__who[aria-current='page'] {
679
+ a.crewlet-account-row__who[aria-current='page'],
680
+ button.crewlet-account-row__who[data-current] {
660
681
  background: var(--color-surface-elevated);
661
682
  outline: 1px solid var(--color-border-default);
662
683
  outline-offset: -1px;
663
684
  }
664
685
 
665
- a.crewlet-account-row__who:focus-visible {
686
+ a.crewlet-account-row__who:focus-visible,
687
+ button.crewlet-account-row__who:focus-visible {
666
688
  outline: 2px solid var(--color-focus);
667
689
  outline-offset: var(--size-focus-ring-inset-offset);
668
690
  }
@@ -1,11 +1,11 @@
1
- export { CommandPalette } from '../chunk-UXELEORU.js';
2
- import '../chunk-7IJARUIF.js';
1
+ export { CommandPalette } from '../chunk-4HRB62EA.js';
2
+ import '../chunk-F4DPAJCN.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
4
  import '../chunk-SMBKXWML.js';
5
- import '../chunk-OG6CL3EB.js';
6
5
  import '../chunk-Q55TXPA3.js';
7
6
  import '../chunk-PQADV6P6.js';
8
7
  import '../chunk-BHHIIK3M.js';
8
+ import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-HMPFGIWM.js';
10
10
  import '../chunk-R25RGPUB.js';
11
11
  import '../chunk-4FQT6ZAY.js';
@@ -1,8 +1,7 @@
1
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-EZBLOUWX.js';
1
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-IC64IWOO.js';
2
2
  import '../chunk-WI6K5M5X.js';
3
3
  import '../chunk-VJLYGPPE.js';
4
4
  import '../chunk-SMBKXWML.js';
5
- import '../chunk-OG6CL3EB.js';
6
5
  import '../chunk-Q55TXPA3.js';
7
6
  import '../chunk-4KP4RC3O.js';
8
7
  import '../chunk-3CZ7XAVY.js';
@@ -11,6 +10,7 @@ import '../chunk-UAN5NE7M.js';
11
10
  import '../chunk-5OM447RW.js';
12
11
  import '../chunk-PQADV6P6.js';
13
12
  import '../chunk-BHHIIK3M.js';
13
+ import '../chunk-OG6CL3EB.js';
14
14
  import '../chunk-4FQT6ZAY.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -1,14 +1,14 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-AJESMWJS.js';
2
- import '../chunk-JULMZNGT.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-LG244LY7.js';
3
2
  import '../chunk-STJ7QBC3.js';
4
3
  import '../chunk-DTIW4CHZ.js';
5
- import '../chunk-7IJARUIF.js';
6
- import '../chunk-OG6CL3EB.js';
4
+ import '../chunk-F4DPAJCN.js';
7
5
  import '../chunk-I6NZKJGK.js';
8
6
  import '../chunk-Q55TXPA3.js';
9
7
  import '../chunk-EUCC37WY.js';
10
8
  import '../chunk-AV2DXAEL.js';
11
9
  import '../chunk-PQADV6P6.js';
10
+ import '../chunk-4MIM356A.js';
11
+ import '../chunk-OG6CL3EB.js';
12
12
  import '../chunk-HMPFGIWM.js';
13
13
  import '../chunk-R25RGPUB.js';
14
14
  import '../chunk-4FQT6ZAY.js';
@@ -1,16 +1,14 @@
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-OIMAK5AE.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-AV6YX4GZ.js';
2
2
  import '../chunk-HOXGBLEY.js';
3
3
  import '../chunk-PGRPNDWM.js';
4
- import '../chunk-AJESMWJS.js';
5
- import '../chunk-JULMZNGT.js';
6
- import '../chunk-L4H7SSWF.js';
4
+ import '../chunk-RE6ED5TO.js';
5
+ import '../chunk-LG244LY7.js';
7
6
  import '../chunk-STJ7QBC3.js';
8
7
  import '../chunk-DTIW4CHZ.js';
9
- import '../chunk-7IJARUIF.js';
8
+ import '../chunk-F4DPAJCN.js';
10
9
  import '../chunk-F73MC7EZ.js';
11
10
  import '../chunk-SMBKXWML.js';
12
11
  import '../chunk-GXQ3B46I.js';
13
- import '../chunk-OG6CL3EB.js';
14
12
  import '../chunk-I6NZKJGK.js';
15
13
  import '../chunk-Q55TXPA3.js';
16
14
  import '../chunk-3CZ7XAVY.js';
@@ -19,6 +17,8 @@ import '../chunk-BWRGFKJP.js';
19
17
  import '../chunk-AV2DXAEL.js';
20
18
  import '../chunk-PQADV6P6.js';
21
19
  import '../chunk-BHHIIK3M.js';
20
+ import '../chunk-4MIM356A.js';
21
+ import '../chunk-OG6CL3EB.js';
22
22
  import '../chunk-HMPFGIWM.js';
23
23
  import '../chunk-R25RGPUB.js';
24
24
  import '../chunk-4FQT6ZAY.js';
@@ -1,7 +1,7 @@
1
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-L4H7SSWF.js';
1
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-RE6ED5TO.js';
2
2
  import '../chunk-GXQ3B46I.js';
3
- import '../chunk-OG6CL3EB.js';
4
3
  import '../chunk-BWRGFKJP.js';
4
+ import '../chunk-OG6CL3EB.js';
5
5
  import '../chunk-HMPFGIWM.js';
6
6
  import '../chunk-R25RGPUB.js';
7
7
  import '../chunk-4FQT6ZAY.js';
@@ -1,9 +1,9 @@
1
- export { LinkInterstitial, openExternal } from '../chunk-A4VMJMXJ.js';
1
+ export { LinkInterstitial, openExternal } from '../chunk-ZM7HLFOA.js';
2
2
  import '../chunk-5CLW2CXT.js';
3
- import '../chunk-7IJARUIF.js';
3
+ import '../chunk-F4DPAJCN.js';
4
4
  import '../chunk-SVSCLHHI.js';
5
- import '../chunk-OG6CL3EB.js';
6
5
  import '../chunk-PQADV6P6.js';
6
+ import '../chunk-OG6CL3EB.js';
7
7
  import '../chunk-HMPFGIWM.js';
8
8
  import '../chunk-R25RGPUB.js';
9
9
  import '../chunk-4FQT6ZAY.js';
@@ -53,10 +53,19 @@
53
53
  * - IT CAN BE OPENED FROM OUTSIDE (`open`, `onOpenChange`), because a tree item
54
54
  * that holds focus opens its card's menu from the keyboard while the trigger
55
55
  * itself is out of the tab order (`triggerTabIndex={-1}`).
56
+ * - ITS TRIGGER CAN BE THE CALLER'S OWN (`renderTrigger`): a row that IS the
57
+ * way in, such as the signed-in reader at the foot of the rail, opens the
58
+ * menu itself rather than sitting beside a second button that does. The
59
+ * caller spreads the props it is handed on its element, which keeps every
60
+ * rule above, the focus coming back included.
61
+ * - A HEADER SAYS WHAT THE ACTIONS ARE ABOUT (`header`): a line of facts
62
+ * above the items, such as the access a signed-in reader carries. It is
63
+ * not an item, so the arrows never stop on it, and the menu is described by
64
+ * it, so a screen reader hears it when the menu opens.
56
65
  *
57
66
  * Ported from the engine dashboard's `ui/Menu.tsx`, with its suite.
58
67
  */
59
- import { type ReactNode } from 'react';
68
+ import { type KeyboardEvent, type ReactNode } from 'react';
60
69
  import { type ButtonVariant } from '../Button/index.js';
61
70
  export interface MenuItem {
62
71
  kind?: 'item';
@@ -97,6 +106,16 @@ type Run = {
97
106
  };
98
107
  /** Gathers each run of consecutive answers (items given `checked`) into one group. */
99
108
  export declare function runs(entries: readonly MenuEntry[]): Run[];
109
+ /** What a caller's own trigger spreads on its element (`renderTrigger`). */
110
+ export interface MenuTriggerProps {
111
+ ref: (el: HTMLElement | null) => void;
112
+ 'aria-haspopup': 'menu';
113
+ 'aria-expanded': boolean;
114
+ 'aria-controls': string | undefined;
115
+ tabIndex: number | undefined;
116
+ onClick: () => void;
117
+ onKeyDown: (event: KeyboardEvent<HTMLElement>) => void;
118
+ }
100
119
  export interface MenuProps {
101
120
  /** The trigger's accessible name, such as "Actions for Software Engineer". */
102
121
  label: string;
@@ -112,7 +131,14 @@ export interface MenuProps {
112
131
  onOpenChange?: ((open: boolean) => void) | undefined;
113
132
  /** Which edge of the trigger the menu lines up with. */
114
133
  align?: 'start' | 'end' | undefined;
134
+ /**
135
+ * The caller's own trigger, in place of the menu's button: an element given
136
+ * these props. `label` still names the menu; the trigger names itself.
137
+ */
138
+ renderTrigger?: ((props: MenuTriggerProps) => ReactNode) | undefined;
139
+ /** Facts above the items: what the actions are about. Never an item. */
140
+ header?: ReactNode;
115
141
  className?: string | undefined;
116
142
  }
117
- export declare function Menu({ label, items, icon, trigger, triggerVariant, triggerTabIndex, open: controlled, onOpenChange, align, className, }: MenuProps): import("react").JSX.Element;
143
+ export declare function Menu({ label, items, icon, trigger, triggerVariant, triggerTabIndex, open: controlled, onOpenChange, align, renderTrigger, header, className, }: MenuProps): import("react").JSX.Element;
118
144
  export {};
@@ -1,3 +1,3 @@
1
1
  import './Menu.css';
2
2
  export { Menu } from './Menu.js';
3
- export type { MenuEntry, MenuItem, MenuProps, MenuSeparator } from './Menu.js';
3
+ export type { MenuEntry, MenuItem, MenuProps, MenuSeparator, MenuTriggerProps } from './Menu.js';
@@ -1,4 +1,4 @@
1
- export { Menu } from '../chunk-JULMZNGT.js';
1
+ export { Menu } from '../chunk-4MIM356A.js';
2
2
  import '../chunk-OG6CL3EB.js';
3
3
  import '../chunk-HMPFGIWM.js';
4
4
  import '../chunk-R25RGPUB.js';
@@ -219,6 +219,21 @@
219
219
  font-size: var(--font-size-xs);
220
220
  }
221
221
 
222
+ /*
223
+ * Facts above the items, across the panel's full width with a hairline under
224
+ * them: what the actions below are about, read rather than pressed.
225
+ */
226
+ .crewlet-menu__header {
227
+ display: flex;
228
+ flex-direction: column;
229
+ gap: var(--spacing-1);
230
+ margin: calc(var(--spacing-1) * -1) calc(var(--spacing-1) * -1) var(--spacing-1);
231
+ padding: var(--spacing-2) var(--spacing-3);
232
+ border-bottom: 1px solid var(--color-border-default);
233
+ font-size: var(--font-size-xs);
234
+ color: var(--color-text-secondary);
235
+ }
236
+
222
237
  .crewlet-menu__separator {
223
238
  height: 1px;
224
239
  margin: var(--spacing-1) 0;
@@ -1,6 +1,6 @@
1
- export { ConfirmModal, Modal } from '../chunk-7IJARUIF.js';
2
- import '../chunk-OG6CL3EB.js';
1
+ export { ConfirmModal, Modal } from '../chunk-F4DPAJCN.js';
3
2
  import '../chunk-PQADV6P6.js';
3
+ import '../chunk-OG6CL3EB.js';
4
4
  import '../chunk-HMPFGIWM.js';
5
5
  import '../chunk-R25RGPUB.js';
6
6
  import '../chunk-4FQT6ZAY.js';
@@ -1,11 +1,11 @@
1
- export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-N4GFRW5C.js';
1
+ export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-J4OKGJQ6.js';
2
2
  import '../chunk-CENOOTAV.js';
3
3
  import '../chunk-S35G6PNC.js';
4
- import '../chunk-OG6CL3EB.js';
5
4
  import '../chunk-UAN5NE7M.js';
6
5
  import '../chunk-AYKXMIOR.js';
7
6
  import '../chunk-5OM447RW.js';
8
7
  import '../chunk-PQADV6P6.js';
8
+ import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-4FQT6ZAY.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,17 +1,17 @@
1
- export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-HTCJSUIZ.js';
1
+ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-XMGB3ZAT.js';
2
2
  import '../chunk-FC4YTTFJ.js';
3
3
  import '../chunk-W46LPU4R.js';
4
4
  import '../chunk-STJ7QBC3.js';
5
5
  import '../chunk-DTIW4CHZ.js';
6
- import '../chunk-7IJARUIF.js';
6
+ import '../chunk-F4DPAJCN.js';
7
7
  import '../chunk-F73MC7EZ.js';
8
8
  import '../chunk-SVSCLHHI.js';
9
- import '../chunk-OG6CL3EB.js';
10
9
  import '../chunk-4KP4RC3O.js';
11
10
  import '../chunk-UAN5NE7M.js';
12
11
  import '../chunk-5OM447RW.js';
13
12
  import '../chunk-PQADV6P6.js';
14
13
  import '../chunk-IG75YMUN.js';
14
+ import '../chunk-OG6CL3EB.js';
15
15
  import '../chunk-HMPFGIWM.js';
16
16
  import '../chunk-R25RGPUB.js';
17
17
  import '../chunk-4FQT6ZAY.js';
@@ -1,4 +1,4 @@
1
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-J2G4HGQM.js';
1
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-36CWC2NH.js';
2
2
  import '../chunk-CENOOTAV.js';
3
3
  import '../chunk-GFV4LJHH.js';
4
4
  import '../chunk-WIATRXEJ.js';
@@ -8,10 +8,10 @@ import '../chunk-PPAQFGS2.js';
8
8
  import '../chunk-YYZRLLLY.js';
9
9
  import '../chunk-S35G6PNC.js';
10
10
  import '../chunk-QWOPX2MN.js';
11
- import '../chunk-OG6CL3EB.js';
12
11
  import '../chunk-UAN5NE7M.js';
13
12
  import '../chunk-AYKXMIOR.js';
14
13
  import '../chunk-5OM447RW.js';
14
+ import '../chunk-OG6CL3EB.js';
15
15
  import '../chunk-HMPFGIWM.js';
16
16
  import '../chunk-R25RGPUB.js';
17
17
  import '../chunk-BZFWDIV6.js';
@@ -1,13 +1,13 @@
1
- export { Switcher } from '../chunk-7FQEUNHX.js';
1
+ export { Switcher } from '../chunk-7X5WOECO.js';
2
2
  import '../chunk-W5J7R5EB.js';
3
- import '../chunk-7IJARUIF.js';
3
+ import '../chunk-F4DPAJCN.js';
4
4
  import '../chunk-F73MC7EZ.js';
5
- import '../chunk-OG6CL3EB.js';
6
5
  import '../chunk-Q55TXPA3.js';
7
6
  import '../chunk-BWRGFKJP.js';
8
7
  import '../chunk-FYTIJM2T.js';
9
8
  import '../chunk-PQADV6P6.js';
10
9
  import '../chunk-IG75YMUN.js';
10
+ import '../chunk-OG6CL3EB.js';
11
11
  import '../chunk-HMPFGIWM.js';
12
12
  import '../chunk-R25RGPUB.js';
13
13
  import '../chunk-RSAQOKH3.js';
@@ -1,11 +1,11 @@
1
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-EIGEIT4O.js';
1
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-NUZC6PJX.js';
2
2
  import '../chunk-FC4YTTFJ.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
4
  import '../chunk-GXQ3B46I.js';
5
- import '../chunk-OG6CL3EB.js';
6
5
  import '../chunk-Q55TXPA3.js';
7
6
  import '../chunk-BWRGFKJP.js';
8
7
  import '../chunk-PQADV6P6.js';
8
+ import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-HMPFGIWM.js';
10
10
  import '../chunk-R25RGPUB.js';
11
11
  import '../chunk-4FQT6ZAY.js';
@@ -1,10 +1,10 @@
1
- export { VersionTimeline } from '../chunk-WXAULPBH.js';
1
+ export { VersionTimeline } from '../chunk-UNZ7TVV5.js';
2
2
  import '../chunk-AUQPBL4O.js';
3
- import '../chunk-OG6CL3EB.js';
4
3
  import '../chunk-4KP4RC3O.js';
5
4
  import '../chunk-3CZ7XAVY.js';
6
5
  import '../chunk-EUCC37WY.js';
7
6
  import '../chunk-UAN5NE7M.js';
8
7
  import '../chunk-5OM447RW.js';
8
+ import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { Modal } from './chunk-7IJARUIF.js';
1
+ import { Modal } from './chunk-F4DPAJCN.js';
2
2
  import { useListbox, useHighlightRest } from './chunk-F73MC7EZ.js';
3
3
  import { Kbd } from './chunk-SMBKXWML.js';
4
4
  import { Input } from './chunk-Q55TXPA3.js';
@@ -3,11 +3,11 @@ import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup
3
3
  import { usePopupLayer } from './chunk-R25RGPUB.js';
4
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
- import './Menu-BT5PMFJI.css';
6
+ import './Menu-XIJ4LQUT.css';
7
7
  import { useId, useState, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
8
8
  import { createPortal } from 'react-dom';
9
9
  import { EllipsisVerticalGlyph, CheckGlyph } from '@crewlethq/icons/glyphs';
10
- import { jsx, jsxs } from 'react/jsx-runtime';
10
+ import { jsxs, jsx } from 'react/jsx-runtime';
11
11
 
12
12
  var ITEM_SELECTOR = "[role='menuitem'],[role='menuitemradio']";
13
13
  function runs(entries) {
@@ -34,10 +34,13 @@ function Menu({
34
34
  open: controlled,
35
35
  onOpenChange,
36
36
  align = "start",
37
+ renderTrigger,
38
+ header,
37
39
  className
38
40
  }) {
39
41
  const id = useId();
40
42
  const menuId = `${id}-menu`;
43
+ const headerId = `${id}-header`;
41
44
  const [uncontrolled, setUncontrolled] = useState(false);
42
45
  const open = controlled ?? uncontrolled;
43
46
  const triggerRef = useRef(null);
@@ -217,13 +220,14 @@ function Menu({
217
220
  },
218
221
  entry.key
219
222
  );
220
- const list = open ? /* @__PURE__ */ jsx(
223
+ const list = open ? /* @__PURE__ */ jsxs(
221
224
  "div",
222
225
  {
223
226
  className: cx("crewlet-menu", container !== null && container !== document.body ? "crewlet-menu--in-host" : null, className),
224
227
  id: menuId,
225
228
  role: "menu",
226
229
  "aria-label": label,
230
+ "aria-describedby": header ? headerId : void 0,
227
231
  tabIndex: -1,
228
232
  ref: (el) => {
229
233
  menu.current = el;
@@ -233,9 +237,16 @@ function Menu({
233
237
  onKeyDown: onMenuKeyDown,
234
238
  onPointerDown: (event) => event.stopPropagation(),
235
239
  onClick: (event) => event.stopPropagation(),
236
- children: runs(items).map(
237
- (run) => run.kind === "separator" ? /* @__PURE__ */ jsx("div", { role: "separator", className: "crewlet-menu__separator" }, run.key) : run.kind === "answers" ? /* @__PURE__ */ jsx("div", { role: "group", className: "crewlet-menu__group", children: run.items.map(item) }, run.key) : item(run.item)
238
- )
240
+ children: [
241
+ header ? (
242
+ // PRESENTATIONAL, so a menu holds only items to a screen reader, and
243
+ // the menu's description, so what it says is heard when it opens.
244
+ /* @__PURE__ */ jsx("div", { role: "presentation", id: headerId, className: "crewlet-menu__header", children: header })
245
+ ) : null,
246
+ runs(items).map(
247
+ (run) => run.kind === "separator" ? /* @__PURE__ */ jsx("div", { role: "separator", className: "crewlet-menu__separator" }, run.key) : run.kind === "answers" ? /* @__PURE__ */ jsx("div", { role: "group", className: "crewlet-menu__group", children: run.items.map(item) }, run.key) : item(run.item)
248
+ )
249
+ ]
239
250
  }
240
251
  ) : null;
241
252
  const shared = {
@@ -258,7 +269,7 @@ function Menu({
258
269
  onKeyDown: onTriggerKeyDown
259
270
  };
260
271
  return /* @__PURE__ */ jsxs("span", { className: "crewlet-menu-anchor", children: [
261
- trigger === void 0 ? /* @__PURE__ */ jsx(IconButton, { ...shared, label, icon: icon ?? /* @__PURE__ */ jsx(EllipsisVerticalGlyph, {}), size: "sm" }) : /* @__PURE__ */ jsx(Button, { ...shared, variant: triggerVariant, size: "small", leadingIcon: icon, children: trigger }),
272
+ renderTrigger ? renderTrigger(shared) : trigger === void 0 ? /* @__PURE__ */ jsx(IconButton, { ...shared, label, icon: icon ?? /* @__PURE__ */ jsx(EllipsisVerticalGlyph, {}), size: "sm" }) : /* @__PURE__ */ jsx(Button, { ...shared, variant: triggerVariant, size: "small", leadingIcon: icon, children: trigger }),
262
273
  list && container ? createPortal(list, container) : null
263
274
  ] });
264
275
  }
@@ -1,5 +1,5 @@
1
1
  import { Skeleton } from './chunk-W5J7R5EB.js';
2
- import { Modal } from './chunk-7IJARUIF.js';
2
+ import { Modal } from './chunk-F4DPAJCN.js';
3
3
  import { useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
4
4
  import { Input } from './chunk-Q55TXPA3.js';
5
5
  import { Popover } from './chunk-BWRGFKJP.js';
@@ -1,15 +1,15 @@
1
1
  import { PageHeader } from './chunk-HOXGBLEY.js';
2
2
  import { Toolbar } from './chunk-PGRPNDWM.js';
3
- import { DataTable } from './chunk-AJESMWJS.js';
4
- import { Menu } from './chunk-JULMZNGT.js';
5
- import { DateTimePicker } from './chunk-L4H7SSWF.js';
3
+ import { DateTimePicker } from './chunk-RE6ED5TO.js';
4
+ import { DataTable } from './chunk-LG244LY7.js';
6
5
  import { useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
7
6
  import { Kbd } from './chunk-SMBKXWML.js';
8
- import { Button } from './chunk-OG6CL3EB.js';
9
7
  import { Input } from './chunk-Q55TXPA3.js';
10
8
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
11
9
  import { Popover } from './chunk-BWRGFKJP.js';
12
10
  import { Count } from './chunk-BHHIIK3M.js';
11
+ import { Menu } from './chunk-4MIM356A.js';
12
+ import { Button } from './chunk-OG6CL3EB.js';
13
13
  import { IconButton } from './chunk-4FQT6ZAY.js';
14
14
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
15
15
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,12 +1,13 @@
1
1
  import { useMediaMatch } from './chunk-IG75YMUN.js';
2
+ import { Menu } from './chunk-4MIM356A.js';
2
3
  import { useModalLayer, focusables } from './chunk-R25RGPUB.js';
3
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
4
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
5
6
  import { cx } from './chunk-ODEQTPFM.js';
6
- import './AppShell-RUNVM4WH.css';
7
+ import './AppShell-APHZKJYH.css';
7
8
  import { createContext, forwardRef, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
8
9
  import { breakpoint } from '@crewlethq/tokens';
9
- import { ChevronUpGlyph, ChevronRightGlyph, MenuGlyph } from '@crewlethq/icons/glyphs';
10
+ import { ChevronUpGlyph, ChevronsUpDownGlyph, ChevronRightGlyph, MenuGlyph } from '@crewlethq/icons/glyphs';
10
11
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
11
12
 
12
13
  function AccountRow({
@@ -14,6 +15,7 @@ function AccountRow({
14
15
  name,
15
16
  detail,
16
17
  href,
18
+ menu,
17
19
  current = false,
18
20
  title,
19
21
  linkSuffix = ", your account",
@@ -32,7 +34,29 @@ function AccountRow({
32
34
  ] })
33
35
  ] });
34
36
  return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-account-row", className), children: [
35
- href === void 0 ? /* @__PURE__ */ jsx("span", { className: "crewlet-account-row__who", children: who }) : /* @__PURE__ */ jsxs(
37
+ menu ? /* @__PURE__ */ jsx(
38
+ Menu,
39
+ {
40
+ label: menu.label ?? "Your account",
41
+ items: menu.items,
42
+ header: menu.header,
43
+ renderTrigger: (trigger) => /* @__PURE__ */ jsxs(
44
+ "button",
45
+ {
46
+ type: "button",
47
+ className: "crewlet-account-row__who",
48
+ title,
49
+ "data-current": current ? "" : void 0,
50
+ ...trigger,
51
+ children: [
52
+ who,
53
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: linkSuffix }),
54
+ /* @__PURE__ */ jsx(ChevronsUpDownGlyph, { size: "xs", className: "crewlet-account-row__go", "aria-hidden": "true" })
55
+ ]
56
+ }
57
+ )
58
+ }
59
+ ) : href === void 0 ? /* @__PURE__ */ jsx("span", { className: "crewlet-account-row__who", children: who }) : /* @__PURE__ */ jsxs(
36
60
  "a",
37
61
  {
38
62
  className: "crewlet-account-row__who",
@@ -1,10 +1,10 @@
1
- import { Menu } from './chunk-JULMZNGT.js';
2
1
  import { useClipboard } from './chunk-STJ7QBC3.js';
3
- import { Modal } from './chunk-7IJARUIF.js';
4
- import { Button } from './chunk-OG6CL3EB.js';
2
+ import { Modal } from './chunk-F4DPAJCN.js';
5
3
  import { Checkbox } from './chunk-I6NZKJGK.js';
6
4
  import { EmptyValue } from './chunk-EUCC37WY.js';
7
5
  import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
6
+ import { Menu } from './chunk-4MIM356A.js';
7
+ import { Button } from './chunk-OG6CL3EB.js';
8
8
  import { IconButton } from './chunk-4FQT6ZAY.js';
9
9
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
10
10
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
1
  import { Select } from './chunk-FC4YTTFJ.js';
2
2
  import { CopyButton } from './chunk-W46LPU4R.js';
3
- import { Modal } from './chunk-7IJARUIF.js';
3
+ import { Modal } from './chunk-F4DPAJCN.js';
4
4
  import { Callout } from './chunk-SVSCLHHI.js';
5
- import { Button } from './chunk-OG6CL3EB.js';
6
5
  import { PrincipalAvatar } from './chunk-4KP4RC3O.js';
7
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
8
7
  import { useMediaMatch } from './chunk-IG75YMUN.js';
8
+ import { Button } from './chunk-OG6CL3EB.js';
9
9
  import { IconButton } from './chunk-4FQT6ZAY.js';
10
10
  import { cx } from './chunk-ODEQTPFM.js';
11
11
  import './ShareDialog-YZ4F37MW.css';
@@ -1,5 +1,5 @@
1
1
  import { InlineCode } from './chunk-5CLW2CXT.js';
2
- import { ConfirmModal } from './chunk-7IJARUIF.js';
2
+ import { ConfirmModal } from './chunk-F4DPAJCN.js';
3
3
  import { Callout } from './chunk-SVSCLHHI.js';
4
4
  import './LinkInterstitial-ET4MSVSV.css';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,39 +1,39 @@
1
1
  import '../chunk-MSSZHDZI.js';
2
2
  export { TreeCanvas } from '../chunk-TBIZSQHB.js';
3
3
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-73QBUUYX.js';
4
- export { VersionTimeline } from '../chunk-WXAULPBH.js';
4
+ export { VersionTimeline } from '../chunk-UNZ7TVV5.js';
5
5
  import '../chunk-U5LQ2AS5.js';
6
6
  export { DensitySwitcher, ThemeSwitcher } from '../chunk-2ONWEDQT.js';
7
7
  export { ThemeToggle } from '../chunk-NP2C4Y4E.js';
8
8
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-Z24ZUSTX.js';
9
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-NUZC6PJX.js';
9
10
  export { Timeline, TimelineItem } from '../chunk-AUQPBL4O.js';
10
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-EIGEIT4O.js';
11
11
  export { ToastProvider, Toaster, useToast } from '../chunk-QH3AKP2N.js';
12
- export { Table } from '../chunk-V2N3BMOT.js';
13
12
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-MUGM7SEG.js';
14
- export { TagsInput } from '../chunk-7ZNKEPLN.js';
15
13
  export { TagGroup } from '../chunk-E6UWRXNM.js';
14
+ export { TagsInput } from '../chunk-7ZNKEPLN.js';
15
+ export { Table } from '../chunk-V2N3BMOT.js';
16
+ export { Text } from '../chunk-IKBK4A5O.js';
16
17
  export { ThemeGallery } from '../chunk-KLIEPFEZ.js';
17
18
  export { ThemeSwatch } from '../chunk-MNFU2RNT.js';
18
- export { Text } from '../chunk-IKBK4A5O.js';
19
19
  export { NavGroup, NavItem, SidebarNav } from '../chunk-UCCC7YVZ.js';
20
20
  export { StatCard } from '../chunk-IKB6HFGK.js';
21
21
  export { StatGroup } from '../chunk-JXRI5YD2.js';
22
22
  export { Stepper } from '../chunk-5QWIJSQM.js';
23
- export { Switcher } from '../chunk-7FQEUNHX.js';
23
+ export { Switcher } from '../chunk-7X5WOECO.js';
24
+ export { Section } from '../chunk-A2UXBCLO.js';
24
25
  export { SegmentedMeter, segmentedMeterLabel } from '../chunk-4AK52VHB.js';
25
- export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-HTCJSUIZ.js';
26
+ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-XMGB3ZAT.js';
26
27
  export { Select } from '../chunk-FC4YTTFJ.js';
27
- export { FRAME_HELLO_TIMEOUT_MS, SandboxedFrame } from '../chunk-VYDFB6PJ.js';
28
- export { Skeleton } from '../chunk-W5J7R5EB.js';
29
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-J2G4HGQM.js';
28
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-36CWC2NH.js';
30
29
  export { matchesShortcut, useShortcut } from '../chunk-2FPENTCF.js';
31
30
  export { Prose } from '../chunk-JCSA3XVH.js';
32
- export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from '../chunk-Y56FM3K4.js';
33
31
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from '../chunk-ZAJHGDAW.js';
32
+ export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from '../chunk-Y56FM3K4.js';
33
+ export { FRAME_HELLO_TIMEOUT_MS, SandboxedFrame } from '../chunk-VYDFB6PJ.js';
34
+ export { Skeleton } from '../chunk-W5J7R5EB.js';
34
35
  export { SearchTrigger } from '../chunk-6DRDCT22.js';
35
- export { Section } from '../chunk-A2UXBCLO.js';
36
- export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-N4GFRW5C.js';
36
+ export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-J4OKGJQ6.js';
37
37
  export { PinTile } from '../chunk-6MIXD6IW.js';
38
38
  export { PresenceStack } from '../chunk-YM3GJHGW.js';
39
39
  import '../chunk-CENOOTAV.js';
@@ -50,15 +50,15 @@ export { TreeGrid } from '../chunk-T5TFZ2JB.js';
50
50
  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';
51
51
  export { OrgLabel } from '../chunk-AKEZ3G5V.js';
52
52
  export { Outline, scrollToHeading, useActiveHeading } from '../chunk-A5YKNRG6.js';
53
+ export { List, ListItem } from '../chunk-DS2C73RJ.js';
53
54
  export { ListInput } from '../chunk-YSJYWQSP.js';
54
55
  export { LIVE_CURSOR_HIDE_MS, LIVE_CURSOR_REST_MS, LiveCursor } from '../chunk-5XACKNYR.js';
55
56
  export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-QQGWES46.js';
56
57
  import '../chunk-VYY56AMX.js';
57
58
  export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from '../chunk-4PZ6FJKW.js';
58
59
  export { AutoGrid, Inline, Spacer, Stack } from '../chunk-ZAC7SKUN.js';
59
- export { LinkInterstitial, openExternal } from '../chunk-A4VMJMXJ.js';
60
60
  export { Link } from '../chunk-FBSEJO2C.js';
61
- export { List, ListItem } from '../chunk-DS2C73RJ.js';
61
+ export { LinkInterstitial, openExternal } from '../chunk-ZM7HLFOA.js';
62
62
  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';
63
63
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from '../chunk-ZXXDZJQN.js';
64
64
  export { useFullscreen } from '../chunk-XDTYBF2F.js';
@@ -73,9 +73,6 @@ export { Eyebrow } from '../chunk-RK4XPHVG.js';
73
73
  export { FactList } from '../chunk-JI5AVQLA.js';
74
74
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from '../chunk-5YLON2PW.js';
75
75
  export { FollowBanner } from '../chunk-FW7HN6AP.js';
76
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-OIMAK5AE.js';
77
- export { PageHeader } from '../chunk-HOXGBLEY.js';
78
- export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-PGRPNDWM.js';
79
76
  export { DescriptionList, DescriptionListItem } from '../chunk-F2XSYBKH.js';
80
77
  export { DIFF_LIST_LABELS, DiffList } from '../chunk-LFHCXZO5.js';
81
78
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from '../chunk-BVWSLXTY.js';
@@ -89,33 +86,34 @@ export { CONFLICT_NOTE_LABELS, ConflictNote } from '../chunk-UO7JZVCO.js';
89
86
  export { Container } from '../chunk-QVE4GJAT.js';
90
87
  export { CursorFlag } from '../chunk-3BYIWOTV.js';
91
88
  export { PresenceRing, presenceHueClass } from '../chunk-I6POAB4V.js';
92
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-AJESMWJS.js';
93
- export { Menu } from '../chunk-JULMZNGT.js';
94
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-L4H7SSWF.js';
95
- export { ChoiceList } from '../chunk-QBXZLGK2.js';
89
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-AV6YX4GZ.js';
90
+ export { PageHeader } from '../chunk-HOXGBLEY.js';
91
+ export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-PGRPNDWM.js';
92
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-RE6ED5TO.js';
93
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-LG244LY7.js';
96
94
  export { ChoiceButtons } from '../chunk-YSJC7AZC.js';
95
+ export { ChoiceList } from '../chunk-QBXZLGK2.js';
97
96
  export { CodeBlock } from '../chunk-GDDE4UM7.js';
98
97
  export { CopyButton, Copyable } from '../chunk-W46LPU4R.js';
99
98
  export { useClipboard, writeClipboard } from '../chunk-STJ7QBC3.js';
100
99
  export { useOutcome } from '../chunk-DTIW4CHZ.js';
101
100
  export { Combobox } from '../chunk-LOLELDBW.js';
102
- export { CommandPalette } from '../chunk-UXELEORU.js';
103
- export { ConfirmModal, Modal } from '../chunk-7IJARUIF.js';
101
+ export { CommandPalette } from '../chunk-4HRB62EA.js';
102
+ export { ConfirmModal, Modal } from '../chunk-F4DPAJCN.js';
104
103
  export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, useOptionKeys } from '../chunk-F73MC7EZ.js';
105
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-EZBLOUWX.js';
104
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-IC64IWOO.js';
106
105
  export { Document, DocumentTitle } from '../chunk-WI6K5M5X.js';
107
106
  export { COMPOSER_COUNTER_AT, Composer } from '../chunk-VJLYGPPE.js';
108
107
  export { Kbd, isApplePlatform, keyGlyph } from '../chunk-SMBKXWML.js';
109
108
  export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from '../chunk-GXQ3B46I.js';
110
109
  export { Callout } from '../chunk-SVSCLHHI.js';
110
+ 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, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-TXAFKH2A.js';
111
+ import '../chunk-VYOKRN2I.js';
111
112
  export { ChangeMark } from '../chunk-PPAQFGS2.js';
112
113
  export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, 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, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from '../chunk-YYZRLLLY.js';
113
114
  export { PRESENCE_ACTIVITIES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from '../chunk-S35G6PNC.js';
114
115
  export { Tooltip } from '../chunk-QWOPX2MN.js';
115
116
  import '../chunk-3L5NHASN.js';
116
- 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, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-TXAFKH2A.js';
117
- import '../chunk-VYOKRN2I.js';
118
- export { Button, ButtonLink } from '../chunk-OG6CL3EB.js';
119
117
  export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from '../chunk-MLT2HBPN.js';
120
118
  export { ArrangeGroup } from '../chunk-35XVR5JQ.js';
121
119
  export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-AIVZVKYZ.js';
@@ -150,8 +148,10 @@ export { DisclosureAnatomy } from '../chunk-ENJUPIND.js';
150
148
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
151
149
  export { Count } from '../chunk-BHHIIK3M.js';
152
150
  export { ADD_PILL_MS, AddPill } from '../chunk-TROLVEZY.js';
153
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-EDGCPVVD.js';
151
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-G5TAKMEA.js';
154
152
  import '../chunk-IG75YMUN.js';
153
+ export { Menu } from '../chunk-4MIM356A.js';
154
+ export { Button, ButtonLink } from '../chunk-OG6CL3EB.js';
155
155
  export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, outsideBounds, placePopup, useLayerContainer, viewportBounds } from '../chunk-HMPFGIWM.js';
156
156
  export { focusables, isComposing, isModalLayerOpen, layerCount, useBodyScrollLock, useModalLayer, usePopupLayer } from '../chunk-R25RGPUB.js';
157
157
  export { ArrangeBoard } from '../chunk-QO7QEQKV.js';
package/dist/index.js CHANGED
@@ -1,39 +1,39 @@
1
1
  import './chunk-MSSZHDZI.js';
2
2
  export { TreeCanvas } from './chunk-TBIZSQHB.js';
3
3
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from './chunk-73QBUUYX.js';
4
- export { VersionTimeline } from './chunk-WXAULPBH.js';
4
+ export { VersionTimeline } from './chunk-UNZ7TVV5.js';
5
5
  import './chunk-U5LQ2AS5.js';
6
6
  export { DensitySwitcher, ThemeSwitcher } from './chunk-2ONWEDQT.js';
7
7
  export { ThemeToggle } from './chunk-NP2C4Y4E.js';
8
8
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-Z24ZUSTX.js';
9
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-NUZC6PJX.js';
9
10
  export { Timeline, TimelineItem } from './chunk-AUQPBL4O.js';
10
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-EIGEIT4O.js';
11
11
  export { ToastProvider, Toaster, useToast } from './chunk-QH3AKP2N.js';
12
- export { Table } from './chunk-V2N3BMOT.js';
13
12
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from './chunk-MUGM7SEG.js';
14
- export { TagsInput } from './chunk-7ZNKEPLN.js';
15
13
  export { TagGroup } from './chunk-E6UWRXNM.js';
14
+ export { TagsInput } from './chunk-7ZNKEPLN.js';
15
+ export { Table } from './chunk-V2N3BMOT.js';
16
+ export { Text } from './chunk-IKBK4A5O.js';
16
17
  export { ThemeGallery } from './chunk-KLIEPFEZ.js';
17
18
  export { ThemeSwatch } from './chunk-MNFU2RNT.js';
18
- export { Text } from './chunk-IKBK4A5O.js';
19
19
  export { NavGroup, NavItem, SidebarNav } from './chunk-UCCC7YVZ.js';
20
20
  export { StatCard } from './chunk-IKB6HFGK.js';
21
21
  export { StatGroup } from './chunk-JXRI5YD2.js';
22
22
  export { Stepper } from './chunk-5QWIJSQM.js';
23
- export { Switcher } from './chunk-7FQEUNHX.js';
23
+ export { Switcher } from './chunk-7X5WOECO.js';
24
+ export { Section } from './chunk-A2UXBCLO.js';
24
25
  export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
25
- export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from './chunk-HTCJSUIZ.js';
26
+ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from './chunk-XMGB3ZAT.js';
26
27
  export { Select } from './chunk-FC4YTTFJ.js';
27
- export { FRAME_HELLO_TIMEOUT_MS, SandboxedFrame } from './chunk-VYDFB6PJ.js';
28
- export { Skeleton } from './chunk-W5J7R5EB.js';
29
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-J2G4HGQM.js';
28
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-36CWC2NH.js';
30
29
  export { matchesShortcut, useShortcut } from './chunk-2FPENTCF.js';
31
30
  export { Prose } from './chunk-JCSA3XVH.js';
32
- export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from './chunk-Y56FM3K4.js';
33
31
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from './chunk-ZAJHGDAW.js';
32
+ export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from './chunk-Y56FM3K4.js';
33
+ export { FRAME_HELLO_TIMEOUT_MS, SandboxedFrame } from './chunk-VYDFB6PJ.js';
34
+ export { Skeleton } from './chunk-W5J7R5EB.js';
34
35
  export { SearchTrigger } from './chunk-6DRDCT22.js';
35
- export { Section } from './chunk-A2UXBCLO.js';
36
- export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from './chunk-N4GFRW5C.js';
36
+ export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from './chunk-J4OKGJQ6.js';
37
37
  export { PinTile } from './chunk-6MIXD6IW.js';
38
38
  export { PresenceStack } from './chunk-YM3GJHGW.js';
39
39
  import './chunk-CENOOTAV.js';
@@ -50,15 +50,15 @@ export { TreeGrid } from './chunk-T5TFZ2JB.js';
50
50
  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';
51
51
  export { OrgLabel } from './chunk-AKEZ3G5V.js';
52
52
  export { Outline, scrollToHeading, useActiveHeading } from './chunk-A5YKNRG6.js';
53
+ export { List, ListItem } from './chunk-DS2C73RJ.js';
53
54
  export { ListInput } from './chunk-YSJYWQSP.js';
54
55
  export { LIVE_CURSOR_HIDE_MS, LIVE_CURSOR_REST_MS, LiveCursor } from './chunk-5XACKNYR.js';
55
56
  export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from './chunk-QQGWES46.js';
56
57
  import './chunk-VYY56AMX.js';
57
58
  export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-4PZ6FJKW.js';
58
59
  export { AutoGrid, Inline, Spacer, Stack } from './chunk-ZAC7SKUN.js';
59
- export { LinkInterstitial, openExternal } from './chunk-A4VMJMXJ.js';
60
60
  export { Link } from './chunk-FBSEJO2C.js';
61
- export { List, ListItem } from './chunk-DS2C73RJ.js';
61
+ export { LinkInterstitial, openExternal } from './chunk-ZM7HLFOA.js';
62
62
  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';
63
63
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from './chunk-ZXXDZJQN.js';
64
64
  export { useFullscreen } from './chunk-XDTYBF2F.js';
@@ -73,9 +73,6 @@ export { Eyebrow } from './chunk-RK4XPHVG.js';
73
73
  export { FactList } from './chunk-JI5AVQLA.js';
74
74
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from './chunk-5YLON2PW.js';
75
75
  export { FollowBanner } from './chunk-FW7HN6AP.js';
76
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-OIMAK5AE.js';
77
- export { PageHeader } from './chunk-HOXGBLEY.js';
78
- export { Toolbar, ToolbarOverflow, ToolbarWide } from './chunk-PGRPNDWM.js';
79
76
  export { DescriptionList, DescriptionListItem } from './chunk-F2XSYBKH.js';
80
77
  export { DIFF_LIST_LABELS, DiffList } from './chunk-LFHCXZO5.js';
81
78
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from './chunk-BVWSLXTY.js';
@@ -89,33 +86,34 @@ export { CONFLICT_NOTE_LABELS, ConflictNote } from './chunk-UO7JZVCO.js';
89
86
  export { Container } from './chunk-QVE4GJAT.js';
90
87
  export { CursorFlag } from './chunk-3BYIWOTV.js';
91
88
  export { PresenceRing, presenceHueClass } from './chunk-I6POAB4V.js';
92
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-AJESMWJS.js';
93
- export { Menu } from './chunk-JULMZNGT.js';
94
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-L4H7SSWF.js';
95
- export { ChoiceList } from './chunk-QBXZLGK2.js';
89
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-AV6YX4GZ.js';
90
+ export { PageHeader } from './chunk-HOXGBLEY.js';
91
+ export { Toolbar, ToolbarOverflow, ToolbarWide } from './chunk-PGRPNDWM.js';
92
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-RE6ED5TO.js';
93
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-LG244LY7.js';
96
94
  export { ChoiceButtons } from './chunk-YSJC7AZC.js';
95
+ export { ChoiceList } from './chunk-QBXZLGK2.js';
97
96
  export { CodeBlock } from './chunk-GDDE4UM7.js';
98
97
  export { CopyButton, Copyable } from './chunk-W46LPU4R.js';
99
98
  export { useClipboard, writeClipboard } from './chunk-STJ7QBC3.js';
100
99
  export { useOutcome } from './chunk-DTIW4CHZ.js';
101
100
  export { Combobox } from './chunk-LOLELDBW.js';
102
- export { CommandPalette } from './chunk-UXELEORU.js';
103
- export { ConfirmModal, Modal } from './chunk-7IJARUIF.js';
101
+ export { CommandPalette } from './chunk-4HRB62EA.js';
102
+ export { ConfirmModal, Modal } from './chunk-F4DPAJCN.js';
104
103
  export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
105
- export { COMMENT_THREAD_LABELS, CommentThread } from './chunk-EZBLOUWX.js';
104
+ export { COMMENT_THREAD_LABELS, CommentThread } from './chunk-IC64IWOO.js';
106
105
  export { Document, DocumentTitle } from './chunk-WI6K5M5X.js';
107
106
  export { COMPOSER_COUNTER_AT, Composer } from './chunk-VJLYGPPE.js';
108
107
  export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
109
108
  export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from './chunk-GXQ3B46I.js';
110
109
  export { Callout } from './chunk-SVSCLHHI.js';
110
+ 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, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from './chunk-TXAFKH2A.js';
111
+ import './chunk-VYOKRN2I.js';
111
112
  export { ChangeMark } from './chunk-PPAQFGS2.js';
112
113
  export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, 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, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from './chunk-YYZRLLLY.js';
113
114
  export { PRESENCE_ACTIVITIES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from './chunk-S35G6PNC.js';
114
115
  export { Tooltip } from './chunk-QWOPX2MN.js';
115
116
  import './chunk-3L5NHASN.js';
116
- 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, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from './chunk-TXAFKH2A.js';
117
- import './chunk-VYOKRN2I.js';
118
- export { Button, ButtonLink } from './chunk-OG6CL3EB.js';
119
117
  export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from './chunk-MLT2HBPN.js';
120
118
  export { ArrangeGroup } from './chunk-35XVR5JQ.js';
121
119
  export { ArrangeList, DEFAULT_ARRANGE_LABELS } from './chunk-AIVZVKYZ.js';
@@ -150,8 +148,10 @@ export { DisclosureAnatomy } from './chunk-ENJUPIND.js';
150
148
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from './chunk-PQADV6P6.js';
151
149
  export { Count } from './chunk-BHHIIK3M.js';
152
150
  export { ADD_PILL_MS, AddPill } from './chunk-TROLVEZY.js';
153
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './chunk-EDGCPVVD.js';
151
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './chunk-G5TAKMEA.js';
154
152
  import './chunk-IG75YMUN.js';
153
+ export { Menu } from './chunk-4MIM356A.js';
154
+ export { Button, ButtonLink } from './chunk-OG6CL3EB.js';
155
155
  export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, outsideBounds, placePopup, useLayerContainer, viewportBounds } from './chunk-HMPFGIWM.js';
156
156
  export { focusables, isComposing, isModalLayerOpen, layerCount, useBodyScrollLock, useModalLayer, usePopupLayer } from './chunk-R25RGPUB.js';
157
157
  export { ArrangeBoard } from './chunk-QO7QEQKV.js';
package/dist/styles.css CHANGED
@@ -548,7 +548,7 @@
548
548
  }
549
549
 
550
550
 
551
- /* AppShell-RUNVM4WH.css */
551
+ /* AppShell-APHZKJYH.css */
552
552
  /*
553
553
  * The application frame: a rail on the FRAME, and the screen on a SHEET that
554
554
  * floats beside it.
@@ -1202,18 +1202,40 @@
1202
1202
  transition: background var(--motion-duration-fast) var(--motion-easing-default);
1203
1203
  }
1204
1204
 
1205
- a.crewlet-account-row__who:hover {
1205
+ /* The row as the reader's menu button: a button drawn as the link is. */
1206
+ button.crewlet-account-row__who {
1207
+ width: 100%;
1208
+ margin: 0;
1209
+ border: 0;
1210
+ background: none;
1211
+ font: inherit;
1212
+ text-align: start;
1213
+ cursor: pointer;
1214
+ }
1215
+
1216
+ /* A row that opens a menu fills the row as the link does. */
1217
+ .crewlet-account-row > .crewlet-menu-anchor {
1218
+ display: flex;
1219
+ flex: 1 1 auto;
1220
+ min-width: 0;
1221
+ }
1222
+
1223
+ a.crewlet-account-row__who:hover,
1224
+ button.crewlet-account-row__who:hover,
1225
+ button.crewlet-account-row__who[aria-expanded='true'] {
1206
1226
  background: var(--color-surface-hover);
1207
1227
  }
1208
1228
 
1209
1229
  /* After :hover, so the current row shows the lift rather than the overlay. */
1210
- a.crewlet-account-row__who[aria-current='page'] {
1230
+ a.crewlet-account-row__who[aria-current='page'],
1231
+ button.crewlet-account-row__who[data-current] {
1211
1232
  background: var(--color-surface-elevated);
1212
1233
  outline: 1px solid var(--color-border-default);
1213
1234
  outline-offset: -1px;
1214
1235
  }
1215
1236
 
1216
- a.crewlet-account-row__who:focus-visible {
1237
+ a.crewlet-account-row__who:focus-visible,
1238
+ button.crewlet-account-row__who:focus-visible {
1217
1239
  outline: 2px solid var(--color-focus);
1218
1240
  outline-offset: var(--size-focus-ring-inset-offset);
1219
1241
  }
@@ -13282,7 +13304,7 @@ svg.crewlet-datetime__chevron {
13282
13304
  }
13283
13305
 
13284
13306
 
13285
- /* Menu-BT5PMFJI.css */
13307
+ /* Menu-XIJ4LQUT.css */
13286
13308
  /*
13287
13309
  * The menu button's panel.
13288
13310
  *
@@ -13504,6 +13526,21 @@ svg.crewlet-datetime__chevron {
13504
13526
  font-size: var(--font-size-xs);
13505
13527
  }
13506
13528
 
13529
+ /*
13530
+ * Facts above the items, across the panel's full width with a hairline under
13531
+ * them: what the actions below are about, read rather than pressed.
13532
+ */
13533
+ .crewlet-menu__header {
13534
+ display: flex;
13535
+ flex-direction: column;
13536
+ gap: var(--spacing-1);
13537
+ margin: calc(var(--spacing-1) * -1) calc(var(--spacing-1) * -1) var(--spacing-1);
13538
+ padding: var(--spacing-2) var(--spacing-3);
13539
+ border-bottom: 1px solid var(--color-border-default);
13540
+ font-size: var(--font-size-xs);
13541
+ color: var(--color-text-secondary);
13542
+ }
13543
+
13507
13544
  .crewlet-menu__separator {
13508
13545
  height: 1px;
13509
13546
  margin: var(--spacing-1) 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.20.0",
3
+ "version": "0.21.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.20.0",
46
- "@crewlethq/tokens": "0.20.0",
45
+ "@crewlethq/icons": "0.21.0",
46
+ "@crewlethq/tokens": "0.21.0",
47
47
  "uqr": "0.1.3"
48
48
  },
49
49
  "peerDependencies": {
@@ -5,8 +5,8 @@ import { presenceHueClass } from './chunk-I6POAB4V.js';
5
5
  import { ChangeMark } from './chunk-PPAQFGS2.js';
6
6
  import { isEmptyValue, displayText, ratingMax, findPerson, findOption, statusTone, editText, textMax, isMod, sheetLabels, normalizeValue, sameValue, spokenText, drawnColumns, sortRows, SHEET_ROW_HEIGHT, columnOffsets, SHEET_ROW_NUMBER_WIDTH, columnWidth, rangeOf, presenceByCell, presenceByRow, presenceByColumn, cellKey, scrollToRow, planClear, visibleRows, cellDescription, nextSort, rowName, inRange, hasPrevious, flagText, toTSV, planPaste, parseTSV, moveFrom, isTypingKey, editorSide, optionHue, checkValue, parseText, liveOptions } from './chunk-YYZRLLLY.js';
7
7
  import { presenceLabels } from './chunk-S35G6PNC.js';
8
- import { Button } from './chunk-OG6CL3EB.js';
9
8
  import { Avatar } from './chunk-5OM447RW.js';
9
+ import { Button } from './chunk-OG6CL3EB.js';
10
10
  import { isComposing } from './chunk-R25RGPUB.js';
11
11
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
12
12
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- import { Button } from './chunk-OG6CL3EB.js';
2
1
  import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
2
+ import { Button } from './chunk-OG6CL3EB.js';
3
3
  import { useLayerContainer } from './chunk-HMPFGIWM.js';
4
4
  import { focusables, useModalLayer, useBodyScrollLock } from './chunk-R25RGPUB.js';
5
5
  import { IconButton } from './chunk-4FQT6ZAY.js';
@@ -1,10 +1,10 @@
1
1
  import { Document } from './chunk-WI6K5M5X.js';
2
2
  import { Composer } from './chunk-VJLYGPPE.js';
3
- import { Button } from './chunk-OG6CL3EB.js';
4
3
  import { PrincipalAvatar } from './chunk-4KP4RC3O.js';
5
4
  import { toInstant, RelativeTime, formatExact, toISO } from './chunk-3CZ7XAVY.js';
6
5
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
7
6
  import { Count } from './chunk-BHHIIK3M.js';
7
+ import { Button } from './chunk-OG6CL3EB.js';
8
8
  import { IconButton } from './chunk-4FQT6ZAY.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
10
  import './CommentThread-7VXOFTZO.css';
@@ -1,7 +1,7 @@
1
1
  import { PRESENCE_LABELS, presenceOrder, collapseSessions } from './chunk-S35G6PNC.js';
2
- import { Button } from './chunk-OG6CL3EB.js';
3
2
  import { Avatar } from './chunk-5OM447RW.js';
4
3
  import { headingTag, useHeadingLevel } from './chunk-PQADV6P6.js';
4
+ import { Button } from './chunk-OG6CL3EB.js';
5
5
  import { IconButton } from './chunk-4FQT6ZAY.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './PeopleRail-R64WVOSH.css';
@@ -1,8 +1,8 @@
1
1
  import { Select } from './chunk-FC4YTTFJ.js';
2
2
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
3
- import { Button } from './chunk-OG6CL3EB.js';
4
3
  import { Input } from './chunk-Q55TXPA3.js';
5
4
  import { Popover } from './chunk-BWRGFKJP.js';
5
+ import { Button } from './chunk-OG6CL3EB.js';
6
6
  import { isComposing } from './chunk-R25RGPUB.js';
7
7
  import { IconButton } from './chunk-4FQT6ZAY.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,6 +1,6 @@
1
1
  import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
2
- import { Button } from './chunk-OG6CL3EB.js';
3
2
  import { Popover } from './chunk-BWRGFKJP.js';
3
+ import { Button } from './chunk-OG6CL3EB.js';
4
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './DateTimePicker-NJ6XH2TE.css';
@@ -1,7 +1,7 @@
1
1
  import { Timeline } from './chunk-AUQPBL4O.js';
2
- import { Button } from './chunk-OG6CL3EB.js';
3
2
  import { PrincipalAvatar } from './chunk-4KP4RC3O.js';
4
3
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
4
+ import { Button } from './chunk-OG6CL3EB.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './VersionTimeline-EBJ6MIPJ.css';
7
7
  import { RotateCcwClockGlyph, PencilGlyph, ShieldGlyph, DatabaseGlyph, UploadGlyph } from '@crewlethq/icons/glyphs';