@felloinnovations/brand-kit 0.4.0 → 0.5.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/AGENTS.md +198 -24
- package/CHANGELOG.md +197 -0
- package/README.md +34 -7
- package/design-system/01-how-claude-decides.md +26 -17
- package/design-system/02-principles.md +11 -6
- package/design-system/03-colour.md +134 -47
- package/design-system/04-type.md +45 -23
- package/design-system/05-space-and-layout.md +175 -52
- package/design-system/06-sizing-profiles.md +4 -4
- package/design-system/07-scrolling.md +66 -20
- package/design-system/08-choosing-components.md +50 -22
- package/design-system/09-charts.md +71 -28
- package/design-system/10-patterns.md +33 -10
- package/design-system/11-page-recipes.md +110 -23
- package/design-system/12-content.md +2 -1
- package/design-system/13-motion.md +330 -47
- package/design-system/14-accessibility.md +47 -24
- package/design-system/15-ai-experiences.md +11 -6
- package/design-system/16-creativity.md +1 -1
- package/design-system/17-decisions.md +357 -1
- package/design-system/18-checklist.md +79 -16
- package/design-system/19-public-pages.md +6 -4
- package/design-system/20-palettes.md +275 -0
- package/design-system/README.md +30 -17
- package/design-system/components/ActionList/README.md +96 -10
- package/design-system/components/ActionList/preview.html +52 -7
- package/design-system/components/ActionList/style.css +64 -0
- package/design-system/components/ActivityGrid/README.md +38 -2
- package/design-system/components/ActivityGrid/preview.html +1 -1
- package/design-system/components/ActivityGrid/style.css +35 -0
- package/design-system/components/AppShell/README.md +205 -75
- package/design-system/components/AppShell/preview.html +339 -58
- package/design-system/components/AppShell/style.css +154 -0
- package/design-system/components/Avatar/README.md +37 -10
- package/design-system/components/Avatar/preview.html +13 -4
- package/design-system/components/Avatar/style.css +14 -0
- package/design-system/components/Badge/README.md +41 -19
- package/design-system/components/Badge/preview.html +13 -10
- package/design-system/components/Badge/style.css +23 -0
- package/design-system/components/Banner/README.md +30 -9
- package/design-system/components/Banner/preview.html +1 -1
- package/design-system/components/Banner/style.css +19 -0
- package/design-system/components/Breadcrumb/README.md +58 -46
- package/design-system/components/Breadcrumb/preview.html +16 -16
- package/design-system/components/Breadcrumb/style.css +17 -0
- package/design-system/components/Button/README.md +113 -55
- package/design-system/components/Button/preview.html +98 -25
- package/design-system/components/Button/style.css +86 -0
- package/design-system/components/Card/README.md +158 -49
- package/design-system/components/Card/preview.html +141 -19
- package/design-system/components/Card/style.css +115 -0
- package/design-system/components/CardBoard/README.md +58 -37
- package/design-system/components/CardBoard/preview.html +26 -29
- package/design-system/components/ChatCard/README.md +115 -29
- package/design-system/components/ChatCard/preview.html +149 -32
- package/design-system/components/ChatCard/style.css +49 -0
- package/design-system/components/ChatShell/README.md +116 -0
- package/design-system/components/ChatShell/preview.html +201 -0
- package/design-system/components/ChatShell/style.css +86 -0
- package/design-system/components/ChatTurn/README.md +78 -35
- package/design-system/components/ChatTurn/preview.html +60 -28
- package/design-system/components/ChatTurn/style.css +50 -0
- package/design-system/components/CheckRow/README.md +141 -0
- package/design-system/components/CheckRow/preview.html +140 -0
- package/design-system/components/CheckRow/style.css +88 -0
- package/design-system/components/Checkbox/README.md +58 -22
- package/design-system/components/Checkbox/preview.html +112 -50
- package/design-system/components/Checkbox/style.css +45 -0
- package/design-system/components/Chip/README.md +78 -47
- package/design-system/components/Chip/preview.html +29 -4
- package/design-system/components/Chip/style.css +17 -0
- package/design-system/components/Combobox/README.md +44 -11
- package/design-system/components/Combobox/preview.html +35 -12
- package/design-system/components/Combobox/style.css +54 -0
- package/design-system/components/Composer/README.md +137 -35
- package/design-system/components/Composer/preview.html +115 -40
- package/design-system/components/Composer/style.css +81 -0
- package/design-system/components/ConfirmDialog/README.md +73 -52
- package/design-system/components/ConfirmDialog/preview.html +70 -26
- package/design-system/components/ConfirmDialog/style.css +5 -0
- package/design-system/components/Cover/preview.html +3 -3
- package/design-system/components/Cover/style.css +19 -0
- package/design-system/components/DateInput/README.md +77 -12
- package/design-system/components/DateInput/preview.html +27 -12
- package/design-system/components/DateInput/style.css +38 -0
- package/design-system/components/Dialog/README.md +112 -44
- package/design-system/components/Dialog/preview.html +141 -18
- package/design-system/components/Dialog/style.css +74 -0
- package/design-system/components/EmptyState/README.md +42 -12
- package/design-system/components/EmptyState/preview.html +11 -11
- package/design-system/components/EmptyState/style.css +9 -0
- package/design-system/components/EntryShell/README.md +73 -48
- package/design-system/components/EntryShell/preview.html +60 -27
- package/design-system/components/EntryShell/style.css +19 -0
- package/design-system/components/FeatureGrid/README.md +61 -39
- package/design-system/components/FeatureGrid/preview.html +2 -2
- package/design-system/components/FeatureGrid/style.css +20 -0
- package/design-system/components/FileUpload/README.md +33 -3
- package/design-system/components/FileUpload/preview.html +18 -4
- package/design-system/components/FileUpload/style.css +23 -0
- package/design-system/components/FilterBar/README.md +114 -0
- package/design-system/components/FilterBar/preview.html +82 -0
- package/design-system/components/FilterBar/style.css +22 -0
- package/design-system/components/Fold/README.md +84 -26
- package/design-system/components/Fold/preview.html +77 -34
- package/design-system/components/Fold/style.css +48 -0
- package/design-system/components/Footer/README.md +62 -39
- package/design-system/components/Footer/preview.html +5 -5
- package/design-system/components/Footer/style.css +30 -0
- package/design-system/components/FunnelBars/README.md +24 -3
- package/design-system/components/FunnelBars/preview.html +5 -5
- package/design-system/components/FunnelBars/style.css +13 -0
- package/design-system/components/GoalBars/README.md +54 -10
- package/design-system/components/GoalBars/preview.html +69 -28
- package/design-system/components/GoalBars/style.css +51 -0
- package/design-system/components/GoalTicks/README.md +74 -58
- package/design-system/components/GoalTicks/preview.html +41 -118
- package/design-system/components/GoalTicks/style.css +37 -0
- package/design-system/components/GoalTubes/README.md +29 -3
- package/design-system/components/GoalTubes/preview.html +6 -6
- package/design-system/components/GoalTubes/style.css +23 -0
- package/design-system/components/Heatmap/README.md +133 -0
- package/design-system/components/Heatmap/preview.html +168 -0
- package/design-system/components/Heatmap/style.css +119 -0
- package/design-system/components/Hero/README.md +58 -40
- package/design-system/components/Hero/preview.html +1 -1
- package/design-system/components/Hero/style.css +19 -0
- package/design-system/components/HoverCard/README.md +114 -0
- package/design-system/components/HoverCard/preview.html +107 -0
- package/design-system/components/HoverCard/style.css +59 -0
- package/design-system/components/IconButton/README.md +69 -38
- package/design-system/components/IconButton/preview.html +77 -43
- package/design-system/components/IconButton/style.css +45 -0
- package/design-system/components/Input/README.md +36 -11
- package/design-system/components/Input/preview.html +1 -1
- package/design-system/components/Input/style.css +23 -0
- package/design-system/components/KanbanBoard/README.md +93 -45
- package/design-system/components/KanbanBoard/preview.html +159 -43
- package/design-system/components/KanbanBoard/style.css +53 -0
- package/design-system/components/Kbd/README.md +25 -9
- package/design-system/components/Kbd/preview.html +6 -2
- package/design-system/components/Kbd/style.css +9 -0
- package/design-system/components/KitButton/README.md +81 -47
- package/design-system/components/KitButton/preview.html +35 -13
- package/design-system/components/KitButton/style.css +46 -0
- package/design-system/components/KitCard/README.md +75 -44
- package/design-system/components/KitCard/preview.html +18 -10
- package/design-system/components/KitCard/style.css +15 -0
- package/design-system/components/KitInput/README.md +54 -39
- package/design-system/components/KitInput/preview.html +7 -7
- package/design-system/components/KitInput/style.css +23 -0
- package/design-system/components/Leaderboard/README.md +76 -49
- package/design-system/components/Leaderboard/preview.html +61 -26
- package/design-system/components/Leaderboard/style.css +44 -0
- package/design-system/components/ListDetail/README.md +222 -0
- package/design-system/components/ListDetail/preview.html +213 -0
- package/design-system/components/ListDetail/style.css +148 -0
- package/design-system/components/LoadBar/README.md +79 -0
- package/design-system/components/LoadBar/preview.html +40 -0
- package/design-system/components/LoadBar/style.css +17 -0
- package/design-system/components/MarketingNav/README.md +76 -42
- package/design-system/components/MarketingNav/preview.html +37 -8
- package/design-system/components/MarketingNav/style.css +45 -0
- package/design-system/components/Matrix/README.md +129 -0
- package/design-system/components/Matrix/preview.html +99 -0
- package/design-system/components/Matrix/style.css +84 -0
- package/design-system/components/Menu/README.md +117 -41
- package/design-system/components/Menu/preview.html +85 -23
- package/design-system/components/Menu/style.css +61 -0
- package/design-system/components/Meter/README.md +39 -4
- package/design-system/components/Meter/preview.html +18 -1
- package/design-system/components/Meter/style.css +23 -0
- package/design-system/components/MetricTile/README.md +237 -0
- package/design-system/components/MetricTile/preview.html +241 -0
- package/design-system/components/MetricTile/style.css +129 -0
- package/design-system/components/Morph/README.md +106 -0
- package/design-system/components/Morph/preview.html +103 -0
- package/design-system/components/Morph/style.css +31 -0
- package/design-system/components/Motion/README.md +164 -0
- package/design-system/components/Motion/preview.html +2537 -0
- package/design-system/components/NumberInput/README.md +27 -8
- package/design-system/components/NumberInput/preview.html +21 -5
- package/design-system/components/NumberInput/style.css +34 -0
- package/design-system/components/PaceBar/README.md +75 -0
- package/design-system/components/PaceBar/preview.html +67 -0
- package/design-system/components/PaceBar/style.css +25 -0
- package/design-system/components/Page/README.md +57 -18
- package/design-system/components/Page/preview.html +15 -17
- package/design-system/components/Page/style.css +7 -0
- package/design-system/components/PageBar/README.md +90 -34
- package/design-system/components/PageBar/preview.html +60 -19
- package/design-system/components/PageBar/style.css +35 -0
- package/design-system/components/PageHero/README.md +87 -51
- package/design-system/components/PageHero/preview.html +35 -6
- package/design-system/components/PageHero/style.css +31 -0
- package/design-system/components/Pagination/README.md +70 -49
- package/design-system/components/Pagination/preview.html +24 -15
- package/design-system/components/Pagination/style.css +12 -0
- package/design-system/components/Panel/README.md +109 -51
- package/design-system/components/Panel/preview.html +118 -20
- package/design-system/components/Panel/style.css +51 -0
- package/design-system/components/PasswordInput/README.md +50 -18
- package/design-system/components/PasswordInput/preview.html +71 -21
- package/design-system/components/PasswordInput/style.css +31 -0
- package/design-system/components/Plate/README.md +75 -17
- package/design-system/components/Plate/preview.html +40 -7
- package/design-system/components/Plate/style.css +37 -0
- package/design-system/components/Popover/README.md +70 -49
- package/design-system/components/Popover/preview.html +44 -22
- package/design-system/components/Popover/style.css +41 -0
- package/design-system/components/PricingTable/README.md +69 -49
- package/design-system/components/PricingTable/preview.html +21 -21
- package/design-system/components/PricingTable/style.css +21 -0
- package/design-system/components/ProgressPetals/README.md +31 -3
- package/design-system/components/ProgressPetals/preview.html +14 -15
- package/design-system/components/ProgressPetals/style.css +27 -0
- package/design-system/components/README.md +151 -0
- package/design-system/components/Radio/README.md +40 -17
- package/design-system/components/Radio/preview.html +16 -1
- package/design-system/components/Radio/style.css +21 -0
- package/design-system/components/RankBar/README.md +29 -2
- package/design-system/components/RankBar/preview.html +14 -12
- package/design-system/components/RankBar/style.css +18 -0
- package/design-system/components/Ring/README.md +61 -11
- package/design-system/components/Ring/preview.html +55 -10
- package/design-system/components/Ring/style.css +49 -0
- package/design-system/components/ScoreHero/README.md +91 -0
- package/design-system/components/ScoreHero/preview.html +104 -0
- package/design-system/components/ScoreHero/style.css +32 -0
- package/design-system/components/Section/README.md +72 -33
- package/design-system/components/Section/preview.html +46 -16
- package/design-system/components/Section/style.css +18 -0
- package/design-system/components/Segmented/README.md +100 -55
- package/design-system/components/Segmented/preview.html +107 -26
- package/design-system/components/Segmented/style.css +94 -0
- package/design-system/components/SegmentedProgress/README.md +64 -0
- package/design-system/components/SegmentedProgress/preview.html +69 -0
- package/design-system/components/SegmentedProgress/style.css +11 -0
- package/design-system/components/Select/README.md +47 -12
- package/design-system/components/Select/preview.html +28 -2
- package/design-system/components/Select/style.css +22 -0
- package/design-system/components/ShareBar/README.md +69 -0
- package/design-system/components/ShareBar/preview.html +72 -0
- package/design-system/components/ShareBar/style.css +25 -0
- package/design-system/components/SideList/README.md +147 -0
- package/design-system/components/SideList/preview.html +139 -0
- package/design-system/components/SideList/style.css +94 -0
- package/design-system/components/Skeleton/README.md +52 -16
- package/design-system/components/Skeleton/preview.html +35 -23
- package/design-system/components/Skeleton/style.css +22 -0
- package/design-system/components/Slider/README.md +95 -0
- package/design-system/components/Slider/preview.html +49 -0
- package/design-system/components/Slider/style.css +13 -0
- package/design-system/components/Split/README.md +112 -0
- package/design-system/components/Split/preview.html +105 -0
- package/design-system/components/Split/style.css +30 -0
- package/design-system/components/Starter/README.md +21 -9
- package/design-system/components/Starter/preview.html +5 -5
- package/design-system/components/Stat/README.md +64 -43
- package/design-system/components/Stat/preview.html +3 -3
- package/design-system/components/Stat/style.css +15 -0
- package/design-system/components/StatTiles/README.md +88 -44
- package/design-system/components/StatTiles/preview.html +142 -71
- package/design-system/components/StatTiles/style.css +64 -0
- package/design-system/components/StatusLine/README.md +85 -0
- package/design-system/components/StatusLine/preview.html +49 -0
- package/design-system/components/StatusLine/style.css +14 -0
- package/design-system/components/StatusScreen/README.md +49 -35
- package/design-system/components/StatusScreen/preview.html +20 -5
- package/design-system/components/StatusScreen/style.css +9 -0
- package/design-system/components/StepLine/README.md +97 -0
- package/design-system/components/StepLine/preview.html +108 -0
- package/design-system/components/StepLine/style.css +62 -0
- package/design-system/components/Stepper/README.md +35 -13
- package/design-system/components/Stepper/style.css +13 -0
- package/design-system/components/StreakCalendar/README.md +22 -1
- package/design-system/components/StreakCalendar/preview.html +10 -10
- package/design-system/components/StreakCalendar/style.css +12 -0
- package/design-system/components/SuggestionChip/README.md +87 -0
- package/design-system/components/SuggestionChip/preview.html +42 -0
- package/design-system/components/SuggestionChip/style.css +20 -0
- package/design-system/components/Switch/README.md +44 -24
- package/design-system/components/Switch/preview.html +23 -8
- package/design-system/components/Switch/style.css +31 -0
- package/design-system/components/Table/README.md +129 -58
- package/design-system/components/Table/preview.html +106 -72
- package/design-system/components/Table/style.css +104 -0
- package/design-system/components/Tabs/README.md +71 -46
- package/design-system/components/Tabs/preview.html +56 -24
- package/design-system/components/Tabs/style.css +44 -0
- package/design-system/components/Testimonial/README.md +48 -32
- package/design-system/components/Testimonial/preview.html +14 -14
- package/design-system/components/Testimonial/style.css +12 -0
- package/design-system/components/TextArea/README.md +27 -11
- package/design-system/components/TextArea/preview.html +8 -2
- package/design-system/components/TextArea/style.css +12 -0
- package/design-system/components/ThemeSwitch/README.md +116 -0
- package/design-system/components/ThemeSwitch/preview.html +57 -0
- package/design-system/components/ThemeSwitch/style.css +6 -0
- package/design-system/components/TickRow/README.md +52 -36
- package/design-system/components/TickRow/preview.html +64 -41
- package/design-system/components/TickRow/style.css +23 -0
- package/design-system/components/TickStrip/README.md +95 -0
- package/design-system/components/TickStrip/preview.html +88 -0
- package/design-system/components/TickStrip/style.css +42 -0
- package/design-system/components/Tile/README.md +79 -18
- package/design-system/components/Tile/preview.html +91 -40
- package/design-system/components/Tile/style.css +36 -0
- package/design-system/components/Timeline/README.md +68 -48
- package/design-system/components/Timeline/preview.html +27 -15
- package/design-system/components/Timeline/style.css +25 -0
- package/design-system/components/Toast/README.md +70 -38
- package/design-system/components/Toast/preview.html +43 -8
- package/design-system/components/Toast/style.css +25 -0
- package/design-system/components/Tooltip/README.md +93 -35
- package/design-system/components/Tooltip/preview.html +69 -15
- package/design-system/components/Tooltip/style.css +78 -0
- package/design-system/components/TopBar/README.md +67 -53
- package/design-system/components/TopBar/preview.html +14 -27
- package/design-system/components/TopBar/style.css +35 -0
- package/design-system/components/TopicRail/README.md +108 -0
- package/design-system/components/TopicRail/preview.html +58 -0
- package/design-system/components/TopicRail/style.css +48 -0
- package/design-system/components/TrendBars/README.md +52 -14
- package/design-system/components/TrendBars/preview.html +65 -32
- package/design-system/components/TrendBars/style.css +25 -0
- package/design-system/components/TrendLine/README.md +164 -0
- package/design-system/components/TrendLine/preview.html +373 -0
- package/design-system/components/TrendLine/style.css +155 -0
- package/design-system/components/Well/README.md +64 -22
- package/design-system/components/Well/preview.html +14 -14
- package/design-system/components/Well/style.css +22 -0
- package/design-system/components/_house.css +324 -0
- package/design-system/components/bundle.css +4091 -744
- package/design-system/tokens.json +1314 -124
- package/dist/fello-core.css +2 -2
- package/dist/fello.css +6 -1369
- package/dist/fello.scoped.css +7 -0
- package/dist/index.d.ts +110 -11
- package/dist/index.js +781 -96
- package/dist/palettes.d.ts +464 -0
- package/dist/palettes.js +497 -0
- package/dist/scoped.d.ts +3 -0
- package/dist/scoped.js +16 -0
- package/dist/toast.d.ts +14 -0
- package/dist/toast.js +33 -29
- package/dist/tokens.d.ts +1686 -62
- package/dist/tokens.js +1668 -61
- package/package.json +20 -4
- package/scripts/check-palette.mjs +295 -0
- package/scripts/token-model.mjs +552 -0
- package/tokens/_dark.css +174 -0
- package/tokens/_palettes.css +46 -0
- package/tokens/_product.css +266 -53
- package/tokens/_source.hubl.css +39 -19
- package/tokens/design-tokens.json +319 -0
- package/tokens/palettes.ts +504 -0
- package/tokens/shadcn-compat.css +19 -19
- package/tokens/shadcn-compat.hsl.css +76 -0
- package/tokens/tokens.css +1292 -62
- package/tokens/tokens.md +588 -61
- package/tokens/tokens.root.css +1298 -62
- package/tokens/tokens.ts +1677 -64
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The kit's marketing piece: for a public page, never a product screen.
|
|
2
2
|
|
|
3
|
-
Three plans side by side, the
|
|
3
|
+
Three plans side by side, the recommended one ringed in navy.
|
|
4
4
|
|
|
5
5
|
## Use it when
|
|
6
6
|
|
|
@@ -11,59 +11,58 @@ Three plans side by side, the middle one rung in navy as the one to pick.
|
|
|
11
11
|
|
|
12
12
|
- More than three tiers: a fourth plan crowds the row; use a comparison table instead.
|
|
13
13
|
- A single price with no tiers: a `Stat` or a plain sentence does that job without the ceremony of a grid.
|
|
14
|
-
- Any product screen
|
|
15
|
-
product; this is a sales-page-only pattern.
|
|
14
|
+
- Any product screen: a signed-in workspace has no pricing grid; this is a sales-page-only pattern.
|
|
16
15
|
|
|
17
16
|
## Anatomy
|
|
18
17
|
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
-
|
|
18
|
+
- Band: the page cream (`--color-bg-page`), `--space-xl` (32px) top and bottom, `--layout-margin` (48px) sides
|
|
19
|
+
(16px under 40rem).
|
|
20
|
+
- Row (`__grid`): a grid of columns at least 240px wide, `--layout-col-gap` (24px) apart, the plans equal height in
|
|
21
|
+
each row. Three fit a screen from 864px wide; between that and a phone two sit in a row and the third takes the
|
|
22
|
+
first column of the next, the same width as the others; on a phone, one column.
|
|
23
|
+
- Plan (`__plan`): 4px corners, a 1px `--color-border-default` edge, `--color-surface`, `--space-lg` (24px) padding.
|
|
24
|
+
- Name (`__name`): an `<h3>`, 20/28 semibold `--color-text-heading`.
|
|
25
|
+
- Price (`__price`): `--space-sm` (12px) under the name; the figure (`__price-value`) 48/56 semibold, tabular, with
|
|
26
|
+
"/month" (`__price-period`) beside it at 14px `--color-text-muted`, both on one baseline.
|
|
27
|
+
- List (`__list`): a `<ul>` of `<li>` rows, `--space-lg` under the price, rows `--space-sm` apart; each row (`__row`) 14/20
|
|
28
|
+
`--color-text-primary` with a 16px check in `--color-stat-positive` (teal), `--space-xs` (8px) before the words.
|
|
29
|
+
- CTA (`__cta`): `--space-lg` above it, a `KitButton` `large` and full width, at the plan's foot.
|
|
30
|
+
- Popular (`__plan--popular`): the edge turns `--color-text-heading` and a 2px inset ring (`--ws-ring`) thickens it
|
|
31
|
+
inward, 3px in all, so the plan's outer edge stays level with its neighbours'. A "Most popular" badge (`__badge`) sits
|
|
32
|
+
on the ring's top edge, `--space-lg` from the left: 12/18 medium navy words on a 10% navy
|
|
33
|
+
tint, a pill, `--space-3xs` by `--space-xs-plus` (2 by 10) padding.
|
|
29
34
|
|
|
30
35
|
## Variants and sizes
|
|
31
36
|
|
|
32
|
-
One layout, three columns.
|
|
33
|
-
positions can carry it.
|
|
37
|
+
One layout, up to three columns. Popular is a state, not a variant: any of the plans can carry it.
|
|
34
38
|
|
|
35
39
|
## States
|
|
36
40
|
|
|
37
|
-
- **Default:** the hairline
|
|
38
|
-
- **Popular:** the
|
|
39
|
-
|
|
40
|
-
- **
|
|
41
|
-
- **
|
|
42
|
-
|
|
43
|
-
- **
|
|
44
|
-
|
|
45
|
-
- **Narrow:** below the content width the three plans stack to one column, the popular one keeping its ring and
|
|
46
|
-
badge so it still reads as the recommended choice in a single column.
|
|
41
|
+
- **Default:** the hairline edge, no badge, a `secondary` CTA.
|
|
42
|
+
- **Popular:** the navy ring, the badge on its edge, a `primary` CTA. One plan at a time.
|
|
43
|
+
- **Hover / focus:** only the CTA reacts (see `KitButton`); the plans are static.
|
|
44
|
+
- **Selected / pending / disabled / error / empty:** not applicable.
|
|
45
|
+
- **Long label:** a longer name or feature line wraps; plans in a row stay equal height and their CTAs stay level. A
|
|
46
|
+
CTA label too long for its plan wraps to two balanced lines (see `KitButton`).
|
|
47
|
+
- **Narrow:** two to a row on a tablet, then one column on a phone; a plan that wraps never stretches wider than its
|
|
48
|
+
column. The popular one keeps its ring and badge.
|
|
47
49
|
|
|
48
50
|
## Behaviour
|
|
49
51
|
|
|
50
|
-
- Keyboard: the CTA
|
|
51
|
-
|
|
52
|
-
- Pointer / touch: only the CTA reacts to hover or press.
|
|
52
|
+
- Keyboard: the CTA in each plan is its only focusable element, in document order.
|
|
53
|
+
- Pointer / touch: only the CTA reacts; it is 45px tall.
|
|
53
54
|
- Motion: none of its own.
|
|
54
55
|
|
|
55
56
|
## Content
|
|
56
57
|
|
|
57
|
-
- Plan name: one word or short phrase ("Starter", "Pro", "Team").
|
|
58
|
+
- Plan name: one word or a short phrase ("Starter", "Pro", "Team").
|
|
58
59
|
- Price: a whole number with no decimals unless the real price has them; "/month" always lower case.
|
|
59
|
-
- Feature rows: short phrases, sentence case, no em dash,
|
|
60
|
-
- CTA: "Start free trial" on the
|
|
61
|
-
high-touch plan.
|
|
60
|
+
- Feature rows: short phrases, sentence case, no em dash, most persuasive first.
|
|
61
|
+
- CTA: "Start free trial" on the lower tiers, "Talk to sales" on a custom or high-touch top tier.
|
|
62
62
|
|
|
63
63
|
## Props
|
|
64
64
|
|
|
65
|
-
Not a kit export; composed from
|
|
66
|
-
would take:
|
|
65
|
+
Not a kit export; composed from the kit's card, `Badge` (navy tone) and `KitButton`. A reusable version would take:
|
|
67
66
|
|
|
68
67
|
| Prop | Type | Meaning |
|
|
69
68
|
| --- | --- | --- |
|
|
@@ -71,22 +70,43 @@ would take:
|
|
|
71
70
|
|
|
72
71
|
## Rules
|
|
73
72
|
|
|
74
|
-
- **
|
|
75
|
-
|
|
76
|
-
- The ring
|
|
77
|
-
|
|
78
|
-
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
-
|
|
85
|
-
|
|
73
|
+
- **A wrapped plan keeps its column** (4 Nov 2026): the row was a wrapping flex row, so at 768px the third plan ran the
|
|
74
|
+
full width under the other two, its CTA 622px wide. It is a grid now.
|
|
75
|
+
- **The ring sits inside the edge** (4 Nov 2026): it was a 2px spread outside the border, so the popular plan stood 2px
|
|
76
|
+
past its neighbours on every side and the gap beside it was 22, not 24.
|
|
77
|
+
- **Every plan's rows line up** (4 Nov 2026): the badge used to sit in the popular plan's flow, pushing its name, price
|
|
78
|
+
and list 34px below its neighbours'. It sits on the ring now, out of the flow.
|
|
79
|
+
- **A plan's name is a heading and its features a list** (WCAG 1.3.1), so a screen reader can jump plan to plan and
|
|
80
|
+
hears how many rows each has. The classes set the look, not the elements.
|
|
81
|
+
- The ring reuses `--ws-ring` (2px), the system's own stroke for a 2px ring, in the heading colour so it follows the
|
|
82
|
+
theme.
|
|
83
|
+
- The badge is the kit's navy `Badge` tone, mixed into the surface so it is opaque where it crosses the ring.
|
|
84
|
+
- The check is teal (`--color-stat-positive`), the tone the product uses for "done", never salmon ("needs you").
|
|
85
|
+
- Price size (`--font-size-4xl`, 48px) is the kit's "marketing section heading" step, reused for the one number a plan
|
|
86
|
+
is built around.
|
|
86
87
|
|
|
87
88
|
## Source
|
|
88
89
|
|
|
89
|
-
- **Derived from**:
|
|
90
|
-
|
|
91
|
-
check icon teal per the system's colour-meaning rule.
|
|
90
|
+
- **Derived from**: the kit's card, its `badgeVariants` (tone `navy`), `KitButton` and the system's tokens
|
|
91
|
+
(`layout-col-gap`, `ws-ring`, `font-size-4xl`, `font-size-lg2`, `ws-icon`, `space-3xs`, `space-xs-plus`).
|
|
92
92
|
- **Precedent**: an intentional addition decided from the system, 26 Oct 2026.
|
|
93
|
+
|
|
94
|
+
## Markup
|
|
95
|
+
|
|
96
|
+
```html
|
|
97
|
+
<section class="ws-pricing-table">
|
|
98
|
+
<div class="ws-pricing-table__grid">
|
|
99
|
+
<div class="ws-pricing-table__plan ws-pricing-table__plan--popular">
|
|
100
|
+
<span class="ws-pricing-table__badge">Most popular</span>
|
|
101
|
+
<h3 class="ws-pricing-table__name">Pro</h3>
|
|
102
|
+
<div class="ws-pricing-table__price"><span class="ws-pricing-table__price-value">$129</span><span class="ws-pricing-table__price-period">/month</span></div>
|
|
103
|
+
<ul class="ws-pricing-table__list">
|
|
104
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Up to 12 agents</li>
|
|
105
|
+
</ul>
|
|
106
|
+
<div class="ws-pricing-table__cta"><a class="ws-kit-button ws-kit-button--large ws-kit-button--primary ws-kit-button--full" href="/trial">Start free trial</a></div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
</section>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Styles: the `PricingTable` block (`components/PricingTable/style.css`), plus `KitButton`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<!-- @dsCard group="Marketing" height=
|
|
1
|
+
<!-- @dsCard group="Marketing" height=435 -->
|
|
2
2
|
<!doctype html>
|
|
3
|
-
<html>
|
|
3
|
+
<html lang="en">
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>PricingTable</title>
|
|
@@ -13,37 +13,37 @@
|
|
|
13
13
|
<div class="ws-pricing-table__grid">
|
|
14
14
|
|
|
15
15
|
<div class="ws-pricing-table__plan">
|
|
16
|
-
<
|
|
16
|
+
<h3 class="ws-pricing-table__name">Starter</h3>
|
|
17
17
|
<div class="ws-pricing-table__price"><span class="ws-pricing-table__price-value">$49</span><span class="ws-pricing-table__price-period">/month</span></div>
|
|
18
|
-
<
|
|
19
|
-
<
|
|
20
|
-
<
|
|
21
|
-
<
|
|
22
|
-
</
|
|
18
|
+
<ul class="ws-pricing-table__list">
|
|
19
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Up to 3 agents</li>
|
|
20
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Call scripts and live call reviews</li>
|
|
21
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>50 leads</li>
|
|
22
|
+
</ul>
|
|
23
23
|
<div class="ws-pricing-table__cta"><button class="ws-kit-button ws-kit-button--large ws-kit-button--secondary ws-kit-button--full">Start free trial</button></div>
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
<div class="ws-pricing-table__plan ws-pricing-table__plan--popular">
|
|
27
27
|
<span class="ws-pricing-table__badge">Most popular</span>
|
|
28
|
-
<
|
|
28
|
+
<h3 class="ws-pricing-table__name">Pro</h3>
|
|
29
29
|
<div class="ws-pricing-table__price"><span class="ws-pricing-table__price-value">$129</span><span class="ws-pricing-table__price-period">/month</span></div>
|
|
30
|
-
<
|
|
31
|
-
<
|
|
32
|
-
<
|
|
33
|
-
<
|
|
34
|
-
<
|
|
35
|
-
</
|
|
30
|
+
<ul class="ws-pricing-table__list">
|
|
31
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Up to 12 agents</li>
|
|
32
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Live call reviews</li>
|
|
33
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Unlimited leads</li>
|
|
34
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Weekly content drafts</li>
|
|
35
|
+
</ul>
|
|
36
36
|
<div class="ws-pricing-table__cta"><button class="ws-kit-button ws-kit-button--large ws-kit-button--primary ws-kit-button--full">Start free trial</button></div>
|
|
37
37
|
</div>
|
|
38
38
|
|
|
39
39
|
<div class="ws-pricing-table__plan">
|
|
40
|
-
<
|
|
40
|
+
<h3 class="ws-pricing-table__name">Team</h3>
|
|
41
41
|
<div class="ws-pricing-table__price"><span class="ws-pricing-table__price-value">$249</span><span class="ws-pricing-table__price-period">/month</span></div>
|
|
42
|
-
<
|
|
43
|
-
<
|
|
44
|
-
<
|
|
45
|
-
<
|
|
46
|
-
</
|
|
42
|
+
<ul class="ws-pricing-table__list">
|
|
43
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Unlimited agents</li>
|
|
44
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>Everything in Pro</li>
|
|
45
|
+
<li class="ws-pricing-table__row"><svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>A dedicated success manager who runs your first ninety days of onboarding</li>
|
|
46
|
+
</ul>
|
|
47
47
|
<div class="ws-pricing-table__cta"><button class="ws-kit-button ws-kit-button--large ws-kit-button--secondary ws-kit-button--full">Talk to sales</button></div>
|
|
48
48
|
</div>
|
|
49
49
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* ---- PricingTable: the kit's three plans side by side, the popular one ringed in navy ---- */
|
|
2
|
+
.ws-pricing-table { background: var(--color-bg-page); width: 100%; padding: var(--space-xl) var(--layout-margin); }
|
|
3
|
+
/* A grid of columns at least 240 px wide: a plan that wraps keeps its column's width instead of stretching across the row. */
|
|
4
|
+
.ws-pricing-table__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--space-9xl) + var(--space-2xl))), 1fr)); gap: var(--layout-col-gap); max-width: var(--layout-content-max); margin: 0 auto; }
|
|
5
|
+
.ws-pricing-table__plan { position: relative; min-width: 0; display: flex; flex-direction: column; border-radius: var(--ws-radius-control); border: var(--ws-line) solid var(--color-border-default); background: var(--color-surface); padding: var(--space-lg); }
|
|
6
|
+
/* The ring is drawn inside the edge (the navy border plus a 2 px inset), so the popular plan's outer edge stays on its
|
|
7
|
+
neighbours' top, bottom and sides. */
|
|
8
|
+
.ws-pricing-table__plan--popular { border-color: var(--color-text-heading); box-shadow: inset 0 0 0 var(--ws-ring) var(--color-text-heading); }
|
|
9
|
+
/* The badge sits on the popular plan's top edge, out of the flow, so every plan's name, price and list start on one line. */
|
|
10
|
+
.ws-pricing-table__badge { position: absolute; top: 0; left: var(--space-lg); transform: translateY(-50%); display: inline-flex; align-items: center; border-radius: var(--radius-full); padding: var(--space-3xs) var(--space-xs-plus); font-size: var(--font-size-2xs); line-height: calc(var(--space-md) + var(--space-3xs)); font-weight: 500; white-space: nowrap; background: color-mix(in srgb, var(--color-text-heading) 10%, var(--color-surface)); color: var(--color-text-heading); }
|
|
11
|
+
.ws-pricing-table__name { font-size: var(--font-size-lg2); line-height: var(--ws-leading-title); font-weight: 600; color: var(--color-text-heading); overflow-wrap: break-word; }
|
|
12
|
+
.ws-pricing-table__price { margin-top: var(--space-sm); display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-xxs); }
|
|
13
|
+
.ws-pricing-table__price-value { font-size: var(--font-size-4xl); font-weight: 600; color: var(--color-text-heading); line-height: calc(var(--space-3xl) + var(--space-xs)); font-variant-numeric: tabular-nums; }
|
|
14
|
+
.ws-pricing-table__price-period { font-size: var(--font-size-sm); color: var(--color-text-muted); }
|
|
15
|
+
.ws-pricing-table__list { margin-top: var(--space-lg); display: flex; flex-direction: column; gap: var(--space-sm); flex: 1; }
|
|
16
|
+
.ws-pricing-table__row { display: flex; align-items: flex-start; gap: var(--space-xs); font-size: var(--font-size-sm); line-height: calc(var(--space-md) + var(--space-xxs)); color: var(--color-text-primary); }
|
|
17
|
+
.ws-pricing-table__row svg { width: var(--ws-icon); height: var(--ws-icon); flex-shrink: 0; margin-top: var(--space-3xs); color: var(--color-stat-positive); }
|
|
18
|
+
.ws-pricing-table__cta { margin-top: var(--space-lg); }
|
|
19
|
+
@media (max-width: 40rem) {
|
|
20
|
+
.ws-pricing-table { padding-inline: var(--space-md); }
|
|
21
|
+
}
|
|
@@ -13,7 +13,11 @@ A team's share as petals around a centre circle: one wedge a member, each filled
|
|
|
13
13
|
|
|
14
14
|
**Anatomy**
|
|
15
15
|
|
|
16
|
-
-
|
|
16
|
+
- The wheel is 316 px across at most; a wider card centres it, a narrower one shrinks it with the column (the
|
|
17
|
+
labels are placed in percentages, so they move with it). Never under 240: the hole (48.5 of the 316) must still
|
|
18
|
+
hold its figure and "OVERALL".
|
|
19
|
+
- Above it, the kind of call is a `Segmented` switch: `role="group"` with an `aria-label`, `aria-current="true"` on
|
|
20
|
+
the chosen kind.
|
|
17
21
|
- A hole of 48.5 px radius in the middle holds the team's overall percent, 22 px semibold, with "OVERALL" under it in 11 px (`--ws-text-micro`, the floor) uppercase muted; a wedge's name is 11 px too.
|
|
18
22
|
- Each wedge: a full-radius track (the cream, a hairline edge) all the way to 158.5 px, and, when the member has started, a fill from the hole out to their own share of that distance, in one gradient per wedge (pale peach near the hole, deepening to solid salmon at the tip, each wedge's gradient running along its own far edge so one percent looks the same on every member).
|
|
19
23
|
- A wedge's name and percent sit inside the fill when there is room, or in grey on the bare track when the fill is too short to hold them.
|
|
@@ -26,12 +30,21 @@ A team's share as petals around a centre circle: one wedge a member, each filled
|
|
|
26
30
|
| Petals (default) | One gradient (salmon) for every member; length alone carries the share |
|
|
27
31
|
| Rings (an alternate the source also draws) | Ten concentric bands a slice instead of one gradient, coloured by the member's state (finished teal, past halfway purple, under halfway salmon, not started the empty tone) rather than by length |
|
|
28
32
|
|
|
33
|
+
**Parts and modifiers**
|
|
34
|
+
|
|
35
|
+
- `.ws-progress-petals__center--small`: the centre total at 16 px, for a small set.
|
|
36
|
+
- `.ws-progress-petals__label--off`: an off slice's name and share in body grey.
|
|
37
|
+
- `.ws-progress-petals__rings-wrap`: the rings variant's frame, which holds the rings and their hole.
|
|
38
|
+
- `.ws-progress-petals__rings`: the rings variant: ten bands a slice, the slices' tones as its conic-gradient background.
|
|
39
|
+
- `.ws-progress-petals__rings-hole`: the hole beside the masked rings (15% in), so its words are never cut into bands.
|
|
40
|
+
|
|
29
41
|
**States**
|
|
30
42
|
|
|
31
|
-
- Default: wedges bloom out from the middle one after another (`ws-bloom`)
|
|
43
|
+
- Default: wedges bloom out from the middle one after another (`ws-bloom`). No shadow.
|
|
32
44
|
- Nobody started: every wedge is its bare track, no fill, the centre reads 0%.
|
|
33
45
|
- Everyone finished: every wedge reaches the rim, the centre reads 100%.
|
|
34
|
-
-
|
|
46
|
+
- Narrow: the wheel shrinks with its column down to 240 (as on a 320 phone, where it is 248).
|
|
47
|
+
- Disabled / error / hover / focus / pressed / selected / empty / long label: do not apply to the wheel; it has no interaction and no card-level emptiness beyond "nobody started" (which is itself real data, not hidden). The switch above it has the `Segmented` states.
|
|
35
48
|
- Reduced motion: every wedge is simply in place, no bloom.
|
|
36
49
|
|
|
37
50
|
**Behaviour**
|
|
@@ -63,3 +76,18 @@ A team's share as petals around a centre circle: one wedge a member, each filled
|
|
|
63
76
|
- **Derived from**: the system's colour-meaning rules (finished teal, past halfway purple, under halfway salmon,
|
|
64
77
|
not started the empty tone) and its privacy rule for naming a teammate.
|
|
65
78
|
- **Precedent**: the first product built on the system.
|
|
79
|
+
|
|
80
|
+
**Markup**
|
|
81
|
+
|
|
82
|
+
```html
|
|
83
|
+
<div class="ws-dots ws-progress-petals__body">
|
|
84
|
+
<div class="ws-progress-petals__wheel" role="img" aria-label="Team outreach, 48% overall: Priya 100%, Anna 0%">
|
|
85
|
+
<svg viewBox="0 0 316 316" aria-hidden="true"><!-- one path a person, class="ws-progress-petals__petal" --></svg>
|
|
86
|
+
<span class="ws-progress-petals__label ws-progress-petals__label--on" style="left: 75%; top: 40%;" aria-hidden="true"><span class="ws-progress-petals__share">100%</span><span class="ws-progress-petals__name">Priya</span></span>
|
|
87
|
+
<span class="ws-progress-petals__center" aria-hidden="true"><span class="ws-progress-petals__total">48%</span><span class="ws-progress-petals__caption">Overall</span></span>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Styles**: `ProgressPetals/style.css`, in `bundle.css` and `fello.css` as `.ws-progress-petals`. Every value is a token. `.ws-progress-petals` itself has no styles: it is the hook that
|
|
93
|
+
names the chart (and the root for its modifiers); its parts carry the styles.
|
|
@@ -20,20 +20,20 @@
|
|
|
20
20
|
</div>
|
|
21
21
|
</header>
|
|
22
22
|
<div class="ws-dots ws-progress-petals__body">
|
|
23
|
-
<div class="ws-segmented" role="
|
|
24
|
-
<button type="button" class="ws-segmented__item" aria-
|
|
25
|
-
<button type="button" class="ws-segmented__item"
|
|
26
|
-
<button type="button" class="ws-segmented__item"
|
|
23
|
+
<div class="ws-segmented" role="group" aria-label="Which calls">
|
|
24
|
+
<button type="button" class="ws-segmented__item" aria-current="true">Cold call</button>
|
|
25
|
+
<button type="button" class="ws-segmented__item">Live transfer</button>
|
|
26
|
+
<button type="button" class="ws-segmented__item">Follow-up</button>
|
|
27
27
|
</div>
|
|
28
28
|
<div class="ws-progress-petals__wheel" role="img" aria-label="Team outreach, 48% overall: Cassie 0%, Priya 100%, Marcus 100%, Ana 71%, Jon 57%, Josh 43%, Dana 14%, Anna 0%.">
|
|
29
29
|
<svg viewBox="0 0 316 316" aria-hidden="true">
|
|
30
30
|
<defs>
|
|
31
|
-
<linearGradient id="tpg1" gradientUnits="userSpaceOnUse" x1="224.99" y1="156.83" x2="316.48" y2="155.23"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--
|
|
32
|
-
<linearGradient id="tpg2" gradientUnits="userSpaceOnUse" x1="206.20" y1="204.54" x2="272.02" y2="268.10"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--
|
|
33
|
-
<linearGradient id="tpg3" gradientUnits="userSpaceOnUse" x1="159.17" y1="224.99" x2="160.77" y2="316.48"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--
|
|
34
|
-
<linearGradient id="tpg4" gradientUnits="userSpaceOnUse" x1="111.46" y1="206.20" x2="47.90" y2="272.02"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--
|
|
35
|
-
<linearGradient id="tpg5" gradientUnits="userSpaceOnUse" x1="91.01" y1="159.17" x2="-0.48" y2="160.77"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--
|
|
36
|
-
<linearGradient id="tpg6" gradientUnits="userSpaceOnUse" x1="109.80" y1="111.46" x2="43.98" y2="47.90"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--
|
|
31
|
+
<linearGradient id="tpg1" gradientUnits="userSpaceOnUse" x1="224.99" y1="156.83" x2="316.48" y2="155.23"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--ws-chart-under-half)"/></linearGradient>
|
|
32
|
+
<linearGradient id="tpg2" gradientUnits="userSpaceOnUse" x1="206.20" y1="204.54" x2="272.02" y2="268.10"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--ws-chart-under-half)"/></linearGradient>
|
|
33
|
+
<linearGradient id="tpg3" gradientUnits="userSpaceOnUse" x1="159.17" y1="224.99" x2="160.77" y2="316.48"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--ws-chart-under-half)"/></linearGradient>
|
|
34
|
+
<linearGradient id="tpg4" gradientUnits="userSpaceOnUse" x1="111.46" y1="206.20" x2="47.90" y2="272.02"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--ws-chart-under-half)"/></linearGradient>
|
|
35
|
+
<linearGradient id="tpg5" gradientUnits="userSpaceOnUse" x1="91.01" y1="159.17" x2="-0.48" y2="160.77"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--ws-chart-under-half)"/></linearGradient>
|
|
36
|
+
<linearGradient id="tpg6" gradientUnits="userSpaceOnUse" x1="109.80" y1="111.46" x2="43.98" y2="47.90"><stop offset="0" stop-color="var(--ws-chart-under-half-tint)"/><stop offset="1" stop-color="var(--ws-chart-under-half)"/></linearGradient>
|
|
37
37
|
</defs>
|
|
38
38
|
<path d="M158.85 109.51L160.77 -0.48A158.50 158.50 0 0 1 268.10 43.98L191.69 123.11A48.50 48.50 0 0 0 158.85 109.51Z" fill="var(--color-bg-page)" stroke="var(--ws-edge)" stroke-width="1"/>
|
|
39
39
|
<path d="M192.89 124.31L272.02 47.90A158.50 158.50 0 0 1 316.48 155.23L206.49 157.15A48.50 48.50 0 0 0 192.89 124.31Z" fill="var(--color-bg-page)" stroke="var(--ws-edge)" stroke-width="1"/>
|
|
@@ -66,18 +66,17 @@
|
|
|
66
66
|
|
|
67
67
|
<div class="ws-stack">
|
|
68
68
|
<span class="ws-muted">The rings variant, if the page draws it instead: ten bands a slice, by state not fill</span>
|
|
69
|
-
<div style="width: 180px;">
|
|
70
|
-
|
|
69
|
+
<div class="ws-progress-petals__rings-wrap" style="width: 180px;">
|
|
70
|
+
<div class="ws-progress-petals__rings" style="background: conic-gradient(var(--ws-chart-empty) 0% 12.5%, var(--ws-chart-finished) 12.5% 37.5%, var(--ws-chart-past-half) 37.5% 62.5%, var(--ws-chart-under-half) 62.5% 87.5%, var(--ws-chart-empty) 87.5% 100%);" role="img" aria-label="Team outreach, 48% overall"></div>
|
|
71
71
|
<div class="ws-progress-petals__rings-hole">
|
|
72
72
|
<span class="ws-progress-petals__center ws-progress-petals__center--small" aria-hidden="true"><span class="ws-progress-petals__total">48%</span><span class="ws-progress-petals__caption">Overall</span></span>
|
|
73
73
|
</div>
|
|
74
74
|
</div>
|
|
75
|
-
</div>
|
|
76
75
|
</div>
|
|
77
76
|
|
|
78
77
|
<div class="ws-stack">
|
|
79
|
-
<span class="ws-muted">Nobody started: every wedge a ghost track, 0% in the middle</span>
|
|
80
|
-
<div style="width:
|
|
78
|
+
<span class="ws-muted">Nobody started: every wedge a ghost track, 0% in the middle (240 across, the smallest that holds the hole's words)</span>
|
|
79
|
+
<div style="width: 240px; max-width: 100%;">
|
|
81
80
|
<div class="ws-progress-petals__wheel" role="img" aria-label="Team outreach, 0% overall">
|
|
82
81
|
<svg viewBox="0 0 316 316" aria-hidden="true">
|
|
83
82
|
<path d="M158.85 109.51L160.77 -0.48A158.50 158.50 0 0 1 268.10 43.98L191.69 123.11A48.50 48.50 0 0 0 158.85 109.51Z" fill="var(--color-bg-page)" stroke="var(--ws-edge)" stroke-width="1"/>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* ---- ProgressPetals: a team's shares as petals round a hole, the overall percent in the middle ---- */
|
|
2
|
+
.ws-progress-petals__body { display: flex; flex-direction: column; align-items: center; gap: var(--space-md); padding: var(--space-lg) var(--ws-card-inset) var(--space-xl); }
|
|
3
|
+
/* The wheel: the drawing's own 316, never larger; a wider card centres it. It shrinks with a narrow column, but not
|
|
4
|
+
under 240, where the hole stops holding its figure and caption. */
|
|
5
|
+
.ws-progress-petals__body > .ws-segmented { align-self: center; }
|
|
6
|
+
.ws-progress-petals__wheel { position: relative; width: 100%; min-width: min(100%, calc(var(--space-9xl) + var(--space-2xl))); max-width: calc(var(--space-9xl) + var(--space-7xl) - var(--space-xxs)); aspect-ratio: 1; margin: calc(var(--space-xxs) * 1.5) 0; }
|
|
7
|
+
.ws-progress-petals__wheel svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
|
|
8
|
+
.ws-progress-petals__petal { transform-box: view-box; transform-origin: 50% 50%; }
|
|
9
|
+
.ws-progress-petals__label { position: absolute; display: flex; flex-direction: column; align-items: center; transform: translate(-50%, -50%); white-space: nowrap; pointer-events: none; }
|
|
10
|
+
.ws-progress-petals__share { font-size: var(--ws-text-body); font-weight: 600; line-height: calc(var(--space-md) + var(--space-xxs)); }
|
|
11
|
+
.ws-progress-petals__name { font-size: var(--ws-text-micro); line-height: calc(var(--space-xs) + var(--space-xxs) * 0.75); }
|
|
12
|
+
.ws-progress-petals__label--on .ws-progress-petals__share { color: var(--color-text-heading); }
|
|
13
|
+
/* Words over a petal take the strongest step: a petal's tint can be any of the tones, light or dark, so the 11 px name
|
|
14
|
+
is navy (not navy at 75%), and an off label is body grey (muted fails on a peach petal). */
|
|
15
|
+
.ws-progress-petals__label--on .ws-progress-petals__name { color: var(--color-text-heading); }
|
|
16
|
+
.ws-progress-petals__label--off .ws-progress-petals__share, .ws-progress-petals__label--off .ws-progress-petals__name { color: var(--color-text-body); }
|
|
17
|
+
.ws-progress-petals__center { position: absolute; left: 50%; top: 50%; display: flex; flex-direction: column; align-items: center; transform: translate(-50%, -50%); }
|
|
18
|
+
.ws-progress-petals__total { font-size: var(--ws-text-title); font-weight: 600; line-height: var(--ws-leading-title); letter-spacing: var(--ws-tracking-title); color: var(--color-text-heading); }
|
|
19
|
+
.ws-progress-petals__center--small .ws-progress-petals__total { font-size: var(--ws-text-value); }
|
|
20
|
+
.ws-progress-petals__caption { font-size: var(--ws-text-micro); line-height: calc(var(--space-xs) + var(--space-xxs) * 1.5); text-transform: uppercase; letter-spacing: 0.05em; color: var(--color-text-muted); }
|
|
21
|
+
/* The rings variant: ten bands a slice, the slices' tones given as the element's conic-gradient background. */
|
|
22
|
+
.ws-progress-petals__rings { position: relative; width: 100%; aspect-ratio: 1; border-radius: var(--radius-full); -webkit-mask-image: repeating-radial-gradient(circle, var(--color-text-heading) 0 var(--space-xxs), transparent var(--space-xxs) calc(var(--space-xxs) * 1.25)); mask-image: repeating-radial-gradient(circle, var(--color-text-heading) 0 var(--space-xxs), transparent var(--space-xxs) calc(var(--space-xxs) * 1.25)); }
|
|
23
|
+
.ws-progress-petals__rings-wrap { position: relative; }
|
|
24
|
+
/* The hole sits beside the masked rings, not inside them, so its words are never cut into bands. */
|
|
25
|
+
.ws-progress-petals__rings-hole { position: absolute; inset: 15%; display: flex; flex-direction: column; align-items: center; justify-content: center; border-radius: var(--radius-full); background: var(--color-bg-page); }
|
|
26
|
+
.ws-progress-petals__rings-hole .ws-progress-petals__center { position: static; transform: none; }
|
|
27
|
+
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Components
|
|
2
|
+
|
|
3
|
+
The catalog: 103 components by gallery group, one line each, plus `Cover`, the gallery's cover card (a preview only, no README, nothing to build with). Each folder holds `README.md` (when to use it, its parts, states and the markup to copy), `preview.html` (the gallery card) and `style.css` (its styles; `bundle.css` and `fello.css` carry them all). Choosing components maps a need to a name; the line here says what each one is. Generated by scripts/build-skill.mjs from each README's first paragraph: edit those, not this file.
|
|
4
|
+
|
|
5
|
+
## Actions
|
|
6
|
+
|
|
7
|
+
- [Button](Button/README.md): The one control for every act on the page: a click that does something, in one of six looks, never a styled `<button>`.
|
|
8
|
+
- [Chip](Chip/README.md): A small fact in a 24 px tag, in one of six tones, a rating tone or the Example mark; its sibling `ChangeChip` says a number went up, down or stayed.
|
|
9
|
+
- [IconButton](IconButton/README.md): A square button holding one icon and nothing else, for an act that needs no words to be understood.
|
|
10
|
+
- [Segmented](Segmented/README.md): Every switch and tab row on the platform: Seth's grey well with a navy current item, one component so the current item always moves the same way.
|
|
11
|
+
|
|
12
|
+
## Cards
|
|
13
|
+
|
|
14
|
+
- [Card](Card/README.md): The one card: Seth's tray card. The page's cream sits inside a 1 px tray rim, 8 px outside and 7 px inside, flat, and every other surface builds on it.
|
|
15
|
+
- [EmptyState](EmptyState/README.md): Nothing here yet: the same plain cream card the place would show, with its mark and the one act that fills it.
|
|
16
|
+
- [Fold](Fold/README.md): The one disclosure: something folded away until wanted, in three looks, built on the browser's native `<details>`.
|
|
17
|
+
- [Morph](Morph/README.md): A thing that changes its place or its size goes there as itself: a card flying to the full screen and back, a figure growing open across its row, the chat moving between its modes. The browser's own view transitions, started by `morph()` from the package, on Seth's curves.
|
|
18
|
+
- [Plate](Plate/README.md): A quiet block set apart inside a card: the cream a shade darker, for a card's facts, a track or an aside.
|
|
19
|
+
- [Skeleton](Skeleton/README.md): A ghost of what is coming, in the shape it will take, with North's shimmer in the chart colours passing over it, so nothing jumps when the real content lands.
|
|
20
|
+
- [Well](Well/README.md): The system's grey well: a plate holding a short list of pressable rows, for every "what to ask" list.
|
|
21
|
+
|
|
22
|
+
## Charts
|
|
23
|
+
|
|
24
|
+
- [ActivityGrid](ActivityGrid/README.md): Who reached out, two weeks of day cells a row, a navy dot for a day done and a count at the row's end.
|
|
25
|
+
- [FunnelBars](FunnelBars/README.md): A pipeline's stages as descending horizontal bars in one card, each one's width its share of the first stage, with the conversion between each pair of stages called out as a chip.
|
|
26
|
+
- [GoalBars](GoalBars/README.md): Horizontal goal bars: one pill a row, its fill a tone's gradient, a count and label at the right.
|
|
27
|
+
- [GoalTicks](GoalTicks/README.md): One card's goal as one big number, a run of ticks carrying the gradient, and a short breakdown row under it.
|
|
28
|
+
- [GoalTubes](GoalTubes/README.md): Counts as upright tubes: a rounded outline, a fill rising from the foot, a leader to a dot with the count above, one baseline across.
|
|
29
|
+
- [Heatmap](Heatmap/README.md): North's company health: lanes by their metrics as touching squares, each coloured by how it tracks its pace.
|
|
30
|
+
- [MetricTile](MetricTile/README.md): North's key metric: a rimmed tile with a label, a figure, a pace bar or a mini chart (columns, or a line with dots) and a foot, that opens across its row into its chart.
|
|
31
|
+
- [ProgressPetals](ProgressPetals/README.md): A team's share as petals around a centre circle: one wedge a member, each filled from the hole out by their own percent.
|
|
32
|
+
- [RankBar](RankBar/README.md): The person against their team on one skill: a strip of fine ticks from 0 to 100%, their share filled, a labelled mark for each of them.
|
|
33
|
+
- [ScoreHero](ScoreHero/README.md): A report's score the way Seth draws it: the 96 px figure, a strip of ticks across the page and the rating in words.
|
|
34
|
+
- [ShareBar](ShareBar/README.md): Where a whole goes: one stacked bar of parts in their tones over what stays, a head line above and a key under it.
|
|
35
|
+
- [StatTiles](StatTiles/README.md): A page's answer at a glance: a few rimmed tiles, each a label, a figure with its mark or chip, and an optional foot.
|
|
36
|
+
- [StepLine](StepLine/README.md): A bill or a rate over time as a step line against a dotted reference, the gap between them hatched, its moments named.
|
|
37
|
+
- [StreakCalendar](StreakCalendar/README.md): Eight weeks of activity as rows, Monday to Sunday across: a done day a pill, an empty day a hairline cell, today outlined, days to come dashed.
|
|
38
|
+
- [TrendBars](TrendBars/README.md): A trend over days as thin rising bars, with one day called out as the moment that explains the shape.
|
|
39
|
+
- [TrendLine](TrendLine/README.md): A value over periods against an axis, as a line with its dots and the hatched area under it, or as columns that collapse into the line's points and back.
|
|
40
|
+
|
|
41
|
+
## Chat
|
|
42
|
+
|
|
43
|
+
- [ChatCard](ChatCard/README.md): A card the agent brings into the chat (North's chat card: at most 556 px, 20 px inside, the 80 px tray): one kind or one chart, one title, one sentence, its facts on a plate or a breakdown, and the tray holding its one act.
|
|
44
|
+
- [ChatShell](ChatShell/README.md): The chat's frame in three modes: a bar (only the field, over a veiled page), a column docked beside the page, and the full screen with one centred reading column.
|
|
45
|
+
- [ChatTurn](ChatTurn/README.md): One turn of a product's chat (North's thread): the person's question in a white bubble at the right, the answer full width as plain words with no orb, its acts on one line under it, and the quiet receipt of what it did.
|
|
46
|
+
- [Composer](Composer/README.md): The one chat box (North's), drawn once for the home screen and every chat: a square-cornered field that grows upward with what is typed, its tools on the bottom line at the right, and what the question is about riding on top as a tab.
|
|
47
|
+
- [StatusLine](StatusLine/README.md): The working line at the top of an answer in progress: who is working, what it is doing in a moving shimmer, and the step it is on, so a wait never looks like a stall.
|
|
48
|
+
- [SuggestionChip](SuggestionChip/README.md): A starter to tap: a short question under an ask field on a page, or a white pill in the chat that asks the next thing.
|
|
49
|
+
- [TopicRail](TopicRail/README.md): One continuous chat marked by topic: a quiet topic head in the thread where the subject changes, and a rail of small squares at the thread's edge that opens the list of topics.
|
|
50
|
+
|
|
51
|
+
## Data
|
|
52
|
+
|
|
53
|
+
- [ActionList](ActionList/README.md): A card's ranked list of next acts: who or what, the reason in words, and the one act at the right of each row. `--brief` is North's "what changed" list on a page's head: one quiet line each, its acts appearing on the line.
|
|
54
|
+
- [CheckRow](CheckRow/README.md): A rimmed list of checks, each row a name, a strip of ticks for its score, the score, a status and a chevron that opens it; or a list of fixes, each row a box to tick, the fix and its effort, its act, and a chevron that opens it in place. Seth's checks list (301:1728) and Fixes checklist (308:2466).
|
|
55
|
+
- [KanbanBoard](KanbanBoard/README.md): Columns of cards for a pipeline: a stage per column, a card per thing moving through it, a count beside each stage's name. `--fill` makes it a board page: the rest of the page's height, every stage scrolling on its own, the sideways bar on screen.
|
|
56
|
+
- [Leaderboard](Leaderboard/README.md): A list that ranks people against one number: a rank, a face and a name, a thin bar for the score, the score itself, with the person's own row lit so they find themselves at once. Every row shares one grid, so the bars start and end on the same lines and no number is ever cut.
|
|
57
|
+
- [ListDetail](ListDetail/README.md): A list and the thing picked from it, side by side: the list one column wide, the open item two, on one three-column grid. Seth's Review inbox (313:2671) and North's board (a chart and the list that drives it), with Tally's vendors.
|
|
58
|
+
- [Matrix](Matrix/README.md): A grid of yes-or-no answers: one row per question, one column per source, each cell lit when the answer is yes. Seth's answers grid (305:2341): which AI assistants named you, for each of the questions a buyer might ask.
|
|
59
|
+
- [SideList](SideList/README.md): Short lists with no card of their own: a few groups down a side column, each with a small head and rows joined by fine lines, an act or a value at the right of each row. Its picker form, `__picks`, sits on a card's surface: rows as soft pills, one of them the current one.
|
|
60
|
+
- [Table](Table/README.md): Rows of records inside one card, read down its columns: a head of muted labels, 40 px rows, a first column that stays while the rest scroll, numbers in fixed right-aligned columns, totals in the foot, columns that fold away by priority and a phone fold. This is the whole wide-table pattern; build every records table from it.
|
|
61
|
+
- [Timeline](Timeline/README.md): A vertical feed of what happened, grouped by day, a coloured dot on a fine line telling what kind of thing each entry was.
|
|
62
|
+
|
|
63
|
+
## Desk
|
|
64
|
+
|
|
65
|
+
- [EntryShell](EntryShell/README.md): The frame for every page before the product's main workspace: the wordmark top left, a centred column, and on a wide frame a grey panel beside it holding a sample of the product's own cards.
|
|
66
|
+
- [PageHero](PageHero/README.md): A page's slim hero: a small eyebrow, the page's finding as its headline, a line under it, its one act, and a picture beside them, on the page's own wash rather than inside a card.
|
|
67
|
+
|
|
68
|
+
## Feedback
|
|
69
|
+
|
|
70
|
+
- [Badge](Badge/README.md): A small count or mark riding on the corner of a face, an icon or a nav row, saying "there is something here" at a glance.
|
|
71
|
+
- [Banner](Banner/README.md): A full-width notice for a state of the whole page or card, in one of four quiet tones, never a loud one.
|
|
72
|
+
- [Popover](Popover/README.md): A small lifted card beside its control, for the time a tooltip is too thin and a dialog is too much.
|
|
73
|
+
- [StatusScreen](StatusScreen/README.md): The whole-page word for something that failed: a page that is not there, a server error, or a connection that is not back yet.
|
|
74
|
+
|
|
75
|
+
## Fields
|
|
76
|
+
|
|
77
|
+
- [Checkbox](Checkbox/README.md): A real native checkbox under a skin, drawn with a navy tick when chosen, its label part of the thing you tap.
|
|
78
|
+
- [Combobox](Combobox/README.md): A searchable field for choosing from a long list, matching as you type and offering to create a new value when nothing matches.
|
|
79
|
+
- [DateInput](DateInput/README.md): A date field that works on its own, with a popover month grid for picking a day by eye instead of typing it.
|
|
80
|
+
- [FileUpload](FileUpload/README.md): A drop zone for one or more files, with a row per file showing its progress, a tick when it lands, or why it was rejected.
|
|
81
|
+
- [Input](Input/README.md): A single line of typed text, drawn as a field reads as a field on a cream card: white ground, a fine edge, the mid-blue edge while typing.
|
|
82
|
+
- [NumberInput](NumberInput/README.md): A number field with its figures right-aligned and tabular, an optional unit inside it, and small buttons to step the value.
|
|
83
|
+
- [PasswordInput](PasswordInput/README.md): A password field with a visibility toggle and a strength line, so a person can see what they typed and how strong it is.
|
|
84
|
+
- [Radio](Radio/README.md): A set of mutually exclusive choices, each a native radio under a skin, grouped by a `fieldset` and named by a `legend`.
|
|
85
|
+
- [Select](Select/README.md): A native dropdown that matches `Input`: label above, a chevron inside the field, a hint or an error below.
|
|
86
|
+
- [Slider](Slider/README.md): A value picked by dragging along a range (a team size, a share), drawn by the browser in the house's navy, with the value said in words beside its label.
|
|
87
|
+
- [Switch](Switch/README.md): An on/off setting that applies itself at once, drawn as a sliding track and thumb rather than a box and tick.
|
|
88
|
+
- [TextArea](TextArea/README.md): Several lines of typed text, drawn exactly as `Input` is: white ground, the fine edge, white and mid blue while typing.
|
|
89
|
+
|
|
90
|
+
## Foundations
|
|
91
|
+
|
|
92
|
+
- [Motion](Motion/README.md): Every move in Seth's North app on one live page: first a product screen to try them on, a numbered hint at each move and a list of what to notice; then, for developers, each behaviour by Seth's own label, North's values, a kit demo, the token or class to build with, and how close the kit is.
|
|
93
|
+
|
|
94
|
+
## Layout
|
|
95
|
+
|
|
96
|
+
- [CardBoard](CardBoard/README.md): Lays a page of cards out as columns side by side, each card at the board's own width, down to one column on a phone in the same order.
|
|
97
|
+
- [Page](Page/README.md): The page itself and the few layout pieces every page is built from: the page container, an area, the board, a stack and a cluster. All in fello.css; with these a page needs no layout CSS of its own.
|
|
98
|
+
- [PageBar](PageBar/README.md): A page's 56 px header, Seth's thread header: the app's face, the page's name and a quiet word of context at the left; its acts and a way back at the right. The page names itself here, once; its answer is the figures and cards below.
|
|
99
|
+
- [Section](Section/README.md): A group of things under a short heading: Seth's 15 / 22 section title, an optional count on its line, a line of context and one act on the right.
|
|
100
|
+
- [Split](Split/README.md): A page's main column and its aside, side by side when both fit and stacked when they do not. It measures its own width, so it is right in the shell's body, a page, a dialog or a pane.
|
|
101
|
+
- [Starter](Starter/README.md): The page every artifact and plain page starts from: the head with the one `<style>` that holds the kit's CSS, the Google Fonts link, a `.ws-page` with its `PageBar`, and a board of two cards in the catalog's own markup. Copy it whole, paste the CSS into the `<style>`, then replace the sample content with the real thing.
|
|
102
|
+
- [Tile](Tile/README.md): One block of a bento grid (an icon, a title, a meta note and its own body, as the one card), and the product tile row: what an app can do, a few tiles joined on the tray, each a door or the step it waits on.
|
|
103
|
+
|
|
104
|
+
## Marketing
|
|
105
|
+
|
|
106
|
+
- [FeatureGrid](FeatureGrid/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
107
|
+
- [Footer](Footer/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
108
|
+
- [Hero](Hero/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
109
|
+
- [KitButton](KitButton/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
110
|
+
- [KitCard](KitCard/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
111
|
+
- [KitInput](KitInput/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
112
|
+
- [MarketingNav](MarketingNav/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
113
|
+
- [PricingTable](PricingTable/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
114
|
+
- [Stat](Stat/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
115
|
+
- [Testimonial](Testimonial/README.md): The kit's marketing piece: for a public page, never a product screen.
|
|
116
|
+
|
|
117
|
+
## Navigation
|
|
118
|
+
|
|
119
|
+
- [AppShell](AppShell/README.md): A product's frame, drawn from Seth's North app: a 232 px nav of grouped rows on the frame's wash, a glass stage beside it, a 56 px bar at the stage's top and a body that owns the scroll. It folds to a 64 px rail and, on a phone, gives the nav to a drawer.
|
|
120
|
+
- [Breadcrumb](Breadcrumb/README.md): A thin trail of links above a deep page, saying how it was reached and letting a person step back up it. Seth's North crumbs: the trail is the bar's name for the page.
|
|
121
|
+
- [FilterBar](FilterBar/README.md): A page's filters in one row: a period switch at the start and the pickers that scope the page at the end (North's filter bar).
|
|
122
|
+
- [Kbd](Kbd/README.md): A key as it is printed on the keyboard ("Esc", "Enter", "⌘K"), shown beside the act it triggers.
|
|
123
|
+
- [Pagination](Pagination/README.md): The foot of a card that holds more rows than it shows at once: where you are in the list, and the acts that move through it.
|
|
124
|
+
- [Tabs](Tabs/README.md): The underline tab row: five or more sections of a settings or detail page, read one at a time.
|
|
125
|
+
- [ThemeSwitch](ThemeSwitch/README.md): The person's pick of System, Light or Dark, at the foot of the app's nav, kept in their browser and set before the page paints.
|
|
126
|
+
- [TopBar](TopBar/README.md): The 56 px bar alone: a wordmark, up to five page links, a search box, one quiet act and the person, for a product that puts its navigation across the top rather than down the side.
|
|
127
|
+
|
|
128
|
+
## Overlays
|
|
129
|
+
|
|
130
|
+
- [ConfirmDialog](ConfirmDialog/README.md): The `Dialog` recipe for the one moment something cannot be undone: name the thing, say what happens, let the person choose.
|
|
131
|
+
- [Dialog](Dialog/README.md): A modal, built on the browser's own `<dialog>`: a short task in the centre of the screen, or a drawer from the right edge.
|
|
132
|
+
- [HoverCard](HoverCard/README.md): What a chart mark holds, shown on hover or focus: Seth's North chart tip, with a caret on the mark it belongs to.
|
|
133
|
+
- [Menu](Menu/README.md): A small panel of rows lifted off the page: the one menu, for an account, a page's "more", or a short list of choices.
|
|
134
|
+
- [Panel](Panel/README.md): The thing opened beside the page or the chat: one pane, holding one thing at a time, as Seth draws the check drawer.
|
|
135
|
+
- [Toast](Toast/README.md): A receipt that passes: something finished in the background, said in one line, with at most one act. Seth's navy pill.
|
|
136
|
+
- [Tooltip](Tooltip/README.md): A name on hover or keyboard focus, for a control that shows less than it is; and Seth's navy note, the full words behind a short one.
|
|
137
|
+
|
|
138
|
+
## People
|
|
139
|
+
|
|
140
|
+
- [Avatar](Avatar/README.md): A person's own mark: their photo once it loads, or their initials in navy on a neutral disc before and instead; never coloured, never an app's face.
|
|
141
|
+
|
|
142
|
+
## Progress
|
|
143
|
+
|
|
144
|
+
- [LoadBar](LoadBar/README.md): An honest 3 px progress line under something that is loading: it fills toward the end of the expected wait and never claims done until it is.
|
|
145
|
+
- [Meter](Meter/README.md): A count on a thin 4 px track: a running job's progress beside its words, or a share in a row with its name above it.
|
|
146
|
+
- [PaceBar](PaceBar/README.md): Progress toward a goal on a 14 px track, with a dot where it should be by now. North's bar, used in tiles, lanes and lists.
|
|
147
|
+
- [Ring](Ring/README.md): A circle's own share as one arc, or Seth's split ring: 96 radial ticks in each part's tone, the total in the hole, a key beside.
|
|
148
|
+
- [SegmentedProgress](SegmentedProgress/README.md): Progress split by area and by step: Seth's "1 of 6" figure, a line under it, and one bar of segments with each area named.
|
|
149
|
+
- [Stepper](Stepper/README.md): Ordered steps on a line that fills: done is a tick, the one in hand is ringed, the rest wait their turn.
|
|
150
|
+
- [TickRow](TickRow/README.md): One row of fixed-size ticks for a count out of a small whole: the done ticks in one tone, or each its stretch of the gradient.
|
|
151
|
+
- [TickStrip](TickStrip/README.md): A share drawn as equal ticks across the whole width: the done ones in one tone, the rest the plain track. Seth's score strips.
|