@crewlethq/ui 0.27.1 → 0.29.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 (114) hide show
  1. package/README.md +42 -2
  2. package/dist/AccessDeniedCard/index.js +3 -3
  3. package/dist/Accordion/index.js +3 -3
  4. package/dist/AppShell/index.js +3 -3
  5. package/dist/{AppShell-APHZKJYH.css → AppShell-GCM4TDVY.css} +4 -1
  6. package/dist/ArrangeGrid/ArrangeGrid.d.ts +22 -0
  7. package/dist/ArrangeGrid/index.d.ts +3 -0
  8. package/dist/ArrangeGrid/index.js +2 -0
  9. package/dist/ArrangeGrid-XM4ZFTED.css +17 -0
  10. package/dist/ArrangeGroup/index.js +1 -1
  11. package/dist/{ArrangeGroup-SHFHA7BE.css → ArrangeGroup-GY5YMP6E.css} +3 -4
  12. package/dist/ArtifactBar/ArtifactBar.d.ts +143 -0
  13. package/dist/ArtifactBar/index.d.ts +3 -0
  14. package/dist/ArtifactBar/index.js +25 -0
  15. package/dist/ArtifactBar-IBWB5POL.css +358 -0
  16. package/dist/ArtifactCard/index.js +3 -3
  17. package/dist/ArtifactCover/index.js +4 -4
  18. package/dist/ArtifactIcon/index.js +4 -4
  19. package/dist/ArtifactPanel/ArtifactPanel.d.ts +81 -0
  20. package/dist/ArtifactPanel/index.d.ts +3 -0
  21. package/dist/ArtifactPanel/index.js +5 -0
  22. package/dist/ArtifactPanel-YFXT5O77.css +132 -0
  23. package/dist/AuthLayout/index.js +3 -3
  24. package/dist/AvatarPicker/index.js +4 -4
  25. package/dist/Canvas/index.js +2 -2
  26. package/dist/CanvasBoard/index.js +4 -4
  27. package/dist/Card/index.js +2 -2
  28. package/dist/ChangeMark/index.js +1 -1
  29. package/dist/Charts/index.js +1 -1
  30. package/dist/{Charts-JYW4X5ZL.css → Charts-RY4JN5FC.css} +12 -0
  31. package/dist/CommandPalette/index.js +5 -5
  32. package/dist/CommentThread/index.js +4 -4
  33. package/dist/Composer/index.js +2 -2
  34. package/dist/DataTable/DataTable.d.ts +9 -0
  35. package/dist/DataTable/index.js +4 -4
  36. package/dist/DataView/index.js +10 -10
  37. package/dist/DatasetSource/index.js +1 -1
  38. package/dist/{DatasetSource-47LBDMPR.css → DatasetSource-XFPZBRXL.css} +12 -4
  39. package/dist/DateTimePicker/index.js +3 -3
  40. package/dist/Disclosure/index.js +3 -3
  41. package/dist/FollowBanner/index.js +2 -2
  42. package/dist/HuePicker/index.js +2 -2
  43. package/dist/LinkInterstitial/index.js +3 -3
  44. package/dist/ListInput/index.js +2 -2
  45. package/dist/MarkdownEditor/index.js +1 -1
  46. package/dist/Menu/index.js +2 -2
  47. package/dist/Modal/index.js +2 -2
  48. package/dist/Note/Note.d.ts +10 -0
  49. package/dist/Note/index.js +1 -1
  50. package/dist/{Note-RT4L6VUT.css → Note-ONSKKTOA.css} +10 -0
  51. package/dist/PeopleRail/PeopleRail.d.ts +8 -1
  52. package/dist/PeopleRail/index.js +2 -2
  53. package/dist/{PeopleRail-R64WVOSH.css → PeopleRail-SZGHZXVT.css} +8 -0
  54. package/dist/PresenceStack/index.js +1 -1
  55. package/dist/PresenterView/index.js +1 -1
  56. package/dist/ShareDialog/index.js +4 -4
  57. package/dist/SheetGrid/index.js +4 -4
  58. package/dist/SlideCompare/index.js +1 -1
  59. package/dist/Switcher/index.js +4 -4
  60. package/dist/ThemeSwitcher/index.js +1 -1
  61. package/dist/TimeWindowPicker/index.js +3 -3
  62. package/dist/TreeCanvas/index.js +3 -3
  63. package/dist/VersionCompare/index.js +2 -2
  64. package/dist/WidgetFrame/WidgetFrame.d.ts +14 -1
  65. package/dist/WidgetFrame/index.js +1 -1
  66. package/dist/WidgetFrame-LRZIL62O.css +206 -0
  67. package/dist/{chunk-V2Z24W2Z.js → chunk-4JUKWWUD.js} +1 -1
  68. package/dist/{chunk-MLT2HBPN.js → chunk-77DRMDXR.js} +7 -2
  69. package/dist/{chunk-BQYQWJPK.js → chunk-AAOH2P6Y.js} +8 -2
  70. package/dist/{chunk-35XVR5JQ.js → chunk-B4EBHPK3.js} +2 -2
  71. package/dist/chunk-CJKMURZO.js +31 -0
  72. package/dist/{chunk-INTEH4F3.js → chunk-CT4EZF62.js} +2 -2
  73. package/dist/{chunk-SVW3VG72.js → chunk-EBJREOKS.js} +5 -4
  74. package/dist/{chunk-BFQK7CYJ.js → chunk-EBNI36UQ.js} +2 -2
  75. package/dist/{chunk-M2VJGNCD.js → chunk-FKULOLKG.js} +2 -2
  76. package/dist/{chunk-6J35F334.js → chunk-GOSQXEZU.js} +1 -1
  77. package/dist/{chunk-5OY4LJFH.js → chunk-HVNTQ36V.js} +2 -2
  78. package/dist/chunk-I3BSQUKN.js +121 -0
  79. package/dist/{chunk-3D7PSL2L.js → chunk-JODJS7MR.js} +2 -2
  80. package/dist/{chunk-URUGEAFB.js → chunk-JQLTG4KH.js} +1 -1
  81. package/dist/{chunk-S4RCG44T.js → chunk-MICH6QSJ.js} +1 -1
  82. package/dist/chunk-QBA5B2Z5.js +17 -0
  83. package/dist/chunk-QMBP23BL.js +347 -0
  84. package/dist/{chunk-G2AVKPSL.js → chunk-RIAZM6L3.js} +1 -1
  85. package/dist/{chunk-OJRDEVHV.js → chunk-RODMM35O.js} +5 -5
  86. package/dist/{chunk-RSC7UJCR.js → chunk-S6VG5ZFZ.js} +1 -1
  87. package/dist/{chunk-PRNX5AFE.js → chunk-TGYDROIB.js} +1 -1
  88. package/dist/{chunk-G3EEUNZQ.js → chunk-UB7TJEKZ.js} +1 -1
  89. package/dist/chunk-UQHKFF2N.js +106 -0
  90. package/dist/{chunk-WHZFDS62.js → chunk-VDPJGP4Q.js} +1 -1
  91. package/dist/{chunk-GTLJXJ3U.js → chunk-VVRL27HM.js} +2 -2
  92. package/dist/{chunk-MQEEQVG6.js → chunk-XALUCIG5.js} +1 -1
  93. package/dist/{chunk-ZZDY4XL7.js → chunk-ZB5O3ELS.js} +12 -12
  94. package/dist/{chunk-L2OQRPXJ.js → chunk-ZR5VN5IV.js} +1 -1
  95. package/dist/generated/index.d.ts +3 -0
  96. package/dist/generated/index.js +91 -88
  97. package/dist/index.js +91 -88
  98. package/dist/styles.css +658 -23
  99. package/package.json +3 -3
  100. package/dist/WidgetFrame-4EFJOJMW.css +0 -127
  101. package/dist/chunk-63WJLRB2.js +0 -24
  102. package/dist/chunk-FVLCTCMV.js +0 -96
  103. package/dist/{chunk-UFKUWVMV.js → chunk-2HIOJ4YZ.js} +1 -1
  104. package/dist/{chunk-RIEDQSA4.js → chunk-7DZDSSJS.js} +1 -1
  105. package/dist/{chunk-YZCJ63JF.js → chunk-ACA27MZH.js} +1 -1
  106. package/dist/{chunk-ENJUPIND.js → chunk-FZVJDJFN.js} +1 -1
  107. package/dist/{chunk-F4DPAJCN.js → chunk-I3KKZ2O3.js} +1 -1
  108. package/dist/{chunk-SLRKS5PF.js → chunk-IFNQKWUO.js} +0 -0
  109. package/dist/{chunk-FW7HN6AP.js → chunk-LDJ3J4TQ.js} +1 -1
  110. package/dist/{chunk-SGIQCI6Y.js → chunk-LIXSV5YI.js} +1 -1
  111. package/dist/{chunk-KZOGQXSP.js → chunk-OJ45PPCV.js} +1 -1
  112. package/dist/{chunk-LREN6TUG.js → chunk-UZ6MA2V6.js} +2 -2
  113. package/dist/{chunk-WG5WUFBX.js → chunk-Y5NQ2LMS.js} +1 -1
  114. package/dist/{chunk-D5JZN3ML.js → chunk-Z6VW6CXX.js} +1 -1
package/dist/styles.css CHANGED
@@ -548,7 +548,7 @@
548
548
  }
549
549
 
550
550
 
551
- /* AppShell-APHZKJYH.css */
551
+ /* AppShell-GCM4TDVY.css */
552
552
  /*
553
553
  * The application frame: a rail on the FRAME, and the screen on a SHEET that
554
554
  * floats beside it.
@@ -1040,9 +1040,12 @@
1040
1040
  }
1041
1041
 
1042
1042
  /* A screen that draws to the bottom of the window: the scroller stops
1043
- scrolling and the content column takes the height that is left. */
1043
+ scrolling and the content column takes the height that is left. It
1044
+ reserves no scrollbar gutter either, since nothing in it scrolls: the
1045
+ reserved strip was a dead band down the screen's end edge. */
1044
1046
  .crewlet-app-shell--fill .crewlet-app-shell__main {
1045
1047
  overflow: hidden;
1048
+ scrollbar-gutter: auto;
1046
1049
  }
1047
1050
 
1048
1051
  .crewlet-app-shell--fill .crewlet-app-shell__content {
@@ -1704,7 +1707,27 @@ button.crewlet-account-row__who:focus-visible {
1704
1707
  }
1705
1708
 
1706
1709
 
1707
- /* ArrangeGroup-SHFHA7BE.css */
1710
+ /* ArrangeGrid-XM4ZFTED.css */
1711
+ /*
1712
+ * ArrangeGrid: the page grid a board's blocks stand on. Equal columns, the
1713
+ * board's gap between them, and each block stretched to its row's height, so
1714
+ * the cards in one row share their bottom edge.
1715
+ */
1716
+ .crewlet-arrange-grid {
1717
+ display: grid;
1718
+ grid-template-columns: repeat(var(--crewlet-arrange-columns, 12), minmax(0, 1fr));
1719
+ gap: var(--crewlet-arrange-board-gap, var(--spacing-4));
1720
+ align-items: stretch;
1721
+ }
1722
+
1723
+ /* More room between rows while the page is arranged: each block's toolbar
1724
+ sits on its top edge, half in the gap above it. */
1725
+ .crewlet-arrange-board.is-editing .crewlet-arrange-grid {
1726
+ row-gap: var(--spacing-5);
1727
+ }
1728
+
1729
+
1730
+ /* ArrangeGroup-GY5YMP6E.css */
1708
1731
  /*
1709
1732
  * ArrangeGroup: a titled band of blocks. The hue is the header's; the body
1710
1733
  * stays the page's ground, so the cards inside keep their own contrast.
@@ -1839,11 +1862,10 @@ button.crewlet-account-row__who:focus-visible {
1839
1862
  margin-inline-start: auto;
1840
1863
  }
1841
1864
 
1865
+ /* The body is the page's grid (ArrangeGrid's `.crewlet-arrange-grid`), inside
1866
+ the group: the same columns and gap, so a block is one width on the page
1867
+ and in a group. */
1842
1868
  .crewlet-arrange-group__body {
1843
- display: grid;
1844
- grid-template-columns: repeat(var(--crewlet-arrange-columns, 12), minmax(0, 1fr));
1845
- gap: var(--spacing-4);
1846
- align-items: stretch;
1847
1869
  padding: var(--spacing-4);
1848
1870
  min-height: 5rem;
1849
1871
  }
@@ -1974,6 +1996,367 @@ button.crewlet-account-row__who:focus-visible {
1974
1996
  }
1975
1997
 
1976
1998
 
1999
+ /* ArtifactBar-IBWB5POL.css */
2000
+ /*
2001
+ * One row, one hairline under it, the height of a large row. The lead (the
2002
+ * way back, the glyph, the title, the version) takes what the end leaves it
2003
+ * and the title is what gives way, ellipsised; the views sit between the two,
2004
+ * centred while both sides have room, because the lead and the end each grow
2005
+ * from a zero basis and the end never shrinks below its controls.
2006
+ *
2007
+ * Three widths of its OWN fold it (a container query, since a sidebar or a
2008
+ * panel beside it decides its room, not the window): under a laptop sheet's
2009
+ * width the presence stack goes (the People control still counts who is
2010
+ * here), then the labelled tools' words, and under a phone's two panes the
2011
+ * views, the unlabelled tools and the kind's glyph fold away, the first two
2012
+ * into More.
2013
+ */
2014
+
2015
+ .crewlet-artifact-bar {
2016
+ container: crewlet-artifact-bar / inline-size;
2017
+ display: block;
2018
+ min-width: 0;
2019
+ background: var(--color-surface-background);
2020
+ border-bottom: 1px solid var(--color-border-default);
2021
+ }
2022
+
2023
+ .crewlet-artifact-bar__row {
2024
+ display: flex;
2025
+ align-items: center;
2026
+ gap: var(--spacing-3);
2027
+ height: var(--size-row-lg);
2028
+ padding: 0 var(--spacing-3);
2029
+ min-width: 0;
2030
+ }
2031
+
2032
+ .crewlet-artifact-bar__lead {
2033
+ display: flex;
2034
+ flex: 1 1 0;
2035
+ align-items: center;
2036
+ gap: var(--spacing-1);
2037
+ min-width: 0;
2038
+ }
2039
+
2040
+ .crewlet-artifact-bar__end {
2041
+ display: flex;
2042
+ flex: none;
2043
+ align-items: center;
2044
+ justify-content: flex-end;
2045
+ gap: var(--spacing-2);
2046
+ margin-inline-start: auto;
2047
+ }
2048
+
2049
+ /* WITH VIEWS TO CENTRE, the end grows from zero as the lead does, so the two
2050
+ sides stay equal while there is room and the views sit in the middle; the
2051
+ end never shrinks below its controls, so it is the title that gives way. */
2052
+ .crewlet-artifact-bar__row--centred .crewlet-artifact-bar__end {
2053
+ flex: 1 0 0;
2054
+ min-width: max-content;
2055
+ }
2056
+
2057
+ .crewlet-artifact-bar__modes {
2058
+ display: flex;
2059
+ flex: none;
2060
+ align-items: center;
2061
+ }
2062
+
2063
+ .crewlet-artifact-bar__glyph {
2064
+ display: inline-flex;
2065
+ flex: none;
2066
+ align-items: center;
2067
+ justify-content: center;
2068
+ width: var(--size-control-sm);
2069
+ height: var(--size-control-sm);
2070
+ color: var(--color-text-secondary);
2071
+ }
2072
+
2073
+ /* THE TITLE. Read only, it is text; renamable, its words are a button drawn
2074
+ as text that answers the pointer with the hover ground, as a field would. */
2075
+ .crewlet-artifact-bar__title {
2076
+ position: relative;
2077
+ display: flex;
2078
+ min-width: 0;
2079
+ margin: 0;
2080
+ overflow: hidden;
2081
+ color: var(--color-text-primary);
2082
+ font-family: var(--font-family-sans);
2083
+ font-size: var(--font-size-sm);
2084
+ font-weight: var(--font-weight-semibold);
2085
+ letter-spacing: var(--font-letter-spacing-tight);
2086
+ line-height: var(--font-line-height-snug);
2087
+ text-overflow: ellipsis;
2088
+ white-space: nowrap;
2089
+ }
2090
+
2091
+ .crewlet-artifact-bar__title--editing {
2092
+ overflow: visible;
2093
+ }
2094
+
2095
+ .crewlet-artifact-bar__rename {
2096
+ min-width: 0;
2097
+ max-width: 100%;
2098
+ margin: 0;
2099
+ padding: var(--spacing-1) var(--spacing-2);
2100
+ overflow: hidden;
2101
+ border: 0;
2102
+ border-radius: var(--radius-sm);
2103
+ background: transparent;
2104
+ color: inherit;
2105
+ font: inherit;
2106
+ letter-spacing: inherit;
2107
+ text-align: start;
2108
+ text-overflow: ellipsis;
2109
+ white-space: nowrap;
2110
+ cursor: text;
2111
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
2112
+ }
2113
+
2114
+ .crewlet-artifact-bar__rename:hover {
2115
+ background: var(--color-surface-hover);
2116
+ }
2117
+
2118
+ .crewlet-artifact-bar__rename:focus-visible {
2119
+ outline: 2px solid var(--color-focus);
2120
+ outline-offset: var(--size-focus-ring-inset-offset);
2121
+ }
2122
+
2123
+ /* The field is as wide as what is typed in it: the grid cell is sized by a
2124
+ hidden copy of the text, and the field fills that cell. */
2125
+ .crewlet-artifact-bar__sizer {
2126
+ display: inline-grid;
2127
+ min-width: 0;
2128
+ max-width: 100%;
2129
+ }
2130
+
2131
+ .crewlet-artifact-bar__sizer::after {
2132
+ content: attr(data-value) ' ';
2133
+ visibility: hidden;
2134
+ grid-area: 1 / 1;
2135
+ padding: var(--spacing-1) var(--spacing-2);
2136
+ overflow: hidden;
2137
+ white-space: pre;
2138
+ font: inherit;
2139
+ }
2140
+
2141
+ .crewlet-artifact-bar__field {
2142
+ grid-area: 1 / 1;
2143
+ min-width: 0;
2144
+ width: 100%;
2145
+ margin: 0;
2146
+ padding: calc(var(--spacing-1) - 1px) calc(var(--spacing-2) - 1px);
2147
+ border: 1px solid var(--color-border-control);
2148
+ border-radius: var(--radius-sm);
2149
+ background: var(--color-surface-elevated);
2150
+ color: var(--color-text-primary);
2151
+ font: inherit;
2152
+ letter-spacing: inherit;
2153
+ }
2154
+
2155
+ .crewlet-artifact-bar__field:focus {
2156
+ outline: 2px solid var(--color-focus);
2157
+ outline-offset: var(--size-focus-ring-inset-offset);
2158
+ }
2159
+
2160
+ .crewlet-artifact-bar__field[aria-invalid='true'] {
2161
+ border-color: var(--color-feedback-danger);
2162
+ }
2163
+
2164
+ .crewlet-artifact-bar__error {
2165
+ position: absolute;
2166
+ top: calc(100% + var(--spacing-1));
2167
+ left: 0;
2168
+ z-index: var(--z-index-dropdown);
2169
+ padding: var(--spacing-1) var(--spacing-2);
2170
+ border: 1px solid var(--color-border-default);
2171
+ border-radius: var(--radius-sm);
2172
+ background: var(--color-surface-elevated);
2173
+ box-shadow: var(--shadow-md);
2174
+ color: var(--color-feedback-danger-ink);
2175
+ font-size: var(--font-size-xs);
2176
+ font-weight: var(--font-weight-regular);
2177
+ white-space: nowrap;
2178
+ }
2179
+
2180
+ .crewlet-artifact-bar__placeholder {
2181
+ display: block;
2182
+ flex: 0 1 12rem;
2183
+ height: var(--font-size-sm);
2184
+ border-radius: var(--radius-sm);
2185
+ background: var(--color-surface-subtle);
2186
+ }
2187
+
2188
+ .crewlet-artifact-bar__version {
2189
+ display: inline-flex;
2190
+ flex: none;
2191
+ margin-inline-start: var(--spacing-1);
2192
+ }
2193
+
2194
+ .crewlet-artifact-bar__presence {
2195
+ display: inline-flex;
2196
+ align-items: center;
2197
+ margin-inline-end: var(--spacing-1);
2198
+ }
2199
+
2200
+ .crewlet-artifact-bar__tools {
2201
+ display: inline-flex;
2202
+ align-items: center;
2203
+ gap: var(--spacing-1);
2204
+ }
2205
+
2206
+ .crewlet-artifact-bar__tool {
2207
+ position: relative;
2208
+ display: inline-flex;
2209
+ }
2210
+
2211
+ /* A figure on the glyph's corner, inside the button's own box so it never
2212
+ reaches past the bar's edge. */
2213
+ .crewlet-artifact-bar__badge {
2214
+ position: absolute;
2215
+ top: calc(-1 * var(--spacing-1));
2216
+ right: calc(-1 * var(--spacing-1));
2217
+ min-width: var(--spacing-4);
2218
+ height: var(--spacing-4);
2219
+ padding: 0 var(--spacing-1);
2220
+ border-radius: var(--radius-pill);
2221
+ background: var(--color-brand-accent);
2222
+ color: var(--color-text-on-accent);
2223
+ font-size: var(--font-size-2xs);
2224
+ font-weight: var(--font-weight-semibold);
2225
+ font-variant-numeric: tabular-nums;
2226
+ line-height: var(--spacing-4);
2227
+ text-align: center;
2228
+ pointer-events: none;
2229
+ }
2230
+
2231
+ /* WHILE THE PRESENCE STACK IS DRAWN it says who is here, so a tool's figure
2232
+ saying the same is not drawn beside it; it comes back where the stack
2233
+ folds away. */
2234
+ .crewlet-artifact-bar--present .crewlet-artifact-bar__badge {
2235
+ display: none;
2236
+ }
2237
+
2238
+ /* A rule between two groups of tools: the kind's, then every artifact's. */
2239
+ .crewlet-artifact-bar__rule {
2240
+ width: 1px;
2241
+ height: var(--spacing-4);
2242
+ margin: 0 var(--spacing-1);
2243
+ background: var(--color-border-default);
2244
+ }
2245
+
2246
+ .crewlet-artifact-bar__tip {
2247
+ display: inline-flex;
2248
+ align-items: center;
2249
+ gap: var(--spacing-2);
2250
+ }
2251
+
2252
+ /* Both arrangements are drawn; the bar's width says which one shows. */
2253
+ .crewlet-artifact-bar__narrow,
2254
+ .crewlet-artifact-bar__tight {
2255
+ display: none;
2256
+ }
2257
+
2258
+ .crewlet-artifact-bar__wide,
2259
+ .crewlet-artifact-bar__roomy {
2260
+ display: inline-flex;
2261
+ }
2262
+
2263
+ @container crewlet-artifact-bar (width < 860px) {
2264
+ .crewlet-artifact-bar__presence {
2265
+ display: none;
2266
+ }
2267
+
2268
+ .crewlet-artifact-bar--present .crewlet-artifact-bar__badge {
2269
+ display: block;
2270
+ }
2271
+ }
2272
+
2273
+ @container crewlet-artifact-bar (width < 720px) {
2274
+ .crewlet-artifact-bar__roomy {
2275
+ display: none;
2276
+ }
2277
+
2278
+ .crewlet-artifact-bar__tight {
2279
+ display: inline-flex;
2280
+ }
2281
+ }
2282
+
2283
+ @container crewlet-artifact-bar (width < 640px) {
2284
+ .crewlet-artifact-bar__row {
2285
+ gap: var(--spacing-1);
2286
+ padding: 0 var(--spacing-2);
2287
+ }
2288
+
2289
+ /* The title has the row's room before the kind's glyph does: the glyph
2290
+ says again what the title already names. */
2291
+ .crewlet-artifact-bar__wide,
2292
+ .crewlet-artifact-bar__glyph {
2293
+ display: none;
2294
+ }
2295
+
2296
+ .crewlet-artifact-bar__narrow {
2297
+ display: inline-flex;
2298
+ }
2299
+
2300
+ /* The views have folded, so there is nothing to centre: the title takes
2301
+ the room. */
2302
+ .crewlet-artifact-bar__row--centred .crewlet-artifact-bar__end {
2303
+ flex: none;
2304
+ min-width: 0;
2305
+ }
2306
+ }
2307
+
2308
+ /*
2309
+ * THE VERSION CHIP: quiet at rest, the hover ground under the pointer, and
2310
+ * the accent's soft ground while an older version than the newest is on
2311
+ * show, so history never passes for the present.
2312
+ */
2313
+ .crewlet-version-chip {
2314
+ display: inline-flex;
2315
+ align-items: center;
2316
+ gap: var(--spacing-1);
2317
+ height: var(--size-target-min);
2318
+ padding: 0 var(--spacing-2);
2319
+ border: 0;
2320
+ border-radius: var(--radius-pill);
2321
+ background: var(--color-surface-subtle);
2322
+ color: var(--color-text-secondary);
2323
+ font-family: var(--font-family-sans);
2324
+ font-size: var(--font-size-xs);
2325
+ font-weight: var(--font-weight-medium);
2326
+ font-variant-numeric: tabular-nums;
2327
+ white-space: nowrap;
2328
+ cursor: pointer;
2329
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
2330
+ }
2331
+
2332
+ .crewlet-version-chip:hover {
2333
+ background: var(--color-surface-hover);
2334
+ color: var(--color-text-primary);
2335
+ }
2336
+
2337
+ .crewlet-version-chip:focus-visible {
2338
+ outline: 2px solid var(--color-focus);
2339
+ outline-offset: var(--size-focus-ring-inset-offset);
2340
+ }
2341
+
2342
+ .crewlet-version-chip--older {
2343
+ background: var(--color-brand-accent-soft);
2344
+ color: var(--color-brand-accent-ink);
2345
+ }
2346
+
2347
+ .crewlet-version-chip--older:hover {
2348
+ background: var(--color-brand-accent-soft-strong);
2349
+ color: var(--color-brand-accent-ink);
2350
+ }
2351
+
2352
+ @media (prefers-reduced-motion: reduce) {
2353
+ .crewlet-artifact-bar__rename,
2354
+ .crewlet-version-chip {
2355
+ transition: none;
2356
+ }
2357
+ }
2358
+
2359
+
1977
2360
  /* ArtifactCard-EXVAEBV6.css */
1978
2361
  /*
1979
2362
  * A card in a gallery: the preview on top at a fixed ratio, so a grid of them
@@ -2156,6 +2539,141 @@ button.crewlet-account-row__who:focus-visible {
2156
2539
  }
2157
2540
 
2158
2541
 
2542
+ /* ArtifactPanel-YFXT5O77.css */
2543
+ /*
2544
+ * The workspace is a row: the artifact's body, then at most one panel. The
2545
+ * body scrolls itself, so a panel beside it stays in view however far the
2546
+ * artifact is read; the panel's own body scrolls under its head.
2547
+ *
2548
+ * ONE HAIRLINE between the two, the panel's start edge, and none at the
2549
+ * workspace's own edges: whatever frames the workspace already draws those.
2550
+ */
2551
+
2552
+ .crewlet-artifact-workspace {
2553
+ container: crewlet-artifact-workspace / inline-size;
2554
+ position: relative;
2555
+ display: flex;
2556
+ min-width: 0;
2557
+ min-height: 0;
2558
+ }
2559
+
2560
+ .crewlet-artifact-workspace__body {
2561
+ flex: 1 1 auto;
2562
+ min-width: 0;
2563
+ min-height: 0;
2564
+ overflow: auto;
2565
+ }
2566
+
2567
+ /* EXPANDED, the panel is the workspace; the body stays mounted behind it. */
2568
+ .crewlet-artifact-workspace[data-panel='expanded'] > .crewlet-artifact-workspace__body {
2569
+ display: none;
2570
+ }
2571
+
2572
+ .crewlet-artifact-panel {
2573
+ --crewlet-artifact-panel-width: 25rem;
2574
+ display: flex;
2575
+ flex: none;
2576
+ flex-direction: column;
2577
+ width: var(--crewlet-artifact-panel-width);
2578
+ min-height: 0;
2579
+ border-left: 1px solid var(--color-border-default);
2580
+ background: var(--color-surface-background);
2581
+ }
2582
+
2583
+ .crewlet-artifact-panel--sm {
2584
+ --crewlet-artifact-panel-width: 20rem;
2585
+ }
2586
+
2587
+ .crewlet-artifact-panel--lg {
2588
+ --crewlet-artifact-panel-width: 36rem;
2589
+ }
2590
+
2591
+ .crewlet-artifact-panel[data-expanded] {
2592
+ flex: 1 1 auto;
2593
+ width: auto;
2594
+ border-left: 0;
2595
+ }
2596
+
2597
+ .crewlet-artifact-panel__head {
2598
+ display: flex;
2599
+ flex: none;
2600
+ align-items: center;
2601
+ gap: var(--spacing-2);
2602
+ height: var(--size-row-lg);
2603
+ padding: 0 var(--spacing-2) 0 var(--spacing-4);
2604
+ border-bottom: 1px solid var(--color-border-default);
2605
+ }
2606
+
2607
+ .crewlet-artifact-panel__icon {
2608
+ display: inline-flex;
2609
+ flex: none;
2610
+ color: var(--color-text-tertiary);
2611
+ }
2612
+
2613
+ .crewlet-artifact-panel__title {
2614
+ flex: 1 1 auto;
2615
+ min-width: 0;
2616
+ margin: 0;
2617
+ overflow: hidden;
2618
+ color: var(--color-text-primary);
2619
+ font-size: var(--font-size-sm);
2620
+ font-weight: var(--font-weight-semibold);
2621
+ line-height: var(--font-line-height-snug);
2622
+ text-overflow: ellipsis;
2623
+ white-space: nowrap;
2624
+ }
2625
+
2626
+ .crewlet-artifact-panel__title:focus-visible {
2627
+ outline: 2px solid var(--color-focus);
2628
+ outline-offset: var(--size-focus-ring-inset-offset);
2629
+ border-radius: var(--radius-sm);
2630
+ }
2631
+
2632
+ .crewlet-artifact-panel__actions {
2633
+ display: inline-flex;
2634
+ flex: none;
2635
+ align-items: center;
2636
+ gap: var(--spacing-1);
2637
+ }
2638
+
2639
+ .crewlet-artifact-panel__body {
2640
+ flex: 1 1 auto;
2641
+ min-height: 0;
2642
+ padding: var(--spacing-4);
2643
+ overflow: auto;
2644
+ overscroll-behavior: contain;
2645
+ }
2646
+
2647
+ /* NOT ROOM FOR TWO COLUMNS: the panel slides over the artifact's end edge,
2648
+ raised off it, rather than squeezing the artifact under a useful width. */
2649
+ @container crewlet-artifact-workspace (width < 960px) {
2650
+ .crewlet-artifact-panel {
2651
+ position: absolute;
2652
+ inset-block: 0;
2653
+ inset-inline-end: 0;
2654
+ z-index: var(--z-index-overlay);
2655
+ width: min(var(--crewlet-artifact-panel-width), 100%);
2656
+ box-shadow: var(--shadow-lg);
2657
+ }
2658
+
2659
+ .crewlet-artifact-panel[data-expanded] {
2660
+ inset-inline-start: 0;
2661
+ width: auto;
2662
+ box-shadow: none;
2663
+ }
2664
+ }
2665
+
2666
+ /* A PHONE: the panel is the screen until it is closed. */
2667
+ @container crewlet-artifact-workspace (width < 640px) {
2668
+ .crewlet-artifact-panel {
2669
+ inset-inline-start: 0;
2670
+ width: auto;
2671
+ border-left: 0;
2672
+ box-shadow: none;
2673
+ }
2674
+ }
2675
+
2676
+
2159
2677
  /* AuthLayout-ODHBUPHQ.css */
2160
2678
  /*
2161
2679
  * The sign-in page: one narrow column near the top of the window.
@@ -4761,7 +5279,7 @@ a.crewlet-breadcrumb__crumb:focus-visible {
4761
5279
  }
4762
5280
 
4763
5281
 
4764
- /* Charts-JYW4X5ZL.css */
5282
+ /* Charts-RY4JN5FC.css */
4765
5283
  /* The chart kit: a legend, a ranked bar list, a stacked bar, stacked
4766
5284
  columns, an activity strip, a time series and the reading layer they share. Hand-drawn rather than a charting library, for one reason that
4767
5285
  decides it: every mark here reads tokens, in two themes, at the contrast
@@ -5197,11 +5715,23 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5197
5715
  height: 0;
5198
5716
  font-family: var(--font-family-mono);
5199
5717
  font-size: var(--font-size-2xs);
5718
+ line-height: var(--font-line-height-tight);
5200
5719
  color: var(--color-text-tertiary);
5201
5720
  font-variant-numeric: tabular-nums;
5202
5721
  white-space: nowrap;
5203
5722
  }
5204
5723
 
5724
+ /*
5725
+ * THE TOP TICK STANDS ON THE PLOT'S TOP EDGE, centred on it, so half its line
5726
+ * sits above the plot. Under a head row that half falls in the row; with no
5727
+ * head it fell outside the figure, and a container that clips its content
5728
+ * (a dashboard widget's body) cut the axis's top value in half. The figure
5729
+ * keeps that half line above the plot itself.
5730
+ */
5731
+ .crewlet-stacked-columns--headless {
5732
+ padding-block-start: calc(var(--font-size-2xs) * var(--font-line-height-tight) / 2);
5733
+ }
5734
+
5205
5735
  .crewlet-stacked-columns__plot {
5206
5736
  position: relative;
5207
5737
  display: flex;
@@ -9703,7 +10233,7 @@ body.crewlet-data-table-resizing {
9703
10233
  }
9704
10234
 
9705
10235
 
9706
- /* DatasetSource-47LBDMPR.css */
10236
+ /* DatasetSource-XFPZBRXL.css */
9707
10237
  /*
9708
10238
  * DatasetSource: one entry of a dashboard's Sources rail. The title and its
9709
10239
  * source kind, the definition, then where the rows stand, how many there are
@@ -9767,7 +10297,9 @@ button.crewlet-dataset-source__summary:focus-visible {
9767
10297
  overflow: hidden;
9768
10298
  color: var(--color-text-primary);
9769
10299
  font-size: var(--font-size-sm);
9770
- font-weight: var(--font-weight-semibold);
10300
+ /* Medium, not semibold: the rail is the board's footnotes, and a column of
10301
+ semibold titles beside it outweighed the figures' own. */
10302
+ font-weight: var(--font-weight-medium);
9771
10303
  line-height: var(--font-line-height-snug);
9772
10304
  text-overflow: ellipsis;
9773
10305
  white-space: nowrap;
@@ -9799,9 +10331,15 @@ button.crewlet-dataset-source__summary:focus-visible {
9799
10331
  color: var(--color-text-secondary);
9800
10332
  }
9801
10333
 
9802
- /* The separators are drawn, not typed, so a screen reader hears the facts alone. */
9803
- .crewlet-dataset-source__rows::before,
9804
- .crewlet-dataset-source__refresh::before {
10334
+ /* How the rows are kept current, on the quiet step under the facts. */
10335
+ .crewlet-dataset-source__refresh {
10336
+ color: var(--color-text-tertiary);
10337
+ font-size: var(--font-size-xs);
10338
+ line-height: var(--font-line-height-snug);
10339
+ }
10340
+
10341
+ /* The separator is drawn, not typed, so a screen reader hears the facts alone. */
10342
+ .crewlet-dataset-source__rows::before {
9805
10343
  content: '\00b7' / '';
9806
10344
  margin-inline-end: var(--spacing-2);
9807
10345
  }
@@ -15152,7 +15690,7 @@ svg.crewlet-datetime__chevron {
15152
15690
  }
15153
15691
 
15154
15692
 
15155
- /* Note-RT4L6VUT.css */
15693
+ /* Note-ONSKKTOA.css */
15156
15694
  /*
15157
15695
  * Note: words on a coloured paper. Each hue pairs its fill with its own ink.
15158
15696
  */
@@ -15196,6 +15734,16 @@ svg.crewlet-datetime__chevron {
15196
15734
  letter-spacing: var(--font-letter-spacing-tight);
15197
15735
  }
15198
15736
 
15737
+ /* The note's name, at a card title's step, in the note's own ink. */
15738
+ .crewlet-note__heading {
15739
+ margin: 0 0 var(--spacing-2);
15740
+ font-size: var(--font-size-sm);
15741
+ font-weight: var(--font-weight-semibold);
15742
+ letter-spacing: var(--font-letter-spacing-tight);
15743
+ line-height: var(--font-line-height-snug);
15744
+ text-wrap: balance;
15745
+ }
15746
+
15199
15747
  /* Prose inside takes the note's ink, links included. */
15200
15748
  .crewlet-note :is(p, li, h2, h3, h4, strong, em) {
15201
15749
  color: inherit;
@@ -16555,7 +17103,7 @@ svg.crewlet-datetime__chevron {
16555
17103
  }
16556
17104
 
16557
17105
 
16558
- /* PeopleRail-R64WVOSH.css */
17106
+ /* PeopleRail-SZGHZXVT.css */
16559
17107
  /* PeopleRail: a raised column of everybody present, one row a person, the
16560
17108
  name over what they are doing and the controls at the row's end. */
16561
17109
  .crewlet-people-rail {
@@ -16569,6 +17117,14 @@ svg.crewlet-datetime__chevron {
16569
17117
  background: var(--color-surface-elevated);
16570
17118
  }
16571
17119
 
17120
+ /* PLAIN: the list alone, in a host that frames and names it. */
17121
+ .crewlet-people-rail--plain {
17122
+ padding: 0;
17123
+ border: 0;
17124
+ border-radius: 0;
17125
+ background: transparent;
17126
+ }
17127
+
16572
17128
  .crewlet-people-rail__head {
16573
17129
  display: flex;
16574
17130
  align-items: center;
@@ -26678,7 +27234,7 @@ svg.crewlet-time-window__tick {
26678
27234
  }
26679
27235
 
26680
27236
 
26681
- /* WidgetFrame-4EFJOJMW.css */
27237
+ /* WidgetFrame-LRZIL62O.css */
26682
27238
  /*
26683
27239
  * WidgetFrame: one figure on a dashboard. A title row, the figure filling the
26684
27240
  * height the host's frame gives it, and the citation line at the foot.
@@ -26688,24 +27244,44 @@ svg.crewlet-time-window__tick {
26688
27244
  box-sizing: border-box;
26689
27245
  display: flex;
26690
27246
  flex-direction: column;
26691
- gap: var(--spacing-2);
27247
+ gap: var(--spacing-3);
26692
27248
  min-width: 0;
26693
27249
  height: 100%;
26694
27250
  min-height: 0;
26695
- padding: var(--spacing-3) var(--spacing-4);
27251
+ /* THE CARD'S OWN INSET, set on each part rather than on the frame, so a
27252
+ flush figure can give up its sides while the title and the citation keep
27253
+ theirs. */
27254
+ padding-block: var(--spacing-4);
27255
+ /* THE CARD RECIPE: the ground, the hairline and the corner every card on a
27256
+ board stands on, so a figure and the cards around it are one object. */
26696
27257
  border: 1px solid var(--color-border-default);
26697
27258
  border-radius: var(--radius-lg);
26698
- background: var(--color-surface-elevated);
27259
+ background: var(--color-surface-subtle);
27260
+ /* Measured by its own width, for the citation below. */
27261
+ container: crewlet-widget-frame / inline-size;
27262
+ }
27263
+
27264
+ .crewlet-widget-frame__head,
27265
+ .crewlet-widget-frame__body,
27266
+ .crewlet-widget-frame__cite {
27267
+ padding-inline: var(--spacing-4);
26699
27268
  }
26700
27269
 
26701
27270
  .crewlet-widget-frame__head {
26702
27271
  display: flex;
26703
- align-items: center;
27272
+ align-items: flex-start;
26704
27273
  gap: var(--spacing-2);
26705
27274
  min-width: 0;
26706
27275
  }
26707
27276
 
27277
+ /*
27278
+ * THE TITLE IS THE FIGURE'S ONLY NAME, so it is read whole: it takes a second
27279
+ * line before it gives up a word, and only a title longer than two lines ends
27280
+ * in an ellipsis. Cut at one line, a frame three columns wide named "Tokens,
27281
+ * last 14 days" as "Tokens, last 14 da".
27282
+ */
26708
27283
  .crewlet-widget-frame__title {
27284
+ display: -webkit-box;
26709
27285
  flex: 1;
26710
27286
  min-width: 0;
26711
27287
  margin: 0;
@@ -26714,15 +27290,21 @@ svg.crewlet-time-window__tick {
26714
27290
  font-size: var(--font-size-sm);
26715
27291
  font-weight: var(--font-weight-semibold);
26716
27292
  line-height: var(--font-line-height-snug);
26717
- text-overflow: ellipsis;
26718
- white-space: nowrap;
27293
+ overflow-wrap: anywhere;
27294
+ text-wrap: pretty;
27295
+ -webkit-box-orient: vertical;
27296
+ -webkit-line-clamp: 2;
27297
+ line-clamp: 2;
26719
27298
  }
26720
27299
 
27300
+ /* The controls stand on the title's first line: the box is one line of the
27301
+ title tall and the control is centred in it, whatever its own height. */
26721
27302
  .crewlet-widget-frame__actions {
26722
27303
  display: inline-flex;
26723
27304
  flex: none;
26724
27305
  align-items: center;
26725
27306
  gap: var(--spacing-1);
27307
+ height: calc(var(--font-size-sm) * var(--font-line-height-snug));
26726
27308
  }
26727
27309
 
26728
27310
  .crewlet-widget-frame__body {
@@ -26732,6 +27314,24 @@ svg.crewlet-time-window__tick {
26732
27314
  overflow: auto;
26733
27315
  }
26734
27316
 
27317
+ /* A flush figure reaches the frame's sides, and a table's cells take the
27318
+ frame's inset, so its first column starts under the title and its row
27319
+ rules meet the border. */
27320
+ .crewlet-widget-frame--flush .crewlet-widget-frame__body {
27321
+ padding-inline: 0;
27322
+ }
27323
+
27324
+ .crewlet-widget-frame--flush .crewlet-data-table--compact {
27325
+ --crewlet-data-table-cell-pad-x: var(--spacing-4);
27326
+ }
27327
+
27328
+ /* A stat tile drawn flush as the figure stands on the frame's inset; its own
27329
+ is for a column of a StatGroup, and inside a frame it doubled the space
27330
+ around the label and under the value. */
27331
+ .crewlet-widget-frame__body .crewlet-statcard--flush {
27332
+ padding: 0;
27333
+ }
27334
+
26735
27335
  .crewlet-widget-frame__blocked {
26736
27336
  display: flex;
26737
27337
  align-items: flex-start;
@@ -26754,10 +27354,16 @@ svg.crewlet-time-window__tick {
26754
27354
  min-width: 0;
26755
27355
  }
26756
27356
 
27357
+ /*
27358
+ * ONE LINE: the dataset's title gives up its tail before the time leaves the
27359
+ * line. Allowed to wrap, a long title was cut and its "as of" fell to a line
27360
+ * of its own that began with the separator.
27361
+ */
26757
27362
  .crewlet-widget-frame__cite-text,
26758
27363
  .crewlet-widget-frame__cite-button {
26759
27364
  display: inline-flex;
26760
- flex-wrap: wrap;
27365
+ flex-wrap: nowrap;
27366
+ max-width: 100%;
26761
27367
  align-items: center;
26762
27368
  gap: 0 var(--spacing-1);
26763
27369
  min-width: 0;
@@ -26789,6 +27395,8 @@ svg.crewlet-time-window__tick {
26789
27395
  }
26790
27396
 
26791
27397
  .crewlet-widget-frame__source {
27398
+ flex: 0 1 auto;
27399
+ min-width: 0;
26792
27400
  overflow: hidden;
26793
27401
  color: var(--color-text-secondary);
26794
27402
  font-weight: var(--font-weight-medium);
@@ -26802,7 +27410,34 @@ svg.crewlet-time-window__tick {
26802
27410
  margin-inline-end: var(--spacing-1);
26803
27411
  }
26804
27412
 
27413
+ .crewlet-widget-frame__when {
27414
+ flex: none;
27415
+ white-space: nowrap;
27416
+ }
27417
+
27418
+ /*
27419
+ * A NARROW FRAME STACKS ITS CITATION: the dataset's title on one line and
27420
+ * when it was true under it, with no separator to begin a line. Side by side
27421
+ * in a frame three columns wide, the title kept four letters ("Open w...").
27422
+ */
27423
+ @container crewlet-widget-frame (width < 18rem) {
27424
+ .crewlet-widget-frame__cite-text,
27425
+ .crewlet-widget-frame__cite-button {
27426
+ flex-direction: column;
27427
+ align-items: flex-start;
27428
+ }
27429
+
27430
+ .crewlet-widget-frame__source {
27431
+ max-width: 100%;
27432
+ }
27433
+
27434
+ .crewlet-widget-frame__when::before {
27435
+ content: none;
27436
+ }
27437
+ }
27438
+
26805
27439
  .crewlet-widget-frame__stale {
26806
27440
  display: inline-flex;
27441
+ flex: none;
26807
27442
  color: var(--color-feedback-warning-ink);
26808
27443
  }