@crewlethq/ui 0.4.4 → 0.5.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 +888 -24
- package/dist/Accordion/index.js +2 -2
- package/dist/AddPill/index.js +1 -1
- package/dist/{AddPill-DFWXYLIQ.css → AddPill-IJQYCY6C.css} +9 -0
- package/dist/AppShell/AppShell.d.ts +26 -5
- package/dist/AppShell/index.js +3 -3
- package/dist/{AppShell-NVE6LHNI.css → AppShell-XARELGIH.css} +178 -25
- package/dist/Avatar/Avatar.d.ts +85 -40
- package/dist/Avatar/AvatarStack.d.ts +76 -0
- package/dist/Avatar/index.d.ts +5 -2
- package/dist/Avatar/index.js +1 -1
- package/dist/Avatar-XID7Z74C.css +200 -0
- package/dist/AvatarStack-GEJBNV7E.css +72 -0
- package/dist/BrandLockup/index.js +1 -1
- package/dist/{BrandLockup-6ISDEHPJ.css → BrandLockup-JKGXFCZF.css} +25 -19
- package/dist/Button/Button.d.ts +7 -2
- package/dist/Button/index.js +1 -1
- package/dist/{Button-D4J6B4MA.css → Button-X4B2TJAQ.css} +50 -19
- package/dist/Callout/index.js +1 -1
- package/dist/Canvas/index.js +4 -4
- package/dist/Card/Card.d.ts +9 -5
- package/dist/Card/index.js +1 -1
- package/dist/{Card-RLR254LD.css → Card-GLP7SUV6.css} +25 -18
- package/dist/Charts/BarList.d.ts +18 -1
- package/dist/Charts/ChartTooltip.d.ts +68 -0
- package/dist/Charts/StackedBar.d.ts +25 -7
- package/dist/Charts/StackedColumns.d.ts +112 -0
- package/dist/Charts/TimeSeries.d.ts +33 -2
- package/dist/Charts/dataColor.d.ts +22 -14
- package/dist/Charts/index.d.ts +6 -0
- package/dist/Charts/index.js +1 -1
- package/dist/Charts/useChartHover.d.ts +56 -0
- package/dist/Charts-B3YEF7R4.css +742 -0
- package/dist/Checkbox/index.js +1 -1
- package/dist/{Checkbox-VGW26YLQ.css → Checkbox-BOXQ747I.css} +2 -2
- package/dist/CodeBlock/index.js +4 -4
- package/dist/Combobox/index.js +5 -5
- package/dist/CommandPalette/CommandPalette.d.ts +97 -6
- package/dist/CommandPalette/index.d.ts +1 -1
- package/dist/CommandPalette/index.js +9 -7
- package/dist/CommandPalette-C5AMKGN2.css +259 -0
- package/dist/Copyable/index.js +3 -3
- package/dist/DataTable/index.js +7 -7
- package/dist/{DataTable-37UWTRN6.css → DataTable-OLHPF7D4.css} +35 -38
- package/dist/DataView/index.js +16 -16
- package/dist/{DataView-256YF32J.css → DataView-N6JX464S.css} +5 -4
- package/dist/DateTimePicker/index.js +5 -5
- package/dist/DiffList/index.js +1 -1
- package/dist/Disclosure/index.js +2 -2
- package/dist/EntityChip/EntityChip.d.ts +9 -12
- package/dist/EntityChip/index.d.ts +1 -1
- package/dist/EntityChip/index.js +2 -2
- package/dist/ErrorBoundary/index.js +2 -2
- package/dist/{ErrorBoundary-ME36CQTA.css → ErrorBoundary-U2PA3LY2.css} +4 -4
- package/dist/IconButton/index.js +1 -1
- package/dist/{IconButton-VQGNMJDI.css → IconButton-TVEUWK6L.css} +2 -2
- package/dist/ImageUpload/ImageUpload.d.ts +10 -7
- package/dist/ImageUpload/index.js +2 -2
- package/dist/{ImageUpload-HKFIZR6D.css → ImageUpload-YCHJMUGX.css} +24 -10
- package/dist/Input/index.js +2 -2
- package/dist/Kbd/Kbd.d.ts +14 -4
- package/dist/Kbd/index.js +1 -1
- package/dist/Kbd-JPLDVJIP.css +71 -0
- package/dist/Layer/index.js +1 -1
- package/dist/Link/index.js +1 -1
- package/dist/List/index.js +1 -1
- package/dist/{List-XTHESXLR.css → List-MYJIV6MP.css} +12 -2
- package/dist/ListInput/index.js +6 -6
- package/dist/Listbox/index.js +2 -2
- package/dist/Listbox/useListbox.d.ts +2 -0
- package/dist/{Listbox-ZXYYNN6U.css → Listbox-6WJNJQVQ.css} +32 -7
- package/dist/Menu/index.js +4 -4
- package/dist/Meter/Meter.d.ts +103 -16
- package/dist/Meter/index.d.ts +2 -2
- package/dist/Meter/index.js +1 -1
- package/dist/{Meter-SKOOXQBC.css → Meter-5VCSFMZW.css} +46 -7
- package/dist/Modal/index.js +4 -4
- package/dist/{Modal-XYQJ4BL6.css → Modal-JAYBS2KS.css} +13 -4
- package/dist/OrgLabel/OrgLabel.d.ts +60 -24
- package/dist/OrgLabel/index.d.ts +1 -1
- package/dist/OrgLabel/index.js +2 -1
- package/dist/{OrgLabel-D7U6QJZD.css → OrgLabel-CR233G34.css} +9 -18
- package/dist/OrgNode/index.js +3 -2
- package/dist/OrgTable/OrgTable.d.ts +2 -2
- package/dist/OrgTable/index.js +8 -7
- package/dist/Popover/index.js +2 -2
- package/dist/PricingCard/index.js +3 -3
- package/dist/{PricingCard-JFI7RYXP.css → PricingCard-7EFXRSD2.css} +4 -5
- package/dist/SearchTrigger/SearchTrigger.d.ts +23 -4
- package/dist/SearchTrigger/index.d.ts +1 -1
- package/dist/SearchTrigger/index.js +1 -1
- package/dist/SearchTrigger-Z5D4AAY7.css +112 -0
- package/dist/SegmentedControl/index.js +2 -2
- package/dist/SegmentedMeter/SegmentedMeter.d.ts +107 -0
- package/dist/SegmentedMeter/index.d.ts +3 -0
- package/dist/SegmentedMeter/index.js +2 -0
- package/dist/SegmentedMeter-KQNML2TW.css +109 -0
- package/dist/Select/index.js +3 -3
- package/dist/Shortcut/index.js +2 -2
- package/dist/SidebarNav/SidebarNav.d.ts +85 -25
- package/dist/SidebarNav/index.d.ts +1 -1
- package/dist/SidebarNav/index.js +1 -1
- package/dist/SidebarNav-X5NLZNWA.css +424 -0
- package/dist/StatCard/StatCard.d.ts +59 -12
- package/dist/StatCard/index.d.ts +1 -1
- package/dist/StatCard/index.js +1 -1
- package/dist/StatCard-KPAFD4E2.css +204 -0
- package/dist/StatGroup/index.js +1 -1
- package/dist/{StatGroup-TGB6AEKM.css → StatGroup-HVG6O62W.css} +8 -9
- package/dist/StatusDot/StatusDot.d.ts +24 -6
- package/dist/StatusDot/index.js +1 -1
- package/dist/StatusDot-7OMCQCZF.css +186 -0
- package/dist/Stepper/Stepper.d.ts +78 -0
- package/dist/Stepper/index.d.ts +3 -0
- package/dist/Stepper/index.js +4 -0
- package/dist/Stepper-HW4JM3YH.css +176 -0
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-MJ2E3VPK.css → Tabs-XCNPHA7B.css} +46 -26
- package/dist/Tag/Tag.d.ts +29 -22
- package/dist/Tag/index.js +2 -2
- package/dist/{Tag-VNZEYLB6.css → Tag-GBE7LQJP.css} +82 -83
- package/dist/TagsInput/index.js +7 -7
- package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +53 -21
- package/dist/ThemeSwitcher/index.d.ts +3 -3
- package/dist/ThemeSwitcher/index.js +4 -3
- package/dist/ThemeSwitcher/preferences.d.ts +19 -5
- package/dist/ThemeToggle/ThemeToggle.d.ts +40 -0
- package/dist/ThemeToggle/index.d.ts +2 -0
- package/dist/ThemeToggle/index.js +5 -0
- package/dist/TimeWindowPicker/index.js +8 -8
- package/dist/Toaster/index.js +2 -2
- package/dist/Toolbar/index.js +2 -2
- package/dist/{Toolbar-IP6LXN45.css → Toolbar-HUOSMNTH.css} +3 -1
- package/dist/Tooltip/index.js +2 -2
- package/dist/Tree/index.d.ts +2 -2
- package/dist/Tree/index.js +1 -1
- package/dist/Tree/layout.d.ts +103 -28
- package/dist/TreeCanvas/TreeCanvas.d.ts +60 -14
- package/dist/TreeCanvas/index.d.ts +1 -1
- package/dist/TreeCanvas/index.js +6 -6
- package/dist/TreeCanvas/motion.d.ts +3 -2
- package/dist/{TreeCanvas-WBNQPHC7.css → TreeCanvas-HVOV4SQN.css} +154 -30
- package/dist/TreeGrid/index.js +4 -4
- package/dist/{chunk-F6OE5FH3.js → chunk-2FPENTCF.js} +1 -1
- package/dist/chunk-4AK52VHB.js +88 -0
- package/dist/{chunk-7EM5T4ME.js → chunk-4IQD3HUQ.js} +2 -2
- package/dist/{chunk-YODNNSZL.js → chunk-4PZ6FJKW.js} +43 -13
- package/dist/{chunk-F27EPQ7D.js → chunk-4UQ7SMPK.js} +1 -1
- package/dist/chunk-5QWIJSQM.js +73 -0
- package/dist/{chunk-KIC7BZYJ.js → chunk-6MU7HNB4.js} +6 -5
- package/dist/{chunk-S2XHHEW4.js → chunk-74KMX7YH.js} +4 -4
- package/dist/{chunk-WNI2WSJF.js → chunk-7KBNFFM3.js} +1 -1
- package/dist/{chunk-EFSG7HNU.js → chunk-AUS5FNQE.js} +1 -1
- package/dist/{chunk-CMEE37QJ.js → chunk-BMYPGGPV.js} +4 -4
- package/dist/{chunk-H4FBTAYS.js → chunk-BNCCEER3.js} +8 -8
- package/dist/chunk-C5WJUZVR.js +56 -0
- package/dist/{chunk-5WS6L6FA.js → chunk-CAIHUYXV.js} +9 -9
- package/dist/{chunk-5KSRXHOW.js → chunk-CQY5NTRS.js} +1 -1
- package/dist/{chunk-MW356IVK.js → chunk-D6EVJUGU.js} +2 -2
- package/dist/{chunk-7PEFUMQJ.js → chunk-DHPUMOTX.js} +2 -2
- package/dist/{chunk-HZ5XZNPS.js → chunk-DS2C73RJ.js} +3 -3
- package/dist/{chunk-GKHAKGOF.js → chunk-DSUY5F4E.js} +3 -3
- package/dist/{chunk-Q4ZPPART.js → chunk-EFYPAJT3.js} +3 -3
- package/dist/{chunk-PATXSJGR.js → chunk-ERVO6OUF.js} +17 -17
- package/dist/{chunk-BZYDZBAN.js → chunk-ETYEBKR4.js} +3 -3
- package/dist/{chunk-CC67MUUO.js → chunk-FD5UEN6X.js} +30 -30
- package/dist/{chunk-5SDBMKUO.js → chunk-FIFNP6PL.js} +3 -3
- package/dist/{chunk-7HPRF5XN.js → chunk-FUF52K7E.js} +98 -16
- package/dist/{chunk-5KPQ6D7N.js → chunk-FZVJDJFN.js} +2 -2
- package/dist/chunk-IA232OTU.js +156 -0
- package/dist/{chunk-2EOKFKHX.js → chunk-IG27QX7Q.js} +7 -7
- package/dist/chunk-IKB6HFGK.js +55 -0
- package/dist/{chunk-T43A26SD.js → chunk-IPVQKAHO.js} +6 -6
- package/dist/{chunk-3EYF6HKB.js → chunk-IVFJD7WY.js} +28 -9
- package/dist/{chunk-XJWXPRSK.js → chunk-JGRNTBF2.js} +11 -11
- package/dist/chunk-K3OWD7BJ.js +121 -0
- package/dist/{chunk-6KCO2D5C.js → chunk-KD4H66L6.js} +7 -20
- package/dist/{chunk-SFZOKW2G.js → chunk-KJ34ZBBI.js} +8 -3
- package/dist/{chunk-AQTBF4EB.js → chunk-LFHCXZO5.js} +5 -5
- package/dist/{chunk-LWKJQTOM.js → chunk-MICH6QSJ.js} +1 -1
- package/dist/chunk-N3DPO6HG.js +226 -0
- package/dist/{chunk-S4GZWSKR.js → chunk-OM5E3TTK.js} +1 -1
- package/dist/{chunk-3QRYCPXQ.js → chunk-OPKIKM35.js} +6 -6
- package/dist/{chunk-5EKIWVOR.js → chunk-PGRPNDWM.js} +2 -2
- package/dist/{chunk-FSOW3ARP.js → chunk-PQNILU27.js} +9 -9
- package/dist/{chunk-QNCVHRZL.js → chunk-QVAFL2LE.js} +1 -1
- package/dist/{chunk-Q3B66TJM.js → chunk-QY7UU5ZB.js} +1 -1
- package/dist/{chunk-ITHXJHBB.js → chunk-R25RGPUB.js} +1 -0
- package/dist/{chunk-KLJCCMF3.js → chunk-R6735B37.js} +2 -2
- package/dist/{chunk-3ZP55QZE.js → chunk-R6FBDTP3.js} +4 -4
- package/dist/{chunk-7FZ53WDJ.js → chunk-RIAZM6L3.js} +1 -1
- package/dist/chunk-RJM4QCGG.js +550 -0
- package/dist/{chunk-NTRZGNEX.js → chunk-S3BCVWTU.js} +215 -46
- package/dist/chunk-S7KW47IQ.js +121 -0
- package/dist/{chunk-KNYYCWMK.js → chunk-SJQ546ID.js} +4 -4
- package/dist/{chunk-D35VTV2Z.js → chunk-SV7QAONL.js} +1 -1
- package/dist/{chunk-IAJLHVUA.js → chunk-TIWAHZZ6.js} +1 -1
- package/dist/{chunk-2PRH365R.js → chunk-UA7O3KKJ.js} +1 -1
- package/dist/{chunk-NPZY6YYL.js → chunk-UG5ZMAXW.js} +6 -6
- package/dist/{chunk-NDCATSW7.js → chunk-V34H2YCY.js} +1 -1
- package/dist/chunk-WIATRXEJ.js +22 -0
- package/dist/{chunk-5C5YMZQU.js → chunk-WOFOMTGB.js} +16 -10
- package/dist/{chunk-QYOFACSP.js → chunk-WSOFKOLP.js} +3 -3
- package/dist/{chunk-MNAXYY3R.js → chunk-WUVZDFHS.js} +31 -11
- package/dist/{chunk-DB2VDLVR.js → chunk-YIMOT5OO.js} +10 -10
- package/dist/{chunk-2ZQMA2WB.js → chunk-ZPSOF6VL.js} +2 -2
- package/dist/generated/index.d.ts +3 -0
- package/dist/generated/index.js +70 -66
- package/dist/index.js +70 -66
- package/dist/styles.css +2538 -741
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/tone.d.ts +7 -12
- package/package.json +4 -4
- package/scripts/check-css-literals.mjs +159 -23
- package/scripts/check-css-variables.mjs +5 -3
- package/scripts/css-source.mjs +97 -5
- package/dist/Avatar-P2KRQM2B.css +0 -156
- package/dist/Charts-D7G2BSXH.css +0 -277
- package/dist/CommandPalette-CSJDUCQA.css +0 -115
- package/dist/Kbd-W66MXQI5.css +0 -61
- package/dist/SearchTrigger-QXOYAUUY.css +0 -79
- package/dist/SidebarNav-QGSFKZYA.css +0 -319
- package/dist/StatCard-KYPKZUWX.css +0 -111
- package/dist/StatusDot-HA2L2FSX.css +0 -84
- package/dist/chunk-22O7LAW2.js +0 -41
- package/dist/chunk-AJNCATWZ.js +0 -144
- package/dist/chunk-F4PJZ4ED.js +0 -245
- package/dist/chunk-PNFASD6F.js +0 -98
- package/dist/chunk-PZSWF74H.js +0 -15
- package/dist/chunk-R66KLW7S.js +0 -143
- /package/dist/{chunk-ZCR6YGQ4.js → chunk-PKIN4IMB.js} +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
import { type AvatarKind, type AvatarRing, type AvatarSizeStep } from './Avatar.js';
|
|
3
|
+
/** One badge in a stack. */
|
|
4
|
+
export interface AvatarStackMember {
|
|
5
|
+
/** Who: the initials, and a word of the stack's accessible name. */
|
|
6
|
+
name: string;
|
|
7
|
+
/** An agent (the default) is a squircle; a human is a circle. */
|
|
8
|
+
kind?: AvatarKind | undefined;
|
|
9
|
+
src?: string | undefined;
|
|
10
|
+
/** A state ring on this badge, as `Avatar` draws it. */
|
|
11
|
+
ring?: AvatarRing | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* What tells two members apart when their names do not (a seat's handle, a
|
|
14
|
+
* person's id), unique within the stack. The name is used when it is absent.
|
|
15
|
+
*/
|
|
16
|
+
id?: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
export interface AvatarStackProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
19
|
+
/** Everybody in the stack, in the order they are drawn. */
|
|
20
|
+
members: readonly AvatarStackMember[];
|
|
21
|
+
/**
|
|
22
|
+
* How many badges are drawn before the rest are counted in a chip.
|
|
23
|
+
*
|
|
24
|
+
* FOUR BY DEFAULT, because that is the most any stack in the approved design
|
|
25
|
+
* draws, and a stack is a glance at WHO rather than a roster: past four the
|
|
26
|
+
* overlapped monograms stop being read at all. A whole number of at least 1.
|
|
27
|
+
*/
|
|
28
|
+
max?: number | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* The badges' step, `sm` by default.
|
|
31
|
+
*
|
|
32
|
+
* NOT THE NEAREST STEP TO THE DESIGN'S 22px, which is `xs`, because the
|
|
33
|
+
* design draws its stacks' initials at 9px and this kit's smallest type is
|
|
34
|
+
* 11px. Behind the next badge's 6px and its 2px cut-out, a badge shows its
|
|
35
|
+
* box less 8px: at `xs` that leaves 9 of the 14px two mono initials take,
|
|
36
|
+
* 64% of them, the second letter gone to a stem. The design's own stack
|
|
37
|
+
* shows 77% of its initials, and `sm` is the smallest step that shows as
|
|
38
|
+
* much, at 85%.
|
|
39
|
+
*/
|
|
40
|
+
size?: AvatarSizeStep | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* The accessible name, where the derived one ("3 agents: SWE, CTO, PM") is
|
|
43
|
+
* not what the stack means where it stands ("Watching: …").
|
|
44
|
+
*/
|
|
45
|
+
label?: string | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* The names are already printed beside the stack, so it says nothing
|
|
48
|
+
* itself: "read by 3 agents today" beside a stack that read out the same
|
|
49
|
+
* three names would say them twice.
|
|
50
|
+
*/
|
|
51
|
+
decorative?: boolean | undefined;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* What a stack says to somebody who cannot see it: how many of each kind, and
|
|
55
|
+
* every name, the ones counted in the chip included.
|
|
56
|
+
*
|
|
57
|
+
* THE KINDS ARE COUNTED, NOT ASSUMED. A stack of watchers holds people and
|
|
58
|
+
* agents together, and "3 agents: Jane Founder, CTO, SWE" would call a person
|
|
59
|
+
* an agent to the one reader who cannot see the circle that says otherwise.
|
|
60
|
+
*/
|
|
61
|
+
export declare function avatarStackLabel(members: readonly AvatarStackMember[]): string;
|
|
62
|
+
/**
|
|
63
|
+
* Several badges drawn as one mark: who is on something, at a glance.
|
|
64
|
+
*
|
|
65
|
+
* EACH BADGE OVERLAPS THE ONE BEFORE IT BY 6PX and is cut out of it by a 2px
|
|
66
|
+
* ring in the colour of the ground the stack stands on, which is the design's
|
|
67
|
+
* own stack. The ground is `--crewlet-avatar-stack-ground`, the sheet by
|
|
68
|
+
* default, which is where the design draws every stack; a stack standing on a
|
|
69
|
+
* card or on any other surface sets it on the stack. Past `max` the rest are
|
|
70
|
+
* counted in a chip, which is a PILL rather than either kind's outline: it is
|
|
71
|
+
* a number, not somebody.
|
|
72
|
+
*
|
|
73
|
+
* ONE IMAGE TO A SCREEN READER, named by `avatarStackLabel`, so a row reads
|
|
74
|
+
* "3 agents: SWE, CTO, PM" once rather than three badge names and a "+2".
|
|
75
|
+
*/
|
|
76
|
+
export declare function AvatarStack({ members, max, size, label, decorative, className, style, ...rest }: AvatarStackProps): import("react").JSX.Element | null;
|
package/dist/Avatar/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import './Avatar.css';
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
import './AvatarStack.css';
|
|
3
|
+
export { AVATAR_CORNER_RATIO, AVATAR_SIZES, Avatar, avatarCorner, avatarPixels, avatarTint, getInitials, } from './Avatar.js';
|
|
4
|
+
export type { AvatarKind, AvatarProps, AvatarRing, AvatarSize, AvatarSizeStep, AvatarTone } from './Avatar.js';
|
|
5
|
+
export { AvatarStack, avatarStackLabel } from './AvatarStack.js';
|
|
6
|
+
export type { AvatarStackMember, AvatarStackProps } from './AvatarStack.js';
|
package/dist/Avatar/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AVATAR_SIZES, Avatar, avatarPixels,
|
|
1
|
+
export { AVATAR_CORNER_RATIO, AVATAR_SIZES, Avatar, AvatarStack, avatarCorner, avatarPixels, avatarStackLabel, avatarTint, getInitials } from '../chunk-IA232OTU.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The identity badge.
|
|
3
|
+
*
|
|
4
|
+
* IT IS NEUTRAL, and that is the whole rule. The system this replaces coloured
|
|
5
|
+
* a seat by `PALETTE[hash(name) % 8]`, over the same eight families it also
|
|
6
|
+
* spent on phases and event categories, so one amber meant "the execute
|
|
7
|
+
* phase", "the decision category" and "the Analyst" at once. A hash of a name
|
|
8
|
+
* carries no information: rename the seat and its colour changes, which is the
|
|
9
|
+
* proof it never meant anything. Identity is the OUTLINE (a squircle for an
|
|
10
|
+
* agent, a circle for a person), the monogram and the name.
|
|
11
|
+
*
|
|
12
|
+
* THE ONE HUE A BADGE CARRIES IS A STATE, as a ring round it, and the ring is
|
|
13
|
+
* the component's only coloured line.
|
|
14
|
+
*
|
|
15
|
+
* The seeded tints stay for the one case that earns them, a roster somebody
|
|
16
|
+
* scans, and their grounds are TOKENS: measured under white initials and held
|
|
17
|
+
* at 4.5:1 by the palette suite. Spelled as literals, five of the ten sat
|
|
18
|
+
* under that floor while the suite measured ten values nothing painted with.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
.crewlet-avatar {
|
|
22
|
+
--crewlet-avatar-size: 32px;
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
justify-content: center;
|
|
26
|
+
flex: none;
|
|
27
|
+
width: var(--crewlet-avatar-size);
|
|
28
|
+
height: var(--crewlet-avatar-size);
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
object-fit: cover;
|
|
31
|
+
font-family: var(--font-family-sans);
|
|
32
|
+
font-size: var(--font-size-xs);
|
|
33
|
+
font-weight: var(--font-weight-semibold);
|
|
34
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
35
|
+
/* The document's own leading rather than a tight step of the badge's own.
|
|
36
|
+
The box is a fixed square that centres whatever line it holds, so the ink
|
|
37
|
+
lands in the same place either way; what the tight step bought was one
|
|
38
|
+
more number in a component that already sets four. */
|
|
39
|
+
line-height: var(--font-line-height-body);
|
|
40
|
+
text-transform: uppercase;
|
|
41
|
+
user-select: none;
|
|
42
|
+
box-sizing: border-box;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* The four steps. Each pairs its box with a type step, so two initials sit
|
|
47
|
+
* inside the outline at every one of them. A numeric size sets the same
|
|
48
|
+
* `--crewlet-avatar-size` inline and computes its own type, because nothing in
|
|
49
|
+
* the scale can answer for an arbitrary box; everything else it takes from the
|
|
50
|
+
* rules below exactly as a step does.
|
|
51
|
+
*/
|
|
52
|
+
.crewlet-avatar--xs {
|
|
53
|
+
--crewlet-avatar-size: 20px;
|
|
54
|
+
font-size: var(--font-size-2xs);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.crewlet-avatar--sm {
|
|
58
|
+
--crewlet-avatar-size: 26px;
|
|
59
|
+
font-size: var(--font-size-2xs);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.crewlet-avatar--md {
|
|
63
|
+
--crewlet-avatar-size: 32px;
|
|
64
|
+
font-size: var(--font-size-xs);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.crewlet-avatar--lg {
|
|
68
|
+
--crewlet-avatar-size: 40px;
|
|
69
|
+
font-size: var(--font-size-sm);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* ── kinds ─────────────────────────────────────────────────────────────── */
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* AN AGENT IS A SQUIRCLE, set in the mono face: what the engine runs, named
|
|
76
|
+
* the way a handle is written.
|
|
77
|
+
*
|
|
78
|
+
* THE CORNER MOVES WITH THE BOX, at 0.29 of it (`AVATAR_CORNER_RATIO` in the
|
|
79
|
+
* component, which the suite holds equal to this number): the approved
|
|
80
|
+
* design's 7px at 24 and 9px at 30, as one proportion. It is computed here from
|
|
81
|
+
* the size property every step and every numeric size sets, so there is ONE
|
|
82
|
+
* ladder. There used to be two, a step table here and a numeric table in the
|
|
83
|
+
* component, and they disagreed: `size={80}` drew a squarer badge than
|
|
84
|
+
* `size="lg"` at half its width.
|
|
85
|
+
*
|
|
86
|
+
* WHERE THE BROWSER DRAWS A SQUIRCLE, IT IS A WHOLE ONE. `corner-shape:
|
|
87
|
+
* squircle` is a superellipse of exponent 4, which at a given radius reaches
|
|
88
|
+
* much closer to the box's corner than a circular arc does: at the 45 degree
|
|
89
|
+
* point it stands 0.159 of the radius in from each edge, against 0.293 for an
|
|
90
|
+
* arc. Kept at 0.29 of the box, that corner would stand 0.046 of the box in,
|
|
91
|
+
* half the design's depth and a nearly square badge. At half the box it stands
|
|
92
|
+
* 0.0795 of the box in, against the design's 0.0849 (0.13px at 24px), with the
|
|
93
|
+
* continuous curvature a squircle is for. So the corner is the circle token
|
|
94
|
+
* there, and the fallback above is what every other browser draws.
|
|
95
|
+
*/
|
|
96
|
+
.crewlet-avatar--agent {
|
|
97
|
+
border-radius: calc(var(--crewlet-avatar-size) * 0.29);
|
|
98
|
+
font-family: var(--font-family-mono);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@supports (corner-shape: squircle) {
|
|
102
|
+
.crewlet-avatar--agent {
|
|
103
|
+
corner-shape: squircle;
|
|
104
|
+
border-radius: var(--radius-circle);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* A PERSON IS A CIRCLE, set in the sans face, the round badge every member list
|
|
109
|
+
a reader has used already speaks. */
|
|
110
|
+
.crewlet-avatar--human {
|
|
111
|
+
border-radius: var(--radius-circle);
|
|
112
|
+
font-family: var(--font-family-sans);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.crewlet-avatar--image {
|
|
116
|
+
display: block;
|
|
117
|
+
object-fit: cover;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* ── tones ─────────────────────────────────────────────────────────────── */
|
|
121
|
+
|
|
122
|
+
.crewlet-avatar--fallback {
|
|
123
|
+
border: 1px solid transparent;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* The design's badge: the raised rung with the strong hairline round it and
|
|
127
|
+
the secondary ink, so a badge on a card reads as a mark standing on it
|
|
128
|
+
rather than as a hole in it. */
|
|
129
|
+
.crewlet-avatar--neutral {
|
|
130
|
+
background: var(--color-surface-elevated);
|
|
131
|
+
border-color: var(--color-border-strong);
|
|
132
|
+
color: var(--color-text-secondary);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.crewlet-avatar--seeded {
|
|
136
|
+
color: var(--color-text-on-accent);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.crewlet-avatar--tint-0 { background: var(--color-avatar-tint-0); }
|
|
140
|
+
.crewlet-avatar--tint-1 { background: var(--color-avatar-tint-1); }
|
|
141
|
+
.crewlet-avatar--tint-2 { background: var(--color-avatar-tint-2); }
|
|
142
|
+
.crewlet-avatar--tint-3 { background: var(--color-avatar-tint-3); }
|
|
143
|
+
.crewlet-avatar--tint-4 { background: var(--color-avatar-tint-4); }
|
|
144
|
+
.crewlet-avatar--tint-5 { background: var(--color-avatar-tint-5); }
|
|
145
|
+
.crewlet-avatar--tint-6 { background: var(--color-avatar-tint-6); }
|
|
146
|
+
.crewlet-avatar--tint-7 { background: var(--color-avatar-tint-7); }
|
|
147
|
+
.crewlet-avatar--tint-8 { background: var(--color-avatar-tint-8); }
|
|
148
|
+
.crewlet-avatar--tint-9 { background: var(--color-avatar-tint-9); }
|
|
149
|
+
|
|
150
|
+
/* ── the state ring ────────────────────────────────────────────────────── */
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* A 1.5px LINE 2px OUTSIDE THE BADGE, which is the design's ring: it draws a
|
|
154
|
+
* 3.5px shadow over a 2px one in the card's colour, and 3.5 less 2 is 1.5.
|
|
155
|
+
*
|
|
156
|
+
* AN OUTLINE RATHER THAN THAT SHADOW PAIR, for three reasons. The gap is
|
|
157
|
+
* TRANSPARENT, so the ring reads on whatever the badge stands on, where the
|
|
158
|
+
* design's gap is the card's own fill and cuts a card-coloured band into any
|
|
159
|
+
* other ground. An outline follows the corner, the squircle's included, in
|
|
160
|
+
* every engine this package supports. And forced-colors mode keeps an outline
|
|
161
|
+
* and drops every shadow, so the ring is still drawn for the readers who most
|
|
162
|
+
* need a boundary; it is drawn in the system colour there, which is why the
|
|
163
|
+
* state is always said in words beside the badge as well.
|
|
164
|
+
*
|
|
165
|
+
* LONGHANDS, so the tone rules below set the colour alone and cannot reset the
|
|
166
|
+
* geometry, whichever order they are read in. Each fill is measured at 3:1 as
|
|
167
|
+
* a mark on every opaque surface by @crewlethq/tokens, which is the floor a
|
|
168
|
+
* boundary a reader has to see is held to.
|
|
169
|
+
*/
|
|
170
|
+
.crewlet-avatar--ring-info,
|
|
171
|
+
.crewlet-avatar--ring-warning,
|
|
172
|
+
.crewlet-avatar--ring-danger,
|
|
173
|
+
.crewlet-avatar--ring-success,
|
|
174
|
+
.crewlet-avatar--ring-brand {
|
|
175
|
+
outline-style: solid;
|
|
176
|
+
outline-width: 1.5px;
|
|
177
|
+
outline-offset: 2px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.crewlet-avatar--ring-info {
|
|
181
|
+
outline-color: var(--color-feedback-info);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.crewlet-avatar--ring-warning {
|
|
185
|
+
outline-color: var(--color-feedback-warning);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.crewlet-avatar--ring-danger {
|
|
189
|
+
outline-color: var(--color-feedback-danger);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.crewlet-avatar--ring-success {
|
|
193
|
+
outline-color: var(--color-feedback-success);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* SELECTED, in the accent, which is what the accent means: where the reader
|
|
197
|
+
is. It is the only place a badge spends the accent. */
|
|
198
|
+
.crewlet-avatar--ring-brand {
|
|
199
|
+
outline-color: var(--color-brand-accent);
|
|
200
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Several badges as one mark (AvatarStack.tsx).
|
|
3
|
+
*
|
|
4
|
+
* THE DESIGN'S STACK: each badge overlaps the one before it by 6px and is cut
|
|
5
|
+
* out of it by a 2px ring in the ground's own colour, so the overlap reads as
|
|
6
|
+
* badges standing in front of each other rather than as one blot. The ring is
|
|
7
|
+
* a SHADOW rather than a border, because it has to fall outside the badge
|
|
8
|
+
* without moving it, and it is decoration: forced-colors mode drops it and the
|
|
9
|
+
* badges' own hairlines still separate them.
|
|
10
|
+
*
|
|
11
|
+
* THE GROUND IS A VARIABLE because a stack stands on whatever it is put on,
|
|
12
|
+
* and a cut-out in the sheet's colour on a card is a band of the wrong grey
|
|
13
|
+
* round every badge. It defaults to the SHEET, because that is where the
|
|
14
|
+
* approved design draws every stack it has: in the top bar of a page, over a
|
|
15
|
+
* board and over a knowledge page, and in a task's side column, all of them on
|
|
16
|
+
* the sheet, with the design's own cut-out drawn in the sheet's colour. A stack
|
|
17
|
+
* that stands on a card, or on anything else, sets it on the stack itself.
|
|
18
|
+
*
|
|
19
|
+
* Every rule is two classes deep, so it outweighs the badge's own one-class
|
|
20
|
+
* rules whichever order the stylesheets are bundled in.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
.crewlet-avatar-stack {
|
|
24
|
+
--crewlet-avatar-stack-ground: var(--color-surface-background);
|
|
25
|
+
/* The badges' box, which the component sets from the step it was given; the
|
|
26
|
+
default is the default step's, sm. The chip reads it, so it stands exactly
|
|
27
|
+
as tall as the badges beside it. */
|
|
28
|
+
--crewlet-avatar-stack-size: 26px;
|
|
29
|
+
display: inline-flex;
|
|
30
|
+
flex: none;
|
|
31
|
+
align-items: center;
|
|
32
|
+
vertical-align: middle;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.crewlet-avatar-stack > .crewlet-avatar-stack__member {
|
|
36
|
+
box-shadow: 0 0 0 2px var(--crewlet-avatar-stack-ground);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* The design's 6px, a little under a third of its 22px badge: enough that the
|
|
40
|
+
stack is one mark, little enough that every monogram stays readable. */
|
|
41
|
+
.crewlet-avatar-stack > .crewlet-avatar-stack__member + .crewlet-avatar-stack__member {
|
|
42
|
+
margin-inline-start: -6px;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* THE COUNT OF THE REST. A PILL, where every badge is a squircle or a circle:
|
|
47
|
+
* it is a number rather than somebody, and drawn in either kind's outline it
|
|
48
|
+
* would read as one more agent or one more person. Otherwise it is the neutral
|
|
49
|
+
* badge exactly (the raised rung, the strong hairline, the secondary ink), in
|
|
50
|
+
* the sans face with tabular figures so "+9" and "+12" sit alike.
|
|
51
|
+
*/
|
|
52
|
+
.crewlet-avatar-stack > .crewlet-avatar-stack__more {
|
|
53
|
+
display: inline-flex;
|
|
54
|
+
flex: none;
|
|
55
|
+
align-items: center;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
box-sizing: border-box;
|
|
58
|
+
min-width: var(--crewlet-avatar-stack-size);
|
|
59
|
+
height: var(--crewlet-avatar-stack-size);
|
|
60
|
+
padding-inline: var(--spacing-1);
|
|
61
|
+
border: 1px solid var(--color-border-strong);
|
|
62
|
+
border-radius: var(--radius-pill);
|
|
63
|
+
background: var(--color-surface-elevated);
|
|
64
|
+
color: var(--color-text-secondary);
|
|
65
|
+
font-family: var(--font-family-sans);
|
|
66
|
+
font-size: var(--font-size-2xs);
|
|
67
|
+
font-weight: var(--font-weight-semibold);
|
|
68
|
+
font-variant-numeric: tabular-nums;
|
|
69
|
+
line-height: var(--font-line-height-tight);
|
|
70
|
+
white-space: nowrap;
|
|
71
|
+
user-select: none;
|
|
72
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { BrandLockup } from '../chunk-
|
|
1
|
+
export { BrandLockup } from '../chunk-7KBNFFM3.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -9,12 +9,19 @@
|
|
|
9
9
|
|
|
10
10
|
/*
|
|
11
11
|
* IT FITS THE BAR IT IS DRAWN BESIDE. The rail's head is the top bar's own
|
|
12
|
-
* height (
|
|
12
|
+
* height (52px, a fixed token at every density), so the lockup has to come in
|
|
13
13
|
* under that height with its context line on: mark 24 plus one 11px line at
|
|
14
|
-
* the document's own leading plus twice the block padding is
|
|
15
|
-
* normal density and
|
|
16
|
-
* past the bar and put a visible kink across the window on every
|
|
17
|
-
* that names a company.
|
|
14
|
+
* the document's own leading (15.95px) plus twice the block padding is 47.95px
|
|
15
|
+
* at the normal density and 49.07px at comfortable. It was 66.5px once, which
|
|
16
|
+
* grew the head past the bar and put a visible kink across the window on every
|
|
17
|
+
* deployment that names a company.
|
|
18
|
+
*
|
|
19
|
+
* THE BLOCK PADDING IS THE SMALL STEP for that reason. It was the 8px step
|
|
20
|
+
* while the bar was 64px; at 52px the same padding made the lockup 55.95px,
|
|
21
|
+
* past the bar again, and the mark and the context line cannot give anything
|
|
22
|
+
* up (the mark is the home link's 24px target, the line is the document's).
|
|
23
|
+
* The head centres the lockup, so the padding is the least room it keeps at
|
|
24
|
+
* the top and the bottom rather than the room it is drawn with.
|
|
18
25
|
*
|
|
19
26
|
* NO GAP BETWEEN THE TWO LINES. They are one lockup rather than two stacked
|
|
20
27
|
* labels, and the leading is the space between them: a gap on top of it reads
|
|
@@ -33,7 +40,7 @@
|
|
|
33
40
|
link's target height, so it sits on the 24px floor rather than under it.
|
|
34
41
|
A consumer with a wider mark sets this rather than editing two rules. */
|
|
35
42
|
--crewlet-brand-mark: 24px;
|
|
36
|
-
padding: var(--spacing-
|
|
43
|
+
padding: var(--spacing-1) calc(var(--size-nav-gutter) + var(--size-nav-row-pad));
|
|
37
44
|
}
|
|
38
45
|
|
|
39
46
|
.crewlet-brand__home {
|
|
@@ -72,7 +79,7 @@
|
|
|
72
79
|
font-size: var(--font-size-sm);
|
|
73
80
|
font-weight: var(--font-weight-semibold);
|
|
74
81
|
letter-spacing: var(--font-letter-spacing-tight);
|
|
75
|
-
line-height: var(--font-line-height-
|
|
82
|
+
line-height: var(--font-line-height-body);
|
|
76
83
|
color: var(--color-text-primary);
|
|
77
84
|
overflow: hidden;
|
|
78
85
|
text-overflow: ellipsis;
|
|
@@ -82,24 +89,23 @@
|
|
|
82
89
|
/* Indented to the name above it by the mark's own box, and truncated: a
|
|
83
90
|
company name is as long as somebody registered it.
|
|
84
91
|
|
|
85
|
-
THE RAIL'S
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
92
|
+
THE RAIL'S ONE UPPERCASE RUN, on the wide step rather than the wider one an
|
|
93
|
+
Eyebrow takes: at the wider step the company's name was visibly broader
|
|
94
|
+
than the sections under it rather than quieter than them. The nav's group
|
|
95
|
+
labels twenty pixels below are sentence-case words at the caption step, so
|
|
96
|
+
the case and the size are what hold the two apart; the suite holds that. */
|
|
90
97
|
.crewlet-brand__context {
|
|
91
98
|
padding-left: calc(var(--crewlet-brand-mark) + var(--spacing-2));
|
|
92
99
|
font-family: var(--font-family-sans);
|
|
93
100
|
font-size: var(--font-size-2xs);
|
|
94
|
-
/* THE REGULAR WEIGHT
|
|
95
|
-
|
|
96
|
-
the
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
is what a reader scans, so the weight stays there and goes from here. */
|
|
101
|
+
/* THE REGULAR WEIGHT: the company's name is a quiet line under the product
|
|
102
|
+
name, not a heading. It used to be the one thing separating this line
|
|
103
|
+
from the nav's group labels, when both were uppercase at this size; the
|
|
104
|
+
labels are sentence case at the caption step now, and the weight stays
|
|
105
|
+
here because the line is still meant to be read past. */
|
|
100
106
|
font-weight: var(--font-weight-regular);
|
|
101
107
|
letter-spacing: var(--font-letter-spacing-wide);
|
|
102
|
-
line-height: var(--font-line-height-
|
|
108
|
+
line-height: var(--font-line-height-body);
|
|
103
109
|
text-transform: uppercase;
|
|
104
110
|
color: var(--color-text-tertiary);
|
|
105
111
|
overflow: hidden;
|
package/dist/Button/Button.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AnchorHTMLAttributes, type ButtonHTMLAttributes, type ReactNode } from 'react';
|
|
2
|
-
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | '
|
|
2
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'accent' | 'danger';
|
|
3
3
|
export type ButtonSize = 'small' | 'medium' | 'large';
|
|
4
4
|
export type ButtonShape = 'square' | 'pill';
|
|
5
5
|
interface ButtonLook {
|
|
@@ -7,7 +7,12 @@ interface ButtonLook {
|
|
|
7
7
|
variant?: ButtonVariant | undefined;
|
|
8
8
|
size?: ButtonSize | undefined;
|
|
9
9
|
shape?: ButtonShape | undefined;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Drawn before the label. A glyph component, not a name: a glyph strokes in
|
|
12
|
+
* `currentColor`, so it takes the label's ink on every variant. A brand
|
|
13
|
+
* mark such as `CrewletIcon` paints its own accent fill and disappears on
|
|
14
|
+
* the primary and accent fills, so it does not belong in this slot.
|
|
15
|
+
*/
|
|
11
16
|
leadingIcon?: ReactNode;
|
|
12
17
|
/** Drawn after the label: a chevron, an external mark, a count. */
|
|
13
18
|
trailingIcon?: ReactNode;
|
package/dist/Button/index.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* SIX VARIANTS, AND THEY ARE A HIERARCHY RATHER THAN A PALETTE. primary is the
|
|
5
5
|
* one action on the screen and takes the accent fill; secondary is everything
|
|
6
6
|
* else; outline is the branded yes on a page that already has a primary;
|
|
7
|
-
*
|
|
8
|
-
* that spends the critical hue. accent
|
|
9
|
-
* a caller may already have written.
|
|
7
|
+
* ghost is for a dense toolbar and the quiet second answer beside a primary;
|
|
8
|
+
* danger is destructive, and the only one that spends the critical hue. accent
|
|
9
|
+
* is primary's own recipe under the name a caller may already have written.
|
|
10
10
|
*
|
|
11
11
|
* THE ONE ACTION IS THE ACCENT FILL. It reads as the answer a screen is
|
|
12
12
|
* asking for, which is what a filled monochrome button could not do beside a
|
|
@@ -16,9 +16,12 @@
|
|
|
16
16
|
*
|
|
17
17
|
* Every size is a --size-control-* step, so a button, a select and an input in
|
|
18
18
|
* one row are the same height at every density, and none of them can fall
|
|
19
|
-
* under the 24px a finger can hit. The
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* under the 24px a finger can hit. The steps are the approved design's own
|
|
20
|
+
* control rhythm, 30px and 26px for the medium and the small button, and they
|
|
21
|
+
* live in the tokens rather than here because the field and the segmented
|
|
22
|
+
* row beside a button stand at the same height. The padding ramp is one
|
|
23
|
+
* spacing step per size, so a small button in a toolbar is tight and a large
|
|
24
|
+
* one on a landing page is not.
|
|
22
25
|
*/
|
|
23
26
|
|
|
24
27
|
.crewlet-btn {
|
|
@@ -136,9 +139,16 @@
|
|
|
136
139
|
* Primary: the accent fill, and the one action on the screen.
|
|
137
140
|
*
|
|
138
141
|
* `accent` is the same recipe under the other name it is written as. They are
|
|
139
|
-
* one rule rather than two, so the pair cannot drift into two
|
|
142
|
+
* one rule rather than two, so the pair cannot drift into two violets, and the
|
|
140
143
|
* name stays because call sites already spell it.
|
|
141
144
|
*
|
|
145
|
+
* UNDER THE POINTER AND PRESSED IT DARKENS, a step each, and never brightens.
|
|
146
|
+
* The label is the on-accent white in both palettes, so a brighter fill is a
|
|
147
|
+
* step toward it: the approved design's brightness(1.08) hover took the dark
|
|
148
|
+
* accent's label from 4.53:1 to 4.18:1, under the text floor at the one moment
|
|
149
|
+
* the reader is about to press. The steps are tokens rather than a filter, so
|
|
150
|
+
* @crewlethq/tokens can measure them.
|
|
151
|
+
*
|
|
142
152
|
* THE BORDER IS TRANSPARENT rather than the fill: a filled control needs no
|
|
143
153
|
* boundary, and one drawn in the fill's own colour makes the button a step
|
|
144
154
|
* wider than the secondary beside it in every forced-colors stylesheet that
|
|
@@ -163,16 +173,30 @@
|
|
|
163
173
|
border-color: transparent;
|
|
164
174
|
}
|
|
165
175
|
|
|
166
|
-
/*
|
|
176
|
+
/*
|
|
177
|
+
* Secondary: everything else. The CARD's own ground inside the STRONG
|
|
178
|
+
* hairline, the approved design's button.
|
|
179
|
+
*
|
|
180
|
+
* STRONG, NOT DEFAULT, because a button stands on the very card it is filled
|
|
181
|
+
* with: every panel's actions sit on a card, and there the fill is no edge at
|
|
182
|
+
* all and the boundary is the whole of the button. The default hairline is
|
|
183
|
+
* the one that finds a CARD on the sheet, and a button drawn with it was a
|
|
184
|
+
* card-shaped outline of the panel's own divider; the strong step is the one
|
|
185
|
+
* a reader takes for a control's edge.
|
|
186
|
+
*
|
|
187
|
+
* Under the pointer it steps up a rung, to the raised ground, which the
|
|
188
|
+
* palette suite holds a visible step above the card, with the boundary a
|
|
189
|
+
* step stronger again; pressed, the pressed overlay.
|
|
190
|
+
*/
|
|
167
191
|
.crewlet-btn--secondary {
|
|
168
192
|
background: var(--color-surface-subtle);
|
|
169
193
|
color: var(--color-text-primary);
|
|
170
|
-
border-color: var(--color-border-
|
|
194
|
+
border-color: var(--color-border-strong);
|
|
171
195
|
}
|
|
172
196
|
|
|
173
197
|
.crewlet-btn--secondary:hover:not(:disabled):not([aria-disabled='true']) {
|
|
174
198
|
background: var(--color-surface-elevated);
|
|
175
|
-
border-color: var(--color-border-hover);
|
|
199
|
+
border-color: var(--color-border-strong-hover);
|
|
176
200
|
}
|
|
177
201
|
|
|
178
202
|
.crewlet-btn--secondary:active:not(:disabled):not([aria-disabled='true']) {
|
|
@@ -191,19 +215,25 @@
|
|
|
191
215
|
background: var(--color-brand-accent-soft);
|
|
192
216
|
}
|
|
193
217
|
|
|
194
|
-
/*
|
|
195
|
-
|
|
218
|
+
/*
|
|
219
|
+
* Ghost: no ground and no boundary, for a dense toolbar and for the quiet
|
|
220
|
+
* answer beside a primary ("Reassign" next to "Raise budget"). It is the word
|
|
221
|
+
* IconButton's borderless square uses, so a toolbar holding both is written
|
|
222
|
+
* in one vocabulary. Under the pointer it takes the hover overlay, the one
|
|
223
|
+
* every row takes, and its ink steps up to the primary text.
|
|
224
|
+
*/
|
|
225
|
+
.crewlet-btn--ghost {
|
|
196
226
|
background: transparent;
|
|
197
227
|
color: var(--color-text-secondary);
|
|
198
228
|
border-color: transparent;
|
|
199
229
|
}
|
|
200
230
|
|
|
201
|
-
.crewlet-btn--
|
|
231
|
+
.crewlet-btn--ghost:hover:not(:disabled):not([aria-disabled='true']) {
|
|
202
232
|
background: var(--color-surface-hover);
|
|
203
233
|
color: var(--color-text-primary);
|
|
204
234
|
}
|
|
205
235
|
|
|
206
|
-
.crewlet-btn--
|
|
236
|
+
.crewlet-btn--ghost:active:not(:disabled):not([aria-disabled='true']) {
|
|
207
237
|
background: var(--color-surface-pressed);
|
|
208
238
|
}
|
|
209
239
|
|
|
@@ -212,15 +242,16 @@
|
|
|
212
242
|
*
|
|
213
243
|
* A SECONDARY THAT HAS GONE RED, not a red slab. It sits in the same row as
|
|
214
244
|
* Cancel and it is the button a reader must not press by reflex, so it holds
|
|
215
|
-
* the secondary's own weight
|
|
216
|
-
* INK, which is the step measured as
|
|
217
|
-
*
|
|
218
|
-
*
|
|
245
|
+
* the secondary's own weight, the card inside the strong hairline, until it
|
|
246
|
+
* is pointed at and states itself in its INK, which is the step measured as
|
|
247
|
+
* text; the red fill it used to carry pulled the eye to the destructive
|
|
248
|
+
* answer first on every dialog that had one. The hue arrives on hover, as the
|
|
249
|
+
* tint plus the full fill on the boundary.
|
|
219
250
|
*/
|
|
220
251
|
.crewlet-btn--danger {
|
|
221
252
|
background: var(--color-surface-subtle);
|
|
222
253
|
color: var(--color-feedback-danger-ink);
|
|
223
|
-
border-color: var(--color-border-
|
|
254
|
+
border-color: var(--color-border-strong);
|
|
224
255
|
}
|
|
225
256
|
|
|
226
257
|
.crewlet-btn--danger:hover:not(:disabled):not([aria-disabled='true']) {
|
package/dist/Callout/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Callout } from '../chunk-
|
|
1
|
+
export { Callout } from '../chunk-R6FBDTP3.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
package/dist/Canvas/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
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, anchorView, beyondSlop, clampPan, clampZoom, fitView, 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, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-BMYPGGPV.js';
|
|
2
2
|
import '../chunk-53DVJCVW.js';
|
|
3
3
|
import '../chunk-7RPGY3JE.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-R25RGPUB.js';
|
|
5
|
+
import '../chunk-4UQ7SMPK.js';
|
|
6
|
+
import '../chunk-ETYEBKR4.js';
|
|
7
7
|
import '../chunk-BZFWDIV6.js';
|
|
8
8
|
import '../chunk-ODEQTPFM.js';
|