@godxjp/ui 33.20.0 → 33.22.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 +4 -4
- package/agent/START-HERE.md +7 -7
- package/agent/components/AppSettingPicker.json +0 -1
- package/agent/components/AppShell.json +11 -1
- package/agent/components/BlockEditor.json +6 -1
- package/agent/components/Button.json +1 -1
- package/agent/components/CardShowcase.json +44 -0
- package/agent/components/CatalogCard.json +83 -0
- package/agent/components/CatalogDetail.json +76 -0
- package/agent/components/CatalogDetailSection.json +52 -0
- package/agent/components/CatalogDetailTag.json +27 -0
- package/agent/components/EditorialArticle.json +53 -0
- package/agent/components/EditorialAuth.json +53 -0
- package/agent/components/EditorialAuthCard.json +52 -0
- package/agent/components/EditorialBanner.json +53 -0
- package/agent/components/EditorialBreadcrumb.json +38 -0
- package/agent/components/EditorialCard.json +70 -0
- package/agent/components/EditorialEmptyPanel.json +57 -0
- package/agent/components/EditorialFilterBar.json +51 -0
- package/agent/components/EditorialFilterField.json +39 -0
- package/agent/components/EditorialFilterPanel.json +46 -0
- package/agent/components/EditorialFooter.json +54 -0
- package/agent/components/EditorialFootnote.json +36 -0
- package/agent/components/EditorialHero.json +52 -0
- package/agent/components/EditorialInlineSearch.json +54 -0
- package/agent/components/EditorialMasthead.json +52 -0
- package/agent/components/EditorialMetaBar.json +37 -0
- package/agent/components/EditorialPageHeader.json +73 -0
- package/agent/components/EditorialPanel.json +48 -0
- package/agent/components/EditorialPillNav.json +41 -0
- package/agent/components/EditorialPrompt.json +54 -0
- package/agent/components/EditorialSearch.json +112 -0
- package/agent/components/EditorialSection.json +68 -0
- package/agent/components/EditorialSectionHead.json +62 -0
- package/agent/components/EditorialStats.json +32 -0
- package/agent/components/EditorialTextButton.json +47 -0
- package/agent/components/EditorialToggleGroup.json +52 -0
- package/agent/components/EditorialToolbar.json +45 -0
- package/agent/components/Eyebrow.json +39 -0
- package/agent/components/HoldingCard.json +69 -0
- package/agent/components/HoldingCardAction.json +51 -0
- package/agent/components/HoldingGrid.json +37 -0
- package/agent/components/Markdown.json +6 -0
- package/agent/components/NumberInput.json +5 -0
- package/agent/components/PriceSummary.json +32 -0
- package/agent/components/SettingsLayout.json +31 -0
- package/agent/components/SettingsPanel.json +53 -0
- package/agent/components/ThemePicker.json +54 -0
- package/agent/components/TopbarItem.json +5 -0
- package/agent/components-index.json +292 -98
- package/agent/components.json +2059 -4
- package/agent/index.json +7 -7
- package/agent/llms.txt +8 -8
- package/agent/tokens.json +5640 -132
- package/dist/components/data-display/badge.js +4 -2
- package/dist/components/data-display/image.js +6 -0
- package/dist/components/data-entry/form-field.js +2 -2
- package/dist/components/data-entry/number-input.d.ts +1 -0
- package/dist/components/data-entry/number-input.js +8 -0
- package/dist/components/data-entry/select.js +24 -2
- package/dist/components/general/button.js +14 -1
- package/dist/components/general/typography.d.ts +1 -1
- package/dist/components/layout/app-shell.d.ts +1 -1
- package/dist/components/layout/app-shell.js +28 -2
- package/dist/components/layout/centered-shell.js +4 -0
- package/dist/components/layout/editorial-account.d.ts +51 -0
- package/dist/components/layout/editorial-account.js +466 -0
- package/dist/components/layout/editorial-catalog.d.ts +18 -0
- package/dist/components/layout/editorial-catalog.js +164 -0
- package/dist/components/layout/editorial.d.ts +56 -0
- package/dist/components/layout/editorial.js +867 -0
- package/dist/components/layout/index.d.ts +6 -0
- package/dist/components/layout/index.js +98 -0
- package/dist/components/layout/mobile-shell.d.ts +2 -0
- package/dist/components/layout/mobile-shell.js +18 -11
- package/dist/components/layout/responsive-grid.js +9 -1
- package/dist/components/layout/topbar-item.d.ts +1 -0
- package/dist/components/layout/topbar-item.js +2 -0
- package/dist/contracts/measurement.json +1 -1
- package/dist/lab/legal-document-shell.js +61 -51
- package/dist/lib/toast-clearance.js +1 -1
- package/dist/props/components/data-display.prop.d.ts +2 -0
- package/dist/props/components/data-entry.prop.d.ts +9 -0
- package/dist/props/components/editorial-account.prop.d.ts +249 -0
- package/dist/props/components/editorial-account.prop.js +0 -0
- package/dist/props/components/general.prop.d.ts +6 -2
- package/dist/props/components/layout.prop.d.ts +602 -2
- package/dist/props/registry.d.ts +1124 -0
- package/dist/props/registry.js +792 -0
- package/dist/styles/badge-layout.css +2 -0
- package/dist/styles/control.css +60 -13
- package/dist/styles/core.css +1 -0
- package/dist/styles/data-display-layout.css +9 -3
- package/dist/styles/editorial-account-layout.css +1130 -0
- package/dist/styles/focus-ring.css +33 -10
- package/dist/styles/form-layout.css +8 -1
- package/dist/styles/index.css +1 -0
- package/dist/styles/layers.json +248 -1
- package/dist/styles/layout.css +2031 -0
- package/dist/styles/logo-layout.css +27 -0
- package/dist/styles/shell-layout.css +101 -3
- package/dist/styles/table-layout.css +25 -13
- package/dist/styles/text-layout.css +6 -0
- package/dist/styles.css +1 -1
- package/dist/tokens/base.css +2 -0
- package/dist/tokens/components/badge.css +3 -0
- package/dist/tokens/components/control.css +9 -0
- package/dist/tokens/components/editorial-account.css +393 -0
- package/dist/tokens/components/editorial.css +721 -0
- package/dist/tokens/components/form.css +4 -0
- package/dist/tokens/components/logo.css +2 -0
- package/dist/tokens/components/shell.css +23 -0
- package/dist/tokens/components/table.css +1 -1
- package/docs/TOKENS.md +26 -0
- package/package.json +2 -2
- package/scripts/ui-audit.mjs +3 -2
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialBreadcrumb, EditorialSection } from \"@godxjp/ui/layout\";\n\n<EditorialSection>\n <EditorialBreadcrumb items={[{ label: \"Home\", to: \"/\" }, { label: \"Journal\", to: \"/journal/\" }, { label: \"Price guide\" }]} />\n</EditorialSection>",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialBreadcrumb",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Trail, root first; the last item is the current page.",
|
|
9
|
+
"name": "items",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "BreadcrumbItemProp[]"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "Router link for ancestors.",
|
|
15
|
+
"name": "linkComponent",
|
|
16
|
+
"type": "ElementType"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"description": "Name of the nav landmark.",
|
|
20
|
+
"name": "ariaLabel",
|
|
21
|
+
"type": "string"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"related": [
|
|
25
|
+
"EditorialPageHeader, Breadcrumb."
|
|
26
|
+
],
|
|
27
|
+
"rules": [
|
|
28
|
+
2,
|
|
29
|
+
6,
|
|
30
|
+
44,
|
|
31
|
+
45
|
|
32
|
+
],
|
|
33
|
+
"tagline": "The trail at the top of an editorial page (gh#1437): `Breadcrumb` (same `<nav>`/`<ol>`, `aria-current` on the last item, router `linkComponent`) with the editorial rhythm — top inset, gap and line height from `--editorial-breadcrumb-*`. Use it alone above a reader page; `EditorialPageHeader` renders it for a listing page.",
|
|
34
|
+
"usage": [
|
|
35
|
+
"DO put it first in an EditorialSection of a `flow=\"sections\"` page.",
|
|
36
|
+
"DON'T nest it in a PageContainer — that page shell has its own trail."
|
|
37
|
+
]
|
|
38
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialCard } from \"@godxjp/ui/layout\";\n\n<EditorialCard variant=\"journal\" link={<a href=\"/journal/price-guide/\" />} media={<img src={cover} alt=\"\" />} overline=\"Price guide\" title=\"Why the same card has different prices.\" description=\"Condition, language and edition all move the price.\" action=\"Read the story\" />",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialCard",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Shape.",
|
|
9
|
+
"name": "variant",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "\"journal\" | \"spotlight\""
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "The link element the card renders into.",
|
|
15
|
+
"name": "link",
|
|
16
|
+
"required": true,
|
|
17
|
+
"type": "ReactElement"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"description": "The heading.",
|
|
21
|
+
"name": "title",
|
|
22
|
+
"required": true,
|
|
23
|
+
"type": "ReactNode"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"description": "Cover (journal) or picture (spotlight).",
|
|
27
|
+
"name": "media",
|
|
28
|
+
"type": "ReactNode"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"description": "Category (journal) or kicker (spotlight).",
|
|
32
|
+
"name": "overline",
|
|
33
|
+
"type": "ReactNode"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"description": "Lines under the title.",
|
|
37
|
+
"name": "description",
|
|
38
|
+
"type": "ReactNode"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"description": "journal: footer call to action.",
|
|
42
|
+
"name": "action",
|
|
43
|
+
"type": "ReactNode"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"defaultValue": "3",
|
|
47
|
+
"description": "Heading level.",
|
|
48
|
+
"name": "level",
|
|
49
|
+
"type": "2 | 3 | 4"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"description": "Title id (generated when omitted).",
|
|
53
|
+
"name": "titleId",
|
|
54
|
+
"type": "string"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"related": [
|
|
58
|
+
"ResponsiveGrid — `preset=\"trio\"`."
|
|
59
|
+
],
|
|
60
|
+
"rules": [
|
|
61
|
+
2,
|
|
62
|
+
6,
|
|
63
|
+
44,
|
|
64
|
+
45
|
|
65
|
+
],
|
|
66
|
+
"tagline": "A whole-card link (gh#1435). `variant=\"journal\"`: an edge-to-edge cover, category, title, two lines of description and a footer with a circled arrow; the link is named by its title (aria-labelledby). `variant=\"spotlight\"`: kicker, title and a line beside a tilted picture. Pass the link element (router Link or `<a href>`) as `link`; the card content is rendered into it. Geometry: `--editorial-journal-*`, `--editorial-spotlight-*`.",
|
|
67
|
+
"usage": [
|
|
68
|
+
"DO lay journal cards out with `ResponsiveGrid preset=\"trio\"`."
|
|
69
|
+
]
|
|
70
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { Button } from \"@godxjp/ui/general\";\nimport { EditorialEmptyPanel, Eyebrow } from \"@godxjp/ui/layout\";\n\n<EditorialEmptyPanel eyebrow={<Eyebrow>A PLACE FOR YOUR COLLECTION</Eyebrow>} title=\"Keep what you love, together.\" description=\"Record your cards and products.\" actions={<Button>Sign in</Button>} />",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialEmptyPanel",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Illustrated guest panel or dashed empty panel. Default: \"guest\".",
|
|
9
|
+
"name": "variant",
|
|
10
|
+
"type": "\"guest\" | \"empty\""
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"description": "Kicker (an Eyebrow).",
|
|
14
|
+
"name": "eyebrow",
|
|
15
|
+
"type": "ReactNode"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"description": "Title.",
|
|
19
|
+
"name": "title",
|
|
20
|
+
"required": true,
|
|
21
|
+
"type": "ReactNode"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"description": "Heading level. Default: 2.",
|
|
25
|
+
"name": "level",
|
|
26
|
+
"type": "2 | 3"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"description": "Copy.",
|
|
30
|
+
"name": "description",
|
|
31
|
+
"type": "ReactNode"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"description": "Buttons.",
|
|
35
|
+
"name": "actions",
|
|
36
|
+
"type": "ReactNode"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"description": "Medallion glyph (variant=\"empty\").",
|
|
40
|
+
"name": "icon",
|
|
41
|
+
"type": "ReactNode"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"related": [
|
|
45
|
+
"EmptyState — the application empty state."
|
|
46
|
+
],
|
|
47
|
+
"rules": [
|
|
48
|
+
2,
|
|
49
|
+
6,
|
|
50
|
+
44,
|
|
51
|
+
45
|
|
52
|
+
],
|
|
53
|
+
"tagline": "A centred panel for a signed-out or an empty state (gh#1439). `variant=\"guest\"` draws a decorative three-card stack above kicker, title, copy and centred actions; `variant=\"empty\"` is dashed with a round icon medallion. Geometry: `--editorial-empty-panel-*`.",
|
|
54
|
+
"usage": [
|
|
55
|
+
"DO use variant=\"guest\" where a page needs an account, variant=\"empty\" for a collection with nothing in it."
|
|
56
|
+
]
|
|
57
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialFilterBar } from \"@godxjp/ui/layout\";\n\n<EditorialFilterBar aria-label=\"Selection\" value={tab} onValueChange={setTab} options={[{ value: \"all\", label: \"Selected cards\" }, { value: \"down\", label: \"Price drops\" }]} extra=\"vs. 30 days ago\" />",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialFilterBar",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Group name.",
|
|
9
|
+
"name": "aria-label",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "The toggles.",
|
|
15
|
+
"name": "options",
|
|
16
|
+
"required": true,
|
|
17
|
+
"type": "{ value: string; label: ReactNode }[]"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"description": "Pressed toggle.",
|
|
21
|
+
"name": "value",
|
|
22
|
+
"required": true,
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"description": "Change handler.",
|
|
27
|
+
"name": "onValueChange",
|
|
28
|
+
"required": true,
|
|
29
|
+
"type": "(value: string) => void"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"description": "Trailing note.",
|
|
33
|
+
"name": "extra",
|
|
34
|
+
"type": "ReactNode"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"related": [
|
|
38
|
+
"Tabs — panels.",
|
|
39
|
+
"Segmented — a compact single choice."
|
|
40
|
+
],
|
|
41
|
+
"rules": [
|
|
42
|
+
2,
|
|
43
|
+
6,
|
|
44
|
+
44,
|
|
45
|
+
45
|
|
46
|
+
],
|
|
47
|
+
"tagline": "A row of underlined filter toggles above a collection (gh#1435): a named `role=\"group\"` of `aria-pressed` buttons (one pressed at a time) and a trailing note, over a hairline. The collection below is the consumer's. Geometry: `--editorial-filter-bar-*`.",
|
|
48
|
+
"usage": [
|
|
49
|
+
"DO use Tabs when each option owns a panel; this bar only filters one collection."
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialFilterField } from \"@godxjp/ui/layout\";\n\n<EditorialFilterField label=\"Rarity\" htmlFor=\"f-rarity\"><Select id=\"f-rarity\" value={r} onValueChange={setR} options={rarities} /></EditorialFilterField>",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialFilterField",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Visible label.",
|
|
9
|
+
"name": "label",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "ReactNode"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "The control's id.",
|
|
15
|
+
"name": "htmlFor",
|
|
16
|
+
"required": true,
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"description": "The control.",
|
|
21
|
+
"name": "children",
|
|
22
|
+
"required": true,
|
|
23
|
+
"type": "ReactNode"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"related": [
|
|
27
|
+
"FormField — a form's field with help and errors."
|
|
28
|
+
],
|
|
29
|
+
"rules": [
|
|
30
|
+
2,
|
|
31
|
+
6,
|
|
32
|
+
44,
|
|
33
|
+
45
|
|
34
|
+
],
|
|
35
|
+
"tagline": "One field of an EditorialFilterPanel (gh#1438): a visible label (600, muted) over one control; `htmlFor` names the control.",
|
|
36
|
+
"usage": [
|
|
37
|
+
"DO pass the same id to the control (Select id) and to htmlFor."
|
|
38
|
+
]
|
|
39
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialFilterField, EditorialFilterPanel } from \"@godxjp/ui/layout\";\nimport { Select } from \"@godxjp/ui/data-entry\";\n\n<EditorialFilterPanel aria-label=\"Filters\" action={<Button variant=\"outline\" onClick={reset}>Reset</Button>}>\n <EditorialFilterField label=\"Expansion\" htmlFor=\"f-set\"><Select id=\"f-set\" value={set} onValueChange={setSet} options={sets} /></EditorialFilterField>\n</EditorialFilterPanel>",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialFilterPanel",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Group name.",
|
|
9
|
+
"name": "aria-label",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "The fields.",
|
|
15
|
+
"name": "children",
|
|
16
|
+
"required": true,
|
|
17
|
+
"type": "ReactNode"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"description": "Trailing control (reset).",
|
|
21
|
+
"name": "action",
|
|
22
|
+
"type": "ReactNode"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"defaultValue": "\"panel\"",
|
|
26
|
+
"description": "Framed panel, or a bare field row (inside a framed module).",
|
|
27
|
+
"name": "variant",
|
|
28
|
+
"type": "\"panel\" | \"bare\""
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"related": [
|
|
32
|
+
"Toolbar — application filter strip.",
|
|
33
|
+
"EditorialToolbar summary — the row under it."
|
|
34
|
+
],
|
|
35
|
+
"rules": [
|
|
36
|
+
2,
|
|
37
|
+
6,
|
|
38
|
+
44,
|
|
39
|
+
45
|
|
40
|
+
],
|
|
41
|
+
"tagline": "A catalog's filter panel (gh#1438): one bordered surface of `EditorialFilterField`s that wrap, bottom aligned, and a trailing `action` (a reset button), as a named `role=\"group\"`. The selects inside read the panel's control scale. Geometry: `--editorial-filter-panel-*`, `--editorial-filter-field-*`.",
|
|
42
|
+
"usage": [
|
|
43
|
+
"DO put one control per EditorialFilterField and pass the control's id as htmlFor.",
|
|
44
|
+
"DO use Toolbar for an application list's search + filters strip; this panel is the editorial catalog's."
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialFooter } from \"@godxjp/ui/layout\";\n\n<EditorialFooter brand={<a href=\"/\" aria-label=\"Home\"><img src=\"/logo.svg\" alt=\"\" /></a>} tagline=\"Discover. Compare.\" groups={[{ title: \"DISCOVER\", links: [<a key=\"c\" href=\"/cards/\">Cards</a>] }]} legal=\"© 2026 TCG-M.\" />",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialFooter",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "The logo link.",
|
|
9
|
+
"name": "brand",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "ReactNode"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "Link groups.",
|
|
15
|
+
"name": "groups",
|
|
16
|
+
"required": true,
|
|
17
|
+
"type": "{ title: ReactNode; links: ReactNode[] }[]"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"description": "Line under the logo.",
|
|
21
|
+
"name": "tagline",
|
|
22
|
+
"type": "ReactNode"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"defaultValue": "2",
|
|
26
|
+
"description": "Heading level of the group titles.",
|
|
27
|
+
"name": "level",
|
|
28
|
+
"type": "2 | 3"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"description": "Rights line.",
|
|
32
|
+
"name": "legal",
|
|
33
|
+
"type": "ReactNode"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"description": "Note paragraph.",
|
|
37
|
+
"name": "note",
|
|
38
|
+
"type": "ReactNode"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"related": [
|
|
42
|
+
"CenteredShell — `footer`, `footerTone=\"inverse\"`."
|
|
43
|
+
],
|
|
44
|
+
"rules": [
|
|
45
|
+
2,
|
|
46
|
+
6,
|
|
47
|
+
44,
|
|
48
|
+
45
|
|
49
|
+
],
|
|
50
|
+
"tagline": "A public site's footer content (gh#1435) for `CenteredShell footerTone=\"inverse\"`: logo and tagline, link groups (a heading + links each), and a bottom row with the rights line and a note. The footer holding it takes the editorial spacing. Geometry and colours: `--editorial-footer-*`.",
|
|
51
|
+
"usage": [
|
|
52
|
+
"DO pass plain links in each group; the footer styles them."
|
|
53
|
+
]
|
|
54
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialFootnote, EditorialTextButton } from \"@godxjp/ui/layout\";\n\n<EditorialFootnote action={<EditorialTextButton onClick={reset}>Reset display preferences</EditorialTextButton>}>Changes are saved automatically.</EditorialFootnote>",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialFootnote",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "The note.",
|
|
9
|
+
"name": "children",
|
|
10
|
+
"type": "ReactNode"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"description": "Trailing action.",
|
|
14
|
+
"name": "action",
|
|
15
|
+
"type": "ReactNode"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"description": "Cross-axis alignment. Default: \"start\".",
|
|
19
|
+
"name": "align",
|
|
20
|
+
"type": "\"start\" | \"center\""
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"related": [
|
|
24
|
+
"EditorialNote — a ruled aside in a reading column."
|
|
25
|
+
],
|
|
26
|
+
"rules": [
|
|
27
|
+
2,
|
|
28
|
+
6,
|
|
29
|
+
44,
|
|
30
|
+
45
|
|
31
|
+
],
|
|
32
|
+
"tagline": "A quiet closing line under a collection or a settings form (gh#1439): a muted note at the start and an optional action (an EditorialTextButton) at the end. Geometry: `--editorial-footnote-*`.",
|
|
33
|
+
"usage": [
|
|
34
|
+
"DO keep it to one or two sentences."
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialHero, EditorialSection, EditorialSearch, Eyebrow } from \"@godxjp/ui/layout\";\n\n<EditorialSection tone=\"hero\" divider=\"end\">\n <EditorialHero\n eyebrow={<Eyebrow>FOR EVERY CARD, EVERY COLLECTOR.</Eyebrow>}\n title=\"Discover. Compare.\"\n description=\"Your next favourite card.\"\n search={<EditorialSearch label=\"Card name or number\" submitLabel=\"Search\" onSearch={go} />}\n />\n</EditorialSection>",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialHero",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "The h1. Emphasise a second line with `<Text tone=\"brand\" size=\"inherit\">`.",
|
|
9
|
+
"name": "title",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "ReactNode"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "Kicker above the title (an Eyebrow).",
|
|
15
|
+
"name": "eyebrow",
|
|
16
|
+
"type": "ReactNode"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"description": "Lead paragraph.",
|
|
20
|
+
"name": "description",
|
|
21
|
+
"type": "ReactNode"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"description": "The search (an EditorialSearch).",
|
|
25
|
+
"name": "search",
|
|
26
|
+
"type": "ReactNode"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"description": "Suggested-query links under the search (plain links; the slot styles them).",
|
|
30
|
+
"name": "footer",
|
|
31
|
+
"type": "ReactNode"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"description": "Media column (a CardShowcase preset=\"fan\").",
|
|
35
|
+
"name": "media",
|
|
36
|
+
"type": "ReactNode"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"related": [
|
|
40
|
+
"EditorialSearch, CardShowcase, Eyebrow."
|
|
41
|
+
],
|
|
42
|
+
"rules": [
|
|
43
|
+
2,
|
|
44
|
+
6,
|
|
45
|
+
44,
|
|
46
|
+
45
|
|
47
|
+
],
|
|
48
|
+
"tagline": "The opening of an editorial page (gh#1435): a copy column — kicker, the page's one h1, a lead, a search and a line of suggested queries — beside a media column. Put it in `EditorialSection tone=\"hero\" divider=\"end\"`. Geometry: `--editorial-hero-*` (tracks, min-height, h1 size/leading/tracking and every gap).",
|
|
49
|
+
"usage": [
|
|
50
|
+
"DO keep it the page's only h1."
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialInlineSearch } from \"@godxjp/ui/layout\";\n\n<EditorialInlineSearch label=\"Search your collection\" placeholder=\"Name or card number\" onSearch={setQuery} count=\"12 entries\" />",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialInlineSearch",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Visible label and region name.",
|
|
9
|
+
"name": "label",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "id of the input.",
|
|
15
|
+
"name": "id",
|
|
16
|
+
"type": "string"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"description": "Placeholder.",
|
|
20
|
+
"name": "placeholder",
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"description": "Initial query.",
|
|
25
|
+
"name": "defaultValue",
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"description": "Settled, trimmed query.",
|
|
30
|
+
"name": "onSearch",
|
|
31
|
+
"required": true,
|
|
32
|
+
"type": "(query: string) => void"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"default": "300",
|
|
36
|
+
"description": "Settle delay (ms).",
|
|
37
|
+
"name": "debounce",
|
|
38
|
+
"type": "number"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"description": "Live count at the end.",
|
|
42
|
+
"name": "count",
|
|
43
|
+
"type": "ReactNode"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"related": [
|
|
47
|
+
"SearchInput — the application search field.",
|
|
48
|
+
"EditorialSearch — the inset site search."
|
|
49
|
+
],
|
|
50
|
+
"tagline": "A collection's own search row (gh#1439): a visible label, a framed field with a search glyph (max 400px) and a live count at the end. The query is reported after typing settles (`debounce`, default 300ms) or at once on Enter. A named `role=\"search\"` region. Geometry: `--editorial-inline-search-*`; a theme hides the label on narrow screens with `--editorial-inline-search-label-display: none`.",
|
|
51
|
+
"usage": [
|
|
52
|
+
"DO keep the query in the URL; the row only reports it."
|
|
53
|
+
]
|
|
54
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialMasthead, EditorialMastheadAction, EditorialMastheadLink } from \"@godxjp/ui/layout\";\nimport { Moon } from \"lucide-react\";\n\n<EditorialMasthead\n brand={<a href=\"/\" aria-label=\"Home\"><img src=\"/logo.svg\" alt=\"\" /></a>}\n navLabel=\"Main navigation\"\n nav={<EditorialMastheadLink href=\"/cards/\" aria-current=\"page\">Cards</EditorialMastheadLink>}\n actions={<EditorialMastheadAction aria-label=\"Toggle colour theme\"><Moon aria-hidden /></EditorialMastheadAction>}\n/>",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialMasthead",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "The logo link.",
|
|
9
|
+
"name": "brand",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "ReactNode"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "Primary navigation links.",
|
|
15
|
+
"name": "nav",
|
|
16
|
+
"type": "ReactNode"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"description": "Navigation landmark name.",
|
|
20
|
+
"name": "navLabel",
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"description": "End actions.",
|
|
25
|
+
"name": "actions",
|
|
26
|
+
"type": "ReactNode"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"description": "Phone-only menu trigger (a Sheet trigger).",
|
|
30
|
+
"name": "menu",
|
|
31
|
+
"type": "ReactNode"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"related": [
|
|
35
|
+
"CenteredShell — `topbar`.",
|
|
36
|
+
"Sheet + NavList — the phone menu."
|
|
37
|
+
],
|
|
38
|
+
"rules": [
|
|
39
|
+
2,
|
|
40
|
+
6,
|
|
41
|
+
44,
|
|
42
|
+
45
|
|
43
|
+
],
|
|
44
|
+
"subParts": [
|
|
45
|
+
"EditorialMastheadLink",
|
|
46
|
+
"EditorialMastheadAction"
|
|
47
|
+
],
|
|
48
|
+
"tagline": "A public site's header row (gh#1435) for CenteredShell's `topbar` slot: the logo, primary navigation (`EditorialMastheadLink`; `aria-current=\"page\"` underlines the current one) and end actions (the kit `Select variant=\"borderless\" width=\"auto\"` for the interface language or the display currency — the masthead sizes its trigger, `EditorialMastheadAction` 44px icon controls, `variant=\"outline\"` for the account). The bar holding it turns sticky and translucent. `menu` is the phone-only trigger shown when the theme hides `nav`. Geometry: `--editorial-masthead-*`.",
|
|
49
|
+
"usage": [
|
|
50
|
+
"DO pass it as CenteredShell `topbar`; the bar becomes sticky with a blur."
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { Badge } from \"@godxjp/ui/data-display\";\nimport { EditorialMetaBar } from \"@godxjp/ui/layout\";\nimport { Lock } from \"lucide-react\";\n\n<EditorialMetaBar icon={<Lock />} start=\"Your private collection\" end={<Badge variant=\"outline\">Saved to your account</Badge>} />",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialMetaBar",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Leading glyph (primary tone).",
|
|
9
|
+
"name": "icon",
|
|
10
|
+
"type": "ReactNode"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"description": "Start line.",
|
|
14
|
+
"name": "start",
|
|
15
|
+
"required": true,
|
|
16
|
+
"type": "ReactNode"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"description": "End slot, e.g. a Badge.",
|
|
20
|
+
"name": "end",
|
|
21
|
+
"type": "ReactNode"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"related": [
|
|
25
|
+
"EditorialPageHeader — the header above it."
|
|
26
|
+
],
|
|
27
|
+
"rules": [
|
|
28
|
+
2,
|
|
29
|
+
6,
|
|
30
|
+
44,
|
|
31
|
+
45
|
|
32
|
+
],
|
|
33
|
+
"tagline": "A hairline-ruled strip under a page header (gh#1439): a glyph and a line at the start (\"Your private collection\"), a badge at the end. Stacks on a phone when the theme sets `--editorial-meta-bar-align-flow: column`.",
|
|
34
|
+
"usage": [
|
|
35
|
+
"DO keep it to one fact and one chip."
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"example": "import { EditorialPageHeader, EditorialSection, Eyebrow } from \"@godxjp/ui/layout\";\n\n<EditorialSection>\n <EditorialPageHeader\n breadcrumb={[{ label: \"Home\", to: \"/\" }, { label: \"Journal\" }]}\n eyebrow={<Eyebrow>THE TCG-M JOURNAL</Eyebrow>}\n title=\"A little knowledge. More enjoyment.\"\n description=\"A few helpful perspectives for finding, comparing and collecting.\"\n />\n</EditorialSection>",
|
|
3
|
+
"group": "layout",
|
|
4
|
+
"importPath": "@godxjp/ui/layout",
|
|
5
|
+
"name": "EditorialPageHeader",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"description": "The page's h1.",
|
|
9
|
+
"name": "title",
|
|
10
|
+
"required": true,
|
|
11
|
+
"type": "ReactNode"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "Trail above the header.",
|
|
15
|
+
"name": "breadcrumb",
|
|
16
|
+
"type": "BreadcrumbItemProp[]"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"description": "Router link for the trail.",
|
|
20
|
+
"name": "linkComponent",
|
|
21
|
+
"type": "ElementType"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"description": "Name of the trail's nav.",
|
|
25
|
+
"name": "breadcrumbLabel",
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"description": "Kicker above the title (an Eyebrow).",
|
|
30
|
+
"name": "eyebrow",
|
|
31
|
+
"type": "ReactNode"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"description": "One lead line under it.",
|
|
35
|
+
"name": "description",
|
|
36
|
+
"type": "ReactNode"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"description": "Action at the end of the title row.",
|
|
40
|
+
"name": "actions",
|
|
41
|
+
"type": "ReactNode"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"description": "Search under the description (an EditorialSearch).",
|
|
45
|
+
"name": "search",
|
|
46
|
+
"type": "ReactNode"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"description": "Id on the h1.",
|
|
50
|
+
"name": "titleId",
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"description": "Kicker from the page-header knobs, or the plain accent Eyebrow (gh#1439). Default: \"page\".",
|
|
55
|
+
"name": "eyebrowTone",
|
|
56
|
+
"type": "\"page\" | \"accent\""
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"related": [
|
|
60
|
+
"EditorialBreadcrumb, Eyebrow, EditorialSection."
|
|
61
|
+
],
|
|
62
|
+
"rules": [
|
|
63
|
+
2,
|
|
64
|
+
6,
|
|
65
|
+
44,
|
|
66
|
+
45
|
|
67
|
+
],
|
|
68
|
+
"tagline": "The intro of an editorial listing page (gh#1437): an optional `EditorialBreadcrumb`, then the ruled kicker, the page's one h1, one lead line, and an action at the end of the title row. Geometry: `--editorial-page-header-*` (block padding, title size/leading/margins, lead size/measure, kicker size/colour, row display — `block` stacks the action under the copy on a phone).",
|
|
69
|
+
"usage": [
|
|
70
|
+
"DO put it in an EditorialSection on a `flow=\"sections\"` page, so it shares the landing column.",
|
|
71
|
+
"DON'T also give the page a PageContainer title — the header owns the page's one h1."
|
|
72
|
+
]
|
|
73
|
+
}
|