@crewlethq/ui 0.14.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +30 -0
  2. package/dist/AddPill/index.js +1 -1
  3. package/dist/{AddPill-V4TQXJ53.css → AddPill-RYCY56P4.css} +3 -1
  4. package/dist/AppShell/AppShell.d.ts +76 -11
  5. package/dist/AppShell/index.d.ts +1 -1
  6. package/dist/AppShell/index.js +2 -2
  7. package/dist/{AppShell-CEVLW4QG.css → AppShell-6QUD7NWM.css} +74 -1
  8. package/dist/Avatar/index.js +1 -1
  9. package/dist/{Avatar-BPJ36QZR.css → Avatar-I4NFP3WQ.css} +3 -3
  10. package/dist/AvatarPicker/index.js +3 -3
  11. package/dist/Canvas/index.js +3 -3
  12. package/dist/Charts/StackedColumns.d.ts +30 -7
  13. package/dist/Charts/index.d.ts +1 -1
  14. package/dist/Charts/index.js +1 -1
  15. package/dist/{Charts-JUERFLAR.css → Charts-JYW4X5ZL.css} +18 -1
  16. package/dist/CommandPalette/index.js +3 -3
  17. package/dist/DataTable/index.js +4 -4
  18. package/dist/DataView/index.js +9 -9
  19. package/dist/DateTimePicker/index.js +4 -4
  20. package/dist/DescriptionList/DescriptionList.d.ts +9 -1
  21. package/dist/DescriptionList/index.js +1 -1
  22. package/dist/{DescriptionList-YYY3V3O6.css → DescriptionList-IXMRCSMK.css} +24 -0
  23. package/dist/EntityChip/index.js +1 -1
  24. package/dist/FactList/index.js +3 -3
  25. package/dist/ImageUpload/index.js +1 -1
  26. package/dist/Layer/index.js +1 -1
  27. package/dist/Layer-J222IFNX.css +33 -0
  28. package/dist/Layout/index.js +1 -1
  29. package/dist/{Layout-2ZCV3IGF.css → Layout-ZBEGLXAE.css} +18 -0
  30. package/dist/ListInput/index.js +1 -1
  31. package/dist/MarkdownEditor/index.js +1 -1
  32. package/dist/Menu/index.js +2 -2
  33. package/dist/Modal/index.js +2 -2
  34. package/dist/OrgLabel/index.js +2 -2
  35. package/dist/{OrgLabel-6WSKJQOT.css → OrgLabel-R5KY7C3W.css} +6 -1
  36. package/dist/OrgNode/index.js +3 -3
  37. package/dist/OrgTable/index.js +7 -7
  38. package/dist/Popover/index.js +2 -2
  39. package/dist/Select/index.js +2 -2
  40. package/dist/Shortcut/index.js +1 -1
  41. package/dist/Switcher/index.js +4 -4
  42. package/dist/TagsInput/index.js +1 -1
  43. package/dist/TimeWindowPicker/index.js +5 -5
  44. package/dist/Toaster/Toaster.d.ts +6 -1
  45. package/dist/Toaster/index.js +2 -2
  46. package/dist/{Toaster-VZKISP2S.css → Toaster-EOOOTSJT.css} +6 -4
  47. package/dist/Toolbar/index.js +1 -1
  48. package/dist/Tooltip/index.js +2 -2
  49. package/dist/TreeCanvas/index.js +4 -4
  50. package/dist/TreeGrid/index.js +3 -3
  51. package/dist/{chunk-6OF2DBKY.js → chunk-22M7OXKW.js} +1 -1
  52. package/dist/{chunk-RZ7RGECB.js → chunk-2OLCUNG7.js} +1 -1
  53. package/dist/{chunk-5IXMLWGW.js → chunk-4EOJR52M.js} +4 -4
  54. package/dist/{chunk-2PZBIHRV.js → chunk-AMH67MLM.js} +2 -2
  55. package/dist/{chunk-6LXMLQUM.js → chunk-B2Z2CDM5.js} +2 -2
  56. package/dist/{chunk-O2ZDZZS7.js → chunk-BWRGFKJP.js} +3 -2
  57. package/dist/{chunk-IFM63LAG.js → chunk-DY77H372.js} +3 -3
  58. package/dist/{chunk-4FFHJBEN.js → chunk-EFNHOVC2.js} +1 -1
  59. package/dist/{chunk-XN4JBAN3.js → chunk-F2XSYBKH.js} +8 -2
  60. package/dist/{chunk-IXUU5DLZ.js → chunk-FC4YTTFJ.js} +1 -1
  61. package/dist/{chunk-IHGKPEEV.js → chunk-FY2R4U4Q.js} +1 -1
  62. package/dist/{chunk-AXNQCAFC.js → chunk-GUHP5JHC.js} +2 -2
  63. package/dist/{chunk-L3CTFFLZ.js → chunk-H3XOMT7W.js} +53 -9
  64. package/dist/{chunk-7RPGY3JE.js → chunk-HMPFGIWM.js} +1 -1
  65. package/dist/{chunk-WYQOHFML.js → chunk-IYZZL3MZ.js} +1 -1
  66. package/dist/{chunk-URYDN2KA.js → chunk-JI5AVQLA.js} +1 -1
  67. package/dist/{chunk-TFMJH2E6.js → chunk-K4VORB64.js} +1 -1
  68. package/dist/{chunk-Y6NR7QJ3.js → chunk-LCF4WPYS.js} +2 -2
  69. package/dist/{chunk-4WNNEDKO.js → chunk-MLT2HBPN.js} +87 -74
  70. package/dist/{chunk-TFH6SYWB.js → chunk-NS7BVLL3.js} +1 -1
  71. package/dist/{chunk-CBZSSKH3.js → chunk-QH3AKP2N.js} +18 -5
  72. package/dist/{chunk-CQY5NTRS.js → chunk-QWOPX2MN.js} +1 -1
  73. package/dist/{chunk-3VVKJ7AZ.js → chunk-TK6YC5QT.js} +2 -2
  74. package/dist/{chunk-74WGARJE.js → chunk-TROLVEZY.js} +1 -1
  75. package/dist/{chunk-53DVJCVW.js → chunk-VYOKRN2I.js} +1 -1
  76. package/dist/{chunk-75WOCYGC.js → chunk-YYBD73OI.js} +3 -3
  77. package/dist/{chunk-W4ENKCXJ.js → chunk-ZAC7SKUN.js} +1 -1
  78. package/dist/{chunk-6NIZCQUM.js → chunk-ZPWUVVIB.js} +1 -1
  79. package/dist/generated/index.js +40 -40
  80. package/dist/index.js +40 -40
  81. package/dist/styles.css +172 -21
  82. package/package.json +3 -3
  83. package/dist/Layer-NAFSGCFA.css +0 -23
@@ -1,6 +1,6 @@
1
- export { FactList } from '../chunk-URYDN2KA.js';
2
- import '../chunk-CQY5NTRS.js';
3
- import '../chunk-7RPGY3JE.js';
1
+ export { FactList } from '../chunk-JI5AVQLA.js';
2
+ import '../chunk-QWOPX2MN.js';
3
+ import '../chunk-HMPFGIWM.js';
4
4
  import '../chunk-R25RGPUB.js';
5
5
  import '../chunk-BZFWDIV6.js';
6
6
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
1
  export { ImageUpload } from '../chunk-DJMLHCLD.js';
2
- import '../chunk-6NIZCQUM.js';
2
+ import '../chunk-ZPWUVVIB.js';
3
3
  import '../chunk-HI6Q2UXQ.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,3 +1,3 @@
1
- export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, outsideBounds, placePopup, useLayerContainer, viewportBounds } from '../chunk-7RPGY3JE.js';
1
+ export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, outsideBounds, placePopup, useLayerContainer, viewportBounds } from '../chunk-HMPFGIWM.js';
2
2
  export { focusables, isComposing, isModalLayerOpen, layerCount, useBodyScrollLock, useModalLayer, usePopupLayer } from '../chunk-R25RGPUB.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,33 @@
1
+ /*
2
+ * The portal target a LayerHost provides.
3
+ *
4
+ * It covers its container so a surface placed against its rectangle is placed
5
+ * against the container, and it is inert until something is drawn in it: an
6
+ * empty host over a canvas must not swallow the drag that pans the canvas.
7
+ * Each overlay inside takes pointer events back for its own panel.
8
+ *
9
+ * Its container establishes the positioning context. A host whose parent is
10
+ * static covers the nearest positioned ancestor instead, which is the
11
+ * viewport in the common case and is still a usable bound.
12
+ *
13
+ * IT TAKES NO PLACE IN THE STACKING ORDER OF ITS OWN. Every surface drawn in
14
+ * it carries its own step in the layer band, its depth in the stack, and that
15
+ * is what decides what paints on top. A z-index here made the host a stacking
16
+ * context at the bottom of the band, which held everything inside it under
17
+ * whatever the page stacked above that step: the shell's open drawer takes
18
+ * the band's own steps beside the host rather than inside it, so a panel
19
+ * opened from the drawer was drawn under the drawer it came from. A surface
20
+ * at the same step as the drawer's rail, which is the next one opened above
21
+ * it, paints over the rail because the host follows the shell in the
22
+ * document.
23
+ */
24
+
25
+ .crewlet-layer-host {
26
+ position: absolute;
27
+ inset: 0;
28
+ pointer-events: none;
29
+ }
30
+
31
+ .crewlet-layer-host > * {
32
+ pointer-events: auto;
33
+ }
@@ -1,2 +1,2 @@
1
- export { AutoGrid, Inline, Spacer, Stack } from '../chunk-W4ENKCXJ.js';
1
+ export { AutoGrid, Inline, Spacer, Stack } from '../chunk-ZAC7SKUN.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -25,6 +25,24 @@
25
25
  flex-direction: row;
26
26
  }
27
27
 
28
+ /*
29
+ * DRAWN AS A LIST, IT IS STILL A RUN OF ITEMS. A Stack or an Inline spends no
30
+ * pixel of its own, and a `ul` or an `ol` arrives with the browser's: a margin
31
+ * above and below, a 40px indent and a marker on every item, so a list of five
32
+ * names laid out as a Stack was pushed in and bulleted. They are taken back,
33
+ * and the element stays a list to a screen reader. A list that wants its
34
+ * markers is `List variant="bulleted"`.
35
+ *
36
+ * Inside :where(), so the rule weighs one class like every other here and a
37
+ * caller's own class still decides what it sets.
38
+ */
39
+ :where(ul, ol).crewlet-stack,
40
+ :where(ul, ol).crewlet-inline {
41
+ margin: 0;
42
+ padding: 0;
43
+ list-style: none;
44
+ }
45
+
28
46
  /*
29
47
  * A GRID OF CARDS KEEPS ITS TRACKS. `auto-fill` lays down every track the row
30
48
  * has room for and leaves the empty ones empty; `auto-fit`, which this was,
@@ -4,7 +4,7 @@ import '../chunk-FTEJPHBI.js';
4
4
  import '../chunk-PQADV6P6.js';
5
5
  import '../chunk-RSAQOKH3.js';
6
6
  import '../chunk-4FQT6ZAY.js';
7
- import '../chunk-7RPGY3JE.js';
7
+ import '../chunk-HMPFGIWM.js';
8
8
  import '../chunk-R25RGPUB.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -6,7 +6,7 @@ import '../chunk-26PEPONN.js';
6
6
  import '../chunk-4LDTQWS7.js';
7
7
  import '../chunk-CBOICT64.js';
8
8
  import '../chunk-BHHIIK3M.js';
9
- import '../chunk-7RPGY3JE.js';
9
+ import '../chunk-HMPFGIWM.js';
10
10
  import '../chunk-R25RGPUB.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { Menu } from '../chunk-TFH6SYWB.js';
1
+ export { Menu } from '../chunk-NS7BVLL3.js';
2
2
  import '../chunk-OG6CL3EB.js';
3
3
  import '../chunk-4FQT6ZAY.js';
4
- import '../chunk-7RPGY3JE.js';
4
+ import '../chunk-HMPFGIWM.js';
5
5
  import '../chunk-R25RGPUB.js';
6
6
  import '../chunk-BZFWDIV6.js';
7
7
  import '../chunk-ODEQTPFM.js';
@@ -1,8 +1,8 @@
1
- export { ConfirmModal, Modal } from '../chunk-TFMJH2E6.js';
1
+ export { ConfirmModal, Modal } from '../chunk-K4VORB64.js';
2
2
  import '../chunk-OG6CL3EB.js';
3
3
  import '../chunk-PQADV6P6.js';
4
4
  import '../chunk-4FQT6ZAY.js';
5
- import '../chunk-7RPGY3JE.js';
5
+ import '../chunk-HMPFGIWM.js';
6
6
  import '../chunk-R25RGPUB.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { OrgLabel } from '../chunk-6OF2DBKY.js';
2
- import '../chunk-6NIZCQUM.js';
1
+ export { OrgLabel } from '../chunk-22M7OXKW.js';
2
+ import '../chunk-ZPWUVVIB.js';
3
3
  import '../chunk-HI6Q2UXQ.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -79,7 +79,12 @@
79
79
  inside of a Lucide glyph turns every closed shape in it solid and every
80
80
  open one into a smear (a person's head and shoulders, a unit's building, a
81
81
  warning's triangle, each a blob), so a `.crewlet-glyph` keeps the fill its
82
- own frame decides and takes the ink through its stroke. */
82
+ own frame decides and takes the ink through its stroke.
83
+
84
+ A DRAWING HERE CUTS ITS HOLES AS GEOMETRY. This rule repaints every path and
85
+ group in the zone, a mask's included, so a hole cut by a mask fills with a
86
+ share of the ink that changes with the hue: every agent's eyes on the chart
87
+ did, until the Crewlet characters cut their faces into their own paths. */
83
88
  .crewlet-org-label__icon svg:not(.crewlet-glyph),
84
89
  .crewlet-org-label__icon svg:not(.crewlet-glyph) g,
85
90
  .crewlet-org-label__icon svg:not(.crewlet-glyph) path {
@@ -1,5 +1,5 @@
1
- export { OrgNodeDisclosure, OrgNodeLabel, OrgNodeLead } from '../chunk-IHGKPEEV.js';
2
- import '../chunk-6OF2DBKY.js';
3
- import '../chunk-6NIZCQUM.js';
1
+ export { OrgNodeDisclosure, OrgNodeLabel, OrgNodeLead } from '../chunk-FY2R4U4Q.js';
2
+ import '../chunk-22M7OXKW.js';
3
+ import '../chunk-ZPWUVVIB.js';
4
4
  import '../chunk-HI6Q2UXQ.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,12 +1,12 @@
1
- export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-75WOCYGC.js';
2
- import '../chunk-6LXMLQUM.js';
1
+ export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from '../chunk-YYBD73OI.js';
2
+ import '../chunk-B2Z2CDM5.js';
3
3
  import '../chunk-MY374UUD.js';
4
- import '../chunk-6OF2DBKY.js';
5
- import '../chunk-53DVJCVW.js';
6
- import '../chunk-74WGARJE.js';
4
+ import '../chunk-22M7OXKW.js';
5
+ import '../chunk-VYOKRN2I.js';
6
+ import '../chunk-TROLVEZY.js';
7
7
  import '../chunk-4FQT6ZAY.js';
8
- import '../chunk-6NIZCQUM.js';
9
- import '../chunk-7RPGY3JE.js';
8
+ import '../chunk-ZPWUVVIB.js';
9
+ import '../chunk-HMPFGIWM.js';
10
10
  import '../chunk-R25RGPUB.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-HI6Q2UXQ.js';
@@ -1,4 +1,4 @@
1
- export { Popover } from '../chunk-O2ZDZZS7.js';
2
- import '../chunk-7RPGY3JE.js';
1
+ export { Popover } from '../chunk-BWRGFKJP.js';
2
+ import '../chunk-HMPFGIWM.js';
3
3
  import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- export { Select } from '../chunk-IXUU5DLZ.js';
1
+ export { Select } from '../chunk-FC4YTTFJ.js';
2
2
  import '../chunk-F73MC7EZ.js';
3
- import '../chunk-7RPGY3JE.js';
3
+ import '../chunk-HMPFGIWM.js';
4
4
  import '../chunk-R25RGPUB.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
1
  export { matchesShortcut, useShortcut } from '../chunk-2FPENTCF.js';
2
- import '../chunk-7RPGY3JE.js';
2
+ import '../chunk-HMPFGIWM.js';
3
3
  import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,6 +1,6 @@
1
- export { Switcher } from '../chunk-Y6NR7QJ3.js';
1
+ export { Switcher } from '../chunk-LCF4WPYS.js';
2
2
  import '../chunk-W5J7R5EB.js';
3
- import '../chunk-TFMJH2E6.js';
3
+ import '../chunk-K4VORB64.js';
4
4
  import '../chunk-F73MC7EZ.js';
5
5
  import '../chunk-FTEJPHBI.js';
6
6
  import '../chunk-FYTIJM2T.js';
@@ -9,8 +9,8 @@ import '../chunk-PQADV6P6.js';
9
9
  import '../chunk-RSAQOKH3.js';
10
10
  import '../chunk-IG75YMUN.js';
11
11
  import '../chunk-4FQT6ZAY.js';
12
- import '../chunk-O2ZDZZS7.js';
13
- import '../chunk-7RPGY3JE.js';
12
+ import '../chunk-BWRGFKJP.js';
13
+ import '../chunk-HMPFGIWM.js';
14
14
  import '../chunk-R25RGPUB.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -4,7 +4,7 @@ import '../chunk-WIATRXEJ.js';
4
4
  import '../chunk-F73MC7EZ.js';
5
5
  import '../chunk-RSAQOKH3.js';
6
6
  import '../chunk-4FQT6ZAY.js';
7
- import '../chunk-7RPGY3JE.js';
7
+ import '../chunk-HMPFGIWM.js';
8
8
  import '../chunk-R25RGPUB.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-IFM63LAG.js';
2
- import '../chunk-IXUU5DLZ.js';
1
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-DY77H372.js';
2
+ import '../chunk-FC4YTTFJ.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
4
  import '../chunk-FTEJPHBI.js';
5
- import '../chunk-GXQ3B46I.js';
6
5
  import '../chunk-OG6CL3EB.js';
6
+ import '../chunk-GXQ3B46I.js';
7
7
  import '../chunk-PQADV6P6.js';
8
8
  import '../chunk-4FQT6ZAY.js';
9
- import '../chunk-O2ZDZZS7.js';
10
- import '../chunk-7RPGY3JE.js';
9
+ import '../chunk-BWRGFKJP.js';
10
+ import '../chunk-HMPFGIWM.js';
11
11
  import '../chunk-R25RGPUB.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -93,7 +93,12 @@ export interface ToastProviderProps {
93
93
  children?: ReactNode;
94
94
  position?: ToasterProps['position'];
95
95
  renderAction?: ToasterProps['renderAction'];
96
- /** How many to keep on screen. The oldest goes when the next arrives. */
96
+ /**
97
+ * How many to keep on screen. When one more arrives, the oldest toast that
98
+ * would have gone by itself goes. A sticky one never does, so while every
99
+ * toast held is sticky the stack holds more than this, until the reader
100
+ * dismisses some.
101
+ */
97
102
  max?: number | undefined;
98
103
  }
99
104
  /**
@@ -1,5 +1,5 @@
1
- export { ToastProvider, Toaster, useToast } from '../chunk-CBZSSKH3.js';
2
- import '../chunk-7RPGY3JE.js';
1
+ export { ToastProvider, Toaster, useToast } from '../chunk-QH3AKP2N.js';
2
+ import '../chunk-HMPFGIWM.js';
3
3
  import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-BZFWDIV6.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -102,10 +102,12 @@
102
102
 
103
103
  /*
104
104
  * A VARIANT IS ITS MARK AND ITS WASH. The words stay in the strip's own inks
105
- * and the edge stays the hairline, so a failure is a rose mark on a faint rose
106
- * wash rather than a red strip: the outcome is said by the glyph and the title,
107
- * and the sentence beside them is read in the ink every sentence is read in.
108
- * Information is the neutral mark on the neutral wash.
105
+ * and the edge stays the hairline, so a failure is a rose mark rather than a
106
+ * red strip: the outcome is said by the glyph and the title, and the sentence
107
+ * beside them is read in the ink every sentence is read in. The wash is the
108
+ * countdown, so only a toast that counts down draws one: a success is a moss
109
+ * mark on a faint moss wash, and a failure, sticky unless it is given a
110
+ * duration, draws none. Information is the neutral mark on the neutral wash.
109
111
  */
110
112
  .crewlet-toast--success {
111
113
  --crewlet-toast-mark: var(--color-feedback-success-ink);
@@ -1,4 +1,4 @@
1
1
  export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-PGRPNDWM.js';
2
- import '../chunk-7RPGY3JE.js';
2
+ import '../chunk-HMPFGIWM.js';
3
3
  import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { Tooltip } from '../chunk-CQY5NTRS.js';
2
- import '../chunk-7RPGY3JE.js';
1
+ export { Tooltip } from '../chunk-QWOPX2MN.js';
2
+ import '../chunk-HMPFGIWM.js';
3
3
  import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { TreeCanvas } from '../chunk-RZ7RGECB.js';
1
+ export { TreeCanvas } from '../chunk-2OLCUNG7.js';
2
2
  import '../chunk-MY374UUD.js';
3
- import '../chunk-2PZBIHRV.js';
4
- import '../chunk-53DVJCVW.js';
3
+ import '../chunk-AMH67MLM.js';
4
+ import '../chunk-VYOKRN2I.js';
5
5
  import '../chunk-OG6CL3EB.js';
6
6
  import '../chunk-4FQT6ZAY.js';
7
- import '../chunk-7RPGY3JE.js';
7
+ import '../chunk-HMPFGIWM.js';
8
8
  import '../chunk-R25RGPUB.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,8 +1,8 @@
1
- export { TreeGrid } from '../chunk-6LXMLQUM.js';
1
+ export { TreeGrid } from '../chunk-B2Z2CDM5.js';
2
2
  import '../chunk-MY374UUD.js';
3
- import '../chunk-53DVJCVW.js';
3
+ import '../chunk-VYOKRN2I.js';
4
4
  import '../chunk-4FQT6ZAY.js';
5
- import '../chunk-7RPGY3JE.js';
5
+ import '../chunk-HMPFGIWM.js';
6
6
  import '../chunk-R25RGPUB.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -1,6 +1,6 @@
1
1
  import { Avatar } from './chunk-HI6Q2UXQ.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './OrgLabel-6WSKJQOT.css';
3
+ import './OrgLabel-R5KY7C3W.css';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
 
6
6
  function OrgLabel(props) {
@@ -1,5 +1,5 @@
1
1
  import { useTreeState, useMeasuredSizes, layoutForest, treeAncestors, useLayoutAnchor, treeExpandable, layoutConnectors, treeItemAction, treeStep, treePosInSet, treeSetSize, treeLevel, placeGroups } from './chunk-MY374UUD.js';
2
- import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-2PZBIHRV.js';
2
+ import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-AMH67MLM.js';
3
3
  import { focusables } from './chunk-R25RGPUB.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './TreeCanvas-L2XYONWL.css';
@@ -1,15 +1,15 @@
1
1
  import { PageHeader } from './chunk-HOXGBLEY.js';
2
2
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
3
3
  import { Toolbar } from './chunk-PGRPNDWM.js';
4
- import { DataTable } from './chunk-3VVKJ7AZ.js';
5
- import { Menu } from './chunk-TFH6SYWB.js';
6
- import { DateTimePicker } from './chunk-AXNQCAFC.js';
4
+ import { DataTable } from './chunk-TK6YC5QT.js';
5
+ import { Menu } from './chunk-NS7BVLL3.js';
6
+ import { DateTimePicker } from './chunk-GUHP5JHC.js';
7
7
  import { useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
8
8
  import { Kbd } from './chunk-SMBKXWML.js';
9
9
  import { Input } from './chunk-FTEJPHBI.js';
10
10
  import { Button } from './chunk-OG6CL3EB.js';
11
11
  import { IconButton } from './chunk-4FQT6ZAY.js';
12
- import { Popover } from './chunk-O2ZDZZS7.js';
12
+ import { Popover } from './chunk-BWRGFKJP.js';
13
13
  import { Count } from './chunk-BHHIIK3M.js';
14
14
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
15
15
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- import { LayerNodeBridge } from './chunk-53DVJCVW.js';
1
+ import { LayerNodeBridge } from './chunk-VYOKRN2I.js';
2
2
  import { Button } from './chunk-OG6CL3EB.js';
3
3
  import { IconButton } from './chunk-4FQT6ZAY.js';
4
- import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-7RPGY3JE.js';
4
+ import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-HMPFGIWM.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './Canvas-YVXHMWLN.css';
@@ -1,7 +1,7 @@
1
1
  import { useTreeState, treeExpandable, treeLevel, treePosInSet, treeSetSize, treeItemAction, treePrevious, treeNext, treeStep } from './chunk-MY374UUD.js';
2
- import { LayerNodeBridge } from './chunk-53DVJCVW.js';
2
+ import { LayerNodeBridge } from './chunk-VYOKRN2I.js';
3
3
  import { IconButton } from './chunk-4FQT6ZAY.js';
4
- import { LayerHost, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
4
+ import { LayerHost, LAYER_REPOSITION_EVENT } from './chunk-HMPFGIWM.js';
5
5
  import { focusables } from './chunk-R25RGPUB.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
1
+ import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup, LAYER_REPOSITION_EVENT } from './chunk-HMPFGIWM.js';
2
2
  import { usePopupLayer, focusables } from './chunk-R25RGPUB.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Popover-QCINR7WG.css';
@@ -44,7 +44,8 @@ function Popover({
44
44
  }, []);
45
45
  const close = useCallback(
46
46
  (reason) => {
47
- if (reason === "escape" || reason === "tab") anchor.current?.focus();
47
+ const held = panel.current?.contains(document.activeElement) ?? false;
48
+ if (reason === "escape" || reason === "tab" || reason === "content" && held) anchor.current?.focus();
48
49
  setOpen(false, reason);
49
50
  },
50
51
  [setOpen]
@@ -1,9 +1,9 @@
1
- import { Select } from './chunk-IXUU5DLZ.js';
1
+ import { Select } from './chunk-FC4YTTFJ.js';
2
2
  import { Input } from './chunk-FTEJPHBI.js';
3
- import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
4
3
  import { Button } from './chunk-OG6CL3EB.js';
4
+ import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
5
5
  import { IconButton } from './chunk-4FQT6ZAY.js';
6
- import { Popover } from './chunk-O2ZDZZS7.js';
6
+ import { Popover } from './chunk-BWRGFKJP.js';
7
7
  import { isComposing } from './chunk-R25RGPUB.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
9
  import './TimeWindowPicker-BZ5HHATU.css';
@@ -1,6 +1,6 @@
1
1
  import { HuePicker } from './chunk-NXDEPUVG.js';
2
2
  import { NODE_HUE_NAMES } from './chunk-AYKXMIOR.js';
3
- import { Popover } from './chunk-O2ZDZZS7.js';
3
+ import { Popover } from './chunk-BWRGFKJP.js';
4
4
  import { CharacterPicker } from './chunk-YXMCUKFI.js';
5
5
  import { Avatar } from './chunk-HI6Q2UXQ.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,9 +1,10 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './DescriptionList-YYY3V3O6.css';
2
+ import './DescriptionList-IXMRCSMK.css';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
5
5
  function DescriptionList({
6
6
  dense = false,
7
+ fit = false,
7
8
  items,
8
9
  className,
9
10
  children,
@@ -13,7 +14,12 @@ function DescriptionList({
13
14
  "dl",
14
15
  {
15
16
  ...rest,
16
- className: cx("crewlet-description-list", dense && "crewlet-description-list--dense", className),
17
+ className: cx(
18
+ "crewlet-description-list",
19
+ dense && "crewlet-description-list--dense",
20
+ fit && "crewlet-description-list--fit",
21
+ className
22
+ ),
17
23
  children: [
18
24
  items?.map(([term, detail], index) => /* @__PURE__ */ jsx(DescriptionListItem, { term, children: detail }, index)),
19
25
  children
@@ -1,5 +1,5 @@
1
1
  import { useListbox, useOptionKeys, useHighlightRest } from './chunk-F73MC7EZ.js';
2
- import { useLayerContainer, viewportBounds, outsideBounds, placePopup, LAYER_GAP, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
2
+ import { useLayerContainer, viewportBounds, outsideBounds, placePopup, LAYER_GAP, LAYER_REPOSITION_EVENT } from './chunk-HMPFGIWM.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Select-2P7AWUE4.css';
5
5
  import { forwardRef, useId, useMemo, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
@@ -1,4 +1,4 @@
1
- import { OrgLabel } from './chunk-6OF2DBKY.js';
1
+ import { OrgLabel } from './chunk-22M7OXKW.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './OrgNode-TCHJH5FO.css';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
- import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
2
1
  import { Button } from './chunk-OG6CL3EB.js';
2
+ import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
3
3
  import { IconButton } from './chunk-4FQT6ZAY.js';
4
- import { Popover } from './chunk-O2ZDZZS7.js';
4
+ import { Popover } from './chunk-BWRGFKJP.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './DateTimePicker-NJ6XH2TE.css';
7
7
  import { useMemo, useState, useEffect } from 'react';
@@ -1,12 +1,13 @@
1
1
  import { useMediaMatch } from './chunk-IG75YMUN.js';
2
2
  import { IconButton } from './chunk-4FQT6ZAY.js';
3
3
  import { useModalLayer, focusables } from './chunk-R25RGPUB.js';
4
+ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
5
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './AppShell-CEVLW4QG.css';
6
- import { createContext, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
6
+ import './AppShell-6QUD7NWM.css';
7
+ import { createContext, forwardRef, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
7
8
  import { breakpoint } from '@crewlethq/tokens';
8
- import { MenuGlyph } from '@crewlethq/icons/glyphs';
9
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+ import { ChevronUpGlyph, MenuGlyph } from '@crewlethq/icons/glyphs';
10
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
10
11
 
11
12
  var NARROW = `(width < ${breakpoint.shell})`;
12
13
  var AppShellContext = createContext(null);
@@ -156,37 +157,80 @@ function AppShellRail({ header, footer, className, children }) {
156
157
  footer ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-foot", children: footer }) : null
157
158
  ] });
158
159
  }
159
- function AppShellRailRow({ icon, trailing, detail, onClick, label, className, children }) {
160
+ function opensSomething(haspopup) {
161
+ return haspopup !== void 0 && haspopup !== false && haspopup !== "false";
162
+ }
163
+ var AppShellRailRow = forwardRef(function AppShellRailRow2({
164
+ icon,
165
+ trailing,
166
+ count,
167
+ detail,
168
+ onClick,
169
+ label,
170
+ className,
171
+ children,
172
+ "aria-expanded": expanded,
173
+ "aria-haspopup": haspopup,
174
+ "aria-controls": controls
175
+ }, ref) {
160
176
  const block = detail !== void 0 && detail !== null && detail !== false && detail !== "";
177
+ const opens = onClick !== void 0 && opensSomething(haspopup);
161
178
  const inside = /* @__PURE__ */ jsxs(Fragment, { children: [
162
179
  icon ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-icon", "aria-hidden": true, children: icon }) : null,
163
180
  /* @__PURE__ */ jsxs("span", { className: "crewlet-app-shell__rail-row-body", children: [
164
181
  /* @__PURE__ */ jsxs("span", { className: "crewlet-app-shell__rail-row-text", children: [
165
- /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-label", children }),
182
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-app-shell__rail-row-label", children: [
183
+ children,
184
+ count ? /* @__PURE__ */ jsx(VisuallyHidden, { children: `, ${String(count.value)} ${count.label}` }) : null
185
+ ] }),
166
186
  block ? /* @__PURE__ */ jsxs(Fragment, { children: [
167
187
  " ",
168
188
  /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-detail", children: detail })
169
189
  ] }) : null
170
190
  ] }),
191
+ count ? /* @__PURE__ */ jsxs(Fragment, { children: [
192
+ " ",
193
+ /* @__PURE__ */ jsxs(
194
+ "span",
195
+ {
196
+ className: cx(
197
+ "crewlet-app-shell__rail-row-count",
198
+ count.tone === "warning" && "crewlet-app-shell__rail-row-count--warning"
199
+ ),
200
+ "aria-hidden": true,
201
+ children: [
202
+ count.mark ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-count-mark", children: count.mark }) : null,
203
+ count.value
204
+ ]
205
+ }
206
+ )
207
+ ] }) : null,
171
208
  trailing ? /* @__PURE__ */ jsxs(Fragment, { children: [
172
209
  " ",
173
210
  /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-trailing", children: trailing })
174
211
  ] }) : null
175
- ] })
212
+ ] }),
213
+ opens ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-opens", "aria-hidden": true, children: /* @__PURE__ */ jsx(ChevronUpGlyph, { size: "xs" }) }) : null
176
214
  ] });
177
215
  const shape = cx("crewlet-app-shell__rail-row", block && "crewlet-app-shell__rail-row--block", className);
178
- if (onClick === void 0) return /* @__PURE__ */ jsx("div", { className: shape, children: inside });
216
+ if (onClick === void 0) {
217
+ return /* @__PURE__ */ jsx("div", { ref, className: shape, children: inside });
218
+ }
179
219
  return /* @__PURE__ */ jsx(
180
220
  "button",
181
221
  {
222
+ ref,
182
223
  type: "button",
183
224
  className: cx(shape, "crewlet-app-shell__rail-row--action"),
184
225
  "aria-label": label,
226
+ "aria-expanded": expanded,
227
+ "aria-haspopup": haspopup,
228
+ "aria-controls": controls,
185
229
  onClick,
186
230
  children: inside
187
231
  }
188
232
  );
189
- }
233
+ });
190
234
  function AppShellToggle({ className }) {
191
235
  const { drawerOpen, toggleDrawer, railId, toggleLabel, hasRail } = useAppShell();
192
236
  if (!hasRail) return null;
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './Layer-NAFSGCFA.css';
2
+ import './Layer-J222IFNX.css';
3
3
  import { createContext, useState, useContext } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,4 +1,4 @@
1
- import { Modal } from './chunk-TFMJH2E6.js';
1
+ import { Modal } from './chunk-K4VORB64.js';
2
2
  import { useListbox, useHighlightRest } from './chunk-F73MC7EZ.js';
3
3
  import { Kbd } from './chunk-SMBKXWML.js';
4
4
  import { Input } from './chunk-FTEJPHBI.js';