@crewlethq/ui 0.68.0 → 0.70.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 (174) hide show
  1. package/README.md +24 -2
  2. package/dist/AgentHandoffPanel/index.js +5 -5
  3. package/dist/AppShell/index.js +4 -4
  4. package/dist/ArrangeList/index.js +4 -4
  5. package/dist/ArtifactBar/index.js +7 -7
  6. package/dist/ArtifactCard/index.js +4 -4
  7. package/dist/ArtifactPanel/index.js +1 -1
  8. package/dist/AvatarPicker/index.js +7 -7
  9. package/dist/BriefCard/BriefCard.d.ts +80 -0
  10. package/dist/BriefCard/index.d.ts +3 -0
  11. package/dist/BriefCard/index.js +13 -0
  12. package/dist/BriefCard-L66R5U32.css +127 -0
  13. package/dist/Button/Button.d.ts +10 -0
  14. package/dist/Button/index.js +1 -1
  15. package/dist/{Button-VRRYSXFN.css → Button-GDEBGBX6.css} +30 -3
  16. package/dist/Canvas/index.js +3 -3
  17. package/dist/CanvasBoard/index.js +5 -5
  18. package/dist/CanvasToolbar/index.js +4 -4
  19. package/dist/ChatThread/index.js +2 -2
  20. package/dist/Checkbox/index.js +3 -3
  21. package/dist/CodeBlock/index.js +3 -3
  22. package/dist/ColorField/index.js +3 -3
  23. package/dist/ColorSwatch/index.js +3 -3
  24. package/dist/Combobox/index.js +3 -3
  25. package/dist/CommandPalette/index.js +5 -5
  26. package/dist/CommentThread/index.js +6 -6
  27. package/dist/Composer/index.js +3 -3
  28. package/dist/ConfirmField/index.js +3 -3
  29. package/dist/ConflictNote/index.js +2 -2
  30. package/dist/ContrastHelp/index.js +1 -1
  31. package/dist/Copyable/index.js +2 -2
  32. package/dist/DataGrid/DataGrid.d.ts +50 -4
  33. package/dist/DataGrid/index.d.ts +2 -2
  34. package/dist/DataGrid/index.js +5 -5
  35. package/dist/{DataGrid-NHIN2I42.css → DataGrid-Q26F2V5Q.css} +145 -24
  36. package/dist/DataTable/index.js +7 -7
  37. package/dist/DataView/index.js +10 -9
  38. package/dist/{DataView-RH5UDA5F.css → DataView-L7HLNW7C.css} +1 -112
  39. package/dist/DateTimePicker/index.js +3 -3
  40. package/dist/DeepWorkCard/index.js +3 -3
  41. package/dist/DocTabsEditor/index.js +5 -5
  42. package/dist/DownloadButton/index.js +2 -2
  43. package/dist/{Editor-2MZDDSJF.js → Editor-NNQEALNT.js} +4 -4
  44. package/dist/ErrorBoundary/index.js +2 -2
  45. package/dist/FileDrop/index.js +2 -2
  46. package/dist/FilterPill/FilterPill.d.ts +63 -0
  47. package/dist/FilterPill/index.d.ts +3 -0
  48. package/dist/FilterPill/index.js +4 -0
  49. package/dist/FilterPill-4GMNFZND.css +134 -0
  50. package/dist/FollowBanner/index.js +2 -2
  51. package/dist/HuePicker/index.js +6 -6
  52. package/dist/InlineEditor/index.js +2 -2
  53. package/dist/Input/index.js +2 -2
  54. package/dist/LinkInterstitial/index.js +4 -4
  55. package/dist/ListInput/index.js +4 -4
  56. package/dist/LogoSlot/index.js +3 -3
  57. package/dist/MarkdownEditor/index.js +6 -6
  58. package/dist/Menu/Menu.d.ts +10 -1
  59. package/dist/Menu/index.js +3 -3
  60. package/dist/{Menu-OLUGHX56.css → Menu-I4SNXHOT.css} +12 -0
  61. package/dist/MergeConflicts/index.js +6 -6
  62. package/dist/Modal/index.js +3 -3
  63. package/dist/OpenInAppCard/index.js +3 -3
  64. package/dist/OrgTable/index.js +1 -1
  65. package/dist/PeekRail/index.js +2 -2
  66. package/dist/PeopleRail/index.js +2 -2
  67. package/dist/PresenterView/index.js +3 -3
  68. package/dist/PrincipalPicker/index.js +4 -4
  69. package/dist/ProposalCard/index.js +7 -7
  70. package/dist/ReceiptStrip/index.js +2 -2
  71. package/dist/ResultTableCard/index.js +4 -4
  72. package/dist/RichEditor/index.js +2 -2
  73. package/dist/SandboxedFrame/index.js +2 -2
  74. package/dist/SegmentedControl/index.js +5 -5
  75. package/dist/SelectionBar/index.js +2 -2
  76. package/dist/SetupWizard/index.js +2 -2
  77. package/dist/ShareDialog/index.js +5 -5
  78. package/dist/SheetColumnEditor/index.js +9 -9
  79. package/dist/SheetGrid/index.js +4 -4
  80. package/dist/SidePanel/index.js +1 -1
  81. package/dist/SlideCompare/index.js +2 -2
  82. package/dist/SlideFilmstrip/index.js +4 -4
  83. package/dist/Switcher/index.js +5 -5
  84. package/dist/TableCells/index.js +1 -1
  85. package/dist/{TableCells-F6MUV572.css → TableCells-TKSNLRK3.css} +1 -0
  86. package/dist/Tabs/index.js +4 -4
  87. package/dist/TagsInput/index.js +2 -2
  88. package/dist/ThemeSwitcher/index.js +6 -6
  89. package/dist/TimeRangePicker/index.js +8 -8
  90. package/dist/TimeWindowPicker/index.js +4 -4
  91. package/dist/TreeCanvas/index.js +4 -4
  92. package/dist/TreeGrid/index.js +1 -1
  93. package/dist/ValueField/index.js +4 -4
  94. package/dist/VersionCompare/index.js +6 -6
  95. package/dist/VersionTimeline/index.js +2 -2
  96. package/dist/{chunk-XI56IJGI.js → chunk-3EETQFAM.js} +1 -1
  97. package/dist/{chunk-5FFZED4X.js → chunk-3EY5SEGH.js} +4 -4
  98. package/dist/{chunk-2QMUOUXN.js → chunk-3LP3VPLT.js} +2 -2
  99. package/dist/{chunk-DGG2A6XG.js → chunk-3WN5HUAK.js} +2 -2
  100. package/dist/{chunk-QBWNGNF7.js → chunk-4DL2BQJE.js} +1 -1
  101. package/dist/{chunk-XNYMMLCY.js → chunk-4MVLED6E.js} +4 -4
  102. package/dist/{chunk-OXEWUAND.js → chunk-5OFRDX66.js} +1 -1
  103. package/dist/{chunk-QRKDP7RQ.js → chunk-6C6YK75K.js} +2 -2
  104. package/dist/{chunk-2A6DL3K5.js → chunk-6FBPFG3C.js} +1 -1
  105. package/dist/{chunk-WWXIGN4O.js → chunk-73SAOOR5.js} +3 -3
  106. package/dist/{chunk-CMTLQOJY.js → chunk-7LSSYHOT.js} +1 -1
  107. package/dist/{chunk-COAK5MIF.js → chunk-ADSOY7UM.js} +3 -3
  108. package/dist/{chunk-GNDKUSCG.js → chunk-AGLONIVV.js} +1 -1
  109. package/dist/{chunk-YDXX5UB7.js → chunk-AQIFKLXY.js} +1 -1
  110. package/dist/{chunk-SUJO3AHN.js → chunk-B3PK2LND.js} +1 -1
  111. package/dist/{chunk-IU5J6BY5.js → chunk-BWAUL5MB.js} +2 -2
  112. package/dist/{chunk-ZFFQMRPJ.js → chunk-BWFJB5JD.js} +4 -4
  113. package/dist/{chunk-I24FI46B.js → chunk-C667GCU7.js} +1 -1
  114. package/dist/{chunk-CWYU7DNT.js → chunk-CDNZTCP2.js} +1 -1
  115. package/dist/{chunk-MVQSTBLQ.js → chunk-DB7UVFOY.js} +1 -1
  116. package/dist/{chunk-OJGI4XJH.js → chunk-DGSK4LLS.js} +1 -1
  117. package/dist/{chunk-7QTPJDRF.js → chunk-DGXZ635L.js} +7 -4
  118. package/dist/{chunk-2SU735S3.js → chunk-DV5L2GRY.js} +1 -1
  119. package/dist/{chunk-NSCYGUDG.js → chunk-EHFQMY3B.js} +1 -1
  120. package/dist/{chunk-FPTJMNI3.js → chunk-EN4UJQ63.js} +2 -2
  121. package/dist/{chunk-O3WH7OJE.js → chunk-EOXI3CRG.js} +1 -1
  122. package/dist/{chunk-LUSRKTX6.js → chunk-ERFXYGRF.js} +2 -2
  123. package/dist/{chunk-MCMPQBEV.js → chunk-FQI62PIZ.js} +2 -2
  124. package/dist/{chunk-CLJHQHPS.js → chunk-FURJVZCT.js} +73 -27
  125. package/dist/{chunk-5K7GGQNX.js → chunk-G4QZWVAB.js} +2 -2
  126. package/dist/{chunk-KZ3UXNN7.js → chunk-H32JW6CZ.js} +2 -2
  127. package/dist/{chunk-7DD2GR7I.js → chunk-HPI5J6AR.js} +2 -2
  128. package/dist/{chunk-ZEPUKRO7.js → chunk-IJ7KLXUZ.js} +1 -1
  129. package/dist/{chunk-MVQLCSAC.js → chunk-IPUEVTRJ.js} +1 -1
  130. package/dist/{chunk-4VPDY7AD.js → chunk-J5WWMC35.js} +45 -46
  131. package/dist/{chunk-KQGOVBGF.js → chunk-JD7P2GJP.js} +1 -1
  132. package/dist/{chunk-VMEUY672.js → chunk-JQEXAH7G.js} +1 -1
  133. package/dist/{chunk-K4IVKHKU.js → chunk-JT7WRPZ6.js} +1 -1
  134. package/dist/{chunk-CFXDWGQI.js → chunk-JVII5264.js} +1 -1
  135. package/dist/chunk-K4LZXSKZ.js +62 -0
  136. package/dist/{chunk-JII74OTJ.js → chunk-KAA3GFTP.js} +5 -5
  137. package/dist/{chunk-WYXUDDTY.js → chunk-KL6A7JGH.js} +1 -1
  138. package/dist/{chunk-2JHGPXYG.js → chunk-KQWJWTED.js} +1 -1
  139. package/dist/{chunk-WU5JDEEY.js → chunk-L4HHWG4V.js} +1 -1
  140. package/dist/{chunk-RCHJBKD3.js → chunk-LQWORB5B.js} +2 -2
  141. package/dist/{chunk-2DSHMV6B.js → chunk-MFQPGMJT.js} +1 -1
  142. package/dist/{chunk-XDVQ72BE.js → chunk-NXNLAZPK.js} +2 -2
  143. package/dist/{chunk-WPMZKZUH.js → chunk-O3HCFM3D.js} +1 -1
  144. package/dist/{chunk-NBOFBSVD.js → chunk-OBPINJNO.js} +2 -2
  145. package/dist/{chunk-2566PSQ3.js → chunk-OQG4P5KU.js} +18 -4
  146. package/dist/{chunk-UWOYDHVW.js → chunk-P64MIA7C.js} +1 -1
  147. package/dist/{chunk-EAR2F5OA.js → chunk-PBCNINMB.js} +1 -1
  148. package/dist/{chunk-KHHDCNYM.js → chunk-PRN5IP2R.js} +1 -1
  149. package/dist/{chunk-DMK2A4IK.js → chunk-QSWQJX27.js} +1 -1
  150. package/dist/{chunk-D2ZXIQ23.js → chunk-R5OATXWU.js} +1 -1
  151. package/dist/{chunk-OFABBAUR.js → chunk-SMZPUHBL.js} +1 -1
  152. package/dist/{chunk-7QTJO3PV.js → chunk-SO5SXSTP.js} +1 -1
  153. package/dist/{chunk-IYG4ETAQ.js → chunk-T5GBTXNC.js} +1 -1
  154. package/dist/{chunk-DMY4XEDS.js → chunk-TKBFRGUV.js} +4 -4
  155. package/dist/{chunk-DFU6JGJV.js → chunk-TPCBPGSB.js} +1 -1
  156. package/dist/{chunk-GAUBP247.js → chunk-TWJERLT3.js} +1 -1
  157. package/dist/{chunk-MJTBINIY.js → chunk-TYIHFDMP.js} +1 -1
  158. package/dist/{chunk-PHBMSXVE.js → chunk-UY3FWQWG.js} +2 -2
  159. package/dist/chunk-VBA5FSWV.js +87 -0
  160. package/dist/{chunk-SZEKOW2X.js → chunk-VWMB3CJN.js} +1 -1
  161. package/dist/{chunk-UKYVLQAE.js → chunk-W5AXJWOW.js} +2 -2
  162. package/dist/{chunk-HHZ5ZXYO.js → chunk-YGWIWDXE.js} +3 -3
  163. package/dist/{chunk-2T32N2WD.js → chunk-YUHKRRWO.js} +2 -2
  164. package/dist/{chunk-IQQSMK4E.js → chunk-ZUBFVK6B.js} +1 -1
  165. package/dist/{chunk-M25IV5MH.js → chunk-ZWCK4N4L.js} +1 -1
  166. package/dist/generated/index.d.ts +2 -0
  167. package/dist/generated/index.js +104 -102
  168. package/dist/index.js +104 -102
  169. package/dist/styles.css +463 -146
  170. package/package.json +3 -3
  171. package/dist/{chunk-TXQNWGUD.js → chunk-ABZC3NLM.js} +0 -0
  172. package/dist/{chunk-DCQ2VTBB.js → chunk-ETSF7SU6.js} +1 -1
  173. package/dist/{chunk-BAHLBMCH.js → chunk-HEIOLITO.js} +1 -1
  174. package/dist/{chunk-R2YHKVWN.js → chunk-SBHAKX2T.js} +1 -1
@@ -1,9 +1,9 @@
1
- export { ColorSwatch } from '../chunk-2A6DL3K5.js';
2
- import '../chunk-IYG4ETAQ.js';
1
+ export { ColorSwatch } from '../chunk-6FBPFG3C.js';
2
+ import '../chunk-T5GBTXNC.js';
3
3
  import '../chunk-STJ7QBC3.js';
4
4
  import '../chunk-DTIW4CHZ.js';
5
5
  import '../chunk-7W3LYIOC.js';
6
- import '../chunk-7QTPJDRF.js';
6
+ import '../chunk-DGXZ635L.js';
7
7
  import '../chunk-XSPCITPN.js';
8
8
  import '../chunk-UAUP6XGK.js';
9
9
  import '../chunk-UT6CW3C7.js';
@@ -1,12 +1,12 @@
1
- export { Combobox } from '../chunk-IQQSMK4E.js';
1
+ export { Combobox } from '../chunk-ZUBFVK6B.js';
2
2
  import '../chunk-7KHM2FZH.js';
3
- import '../chunk-DCQ2VTBB.js';
3
+ import '../chunk-ETSF7SU6.js';
4
4
  import '../chunk-PGCLHYVP.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-2G355KDJ.js';
7
7
  import '../chunk-2YTOOH3A.js';
8
8
  import '../chunk-H5XTJ7GJ.js';
9
- import '../chunk-NUZHC6MM.js';
10
9
  import '../chunk-UAUP6XGK.js';
10
+ import '../chunk-NUZHC6MM.js';
11
11
  import '../chunk-UT6CW3C7.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,18 +1,18 @@
1
- export { CommandPalette } from '../chunk-XDVQ72BE.js';
2
- import '../chunk-I24FI46B.js';
1
+ export { CommandPalette } from '../chunk-NXNLAZPK.js';
2
+ import '../chunk-C667GCU7.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-ANTAQAR4.js';
5
- import '../chunk-DCQ2VTBB.js';
5
+ import '../chunk-ETSF7SU6.js';
6
6
  import '../chunk-PGCLHYVP.js';
7
7
  import '../chunk-MLDTLZAO.js';
8
8
  import '../chunk-PQADV6P6.js';
9
9
  import '../chunk-2G355KDJ.js';
10
- import '../chunk-7QTPJDRF.js';
10
+ import '../chunk-DGXZ635L.js';
11
11
  import '../chunk-OMV5W53A.js';
12
12
  import '../chunk-2YTOOH3A.js';
13
13
  import '../chunk-XSPCITPN.js';
14
14
  import '../chunk-H5XTJ7GJ.js';
15
- import '../chunk-NUZHC6MM.js';
16
15
  import '../chunk-UAUP6XGK.js';
16
+ import '../chunk-NUZHC6MM.js';
17
17
  import '../chunk-UT6CW3C7.js';
18
18
  import '../chunk-ODEQTPFM.js';
@@ -1,22 +1,22 @@
1
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-HHZ5ZXYO.js';
2
- import '../chunk-BXCL6P5Z.js';
1
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-YGWIWDXE.js';
3
2
  import '../chunk-CI3VPIJN.js';
4
3
  import '../chunk-EJNJMHQG.js';
5
4
  import '../chunk-RE3FBGQQ.js';
6
5
  import '../chunk-BKP6XCAJ.js';
7
6
  import '../chunk-PZKHBB7D.js';
8
- import '../chunk-OXEWUAND.js';
7
+ import '../chunk-BXCL6P5Z.js';
8
+ import '../chunk-5OFRDX66.js';
9
9
  import '../chunk-ANTAQAR4.js';
10
- import '../chunk-DCQ2VTBB.js';
10
+ import '../chunk-ETSF7SU6.js';
11
11
  import '../chunk-PGCLHYVP.js';
12
12
  import '../chunk-MLDTLZAO.js';
13
13
  import '../chunk-PQADV6P6.js';
14
14
  import '../chunk-2G355KDJ.js';
15
- import '../chunk-7QTPJDRF.js';
15
+ import '../chunk-DGXZ635L.js';
16
16
  import '../chunk-OMV5W53A.js';
17
17
  import '../chunk-XSPCITPN.js';
18
18
  import '../chunk-H5XTJ7GJ.js';
19
- import '../chunk-NUZHC6MM.js';
20
19
  import '../chunk-UAUP6XGK.js';
20
+ import '../chunk-NUZHC6MM.js';
21
21
  import '../chunk-UT6CW3C7.js';
22
22
  import '../chunk-ODEQTPFM.js';
@@ -1,12 +1,12 @@
1
- export { COMPOSER_COUNTER_AT, Composer } from '../chunk-OXEWUAND.js';
1
+ export { COMPOSER_COUNTER_AT, Composer } from '../chunk-5OFRDX66.js';
2
2
  import '../chunk-ANTAQAR4.js';
3
- import '../chunk-DCQ2VTBB.js';
3
+ import '../chunk-ETSF7SU6.js';
4
4
  import '../chunk-PGCLHYVP.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-2G355KDJ.js';
7
7
  import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-H5XTJ7GJ.js';
9
- import '../chunk-NUZHC6MM.js';
10
9
  import '../chunk-UAUP6XGK.js';
10
+ import '../chunk-NUZHC6MM.js';
11
11
  import '../chunk-UT6CW3C7.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
- export { ConfirmField, confirmMatches } from '../chunk-CFXDWGQI.js';
1
+ export { ConfirmField, confirmMatches } from '../chunk-JVII5264.js';
2
2
  import '../chunk-PLL7ZJHY.js';
3
- import '../chunk-DCQ2VTBB.js';
3
+ import '../chunk-ETSF7SU6.js';
4
4
  import '../chunk-PGCLHYVP.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-2G355KDJ.js';
7
7
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-NUZHC6MM.js';
9
8
  import '../chunk-UAUP6XGK.js';
9
+ import '../chunk-NUZHC6MM.js';
10
10
  import '../chunk-UT6CW3C7.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- export { CONFLICT_NOTE_LABELS, ConflictNote } from '../chunk-SUJO3AHN.js';
2
- import '../chunk-7QTPJDRF.js';
1
+ export { CONFLICT_NOTE_LABELS, ConflictNote } from '../chunk-B3PK2LND.js';
2
+ import '../chunk-DGXZ635L.js';
3
3
  import '../chunk-XSPCITPN.js';
4
4
  import '../chunk-UT6CW3C7.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -6,7 +6,7 @@ import '../chunk-I5OIKDX2.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-H5XTJ7GJ.js';
9
- import '../chunk-NUZHC6MM.js';
10
9
  import '../chunk-UAUP6XGK.js';
10
+ import '../chunk-NUZHC6MM.js';
11
11
  import '../chunk-UT6CW3C7.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { CopyButton, Copyable } from '../chunk-IYG4ETAQ.js';
1
+ export { CopyButton, Copyable } from '../chunk-T5GBTXNC.js';
2
2
  import '../chunk-STJ7QBC3.js';
3
3
  import '../chunk-DTIW4CHZ.js';
4
- import '../chunk-7QTPJDRF.js';
4
+ import '../chunk-DGXZ635L.js';
5
5
  import '../chunk-XSPCITPN.js';
6
6
  import '../chunk-UAUP6XGK.js';
7
7
  import '../chunk-UT6CW3C7.js';
@@ -5,6 +5,10 @@ import { type MouseEvent as ReactMouseEvent, type KeyboardEvent as ReactKeyboard
5
5
  * Each carries the modifier keys a handler reads to open in a new tab.
6
6
  */
7
7
  export type DataGridActivationEvent = ReactMouseEvent | ReactKeyboardEvent | KeyboardEvent;
8
+ /** The edge a column's head and values share. */
9
+ export type DataGridAlign = 'left' | 'right' | 'center';
10
+ /** The track an `icon` column is drawn in: the target size and the cell's inset either side. */
11
+ export declare const DATA_GRID_ICON_TRACK = "calc(var(--size-target-min) + var(--spacing-3) * 2)";
8
12
  /** One column of a [DataGrid]. */
9
13
  export interface DataGridColumn<T> {
10
14
  key: string;
@@ -12,7 +16,23 @@ export interface DataGridColumn<T> {
12
16
  cell: (row: T) => ReactNode;
13
17
  /** The value sorted on. Omit to make the column unsortable. */
14
18
  sortValue?: ((row: T) => string | number | null | undefined) | undefined;
15
- align?: 'left' | 'right' | undefined;
19
+ /**
20
+ * Which edge the column's values and its head share: `left` (the default)
21
+ * for words, `right` for figures, times and dates (their digits are
22
+ * tabular, so a column of them reads down one edge), `center` for a column
23
+ * of one mark per row. The head and every cell take the same edge and the
24
+ * same inset, so a head never stands off the values it names.
25
+ */
26
+ align?: DataGridAlign | undefined;
27
+ /**
28
+ * A column of ONE MARK per row (a glyph, a face, a priority): a fixed track
29
+ * (`DATA_GRID_ICON_TRACK`, the target size and the cell's inset either
30
+ * side), its head and every cell centred. A run of such columns then reads
31
+ * as aligned columns rather than marks scattered at their content's width.
32
+ * Name it with `label`, which the head says to assistive technology and
33
+ * shows on hover.
34
+ */
35
+ icon?: boolean | undefined;
16
36
  /**
17
37
  * The column's name where `header` cannot carry one: a glyph head, or none
18
38
  * at all. Drawn by the card layout a grid takes on a phone, where every value
@@ -156,7 +176,10 @@ export interface DataGridLabels {
156
176
  export interface DataGridHandle {
157
177
  /** Moves the cursor row by `by` rows, clamped, and scrolls it into view. */
158
178
  step: (by: number) => void;
159
- /** Activates the cursor row, as a click on it would. False when there is none. */
179
+ /**
180
+ * Activates the cursor row, as a click on it would: its `onRowActivate`, or
181
+ * where it has none, its `rowHref` link. False when there is neither.
182
+ */
160
183
  activate: (event: ReactKeyboardEvent | KeyboardEvent) => boolean;
161
184
  /** How many rows the grid draws, its bands' rows included. */
162
185
  rowCount: () => number;
@@ -189,7 +212,16 @@ export interface DataGridProps<T> {
189
212
  * Controlled, so an application keeps it where it keeps state (an address).
190
213
  */
191
214
  sort?: string | undefined;
192
- /** A sortable head pressed: ascending, then descending, then unsorted. */
215
+ /**
216
+ * The order the rows take while `sort` is empty (`key` or `-key`), drawn on
217
+ * its column's head as the sort in force. Empty for the rows' own order.
218
+ */
219
+ defaultSort?: string | undefined;
220
+ /**
221
+ * A sortable head pressed: ascending, then descending, then back to the
222
+ * default. Called with `''` for the default, never with `defaultSort`
223
+ * itself, so an address holds the reader's choice and nothing else.
224
+ */
193
225
  onSortChange?: ((sort: string) => void) | undefined;
194
226
  /** The rows arrive ordered by their source (a paged answer ordered over the whole set). */
195
227
  serverSorted?: boolean | undefined;
@@ -235,6 +267,20 @@ export declare function parseGridSort(raw: string): {
235
267
  key: string;
236
268
  desc: boolean;
237
269
  } | null;
270
+ /**
271
+ * The sort a press on a column's head asks for: ascending, then descending,
272
+ * then back to the default. PURE, so the cycle is held without a render.
273
+ *
274
+ * Against the EFFECTIVE sort (the reader's, else the default), because a head
275
+ * that reads "descending" must take its next press as one more step from
276
+ * descending, whoever chose it. Two rules keep every press a visible change:
277
+ *
278
+ * - a column already at its DEFAULT descending turns ascending, where the
279
+ * cycle's "back to the default" would have changed nothing;
280
+ * - a step that lands on the default is written as `''`, so the address holds
281
+ * only what the reader chose and the default can change under it.
282
+ */
283
+ export declare function nextGridSort(column: string, sort: string, defaultSort?: string): string;
238
284
  /** What the fit has decided for one set of columns, at one width. */
239
285
  export interface GridFit {
240
286
  /** The column set it was decided for. */
@@ -323,4 +369,4 @@ export declare function squeezed<T>(wrap: HTMLElement, visible: readonly DataGri
323
369
  * lets its head stick against the page's scroller; an application whose
324
370
  * scroller carries a sticky bar sets `--crewlet-data-grid-sticky-top`.
325
371
  */
326
- export declare function DataGrid<T>({ rows, bands, columns, rowKey, onRowActivate, rowHref, isSelected, selection, isFailed, sort: sortRaw, onSortChange, serverSorted, cols: colsRaw, onColsChange, empty, footer, onLoadMore, loadedNote, phoneRows, flush, handleRef, onPointerDown, labels, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, className, }: DataGridProps<T>): import("react").JSX.Element;
372
+ export declare function DataGrid<T>({ rows, bands, columns, rowKey, onRowActivate, rowHref, isSelected, selection, isFailed, sort: sortRaw, defaultSort, onSortChange, serverSorted, cols: colsRaw, onColsChange, empty, footer, onLoadMore, loadedNote, phoneRows, flush, handleRef, onPointerDown, labels, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, className, }: DataGridProps<T>): import("react").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import './DataGrid.css';
2
- export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, fitGridColumns, parseGridSort } from './DataGrid.js';
2
+ export { ChooserList, ColumnChooser, DATA_GRID_ICON_TRACK, DataGrid, columnChoicesOf, fitGridColumns, nextGridSort, parseGridSort, } from './DataGrid.js';
3
3
  export { countDataGridRows, useAnyDataGridDriving, useDataGridDriving } from './driving.js';
4
4
  export type { DataGridDriving } from './driving.js';
5
- export type { ColumnChoice, ChooserItem, ChooserListProps, ColumnChooserProps, DataGridActivationEvent, DataGridBand, DataGridColumn, DataGridHandle, DataGridLabels, DataGridProps, GridFit, } from './DataGrid.js';
5
+ export type { ColumnChoice, ChooserItem, ChooserListProps, ColumnChooserProps, DataGridActivationEvent, DataGridAlign, DataGridBand, DataGridColumn, DataGridHandle, DataGridLabels, DataGridProps, GridFit, } from './DataGrid.js';
@@ -1,15 +1,15 @@
1
- export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, countDataGridRows, fitGridColumns, parseGridSort, useAnyDataGridDriving, useDataGridDriving } from '../chunk-CLJHQHPS.js';
2
- import '../chunk-EAR2F5OA.js';
1
+ export { ChooserList, ColumnChooser, DATA_GRID_ICON_TRACK, DataGrid, columnChoicesOf, countDataGridRows, fitGridColumns, nextGridSort, parseGridSort, useAnyDataGridDriving, useDataGridDriving } from '../chunk-FURJVZCT.js';
2
+ import '../chunk-PBCNINMB.js';
3
3
  import '../chunk-PPUR46MK.js';
4
- import '../chunk-DCQ2VTBB.js';
4
+ import '../chunk-ETSF7SU6.js';
5
5
  import '../chunk-PGCLHYVP.js';
6
6
  import '../chunk-PQADV6P6.js';
7
7
  import '../chunk-2G355KDJ.js';
8
8
  import '../chunk-RTPQDNW3.js';
9
- import '../chunk-7QTPJDRF.js';
9
+ import '../chunk-DGXZ635L.js';
10
10
  import '../chunk-XSPCITPN.js';
11
11
  import '../chunk-H5XTJ7GJ.js';
12
- import '../chunk-NUZHC6MM.js';
13
12
  import '../chunk-UAUP6XGK.js';
13
+ import '../chunk-NUZHC6MM.js';
14
14
  import '../chunk-UT6CW3C7.js';
15
15
  import '../chunk-ODEQTPFM.js';
@@ -120,6 +120,18 @@
120
120
  --crewlet-data-grid-cell-start: var(--spacing-3);
121
121
  }
122
122
 
123
+ /*
124
+ * AND AN ICON COLUMN, whose track (`DATA_GRID_ICON_TRACK`) is the target size
125
+ * and the cells' own step either side. At the grid's edge (a card's 16px) the
126
+ * edge inset left 20px for a 24px mark; the column keeps the cells' step on
127
+ * both sides wherever it stands, as the selection column does.
128
+ */
129
+ .crewlet-data-grid__th.crewlet-data-grid__th--icon,
130
+ .crewlet-data-grid__cell.crewlet-data-grid__cell--icon {
131
+ --crewlet-data-grid-cell-start: var(--spacing-3);
132
+ --crewlet-data-grid-cell-end: var(--spacing-3);
133
+ }
134
+
123
135
  /*
124
136
  * THE LIST TABLE'S HEAD: the micro-label register every table takes, 11/500
125
137
  * uppercase. A sortable head is a button with its chrome reset; the reset
@@ -127,6 +139,7 @@
127
139
  */
128
140
  .crewlet-data-grid__th {
129
141
  display: flex;
142
+ align-self: stretch;
130
143
  align-items: center;
131
144
  gap: var(--spacing-1);
132
145
  padding-block: var(--spacing-2);
@@ -173,22 +186,91 @@
173
186
  margin-inline: calc(-1 * var(--crewlet-data-grid-cell-start)) calc(-1 * var(--crewlet-data-grid-cell-end));
174
187
  padding-block: var(--spacing-2);
175
188
  padding-inline: var(--crewlet-data-grid-cell-start) var(--crewlet-data-grid-cell-end);
189
+ /* THE HEAD'S WHOLE HEIGHT, so a press anywhere in the cell sorts. */
190
+ align-self: stretch;
176
191
  cursor: pointer;
177
192
  }
178
193
 
194
+ /*
195
+ * ONE EDGE PER COLUMN, shared by its head and its values. `align` gives the
196
+ * head and every cell the same modifier, and both take the same inline inset
197
+ * (`--crewlet-data-grid-cell-start` and `-end`), so the word in the head and
198
+ * the values under it start (or end, or centre) on one line. A head that
199
+ * sorts is a button filling its head, and takes the same edge.
200
+ */
179
201
  .crewlet-data-grid__th--right .crewlet-data-grid__sort {
180
202
  justify-content: flex-end;
181
203
  }
182
204
 
205
+ .crewlet-data-grid__th--center .crewlet-data-grid__sort {
206
+ justify-content: center;
207
+ }
208
+
183
209
  .crewlet-data-grid__th:not(.crewlet-data-grid__th--plain):hover,
184
210
  .crewlet-data-grid__th--sorted {
185
211
  color: var(--color-text-primary);
186
212
  }
187
213
 
214
+ /*
215
+ * A SORTABLE HEAD SAYS SO UNDER THE POINTER: the row's own hover overlay over
216
+ * the whole cell, the way a row says it opens, so the target is the head and
217
+ * not the word in it.
218
+ */
219
+ .crewlet-data-grid__th:not(.crewlet-data-grid__th--plain):hover {
220
+ background: var(--color-surface-hover);
221
+ }
222
+
223
+ /*
224
+ * THE SORT ARROW. Its box is always laid out, so a head never changes width
225
+ * when the arrow appears and the fit measured at rest still holds under the
226
+ * pointer. The two-way arrow of a head that is not the sort shows only on
227
+ * hover and focus, in the head's own ink; the sorted head's arrow is always
228
+ * shown, at full ink, and names the direction.
229
+ */
230
+ .crewlet-data-grid__sort-mark {
231
+ display: inline-flex;
232
+ flex: none;
233
+ inline-size: var(--spacing-3);
234
+ color: inherit;
235
+ transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
236
+ }
237
+
238
+ .crewlet-data-grid__th:not(.crewlet-data-grid__th--sorted) .crewlet-data-grid__sort-mark {
239
+ opacity: 0;
240
+ }
241
+
242
+ /* BEFORE THE WORD IN A RIGHT-ALIGNED COLUMN, so the word stays on the column's
243
+ right edge over its figures, arrow or not. */
244
+ .crewlet-data-grid__th--right .crewlet-data-grid__sort-mark {
245
+ order: -1;
246
+ }
247
+
248
+ /*
249
+ * AND MIRRORED IN A CENTRED COLUMN: a box the arrow's size before the word, a
250
+ * gap away, so the word stands on the column's middle over its values rather
251
+ * than half an arrow off it. ONLY BEFORE A WORD: a head with none (a sortable
252
+ * mark column) draws its arrow alone, already on the middle, and the reserve
253
+ * would push it off.
254
+ */
255
+ .crewlet-data-grid__th--center .crewlet-data-grid__sort:has(> .crewlet-data-grid__truncate)::before {
256
+ content: '';
257
+ flex: none;
258
+ inline-size: var(--spacing-3);
259
+ }
260
+
261
+ .crewlet-data-grid__th:hover .crewlet-data-grid__sort-mark,
262
+ .crewlet-data-grid__sort:focus-visible .crewlet-data-grid__sort-mark {
263
+ opacity: 1;
264
+ }
265
+
188
266
  .crewlet-data-grid__th--right {
189
267
  justify-content: flex-end;
190
268
  }
191
269
 
270
+ .crewlet-data-grid__th--center {
271
+ justify-content: center;
272
+ }
273
+
192
274
  .crewlet-data-grid__sort:focus-visible,
193
275
  .crewlet-data-grid__cols-reset:focus-visible {
194
276
  outline: 2px solid var(--color-focus);
@@ -295,23 +377,30 @@ button.crewlet-data-grid__row-link {
295
377
  * A GHOST CONTROL STARTS ON THE COLUMN'S TEXT EDGE. A small ghost button that
296
378
  * opens a cell ("Open ENG-12", a choice made in place through a menu) drew its
297
379
  * word one padding and one edge (9px) inside the line its column starts on.
298
- * Its padding and edge are taken back, as a card's foot does (StatusCard.css):
299
- * the word sits on the line and only the hover's ground reaches past it, into
300
- * the step between two columns. A column of figures ends its controls on the
301
- * far edge, so it is left alone.
380
+ * ONE MECHANISM, Button's `flush`: a flush control anywhere in a cell takes
381
+ * its padding and edge back, and a ghost control written straight into a cell
382
+ * (or as a menu's trigger there) is drawn flush without being asked, by the
383
+ * same declaration. The word sits on the line and only the hover's ground
384
+ * reaches past it, into the step between two columns.
385
+ *
386
+ * THE EXEMPTIONS ARE ONE VARIABLE, `--crewlet-btn-flush-outdent: 0`, which
387
+ * the flush declaration reads:
302
388
  *
303
- * NEVER AT THE GRID'S OWN EDGE: its first column, and every line of a phone's
304
- * card (below). A grid standing alone has only its 12px edge there, and with
305
- * the 9px taken back, the 4px the control's focus ring stands off it ran past
306
- * the grid's clip: the ring lost a pixel and the hover ground stood 3px from
307
- * the frame.
389
+ * - THE GRID'S OWN EDGE, its first column and every line of a phone's card
390
+ * (below). A grid standing alone has only its 12px edge there, and with the
391
+ * 9px taken back the control's focus ring ran past the grid's clip and the
392
+ * hover ground stood 3px from the frame.
393
+ * - A RIGHT OR A CENTRED COLUMN, which lines its values up by their end or
394
+ * their middle, where a control taken back at its start would stand off
395
+ * both.
308
396
  */
309
- .crewlet-data-grid__cell:not(:first-child, .crewlet-data-grid__cell--right)
310
- > .crewlet-btn--ghost.crewlet-btn--small:first-child,
311
- .crewlet-data-grid__cell:not(:first-child, .crewlet-data-grid__cell--right)
312
- > .crewlet-menu-anchor:first-child
313
- > .crewlet-btn--ghost.crewlet-btn--small {
314
- margin-inline-start: var(--crewlet-data-grid-control-outdent, calc(-1 * (var(--spacing-2) + 1px)));
397
+ .crewlet-data-grid__cell > .crewlet-btn--ghost.crewlet-btn--small:first-child,
398
+ .crewlet-data-grid__cell > .crewlet-menu-anchor:first-child > .crewlet-btn--ghost.crewlet-btn--small {
399
+ margin-inline-start: var(--crewlet-btn-flush-outdent, calc(-1 * (var(--crewlet-btn-inset) + 1px)));
400
+ }
401
+
402
+ .crewlet-data-grid__cell:is(:first-child, .crewlet-data-grid__cell--right, .crewlet-data-grid__cell--center) {
403
+ --crewlet-btn-flush-outdent: 0px;
315
404
  }
316
405
 
317
406
  /*
@@ -325,10 +414,18 @@ button.crewlet-data-grid__row-link {
325
414
  overflow: clip;
326
415
  }
327
416
 
417
+ /* A RIGHT-ALIGNED COLUMN holds figures, times and dates: tabular digits, so
418
+ "53s ago" and "12h ago" end on one edge and their digits stand in columns. */
328
419
  .crewlet-data-grid__cell--right {
329
420
  justify-content: flex-end;
421
+ font-variant-numeric: tabular-nums;
330
422
  }
331
423
 
424
+ .crewlet-data-grid__cell--center {
425
+ justify-content: center;
426
+ }
427
+
428
+
332
429
  .crewlet-data-grid__truncate {
333
430
  min-width: 0;
334
431
  overflow: hidden;
@@ -401,14 +498,25 @@ button.crewlet-data-grid__row-link {
401
498
  color: var(--color-text-primary);
402
499
  }
403
500
 
501
+ /*
502
+ * THE FOOT IS A CAPTION, NOT A ROW. At the row's height and on the head's
503
+ * raised ground it read as one more row, so a grid's head, rows and foot
504
+ * blurred into one stack. It takes the micro step of type, the tertiary ink,
505
+ * half the row's inset and the grid's own ground under the rows' hairline:
506
+ * quieter than either neighbour, and plainly the end of the list.
507
+ */
404
508
  .crewlet-data-grid__foot {
405
509
  display: flex;
406
510
  align-items: center;
407
- gap: var(--spacing-2);
408
- padding: var(--spacing-2) var(--crewlet-data-grid-edge);
409
- border-top: 1px solid var(--color-border-hover);
410
- background: var(--color-surface-elevated);
411
- font-size: var(--font-size-xs);
511
+ flex-wrap: wrap;
512
+ gap: var(--spacing-1) var(--spacing-3);
513
+ min-height: var(--size-control-sm);
514
+ padding: var(--spacing-1) var(--crewlet-data-grid-edge);
515
+ border-top: 1px solid var(--color-border-default);
516
+ background: transparent;
517
+ color: var(--color-text-tertiary);
518
+ font-size: var(--font-size-2xs);
519
+ line-height: var(--font-line-height-tight);
412
520
  }
413
521
 
414
522
  .crewlet-data-grid__foot-spacer {
@@ -416,7 +524,7 @@ button.crewlet-data-grid__row-link {
416
524
  }
417
525
 
418
526
  .crewlet-data-grid__note {
419
- font-size: var(--font-size-xs);
527
+ font-size: inherit;
420
528
  color: var(--color-text-tertiary);
421
529
  }
422
530
 
@@ -460,9 +568,21 @@ button.crewlet-data-grid__row-link {
460
568
  cursor: pointer;
461
569
  }
462
570
 
571
+ /*
572
+ * WHERE NOTHING HOVERS (a touch screen), a sortable head shows its arrow at
573
+ * rest: there is no pointer to bring it out, and a head that only says it
574
+ * sorts under a pointer says nothing there.
575
+ */
576
+ @media (hover: none) {
577
+ .crewlet-data-grid__th:not(.crewlet-data-grid__th--plain) .crewlet-data-grid__sort-mark {
578
+ opacity: 1;
579
+ }
580
+ }
581
+
463
582
  @media (prefers-reduced-motion: reduce) {
464
583
  .crewlet-data-grid__th,
465
- .crewlet-data-grid__row {
584
+ .crewlet-data-grid__row,
585
+ .crewlet-data-grid__sort-mark {
466
586
  transition: none;
467
587
  }
468
588
  }
@@ -486,7 +606,7 @@ button.crewlet-data-grid__row-link {
486
606
  /* No ghost control is pulled out here (see above): every line of a card
487
607
  starts at the grid's edge, and a compact row's marks run on one line,
488
608
  where the hover ground swallowed the gap before it. */
489
- --crewlet-data-grid-control-outdent: 0px;
609
+ --crewlet-btn-flush-outdent: 0px;
490
610
 
491
611
  display: block;
492
612
  }
@@ -532,7 +652,8 @@ button.crewlet-data-grid__row-link {
532
652
 
533
653
  /* `shrink` and `right` are column shapes, and there are no columns here. */
534
654
  :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--shrink,
535
- :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--right {
655
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--right,
656
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--center {
536
657
  white-space: normal;
537
658
  justify-content: flex-start;
538
659
  }
@@ -1,20 +1,20 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-ZFFQMRPJ.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-BWFJB5JD.js';
2
+ import '../chunk-C667GCU7.js';
2
3
  import '../chunk-STJ7QBC3.js';
3
4
  import '../chunk-DTIW4CHZ.js';
4
- import '../chunk-I24FI46B.js';
5
5
  import '../chunk-RE3FBGQQ.js';
6
6
  import '../chunk-AV2DXAEL.js';
7
- import '../chunk-EAR2F5OA.js';
8
- import '../chunk-DCQ2VTBB.js';
7
+ import '../chunk-PBCNINMB.js';
8
+ import '../chunk-ETSF7SU6.js';
9
9
  import '../chunk-PGCLHYVP.js';
10
10
  import '../chunk-PQADV6P6.js';
11
11
  import '../chunk-2G355KDJ.js';
12
- import '../chunk-2566PSQ3.js';
13
- import '../chunk-7QTPJDRF.js';
12
+ import '../chunk-OQG4P5KU.js';
13
+ import '../chunk-DGXZ635L.js';
14
14
  import '../chunk-OMV5W53A.js';
15
15
  import '../chunk-XSPCITPN.js';
16
16
  import '../chunk-H5XTJ7GJ.js';
17
- import '../chunk-NUZHC6MM.js';
18
17
  import '../chunk-UAUP6XGK.js';
18
+ import '../chunk-NUZHC6MM.js';
19
19
  import '../chunk-UT6CW3C7.js';
20
20
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,11 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-4VPDY7AD.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-J5WWMC35.js';
2
2
  import '../chunk-FPDIHEM4.js';
3
- import '../chunk-ZFFQMRPJ.js';
4
- import '../chunk-7DD2GR7I.js';
3
+ import '../chunk-K4LZXSKZ.js';
4
+ import '../chunk-BWFJB5JD.js';
5
+ import '../chunk-HPI5J6AR.js';
6
+ import '../chunk-C667GCU7.js';
5
7
  import '../chunk-STJ7QBC3.js';
6
8
  import '../chunk-DTIW4CHZ.js';
7
- import '../chunk-I24FI46B.js';
8
9
  import '../chunk-7KHM2FZH.js';
9
10
  import '../chunk-EE3DJMSQ.js';
10
11
  import '../chunk-NR4CPM4T.js';
@@ -12,19 +13,19 @@ import '../chunk-KHJIEPZV.js';
12
13
  import '../chunk-EJNJMHQG.js';
13
14
  import '../chunk-RE3FBGQQ.js';
14
15
  import '../chunk-AV2DXAEL.js';
15
- import '../chunk-EAR2F5OA.js';
16
+ import '../chunk-PBCNINMB.js';
16
17
  import '../chunk-ANTAQAR4.js';
17
- import '../chunk-DCQ2VTBB.js';
18
+ import '../chunk-ETSF7SU6.js';
18
19
  import '../chunk-PGCLHYVP.js';
19
20
  import '../chunk-MLDTLZAO.js';
20
21
  import '../chunk-PQADV6P6.js';
21
22
  import '../chunk-2G355KDJ.js';
22
- import '../chunk-2566PSQ3.js';
23
- import '../chunk-7QTPJDRF.js';
23
+ import '../chunk-OQG4P5KU.js';
24
+ import '../chunk-DGXZ635L.js';
24
25
  import '../chunk-OMV5W53A.js';
25
26
  import '../chunk-XSPCITPN.js';
26
27
  import '../chunk-H5XTJ7GJ.js';
27
- import '../chunk-NUZHC6MM.js';
28
28
  import '../chunk-UAUP6XGK.js';
29
+ import '../chunk-NUZHC6MM.js';
29
30
  import '../chunk-UT6CW3C7.js';
30
31
  import '../chunk-ODEQTPFM.js';