@crewlethq/ui 0.20.0 → 0.22.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 +22 -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 +45 -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-KEKAD3BZ.css} +35 -2
  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-7FQEUNHX.js → chunk-7X5WOECO.js} +1 -1
  25. package/dist/{chunk-EDGCPVVD.js → chunk-BFQK7CYJ.js} +28 -3
  26. package/dist/{chunk-AJESMWJS.js → chunk-BXSGT3YC.js} +3 -3
  27. package/dist/{chunk-OIMAK5AE.js → chunk-KYEXTEJ3.js} +4 -4
  28. package/dist/{chunk-A4VMJMXJ.js → chunk-L2OQRPXJ.js} +1 -1
  29. package/dist/{chunk-JULMZNGT.js → chunk-UFKUWVMV.js} +33 -11
  30. package/dist/{chunk-HTCJSUIZ.js → chunk-XMGB3ZAT.js} +2 -2
  31. package/dist/generated/index.js +30 -30
  32. package/dist/index.js +30 -30
  33. package/dist/styles.css +62 -7
  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
@@ -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-KEKAD3BZ.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) {
@@ -29,15 +29,20 @@ function Menu({
29
29
  items,
30
30
  icon,
31
31
  trigger,
32
+ trailingIcon,
32
33
  triggerVariant = "ghost",
33
34
  triggerTabIndex,
34
35
  open: controlled,
35
36
  onOpenChange,
36
37
  align = "start",
38
+ width = "content",
39
+ renderTrigger,
40
+ header,
37
41
  className
38
42
  }) {
39
43
  const id = useId();
40
44
  const menuId = `${id}-menu`;
45
+ const headerId = `${id}-header`;
41
46
  const [uncontrolled, setUncontrolled] = useState(false);
42
47
  const open = controlled ?? uncontrolled;
43
48
  const triggerRef = useRef(null);
@@ -85,7 +90,9 @@ function Menu({
85
90
  const inHost = container !== document.body;
86
91
  const host = inHost ? container.getBoundingClientRect() : viewportBounds();
87
92
  const rect = at.getBoundingClientRect();
88
- const own = box.getBoundingClientRect();
93
+ const measured = box.getBoundingClientRect();
94
+ const floor = width === "trigger" ? rect.width : void 0;
95
+ const own = { width: Math.max(measured.width, floor ?? 0), height: measured.height };
89
96
  const local = {
90
97
  x: (align === "end" ? rect.right - own.width : rect.left) - (inHost ? host.x : 0),
91
98
  y: rect.top - (inHost ? host.y : 0),
@@ -104,8 +111,10 @@ function Menu({
104
111
  return;
105
112
  }
106
113
  const spot = placePopup(local, { width: own.width, height: own.height }, bounds, LAYER_GAP);
107
- setPlace((was) => was && was.left === spot.left && was.top === spot.top ? was : { left: spot.left, top: spot.top });
108
- }, [align, close, container]);
114
+ setPlace(
115
+ (was) => was && was.left === spot.left && was.top === spot.top && was.floor === floor ? was : { left: spot.left, top: spot.top, floor }
116
+ );
117
+ }, [align, close, container, width]);
109
118
  useLayoutEffect(() => {
110
119
  if (!open) return;
111
120
  position();
@@ -217,25 +226,38 @@ function Menu({
217
226
  },
218
227
  entry.key
219
228
  );
220
- const list = open ? /* @__PURE__ */ jsx(
229
+ const list = open ? /* @__PURE__ */ jsxs(
221
230
  "div",
222
231
  {
223
232
  className: cx("crewlet-menu", container !== null && container !== document.body ? "crewlet-menu--in-host" : null, className),
224
233
  id: menuId,
225
234
  role: "menu",
226
235
  "aria-label": label,
236
+ "aria-describedby": header ? headerId : void 0,
227
237
  tabIndex: -1,
228
238
  ref: (el) => {
229
239
  menu.current = el;
230
240
  popup.panelRef(el);
231
241
  },
232
- style: place ? { left: place.left, top: place.top, zIndex: popup.zIndex } : { visibility: "hidden" },
242
+ style: place ? {
243
+ left: place.left,
244
+ top: place.top,
245
+ zIndex: popup.zIndex,
246
+ ...place.floor === void 0 ? null : { "--crewlet-menu-floor": `${place.floor}px` }
247
+ } : { visibility: "hidden" },
233
248
  onKeyDown: onMenuKeyDown,
234
249
  onPointerDown: (event) => event.stopPropagation(),
235
250
  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
- )
251
+ children: [
252
+ header ? (
253
+ // PRESENTATIONAL, so a menu holds only items to a screen reader, and
254
+ // the menu's description, so what it says is heard when it opens.
255
+ /* @__PURE__ */ jsx("div", { role: "presentation", id: headerId, className: "crewlet-menu__header", children: header })
256
+ ) : null,
257
+ runs(items).map(
258
+ (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)
259
+ )
260
+ ]
239
261
  }
240
262
  ) : null;
241
263
  const shared = {
@@ -258,7 +280,7 @@ function Menu({
258
280
  onKeyDown: onTriggerKeyDown
259
281
  };
260
282
  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 }),
283
+ 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, trailingIcon, children: trigger }),
262
284
  list && container ? createPortal(list, container) : null
263
285
  ] });
264
286
  }
@@ -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,46 +1,46 @@
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
12
  export { Table } from '../chunk-V2N3BMOT.js';
13
13
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-MUGM7SEG.js';
14
- export { TagsInput } from '../chunk-7ZNKEPLN.js';
15
14
  export { TagGroup } from '../chunk-E6UWRXNM.js';
15
+ export { TagsInput } from '../chunk-7ZNKEPLN.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';
31
+ export { PrincipalPicker } from '../chunk-JEDWC3GI.js';
32
32
  export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from '../chunk-Y56FM3K4.js';
33
33
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from '../chunk-ZAJHGDAW.js';
34
+ export { FRAME_HELLO_TIMEOUT_MS, SandboxedFrame } from '../chunk-VYDFB6PJ.js';
35
+ export { Skeleton } from '../chunk-W5J7R5EB.js';
34
36
  export { SearchTrigger } from '../chunk-6DRDCT22.js';
35
- export { Section } from '../chunk-A2UXBCLO.js';
36
- export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-N4GFRW5C.js';
37
+ export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-J4OKGJQ6.js';
37
38
  export { PinTile } from '../chunk-6MIXD6IW.js';
38
39
  export { PresenceStack } from '../chunk-YM3GJHGW.js';
39
40
  import '../chunk-CENOOTAV.js';
40
41
  export { PricingCard } from '../chunk-DQSXWQMJ.js';
41
42
  export { Tag } from '../chunk-GFV4LJHH.js';
42
43
  export { StatusDot } from '../chunk-WIATRXEJ.js';
43
- export { PrincipalPicker } from '../chunk-JEDWC3GI.js';
44
44
  export { NewItemsNotice } from '../chunk-PXU6HOZB.js';
45
45
  export { Note } from '../chunk-63WJLRB2.js';
46
46
  export { FactLine, ObjectHeader, SetByLine } from '../chunk-I7WXZOWA.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-L2OQRPXJ.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';
@@ -83,39 +80,40 @@ export { Disclosure } from '../chunk-S4RCG44T.js';
83
80
  export { Divider } from '../chunk-6KWNXIDE.js';
84
81
  export { DownloadButton } from '../chunk-BJCFNRGH.js';
85
82
  export { downloadText, safeFilename, useDownload } from '../chunk-F6NZOVWL.js';
86
- export { ConfirmField, confirmMatches } from '../chunk-YSY6UJ4F.js';
87
- export { InlineCode } from '../chunk-5CLW2CXT.js';
88
83
  export { CONFLICT_NOTE_LABELS, ConflictNote } from '../chunk-UO7JZVCO.js';
89
84
  export { Container } from '../chunk-QVE4GJAT.js';
85
+ export { ChoiceList } from '../chunk-QBXZLGK2.js';
90
86
  export { CursorFlag } from '../chunk-3BYIWOTV.js';
91
87
  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';
88
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-KYEXTEJ3.js';
89
+ export { PageHeader } from '../chunk-HOXGBLEY.js';
90
+ export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-PGRPNDWM.js';
91
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-RE6ED5TO.js';
92
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-BXSGT3YC.js';
96
93
  export { ChoiceButtons } from '../chunk-YSJC7AZC.js';
97
94
  export { CodeBlock } from '../chunk-GDDE4UM7.js';
98
95
  export { CopyButton, Copyable } from '../chunk-W46LPU4R.js';
99
96
  export { useClipboard, writeClipboard } from '../chunk-STJ7QBC3.js';
100
97
  export { useOutcome } from '../chunk-DTIW4CHZ.js';
101
98
  export { Combobox } from '../chunk-LOLELDBW.js';
102
- export { CommandPalette } from '../chunk-UXELEORU.js';
103
- export { ConfirmModal, Modal } from '../chunk-7IJARUIF.js';
99
+ export { CommandPalette } from '../chunk-4HRB62EA.js';
100
+ export { ConfirmModal, Modal } from '../chunk-F4DPAJCN.js';
104
101
  export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, useOptionKeys } from '../chunk-F73MC7EZ.js';
105
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-EZBLOUWX.js';
102
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-IC64IWOO.js';
106
103
  export { Document, DocumentTitle } from '../chunk-WI6K5M5X.js';
107
104
  export { COMPOSER_COUNTER_AT, Composer } from '../chunk-VJLYGPPE.js';
108
105
  export { Kbd, isApplePlatform, keyGlyph } from '../chunk-SMBKXWML.js';
106
+ export { ConfirmField, confirmMatches } from '../chunk-YSY6UJ4F.js';
107
+ export { InlineCode } from '../chunk-5CLW2CXT.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-BFQK7CYJ.js';
154
152
  import '../chunk-IG75YMUN.js';
153
+ export { Menu } from '../chunk-UFKUWVMV.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,46 +1,46 @@
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
12
  export { Table } from './chunk-V2N3BMOT.js';
13
13
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from './chunk-MUGM7SEG.js';
14
- export { TagsInput } from './chunk-7ZNKEPLN.js';
15
14
  export { TagGroup } from './chunk-E6UWRXNM.js';
15
+ export { TagsInput } from './chunk-7ZNKEPLN.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';
31
+ export { PrincipalPicker } from './chunk-JEDWC3GI.js';
32
32
  export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from './chunk-Y56FM3K4.js';
33
33
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from './chunk-ZAJHGDAW.js';
34
+ export { FRAME_HELLO_TIMEOUT_MS, SandboxedFrame } from './chunk-VYDFB6PJ.js';
35
+ export { Skeleton } from './chunk-W5J7R5EB.js';
34
36
  export { SearchTrigger } from './chunk-6DRDCT22.js';
35
- export { Section } from './chunk-A2UXBCLO.js';
36
- export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from './chunk-N4GFRW5C.js';
37
+ export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from './chunk-J4OKGJQ6.js';
37
38
  export { PinTile } from './chunk-6MIXD6IW.js';
38
39
  export { PresenceStack } from './chunk-YM3GJHGW.js';
39
40
  import './chunk-CENOOTAV.js';
40
41
  export { PricingCard } from './chunk-DQSXWQMJ.js';
41
42
  export { Tag } from './chunk-GFV4LJHH.js';
42
43
  export { StatusDot } from './chunk-WIATRXEJ.js';
43
- export { PrincipalPicker } from './chunk-JEDWC3GI.js';
44
44
  export { NewItemsNotice } from './chunk-PXU6HOZB.js';
45
45
  export { Note } from './chunk-63WJLRB2.js';
46
46
  export { FactLine, ObjectHeader, SetByLine } from './chunk-I7WXZOWA.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-L2OQRPXJ.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';
@@ -83,39 +80,40 @@ export { Disclosure } from './chunk-S4RCG44T.js';
83
80
  export { Divider } from './chunk-6KWNXIDE.js';
84
81
  export { DownloadButton } from './chunk-BJCFNRGH.js';
85
82
  export { downloadText, safeFilename, useDownload } from './chunk-F6NZOVWL.js';
86
- export { ConfirmField, confirmMatches } from './chunk-YSY6UJ4F.js';
87
- export { InlineCode } from './chunk-5CLW2CXT.js';
88
83
  export { CONFLICT_NOTE_LABELS, ConflictNote } from './chunk-UO7JZVCO.js';
89
84
  export { Container } from './chunk-QVE4GJAT.js';
85
+ export { ChoiceList } from './chunk-QBXZLGK2.js';
90
86
  export { CursorFlag } from './chunk-3BYIWOTV.js';
91
87
  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';
88
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-KYEXTEJ3.js';
89
+ export { PageHeader } from './chunk-HOXGBLEY.js';
90
+ export { Toolbar, ToolbarOverflow, ToolbarWide } from './chunk-PGRPNDWM.js';
91
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-RE6ED5TO.js';
92
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-BXSGT3YC.js';
96
93
  export { ChoiceButtons } from './chunk-YSJC7AZC.js';
97
94
  export { CodeBlock } from './chunk-GDDE4UM7.js';
98
95
  export { CopyButton, Copyable } from './chunk-W46LPU4R.js';
99
96
  export { useClipboard, writeClipboard } from './chunk-STJ7QBC3.js';
100
97
  export { useOutcome } from './chunk-DTIW4CHZ.js';
101
98
  export { Combobox } from './chunk-LOLELDBW.js';
102
- export { CommandPalette } from './chunk-UXELEORU.js';
103
- export { ConfirmModal, Modal } from './chunk-7IJARUIF.js';
99
+ export { CommandPalette } from './chunk-4HRB62EA.js';
100
+ export { ConfirmModal, Modal } from './chunk-F4DPAJCN.js';
104
101
  export { HIGHLIGHT_REST_MS, TYPE_AHEAD_WINDOW, useHighlightRest, useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
105
- export { COMMENT_THREAD_LABELS, CommentThread } from './chunk-EZBLOUWX.js';
102
+ export { COMMENT_THREAD_LABELS, CommentThread } from './chunk-IC64IWOO.js';
106
103
  export { Document, DocumentTitle } from './chunk-WI6K5M5X.js';
107
104
  export { COMPOSER_COUNTER_AT, Composer } from './chunk-VJLYGPPE.js';
108
105
  export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
106
+ export { ConfirmField, confirmMatches } from './chunk-YSY6UJ4F.js';
107
+ export { InlineCode } from './chunk-5CLW2CXT.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-BFQK7CYJ.js';
154
152
  import './chunk-IG75YMUN.js';
153
+ export { Menu } from './chunk-UFKUWVMV.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-KEKAD3BZ.css */
13286
13308
  /*
13287
13309
  * The menu button's panel.
13288
13310
  *
@@ -13319,9 +13341,15 @@ svg.crewlet-datetime__chevron {
13319
13341
  * however long that label was and the 320px was a number nothing read. A
13320
13342
  * width is clamped by the ceiling, and the label that no longer fits is the
13321
13343
  * one that truncates.
13344
+ *
13345
+ * A FLOOR, when the trigger sets one (`width="trigger"`, which writes
13346
+ * --crewlet-menu-floor): the panel is never narrower than a trigger that
13347
+ * spans a column. The ceiling is lifted to meet it, so the two never cross
13348
+ * and the rule above still holds.
13322
13349
  */
13323
13350
  width: max-content;
13324
- max-width: 320px;
13351
+ min-width: var(--crewlet-menu-floor, 0px);
13352
+ max-width: max(320px, var(--crewlet-menu-floor, 0px));
13325
13353
  max-height: min(360px, 60vh);
13326
13354
  overflow-y: auto;
13327
13355
  overscroll-behavior: contain;
@@ -13478,6 +13506,7 @@ svg.crewlet-datetime__chevron {
13478
13506
  .crewlet-menu__text {
13479
13507
  display: flex;
13480
13508
  flex-direction: column;
13509
+ gap: calc(var(--spacing-1) / 2);
13481
13510
  min-width: 0;
13482
13511
  }
13483
13512
 
@@ -13487,9 +13516,14 @@ svg.crewlet-datetime__chevron {
13487
13516
  white-space: nowrap;
13488
13517
  }
13489
13518
 
13519
+ /*
13520
+ * ONE STEP UNDER THE LABEL, not two. At 11px under a 13px label the second
13521
+ * line read as fine print; at 12px in the tertiary ink it is still plainly the
13522
+ * lesser line, and it is legible at a glance.
13523
+ */
13490
13524
  .crewlet-menu__description {
13491
13525
  color: var(--color-text-tertiary);
13492
- font-size: var(--font-size-2xs);
13526
+ font-size: var(--font-size-xs);
13493
13527
  white-space: normal;
13494
13528
  }
13495
13529
 
@@ -13504,6 +13538,27 @@ svg.crewlet-datetime__chevron {
13504
13538
  font-size: var(--font-size-xs);
13505
13539
  }
13506
13540
 
13541
+ /*
13542
+ * Facts above the items, across the panel's full width with a hairline under
13543
+ * them: what the actions below are about, read rather than pressed.
13544
+ *
13545
+ * A NAME AND ITS VALUE SHARE ONE LINE, the name at the start and the value at
13546
+ * the end, as a property reads ("Access … Admin"). Stacked, the pair spent two
13547
+ * lines on one fact. A value too long for the line wraps beneath its name.
13548
+ */
13549
+ .crewlet-menu__header {
13550
+ display: flex;
13551
+ flex-wrap: wrap;
13552
+ align-items: center;
13553
+ justify-content: space-between;
13554
+ gap: var(--spacing-1) var(--spacing-2);
13555
+ margin: calc(var(--spacing-1) * -1) calc(var(--spacing-1) * -1) var(--spacing-1);
13556
+ padding: var(--spacing-2) var(--spacing-3);
13557
+ border-bottom: 1px solid var(--color-border-default);
13558
+ font-size: var(--font-size-xs);
13559
+ color: var(--color-text-secondary);
13560
+ }
13561
+
13507
13562
  .crewlet-menu__separator {
13508
13563
  height: 1px;
13509
13564
  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.22.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.22.0",
46
+ "@crewlethq/tokens": "0.22.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';