@crewlethq/ui 0.44.0 → 0.46.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 (143) hide show
  1. package/README.md +34 -2
  2. package/dist/AccessDeniedCard/index.js +2 -2
  3. package/dist/AgentHandoffPanel/index.js +6 -3
  4. package/dist/AppShell/index.js +3 -3
  5. package/dist/ArrangeList/index.js +5 -3
  6. package/dist/ArtifactBar/index.js +5 -5
  7. package/dist/ArtifactCard/index.js +3 -3
  8. package/dist/AsideLayout/AsideLayout.d.ts +24 -0
  9. package/dist/AsideLayout/index.d.ts +3 -0
  10. package/dist/AsideLayout/index.js +2 -0
  11. package/dist/AsideLayout-TH5SQZNK.css +45 -0
  12. package/dist/AvatarPicker/index.js +6 -6
  13. package/dist/Canvas/index.js +1 -1
  14. package/dist/CanvasBoard/index.js +1 -1
  15. package/dist/CanvasToolbar/index.js +1 -1
  16. package/dist/CatalogTile/index.js +1 -1
  17. package/dist/{CatalogTile-VPSLCKJE.css → CatalogTile-26XN7L2A.css} +13 -7
  18. package/dist/CharacterCount/CharacterCount.d.ts +63 -0
  19. package/dist/CharacterCount/index.d.ts +3 -0
  20. package/dist/CharacterCount/index.js +4 -0
  21. package/dist/CharacterCount-S735DICR.css +29 -0
  22. package/dist/Checkbox/index.js +5 -2
  23. package/dist/Combobox/index.js +5 -3
  24. package/dist/CommandPalette/index.js +6 -4
  25. package/dist/CommentThread/index.js +7 -4
  26. package/dist/Composer/index.js +5 -2
  27. package/dist/ConfirmField/index.js +5 -2
  28. package/dist/DataGrid/index.js +2 -2
  29. package/dist/DataTable/index.js +8 -6
  30. package/dist/DataView/index.js +10 -8
  31. package/dist/DateTimePicker/index.js +1 -1
  32. package/dist/DocTabsEditor/index.js +5 -4
  33. package/dist/EditingStatus/index.js +2 -1
  34. package/dist/{Editor-FXO2JVWK.js → Editor-6FXHMW64.js} +5 -3
  35. package/dist/EmptyState/EmptyState.d.ts +9 -2
  36. package/dist/EmptyState/index.js +1 -1
  37. package/dist/{EmptyState-C6HRBGT7.css → EmptyState-7L4UAQBX.css} +34 -0
  38. package/dist/FollowBanner/index.js +2 -2
  39. package/dist/HuePicker/index.js +5 -5
  40. package/dist/InlineEditor/InlineEditor.d.ts +86 -0
  41. package/dist/InlineEditor/index.d.ts +3 -0
  42. package/dist/InlineEditor/index.js +9 -0
  43. package/dist/InlineEditor-W55DDKML.css +72 -0
  44. package/dist/Input/FormField.d.ts +18 -1
  45. package/dist/Input/Textarea.d.ts +16 -0
  46. package/dist/Input/index.d.ts +2 -2
  47. package/dist/Input/index.js +4 -1
  48. package/dist/{Input-OQZBCRX5.css → Input-VDSV7VWJ.css} +19 -0
  49. package/dist/LinkInterstitial/index.js +3 -3
  50. package/dist/List/List.d.ts +16 -1
  51. package/dist/List/index.js +1 -1
  52. package/dist/{List-YHLIZFK4.css → List-XY445TKY.css} +31 -0
  53. package/dist/ListInput/ListInput.d.ts +87 -2
  54. package/dist/ListInput/index.d.ts +2 -2
  55. package/dist/ListInput/index.js +5 -2
  56. package/dist/{ListInput-O7LJKOIG.css → ListInput-DP2CSJ22.css} +118 -2
  57. package/dist/MarkdownEditor/index.js +5 -5
  58. package/dist/Menu/index.js +2 -2
  59. package/dist/MergeConflicts/index.js +5 -5
  60. package/dist/Modal/index.js +2 -2
  61. package/dist/PresenterView/index.js +3 -3
  62. package/dist/PrincipalPicker/index.js +6 -4
  63. package/dist/RelatedRow/index.js +2 -2
  64. package/dist/RichEditor/index.js +1 -1
  65. package/dist/SegmentedControl/index.js +4 -4
  66. package/dist/Select/index.js +1 -1
  67. package/dist/ShareDialog/index.js +3 -3
  68. package/dist/SheetColumnEditor/index.js +10 -8
  69. package/dist/SheetGrid/index.js +4 -4
  70. package/dist/SlideCompare/index.js +1 -1
  71. package/dist/SlideFilmstrip/index.js +3 -3
  72. package/dist/Statement/Statement.d.ts +45 -0
  73. package/dist/Statement/index.d.ts +3 -0
  74. package/dist/Statement/index.js +4 -0
  75. package/dist/Statement-M4QDXIMO.css +53 -0
  76. package/dist/Switcher/index.js +5 -4
  77. package/dist/Tabs/index.js +3 -3
  78. package/dist/Text/Text.d.ts +8 -0
  79. package/dist/Text/index.js +1 -1
  80. package/dist/{Text-S3Q4O3IG.css → Text-XOCOU34C.css} +9 -0
  81. package/dist/ThemeSwitcher/index.js +5 -5
  82. package/dist/TileGrid/index.js +1 -1
  83. package/dist/{TileGrid-I6LNYD2H.css → TileGrid-UYMVVVJK.css} +30 -0
  84. package/dist/TimeWindowPicker/index.js +5 -3
  85. package/dist/TreeCanvas/index.js +1 -1
  86. package/dist/VersionCompare/index.js +6 -6
  87. package/dist/{chunk-5AHDGYKN.js → chunk-2KQR6JKE.js} +2 -2
  88. package/dist/{chunk-NVMZQ3Y4.js → chunk-2LPNWAN6.js} +2 -2
  89. package/dist/{chunk-XIDD7PJO.js → chunk-2MYSESZF.js} +1 -1
  90. package/dist/{chunk-MVGCZ655.js → chunk-2UVMIM2J.js} +1 -1
  91. package/dist/{chunk-NF6SWHQI.js → chunk-32MTQ6DN.js} +2 -2
  92. package/dist/{chunk-QOP7QYUW.js → chunk-34RMTXDZ.js} +1 -1
  93. package/dist/{chunk-Q7HLZH32.js → chunk-3QSKDZR5.js} +1 -1
  94. package/dist/{chunk-BVFMLSE3.js → chunk-5EBDOE3C.js} +1 -1
  95. package/dist/{chunk-BF5WV7NM.js → chunk-6FVGSWLS.js} +1 -1
  96. package/dist/chunk-7P336RA5.js +147 -0
  97. package/dist/{chunk-UAGDFEBG.js → chunk-DY4DQ7EB.js} +1 -1
  98. package/dist/{chunk-4DIKLY53.js → chunk-HBSR5DL6.js} +1 -1
  99. package/dist/{chunk-KA75QPFM.js → chunk-ILFEWRLG.js} +1 -1
  100. package/dist/{chunk-AACPFUZW.js → chunk-KOJKX3U6.js} +4 -4
  101. package/dist/chunk-KY65C4XS.js +12 -0
  102. package/dist/{chunk-FG243QHY.js → chunk-KZDMAQNJ.js} +1 -1
  103. package/dist/{chunk-TC7DJTXI.js → chunk-MULOZYHL.js} +2 -0
  104. package/dist/chunk-MZJKPTA5.js +36 -0
  105. package/dist/{chunk-ZUTUI27P.js → chunk-N4GBDK4L.js} +1 -1
  106. package/dist/{chunk-7CXGSS7D.js → chunk-O6H5XXVK.js} +1 -1
  107. package/dist/{chunk-RA2ULG6H.js → chunk-PPUR46MK.js} +10 -1
  108. package/dist/{chunk-GI3S6RMM.js → chunk-PWZT6CZY.js} +3 -3
  109. package/dist/{chunk-NNTO3TNC.js → chunk-Q6CQMS6R.js} +1 -1
  110. package/dist/{chunk-IKBK4A5O.js → chunk-QP2P6GDQ.js} +1 -1
  111. package/dist/{chunk-KV3ODJXH.js → chunk-QTMUKRTN.js} +1 -1
  112. package/dist/{chunk-W53CWWX3.js → chunk-RCKRJXFV.js} +2 -2
  113. package/dist/{chunk-IUQQGIHL.js → chunk-RFPCHMSX.js} +2 -2
  114. package/dist/{chunk-X6IJ7DAX.js → chunk-RL75QTNT.js} +2 -2
  115. package/dist/{chunk-N3SHQ3VU.js → chunk-RRPQMMCZ.js} +1 -1
  116. package/dist/{chunk-EY7LACIR.js → chunk-RWET7W22.js} +1 -1
  117. package/dist/{chunk-TVSHR35W.js → chunk-RWWLVDRE.js} +1 -1
  118. package/dist/{chunk-LSRQJDGR.js → chunk-SEPSXOGJ.js} +1 -1
  119. package/dist/{chunk-MCOC3KQA.js → chunk-SQ4JFHO7.js} +1 -1
  120. package/dist/chunk-SQZEVWVC.js +436 -0
  121. package/dist/{chunk-DL5ERIFF.js → chunk-SS4XCUUJ.js} +2 -2
  122. package/dist/{chunk-GPIRKHGS.js → chunk-T7DXSFUX.js} +1 -1
  123. package/dist/{chunk-NZWX27J7.js → chunk-TDQ262TB.js} +19 -3
  124. package/dist/{chunk-5GNA4RKP.js → chunk-TGSIVB6H.js} +1 -1
  125. package/dist/{chunk-UO5VJHWP.js → chunk-U4HOKU6P.js} +2 -2
  126. package/dist/chunk-XCUUI7E7.js +62 -0
  127. package/dist/{chunk-ENHLVF6Q.js → chunk-XS2FJVMT.js} +1 -1
  128. package/dist/{chunk-FV6H7H5I.js → chunk-YBJVIY5E.js} +4 -4
  129. package/dist/{chunk-6MAQ2SVP.js → chunk-YR3ZURBM.js} +3 -3
  130. package/dist/{chunk-ZI5G5RS7.js → chunk-Z734SV4E.js} +55 -8
  131. package/dist/{chunk-OWIGEE2Y.js → chunk-ZZCCNVF3.js} +3 -3
  132. package/dist/generated/index.d.ts +4 -0
  133. package/dist/generated/index.js +95 -91
  134. package/dist/index.js +95 -91
  135. package/dist/styles.css +472 -16
  136. package/package.json +3 -3
  137. package/dist/chunk-NMYGJJJK.js +0 -263
  138. package/dist/{chunk-VXCT6L3F.js → chunk-245IXG5P.js} +0 -0
  139. package/dist/{chunk-OED6LUWE.js → chunk-4A4QG6UC.js} +1 -1
  140. package/dist/{chunk-FYINAYAJ.js → chunk-6AKG2VLR.js} +1 -1
  141. package/dist/{chunk-E6HXFFWO.js → chunk-ISDEXIXH.js} +1 -1
  142. package/dist/{chunk-U2XAJONO.js → chunk-OKE5YSLD.js} +1 -1
  143. package/dist/{chunk-PCI7ZJ6Z.js → chunk-TMM32U7D.js} +1 -1
@@ -1,16 +1,17 @@
1
- export { Switcher } from '../chunk-NF6SWHQI.js';
2
- import '../chunk-FYINAYAJ.js';
1
+ export { Switcher } from '../chunk-32MTQ6DN.js';
2
+ import '../chunk-6AKG2VLR.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-KHJIEPZV.js';
5
5
  import '../chunk-FYTIJM2T.js';
6
6
  import '../chunk-TEUQWOWZ.js';
7
- import '../chunk-ZI5G5RS7.js';
7
+ import '../chunk-Z734SV4E.js';
8
+ import '../chunk-XCUUI7E7.js';
8
9
  import '../chunk-PQADV6P6.js';
9
10
  import '../chunk-RSAQOKH3.js';
10
11
  import '../chunk-RTPQDNW3.js';
11
12
  import '../chunk-OMV5W53A.js';
12
- import '../chunk-H5XTJ7GJ.js';
13
13
  import '../chunk-OG6CL3EB.js';
14
+ import '../chunk-H5XTJ7GJ.js';
14
15
  import '../chunk-LACA4JGC.js';
15
16
  import '../chunk-NUZHC6MM.js';
16
17
  import '../chunk-BZFWDIV6.js';
@@ -1,12 +1,12 @@
1
- export { TabPanel, Tabs, tabId } from '../chunk-KA75QPFM.js';
1
+ export { TabPanel, Tabs, tabId } from '../chunk-ILFEWRLG.js';
2
2
  import '../chunk-WIATRXEJ.js';
3
3
  import '../chunk-EGMQURBR.js';
4
4
  import '../chunk-BHHIIK3M.js';
5
- import '../chunk-PCI7ZJ6Z.js';
5
+ import '../chunk-TMM32U7D.js';
6
6
  import '../chunk-OMV5W53A.js';
7
- import '../chunk-H5XTJ7GJ.js';
8
7
  import '../chunk-2YTOOH3A.js';
9
8
  import '../chunk-OG6CL3EB.js';
9
+ import '../chunk-H5XTJ7GJ.js';
10
10
  import '../chunk-LACA4JGC.js';
11
11
  import '../chunk-NUZHC6MM.js';
12
12
  import '../chunk-BZFWDIV6.js';
@@ -7,6 +7,14 @@ import type { ElementType, HTMLAttributes } from 'react';
7
7
  export type TextVariant =
8
8
  /** Body copy, 14px. The default, and the only one that needs no thought. */
9
9
  'body'
10
+ /**
11
+ * Words somebody wrote to be read whole, at the body's size: a mission on
12
+ * its card, a policy, a comment. The relaxed leading, the author's own line
13
+ * breaks kept, balanced last lines, and a long word or address broken
14
+ * rather than pushed past the column. Body copy reflows what it is given;
15
+ * a passage keeps it as it was written.
16
+ */
17
+ | 'passage'
10
18
  /** A value inside a dense row or table cell, 13px. */
11
19
  | 'cell'
12
20
  /** Metadata under or beside a value, 12px, on the tertiary step. */
@@ -1,2 +1,2 @@
1
- export { Text } from '../chunk-IKBK4A5O.js';
1
+ export { Text } from '../chunk-QP2P6GDQ.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -66,6 +66,15 @@
66
66
  color: var(--color-text-primary);
67
67
  }
68
68
 
69
+ .crewlet-text--passage {
70
+ font-size: var(--font-size-sm);
71
+ line-height: var(--font-line-height-relaxed);
72
+ color: var(--color-text-primary);
73
+ white-space: pre-wrap;
74
+ overflow-wrap: anywhere;
75
+ text-wrap: pretty;
76
+ }
77
+
69
78
  .crewlet-text--cell {
70
79
  font-size: var(--font-size-compact);
71
80
  line-height: var(--font-line-height-snug);
@@ -1,17 +1,17 @@
1
- export { DensitySwitcher, ThemeSwitcher } from '../chunk-LSRQJDGR.js';
1
+ export { DensitySwitcher, ThemeSwitcher } from '../chunk-SEPSXOGJ.js';
2
2
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-Z24ZUSTX.js';
3
3
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from '../chunk-ZXXDZJQN.js';
4
4
  import '../chunk-OOC7Q67K.js';
5
- import '../chunk-BF5WV7NM.js';
6
- import '../chunk-KA75QPFM.js';
5
+ import '../chunk-6FVGSWLS.js';
6
+ import '../chunk-ILFEWRLG.js';
7
7
  import '../chunk-WIATRXEJ.js';
8
8
  import '../chunk-EGMQURBR.js';
9
9
  import '../chunk-BHHIIK3M.js';
10
- import '../chunk-PCI7ZJ6Z.js';
10
+ import '../chunk-TMM32U7D.js';
11
11
  import '../chunk-OMV5W53A.js';
12
- import '../chunk-H5XTJ7GJ.js';
13
12
  import '../chunk-2YTOOH3A.js';
14
13
  import '../chunk-OG6CL3EB.js';
14
+ import '../chunk-H5XTJ7GJ.js';
15
15
  import '../chunk-LACA4JGC.js';
16
16
  import '../chunk-NUZHC6MM.js';
17
17
  import '../chunk-BZFWDIV6.js';
@@ -1,2 +1,2 @@
1
- export { TileGrid } from '../chunk-NNTO3TNC.js';
1
+ export { TileGrid } from '../chunk-Q6CQMS6R.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -50,3 +50,33 @@
50
50
  --crewlet-tile-grid-tracks: 1;
51
51
  }
52
52
  }
53
+
54
+ /*
55
+ * COMPACT TILES FOLD WIDER. A compact `CatalogTile` puts its mark, name,
56
+ * state, fact and action on ONE line, which needs about 30rem; the folds above
57
+ * are sized for a comfortable tile, whose parts stack. Measured at a 1024px
58
+ * window, two compact tiles on 415px tracks cut the name to its first letter.
59
+ * So a grid holding a compact tile folds where a track would be narrower than
60
+ * 30rem, counting the gaps: two tracks need 61rem, three 92rem (folding
61
+ * straight to one, as three always do), and four 123rem before they go to
62
+ * two. Declared here, on the grid, because the grid chooses the track count
63
+ * and the tile cannot.
64
+ */
65
+ @container crewlet-tile-grid (width < 123rem) {
66
+ .crewlet-tile-grid[data-columns='4']:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
67
+ --crewlet-tile-grid-tracks: 2;
68
+ }
69
+ }
70
+
71
+ @container crewlet-tile-grid (width < 92rem) {
72
+ .crewlet-tile-grid[data-columns='3']:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
73
+ --crewlet-tile-grid-tracks: 1;
74
+ }
75
+ }
76
+
77
+ @container crewlet-tile-grid (width < 61rem) {
78
+ /* As specific as the two rules above and after them, so it wins at every count. */
79
+ .crewlet-tile-grid[data-columns]:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
80
+ --crewlet-tile-grid-tracks: 1;
81
+ }
82
+ }
@@ -1,14 +1,16 @@
1
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-X6IJ7DAX.js';
1
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-RL75QTNT.js';
2
2
  import '../chunk-XQZ6EWOE.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-KHJIEPZV.js';
5
5
  import '../chunk-GXQ3B46I.js';
6
- import '../chunk-ZI5G5RS7.js';
6
+ import '../chunk-Z734SV4E.js';
7
+ import '../chunk-XCUUI7E7.js';
7
8
  import '../chunk-PQADV6P6.js';
9
+ import '../chunk-RSAQOKH3.js';
8
10
  import '../chunk-OMV5W53A.js';
9
- import '../chunk-H5XTJ7GJ.js';
10
11
  import '../chunk-2YTOOH3A.js';
11
12
  import '../chunk-OG6CL3EB.js';
13
+ import '../chunk-H5XTJ7GJ.js';
12
14
  import '../chunk-LACA4JGC.js';
13
15
  import '../chunk-NUZHC6MM.js';
14
16
  import '../chunk-BZFWDIV6.js';
@@ -5,8 +5,8 @@ import '../chunk-LM3ISVJA.js';
5
5
  import '../chunk-I33UIUZD.js';
6
6
  import '../chunk-SMBKXWML.js';
7
7
  import '../chunk-OMV5W53A.js';
8
- import '../chunk-H5XTJ7GJ.js';
9
8
  import '../chunk-OG6CL3EB.js';
9
+ import '../chunk-H5XTJ7GJ.js';
10
10
  import '../chunk-LACA4JGC.js';
11
11
  import '../chunk-NUZHC6MM.js';
12
12
  import '../chunk-BZFWDIV6.js';
@@ -1,18 +1,18 @@
1
- export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-IUQQGIHL.js';
1
+ export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-RFPCHMSX.js';
2
2
  import '../chunk-BVWSLXTY.js';
3
3
  import '../chunk-OOC7Q67K.js';
4
- import '../chunk-BF5WV7NM.js';
5
- import '../chunk-KA75QPFM.js';
4
+ import '../chunk-6FVGSWLS.js';
5
+ import '../chunk-ILFEWRLG.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-EGMQURBR.js';
8
- import '../chunk-RA2ULG6H.js';
8
+ import '../chunk-PPUR46MK.js';
9
9
  import '../chunk-BHHIIK3M.js';
10
10
  import '../chunk-PQADV6P6.js';
11
- import '../chunk-PCI7ZJ6Z.js';
11
+ import '../chunk-TMM32U7D.js';
12
12
  import '../chunk-OMV5W53A.js';
13
- import '../chunk-H5XTJ7GJ.js';
14
13
  import '../chunk-2YTOOH3A.js';
15
14
  import '../chunk-OG6CL3EB.js';
15
+ import '../chunk-H5XTJ7GJ.js';
16
16
  import '../chunk-LACA4JGC.js';
17
17
  import '../chunk-NUZHC6MM.js';
18
18
  import '../chunk-BZFWDIV6.js';
@@ -1,7 +1,7 @@
1
1
  import { useMediaMatch } from './chunk-RTPQDNW3.js';
2
- import { Menu } from './chunk-PCI7ZJ6Z.js';
3
- import { useModalLayer, focusables } from './chunk-H5XTJ7GJ.js';
2
+ import { Menu } from './chunk-TMM32U7D.js';
4
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
+ import { useModalLayer, focusables } from './chunk-H5XTJ7GJ.js';
5
5
  import { IconButton } from './chunk-LACA4JGC.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- import { Document } from './chunk-PWG3VHRQ.js';
2
1
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
2
  import { toInstant, RelativeTime, formatExact, toISO } from './chunk-3CZ7XAVY.js';
4
- import { Composer } from './chunk-7CXGSS7D.js';
3
+ import { Document } from './chunk-PWG3VHRQ.js';
4
+ import { Composer } from './chunk-O6H5XXVK.js';
5
5
  import { Count } from './chunk-BHHIIK3M.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
7
7
  import { Button } from './chunk-OG6CL3EB.js';
@@ -1,4 +1,4 @@
1
- import { EmptyState } from './chunk-RA2ULG6H.js';
1
+ import { EmptyState } from './chunk-PPUR46MK.js';
2
2
  import { useMediaMatch } from './chunk-RTPQDNW3.js';
3
3
  import { Button } from './chunk-OG6CL3EB.js';
4
4
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
@@ -1,5 +1,5 @@
1
1
  import { useListbox } from './chunk-7KHM2FZH.js';
2
- import { Input } from './chunk-ZI5G5RS7.js';
2
+ import { Input } from './chunk-Z734SV4E.js';
3
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './HitArea-QUOS6ZDJ.css';
@@ -1,9 +1,9 @@
1
- import { Modal } from './chunk-FYINAYAJ.js';
1
+ import { Modal } from './chunk-6AKG2VLR.js';
2
2
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
3
3
  import { Popover } from './chunk-KHJIEPZV.js';
4
4
  import { KeyChip, highlightMatch } from './chunk-FYTIJM2T.js';
5
5
  import { Skeleton } from './chunk-TEUQWOWZ.js';
6
- import { Input } from './chunk-ZI5G5RS7.js';
6
+ import { Input } from './chunk-Z734SV4E.js';
7
7
  import { announce } from './chunk-RSAQOKH3.js';
8
8
  import { useMediaMatch } from './chunk-RTPQDNW3.js';
9
9
  import { focusables, isComposing } from './chunk-H5XTJ7GJ.js';
@@ -1,5 +1,5 @@
1
1
  import { NODE_HUES, NODE_HUE_NAMES } from './chunk-AYKXMIOR.js';
2
- import { SegmentedControl } from './chunk-BF5WV7NM.js';
2
+ import { SegmentedControl } from './chunk-6FVGSWLS.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,4 +1,4 @@
1
- import { HuePicker } from './chunk-QOP7QYUW.js';
1
+ import { HuePicker } from './chunk-34RMTXDZ.js';
2
2
  import { Popover } from './chunk-KHJIEPZV.js';
3
3
  import { NODE_HUE_NAMES } from './chunk-AYKXMIOR.js';
4
4
  import { CharacterPicker } from './chunk-SNQRGH4A.js';
@@ -1,6 +1,6 @@
1
1
  import { Select } from './chunk-XQZ6EWOE.js';
2
2
  import { CopyButton } from './chunk-7SHAFLEX.js';
3
- import { Modal } from './chunk-FYINAYAJ.js';
3
+ import { Modal } from './chunk-6AKG2VLR.js';
4
4
  import { Callout } from './chunk-SZZRIHGT.js';
5
5
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
@@ -1,4 +1,4 @@
1
- import { tabId } from './chunk-KA75QPFM.js';
1
+ import { tabId } from './chunk-ILFEWRLG.js';
2
2
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
3
3
  import { Count } from './chunk-BHHIIK3M.js';
4
4
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
@@ -0,0 +1,147 @@
1
+ import { EditingStatus } from './chunk-MULOZYHL.js';
2
+ import { Kbd } from './chunk-SMBKXWML.js';
3
+ import { Button } from './chunk-OG6CL3EB.js';
4
+ import { isComposing } from './chunk-H5XTJ7GJ.js';
5
+ import { cx } from './chunk-ODEQTPFM.js';
6
+ import './InlineEditor-W55DDKML.css';
7
+ import { useRef, useLayoutEffect } from 'react';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+
10
+ var INLINE_EDITOR_LABELS = {
11
+ save: "Save",
12
+ cancel: "Cancel",
13
+ unchanged: "Nothing has changed yet.",
14
+ invalid: "Fix the highlighted field first.",
15
+ saving: "Saving. Wait for it to finish.",
16
+ shortcut: "to save"
17
+ };
18
+ function firstField(root) {
19
+ return root.querySelector(
20
+ 'textarea:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), [contenteditable="true"]'
21
+ );
22
+ }
23
+ function InlineEditor({
24
+ label,
25
+ children,
26
+ onSave,
27
+ onCancel,
28
+ dirty,
29
+ saving = false,
30
+ invalid = false,
31
+ error,
32
+ notice,
33
+ focusOnMount = true,
34
+ shortcutHint = true,
35
+ secondaryActions,
36
+ labels: overrides,
37
+ className,
38
+ onKeyDown,
39
+ ...rest
40
+ }) {
41
+ const labels = { ...INLINE_EDITOR_LABELS, ...overrides };
42
+ const form = useRef(null);
43
+ const focusAtMount = useRef(focusOnMount);
44
+ useLayoutEffect(() => {
45
+ if (!focusAtMount.current || !form.current) return;
46
+ const field = firstField(form.current);
47
+ if (!field) return;
48
+ field.focus();
49
+ if (field instanceof HTMLTextAreaElement || field instanceof HTMLInputElement) {
50
+ const end = field.value.length;
51
+ try {
52
+ field.setSelectionRange(end, end);
53
+ } catch {
54
+ }
55
+ }
56
+ }, []);
57
+ const blocked = saving ? labels.saving : invalid ? labels.invalid : !dirty ? labels.unchanged : null;
58
+ const save = () => {
59
+ if (blocked === null) onSave();
60
+ };
61
+ const submit = (event) => {
62
+ event.preventDefault();
63
+ save();
64
+ };
65
+ const keys = (event) => {
66
+ onKeyDown?.(event);
67
+ if (event.defaultPrevented || isComposing(event)) return;
68
+ if (event.key === "Escape") {
69
+ event.preventDefault();
70
+ if (!saving) onCancel();
71
+ return;
72
+ }
73
+ if (event.key !== "Enter") return;
74
+ if ((event.metaKey || event.ctrlKey) && !event.altKey) {
75
+ event.preventDefault();
76
+ save();
77
+ return;
78
+ }
79
+ if (event.target instanceof HTMLInputElement) event.preventDefault();
80
+ };
81
+ return (
82
+ /*
83
+ * THE FORM LISTENS FOR ITS TWO KEYS, as React's own handler rather than a
84
+ * native one, because React's runs after every handler inside it: that is
85
+ * what lets an open menu's Escape close the menu and stop there. A
86
+ * native listener on the form would hear the key first, before anything
87
+ * inside had the chance to claim it.
88
+ */
89
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- see above
90
+ /* @__PURE__ */ jsxs(
91
+ "form",
92
+ {
93
+ ...rest,
94
+ ref: form,
95
+ "aria-label": label,
96
+ "aria-busy": saving || void 0,
97
+ noValidate: true,
98
+ className: cx("crewlet-inline-editor", className),
99
+ onSubmit: submit,
100
+ onKeyDown: keys,
101
+ children: [
102
+ /* @__PURE__ */ jsx("div", { className: "crewlet-inline-editor__fields", children }),
103
+ notice ? /* @__PURE__ */ jsx("div", { className: "crewlet-inline-editor__notice", children: notice }) : null,
104
+ error ? /* @__PURE__ */ jsx("div", { className: "crewlet-inline-editor__error", role: "alert", children: error }) : null,
105
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-inline-editor__bar", children: [
106
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-inline-editor__start", children: [
107
+ /* @__PURE__ */ jsx(EditingStatus, { dirty, saving, labels: labels.status }),
108
+ secondaryActions
109
+ ] }),
110
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-inline-editor__end", children: [
111
+ shortcutHint ? /* @__PURE__ */ jsxs("span", { className: "crewlet-inline-editor__hint", children: [
112
+ /* @__PURE__ */ jsx(Kbd, { keys: ["Mod", "Enter"], subtle: true }),
113
+ " ",
114
+ labels.shortcut
115
+ ] }) : null,
116
+ /* @__PURE__ */ jsx(
117
+ Button,
118
+ {
119
+ size: "small",
120
+ variant: "ghost",
121
+ ...saving ? { disabledReason: labels.saving } : {},
122
+ onClick: () => {
123
+ if (!saving) onCancel();
124
+ },
125
+ children: labels.cancel
126
+ }
127
+ ),
128
+ /* @__PURE__ */ jsx(
129
+ Button,
130
+ {
131
+ size: "small",
132
+ variant: "primary",
133
+ type: "submit",
134
+ loading: saving,
135
+ ...blocked !== null && !saving ? { disabledReason: blocked } : {},
136
+ children: labels.save
137
+ }
138
+ )
139
+ ] })
140
+ ] })
141
+ ]
142
+ }
143
+ )
144
+ );
145
+ }
146
+
147
+ export { INLINE_EDITOR_LABELS, InlineEditor };
@@ -1,5 +1,5 @@
1
- import { ConfirmModal } from './chunk-FYINAYAJ.js';
2
1
  import { InlineCode } from './chunk-5CLW2CXT.js';
2
+ import { ConfirmModal } from './chunk-6AKG2VLR.js';
3
3
  import { Callout } from './chunk-SZZRIHGT.js';
4
4
  import './LinkInterstitial-ET4MSVSV.css';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Combobox } from './chunk-MVGCZ655.js';
1
+ import { Combobox } from './chunk-2UVMIM2J.js';
2
2
  import { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './PrincipalPicker-7NNZTGUP.css';
@@ -1,7 +1,7 @@
1
1
  import { StatusDot } from './chunk-WIATRXEJ.js';
2
2
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
3
3
  import { Count } from './chunk-BHHIIK3M.js';
4
- import { Menu } from './chunk-PCI7ZJ6Z.js';
4
+ import { Menu } from './chunk-TMM32U7D.js';
5
5
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,14 +1,14 @@
1
1
  import { PageHeader } from './chunk-HOXGBLEY.js';
2
2
  import { DateTimePicker } from './chunk-UFXLNC2N.js';
3
- import { DataTable } from './chunk-GI3S6RMM.js';
3
+ import { DataTable } from './chunk-PWZT6CZY.js';
4
4
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
5
- import { Popover } from './chunk-KHJIEPZV.js';
6
5
  import { Toolbar } from './chunk-NR4CPM4T.js';
6
+ import { Popover } from './chunk-KHJIEPZV.js';
7
7
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
8
- import { Input } from './chunk-ZI5G5RS7.js';
8
+ import { Input } from './chunk-Z734SV4E.js';
9
9
  import { Kbd } from './chunk-SMBKXWML.js';
10
10
  import { Count } from './chunk-BHHIIK3M.js';
11
- import { Menu } from './chunk-PCI7ZJ6Z.js';
11
+ import { Menu } from './chunk-TMM32U7D.js';
12
12
  import { Button } from './chunk-OG6CL3EB.js';
13
13
  import { IconButton } from './chunk-LACA4JGC.js';
14
14
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
@@ -0,0 +1,12 @@
1
+ import { cx } from './chunk-ODEQTPFM.js';
2
+ import './AsideLayout-TH5SQZNK.css';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ function AsideLayout({ children, aside, asideLabel, className, ...rest }) {
6
+ return /* @__PURE__ */ jsx("div", { ...rest, className: cx("crewlet-aside-layout", className), children: /* @__PURE__ */ jsxs("div", { className: "crewlet-aside-layout__columns", children: [
7
+ /* @__PURE__ */ jsx("div", { className: "crewlet-aside-layout__main", children }),
8
+ /* @__PURE__ */ jsx("aside", { className: "crewlet-aside-layout__aside", "aria-label": asideLabel, children: aside })
9
+ ] }) });
10
+ }
11
+
12
+ export { AsideLayout };
@@ -1,5 +1,5 @@
1
1
  import { InlineCode } from './chunk-5CLW2CXT.js';
2
- import { FormField, Input } from './chunk-ZI5G5RS7.js';
2
+ import { FormField, Input } from './chunk-Z734SV4E.js';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
 
5
5
  function confirmMatches(typed, phrase) {
@@ -1,3 +1,4 @@
1
+ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
1
2
  import { cx } from './chunk-ODEQTPFM.js';
2
3
  import './EditingStatus-NNA2CKIL.css';
3
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -19,6 +20,7 @@ function EditingStatus({ dirty, saving = false, labels, className }) {
19
20
  children: [
20
21
  /* @__PURE__ */ jsx("span", { className: "crewlet-editing-status__dot", "aria-hidden": "true" }),
21
22
  /* @__PURE__ */ jsx("span", { className: "crewlet-editing-status__label", children: text.editing }),
23
+ state && /* @__PURE__ */ jsx(VisuallyHidden, { children: ", " }),
22
24
  state && /* @__PURE__ */ jsx("span", { className: "crewlet-editing-status__state", children: state })
23
25
  ]
24
26
  }
@@ -0,0 +1,36 @@
1
+ import { EmptyState } from './chunk-PPUR46MK.js';
2
+ import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './Statement-M4QDXIMO.css';
5
+ import { useId } from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ function Statement({ label, children, empty, headingLevel, className, ...rest }) {
9
+ const contextLevel = useHeadingLevel();
10
+ const Heading = headingTag(headingLevel ?? contextLevel);
11
+ const id = useId();
12
+ const written = !(children === void 0 || children === null || children === "" || children === false);
13
+ return /* @__PURE__ */ jsxs(
14
+ "section",
15
+ {
16
+ "aria-labelledby": id,
17
+ ...rest,
18
+ className: cx("crewlet-statement", !written && "crewlet-statement--empty", className),
19
+ children: [
20
+ /* @__PURE__ */ jsx(Heading, { id, className: "crewlet-statement__label", children: label }),
21
+ written ? typeof children === "string" || typeof children === "number" ? /* @__PURE__ */ jsx("div", { className: "crewlet-statement__text", children }) : /* @__PURE__ */ jsx("div", { className: "crewlet-statement__body", children }) : /* @__PURE__ */ jsx(
22
+ EmptyState,
23
+ {
24
+ size: "inline",
25
+ headingLevel: "none",
26
+ title: empty.title,
27
+ description: empty.description,
28
+ action: empty.action
29
+ }
30
+ )
31
+ ]
32
+ }
33
+ );
34
+ }
35
+
36
+ export { Statement };
@@ -1,4 +1,4 @@
1
- import { Text } from './chunk-IKBK4A5O.js';
1
+ import { Text } from './chunk-QP2P6GDQ.js';
2
2
  import { Inline, Stack, Spacer } from './chunk-ZAC7SKUN.js';
3
3
  import { Card } from './chunk-INHXF2CL.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { Textarea } from './chunk-ZI5G5RS7.js';
1
+ import { Textarea } from './chunk-Z734SV4E.js';
2
2
  import { Kbd } from './chunk-SMBKXWML.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Composer-TXULCPPV.css';
@@ -1,6 +1,6 @@
1
1
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './EmptyState-C6HRBGT7.css';
3
+ import './EmptyState-7L4UAQBX.css';
4
4
  import { InboxGlyph } from '@crewlethq/icons/glyphs';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -18,6 +18,15 @@ function EmptyState({
18
18
  const contextLevel = useHeadingLevel();
19
19
  const level = headingLevel ?? contextLevel;
20
20
  const Heading = level === "none" ? "div" : headingTag(level);
21
+ if (size === "inline") {
22
+ return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-empty-state", "crewlet-empty-state--inline", className), children: [
23
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-empty-state__text", children: [
24
+ /* @__PURE__ */ jsx(Heading, { className: "crewlet-empty-state__title", children: title }),
25
+ /* @__PURE__ */ jsx("p", { className: "crewlet-empty-state__description", children: description })
26
+ ] }),
27
+ action ? /* @__PURE__ */ jsx("div", { className: "crewlet-empty-state__action", children: action }) : null
28
+ ] });
29
+ }
21
30
  return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-empty-state", `crewlet-empty-state--${size}`, className), children: [
22
31
  /* @__PURE__ */ jsx("span", { className: "crewlet-empty-state__mark", "aria-hidden": true, children: illustration ?? icon ?? /* @__PURE__ */ jsx(InboxGlyph, { size: size === "compact" ? "xl" : 32 }) }),
23
32
  /* @__PURE__ */ jsx(Heading, { className: "crewlet-empty-state__title", children: title }),
@@ -1,9 +1,9 @@
1
1
  import { useClipboard } from './chunk-STJ7QBC3.js';
2
- import { Modal } from './chunk-FYINAYAJ.js';
3
- import { Checkbox } from './chunk-EY7LACIR.js';
2
+ import { Modal } from './chunk-6AKG2VLR.js';
3
+ import { Checkbox } from './chunk-RWET7W22.js';
4
4
  import { EmptyValue } from './chunk-EUCC37WY.js';
5
5
  import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
6
- import { Menu } from './chunk-PCI7ZJ6Z.js';
6
+ import { Menu } from './chunk-TMM32U7D.js';
7
7
  import { Button } from './chunk-OG6CL3EB.js';
8
8
  import { IconButton } from './chunk-LACA4JGC.js';
9
9
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './TileGrid-I6LNYD2H.css';
2
+ import './TileGrid-UYMVVVJK.css';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
5
5
  function TileGrid({ columns = 3, as: Track = "div", className, children, ...rest }) {
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './Text-S3Q4O3IG.css';
2
+ import './Text-XOCOU34C.css';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
5
5
  function Text({
@@ -1,4 +1,4 @@
1
- import { EmptyState } from './chunk-RA2ULG6H.js';
1
+ import { EmptyState } from './chunk-PPUR46MK.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './AccessDeniedCard-QVNDMT46.css';
4
4
  import { ShieldGlyph, LockGlyph, EyeOffGlyph } from '@crewlethq/icons/glyphs';
@@ -1,6 +1,6 @@
1
1
  import { useReorder } from './chunk-XJ2QEBMM.js';
2
- import { Input } from './chunk-ZI5G5RS7.js';
3
- import { Menu } from './chunk-PCI7ZJ6Z.js';
2
+ import { Input } from './chunk-Z734SV4E.js';
3
+ import { Menu } from './chunk-TMM32U7D.js';
4
4
  import { IconButton } from './chunk-LACA4JGC.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';