@crewlethq/ui 0.10.0 → 0.11.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 (80) hide show
  1. package/README.md +17 -1
  2. package/dist/Accordion/index.js +3 -3
  3. package/dist/AppShell/index.js +2 -2
  4. package/dist/AvatarPicker/AvatarPicker.d.ts +32 -0
  5. package/dist/AvatarPicker/index.d.ts +3 -0
  6. package/dist/AvatarPicker/index.js +14 -0
  7. package/dist/AvatarPicker-PREY36MG.css +54 -0
  8. package/dist/Canvas/index.js +3 -3
  9. package/dist/Card/index.js +2 -2
  10. package/dist/CharacterPicker/index.js +2 -1
  11. package/dist/CodeBlock/index.js +3 -3
  12. package/dist/Combobox/index.js +3 -3
  13. package/dist/CommandPalette/index.js +6 -6
  14. package/dist/Copyable/index.js +2 -2
  15. package/dist/DataTable/index.js +6 -6
  16. package/dist/DataView/index.js +11 -11
  17. package/dist/DateTimePicker/index.js +4 -4
  18. package/dist/Disclosure/index.js +3 -3
  19. package/dist/FactList/FactList.d.ts +33 -0
  20. package/dist/FactList/index.d.ts +3 -0
  21. package/dist/FactList/index.js +6 -0
  22. package/dist/FactList-G2H73NFR.css +57 -0
  23. package/dist/HuePicker/index.js +4 -3
  24. package/dist/Input/FormField.d.ts +8 -1
  25. package/dist/Input/index.js +1 -1
  26. package/dist/{Input-DRFNI26F.css → Input-RAKNQJCV.css} +7 -0
  27. package/dist/ListInput/ListInput.d.ts +3 -1
  28. package/dist/ListInput/index.js +3 -3
  29. package/dist/Menu/index.js +3 -3
  30. package/dist/Modal/index.js +3 -3
  31. package/dist/OrgTable/index.js +5 -5
  32. package/dist/SegmentedControl/index.js +3 -3
  33. package/dist/Tabs/Tabs.d.ts +18 -0
  34. package/dist/Tabs/index.d.ts +1 -1
  35. package/dist/Tabs/index.js +1 -1
  36. package/dist/{Tabs-BWFQSWY3.css → Tabs-5I5Q5KKM.css} +33 -0
  37. package/dist/TagsInput/index.js +2 -2
  38. package/dist/ThemeSwitcher/index.js +4 -4
  39. package/dist/TimeWindowPicker/index.js +5 -5
  40. package/dist/TreeCanvas/index.js +4 -4
  41. package/dist/TreeGrid/index.js +2 -2
  42. package/dist/chunk-3L5NHASN.js +1 -0
  43. package/dist/{chunk-L7THQMFB.js → chunk-5WEVLIB6.js} +1 -1
  44. package/dist/{chunk-IGWPZZIB.js → chunk-6SDGRKQ7.js} +2 -2
  45. package/dist/{chunk-EUT7VBQG.js → chunk-CIOKUMVC.js} +6 -6
  46. package/dist/{chunk-LPHHDCN3.js → chunk-EBBAAQDY.js} +1 -1
  47. package/dist/{chunk-UYK72NOS.js → chunk-ELZKOVEC.js} +1 -1
  48. package/dist/chunk-EXHQ2QVW.js +1 -0
  49. package/dist/{chunk-ZGX2DP7F.js → chunk-FTEJPHBI.js} +8 -2
  50. package/dist/{chunk-RIAZM6L3.js → chunk-G2AVKPSL.js} +1 -1
  51. package/dist/{chunk-IZHN5I3H.js → chunk-HLBRPES3.js} +4 -4
  52. package/dist/chunk-HV6IZFBK.js +64 -0
  53. package/dist/{chunk-HEOVQZL7.js → chunk-JHQUT4WJ.js} +6 -2
  54. package/dist/{chunk-26TXVHN2.js → chunk-K5Q2DK3P.js} +1 -2
  55. package/dist/{chunk-MORLKUGM.js → chunk-KGTQ5CVD.js} +1 -1
  56. package/dist/{chunk-6HXH57BL.js → chunk-LZP7FGT7.js} +4 -2
  57. package/dist/{chunk-CVB7O3SZ.js → chunk-R4ZJB5YX.js} +4 -4
  58. package/dist/{chunk-MICH6QSJ.js → chunk-S4RCG44T.js} +1 -1
  59. package/dist/{chunk-UI6HWAWE.js → chunk-UAQIUSSK.js} +1 -1
  60. package/dist/chunk-URYDN2KA.js +25 -0
  61. package/dist/{chunk-X6K6OZ47.js → chunk-WEIINZPA.js} +1 -1
  62. package/dist/{chunk-UO5UK7V2.js → chunk-YXMCUKFI.js} +0 -1
  63. package/dist/{chunk-7FFDJQ23.js → chunk-ZMJHK7DR.js} +1 -1
  64. package/dist/generated/index.d.ts +2 -0
  65. package/dist/generated/index.js +53 -49
  66. package/dist/index.js +53 -49
  67. package/dist/styles.css +159 -2
  68. package/dist/utils/index.js +1 -1
  69. package/package.json +3 -3
  70. package/dist/{chunk-VE6LD3KM.js → chunk-2PZBIHRV.js} +2 -2
  71. package/dist/{chunk-MPXI6FM6.js → chunk-7JGWSOLM.js} +1 -1
  72. package/dist/{chunk-OVLJEVQS.js → chunk-7LD6P32I.js} +1 -1
  73. package/dist/{chunk-CEOXFO3E.js → chunk-EG6NYWVK.js} +1 -1
  74. package/dist/{chunk-FZVJDJFN.js → chunk-ENJUPIND.js} +1 -1
  75. package/dist/{chunk-5I56UXBJ.js → chunk-JCNUQ3US.js} +2 -2
  76. package/dist/{chunk-SX2DFTQV.js → chunk-MCPKHYMC.js} +1 -1
  77. package/dist/{chunk-YPTC4TX5.js → chunk-PQLMLG5K.js} +0 -0
  78. package/dist/{chunk-BTHX2FS3.js → chunk-TEEJSTFG.js} +2 -2
  79. package/dist/{chunk-LSB3EHBW.js → chunk-TFH6SYWB.js} +2 -2
  80. package/dist/{chunk-26SCUACK.js → chunk-YACKC3K2.js} +1 -1
package/dist/index.js CHANGED
@@ -1,101 +1,105 @@
1
- import './chunk-YPTC4TX5.js';
1
+ import './chunk-PQLMLG5K.js';
2
+ export { TreeCanvas } from './chunk-5WEVLIB6.js';
2
3
  import './chunk-AER7UDD4.js';
4
+ export { ThemeToggle } from './chunk-ORNOOMVY.js';
5
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-HLBRPES3.js';
3
6
  export { Timeline, TimelineItem } from './chunk-O67VF5MS.js';
4
7
  export { ToastProvider, Toaster, useToast } from './chunk-UG5ZMAXW.js';
5
- export { Tooltip } from './chunk-CQY5NTRS.js';
6
- export { TreeCanvas } from './chunk-L7THQMFB.js';
8
+ export { Switch } from './chunk-A722MUNR.js';
9
+ export { Table } from './chunk-V2N3BMOT.js';
7
10
  export { TagGroup } from './chunk-E6UWRXNM.js';
8
- export { TagsInput } from './chunk-MPXI6FM6.js';
11
+ export { TagsInput } from './chunk-7JGWSOLM.js';
9
12
  export { Text } from './chunk-23DHIMJA.js';
10
- export { DensitySwitcher, ThemeSwitcher } from './chunk-X6K6OZ47.js';
11
- export { ThemeToggle } from './chunk-ORNOOMVY.js';
13
+ export { DensitySwitcher, ThemeSwitcher } from './chunk-WEIINZPA.js';
12
14
  export { applyDensity, applyStoredPreferences, applyTheme, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-K3OWD7BJ.js';
13
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-IZHN5I3H.js';
15
+ export { Select } from './chunk-SEFMO2EV.js';
16
+ export { matchesShortcut, useShortcut } from './chunk-2FPENTCF.js';
14
17
  export { NavGroup, NavItem, SidebarNav } from './chunk-IVFJD7WY.js';
15
18
  export { Skeleton } from './chunk-W5J7R5EB.js';
16
19
  export { StatCard } from './chunk-IKB6HFGK.js';
17
20
  export { StatGroup } from './chunk-QVAFL2LE.js';
18
21
  export { Stepper } from './chunk-5QWIJSQM.js';
19
- export { Switch } from './chunk-A722MUNR.js';
20
- export { Table } from './chunk-V2N3BMOT.js';
22
+ export { PricingCard } from './chunk-UCYIRDND.js';
23
+ export { Tag } from './chunk-LOECRMHA.js';
24
+ export { StatusDot } from './chunk-WIATRXEJ.js';
21
25
  export { Prose } from './chunk-JCSA3XVH.js';
22
26
  export { SearchTrigger } from './chunk-6DRDCT22.js';
23
27
  export { Section } from './chunk-A2UXBCLO.js';
24
- import './chunk-UI6HWAWE.js';
28
+ import './chunk-UAQIUSSK.js';
25
29
  export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
26
- export { Select } from './chunk-SEFMO2EV.js';
27
- export { matchesShortcut, useShortcut } from './chunk-2FPENTCF.js';
30
+ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-4PZ6FJKW.js';
28
31
  export { NewItemsNotice } from './chunk-PXU6HOZB.js';
29
32
  export { OrgNodeDisclosure, OrgNodeLabel, OrgNodeLead } from './chunk-IHGKPEEV.js';
30
- export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from './chunk-7FFDJQ23.js';
31
- export { TreeGrid } from './chunk-SX2DFTQV.js';
33
+ export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from './chunk-ZMJHK7DR.js';
34
+ export { TreeGrid } from './chunk-MCPKHYMC.js';
32
35
  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-S3BCVWTU.js';
33
36
  export { OrgLabel } from './chunk-6OF2DBKY.js';
34
- export { PricingCard } from './chunk-UCYIRDND.js';
35
- export { Tag } from './chunk-LOECRMHA.js';
36
- export { StatusDot } from './chunk-WIATRXEJ.js';
37
37
  export { AutoGrid, Inline, Spacer, Stack } from './chunk-W4ENKCXJ.js';
38
38
  export { Link } from './chunk-ZPSOF6VL.js';
39
39
  export { List, ListItem } from './chunk-DS2C73RJ.js';
40
- export { ListInput } from './chunk-6HXH57BL.js';
41
- export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-4PZ6FJKW.js';
40
+ export { ListInput } from './chunk-LZP7FGT7.js';
41
+ export { Eyebrow } from './chunk-RK4XPHVG.js';
42
+ export { FactList } from './chunk-URYDN2KA.js';
43
+ export { Tooltip } from './chunk-CQY5NTRS.js';
42
44
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from './chunk-5YLON2PW.js';
43
45
  export { useFullscreen } from './chunk-XDTYBF2F.js';
44
- export { HuePicker } from './chunk-26TXVHN2.js';
45
- export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from './chunk-AYKXMIOR.js';
46
- export { SegmentedControl } from './chunk-LPHHDCN3.js';
47
- export { TabPanel, Tabs, tabId } from './chunk-HEOVQZL7.js';
46
+ import './chunk-EXHQ2QVW.js';
48
47
  export { ImageUpload } from './chunk-LAQK4V3Z.js';
49
48
  export { InlineCode } from './chunk-NN62JQLR.js';
50
49
  export { DescriptionList, DescriptionListItem } from './chunk-XN4JBAN3.js';
51
50
  export { DIFF_LIST_LABELS, DiffList } from './chunk-LFHCXZO5.js';
52
- export { Disclosure } from './chunk-MICH6QSJ.js';
51
+ export { Disclosure } from './chunk-S4RCG44T.js';
53
52
  export { EmptyState } from './chunk-RA2ULG6H.js';
54
53
  export { EntityChip } from './chunk-DDTDN5L2.js';
55
54
  export { ErrorBoundary } from './chunk-XX2VQE55.js';
56
- export { Eyebrow } from './chunk-RK4XPHVG.js';
57
- export { Combobox } from './chunk-UYK72NOS.js';
58
- export { CommandPalette } from './chunk-IGWPZZIB.js';
55
+ export { CodeBlock } from './chunk-KGTQ5CVD.js';
56
+ export { Combobox } from './chunk-ELZKOVEC.js';
57
+ export { CommandPalette } from './chunk-6SDGRKQ7.js';
59
58
  export { Container } from './chunk-QVE4GJAT.js';
60
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-EUT7VBQG.js';
59
+ export { CopyButton, Copyable } from './chunk-YACKC3K2.js';
60
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-CIOKUMVC.js';
61
61
  export { Toolbar, ToolbarOverflow, ToolbarWide } from './chunk-PGRPNDWM.js';
62
62
  export { RelativeTime, currentNow, formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, useNow } from './chunk-3CZ7XAVY.js';
63
63
  export { PageHeader } from './chunk-HOXGBLEY.js';
64
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-JCNUQ3US.js';
64
65
  export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
66
+ export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from './chunk-FTEJPHBI.js';
65
67
  export { TYPE_AHEAD_WINDOW, useListbox, useOptionKeys } from './chunk-6MU7HNB4.js';
66
- export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from './chunk-ZGX2DP7F.js';
67
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-CVB7O3SZ.js';
68
- export { Menu } from './chunk-LSB3EHBW.js';
68
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-R4ZJB5YX.js';
69
+ export { Menu } from './chunk-TFH6SYWB.js';
69
70
  export { EMPTY_VALUE, EmptyValue } from './chunk-EUCC37WY.js';
70
- export { ConfirmModal, Modal } from './chunk-BTHX2FS3.js';
71
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-5I56UXBJ.js';
72
- export { Popover } from './chunk-PDUZO35I.js';
71
+ export { ConfirmModal, Modal } from './chunk-TEEJSTFG.js';
72
+ export { useClipboard, writeClipboard } from './chunk-5VNUYO76.js';
73
73
  export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from './chunk-GXQ3B46I.js';
74
74
  export { Callout } from './chunk-R6FBDTP3.js';
75
- 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-VE6LD3KM.js';
75
+ 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-2PZBIHRV.js';
76
76
  import './chunk-53DVJCVW.js';
77
- export { Card } from './chunk-CEOXFO3E.js';
77
+ export { Button, ButtonLink } from './chunk-OG6CL3EB.js';
78
+ export { Card } from './chunk-EG6NYWVK.js';
78
79
  export { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
79
- export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from './chunk-UO5UK7V2.js';
80
- import './chunk-CBOICT64.js';
80
+ import './chunk-3L5NHASN.js';
81
81
  export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from './chunk-4WNNEDKO.js';
82
82
  export { Checkbox } from './chunk-YCTMKKRA.js';
83
- export { CodeBlock } from './chunk-MORLKUGM.js';
84
- export { CopyButton, Copyable } from './chunk-26SCUACK.js';
85
- export { useClipboard, writeClipboard } from './chunk-5VNUYO76.js';
86
- export { Accordion, AccordionItem } from './chunk-RIAZM6L3.js';
87
- export { DisclosureAnatomy } from './chunk-FZVJDJFN.js';
88
- export { Count } from './chunk-BHHIIK3M.js';
83
+ export { Accordion, AccordionItem } from './chunk-G2AVKPSL.js';
84
+ export { DisclosureAnatomy } from './chunk-ENJUPIND.js';
89
85
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from './chunk-PQADV6P6.js';
90
86
  export { ADD_PILL_MS, AddPill } from './chunk-74WGARJE.js';
87
+ export { AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './chunk-7LD6P32I.js';
88
+ export { IconButton } from './chunk-4FQT6ZAY.js';
91
89
  export { Announcer, announce, useAnnouncer } from './chunk-RSAQOKH3.js';
92
- export { AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './chunk-OVLJEVQS.js';
90
+ export { AvatarStack, avatarStackLabel } from './chunk-3UK4VFSK.js';
91
+ export { AvatarPicker } from './chunk-HV6IZFBK.js';
92
+ export { HuePicker } from './chunk-K5Q2DK3P.js';
93
+ export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from './chunk-AYKXMIOR.js';
94
+ export { SegmentedControl } from './chunk-EBBAAQDY.js';
95
+ export { TabPanel, Tabs, tabId } from './chunk-JHQUT4WJ.js';
96
+ export { Popover } from './chunk-PDUZO35I.js';
97
+ export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from './chunk-YXMCUKFI.js';
98
+ import './chunk-CBOICT64.js';
99
+ export { Count } from './chunk-BHHIIK3M.js';
93
100
  export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, outsideBounds, placePopup, useLayerContainer, viewportBounds } from './chunk-7RPGY3JE.js';
94
101
  export { focusables, isComposing, isModalLayerOpen, layerCount, useBodyScrollLock, useModalLayer, usePopupLayer } from './chunk-R25RGPUB.js';
95
- export { IconButton } from './chunk-4FQT6ZAY.js';
96
- export { AvatarStack, avatarStackLabel } from './chunk-3UK4VFSK.js';
102
+ export { VisuallyHidden } from './chunk-BZFWDIV6.js';
97
103
  export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, AVATAR_STATUSES, AVATAR_STATUS_LABELS, Avatar, avatarCorner, avatarPixels, avatarTint, getInitials } from './chunk-HI6Q2UXQ.js';
98
104
  export { BrandLockup } from './chunk-7KBNFFM3.js';
99
- export { Button, ButtonLink } from './chunk-OG6CL3EB.js';
100
- export { VisuallyHidden } from './chunk-BZFWDIV6.js';
101
105
  export { cx } from './chunk-ODEQTPFM.js';
package/dist/styles.css CHANGED
@@ -1413,6 +1413,63 @@
1413
1413
  }
1414
1414
 
1415
1415
 
1416
+ /* AvatarPicker-PREY36MG.css */
1417
+ /*
1418
+ * The badge as a button, with a pencil pip on its corner saying it changes
1419
+ * the badge. No chrome of its own beyond the focus ring: the badge is the
1420
+ * control's face.
1421
+ */
1422
+ .crewlet-avatar-picker {
1423
+ position: relative;
1424
+ display: inline-flex;
1425
+ flex: none;
1426
+ padding: 0;
1427
+ border: 0;
1428
+ border-radius: var(--radius-lg);
1429
+ background: none;
1430
+ cursor: pointer;
1431
+ }
1432
+
1433
+ button.crewlet-avatar-picker:focus-visible {
1434
+ outline: 2px solid var(--color-focus);
1435
+ outline-offset: 2px;
1436
+ }
1437
+
1438
+ .crewlet-avatar-picker__pip {
1439
+ position: absolute;
1440
+ right: calc(var(--spacing-1) * -1);
1441
+ bottom: calc(var(--spacing-1) * -1);
1442
+ display: grid;
1443
+ place-items: center;
1444
+ width: 16px;
1445
+ height: 16px;
1446
+ border: 1px solid var(--color-border-strong);
1447
+ border-radius: var(--radius-circle);
1448
+ background: var(--color-surface-elevated);
1449
+ color: var(--color-text-secondary);
1450
+ }
1451
+
1452
+ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
1453
+ color: var(--color-text-primary);
1454
+ }
1455
+
1456
+ .crewlet-avatar-picker__body {
1457
+ display: grid;
1458
+ gap: var(--spacing-2);
1459
+ width: max-content;
1460
+ max-width: 100%;
1461
+ padding: var(--spacing-3);
1462
+ }
1463
+
1464
+ .crewlet-avatar-picker__label {
1465
+ font-size: var(--font-size-2xs);
1466
+ font-weight: var(--font-weight-medium);
1467
+ letter-spacing: var(--font-letter-spacing-wide);
1468
+ text-transform: uppercase;
1469
+ color: var(--color-text-tertiary);
1470
+ }
1471
+
1472
+
1416
1473
  /* AvatarStack-GEJBNV7E.css */
1417
1474
  /*
1418
1475
  * Several badges as one mark (AvatarStack.tsx).
@@ -8032,6 +8089,66 @@ svg.crewlet-datetime__chevron {
8032
8089
  }
8033
8090
 
8034
8091
 
8092
+ /* FactList-G2H73NFR.css */
8093
+ /*
8094
+ * Read-only facts in one bordered box, a 32px row each: label and lock on the
8095
+ * left, the value on the right. The rows share the box's hairline between
8096
+ * them, so a list of six reads as one object rather than six cards.
8097
+ */
8098
+ .crewlet-fact-list {
8099
+ display: grid;
8100
+ margin: 0;
8101
+ border: 1px solid var(--color-border-default);
8102
+ border-radius: var(--radius-md);
8103
+ overflow: hidden;
8104
+ }
8105
+
8106
+ .crewlet-fact-list__row {
8107
+ display: flex;
8108
+ align-items: center;
8109
+ gap: var(--spacing-2);
8110
+ min-height: 32px;
8111
+ padding: var(--spacing-1) var(--spacing-3);
8112
+ font-size: var(--font-size-compact);
8113
+ }
8114
+
8115
+ .crewlet-fact-list__row + .crewlet-fact-list__row {
8116
+ border-top: 1px solid var(--color-border-default);
8117
+ }
8118
+
8119
+ .crewlet-fact-list__row.is-locked {
8120
+ cursor: help;
8121
+ }
8122
+
8123
+ .crewlet-fact-list__label {
8124
+ display: flex;
8125
+ flex: 1 1 auto;
8126
+ align-items: center;
8127
+ gap: var(--spacing-1);
8128
+ min-width: 0;
8129
+ margin: 0;
8130
+ color: var(--color-text-tertiary);
8131
+ }
8132
+
8133
+ .crewlet-fact-list__lock {
8134
+ flex: none;
8135
+ color: var(--color-text-tertiary);
8136
+ }
8137
+
8138
+ .crewlet-fact-list__value {
8139
+ display: flex;
8140
+ flex: 0 1 auto;
8141
+ align-items: center;
8142
+ justify-content: flex-end;
8143
+ gap: var(--spacing-2);
8144
+ min-width: 0;
8145
+ margin: 0;
8146
+ color: var(--color-text-secondary);
8147
+ text-align: right;
8148
+ overflow-wrap: anywhere;
8149
+ }
8150
+
8151
+
8035
8152
  /* FilterChip-EZ4QMW4E.css */
8036
8153
  /*
8037
8154
  * The filter chip: neutral until it is on, and then the accent.
@@ -8624,7 +8741,7 @@ svg.crewlet-datetime__chevron {
8624
8741
  }
8625
8742
 
8626
8743
 
8627
- /* Input-DRFNI26F.css */
8744
+ /* Input-RAKNQJCV.css */
8628
8745
  /*
8629
8746
  * The form row: Input, Textarea, Label, FormField, FormRow, FormSection and
8630
8747
  * ReadOnlyField.
@@ -9129,6 +9246,13 @@ svg.crewlet-datetime__chevron {
9129
9246
  color: var(--color-text-tertiary);
9130
9247
  }
9131
9248
 
9249
+ /* SHOWN ONLY WHILE THE FIELD HAS FOCUS (`helperOnFocus`): a dense form reads as
9250
+ labels and values at rest, and the sentence appears under the field the
9251
+ reader is in. Still described, so a screen reader hears it on entry. */
9252
+ .crewlet-form-field--helper-on-focus:not(:focus-within) .crewlet-form-field__helper {
9253
+ display: none;
9254
+ }
9255
+
9132
9256
  /*
9133
9257
  * The error line, on the danger INK. It stays BESIDE the help rather than
9134
9258
  * replacing it: a reader told they are wrong needs the line that says what
@@ -15492,7 +15616,7 @@ svg.crewlet-select__chevron {
15492
15616
  }
15493
15617
 
15494
15618
 
15495
- /* Tabs-BWFQSWY3.css */
15619
+ /* Tabs-5I5Q5KKM.css */
15496
15620
  /*
15497
15621
  * The pill register: Tabs and SegmentedControl.
15498
15622
  *
@@ -15833,6 +15957,39 @@ svg.crewlet-select__chevron {
15833
15957
  }
15834
15958
  }
15835
15959
 
15960
+ /* ── markers ──────────────────────────────────────────────────────────────
15961
+ What needs the reader behind a tab: a danger count for problems, a 6px
15962
+ dot for a warning or an unsaved change. One per tab, the most urgent. */
15963
+ .crewlet-tabs__marker {
15964
+ display: inline-flex;
15965
+ align-items: center;
15966
+ justify-content: center;
15967
+ flex: none;
15968
+ }
15969
+ .crewlet-tabs__marker--danger {
15970
+ min-width: 16px;
15971
+ height: 16px;
15972
+ padding: 0 var(--spacing-1);
15973
+ border-radius: var(--radius-circle);
15974
+ background: var(--color-feedback-danger-soft);
15975
+ color: var(--color-feedback-danger-ink);
15976
+ font-family: var(--font-family-mono);
15977
+ font-size: var(--font-size-2xs);
15978
+ line-height: 1;
15979
+ }
15980
+ .crewlet-tabs__marker--warning,
15981
+ .crewlet-tabs__marker--changed {
15982
+ width: 6px;
15983
+ height: 6px;
15984
+ border-radius: var(--radius-circle);
15985
+ }
15986
+ .crewlet-tabs__marker--warning {
15987
+ background: var(--color-feedback-warning);
15988
+ }
15989
+ .crewlet-tabs__marker--changed {
15990
+ background: var(--color-brand-accent);
15991
+ }
15992
+
15836
15993
 
15837
15994
  /* Tag-4BRQS6GN.css */
15838
15995
  /*
@@ -1,5 +1,5 @@
1
1
  import '../chunk-AER7UDD4.js';
2
- export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
3
2
  export { useClipboard, writeClipboard } from '../chunk-5VNUYO76.js';
4
3
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
4
+ export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
5
5
  export { cx } from '../chunk-ODEQTPFM.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.10.0",
3
+ "version": "0.11.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.10.0",
46
- "@crewlethq/tokens": "0.10.0"
45
+ "@crewlethq/icons": "0.11.0",
46
+ "@crewlethq/tokens": "0.11.0"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "react": ">=18",
@@ -1,7 +1,7 @@
1
1
  import { LayerNodeBridge } from './chunk-53DVJCVW.js';
2
- import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-7RPGY3JE.js';
3
- import { IconButton } from './chunk-4FQT6ZAY.js';
4
2
  import { Button } from './chunk-OG6CL3EB.js';
3
+ import { IconButton } from './chunk-4FQT6ZAY.js';
4
+ import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-7RPGY3JE.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './Canvas-YVXHMWLN.css';
@@ -1,8 +1,8 @@
1
1
  import { Tag } from './chunk-LOECRMHA.js';
2
2
  import { useListbox } from './chunk-6MU7HNB4.js';
3
+ import { IconButton } from './chunk-4FQT6ZAY.js';
3
4
  import { announce } from './chunk-RSAQOKH3.js';
4
5
  import { isComposing } from './chunk-R25RGPUB.js';
5
- import { IconButton } from './chunk-4FQT6ZAY.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './TagsInput-P2HS5QL4.css';
8
8
  import { forwardRef, useState, useRef, useId, useImperativeHandle, useEffect, useMemo, useLayoutEffect } from 'react';
@@ -1,5 +1,5 @@
1
- import { useModalLayer, focusables } from './chunk-R25RGPUB.js';
2
1
  import { IconButton } from './chunk-4FQT6ZAY.js';
2
+ import { useModalLayer, focusables } from './chunk-R25RGPUB.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './AppShell-CEVLW4QG.css';
5
5
  import { createContext, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect, useSyncExternalStore } from 'react';
@@ -1,6 +1,6 @@
1
1
  import { CardHeaderSlotContext } from './chunk-AV2DXAEL.js';
2
- import { Count } from './chunk-BHHIIK3M.js';
3
2
  import { useHeadingLevel, HeadingLevelProvider, nextHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
3
+ import { Count } from './chunk-BHHIIK3M.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './Card-KJOYHDTJ.css';
6
6
  import { createContext, useId, useState, isValidElement, useRef, useCallback, useMemo, Children, cloneElement, useContext, useEffect, Fragment } from 'react';
@@ -1,5 +1,5 @@
1
- import { Count } from './chunk-BHHIIK3M.js';
2
1
  import { headingTag } from './chunk-PQADV6P6.js';
2
+ import { Count } from './chunk-BHHIIK3M.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
- import { Popover } from './chunk-PDUZO35I.js';
2
1
  import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
3
- import { IconButton } from './chunk-4FQT6ZAY.js';
4
2
  import { Button } from './chunk-OG6CL3EB.js';
3
+ import { IconButton } from './chunk-4FQT6ZAY.js';
4
+ import { Popover } from './chunk-PDUZO35I.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './DateTimePicker-4AZBTODT.css';
7
7
  import { useMemo, useState, useEffect } from 'react';
@@ -1,8 +1,8 @@
1
1
  import { useTreeState, treeExpandable, treeLevel, treePosInSet, treeSetSize, treeItemAction, treePrevious, treeNext, treeStep } from './chunk-S3BCVWTU.js';
2
2
  import { LayerNodeBridge } from './chunk-53DVJCVW.js';
3
+ import { IconButton } from './chunk-4FQT6ZAY.js';
3
4
  import { LayerHost, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
4
5
  import { focusables } from './chunk-R25RGPUB.js';
5
- import { IconButton } from './chunk-4FQT6ZAY.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './TreeGrid-NSW7VMOX.css';
File without changes
@@ -1,8 +1,8 @@
1
+ import { Button } from './chunk-OG6CL3EB.js';
1
2
  import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
3
+ import { IconButton } from './chunk-4FQT6ZAY.js';
2
4
  import { useLayerContainer } from './chunk-7RPGY3JE.js';
3
5
  import { focusables, useModalLayer, useBodyScrollLock } from './chunk-R25RGPUB.js';
4
- import { IconButton } from './chunk-4FQT6ZAY.js';
5
- import { Button } from './chunk-OG6CL3EB.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './Modal-BNT3TDV2.css';
8
8
  import { useId, useRef, useCallback } from 'react';
@@ -1,7 +1,7 @@
1
+ import { Button } from './chunk-OG6CL3EB.js';
2
+ import { IconButton } from './chunk-4FQT6ZAY.js';
1
3
  import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
2
4
  import { usePopupLayer } from './chunk-R25RGPUB.js';
3
- import { IconButton } from './chunk-4FQT6ZAY.js';
4
- import { Button } from './chunk-OG6CL3EB.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './Menu-BT5PMFJI.css';
7
7
  import { useId, useState, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
@@ -1,6 +1,6 @@
1
1
  import { useClipboard } from './chunk-5VNUYO76.js';
2
- import { IconButton } from './chunk-4FQT6ZAY.js';
3
2
  import { Button } from './chunk-OG6CL3EB.js';
3
+ import { IconButton } from './chunk-4FQT6ZAY.js';
4
4
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './Copyable-5PNRFOLS.css';