@crewlethq/ui 0.34.2 → 0.35.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 +51 -0
- package/dist/AppShell/index.js +2 -2
- package/dist/ArtifactBar/ArtifactBar.d.ts +6 -0
- package/dist/ArtifactBar/index.d.ts +1 -0
- package/dist/ArtifactBar/index.js +2 -2
- package/dist/{ArtifactBar-C462VD4C.css → ArtifactBar-HV5AT4RG.css} +39 -2
- package/dist/ArtifactCard/index.d.ts +1 -0
- package/dist/ArtifactCard/index.js +2 -2
- package/dist/{ArtifactCard-XHRLAL7C.css → ArtifactCard-OGTMO2KI.css} +15 -16
- package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +14 -1
- package/dist/ArtifactKindIllustration/index.d.ts +1 -0
- package/dist/ArtifactKindIllustration/index.js +1 -1
- package/dist/{ArtifactKindIllustration-4NG6IE3C.css → ArtifactKindIllustration-5FPRJQ3P.css} +32 -26
- package/dist/ArtifactKinds-CVD3FCYO.css +15 -0
- package/dist/AvatarPicker/index.js +2 -2
- package/dist/CanvasBoard/CanvasBoard.d.ts +30 -12
- package/dist/CanvasBoard/index.js +1 -1
- package/dist/ChangeMark/index.js +2 -2
- package/dist/ChoiceList/ChoiceList.d.ts +7 -1
- package/dist/ChoiceList/index.js +1 -1
- package/dist/{ChoiceList-2PQJS4DX.css → ChoiceList-RBL7FNQL.css} +39 -0
- package/dist/DataTable/index.js +2 -2
- package/dist/DataView/index.js +3 -3
- package/dist/DocTabsEditor/index.js +2 -2
- package/dist/{Editor-JMRD6AZW.js → Editor-BVQHBF7L.js} +4 -4
- package/dist/FileDrop/FileDrop.d.ts +64 -0
- package/dist/FileDrop/index.d.ts +3 -0
- package/dist/FileDrop/index.js +4 -0
- package/dist/FileDrop-WE7BNZGV.css +80 -0
- package/dist/FindingList/FindingList.d.ts +35 -0
- package/dist/FindingList/index.d.ts +3 -0
- package/dist/FindingList/index.js +3 -0
- package/dist/FindingList-PMYA2R6Q.css +71 -0
- package/dist/HuePicker/HuePicker.d.ts +9 -0
- package/dist/HuePicker/index.d.ts +1 -1
- package/dist/HuePicker/index.js +1 -1
- package/dist/Markdown/index.js +1 -1
- package/dist/Menu/Menu.d.ts +6 -1
- package/dist/Menu/index.js +1 -1
- package/dist/RichEditor/index.js +3 -3
- package/dist/RichEditorMarkdown/index.js +3 -3
- package/dist/SheetColumnEditor/SheetColumnEditor.d.ts +94 -0
- package/dist/SheetColumnEditor/index.d.ts +3 -0
- package/dist/SheetColumnEditor/index.js +23 -0
- package/dist/SheetColumnEditor-BO2HKFRB.css +73 -0
- package/dist/SheetGrid/SheetGrid.d.ts +19 -1
- package/dist/SheetGrid/index.js +5 -4
- package/dist/{SheetGrid-GDPCCZ4V.css → SheetGrid-YRDXTIIZ.css} +48 -0
- package/dist/SheetModel/columns.d.ts +19 -0
- package/dist/SheetModel/index.d.ts +1 -0
- package/dist/SheetModel/index.js +1 -1
- package/dist/SheetModel/labels.d.ts +6 -0
- package/dist/SlideFilmstrip/SlideFilmstrip.d.ts +30 -1
- package/dist/SlideFilmstrip/index.js +5 -1
- package/dist/{SlideFilmstrip-5U6Z55GS.css → SlideFilmstrip-4ITZLMO4.css} +49 -0
- package/dist/SourceEditor/SourceEditor.d.ts +62 -0
- package/dist/SourceEditor/index.d.ts +3 -0
- package/dist/SourceEditor/index.js +3 -0
- package/dist/SourceEditor-G2C3STPX.css +160 -0
- package/dist/ThemeGallery/ThemeGallery.d.ts +10 -3
- package/dist/ThemeGallery/index.js +1 -1
- package/dist/{ThemeGallery-NITASULQ.css → ThemeGallery-HSUKBDWY.css} +9 -0
- package/dist/{chunk-UXXJDIYE.js → chunk-22CQQDFW.js} +1 -1
- package/dist/{chunk-EQ7P7DGN.js → chunk-3VD3G3IL.js} +2 -2
- package/dist/{chunk-SGHIAGPR.js → chunk-47JQAGRV.js} +1 -1
- package/dist/{chunk-7T5LSYZ2.js → chunk-7UYONN6K.js} +4 -3
- package/dist/{chunk-KK5OYNAF.js → chunk-BAKPMH3S.js} +8 -4
- package/dist/{chunk-3EB2AV3H.js → chunk-BUVCV3WI.js} +1 -1
- package/dist/{chunk-4B6LSFDS.js → chunk-CSQTDGTS.js} +1 -1
- package/dist/{chunk-WPX6A5BV.js → chunk-E35CMI5D.js} +22 -6
- package/dist/{chunk-EWAFN2IU.js → chunk-FF5OZV77.js} +281 -234
- package/dist/{chunk-OMLACFPP.js → chunk-FJJHD73S.js} +1 -1
- package/dist/chunk-J6YZ4IYV.js +341 -0
- package/dist/{chunk-VI5FWDZW.js → chunk-LFSIKGRQ.js} +17 -2
- package/dist/{chunk-ZADVT7IL.js → chunk-NKZCJRKO.js} +9 -4
- package/dist/chunk-NTB5LRRD.js +52 -0
- package/dist/{chunk-UOR7TOAU.js → chunk-OSFA5ROT.js} +86 -1
- package/dist/{chunk-T46NR3WP.js → chunk-PGZ2R3ON.js} +1 -1
- package/dist/chunk-PI7HKLIT.js +245 -0
- package/dist/{chunk-YZFLH463.js → chunk-QEFHYUCY.js} +1 -1
- package/dist/{chunk-NPQWKZTB.js → chunk-QFNWMWWY.js} +2 -2
- package/dist/{chunk-C7DKX453.js → chunk-QH6VYJ3X.js} +1 -1
- package/dist/{chunk-XV32RKQZ.js → chunk-QIXMNOBD.js} +67 -6
- package/dist/{chunk-GPHWCK7M.js → chunk-SUXP4OBT.js} +6 -3
- package/dist/{chunk-TRQCHF2F.js → chunk-SWD4QBL6.js} +1 -1
- package/dist/chunk-THDGBD6Y.js +154 -0
- package/dist/{chunk-C2FRTWKO.js → chunk-W3UVOZKL.js} +3 -2
- package/dist/{chunk-UDQW6UK7.js → chunk-W7QBBKUE.js} +34 -7
- package/dist/{chunk-QBXZLGK2.js → chunk-ZU3DUXD2.js} +3 -2
- package/dist/generated/index.d.ts +4 -0
- package/dist/generated/index.js +53 -49
- package/dist/index.js +53 -49
- package/dist/styles.css +652 -51
- package/dist/utils/csv.d.ts +35 -0
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +1 -1
- package/package.json +3 -3
- /package/dist/{chunk-VFRSSP3W.js → chunk-3WCNHYXE.js} +0 -0
package/README.md
CHANGED
|
@@ -204,6 +204,57 @@ 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.35.1
|
|
208
|
+
|
|
209
|
+
**A column given another type keeps only what every type has** (`SheetColumnEditor`, and `retypeColumn` in the sheet model). Its field, name, width, freezing, read-only flag and Required stay, and so does its length cap between text and long text, which both read it. Every other setting belongs to the old type and is dropped: a number's bounds, decimals and format, a choice's options, a date's time of day. The column is built up from what is kept rather than pared down from the old one, so a setting a type adds later is dropped without the editor having to name it. Before, a date's time of day and a text's length cap rode along, unseen, into a type that ignores them, and came back if the old type was picked again. A host that relied on a setting surviving a type change sets it again on the column it is handed.
|
|
210
|
+
|
|
211
|
+
## Changes in 0.35.0
|
|
212
|
+
|
|
213
|
+
**The gallery card is a step smaller and calm under the pointer** (`ArtifactCard`, `size="card"`). Its title is the body size rather than a large one, its body inset is one spacing step tighter, and the kind's badge on the preview's foot is 32px (from 40px) with the small glyph, so a gallery fits four cards across a laptop's page in the same design. Hover no longer lifts the card or casts the wide card shadow: the hairline darkens and an extra-small shadow settles under it, over the fast duration, and the card never moves. The More menu still appears on hover and focus. A host that relied on the lift has nothing to change.
|
|
214
|
+
|
|
215
|
+
**An artifact's bar draws the kind's glyph in the kind's colour** (`ArtifactBar`), as the gallery's badge and the Make row do, on an open artifact and on a create page alike. The kinds' colour classes (`crewlet-kind--<kind>`, which set `--crewlet-kind-ink` and its siblings) moved to a sheet of their own that the bar, the card and the illustrations each import, so the bar is tinted on a page that draws no card. `ArtifactKindGlyph`'s module still carries no stylesheet.
|
|
216
|
+
|
|
217
|
+
**An artifact bar's primary action can take a short word on a narrow bar** (`ArtifactBar`, `shortLabel` on an `ArtifactBarTool`), so "Create and ask SRE Lead" reads "Create" on a phone and keeps its full word as its accessible name. **On a narrow bar the status gives way before the title**: it is cut to an ellipsis instead of drawn over the title, and its words stay whole for a screen reader.
|
|
218
|
+
|
|
219
|
+
**A menu's `label` names its trigger when the trigger shows text** (`Menu`). It was the accessible name of an icon trigger only, so a "New" button that opens a menu of kinds was announced as "New". Keep the visible words in the label ("New artifact"), so a person who speaks what they see still reaches it. A test that found a text trigger by its words alone finds it by its label now.
|
|
220
|
+
|
|
221
|
+
**A choice can carry a picture** (`ChoiceList`, `media` on an option): drawn between the radio and the words and hidden from the name, such as an agent's character in a "who builds it" list. A list without pictures is unchanged.
|
|
222
|
+
|
|
223
|
+
**A Make row's tile keeps its drawing still on hover** (`ArtifactKindTile`). The illustration used to rise and grow inside its frame; the frame's border now steps alone, over the fast duration. Reduced motion drops the transition.
|
|
224
|
+
|
|
225
|
+
**A list marker alone on its line is an empty list item**, as CommonMark reads it: `-`, `*`, `+`, `1.`, `1)` and a task's `- [ ]` or `- [x]` with nothing after them, with or without the trailing space an editor strips. The grammar read a bare `1.` as text, so an outline whose trailing spaces were lost drew "1. 2. 3." inside a paragraph, in `RichEditor` and in every renderer alike. An empty item does not interrupt a paragraph, again as in CommonMark, so a lone `-` under a line of text stays that text's next line. Bodies that already round-tripped still do byte for byte, and the editor's corpus holds the bare forms (`bare-markers.md`).
|
|
226
|
+
|
|
227
|
+
- `SlideFilmstrip` takes a slide's actions, as a presentation editor's
|
|
228
|
+
filmstrip has them: `onDuplicate` (Command+D, Control+D elsewhere, on a
|
|
229
|
+
thumbnail), `onDelete` (Delete or Backspace) and `actions` (further menu
|
|
230
|
+
entries), named with their keys in a per-slide menu that the Menu key or
|
|
231
|
+
Shift+F10 opens from the thumbnail. `footer` holds what follows the last
|
|
232
|
+
slide inside the strip, such as a New slide control.
|
|
233
|
+
- `ThemeGallery` takes `renderPreview`, which draws a card's thumbnail in
|
|
234
|
+
place of its swatch, for a theme of something other than the product's
|
|
235
|
+
chrome (a slide deck's, drawn as its cover). A theme's `swatch` is optional
|
|
236
|
+
when the gallery is given one.
|
|
237
|
+
|
|
238
|
+
**`SheetGrid` shapes its columns in place.** `renderColumnEditor` makes each column header open that column's settings in a popover anchored to it: a press, Enter or Space on a header opens it, Escape closes it and returns focus to the header, and the host draws what is inside. `settingsColumn` and `onSettingsColumnChange` let the host open a column itself (one it has just added). A header that opens settings does not sort on a press; a host that offers both puts its sort in the settings. `onAddColumn` draws Add column after the last header, outside the grid's roles (a grid's rows hold cells only), sticking to the top with the header row and reached as its own tab stop after the grid's. Keys, presses and pastes inside a portalled popover no longer reach the grid's own handlers. New labels: `columnSettings`, `columnSettingsHelp` and `addColumn`.
|
|
239
|
+
|
|
240
|
+
**`SheetColumnEditor`** is one column's settings as a compact panel: its name, its type (each with its `SheetColumnTypeGlyph` and a line on what it holds), the choices a select, multi-select or status column offers (each with its colour from a hue menu, or its category for a status; a new status column starts with Not started, In progress and Done), the stars of a rating, Required, Move left and Move right, Delete column (with `deleteDisabledReason`) and Done. Every change is handed to the host at once as the next `SheetColumn`, so the grid beside it redraws as the reader types; a name cleared to nothing is held and restored. `suggestedType` offers a type the host proposes (from a column's name or its values) as one press, and `typeLockedReason` says why a type cannot change. A choice's id is made once from its label (`optionId` for a store's own rule) and never changes after.
|
|
241
|
+
|
|
242
|
+
**`parseCsv`** reads CSV the way spreadsheets write it: quoted separators, doubled quotes and line breaks inside a field, CRLF, LF or CR line ends, a byte order mark dropped, and the separator found from the first record (a comma, a semicolon or a tab) unless given. It reads back what `toCsv` writes, defused formulas included, keeps every value as text, and refuses an unclosed quote or more than `maxRows` records with the line it happened on rather than cutting silently.
|
|
243
|
+
|
|
244
|
+
**`ChoiceList`'s panel is styled as part of its choice.** A selected choice's `panel` had no styles at all: it sat under the row against the box's edge, outside the selected fill. It now continues the row's fill and starts where the label does.
|
|
245
|
+
|
|
246
|
+
**`HueSwatch`** is the dot `HuePicker` draws for a hue (or the hairline ring of no hue), exported for a hue menu or a list of coloured choices.
|
|
247
|
+
|
|
248
|
+
**`CanvasBoard` can shape a canvas before it is drawn.** An editable board given `onBoardCreate` adds Frame (`F`) to its palette, between Hand and Text: a click on the field hands the caller the canvas point, the caller adds a board of whatever size and name it gives new ones and returns its id, and the canvas selects it and hands back Move. `onBoardRemove` lets Delete (or Backspace) remove a selected board, as it removes a selected note. Neither is offered on a view-only canvas, so a published design's viewer is unchanged. The `Shaping` story lays out a design's boards this way. `@crewlethq/icons` vendors `frame`, `laptop`, `tablet` and `smartphone` for it and for frame presets.
|
|
249
|
+
|
|
250
|
+
**`ArtifactKindTile` can start something in place.** Given `onSelect` and no `href`, the tile is a button drawn exactly as the link is, for a create page's starting points. `face` draws on the kind's ground in place of its drawing (a design layout's `CanvasSchematic`), and `detail` is one quiet line under the name, read as the tile's description. The `StartingPoints` story shows a row of them.
|
|
251
|
+
|
|
252
|
+
**`SourceEditor` writes source text in place**: a real, monospaced textarea with a line gutter, and the lines a checker named (`marks`, each a `line`, a `tone` of `danger` or `warning`, and an optional `message` shown as the gutter number's tooltip) drawn in the gutter and behind the text. Lines never wrap, so a number and a mark always sit on their line. Tab and Shift+Tab indent and outdent the lines under the selection, Escape then Tab leaves the field (the field's description says so to a screen reader, as `SOURCE_EDITOR_KEYS`), Enter keeps the line's indent and Command+Enter (Control+Enter) calls `onSubmit`. A refusal on any line sets `aria-invalid`. The handle's `revealLine(n)` focuses the field with the caret at line `n`, scrolled into view; `fill` makes it take its parent's height.
|
|
253
|
+
|
|
254
|
+
**`FindingList` lists what a checker found**: one row per `Finding` (a `tone` of `danger` or `warning`, an optional `location` such as `index.html, line 6`, and the `message`), refusals before advice, the tone's glyph in its ink and the tone said in words to a screen reader (`toneLabels` renames them). A finding with `onSelect` is a button that takes the reader there, so a keyboard walks the findings with Tab.
|
|
255
|
+
|
|
256
|
+
**`FileDrop` and `FilePickButton` bring files in.** `FileDrop` is a dashed target of its own (a `title`, a `hint` and `actions`) or, given children, a region that takes files dropped on it and shows a frosted overlay saying so only while files are held over it. Dropped folders are walked through the entries API, and every file is answered as a `PickedFile` (`path` with forward slashes, inside the folder it came from, and the `File`). A drag that carries no files (text moved inside an editor) passes through untouched. `FilePickButton` is the keyboard's and the screen reader's way in: a `Button` that opens the system picker, for files (`accept`, `multiple`) or a whole folder (`directory`). `droppedFiles` and `pickedFiles` are the readers, exported for a host with its own target.
|
|
257
|
+
|
|
207
258
|
## Changes in 0.34.1
|
|
208
259
|
|
|
209
260
|
**`ArtifactKindGlyph`, `ARTIFACT_KINDS` and `ArtifactKind` have a module of their own** (`@crewlethq/ui/ArtifactKindGlyph`), and it imports nothing but the glyphs. They were defined in `ArtifactCard`'s module, and a bundler places a module whole, so a host that drew one kind glyph in its frame (a sidebar's pins, a command palette's hits) took the whole card into its first screen, and with 0.34.0 the kind illustrations the card draws: about 11 KB of script for a gallery the reader had not opened. Nothing is renamed: the root export and `@crewlethq/ui/ArtifactCard` still answer for all three, and `ArtifactIcon`, `ArtifactBar`, `DashboardCover` and `ArtifactKindIllustration` now import them from the new module.
|
package/dist/AppShell/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-
|
|
1
|
+
export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-PGZ2R3ON.js';
|
|
2
2
|
import '../chunk-RTPQDNW3.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-BUVCV3WI.js';
|
|
4
4
|
import '../chunk-OMV5W53A.js';
|
|
5
5
|
import '../chunk-R25RGPUB.js';
|
|
6
6
|
import '../chunk-OG6CL3EB.js';
|
|
@@ -39,6 +39,12 @@ export interface ArtifactBarTool {
|
|
|
39
39
|
* every width, because a glyph alone does not say what a press commits.
|
|
40
40
|
*/
|
|
41
41
|
emphasis?: 'primary' | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* A primary tool's word on a narrow bar, where the full one would push the
|
|
44
|
+
* title out: "Create" for "Create and ask SRE Lead". The full word stays its
|
|
45
|
+
* accessible name at every width, and it is drawn whole while there is room.
|
|
46
|
+
*/
|
|
47
|
+
shortLabel?: string | undefined;
|
|
42
48
|
}
|
|
43
49
|
/** The ways a kind draws itself, as one choice: a deck's Edit, Grid and Present. */
|
|
44
50
|
export interface ArtifactBarModes {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import '../ArtifactKindIllustration/ArtifactKinds.css';
|
|
1
2
|
import './ArtifactBar.css';
|
|
2
3
|
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from './ArtifactBar.js';
|
|
3
4
|
export type { ArtifactBarLabels, ArtifactBarModes, ArtifactBarProps, ArtifactBarTool, ArtifactVersionChipProps, } from './ArtifactBar.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-
|
|
1
|
+
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-NKZCJRKO.js';
|
|
2
2
|
import '../chunk-WKEPORNM.js';
|
|
3
3
|
import '../chunk-SMBKXWML.js';
|
|
4
4
|
import '../chunk-6ZJ3N7QI.js';
|
|
@@ -8,7 +8,7 @@ import '../chunk-RKKO7QHH.js';
|
|
|
8
8
|
import '../chunk-ILDNJHRU.js';
|
|
9
9
|
import '../chunk-CE2THTQR.js';
|
|
10
10
|
import '../chunk-BHHIIK3M.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-BUVCV3WI.js';
|
|
12
12
|
import '../chunk-OMV5W53A.js';
|
|
13
13
|
import '../chunk-R25RGPUB.js';
|
|
14
14
|
import '../chunk-OG6CL3EB.js';
|
|
@@ -64,6 +64,9 @@
|
|
|
64
64
|
align-items: center;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
/* THE KIND'S GLYPH IN THE KIND'S INK, as the gallery's badge and the Make
|
|
68
|
+
row draw it, so an open artifact and a create page say what they are in the
|
|
69
|
+
same colour the reader picked it by. */
|
|
67
70
|
.crewlet-artifact-bar__glyph {
|
|
68
71
|
display: inline-flex;
|
|
69
72
|
flex: none;
|
|
@@ -71,7 +74,7 @@
|
|
|
71
74
|
justify-content: center;
|
|
72
75
|
width: var(--size-control-sm);
|
|
73
76
|
height: var(--size-control-sm);
|
|
74
|
-
color: var(--color-text-secondary);
|
|
77
|
+
color: var(--crewlet-kind-ink, var(--color-text-secondary));
|
|
75
78
|
}
|
|
76
79
|
|
|
77
80
|
/* THE TITLE. Read only, it is text; renamable, its words are a button drawn
|
|
@@ -262,7 +265,8 @@
|
|
|
262
265
|
|
|
263
266
|
/* Both arrangements are drawn; the bar's width says which one shows. */
|
|
264
267
|
.crewlet-artifact-bar__narrow,
|
|
265
|
-
.crewlet-artifact-bar__tight
|
|
268
|
+
.crewlet-artifact-bar__tight,
|
|
269
|
+
.crewlet-artifact-bar__word-short {
|
|
266
270
|
display: none;
|
|
267
271
|
}
|
|
268
272
|
|
|
@@ -309,6 +313,39 @@
|
|
|
309
313
|
display: inline-flex;
|
|
310
314
|
}
|
|
311
315
|
|
|
316
|
+
/* A PRIMARY ACTION TAKES ITS SHORT WORD, where it has one, so "Create and
|
|
317
|
+
ask SRE Lead" does not push the title out of a phone's bar. */
|
|
318
|
+
.crewlet-artifact-bar__word-full {
|
|
319
|
+
display: none;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.crewlet-artifact-bar__word-short {
|
|
323
|
+
display: inline;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/* THE STATUS GIVES WAY BEFORE THE TITLE: the end may shrink, and the
|
|
327
|
+
status is the part of it that does, cut to an ellipsis rather than drawn
|
|
328
|
+
over the title. Its words stay whole for a screen reader. */
|
|
329
|
+
.crewlet-artifact-bar__end {
|
|
330
|
+
flex: 0 1 auto;
|
|
331
|
+
min-width: 0;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.crewlet-artifact-bar__end > * {
|
|
335
|
+
flex: none;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.crewlet-artifact-bar__end > .crewlet-artifact-bar__status {
|
|
339
|
+
display: block;
|
|
340
|
+
flex: 0 1 auto;
|
|
341
|
+
min-width: 0;
|
|
342
|
+
max-width: 30cqi;
|
|
343
|
+
margin-inline-end: var(--spacing-1);
|
|
344
|
+
overflow: hidden;
|
|
345
|
+
text-overflow: ellipsis;
|
|
346
|
+
white-space: nowrap;
|
|
347
|
+
}
|
|
348
|
+
|
|
312
349
|
/* The views have folded, so there is nothing to centre: the title takes
|
|
313
350
|
the room. */
|
|
314
351
|
.crewlet-artifact-bar__row--centred .crewlet-artifact-bar__end {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import '../ArtifactKindIllustration/ArtifactKinds.css';
|
|
1
2
|
import './ArtifactCard.css';
|
|
2
3
|
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from './ArtifactCard.js';
|
|
3
4
|
export type { ArtifactAccess, ArtifactCardLabels, ArtifactCardProps, ArtifactCardSize } from './ArtifactCard.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-
|
|
1
|
+
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-7UYONN6K.js';
|
|
2
2
|
import '../chunk-TEUQWOWZ.js';
|
|
3
3
|
import '../chunk-CI3VPIJN.js';
|
|
4
4
|
import '../chunk-3CZ7XAVY.js';
|
|
5
5
|
import '../chunk-EUCC37WY.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-W7QBBKUE.js';
|
|
7
7
|
import '../chunk-ACA27MZH.js';
|
|
8
8
|
import '../chunk-AV2DXAEL.js';
|
|
9
9
|
import '../chunk-5AQBPHZD.js';
|
|
@@ -119,7 +119,12 @@
|
|
|
119
119
|
* A SOFT PANE WITH A GENEROUS CORNER. The card is the card rung with its
|
|
120
120
|
* hairline, rounded a step past a plain card's because the preview inside it
|
|
121
121
|
* is a picture, and a picture in a tight corner reads as a screenshot pasted
|
|
122
|
-
* into a box.
|
|
122
|
+
* into a box.
|
|
123
|
+
*
|
|
124
|
+
* HOVER IS A STEP, NEVER A MOVE: the hairline darkens and a hairline shadow
|
|
125
|
+
* settles under the card, quickly and with the standard ease. A card that rose
|
|
126
|
+
* and cast a wide shadow made a gallery ripple as the pointer crossed it, and
|
|
127
|
+
* the preview inside it never moves.
|
|
123
128
|
*/
|
|
124
129
|
.crewlet-artifact-card--card {
|
|
125
130
|
position: relative;
|
|
@@ -130,15 +135,13 @@
|
|
|
130
135
|
border-radius: var(--radius-xl);
|
|
131
136
|
background: var(--color-surface-subtle);
|
|
132
137
|
transition:
|
|
133
|
-
border-color var(--motion-duration-
|
|
134
|
-
box-shadow var(--motion-duration-
|
|
135
|
-
transform var(--motion-duration-base) var(--motion-easing-out);
|
|
138
|
+
border-color var(--motion-duration-fast) var(--motion-easing-out),
|
|
139
|
+
box-shadow var(--motion-duration-fast) var(--motion-easing-out);
|
|
136
140
|
}
|
|
137
141
|
|
|
138
142
|
.crewlet-artifact-card--card:hover {
|
|
139
143
|
border-color: var(--color-border-hover);
|
|
140
|
-
box-shadow: var(--shadow-
|
|
141
|
-
transform: translateY(-1px);
|
|
144
|
+
box-shadow: var(--shadow-xs);
|
|
142
145
|
}
|
|
143
146
|
|
|
144
147
|
.crewlet-artifact-card--card:has(.crewlet-artifact-card__link:focus-visible) {
|
|
@@ -178,7 +181,7 @@
|
|
|
178
181
|
|
|
179
182
|
.crewlet-artifact-card--card .crewlet-artifact-card__body {
|
|
180
183
|
gap: var(--spacing-1);
|
|
181
|
-
padding: 0 var(--spacing-
|
|
184
|
+
padding: 0 var(--spacing-4) var(--spacing-4);
|
|
182
185
|
}
|
|
183
186
|
|
|
184
187
|
/*
|
|
@@ -193,19 +196,19 @@
|
|
|
193
196
|
align-items: center;
|
|
194
197
|
justify-content: center;
|
|
195
198
|
align-self: flex-start;
|
|
196
|
-
width:
|
|
197
|
-
height:
|
|
198
|
-
margin-top: -
|
|
199
|
+
width: 32px;
|
|
200
|
+
height: 32px;
|
|
201
|
+
margin-top: -18px;
|
|
199
202
|
margin-bottom: var(--spacing-2);
|
|
200
203
|
border: 1px solid var(--color-border-default);
|
|
201
|
-
border-radius: var(--radius-
|
|
204
|
+
border-radius: var(--radius-md);
|
|
202
205
|
background: var(--color-surface-background);
|
|
203
206
|
box-shadow: var(--shadow-sm);
|
|
204
207
|
color: var(--crewlet-kind-ink, var(--color-text-secondary));
|
|
205
208
|
}
|
|
206
209
|
|
|
207
210
|
.crewlet-artifact-card--card .crewlet-artifact-card__title {
|
|
208
|
-
font-size: var(--font-size-
|
|
211
|
+
font-size: var(--font-size-md);
|
|
209
212
|
font-weight: var(--font-weight-medium);
|
|
210
213
|
line-height: 1.35;
|
|
211
214
|
}
|
|
@@ -274,10 +277,6 @@
|
|
|
274
277
|
.crewlet-artifact-card__actions {
|
|
275
278
|
transition: none;
|
|
276
279
|
}
|
|
277
|
-
|
|
278
|
-
.crewlet-artifact-card--card:hover {
|
|
279
|
-
transform: none;
|
|
280
|
-
}
|
|
281
280
|
}
|
|
282
281
|
|
|
283
282
|
.crewlet-artifact-card--skeleton {
|
|
@@ -35,6 +35,19 @@ export interface ArtifactKindTileProps {
|
|
|
35
35
|
label: string;
|
|
36
36
|
/** Where starting one goes. Left out with `disabledReason`, the tile starts nothing. */
|
|
37
37
|
href?: string | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* What a press does, for a tile that starts something in place rather than
|
|
40
|
+
* going somewhere (a create page's starting layouts): the tile is then a
|
|
41
|
+
* button. `href` wins where both are given.
|
|
42
|
+
*/
|
|
43
|
+
onSelect?: (() => void) | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Drawn on the kind's ground in place of its drawing: a picture of this
|
|
46
|
+
* particular starting point, such as a design layout's schematic.
|
|
47
|
+
*/
|
|
48
|
+
face?: ReactNode;
|
|
49
|
+
/** One quiet line under the name saying what the tile starts: "3 boards". */
|
|
50
|
+
detail?: ReactNode;
|
|
38
51
|
/** A short tag after the name ("New", "Beta"), for a kind that is genuinely new. */
|
|
39
52
|
badge?: string | undefined;
|
|
40
53
|
/** Why this reader cannot start one. The tile stays focusable and says so. */
|
|
@@ -50,4 +63,4 @@ export interface ArtifactKindTileProps {
|
|
|
50
63
|
* through it by keyboard hears why (`disabledReason`) rather than finding a
|
|
51
64
|
* kind missing.
|
|
52
65
|
*/
|
|
53
|
-
export declare function ArtifactKindTile({ kind, label, href, badge, disabledReason, className }: ArtifactKindTileProps): import("react").JSX.Element;
|
|
66
|
+
export declare function ArtifactKindTile({ kind, label, href, onSelect, face, detail, badge, disabledReason, className, }: ArtifactKindTileProps): import("react").JSX.Element;
|
package/dist/{ArtifactKindIllustration-4NG6IE3C.css → ArtifactKindIllustration-5FPRJQ3P.css}
RENAMED
|
@@ -2,17 +2,11 @@
|
|
|
2
2
|
* A kind's drawing, its tinted ground and the Make something new tile.
|
|
3
3
|
*
|
|
4
4
|
* Every colour is the kind's token, `--color-artifact-kind-<kind>` and its
|
|
5
|
-
* Fill and Line steps, set once per kind on `--crewlet-kind-*`
|
|
6
|
-
* every rule below, so the drawing, the
|
|
7
|
-
* with the theme.
|
|
5
|
+
* Fill and Line steps, set once per kind on `--crewlet-kind-*`
|
|
6
|
+
* (`ArtifactKinds.css`) and read by every rule below, so the drawing, the
|
|
7
|
+
* ground and the tile repaint together with the theme.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
.crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); }
|
|
11
|
-
.crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); }
|
|
12
|
-
.crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); }
|
|
13
|
-
.crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); }
|
|
14
|
-
.crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); }
|
|
15
|
-
.crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); }
|
|
16
10
|
|
|
17
11
|
/* ---- the drawing ---- */
|
|
18
12
|
|
|
@@ -135,9 +129,7 @@
|
|
|
135
129
|
border: 1px solid var(--color-border-default);
|
|
136
130
|
border-radius: var(--radius-2xl);
|
|
137
131
|
background: var(--color-surface-subtle);
|
|
138
|
-
transition:
|
|
139
|
-
border-color var(--motion-duration-base) var(--motion-easing-out),
|
|
140
|
-
box-shadow var(--motion-duration-base) var(--motion-easing-out);
|
|
132
|
+
transition: border-color var(--motion-duration-fast) var(--motion-easing-out);
|
|
141
133
|
}
|
|
142
134
|
|
|
143
135
|
.crewlet-kind-tile__ground {
|
|
@@ -146,10 +138,6 @@
|
|
|
146
138
|
overflow: hidden;
|
|
147
139
|
}
|
|
148
140
|
|
|
149
|
-
.crewlet-kind-tile__ground > .crewlet-kind-illustration {
|
|
150
|
-
transition: transform var(--motion-duration-base) var(--motion-easing-out);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
141
|
.crewlet-kind-tile__label {
|
|
154
142
|
display: flex;
|
|
155
143
|
align-items: center;
|
|
@@ -177,12 +165,35 @@
|
|
|
177
165
|
font-weight: var(--font-weight-medium);
|
|
178
166
|
}
|
|
179
167
|
|
|
180
|
-
|
|
181
|
-
|
|
168
|
+
/* A tile that starts something in place is a button, drawn as the link is. */
|
|
169
|
+
.crewlet-kind-tile--button {
|
|
170
|
+
/* A button shrinks to its content where a link in a grid cell fills it. */
|
|
171
|
+
width: 100%;
|
|
172
|
+
padding: 0;
|
|
173
|
+
border: 0;
|
|
174
|
+
background: none;
|
|
175
|
+
font: inherit;
|
|
176
|
+
text-align: start;
|
|
177
|
+
cursor: pointer;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* What the tile starts, under its name, in the quiet ink. */
|
|
181
|
+
.crewlet-kind-tile__detail {
|
|
182
|
+
margin-top: calc(-1 * var(--spacing-1));
|
|
183
|
+
padding-inline: var(--spacing-1);
|
|
184
|
+
overflow: hidden;
|
|
185
|
+
color: var(--color-text-tertiary);
|
|
186
|
+
font-size: var(--font-size-compact);
|
|
187
|
+
line-height: 1.3;
|
|
188
|
+
text-overflow: ellipsis;
|
|
189
|
+
white-space: nowrap;
|
|
182
190
|
}
|
|
183
191
|
|
|
184
|
-
|
|
185
|
-
|
|
192
|
+
/* HOVER IS THE FRAME'S STEP ALONE: the drawing inside stays still, as a
|
|
193
|
+
card's preview does, so a row of tiles never ripples under the pointer. */
|
|
194
|
+
a.crewlet-kind-tile:hover .crewlet-kind-tile__frame,
|
|
195
|
+
.crewlet-kind-tile--button:hover .crewlet-kind-tile__frame {
|
|
196
|
+
border-color: var(--color-border-hover);
|
|
186
197
|
}
|
|
187
198
|
|
|
188
199
|
.crewlet-kind-tile:focus-visible .crewlet-kind-tile__frame {
|
|
@@ -200,12 +211,7 @@ a.crewlet-kind-tile:hover .crewlet-kind-tile__ground > .crewlet-kind-illustratio
|
|
|
200
211
|
}
|
|
201
212
|
|
|
202
213
|
@media (prefers-reduced-motion: reduce) {
|
|
203
|
-
.crewlet-kind-tile__frame
|
|
204
|
-
.crewlet-kind-tile__ground > .crewlet-kind-illustration {
|
|
214
|
+
.crewlet-kind-tile__frame {
|
|
205
215
|
transition: none;
|
|
206
216
|
}
|
|
207
|
-
|
|
208
|
-
a.crewlet-kind-tile:hover .crewlet-kind-tile__ground > .crewlet-kind-illustration {
|
|
209
|
-
transform: none;
|
|
210
|
-
}
|
|
211
217
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A kind's colours, set once per kind on `--crewlet-kind-*` by its class
|
|
3
|
+
* (`crewlet-kind--<kind>`): the hue, its Fill and Line steps and the ink a
|
|
4
|
+
* glyph is drawn in. Every surface that tints by kind reads these, so a kind
|
|
5
|
+
* glyph in a bar, a card's badge and a Make row's tile repaint together with
|
|
6
|
+
* the theme, and no surface spells a kind's colour of its own. A sheet of
|
|
7
|
+
* its own, imported by each surface that tints, because the glyph's module
|
|
8
|
+
* carries no stylesheet (a frame that draws one glyph takes nothing else).
|
|
9
|
+
*/
|
|
10
|
+
.crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); }
|
|
11
|
+
.crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); }
|
|
12
|
+
.crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); }
|
|
13
|
+
.crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); }
|
|
14
|
+
.crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); }
|
|
15
|
+
.crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { AvatarPicker } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { AvatarPicker } from '../chunk-FJJHD73S.js';
|
|
2
|
+
import '../chunk-SUXP4OBT.js';
|
|
3
3
|
import '../chunk-K3IJQNB7.js';
|
|
4
4
|
import '../chunk-YEVG2X5R.js';
|
|
5
5
|
import '../chunk-AYKXMIOR.js';
|
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
* click on a board or a note selects it, a click on the field clears it, and
|
|
16
16
|
* the pointer is the arrow. Hand (`H`, or Space held) pans whatever is under
|
|
17
17
|
* the pointer, boards included, with the open hand. An editable canvas that
|
|
18
|
-
* can create
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* can create boards adds Frame (`F`): a click on the field places a board
|
|
19
|
+
* there, selected, and hands back the Move tool. One that can create notes
|
|
20
|
+
* adds Text (`T`) and Sticky (`S`): a click on the field places one there,
|
|
21
|
+
* opens it for typing, and hands back the Move tool. The pointer is always
|
|
22
|
+
* the tool's (the Canvas cursors), and a pan in progress is always the closed
|
|
23
|
+
* hand.
|
|
22
24
|
*
|
|
23
25
|
* A PAGE INSIDE A BOARD NEVER TAKES THE CANVAS'S POINTER BY SURPRISE. A live
|
|
24
26
|
* board is covered by a shield that pans the canvas like the field around it;
|
|
@@ -32,7 +34,8 @@
|
|
|
32
34
|
* own paper or its handle, retyped on a double-click, and deleted with Delete
|
|
33
35
|
* while selected. Each finished gesture is reported once, with whole canvas
|
|
34
36
|
* pixels, and the caller decides what a change is (for a design, a new
|
|
35
|
-
* version of its canvas).
|
|
37
|
+
* version of its canvas). Delete removes a selected note, and a selected
|
|
38
|
+
* board where the caller removes boards (`onBoardRemove`).
|
|
36
39
|
*
|
|
37
40
|
* HOVER AND SELECTION ARE OUTLINES IN THE ACCENT, at one screen pixel and two,
|
|
38
41
|
* over a board's own hairline edge; hovering a board's name outlines its board,
|
|
@@ -125,18 +128,21 @@ export interface CanvasBoardLabels {
|
|
|
125
128
|
/** Each tool's name. */
|
|
126
129
|
moveTool: string;
|
|
127
130
|
handTool: string;
|
|
131
|
+
frameTool: string;
|
|
128
132
|
textTool: string;
|
|
129
133
|
stickyTool: string;
|
|
130
134
|
}
|
|
131
135
|
/**
|
|
132
|
-
* The tools a board canvas offers. Move and Hand always;
|
|
133
|
-
*
|
|
136
|
+
* The tools a board canvas offers. Move and Hand always; Frame only where a
|
|
137
|
+
* person may edit and the caller places boards (`onBoardCreate`), and Text and
|
|
138
|
+
* Sticky only where the caller places notes (`onNoteCreate`).
|
|
134
139
|
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
140
|
+
* FRAME IS FOR SHAPING A CANVAS BEFORE IT IS DRAWN: a design's create page,
|
|
141
|
+
* where a person lays out the boards an agent then fills. A published design's
|
|
142
|
+
* board is a page with a file behind it, so its viewer offers no Frame. NO
|
|
143
|
+
* COMMENT TOOL until a canvas has comments to anchor.
|
|
138
144
|
*/
|
|
139
|
-
export type CanvasBoardTool = 'move' | 'hand' | 'text' | 'sticky';
|
|
145
|
+
export type CanvasBoardTool = 'move' | 'hand' | 'frame' | 'text' | 'sticky';
|
|
140
146
|
/**
|
|
141
147
|
* The smallest zoom a board canvas fits at. A design laid out across many
|
|
142
148
|
* full-size pages is many screens wide, and every board has to be on screen
|
|
@@ -166,6 +172,18 @@ export interface CanvasBoardProps {
|
|
|
166
172
|
onNoteChange?: ((note: CanvasBoardNote) => void) | undefined;
|
|
167
173
|
/** A note was deleted. */
|
|
168
174
|
onNoteRemove?: ((id: string) => void) | undefined;
|
|
175
|
+
/**
|
|
176
|
+
* The Frame tool placed a board at a canvas point (its top left, in canvas
|
|
177
|
+
* pixels). The caller adds the board, with whatever size and name it gives
|
|
178
|
+
* new boards, and returns its id, which the canvas then selects. Absent, or
|
|
179
|
+
* on a canvas that is not editable, the tool is not offered.
|
|
180
|
+
*/
|
|
181
|
+
onBoardCreate?: ((at: CanvasPoint) => string | undefined) | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* Delete pressed on a selected board. Absent, a board is not deleted from
|
|
184
|
+
* the canvas.
|
|
185
|
+
*/
|
|
186
|
+
onBoardRemove?: ((id: string) => void) | undefined;
|
|
169
187
|
/**
|
|
170
188
|
* The Text or Sticky tool placed a note at a canvas point (its top left, in
|
|
171
189
|
* canvas pixels). The caller adds the note, with whatever size and starting
|
|
@@ -212,4 +230,4 @@ export declare function boardRoom(width: number, height: number): {
|
|
|
212
230
|
};
|
|
213
231
|
/** The narrowest a board is drawn, in screen pixels, with its name above it. */
|
|
214
232
|
export declare const BOARD_TITLE_MIN_WIDTH = 40;
|
|
215
|
-
export declare function CanvasBoard({ label, boards, notes, renderBoard, maxLive, minLiveWidth, editable, minSide, maxSide, onBoardChange, onNoteChange, onNoteRemove, onNoteCreate, onOpen, onActivate, selected: heldSelection, onSelectedChange, controlsExtra, toolbar, labels, canvasLabels, canvasRef, className, }: CanvasBoardProps): import("react").JSX.Element;
|
|
233
|
+
export declare function CanvasBoard({ label, boards, notes, renderBoard, maxLive, minLiveWidth, editable, minSide, maxSide, onBoardChange, onNoteChange, onNoteRemove, onNoteCreate, onBoardCreate, onBoardRemove, onOpen, onActivate, selected: heldSelection, onSelectedChange, controlsExtra, toolbar, labels, canvasLabels, canvasRef, className, }: CanvasBoardProps): import("react").JSX.Element;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { BOARD_TITLE_MIN_WIDTH, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardRoom, liveBoards, titleSize } from '../chunk-
|
|
1
|
+
export { BOARD_TITLE_MIN_WIDTH, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardRoom, liveBoards, titleSize } from '../chunk-E35CMI5D.js';
|
|
2
2
|
import '../chunk-5SZGKSGL.js';
|
|
3
3
|
import '../chunk-3Y56GQPM.js';
|
|
4
4
|
import '../chunk-PGRPNDWM.js';
|
package/dist/ChangeMark/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ChangeMark } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ChangeMark } from '../chunk-47JQAGRV.js';
|
|
2
|
+
import '../chunk-LFSIKGRQ.js';
|
|
3
3
|
import '../chunk-Z7JYG5TF.js';
|
|
4
4
|
import '../chunk-AYKXMIOR.js';
|
|
5
5
|
import '../chunk-6ZJ3N7QI.js';
|
|
@@ -5,6 +5,11 @@ export interface ChoiceListOption {
|
|
|
5
5
|
value: string;
|
|
6
6
|
/** What the choice is, in a few words. */
|
|
7
7
|
label: ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* A picture of the choice, drawn between the radio and the words: an
|
|
10
|
+
* agent's character, a kind's glyph. Decorative; the label names it.
|
|
11
|
+
*/
|
|
12
|
+
media?: ReactNode;
|
|
8
13
|
/** One line under the label saying what choosing it means. */
|
|
9
14
|
detail?: ReactNode;
|
|
10
15
|
/** A short word at the row's end, such as "Recommended". */
|
|
@@ -34,7 +39,8 @@ export interface ChoiceListProps {
|
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
36
41
|
* One answer from a short list, each choice a row with its label, a line of
|
|
37
|
-
* detail and an optional tag, in one bordered
|
|
42
|
+
* detail, an optional picture (`media`) and an optional tag, in one bordered
|
|
43
|
+
* box.
|
|
38
44
|
*
|
|
39
45
|
* NATIVE RADIOS, so the arrow keys move the choice and Tab leaves the group as
|
|
40
46
|
* the platform does, and every row is its radio's label, so the whole row
|
package/dist/ChoiceList/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ChoiceList } from '../chunk-
|
|
1
|
+
export { ChoiceList } from '../chunk-ZU3DUXD2.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* accent's soft fill, so the answer reads at a glance without the radio.
|
|
5
5
|
*/
|
|
6
6
|
.crewlet-choice-list {
|
|
7
|
+
/* The platform's radio, sized here so a panel can line up with the text beside it. */
|
|
8
|
+
--crewlet-choice-list-radio-size: 13px;
|
|
7
9
|
display: grid;
|
|
8
10
|
gap: var(--spacing-1);
|
|
9
11
|
padding: var(--spacing-1);
|
|
@@ -43,6 +45,22 @@
|
|
|
43
45
|
transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
44
46
|
}
|
|
45
47
|
|
|
48
|
+
/* A choice with a picture: the radio, the picture, the words, the tag. The
|
|
49
|
+
picture centres on the label and its detail together. */
|
|
50
|
+
.crewlet-choice-list__row.has-media {
|
|
51
|
+
grid-template-columns: auto auto minmax(0, 1fr) auto;
|
|
52
|
+
align-items: center;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.crewlet-choice-list__row.has-media .crewlet-choice-list__radio {
|
|
56
|
+
margin-top: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.crewlet-choice-list__media {
|
|
60
|
+
display: inline-flex;
|
|
61
|
+
flex: none;
|
|
62
|
+
}
|
|
63
|
+
|
|
46
64
|
.crewlet-choice-list__row:hover {
|
|
47
65
|
background: var(--color-surface-hover);
|
|
48
66
|
}
|
|
@@ -56,6 +74,8 @@
|
|
|
56
74
|
}
|
|
57
75
|
|
|
58
76
|
.crewlet-choice-list__radio {
|
|
77
|
+
width: var(--crewlet-choice-list-radio-size);
|
|
78
|
+
height: var(--crewlet-choice-list-radio-size);
|
|
59
79
|
margin: 3px 0 0;
|
|
60
80
|
accent-color: var(--color-brand-accent);
|
|
61
81
|
cursor: inherit;
|
|
@@ -95,6 +115,25 @@
|
|
|
95
115
|
white-space: nowrap;
|
|
96
116
|
}
|
|
97
117
|
|
|
118
|
+
/* A SELECTED CHOICE'S PANEL is part of the choice: it continues the row's
|
|
119
|
+
fill under it, and its content starts where the label does, not under the
|
|
120
|
+
radio. */
|
|
121
|
+
.crewlet-choice-list__item:has(> .crewlet-choice-list__panel) {
|
|
122
|
+
gap: 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.crewlet-choice-list__item:has(> .crewlet-choice-list__panel) > .crewlet-choice-list__row {
|
|
126
|
+
border-end-start-radius: 0;
|
|
127
|
+
border-end-end-radius: 0;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.crewlet-choice-list__panel {
|
|
131
|
+
padding: var(--spacing-1) var(--spacing-2) var(--spacing-3) calc(var(--spacing-2) + var(--crewlet-choice-list-radio-size) + var(--spacing-3));
|
|
132
|
+
border-end-start-radius: var(--radius-sm);
|
|
133
|
+
border-end-end-radius: var(--radius-sm);
|
|
134
|
+
background: var(--color-brand-accent-soft);
|
|
135
|
+
}
|
|
136
|
+
|
|
98
137
|
.crewlet-choice-list__footer {
|
|
99
138
|
display: flex;
|
|
100
139
|
justify-content: flex-end;
|