@crewlethq/ui 0.30.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -204,6 +204,14 @@ places:
204
204
  - A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
205
205
  when the content beneath it moves, and every panel anchored inside follows.
206
206
 
207
+ ## Changes in 0.31.1
208
+
209
+ **`EditingStatus` folds "Editing" on an artifact bar's narrow arrangement**, below 640px, and keeps its dot, so a phone's bar keeps the room for the title while Cancel and Save are there. The words stay in the status for a screen reader.
210
+
211
+ ## Changes in 0.31.0
212
+
213
+ **`ArtifactBar` carries an editing state**: a `status` slot said before the kind's tools (an `EditingStatus` while a doc is edited), never folded away, and a tool's `emphasis: 'primary'`, drawn as the primary button with its word kept at every width, for the one action the state turns on, such as Save.
214
+
207
215
  ## Changes in 0.30.0
208
216
 
209
217
  **`RichEditor` edits Markdown in place, as the document it reads as.** The editable element is set by `Document`, so a page looks the same while it is edited as when it is read, and there is no separate preview. It is built on ProseMirror and loaded lazily: the component is a shell that fetches the editor's code with `import()` the first time one is drawn, so a screen that only reads pays for none of it, and `preloadRichEditor()` starts that fetch from a press that is about to open an editor.
@@ -33,6 +33,12 @@ export interface ArtifactBarTool {
33
33
  * or a kind's primary action such as a doc's Edit.
34
34
  */
35
35
  labelled?: boolean | undefined;
36
+ /**
37
+ * `primary`: the one action a kind's state turns on, such as Save while a
38
+ * doc is edited. Drawn as the primary button, labelled, and its word kept at
39
+ * every width, because a glyph alone does not say what a press commits.
40
+ */
41
+ emphasis?: 'primary' | undefined;
36
42
  }
37
43
  /** The ways a kind draws itself, as one choice: a deck's Edit, Grid and Present. */
38
44
  export interface ArtifactBarModes {
@@ -86,6 +92,12 @@ export interface ArtifactBarProps {
86
92
  modes?: ArtifactBarModes | undefined;
87
93
  /** Who else is here, such as a presence stack. Folded away first on a narrower bar. */
88
94
  presence?: ReactNode;
95
+ /**
96
+ * What the kind is doing now, said before its tools: an `EditingStatus`
97
+ * while a doc is edited. Never folded away; a status that has words to
98
+ * spare folds them itself.
99
+ */
100
+ status?: ReactNode;
89
101
  /** The kind's own controls, before the panels: a doc's Edit. */
90
102
  kindTools?: readonly ArtifactBarTool[] | undefined;
91
103
  /** The panels and actions every artifact has: details, history, people, share. */
@@ -121,7 +133,7 @@ export interface ArtifactBarProps {
121
133
  * the stylesheet shows one, so no control is ever in two places a reader can
122
134
  * see at once and nothing is measured in script.
123
135
  */
124
- export declare function ArtifactBar({ title, kind, icon, kindLabel, back, start, onRename, renaming, onRenamingChange, version, modes, presence, kindTools, tools, menu, as, headingLevel, pending, labels, className, }: ArtifactBarProps): import("react").JSX.Element;
136
+ export declare function ArtifactBar({ title, kind, icon, kindLabel, back, start, onRename, renaming, onRenamingChange, version, modes, presence, status, kindTools, tools, menu, as, headingLevel, pending, labels, className, }: ArtifactBarProps): import("react").JSX.Element;
125
137
  export interface ArtifactVersionChipProps {
126
138
  /** The version on show. */
127
139
  version: number;
@@ -1,4 +1,4 @@
1
- export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-QMBP23BL.js';
1
+ export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-P4BOXB6E.js';
2
2
  import '../chunk-FQCLKD7U.js';
3
3
  import '../chunk-SMBKXWML.js';
4
4
  import '../chunk-QWOPX2MN.js';
@@ -192,6 +192,13 @@
192
192
  margin-inline-start: var(--spacing-1);
193
193
  }
194
194
 
195
+ .crewlet-artifact-bar__status {
196
+ display: inline-flex;
197
+ align-items: center;
198
+ min-width: 0;
199
+ margin-inline-end: var(--spacing-2);
200
+ }
201
+
195
202
  .crewlet-artifact-bar__presence {
196
203
  display: inline-flex;
197
204
  align-items: center;
@@ -1,2 +1,2 @@
1
- export { EditingStatus } from '../chunk-3DPIU2Q7.js';
1
+ export { EditingStatus } from '../chunk-FPS3JIPQ.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -42,11 +42,32 @@
42
42
  margin-right: var(--spacing-2);
43
43
  }
44
44
 
45
+ /*
46
+ * THE WORDS FOLD AND THE DOT STAYS where room is short, hidden from the eye
47
+ * and still read by a screen reader, so the status says the same thing to
48
+ * everyone. On a phone the state folds. On an artifact bar's narrow
49
+ * arrangement (below 640px, as ArtifactBar.css draws it) "Editing" folds too:
50
+ * the title has the row's room first, and Cancel and Save beside the dot
51
+ * already say an edit is open.
52
+ */
45
53
  @media (width < 480px) {
46
54
  .crewlet-editing-status__state {
47
55
  position: absolute;
48
56
  width: 1px;
49
57
  height: 1px;
58
+ margin: -1px;
59
+ overflow: hidden;
60
+ clip-path: inset(50%);
61
+ }
62
+ }
63
+
64
+ @container crewlet-artifact-bar (width < 640px) {
65
+ .crewlet-editing-status__label,
66
+ .crewlet-editing-status__state {
67
+ position: absolute;
68
+ width: 1px;
69
+ height: 1px;
70
+ margin: -1px;
50
71
  overflow: hidden;
51
72
  clip-path: inset(50%);
52
73
  }
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './EditingStatus-NFADEPSX.css';
2
+ import './EditingStatus-L6THUAN7.css';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
5
5
  var LABELS = {
@@ -7,7 +7,7 @@ import { Button } from './chunk-OG6CL3EB.js';
7
7
  import { IconButton } from './chunk-4FQT6ZAY.js';
8
8
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
- import './ArtifactBar-IBWB5POL.css';
10
+ import './ArtifactBar-MLMJHWY6.css';
11
11
  import { useId, useState, useRef, useEffect } from 'react';
12
12
  import { ChevronLeftGlyph, EllipsisGlyph, ChevronDownGlyph } from '@crewlethq/icons/glyphs';
13
13
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -31,6 +31,7 @@ function ArtifactBar({
31
31
  version,
32
32
  modes,
33
33
  presence,
34
+ status,
34
35
  kindTools = [],
35
36
  tools = [],
36
37
  menu = [],
@@ -109,6 +110,7 @@ function ArtifactBar({
109
110
  }
110
111
  ) }) : null,
111
112
  /* @__PURE__ */ jsxs("div", { className: "crewlet-artifact-bar__end", children: [
113
+ status ? /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-bar__status", children: status }) : null,
112
114
  presence ? /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-bar__presence", children: presence }) : null,
113
115
  kindTools.some((t) => !t.labelled) ? /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-bar__tools crewlet-artifact-bar__wide", children: kindTools.filter((t) => !t.labelled).map((tool) => /* @__PURE__ */ jsx(ToolButton, { tool, apple }, tool.key)) }) : null,
114
116
  tools.some((t) => !t.labelled) ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-bar__tools crewlet-artifact-bar__wide", children: [
@@ -165,6 +167,20 @@ function ToolButton({ tool, apple }) {
165
167
  }
166
168
  function LabelledTool({ tool, apple }) {
167
169
  const shortcut = tool.keys ? ariaKeys(tool.keys, apple) : void 0;
170
+ if (tool.emphasis === "primary") {
171
+ return /* @__PURE__ */ jsx(Tooltip, { content: /* @__PURE__ */ jsx(Tip, { tool, apple }), placement: "bottom", disabled: !tool.keys, children: /* @__PURE__ */ jsx(
172
+ Button,
173
+ {
174
+ size: "small",
175
+ variant: "primary",
176
+ leadingIcon: tool.icon,
177
+ disabledReason: tool.disabledReason,
178
+ "aria-keyshortcuts": shortcut,
179
+ onClick: tool.onSelect,
180
+ children: tool.label
181
+ }
182
+ ) });
183
+ }
168
184
  return /* @__PURE__ */ jsxs(Fragment, { children: [
169
185
  /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-bar__roomy", children: /* @__PURE__ */ jsx(Tooltip, { content: /* @__PURE__ */ jsx(Tip, { tool, apple }), placement: "bottom", disabled: !tool.keys, children: /* @__PURE__ */ jsx(
170
186
  Button,
@@ -1,7 +1,7 @@
1
1
  import '../chunk-OC46246T.js';
2
2
  export { WidgetFrame } from '../chunk-AAOH2P6Y.js';
3
3
  export { ElementToPngError, elementToPng, serializeElement, toCsv } from '../chunk-UOR7TOAU.js';
4
- export { ThemeToggle } from '../chunk-NP2C4Y4E.js';
4
+ export { ToastProvider, Toaster, useToast } from '../chunk-QH3AKP2N.js';
5
5
  export { TreeCanvas } from '../chunk-S6VG5ZFZ.js';
6
6
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-EHQTPVV4.js';
7
7
  export { VersionTimeline } from '../chunk-W4XYY73O.js';
@@ -10,24 +10,24 @@ export { Text } from '../chunk-IKBK4A5O.js';
10
10
  export { ThemeGallery } from '../chunk-C2FRTWKO.js';
11
11
  export { ThemeSwatch } from '../chunk-MNFU2RNT.js';
12
12
  export { DensitySwitcher, ThemeSwitcher } from '../chunk-WJDQ7XQA.js';
13
+ export { ThemeToggle } from '../chunk-NP2C4Y4E.js';
13
14
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-Z24ZUSTX.js';
14
15
  export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-UZ6MA2V6.js';
15
16
  export { Timeline, TimelineItem } from '../chunk-AUQPBL4O.js';
16
- export { ToastProvider, Toaster, useToast } from '../chunk-QH3AKP2N.js';
17
- export { SlideGrid } from '../chunk-3C3BRIMY.js';
17
+ export { Stepper } from '../chunk-5QWIJSQM.js';
18
18
  export { Switcher } from '../chunk-HVNTQ36V.js';
19
19
  export { Table } from '../chunk-V2N3BMOT.js';
20
20
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-LFNUH4GY.js';
21
21
  export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-ALMSY7RL.js';
22
22
  export { SlideFilmstrip } from '../chunk-LR5QTFOE.js';
23
+ export { SlideGrid } from '../chunk-3C3BRIMY.js';
23
24
  export { StatCard } from '../chunk-IKB6HFGK.js';
24
25
  export { StatGroup } from '../chunk-JXRI5YD2.js';
25
- export { Stepper } from '../chunk-5QWIJSQM.js';
26
+ export { SegmentedMeter, segmentedMeterLabel } from '../chunk-4AK52VHB.js';
26
27
  export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-JQLTG4KH.js';
27
28
  export { Select } from '../chunk-FC4YTTFJ.js';
28
29
  export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-CT4EZF62.js';
29
30
  export { TagGroup } from '../chunk-O2EGEONV.js';
30
- export { SegmentedMeter, segmentedMeterLabel } from '../chunk-4AK52VHB.js';
31
31
  export { matchesShortcut, useShortcut } from '../chunk-2FPENTCF.js';
32
32
  export { NavGroup, NavItem, SidebarNav } from '../chunk-UCCC7YVZ.js';
33
33
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from '../chunk-ZAJHGDAW.js';
@@ -57,8 +57,8 @@ import '../chunk-CENOOTAV.js';
57
57
  export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-RWA4H2TV.js';
58
58
  export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from '../chunk-UGNUUVRI.js';
59
59
  export { NewItemsNotice } from '../chunk-PXU6HOZB.js';
60
- export { OrgLabel } from '../chunk-AKEZ3G5V.js';
61
60
  export { FactLine, ObjectHeader, SetByLine } from '../chunk-VGE3G3T4.js';
61
+ export { OrgLabel } from '../chunk-AKEZ3G5V.js';
62
62
  export { Link } from '../chunk-FBSEJO2C.js';
63
63
  export { LinkInterstitial, openExternal } from '../chunk-ZR5VN5IV.js';
64
64
  export { List, ListItem } from '../chunk-DS2C73RJ.js';
@@ -74,12 +74,12 @@ export { FollowBanner } from '../chunk-LDJ3J4TQ.js';
74
74
  export { DEFAULT_FRAME_THEME, EXTERNAL_URL_MAX, FRAME_BRIDGE, FRAME_MESSAGE, FRAME_ORIGIN_MODES, FRAME_SANDBOX_TOKENS, applyFrameTheme, checkFrameSandbox, externalUrl, frameFragment, frameOriginMatches, frameThemeMessage, httpOrigin, isFocusExit, isFrameNonce, negotiateBridge, parseFrameFragment, portTargetOrigin, readFrameHello, readFramePortMessage, readFrameTheme, readOpenLink } from '../chunk-F6V2PTN6.js';
75
75
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from '../chunk-ZXXDZJQN.js';
76
76
  export { useFullscreen } from '../chunk-XDTYBF2F.js';
77
- import '../chunk-FFMCMSJB.js';
78
77
  export { Highlight, highlightRanges, highlightTerms } from '../chunk-H6VKCIWV.js';
78
+ import '../chunk-FFMCMSJB.js';
79
79
  export { IconTile } from '../chunk-IXJHTFXG.js';
80
80
  export { DownloadButton } from '../chunk-BEHFTRMZ.js';
81
81
  export { downloadBlob, downloadText, safeFilename, useDownload } from '../chunk-IW55G7XG.js';
82
- export { EditingStatus } from '../chunk-3DPIU2Q7.js';
82
+ export { EditingStatus } from '../chunk-FPS3JIPQ.js';
83
83
  export { EntityChip } from '../chunk-4KWOKX2B.js';
84
84
  export { ErrorBoundary } from '../chunk-XX2VQE55.js';
85
85
  export { Eyebrow } from '../chunk-RK4XPHVG.js';
@@ -102,6 +102,7 @@ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu }
102
102
  export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-ZB5O3ELS.js';
103
103
  export { Tag } from '../chunk-GFV4LJHH.js';
104
104
  export { StatusDot } from '../chunk-WIATRXEJ.js';
105
+ export { ChoiceButtons } from '../chunk-YSJC7AZC.js';
105
106
  export { ChoiceList } from '../chunk-QBXZLGK2.js';
106
107
  export { CodeBlock } from '../chunk-GDDE4UM7.js';
107
108
  export { CopyButton, Copyable } from '../chunk-W46LPU4R.js';
@@ -125,7 +126,6 @@ export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COL
125
126
  export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from '../chunk-Z7JYG5TF.js';
126
127
  import '../chunk-3L5NHASN.js';
127
128
  export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from '../chunk-77DRMDXR.js';
128
- export { ChoiceButtons } from '../chunk-YSJC7AZC.js';
129
129
  export { AuthLayout } from '../chunk-VDPJGP4Q.js';
130
130
  export { AvatarPicker } from '../chunk-TGYDROIB.js';
131
131
  export { HuePicker } from '../chunk-LIXSV5YI.js';
@@ -144,7 +144,7 @@ export { Switch } from '../chunk-A722MUNR.js';
144
144
  export { DEFAULT_REORDER_LABELS, moveKey, useReorder, useReorderLists } from '../chunk-XJ2QEBMM.js';
145
145
  export { Checkbox, CheckboxGroup } from '../chunk-7T42VQQT.js';
146
146
  export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-6QFAK2WV.js';
147
- export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-QMBP23BL.js';
147
+ export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-P4BOXB6E.js';
148
148
  import '../chunk-FQCLKD7U.js';
149
149
  export { Kbd, isApplePlatform, keyGlyph } from '../chunk-SMBKXWML.js';
150
150
  export { Tooltip } from '../chunk-QWOPX2MN.js';
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import './chunk-OC46246T.js';
2
2
  export { WidgetFrame } from './chunk-AAOH2P6Y.js';
3
3
  export { ElementToPngError, elementToPng, serializeElement, toCsv } from './chunk-UOR7TOAU.js';
4
- export { ThemeToggle } from './chunk-NP2C4Y4E.js';
4
+ export { ToastProvider, Toaster, useToast } from './chunk-QH3AKP2N.js';
5
5
  export { TreeCanvas } from './chunk-S6VG5ZFZ.js';
6
6
  export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from './chunk-EHQTPVV4.js';
7
7
  export { VersionTimeline } from './chunk-W4XYY73O.js';
@@ -10,24 +10,24 @@ export { Text } from './chunk-IKBK4A5O.js';
10
10
  export { ThemeGallery } from './chunk-C2FRTWKO.js';
11
11
  export { ThemeSwatch } from './chunk-MNFU2RNT.js';
12
12
  export { DensitySwitcher, ThemeSwitcher } from './chunk-WJDQ7XQA.js';
13
+ export { ThemeToggle } from './chunk-NP2C4Y4E.js';
13
14
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-Z24ZUSTX.js';
14
15
  export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-UZ6MA2V6.js';
15
16
  export { Timeline, TimelineItem } from './chunk-AUQPBL4O.js';
16
- export { ToastProvider, Toaster, useToast } from './chunk-QH3AKP2N.js';
17
- export { SlideGrid } from './chunk-3C3BRIMY.js';
17
+ export { Stepper } from './chunk-5QWIJSQM.js';
18
18
  export { Switcher } from './chunk-HVNTQ36V.js';
19
19
  export { Table } from './chunk-V2N3BMOT.js';
20
20
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from './chunk-LFNUH4GY.js';
21
21
  export { SLIDE_COMPARE_LABELS, SlideCompare } from './chunk-ALMSY7RL.js';
22
22
  export { SlideFilmstrip } from './chunk-LR5QTFOE.js';
23
+ export { SlideGrid } from './chunk-3C3BRIMY.js';
23
24
  export { StatCard } from './chunk-IKB6HFGK.js';
24
25
  export { StatGroup } from './chunk-JXRI5YD2.js';
25
- export { Stepper } from './chunk-5QWIJSQM.js';
26
+ export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
26
27
  export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from './chunk-JQLTG4KH.js';
27
28
  export { Select } from './chunk-FC4YTTFJ.js';
28
29
  export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-CT4EZF62.js';
29
30
  export { TagGroup } from './chunk-O2EGEONV.js';
30
- export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
31
31
  export { matchesShortcut, useShortcut } from './chunk-2FPENTCF.js';
32
32
  export { NavGroup, NavItem, SidebarNav } from './chunk-UCCC7YVZ.js';
33
33
  export { ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from './chunk-ZAJHGDAW.js';
@@ -57,8 +57,8 @@ import './chunk-CENOOTAV.js';
57
57
  export { MERGE_CONFLICTS_LABELS, MergeConflicts } from './chunk-RWA4H2TV.js';
58
58
  export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-UGNUUVRI.js';
59
59
  export { NewItemsNotice } from './chunk-PXU6HOZB.js';
60
- export { OrgLabel } from './chunk-AKEZ3G5V.js';
61
60
  export { FactLine, ObjectHeader, SetByLine } from './chunk-VGE3G3T4.js';
61
+ export { OrgLabel } from './chunk-AKEZ3G5V.js';
62
62
  export { Link } from './chunk-FBSEJO2C.js';
63
63
  export { LinkInterstitial, openExternal } from './chunk-ZR5VN5IV.js';
64
64
  export { List, ListItem } from './chunk-DS2C73RJ.js';
@@ -74,12 +74,12 @@ export { FollowBanner } from './chunk-LDJ3J4TQ.js';
74
74
  export { DEFAULT_FRAME_THEME, EXTERNAL_URL_MAX, FRAME_BRIDGE, FRAME_MESSAGE, FRAME_ORIGIN_MODES, FRAME_SANDBOX_TOKENS, applyFrameTheme, checkFrameSandbox, externalUrl, frameFragment, frameOriginMatches, frameThemeMessage, httpOrigin, isFocusExit, isFrameNonce, negotiateBridge, parseFrameFragment, portTargetOrigin, readFrameHello, readFramePortMessage, readFrameTheme, readOpenLink } from './chunk-F6V2PTN6.js';
75
75
  export { DENSITY_PREFERENCES, PALETTE_ID, THEME_PREFERENCES, applyDensity, applyPalette, applyTheme, isDensityPreference, isPaletteId, isThemePreference } from './chunk-ZXXDZJQN.js';
76
76
  export { useFullscreen } from './chunk-XDTYBF2F.js';
77
- import './chunk-FFMCMSJB.js';
78
77
  export { Highlight, highlightRanges, highlightTerms } from './chunk-H6VKCIWV.js';
78
+ import './chunk-FFMCMSJB.js';
79
79
  export { IconTile } from './chunk-IXJHTFXG.js';
80
80
  export { DownloadButton } from './chunk-BEHFTRMZ.js';
81
81
  export { downloadBlob, downloadText, safeFilename, useDownload } from './chunk-IW55G7XG.js';
82
- export { EditingStatus } from './chunk-3DPIU2Q7.js';
82
+ export { EditingStatus } from './chunk-FPS3JIPQ.js';
83
83
  export { EntityChip } from './chunk-4KWOKX2B.js';
84
84
  export { ErrorBoundary } from './chunk-XX2VQE55.js';
85
85
  export { Eyebrow } from './chunk-RK4XPHVG.js';
@@ -102,6 +102,7 @@ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu }
102
102
  export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from './chunk-ZB5O3ELS.js';
103
103
  export { Tag } from './chunk-GFV4LJHH.js';
104
104
  export { StatusDot } from './chunk-WIATRXEJ.js';
105
+ export { ChoiceButtons } from './chunk-YSJC7AZC.js';
105
106
  export { ChoiceList } from './chunk-QBXZLGK2.js';
106
107
  export { CodeBlock } from './chunk-GDDE4UM7.js';
107
108
  export { CopyButton, Copyable } from './chunk-W46LPU4R.js';
@@ -125,7 +126,6 @@ export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COL
125
126
  export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from './chunk-Z7JYG5TF.js';
126
127
  import './chunk-3L5NHASN.js';
127
128
  export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from './chunk-77DRMDXR.js';
128
- export { ChoiceButtons } from './chunk-YSJC7AZC.js';
129
129
  export { AuthLayout } from './chunk-VDPJGP4Q.js';
130
130
  export { AvatarPicker } from './chunk-TGYDROIB.js';
131
131
  export { HuePicker } from './chunk-LIXSV5YI.js';
@@ -144,7 +144,7 @@ export { Switch } from './chunk-A722MUNR.js';
144
144
  export { DEFAULT_REORDER_LABELS, moveKey, useReorder, useReorderLists } from './chunk-XJ2QEBMM.js';
145
145
  export { Checkbox, CheckboxGroup } from './chunk-7T42VQQT.js';
146
146
  export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from './chunk-6QFAK2WV.js';
147
- export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from './chunk-QMBP23BL.js';
147
+ export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from './chunk-P4BOXB6E.js';
148
148
  import './chunk-FQCLKD7U.js';
149
149
  export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
150
150
  export { Tooltip } from './chunk-QWOPX2MN.js';
package/dist/styles.css CHANGED
@@ -1996,7 +1996,7 @@ button.crewlet-account-row__who:focus-visible {
1996
1996
  }
1997
1997
 
1998
1998
 
1999
- /* ArtifactBar-IBWB5POL.css */
1999
+ /* ArtifactBar-MLMJHWY6.css */
2000
2000
  /*
2001
2001
  * One row, one hairline under it, the height of a large row. The lead (the
2002
2002
  * way back, the glyph, the title, the version) takes what the end leaves it
@@ -2191,6 +2191,13 @@ button.crewlet-account-row__who:focus-visible {
2191
2191
  margin-inline-start: var(--spacing-1);
2192
2192
  }
2193
2193
 
2194
+ .crewlet-artifact-bar__status {
2195
+ display: inline-flex;
2196
+ align-items: center;
2197
+ min-width: 0;
2198
+ margin-inline-end: var(--spacing-2);
2199
+ }
2200
+
2194
2201
  .crewlet-artifact-bar__presence {
2195
2202
  display: inline-flex;
2196
2203
  align-items: center;
@@ -11520,7 +11527,7 @@ svg.crewlet-datetime__chevron {
11520
11527
  }
11521
11528
 
11522
11529
 
11523
- /* EditingStatus-NFADEPSX.css */
11530
+ /* EditingStatus-L6THUAN7.css */
11524
11531
  /*
11525
11532
  * The editing status (EditingStatus.tsx): a word and a dot, in the bar's own
11526
11533
  * small step, quiet until something is unsaved.
@@ -11565,11 +11572,32 @@ svg.crewlet-datetime__chevron {
11565
11572
  margin-right: var(--spacing-2);
11566
11573
  }
11567
11574
 
11575
+ /*
11576
+ * THE WORDS FOLD AND THE DOT STAYS where room is short, hidden from the eye
11577
+ * and still read by a screen reader, so the status says the same thing to
11578
+ * everyone. On a phone the state folds. On an artifact bar's narrow
11579
+ * arrangement (below 640px, as ArtifactBar.css draws it) "Editing" folds too:
11580
+ * the title has the row's room first, and Cancel and Save beside the dot
11581
+ * already say an edit is open.
11582
+ */
11568
11583
  @media (width < 480px) {
11569
11584
  .crewlet-editing-status__state {
11570
11585
  position: absolute;
11571
11586
  width: 1px;
11572
11587
  height: 1px;
11588
+ margin: -1px;
11589
+ overflow: hidden;
11590
+ clip-path: inset(50%);
11591
+ }
11592
+ }
11593
+
11594
+ @container crewlet-artifact-bar (width < 640px) {
11595
+ .crewlet-editing-status__label,
11596
+ .crewlet-editing-status__state {
11597
+ position: absolute;
11598
+ width: 1px;
11599
+ height: 1px;
11600
+ margin: -1px;
11573
11601
  overflow: hidden;
11574
11602
  clip-path: inset(50%);
11575
11603
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.30.0",
3
+ "version": "0.31.1",
4
4
  "description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,8 +42,8 @@
42
42
  "clean": "rm -rf dist src/generated"
43
43
  },
44
44
  "dependencies": {
45
- "@crewlethq/icons": "0.30.0",
46
- "@crewlethq/tokens": "0.30.0",
45
+ "@crewlethq/icons": "0.31.1",
46
+ "@crewlethq/tokens": "0.31.1",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",