@crewlethq/ui 0.75.3 → 0.76.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.
- package/README.md +15 -1
- package/dist/AgentHandoffPanel/index.js +4 -4
- package/dist/AppShell/index.js +3 -3
- package/dist/ArrangeList/index.js +4 -4
- package/dist/ArtifactBar/index.js +6 -6
- package/dist/ArtifactCard/index.js +4 -4
- package/dist/ArtifactPanel/index.js +1 -1
- package/dist/AttachmentChip/index.js +3 -3
- package/dist/AvatarPicker/index.js +7 -7
- package/dist/BriefCard/index.js +4 -4
- package/dist/Canvas/index.js +2 -2
- package/dist/CanvasBoard/index.js +4 -4
- package/dist/CanvasToolbar/index.js +3 -3
- package/dist/ChangeList/index.js +3 -3
- package/dist/Checkbox/index.js +3 -3
- package/dist/ChoiceButtons/ChoiceButtons.d.ts +10 -3
- package/dist/ChoiceButtons/index.js +1 -1
- package/dist/{ChoiceButtons-3MJQAHHA.css → ChoiceButtons-T3GG6VLG.css} +44 -48
- package/dist/ChoiceCards/ChoiceCards.d.ts +80 -0
- package/dist/ChoiceCards/index.d.ts +3 -0
- package/dist/ChoiceCards/index.js +3 -0
- package/dist/ChoiceCards-HAGJMK6Q.css +318 -0
- package/dist/ChoiceList/ChoiceList.d.ts +10 -1
- package/dist/ChoiceList/index.js +1 -1
- package/dist/{ChoiceList-Q772QLFX.css → ChoiceList-JN4PPNFW.css} +22 -1
- package/dist/ColorField/index.js +3 -3
- package/dist/Combobox/index.js +3 -3
- package/dist/CommandPalette/index.js +3 -3
- package/dist/CommentThread/index.js +5 -5
- package/dist/Composer/index.js +3 -3
- package/dist/ConfirmField/index.js +3 -3
- package/dist/ContrastBadge/index.js +3 -3
- package/dist/ContrastHelp/index.js +5 -5
- package/dist/DataGrid/index.js +4 -4
- package/dist/DataTable/index.js +5 -5
- package/dist/DataView/index.js +8 -8
- package/dist/DatasetSource/index.js +3 -3
- package/dist/DateTimePicker/index.js +2 -2
- package/dist/DeepWorkCard/index.js +5 -5
- package/dist/DocTabsEditor/index.js +4 -4
- package/dist/EditingStatus/index.js +2 -2
- package/dist/{Editor-OLFAUSUA.js → Editor-BXOWAV46.js} +3 -3
- package/dist/EntityList/index.js +4 -4
- package/dist/HuePicker/index.js +6 -6
- package/dist/InlineEditor/index.js +3 -3
- package/dist/Input/index.js +2 -2
- package/dist/{Input-GEFFMKBS.css → Input-WSMB7JG2.css} +6 -1
- package/dist/LinkInterstitial/index.js +1 -1
- package/dist/ListInput/index.js +3 -3
- package/dist/LogoSlot/index.js +4 -4
- package/dist/MarkdownEditor/index.js +6 -6
- package/dist/Menu/index.js +2 -2
- package/dist/MergeConflicts/index.js +6 -6
- package/dist/Modal/index.js +1 -1
- package/dist/OpenInAppCard/index.js +5 -5
- package/dist/OrgTable/index.js +1 -1
- package/dist/PresenterView/index.js +1 -1
- package/dist/PricingCard/index.js +3 -3
- package/dist/PrincipalPicker/index.js +4 -4
- package/dist/ProposalCard/index.js +8 -8
- package/dist/RefusalCard/index.js +4 -4
- package/dist/ResultTableCard/index.js +4 -4
- package/dist/ReviewList/index.js +3 -3
- package/dist/RichEditor/index.js +1 -1
- package/dist/RunChip/index.js +3 -3
- package/dist/SegmentedControl/index.js +5 -5
- package/dist/SettingsTable/index.js +2 -2
- package/dist/SetupWizard/SetupWizard.d.ts +25 -7
- package/dist/SetupWizard/index.js +3 -3
- package/dist/{SetupWizard-WDOFFNIM.css → SetupWizard-2SUMQEWU.css} +126 -4
- package/dist/ShareDialog/index.js +2 -2
- package/dist/SheetColumnEditor/index.js +9 -9
- package/dist/SheetGrid/index.js +5 -5
- package/dist/SidePanel/index.js +1 -1
- package/dist/SlideFilmstrip/index.js +3 -3
- package/dist/StatusCard/index.js +3 -3
- package/dist/StatusDot/StatusDot.d.ts +7 -0
- package/dist/StatusDot/index.js +1 -1
- package/dist/{StatusDot-7OMCQCZF.css → StatusDot-FJND3CZY.css} +9 -2
- package/dist/Stepper/index.js +2 -2
- package/dist/{Stepper-32INSYF7.css → Stepper-YQBNYCIS.css} +31 -8
- package/dist/Switcher/index.js +3 -3
- package/dist/TableCells/index.js +3 -3
- package/dist/Tabs/index.js +4 -4
- package/dist/Tag/index.js +2 -2
- package/dist/TagsInput/index.js +4 -4
- package/dist/ThemeGallery/index.js +3 -3
- package/dist/ThemeSwitcher/index.js +6 -6
- package/dist/TimeRangePicker/index.js +7 -7
- package/dist/TimeWindowPicker/index.js +3 -3
- package/dist/TreeCanvas/index.js +3 -3
- package/dist/TreeGrid/index.js +1 -1
- package/dist/ValueField/index.js +4 -4
- package/dist/VersionCompare/index.js +6 -6
- package/dist/{chunk-3N36CYTU.js → chunk-2PIH6JHJ.js} +1 -1
- package/dist/{chunk-HDF4OGVD.js → chunk-2STOSJT3.js} +3 -3
- package/dist/{chunk-P64MIA7C.js → chunk-3JXX5S3Z.js} +2 -2
- package/dist/{chunk-UHW7EXWQ.js → chunk-45M73G5A.js} +1 -1
- package/dist/{chunk-5JPID3YI.js → chunk-57AKYFML.js} +1 -1
- package/dist/{chunk-4KSCGXLJ.js → chunk-5BOFC5OP.js} +2 -2
- package/dist/{chunk-SAUIIBNA.js → chunk-5CEQ3HLH.js} +1 -1
- package/dist/{chunk-VLGGLLKH.js → chunk-624X3RVA.js} +1 -1
- package/dist/{chunk-LWFOX3PB.js → chunk-63GBSOLU.js} +1 -1
- package/dist/{chunk-IQQSMK4E.js → chunk-6EWNMSS4.js} +1 -1
- package/dist/{chunk-7IW3P6FH.js → chunk-6G6WHTC7.js} +1 -1
- package/dist/{chunk-JXJNX7QQ.js → chunk-6LXS3X7A.js} +1 -1
- package/dist/{chunk-NQABJAUY.js → chunk-6RW2MUTY.js} +15 -8
- package/dist/{chunk-ZD52GKKS.js → chunk-6THG44LI.js} +2 -2
- package/dist/{chunk-KWLH45YC.js → chunk-7PJFUQMY.js} +1 -1
- package/dist/{chunk-5M64E3HV.js → chunk-ADGNISEI.js} +2 -2
- package/dist/{chunk-WQRSZMN4.js → chunk-BBD7PTBG.js} +1 -1
- package/dist/{chunk-PYJLHHYF.js → chunk-BKXUZCZX.js} +1 -1
- package/dist/{chunk-6RTYHTT7.js → chunk-CFTBESST.js} +1 -1
- package/dist/{chunk-WIATRXEJ.js → chunk-CYQBDZ6M.js} +1 -1
- package/dist/{chunk-ZKIEOWR6.js → chunk-D7G2QGET.js} +1 -1
- package/dist/{chunk-K2RJO72E.js → chunk-DSMQTED5.js} +3 -3
- package/dist/{chunk-OXEWUAND.js → chunk-E35HYQMK.js} +1 -1
- package/dist/{chunk-DCQ2VTBB.js → chunk-FB3TCNQP.js} +2 -2
- package/dist/{chunk-ODAZIKZF.js → chunk-FQI62PIZ.js} +2 -2
- package/dist/{chunk-IU5J6BY5.js → chunk-GHQG4VZA.js} +3 -3
- package/dist/{chunk-PIAGTZY3.js → chunk-GPFYITOF.js} +1 -1
- package/dist/{chunk-R6K62EXV.js → chunk-H22SR76M.js} +1 -1
- package/dist/{chunk-IO374IX6.js → chunk-HQOEAUDJ.js} +1 -1
- package/dist/{chunk-HKSQ7QHF.js → chunk-HWPP22XG.js} +4 -4
- package/dist/{chunk-ILF6KVNK.js → chunk-HZDI2CCS.js} +2 -2
- package/dist/{chunk-ZSRRCXUD.js → chunk-I3G5FJ54.js} +1 -1
- package/dist/{chunk-5NFYTQK2.js → chunk-IPBSCJIZ.js} +3 -3
- package/dist/{chunk-GAT75MN4.js → chunk-IQMWMT4V.js} +2 -2
- package/dist/{chunk-GT2OG2XM.js → chunk-JMTBK55P.js} +2 -2
- package/dist/{chunk-VDIKDCNE.js → chunk-JQEXAH7G.js} +1 -1
- package/dist/{chunk-SQ7GYC4K.js → chunk-KL6A7JGH.js} +1 -1
- package/dist/{chunk-TQCSQRKQ.js → chunk-LCZULGMB.js} +1 -1
- package/dist/{chunk-EAR2F5OA.js → chunk-LMQG3VPG.js} +1 -1
- package/dist/chunk-MKFEVHSR.js +83 -0
- package/dist/{chunk-W7OJKHVR.js → chunk-MP7DGKB6.js} +1 -1
- package/dist/{chunk-DO4J4TBZ.js → chunk-NKBKQEKS.js} +1 -1
- package/dist/{chunk-USO73ZJM.js → chunk-OCGIQGYJ.js} +2 -2
- package/dist/{chunk-5U2CYMFU.js → chunk-OOLMTUCO.js} +1 -1
- package/dist/{chunk-YUHKRRWO.js → chunk-OWHETZIU.js} +1 -1
- package/dist/{chunk-4OX2WVXO.js → chunk-PMBJMNBX.js} +1 -1
- package/dist/{chunk-OXB45TG2.js → chunk-RIAPCEB5.js} +2 -2
- package/dist/{chunk-HJBHP66O.js → chunk-RJWO2PC5.js} +2 -2
- package/dist/{chunk-NTQPJJAN.js → chunk-RTMNULTL.js} +1 -1
- package/dist/{chunk-C3SCONKY.js → chunk-RVSNBUIU.js} +4 -2
- package/dist/{chunk-SRDZVY5M.js → chunk-SK5SLGZH.js} +1 -1
- package/dist/{chunk-CMTLQOJY.js → chunk-T24HBEU6.js} +1 -1
- package/dist/{chunk-EEVATVP5.js → chunk-TJIBTHWJ.js} +2 -2
- package/dist/{chunk-GAUBP247.js → chunk-TKUAGWNR.js} +1 -1
- package/dist/{chunk-HMOGLAXY.js → chunk-TPCBPGSB.js} +1 -1
- package/dist/{chunk-CFXDWGQI.js → chunk-TPIMOGOZ.js} +1 -1
- package/dist/{chunk-HDLUG3MA.js → chunk-UY3FWQWG.js} +2 -2
- package/dist/{chunk-RQHN4J5P.js → chunk-UYF2B2TH.js} +1 -1
- package/dist/{chunk-I5OIKDX2.js → chunk-VERJCAJ4.js} +1 -1
- package/dist/{chunk-PKVWCKS2.js → chunk-VG3SIJ3M.js} +1 -1
- package/dist/{chunk-BAHLBMCH.js → chunk-WK4FQPYW.js} +2 -2
- package/dist/{chunk-4RKTZSEW.js → chunk-WL4TC4YZ.js} +1 -1
- package/dist/{chunk-SBHAKX2T.js → chunk-X5FKORDM.js} +72 -9
- package/dist/{chunk-4DL2BQJE.js → chunk-YL7AR6PR.js} +1 -1
- package/dist/{chunk-TF74KS36.js → chunk-YQDRJZ5J.js} +1 -1
- package/dist/{chunk-7OFVR7X4.js → chunk-ZKLEAK7M.js} +1 -1
- package/dist/{chunk-OUUHIA3B.js → chunk-ZMIVQGAB.js} +4 -4
- package/dist/{chunk-352FPJ2Q.js → chunk-ZW5SRQ5M.js} +1 -1
- package/dist/generated/index.d.ts +1 -0
- package/dist/generated/index.js +94 -93
- package/dist/index.js +94 -93
- package/dist/styles.css +565 -70
- package/package.json +3 -3
- package/dist/{chunk-SWLVR54P.js → chunk-HPI5J6AR.js} +1 -1
- package/dist/{chunk-EMCVX5FY.js → chunk-OBPINJNO.js} +1 -1
- package/dist/{chunk-KNAHKQD4.js → chunk-OQG4P5KU.js} +1 -1
- /package/dist/{chunk-TWM6G2I2.js → chunk-PCBPDMNU.js} +0 -0
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
|
|
|
42
42
|
| ---- | ---------- |
|
|
43
43
|
| Actions | `Button` and `ButtonLink` (variants `primary`, `secondary`, `outline`, `ghost`, `accent`, `danger`; sizes `small`, `medium`, `large`; shapes `square`, `pill`), `IconButton`, `Menu`, `Link`, `Copyable`, `CopyButton`, `DownloadButton`, `Kbd` |
|
|
44
44
|
| Content and text | `Text` (the eight registers and `inherit`), `Prose`, `Statement`, `Document`, `DocumentTitle` and `DocumentTitleField`, the Markdown grammar (`parseMarkdown`, `parseMarkdownSpans`, `markdownInline`, `safeHref` and the line readers, with no React in it), `Highlight`, `InlineCode`, `List` and `ListItem`, `DescriptionList`, `Timeline`, `RelativeTime`, `Note`, `Divider` |
|
|
45
|
-
| Forms | `Input`, `Textarea`, `Label`, `FormField`, `FormRow`, `Checkbox`, `CheckboxGroup`, `ConfirmField`, `Select`, `Tag`, `TagsInput`, `DateTimePicker`, `TimeWindowPicker`, `TimeRangePicker`, `ImageUpload`, `CharacterPicker`, `HuePicker`, `AvatarPicker`, `FactList`, `ChoiceList`, `Composer`, `MarkdownEditor`, `RichEditor` (with `preloadRichEditor`, and the round trip `roundTripMarkdown` and `canonicalMarkdown` from `@crewlethq/ui/RichEditorMarkdown`) |
|
|
45
|
+
| Forms | `Input`, `Textarea`, `Label`, `FormField`, `FormRow`, `Checkbox`, `CheckboxGroup`, `ConfirmField`, `Select`, `Tag`, `TagsInput`, `DateTimePicker`, `TimeWindowPicker`, `TimeRangePicker`, `ImageUpload`, `CharacterPicker`, `HuePicker`, `AvatarPicker`, `FactList`, `ChoiceList`, `ChoiceCards`, `Composer`, `MarkdownEditor`, `RichEditor` (with `preloadRichEditor`, and the round trip `roundTripMarkdown` and `canonicalMarkdown` from `@crewlethq/ui/RichEditorMarkdown`) |
|
|
46
46
|
| Data display | `DataGrid` (with `useDataGridDriving`, `useAnyDataGridDriving` and `countDataGridRows`), `DataTable`, `CopyableCell`, `Table`, the read-only table cells (`TableKeyCell`, `TableNumberCell`, `TableDateCell`, `TableEntityCell`, `TableStatusCell`, `TableTagsCell`, `TableTextCell`), `StatCard`, `Meter`, `SegmentedMeter`, `Stepper`, `PricingCard`, `Avatar`, `AvatarStack`, `EntityChip`, `CodeBlock`, `QrCode`, `ObjectHeader`, `FactLine`, `SetByLine`, `Skeleton`, `Eyebrow`, `StatGroup`, `PinTile`, `IconTile`, `SettingsTable` (with `SettingsTable.Row`), `CatalogTile` |
|
|
47
47
|
| List screens | `DataView`, and its parts on their own: `DataViewToolbar`, `FilterAxisBar`, `FilterAxisChip`, `FilterPill`, plus the filter model (`filterDefsFromColumns`, `applyColumnFilters`, `filterPredicate`, `blankFilterValue`) |
|
|
48
48
|
| Feedback and overlays | `Callout`, `ConflictNote`, `EditingStatus`, `Toaster`, `Modal` (with `variant="sheet"`), `ConfirmModal`, `CommandPalette`, `Tooltip`, `Popover`, `Announcer` |
|
|
@@ -205,6 +205,20 @@ places:
|
|
|
205
205
|
- A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
|
|
206
206
|
when the content beneath it moves, and every panel anchored inside follows.
|
|
207
207
|
|
|
208
|
+
## Changes in 0.76.0
|
|
209
|
+
|
|
210
|
+
**`ChoiceCards`, choices a person compares.** One answer from a few, each a card of the same lines: a picture (`media`), the choice's name (`label`) and its `tag`; one line of `description`; and a few `facts`, one to a line, each a name and a value, with an optional `tone` drawn as a `StatusDot` beside words that say the state. Cards side by side share every line on a CSS subgrid, so their facts stand level; where subgrid is not supported each card is a plain column. A description row is held only when some card has one, and a card without one keeps it empty. `minCardWidth` is the narrowest a card stands (`md`, 20rem, the default, or `lg`, 24rem), which decides how many share a row. The radios are native, so the arrow keys move the choice; each is named by its choice and tag alone and described by the rest of the card. A card that cannot be chosen (`disabled`) stands on the page's ground with a quiet radio and a muted picture, and says why in `disabledReason`, on its last line or, with `disabledReasonAt`, in place of a fact's value, read with the fact's name. A chosen card lays the selected tint over its raised surface inside an edge in the accent's ink. Under forced colours the radio is the platform's own, the chosen card's edge the system's selection colour and an unavailable card the system's disabled ink. The types are `ChoiceCardsProps`, `ChoiceCardOption`, `ChoiceCardFact` and `ChoiceCardsMinWidth`.
|
|
211
|
+
|
|
212
|
+
**`ChoiceList` lets one choice be unavailable.** An option takes `disabled` and `disabledReason`: the choice is skipped by the arrows, keeps its words at full contrast, and gives its reason on its detail line in the warning ink, read once, as its radio's description. Element ids now follow each option's position rather than its `value`, so a value holding a space no longer breaks its radio's name.
|
|
213
|
+
|
|
214
|
+
**`SetupWizard` takes `primaryAction`, and fills its screen.** `primaryAction` is the step's primary action, last in the footer row: its box keeps one width on every step (at least 8rem), so "Create" on the last step moves nothing beside it, and on a phone it takes the whole width of the footer's second row. `footer` is now optional and holds the step's other actions. In a flex column as tall as the view (an `AppShell`'s content) the wizard grows into the room and the footer rests at the bottom on every step, a phone included. On a phone the row of steps is one row that scrolls sideways, with the current step brought to its middle (in either writing direction), an edge that hides steps faded out, and the row reachable by the keyboard and named while it overflows; a thin bar under the position line says how far along. What to change: on a phone the whole-width row now follows `primaryAction` by name rather than whichever action came last, so move the primary action from `footer` to `primaryAction`.
|
|
215
|
+
|
|
216
|
+
**`Stepper`'s pickable pill is pressed through the 24px target floor**: an invisible band of `--size-target-min` centred on the 20px pill, so the pill does not grow. The pill's height is declared once as `--crewlet-stepper-pill-height`, a supported read-only property for a layout that sizes around a pill.
|
|
217
|
+
|
|
218
|
+
**`StatusDot`'s size is `--crewlet-status-dot-size`**, declared once, a supported read-only property for a layout that centres the dot on a wrapped line by the same measure.
|
|
219
|
+
|
|
220
|
+
**A `FormField`'s `labelAction` keeps its own case and letter spacing**, rather than the label's capitals and wide tracking.
|
|
221
|
+
|
|
208
222
|
## Changes in 0.73.0
|
|
209
223
|
|
|
210
224
|
**`RecordChip`, a record named inside a sentence.** A button at the text's own size on its baseline, exactly one line of the text it sits in tall (`line-height: calc(1lh - 2px)` with its hairline, standing at the line's top so a key's mono text never moves the line), drawing the record's key in mono (`code`) or its name (`label`), with an optional kind glyph. It opens a **peek**: a `Popover` dialog named after the record (its key, then its name), with one line of context (`meta`), a body for its facts or rows (`children`) and a foot for the host's own link and downloads (`actions`). Focus moves into the peek; Escape, Tab out or a control that closes it returns focus to the chip, and a press outside closes it. A `code` chip's accessible name is the key and then the record's name ("GOP-11, Android 12 crash ..."); a `label` chip is named by its label alone, and carries its whole text as its `title`, so a pointer reader can read one cut at the line's end.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-
|
|
1
|
+
export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-57AKYFML.js';
|
|
2
2
|
import '../chunk-4MJN2KN6.js';
|
|
3
3
|
import '../chunk-WFCWPXJN.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-E35HYQMK.js';
|
|
5
5
|
import '../chunk-222VILSP.js';
|
|
6
6
|
import '../chunk-FFGEJUAP.js';
|
|
7
7
|
import '../chunk-CLJGFOTV.js';
|
|
8
8
|
import '../chunk-ANTAQAR4.js';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-FB3TCNQP.js';
|
|
10
10
|
import '../chunk-PGCLHYVP.js';
|
|
11
11
|
import '../chunk-IVTQWOXV.js';
|
|
12
12
|
import '../chunk-MLDTLZAO.js';
|
|
@@ -18,7 +18,7 @@ import '../chunk-OMV5W53A.js';
|
|
|
18
18
|
import '../chunk-2YTOOH3A.js';
|
|
19
19
|
import '../chunk-XSPCITPN.js';
|
|
20
20
|
import '../chunk-H5XTJ7GJ.js';
|
|
21
|
-
import '../chunk-NUZHC6MM.js';
|
|
22
21
|
import '../chunk-UAUP6XGK.js';
|
|
22
|
+
import '../chunk-NUZHC6MM.js';
|
|
23
23
|
import '../chunk-UT6CW3C7.js';
|
|
24
24
|
import '../chunk-ODEQTPFM.js';
|
package/dist/AppShell/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-
|
|
1
|
+
export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-UY3FWQWG.js';
|
|
2
2
|
import '../chunk-RTPQDNW3.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-OQG4P5KU.js';
|
|
4
4
|
export { RESIZE_HANDLE_LARGE_STEP, RESIZE_HANDLE_STEP, ResizeHandle, clampSize, useAppShellAside, useAppShellPeek } from '../chunk-PIYJNCN7.js';
|
|
5
5
|
import '../chunk-DGXZ635L.js';
|
|
6
6
|
import '../chunk-OMV5W53A.js';
|
|
7
7
|
import '../chunk-2YTOOH3A.js';
|
|
8
8
|
import '../chunk-XSPCITPN.js';
|
|
9
9
|
import '../chunk-H5XTJ7GJ.js';
|
|
10
|
-
import '../chunk-NUZHC6MM.js';
|
|
11
10
|
import '../chunk-UAUP6XGK.js';
|
|
11
|
+
import '../chunk-NUZHC6MM.js';
|
|
12
12
|
import '../chunk-UT6CW3C7.js';
|
|
13
13
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-
|
|
1
|
+
export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-TKUAGWNR.js';
|
|
2
2
|
import '../chunk-3XDT5ZWL.js';
|
|
3
3
|
import '../chunk-MPVMB2DV.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-LMQG3VPG.js';
|
|
5
|
+
import '../chunk-FB3TCNQP.js';
|
|
6
6
|
import '../chunk-PGCLHYVP.js';
|
|
7
7
|
import '../chunk-PQADV6P6.js';
|
|
8
8
|
import '../chunk-2G355KDJ.js';
|
|
9
9
|
import '../chunk-H5XTJ7GJ.js';
|
|
10
|
-
import '../chunk-NUZHC6MM.js';
|
|
11
10
|
import '../chunk-UAUP6XGK.js';
|
|
11
|
+
import '../chunk-NUZHC6MM.js';
|
|
12
12
|
import '../chunk-UT6CW3C7.js';
|
|
13
13
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-
|
|
1
|
+
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-IPBSCJIZ.js';
|
|
2
2
|
import '../chunk-25AZQ3GZ.js';
|
|
3
3
|
import '../chunk-I33UIUZD.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-BKXUZCZX.js';
|
|
5
|
+
import '../chunk-6THG44LI.js';
|
|
6
6
|
import '../chunk-EGMQURBR.js';
|
|
7
|
-
import '../chunk-WIATRXEJ.js';
|
|
8
7
|
import '../chunk-AVL52EME.js';
|
|
8
|
+
import '../chunk-CYQBDZ6M.js';
|
|
9
9
|
import '../chunk-RSKW25Y5.js';
|
|
10
10
|
import '../chunk-ANTAQAR4.js';
|
|
11
11
|
import '../chunk-MLDTLZAO.js';
|
|
12
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-OQG4P5KU.js';
|
|
13
13
|
import '../chunk-DGXZ635L.js';
|
|
14
14
|
import '../chunk-OMV5W53A.js';
|
|
15
15
|
import '../chunk-2YTOOH3A.js';
|
|
16
16
|
import '../chunk-XSPCITPN.js';
|
|
17
17
|
import '../chunk-H5XTJ7GJ.js';
|
|
18
|
-
import '../chunk-NUZHC6MM.js';
|
|
19
18
|
import '../chunk-UAUP6XGK.js';
|
|
19
|
+
import '../chunk-NUZHC6MM.js';
|
|
20
20
|
import '../chunk-UT6CW3C7.js';
|
|
21
21
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-
|
|
1
|
+
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-ZKLEAK7M.js';
|
|
2
2
|
import '../chunk-BRLZXYPA.js';
|
|
3
3
|
import '../chunk-N2BF272H.js';
|
|
4
4
|
import '../chunk-EJNJMHQG.js';
|
|
@@ -8,16 +8,16 @@ import '../chunk-AV2DXAEL.js';
|
|
|
8
8
|
import '../chunk-BT3GB7HC.js';
|
|
9
9
|
import '../chunk-KTIQSSME.js';
|
|
10
10
|
import '../chunk-NHLNHH4J.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-LMQG3VPG.js';
|
|
12
12
|
import '../chunk-DOY3KC6I.js';
|
|
13
13
|
export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-RSKW25Y5.js';
|
|
14
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-FB3TCNQP.js';
|
|
15
15
|
import '../chunk-PGCLHYVP.js';
|
|
16
16
|
import '../chunk-MLDTLZAO.js';
|
|
17
17
|
import '../chunk-PQADV6P6.js';
|
|
18
18
|
import '../chunk-2G355KDJ.js';
|
|
19
19
|
import '../chunk-H5XTJ7GJ.js';
|
|
20
|
-
import '../chunk-NUZHC6MM.js';
|
|
21
20
|
import '../chunk-UAUP6XGK.js';
|
|
21
|
+
import '../chunk-NUZHC6MM.js';
|
|
22
22
|
import '../chunk-UT6CW3C7.js';
|
|
23
23
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -5,7 +5,7 @@ import '../chunk-PIYJNCN7.js';
|
|
|
5
5
|
import '../chunk-OMV5W53A.js';
|
|
6
6
|
import '../chunk-2YTOOH3A.js';
|
|
7
7
|
import '../chunk-H5XTJ7GJ.js';
|
|
8
|
-
import '../chunk-NUZHC6MM.js';
|
|
9
8
|
import '../chunk-UAUP6XGK.js';
|
|
9
|
+
import '../chunk-NUZHC6MM.js';
|
|
10
10
|
import '../chunk-UT6CW3C7.js';
|
|
11
11
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ATTACHMENT_CHIP_LABELS, AttachmentChip } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { ATTACHMENT_CHIP_LABELS, AttachmentChip } from '../chunk-2PIH6JHJ.js';
|
|
2
|
+
import '../chunk-VERJCAJ4.js';
|
|
3
|
+
import '../chunk-CYQBDZ6M.js';
|
|
4
4
|
import '../chunk-XSPCITPN.js';
|
|
5
5
|
import '../chunk-UT6CW3C7.js';
|
|
6
6
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
export { AvatarPicker } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { AvatarPicker } from '../chunk-ZW5SRQ5M.js';
|
|
2
|
+
import '../chunk-SK5SLGZH.js';
|
|
3
3
|
import '../chunk-KHJIEPZV.js';
|
|
4
4
|
import '../chunk-AYKXMIOR.js';
|
|
5
5
|
import '../chunk-I22MUEG7.js';
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-BKXUZCZX.js';
|
|
7
|
+
import '../chunk-6THG44LI.js';
|
|
8
8
|
import '../chunk-EGMQURBR.js';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-CYQBDZ6M.js';
|
|
10
10
|
import '../chunk-KTIQSSME.js';
|
|
11
11
|
import '../chunk-MLDTLZAO.js';
|
|
12
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-OQG4P5KU.js';
|
|
13
13
|
import '../chunk-DGXZ635L.js';
|
|
14
14
|
import '../chunk-OMV5W53A.js';
|
|
15
15
|
import '../chunk-2YTOOH3A.js';
|
|
16
16
|
import '../chunk-XSPCITPN.js';
|
|
17
17
|
import '../chunk-H5XTJ7GJ.js';
|
|
18
|
-
import '../chunk-NUZHC6MM.js';
|
|
19
18
|
import '../chunk-UAUP6XGK.js';
|
|
19
|
+
import '../chunk-NUZHC6MM.js';
|
|
20
20
|
import '../chunk-UT6CW3C7.js';
|
|
21
21
|
import '../chunk-ODEQTPFM.js';
|
package/dist/BriefCard/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_FOLLOW_UPS, BRIEF_CARD_MAX_NEEDS, BriefCard } from '../chunk-
|
|
1
|
+
export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_FOLLOW_UPS, BRIEF_CARD_MAX_NEEDS, BriefCard } from '../chunk-5BOFC5OP.js';
|
|
2
2
|
import '../chunk-Y7PVLEZJ.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-RTMNULTL.js';
|
|
4
|
+
import '../chunk-VERJCAJ4.js';
|
|
5
|
+
import '../chunk-CYQBDZ6M.js';
|
|
6
6
|
import '../chunk-4AUTALJA.js';
|
|
7
7
|
import '../chunk-AV2DXAEL.js';
|
|
8
8
|
import '../chunk-MLDTLZAO.js';
|
package/dist/Canvas/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-
|
|
1
|
+
export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-OBPINJNO.js';
|
|
2
2
|
import '../chunk-LM3ISVJA.js';
|
|
3
3
|
import '../chunk-I33UIUZD.js';
|
|
4
4
|
import '../chunk-ANTAQAR4.js';
|
|
@@ -6,7 +6,7 @@ import '../chunk-DGXZ635L.js';
|
|
|
6
6
|
import '../chunk-OMV5W53A.js';
|
|
7
7
|
import '../chunk-XSPCITPN.js';
|
|
8
8
|
import '../chunk-H5XTJ7GJ.js';
|
|
9
|
-
import '../chunk-NUZHC6MM.js';
|
|
10
9
|
import '../chunk-UAUP6XGK.js';
|
|
10
|
+
import '../chunk-NUZHC6MM.js';
|
|
11
11
|
import '../chunk-UT6CW3C7.js';
|
|
12
12
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-
|
|
1
|
+
export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-FQI62PIZ.js';
|
|
2
2
|
import '../chunk-5SZGKSGL.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-KL6A7JGH.js';
|
|
4
4
|
import '../chunk-NR4CPM4T.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-OBPINJNO.js';
|
|
6
6
|
import '../chunk-LM3ISVJA.js';
|
|
7
7
|
import '../chunk-I33UIUZD.js';
|
|
8
8
|
import '../chunk-ANTAQAR4.js';
|
|
@@ -10,7 +10,7 @@ import '../chunk-DGXZ635L.js';
|
|
|
10
10
|
import '../chunk-OMV5W53A.js';
|
|
11
11
|
import '../chunk-XSPCITPN.js';
|
|
12
12
|
import '../chunk-H5XTJ7GJ.js';
|
|
13
|
-
import '../chunk-NUZHC6MM.js';
|
|
14
13
|
import '../chunk-UAUP6XGK.js';
|
|
14
|
+
import '../chunk-NUZHC6MM.js';
|
|
15
15
|
import '../chunk-UT6CW3C7.js';
|
|
16
16
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { CanvasToolbar, toolForKey } from '../chunk-
|
|
1
|
+
export { CanvasToolbar, toolForKey } from '../chunk-KL6A7JGH.js';
|
|
2
2
|
import '../chunk-NR4CPM4T.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-OBPINJNO.js';
|
|
4
4
|
import '../chunk-LM3ISVJA.js';
|
|
5
5
|
import '../chunk-I33UIUZD.js';
|
|
6
6
|
import '../chunk-ANTAQAR4.js';
|
|
@@ -8,7 +8,7 @@ import '../chunk-DGXZ635L.js';
|
|
|
8
8
|
import '../chunk-OMV5W53A.js';
|
|
9
9
|
import '../chunk-XSPCITPN.js';
|
|
10
10
|
import '../chunk-H5XTJ7GJ.js';
|
|
11
|
-
import '../chunk-NUZHC6MM.js';
|
|
12
11
|
import '../chunk-UAUP6XGK.js';
|
|
12
|
+
import '../chunk-NUZHC6MM.js';
|
|
13
13
|
import '../chunk-UT6CW3C7.js';
|
|
14
14
|
import '../chunk-ODEQTPFM.js';
|
package/dist/ChangeList/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { CHANGE_LIST_COLLAPSE_OVER, CHANGE_LIST_LABELS, ChangeList, ChangeListItems, shortenUnchanged } from '../chunk-
|
|
1
|
+
export { CHANGE_LIST_COLLAPSE_OVER, CHANGE_LIST_LABELS, ChangeList, ChangeListItems, shortenUnchanged } from '../chunk-BBD7PTBG.js';
|
|
2
2
|
import '../chunk-LR4IWUWQ.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-VERJCAJ4.js';
|
|
4
|
+
import '../chunk-CYQBDZ6M.js';
|
|
5
5
|
import '../chunk-222VILSP.js';
|
|
6
6
|
import '../chunk-IVTQWOXV.js';
|
|
7
7
|
import '../chunk-MLDTLZAO.js';
|
package/dist/Checkbox/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { Checkbox, CheckboxGroup } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { Checkbox, CheckboxGroup } from '../chunk-LMQG3VPG.js';
|
|
2
|
+
import '../chunk-FB3TCNQP.js';
|
|
3
3
|
import '../chunk-PGCLHYVP.js';
|
|
4
4
|
import '../chunk-PQADV6P6.js';
|
|
5
5
|
import '../chunk-2G355KDJ.js';
|
|
6
6
|
import '../chunk-H5XTJ7GJ.js';
|
|
7
|
-
import '../chunk-NUZHC6MM.js';
|
|
8
7
|
import '../chunk-UAUP6XGK.js';
|
|
8
|
+
import '../chunk-NUZHC6MM.js';
|
|
9
9
|
import '../chunk-UT6CW3C7.js';
|
|
10
10
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -19,7 +19,12 @@ export interface ChoiceButtonsProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
19
19
|
/** Names the group: "Answers". */
|
|
20
20
|
label: string;
|
|
21
21
|
options: readonly ChoiceButtonOption[];
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* The option the asker recommends: drawn first and marked, and filled with
|
|
24
|
+
* the accent while the options send rather than toggle (`chosen` left out).
|
|
25
|
+
* As toggles it is drawn plain with its mark kept, so the chosen option is
|
|
26
|
+
* always the most prominent one.
|
|
27
|
+
*/
|
|
23
28
|
recommended?: string | null | undefined;
|
|
24
29
|
/** The mark on the recommended option, read as part of its name. */
|
|
25
30
|
recommendedLabel?: string | undefined;
|
|
@@ -31,8 +36,10 @@ export interface ChoiceButtonsProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
31
36
|
* The option already applied, for options that stay on screen after a
|
|
32
37
|
* press (a suggestion that updated a field). Given, every option is a
|
|
33
38
|
* toggle button that says whether it is the one applied, and that one is
|
|
34
|
-
* drawn chosen: the selected
|
|
35
|
-
*
|
|
39
|
+
* drawn chosen: the selected fill inside an edge in the accent's ink, with a
|
|
40
|
+
* check mark. The recommended option leaves the accent fill and keeps its
|
|
41
|
+
* mark. `null` when none is; left out, the options send and say nothing of
|
|
42
|
+
* a choice.
|
|
36
43
|
*/
|
|
37
44
|
chosen?: string | null | undefined;
|
|
38
45
|
/**
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* The plain option is the secondary button's recipe (the card's own ground
|
|
6
6
|
* inside the strong hairline), and the recommended one the primary's, so the
|
|
7
7
|
* pair reads as the screen's one primary action and its alternatives.
|
|
8
|
+
*
|
|
9
|
+
* AS TOGGLES (`chosen` given, so every option carries `aria-pressed`) the
|
|
10
|
+
* accent is the chosen option's alone: the recommended one is drawn plain with
|
|
11
|
+
* its mark kept, so an answer that went against the recommendation never shows
|
|
12
|
+
* the option NOT chosen as the loudest one on the screen.
|
|
8
13
|
*/
|
|
9
14
|
|
|
10
15
|
.crewlet-choice-buttons {
|
|
@@ -20,7 +25,6 @@
|
|
|
20
25
|
|
|
21
26
|
display: flex;
|
|
22
27
|
align-items: center;
|
|
23
|
-
justify-content: space-between;
|
|
24
28
|
gap: var(--spacing-3);
|
|
25
29
|
min-width: 0;
|
|
26
30
|
min-height: var(--size-control-lg);
|
|
@@ -65,13 +69,21 @@
|
|
|
65
69
|
}
|
|
66
70
|
|
|
67
71
|
/*
|
|
68
|
-
* THE OPTION APPLIED
|
|
69
|
-
*
|
|
70
|
-
*
|
|
72
|
+
* THE OPTION APPLIED stands on the soft selected fill inside an edge in the
|
|
73
|
+
* accent's ink, with a check mark in the same ink, held under the pointer and
|
|
74
|
+
* the press so neither makes it look unchosen.
|
|
75
|
+
*
|
|
76
|
+
* The edge is the accent's INK, not the selected edge the package's other
|
|
77
|
+
* chosen options draw. That edge is a tint, as low as 1.65:1 against this fill
|
|
78
|
+
* (dark, on the raised rung), and here the edge is what tells a pressed toggle
|
|
79
|
+
* from the others, which WCAG 1.4.11 holds to 3:1. The ink clears 4.71:1 at
|
|
80
|
+
* its tightest (light, on the frame), and the check mark makes the state more
|
|
81
|
+
* than a colour.
|
|
71
82
|
*/
|
|
72
83
|
.crewlet-choice-buttons__option.is-chosen,
|
|
73
|
-
.crewlet-choice-buttons__option.is-chosen:hover
|
|
74
|
-
|
|
84
|
+
.crewlet-choice-buttons__option.is-chosen:hover,
|
|
85
|
+
.crewlet-choice-buttons__option.is-chosen:active {
|
|
86
|
+
border-color: var(--color-brand-accent-ink);
|
|
75
87
|
background: var(--color-surface-selected);
|
|
76
88
|
}
|
|
77
89
|
|
|
@@ -93,7 +105,7 @@
|
|
|
93
105
|
cursor: progress;
|
|
94
106
|
}
|
|
95
107
|
|
|
96
|
-
.crewlet-choice-buttons__option--recommended {
|
|
108
|
+
.crewlet-choice-buttons__option--recommended:not([aria-pressed]) {
|
|
97
109
|
background: var(--color-brand-accent);
|
|
98
110
|
border-color: transparent;
|
|
99
111
|
color: var(--color-text-on-accent);
|
|
@@ -106,12 +118,12 @@
|
|
|
106
118
|
--crewlet-inline-ref-mark-ink: currentColor;
|
|
107
119
|
}
|
|
108
120
|
|
|
109
|
-
.crewlet-choice-buttons__option--recommended:hover:not([aria-disabled='true']) {
|
|
121
|
+
.crewlet-choice-buttons__option--recommended:not([aria-pressed]):hover:not([aria-disabled='true']) {
|
|
110
122
|
background: var(--color-brand-accent-hover);
|
|
111
123
|
border-color: transparent;
|
|
112
124
|
}
|
|
113
125
|
|
|
114
|
-
.crewlet-choice-buttons__option--recommended:active:not([aria-disabled='true']) {
|
|
126
|
+
.crewlet-choice-buttons__option--recommended:not([aria-pressed]):active:not([aria-disabled='true']) {
|
|
115
127
|
background: var(--color-brand-accent-active);
|
|
116
128
|
}
|
|
117
129
|
|
|
@@ -120,33 +132,18 @@
|
|
|
120
132
|
* nearly the fill's own colour, so its ring stands off it as a primary
|
|
121
133
|
* button's does.
|
|
122
134
|
*/
|
|
123
|
-
.crewlet-choice-buttons__option--recommended:focus-visible {
|
|
135
|
+
.crewlet-choice-buttons__option--recommended:not([aria-pressed]):focus-visible {
|
|
124
136
|
outline-offset: 2px;
|
|
125
137
|
}
|
|
126
138
|
|
|
127
139
|
/*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
* the accent fill for the soft one and left the accent's own ink behind, white
|
|
132
|
-
* on a pale tint, under 1.5:1 in the light theme. Held under the pointer and
|
|
133
|
-
* the press too, which otherwise bring the accent back.
|
|
140
|
+
* The words take the room the option has to spare, so the recommended mark and
|
|
141
|
+
* the check mark after them sit together at the far end, and a picture before
|
|
142
|
+
* them keeps its place at the start.
|
|
134
143
|
*/
|
|
135
|
-
.crewlet-choice-buttons__option--recommended.is-chosen,
|
|
136
|
-
.crewlet-choice-buttons__option--recommended.is-chosen:hover:not([aria-disabled='true']),
|
|
137
|
-
.crewlet-choice-buttons__option--recommended.is-chosen:active:not([aria-disabled='true']) {
|
|
138
|
-
border-color: var(--color-border-selected);
|
|
139
|
-
background: var(--color-surface-selected);
|
|
140
|
-
color: var(--color-text-primary);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/* Off the accent, the ring is drawn over the selected edge again. */
|
|
144
|
-
.crewlet-choice-buttons__option--recommended.is-chosen:focus-visible {
|
|
145
|
-
outline-offset: var(--size-focus-ring-inset-offset);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
144
|
.crewlet-choice-buttons__text {
|
|
149
145
|
display: grid;
|
|
146
|
+
flex: 1 1 auto;
|
|
150
147
|
gap: 2px;
|
|
151
148
|
min-width: 0;
|
|
152
149
|
overflow-wrap: anywhere;
|
|
@@ -162,15 +159,10 @@
|
|
|
162
159
|
* On the accent fill the detail takes the label's own ink. The tertiary step
|
|
163
160
|
* is measured on the surfaces, not on the accent, where it does not clear.
|
|
164
161
|
*/
|
|
165
|
-
.crewlet-choice-buttons__option--recommended .crewlet-choice-buttons__detail {
|
|
162
|
+
.crewlet-choice-buttons__option--recommended:not([aria-pressed]) .crewlet-choice-buttons__detail {
|
|
166
163
|
color: var(--color-text-on-accent);
|
|
167
164
|
}
|
|
168
165
|
|
|
169
|
-
/* Chosen, it is off the accent, and the detail takes its tertiary step again. */
|
|
170
|
-
.crewlet-choice-buttons__option--recommended.is-chosen .crewlet-choice-buttons__detail {
|
|
171
|
-
color: var(--color-text-tertiary);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
166
|
/*
|
|
175
167
|
* The mark, in the micro-label register. Full ink rather than a faded one:
|
|
176
168
|
* eleven pixels of white on the accent clears 4.5:1 only at full strength.
|
|
@@ -183,8 +175,12 @@
|
|
|
183
175
|
text-transform: uppercase;
|
|
184
176
|
}
|
|
185
177
|
|
|
186
|
-
/*
|
|
187
|
-
|
|
178
|
+
/*
|
|
179
|
+
* The picture before the words and the check mark at the far end, each
|
|
180
|
+
* centred on the label's line.
|
|
181
|
+
*/
|
|
182
|
+
.crewlet-choice-buttons__media,
|
|
183
|
+
.crewlet-choice-buttons__check {
|
|
188
184
|
display: inline-flex;
|
|
189
185
|
flex: none;
|
|
190
186
|
align-items: center;
|
|
@@ -193,22 +189,22 @@
|
|
|
193
189
|
|
|
194
190
|
/*
|
|
195
191
|
* With a detail under it the label's line is the FIRST line, not the
|
|
196
|
-
* option's middle, so the picture
|
|
197
|
-
* Centred on the label and its detail together, a
|
|
198
|
-
* 7px under the value it shows.
|
|
192
|
+
* option's middle, so the picture and the check mark stand on a box one line
|
|
193
|
+
* tall at the top. Centred on the label and its detail together, a
|
|
194
|
+
* suggestion's swatch sat 7px under the value it shows.
|
|
199
195
|
*/
|
|
200
|
-
.crewlet-choice-buttons__option:has(.crewlet-choice-buttons__detail) .crewlet-choice-buttons__media
|
|
196
|
+
.crewlet-choice-buttons__option:has(.crewlet-choice-buttons__detail) .crewlet-choice-buttons__media,
|
|
197
|
+
.crewlet-choice-buttons__option:has(.crewlet-choice-buttons__detail) .crewlet-choice-buttons__check {
|
|
201
198
|
align-self: flex-start;
|
|
202
199
|
min-height: calc(var(--crewlet-choice-buttons-leading) * 1em);
|
|
203
200
|
}
|
|
204
201
|
|
|
205
|
-
/*
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
margin-inline-start: auto;
|
|
202
|
+
/*
|
|
203
|
+
* The chosen option's check mark, at the label's size and in the edge's ink,
|
|
204
|
+
* which clears the 3:1 a mark has to on the selected fill in every theme.
|
|
205
|
+
*/
|
|
206
|
+
.crewlet-choice-buttons__check {
|
|
207
|
+
color: var(--color-brand-accent-ink);
|
|
212
208
|
}
|
|
213
209
|
|
|
214
210
|
/*
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { Tone } from '../utils/tone.js';
|
|
3
|
+
/** One short fact on a card: what it needs, how ready that is, how it behaves. */
|
|
4
|
+
export interface ChoiceCardFact {
|
|
5
|
+
/** The fact's name, a word or two: "Needs", "Isolation". */
|
|
6
|
+
label: ReactNode;
|
|
7
|
+
/** The fact: "Docker 24.0.7 found". */
|
|
8
|
+
value: ReactNode;
|
|
9
|
+
/** A state the fact reports, drawn as a dot beside it; none for a plain fact. */
|
|
10
|
+
tone?: Tone | undefined;
|
|
11
|
+
}
|
|
12
|
+
/** One choice in [ChoiceCards]. */
|
|
13
|
+
export interface ChoiceCardOption {
|
|
14
|
+
/** Stable identity, and what `onChange` is called with. */
|
|
15
|
+
value: string;
|
|
16
|
+
/** What the choice is, in a few words: its radio's name, with the tag. */
|
|
17
|
+
label: ReactNode;
|
|
18
|
+
/** A picture of the choice before its name: a product's mark, a glyph. Decorative; the label names it. */
|
|
19
|
+
media?: ReactNode;
|
|
20
|
+
/** A short word beside the choice's name, read as part of its name: "Company default". */
|
|
21
|
+
tag?: ReactNode;
|
|
22
|
+
/** One plain line saying what choosing it means. */
|
|
23
|
+
description?: ReactNode;
|
|
24
|
+
/** A few short facts, one to a line under the description, each its name and its value. */
|
|
25
|
+
facts?: readonly ChoiceCardFact[] | undefined;
|
|
26
|
+
/** The choice cannot be made now. */
|
|
27
|
+
disabled?: boolean | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Why not, and what fixes it ("Add E2B_API_KEY to use it"), in the warning
|
|
30
|
+
* ink and read with its radio: the one way a card gives its reason. It is
|
|
31
|
+
* the card's last line, or, with `disabledReasonAt`, the value of a fact.
|
|
32
|
+
*/
|
|
33
|
+
disabledReason?: ReactNode;
|
|
34
|
+
/**
|
|
35
|
+
* The index of the fact whose value the reason takes the place of ("Needs:
|
|
36
|
+
* E2B key not set. Add E2B_API_KEY"), so a card that cannot be chosen keeps
|
|
37
|
+
* the same lines as the cards beside it rather than growing one.
|
|
38
|
+
*/
|
|
39
|
+
disabledReasonAt?: number | undefined;
|
|
40
|
+
}
|
|
41
|
+
/** The narrowest a card stands: `md` 20rem, `lg` 24rem. */
|
|
42
|
+
export type ChoiceCardsMinWidth = 'md' | 'lg';
|
|
43
|
+
export interface ChoiceCardsProps {
|
|
44
|
+
/** Names the group for a screen reader. */
|
|
45
|
+
label: string;
|
|
46
|
+
options: readonly ChoiceCardOption[];
|
|
47
|
+
/** The selected choice's `value`, or null when none is. */
|
|
48
|
+
value: string | null;
|
|
49
|
+
onChange: (value: string) => void;
|
|
50
|
+
/**
|
|
51
|
+
* The narrowest a card stands, which decides how many share a row: `md`
|
|
52
|
+
* (20rem) for a short name and facts, `lg` (24rem) for choices with more to
|
|
53
|
+
* say. A form's column holds one to a row; a wider surface two or three.
|
|
54
|
+
*/
|
|
55
|
+
minCardWidth?: ChoiceCardsMinWidth | undefined;
|
|
56
|
+
className?: string | undefined;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* One answer from a few, each a card of the same lines: a picture, the
|
|
60
|
+
* choice's name and its tag; one line of description; and a few facts, one to
|
|
61
|
+
* a line. Cards side by side share every line (a subgrid), so the facts of
|
|
62
|
+
* every card stand level, in a grid that wraps.
|
|
63
|
+
*
|
|
64
|
+
* FOR CHOICES A PERSON COMPARES rather than reads down: a product to run, a
|
|
65
|
+
* place to run it, what a new thing is for. Where each answer is a line of
|
|
66
|
+
* words, [ChoiceList] is the lighter control.
|
|
67
|
+
*
|
|
68
|
+
* NATIVE RADIOS, so the arrow keys move the choice and Tab leaves the group as
|
|
69
|
+
* the platform does, and each card is its radio's label, so the whole card
|
|
70
|
+
* takes the pointer. The radio is NAMED by the choice's name and tag alone
|
|
71
|
+
* and DESCRIBED by the rest (the description, the facts, the reason): named by
|
|
72
|
+
* the whole card, it was read as some twenty-five words on every arrow press,
|
|
73
|
+
* a link's words among them. A disabled card is skipped by the arrows, keeps
|
|
74
|
+
* its words at full contrast, and says why it is unavailable and what fixes
|
|
75
|
+
* it, because a choice greyed out with no reason is a dead end.
|
|
76
|
+
*
|
|
77
|
+
* A FACT'S STATE IS NEVER ONLY A COLOUR: the dot sits beside words that say
|
|
78
|
+
* it ("Docker 24.0.7 found", "E2B key not set").
|
|
79
|
+
*/
|
|
80
|
+
export declare function ChoiceCards({ label, options, value, onChange, minCardWidth, className }: ChoiceCardsProps): import("react").JSX.Element;
|