@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Layout component prop types — @see docs/COMPONENTS.md#layout */
|
|
2
2
|
import type * as React from "react";
|
|
3
3
|
import type { ComponentType, ReactNode, SVGProps } from "react";
|
|
4
|
-
import type { BreadcrumbProp, BreadcrumbCurrentItemProp, TitleProp, SubtitleProp, StatusProp, ExtraProp, FooterProp, PageDensityProp, DensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, MobileShellHeightProp, MobileShellWidthProp, OrientationProp, TextAlignProp, TextToneProp, BreakpointProp, GapProp, PadProp, PadRawProp, ClassNameProp, ChildrenProp, IdProp, DisabledProp, DescriptionProp, ActionProp, IconProp, HeadingLevelProp, ToneProp, WidthProp, SizeProp } from "../vocabulary/index.js";
|
|
4
|
+
import type { BreadcrumbProp, BreadcrumbCurrentItemProp, TitleProp, SubtitleProp, StatusProp, ExtraProp, FooterProp, PageDensityProp, DensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, MobileShellHeightProp, MobileShellWidthProp, OrientationProp, TextAlignProp, TextToneProp, BreakpointProp, GapProp, PadProp, PadRawProp, ClassNameProp, ChildrenProp, IdProp, DisabledProp, DescriptionProp, ActionProp, IconProp, HeadingLevelProp, ToneProp, WidthProp, SizeProp, LabelProp, NameProp, PlaceholderProp } from "../vocabulary/index.js";
|
|
5
5
|
import type { EmptyStateToneProp } from "./data-display.prop.js";
|
|
6
6
|
import type { SearchInputProp } from "./data-entry.prop.js";
|
|
7
7
|
/**
|
|
@@ -398,7 +398,7 @@ export type ResponsiveGridColumnsProp = number | {
|
|
|
398
398
|
* (container ≥ 64rem), then 3 columns from `lg` upward.
|
|
399
399
|
*/
|
|
400
400
|
export type ResponsiveGridFlowProp = "rows" | "columns";
|
|
401
|
-
export type ResponsiveGridPresetProp = "pricing-plans";
|
|
401
|
+
export type ResponsiveGridPresetProp = "pricing-plans" | "catalog" | "trio" | "lead" | "panels";
|
|
402
402
|
/**
|
|
403
403
|
* Block-axis alignment of the cells in each grid row — antd `Row align`, spelled with Flex's
|
|
404
404
|
* `FlexAlignProp` values (antd `top` → `start`; `stretch` is the same word). `stretch` gives every
|
|
@@ -456,6 +456,10 @@ export type PageInsetProp = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
456
456
|
};
|
|
457
457
|
/** @see AppShell */
|
|
458
458
|
export type AppShellProp = {
|
|
459
|
+
/** Phone destinations, using MobileShell tabBar children (3–5 links or Buttons with aria-current="page"). Only rendered in drawer navigation mode. Main/footer reserve the measured safe-area-inclusive height. */
|
|
460
|
+
mobileTabBar?: MobileShellProp["tabBar"];
|
|
461
|
+
/** Navigation landmark name; defaults to the localized primary-navigation label. */
|
|
462
|
+
mobileTabBarLabel?: string;
|
|
459
463
|
/** Omit or pass null/false for a shell without the sidebar landmark or grid track. */
|
|
460
464
|
sidebar?: ReactNode;
|
|
461
465
|
children: ReactNode;
|
|
@@ -906,6 +910,22 @@ export type CenteredShellPageProp = {
|
|
|
906
910
|
topbar?: ReactNode;
|
|
907
911
|
/** Footer slot (contentinfo) pinned to the bottom (legal links, locale switch, support). Omit → none. */
|
|
908
912
|
footer?: ReactNode;
|
|
913
|
+
/**
|
|
914
|
+
* `"inverse"` paints the footer as a brand band (a public site's dark footer, gh#1429): its
|
|
915
|
+
* surface is `--centered-shell-footer-inverse-background` and the text roles INSIDE it
|
|
916
|
+
* (`--foreground`, `--muted-foreground`, `--border`, `--text-link`, the focus ring) are re-pointed
|
|
917
|
+
* to `--centered-shell-footer-inverse-*`, so kit children keep reading their normal roles.
|
|
918
|
+
* Defaults derive from the page's own ink and canvas (ink band, canvas text), so a theme that sets
|
|
919
|
+
* nothing still gets a legible band. `"default"` (the default) emits no attribute.
|
|
920
|
+
*/
|
|
921
|
+
footerTone?: "default" | "inverse";
|
|
922
|
+
/**
|
|
923
|
+
* `"sections"` makes the page a stack of full-width `EditorialSection` bands (gh#1435): the
|
|
924
|
+
* column drops its max-width and gap and `main` its padding, because each band draws its own
|
|
925
|
+
* ground edge to edge and centres its own content in the landing column. `"column"` (the
|
|
926
|
+
* default) emits no attribute and keeps the shell's exact box.
|
|
927
|
+
*/
|
|
928
|
+
flow?: "column" | "sections";
|
|
909
929
|
/**
|
|
910
930
|
* Max-width of the centred content column: `sm` ~32rem, `md` (default) ~46rem, `lg` ~64rem — all
|
|
911
931
|
* wider than AuthShell's 24rem auth card. A service retunes each tier via `--centered-shell-width-*`.
|
|
@@ -1622,6 +1642,14 @@ export type TopbarItemProp = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
|
1622
1642
|
*/
|
|
1623
1643
|
/** Hide below a shared responsive breakpoint, without changing cell height. */
|
|
1624
1644
|
hideBelow?: BreakpointProp;
|
|
1645
|
+
/**
|
|
1646
|
+
* The inverse of `hideBelow`: drop the cell FROM a breakpoint step upwards (gh#1428) — a
|
|
1647
|
+
* phone-only cell, e.g. the trigger of a navigation `Sheet` whose links sit inline in the bar
|
|
1648
|
+
* from that step up. Same steps and `data-hide-from` attribute as `Flex hideFrom`; the cell stays
|
|
1649
|
+
* a direct child of the slot, so the bar's stretch chain is untouched (a wrapper would collapse
|
|
1650
|
+
* it, gh#883).
|
|
1651
|
+
*/
|
|
1652
|
+
hideFrom?: BreakpointProp;
|
|
1625
1653
|
/**
|
|
1626
1654
|
* The cell's leading glyph, placed in a slot the CELL sizes (`--topbar-icon-size`).
|
|
1627
1655
|
*
|
|
@@ -2083,3 +2111,575 @@ export type AffixProp = {
|
|
|
2083
2111
|
id?: IdProp;
|
|
2084
2112
|
className?: ClassNameProp;
|
|
2085
2113
|
};
|
|
2114
|
+
/** Ground of an {@link EditorialSectionProp}. */
|
|
2115
|
+
export type EditorialSectionToneProp = "default" | "surface" | "subtle" | "hero";
|
|
2116
|
+
/** Hairlines an {@link EditorialSectionProp} draws on its block edges. */
|
|
2117
|
+
export type EditorialSectionDividerProp = "none" | "end" | "both";
|
|
2118
|
+
/**
|
|
2119
|
+
* @see EditorialSection — one full-width band of a `flow="sections"` page: its ground and block
|
|
2120
|
+
* hairlines run edge to edge while the content sits in the landing column (max width + gutter of
|
|
2121
|
+
* the shell). `spacing="section"` gives the band the section rhythm (`--editorial-section-padding-block`).
|
|
2122
|
+
*/
|
|
2123
|
+
export type EditorialSectionProp = {
|
|
2124
|
+
children: ChildrenProp;
|
|
2125
|
+
tone?: EditorialSectionToneProp;
|
|
2126
|
+
divider?: EditorialSectionDividerProp;
|
|
2127
|
+
/** `"section"` pads the band by the section rhythm; `"none"` (default) leaves the content flush. */
|
|
2128
|
+
spacing?: "none" | "section";
|
|
2129
|
+
/** Landmark element. Default `section`; `div` for a purely visual band, `nav` for a navigation band. */
|
|
2130
|
+
as?: "section" | "div" | "nav";
|
|
2131
|
+
"aria-label"?: string;
|
|
2132
|
+
"aria-labelledby"?: string;
|
|
2133
|
+
id?: IdProp;
|
|
2134
|
+
className?: ClassNameProp;
|
|
2135
|
+
};
|
|
2136
|
+
/**
|
|
2137
|
+
* @see EditorialHero — the opening of an editorial page: the copy column (kicker, the page's one
|
|
2138
|
+
* h1, a lead paragraph, a search and a line of suggestions) beside a media column (a
|
|
2139
|
+
* `CardShowcase`). Put it in `EditorialSection tone="hero"`.
|
|
2140
|
+
*/
|
|
2141
|
+
export type EditorialHeroProp = {
|
|
2142
|
+
/** The kicker above the title — usually an `Eyebrow`. */
|
|
2143
|
+
eyebrow?: ReactNode;
|
|
2144
|
+
/** The h1. An emphasised second line is a `Text size="inherit"` run inside it. */
|
|
2145
|
+
title: TitleProp;
|
|
2146
|
+
description?: DescriptionProp;
|
|
2147
|
+
/** The search under the lead — usually an `EditorialSearch`. */
|
|
2148
|
+
search?: ReactNode;
|
|
2149
|
+
/** A line under the search (suggested queries). */
|
|
2150
|
+
footer?: ReactNode;
|
|
2151
|
+
/** The media column — usually a `CardShowcase preset="fan"`. */
|
|
2152
|
+
media?: ReactNode;
|
|
2153
|
+
className?: ClassNameProp;
|
|
2154
|
+
};
|
|
2155
|
+
/** @see Eyebrow — the small uppercase kicker above an editorial heading. */
|
|
2156
|
+
export type EyebrowProp = {
|
|
2157
|
+
children: ChildrenProp;
|
|
2158
|
+
/** `"ruled"` (default) leads with a short ornament rule; `"plain"` is the bare kicker. */
|
|
2159
|
+
variant?: EyebrowVariantProp;
|
|
2160
|
+
as?: "p" | "span" | "div";
|
|
2161
|
+
className?: ClassNameProp;
|
|
2162
|
+
};
|
|
2163
|
+
/** Shape of an {@link EyebrowProp}. */
|
|
2164
|
+
export type EyebrowVariantProp = "ruled" | "plain";
|
|
2165
|
+
/**
|
|
2166
|
+
* @see EditorialSectionHead — a section's head: kicker, an editorial h2, one line of description,
|
|
2167
|
+
* and a trailing action (an `EditorialTextLink` "view all") on the title's row.
|
|
2168
|
+
*/
|
|
2169
|
+
export type EditorialSectionHeadProp = {
|
|
2170
|
+
eyebrow?: ReactNode;
|
|
2171
|
+
title: TitleProp;
|
|
2172
|
+
description?: DescriptionProp;
|
|
2173
|
+
action?: ReactNode;
|
|
2174
|
+
/** Heading level of the title. Default `2`. */
|
|
2175
|
+
level?: 2 | 3;
|
|
2176
|
+
/**
|
|
2177
|
+
* `"section"` (default) is a page section's head; `"module"` is the smaller head of a module
|
|
2178
|
+
* inside a page (an item page's price module, gh#1438): `--editorial-section-head-module-*`.
|
|
2179
|
+
*/
|
|
2180
|
+
scale?: "section" | "module";
|
|
2181
|
+
/** Id put on the title, for a section's `aria-labelledby`. */
|
|
2182
|
+
titleId?: IdProp;
|
|
2183
|
+
className?: ClassNameProp;
|
|
2184
|
+
};
|
|
2185
|
+
/**
|
|
2186
|
+
* @see EditorialBreadcrumb — the trail at the top of an editorial page (gh#1437): `Breadcrumb`
|
|
2187
|
+
* (same `<nav>`/`<ol>`, `aria-current`, router `linkComponent`) with the editorial rhythm —
|
|
2188
|
+
* `--editorial-breadcrumb-*` (top inset, gap, line height). Put it in an `EditorialSection`.
|
|
2189
|
+
*/
|
|
2190
|
+
export type EditorialBreadcrumbProp = {
|
|
2191
|
+
/** Ordered trail, root first; the last item is the current page. */
|
|
2192
|
+
items: BreadcrumbProp;
|
|
2193
|
+
/** Router link component for the ancestors (TanStack / react-router `Link`). Default `<a>`. */
|
|
2194
|
+
linkComponent?: React.ElementType;
|
|
2195
|
+
/** Accessible name of the `<nav>` landmark. Defaults to the localized "Breadcrumb". */
|
|
2196
|
+
ariaLabel?: string;
|
|
2197
|
+
className?: ClassNameProp;
|
|
2198
|
+
};
|
|
2199
|
+
/**
|
|
2200
|
+
* @see EditorialPageHeader — the intro of an editorial listing page (gh#1437): an optional
|
|
2201
|
+
* `EditorialBreadcrumb`, then the ruled kicker, the page's one h1, one lead line and an optional
|
|
2202
|
+
* action at the end of the title row. Geometry: `--editorial-page-header-*`.
|
|
2203
|
+
*/
|
|
2204
|
+
export type EditorialPageHeaderProp = {
|
|
2205
|
+
/** The trail above the header (rendered as an `EditorialBreadcrumb`). */
|
|
2206
|
+
breadcrumb?: BreadcrumbProp;
|
|
2207
|
+
/** Router link component for the trail. */
|
|
2208
|
+
linkComponent?: React.ElementType;
|
|
2209
|
+
/** Accessible name of the trail's `<nav>`. */
|
|
2210
|
+
breadcrumbLabel?: string;
|
|
2211
|
+
/** The kicker above the title — usually an `Eyebrow`. */
|
|
2212
|
+
eyebrow?: ReactNode;
|
|
2213
|
+
/** The page's one h1. */
|
|
2214
|
+
title: TitleProp;
|
|
2215
|
+
description?: DescriptionProp;
|
|
2216
|
+
/** Trailing action on the title row (a button or a link). */
|
|
2217
|
+
actions?: ReactNode;
|
|
2218
|
+
/**
|
|
2219
|
+
* A search under the description, inside the header (a catalog's `EditorialSearch`, gh#1438):
|
|
2220
|
+
* `--editorial-page-header-search-space-block-start` above it, capped at
|
|
2221
|
+
* `--editorial-page-header-search-max-width`.
|
|
2222
|
+
*/
|
|
2223
|
+
search?: ReactNode;
|
|
2224
|
+
/** Id put on the h1. */
|
|
2225
|
+
titleId?: IdProp;
|
|
2226
|
+
/**
|
|
2227
|
+
* Kicker colour and size: `"page"` (default) takes the page-header kicker knobs
|
|
2228
|
+
* (`--editorial-page-header-kicker-*`); `"accent"` keeps the plain Eyebrow (the editorial kicker
|
|
2229
|
+
* colour and `--editorial-eyebrow-font-size`) — the signed-in pages of gh#1439.
|
|
2230
|
+
*/
|
|
2231
|
+
eyebrowTone?: "page" | "accent";
|
|
2232
|
+
className?: ClassNameProp;
|
|
2233
|
+
};
|
|
2234
|
+
/**
|
|
2235
|
+
* @see EditorialArticle — the reading column of a long-form editorial page (gh#1440): the ruled
|
|
2236
|
+
* kicker, the page's one h1, an intro set off by a rule, then `EditorialArticleSection`s, an
|
|
2237
|
+
* `EditorialNote` and a trailing `EditorialTextLink`. Geometry: `--editorial-article-*`.
|
|
2238
|
+
*/
|
|
2239
|
+
export type EditorialArticleProp = {
|
|
2240
|
+
/** The kicker above the title — usually an `Eyebrow`. */
|
|
2241
|
+
eyebrow?: ReactNode;
|
|
2242
|
+
/** The page's one h1. Line breaks the design sets by hand are `<br />` in the node. */
|
|
2243
|
+
title: TitleProp;
|
|
2244
|
+
/** The lead paragraph under the title. */
|
|
2245
|
+
intro?: ReactNode;
|
|
2246
|
+
children?: ChildrenProp;
|
|
2247
|
+
/** Id put on the h1. */
|
|
2248
|
+
titleId?: IdProp;
|
|
2249
|
+
className?: ClassNameProp;
|
|
2250
|
+
};
|
|
2251
|
+
/** @see EditorialArticleSection — one titled section of an `EditorialArticle` (gh#1440). */
|
|
2252
|
+
export type EditorialArticleSectionProp = {
|
|
2253
|
+
/** The section heading (h2). */
|
|
2254
|
+
title: TitleProp;
|
|
2255
|
+
/** Paragraphs of prose, each rendered as a `<p>` at the article's reading leading. */
|
|
2256
|
+
paragraphs?: ReactNode[];
|
|
2257
|
+
/** Anything after the paragraphs (a list, a link). */
|
|
2258
|
+
children?: ChildrenProp;
|
|
2259
|
+
/** Id put on the h2 (the section's accessible name). */
|
|
2260
|
+
titleId?: IdProp;
|
|
2261
|
+
className?: ClassNameProp;
|
|
2262
|
+
};
|
|
2263
|
+
/** @see EditorialNote — a note block set off by an ornament rule (gh#1440): `role="note"`. */
|
|
2264
|
+
export type EditorialNoteProp = {
|
|
2265
|
+
children: ChildrenProp;
|
|
2266
|
+
className?: ClassNameProp;
|
|
2267
|
+
};
|
|
2268
|
+
/**
|
|
2269
|
+
* @see EditorialPanel — a bordered panel with a tag, a heading and a list (gh#1440); a row of
|
|
2270
|
+
* them is `ResponsiveGrid preset="panels"`. Geometry: `--editorial-panel-*`.
|
|
2271
|
+
*/
|
|
2272
|
+
export type EditorialPanelProp = {
|
|
2273
|
+
/** A short tag above the heading (NEXT / FUTURE). */
|
|
2274
|
+
tag?: ReactNode;
|
|
2275
|
+
title: TitleProp;
|
|
2276
|
+
/** The panel's list items. */
|
|
2277
|
+
items?: ReactNode[];
|
|
2278
|
+
children?: ChildrenProp;
|
|
2279
|
+
/** Heading level. Default `2`. */
|
|
2280
|
+
level?: 2 | 3;
|
|
2281
|
+
className?: ClassNameProp;
|
|
2282
|
+
};
|
|
2283
|
+
/**
|
|
2284
|
+
* @see EditorialTextLink — an inline call to action with a trailing arrow ("view all →"). Wrap a
|
|
2285
|
+
* router link with `asChild`.
|
|
2286
|
+
*/
|
|
2287
|
+
export type EditorialTextLinkProp = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "color"> & {
|
|
2288
|
+
children: ChildrenProp;
|
|
2289
|
+
asChild?: boolean;
|
|
2290
|
+
};
|
|
2291
|
+
/**
|
|
2292
|
+
* @see EditorialSearch — the inset site search: one bordered box holding a search glyph, the field
|
|
2293
|
+
* and the submit button, under a visually hidden label (`role="search"`). Submitting calls
|
|
2294
|
+
* `onSearch` with the trimmed query; without JavaScript the form GETs `action` with `name`.
|
|
2295
|
+
*/
|
|
2296
|
+
export type EditorialSearchProp = {
|
|
2297
|
+
/**
|
|
2298
|
+
* `inset` (default): the site search — glyph, field and submit button in one shadowed box under a
|
|
2299
|
+
* hidden label. `inline` (gh#1439): a collection's own search row — a VISIBLE label, a framed
|
|
2300
|
+
* field and a live `count`; the query is reported after typing settles (`debounce`) or on Enter,
|
|
2301
|
+
* with no submit button.
|
|
2302
|
+
*/
|
|
2303
|
+
variant?: "inset" | "inline";
|
|
2304
|
+
/** The field's label (visually hidden for `inset`, shown for `inline`). It also names the landmark. */
|
|
2305
|
+
label: string;
|
|
2306
|
+
placeholder?: PlaceholderProp;
|
|
2307
|
+
/** Visible text of the submit button (`inset`; required there). */
|
|
2308
|
+
submitLabel?: LabelProp;
|
|
2309
|
+
/** `inline`: a live count at the end of the row ("12 entries"), announced politely. */
|
|
2310
|
+
count?: ReactNode;
|
|
2311
|
+
/** `inline`: delay in ms before a typed query is reported. Default 300. */
|
|
2312
|
+
debounce?: number;
|
|
2313
|
+
/** Query parameter name. Default `q`. */
|
|
2314
|
+
name?: NameProp;
|
|
2315
|
+
defaultValue?: string;
|
|
2316
|
+
/** Form action for the no-JavaScript submit. */
|
|
2317
|
+
action?: string;
|
|
2318
|
+
onSearch?: (query: string) => void;
|
|
2319
|
+
/**
|
|
2320
|
+
* A scope control at the start of the box (a site searched per game: "which game") — pass the
|
|
2321
|
+
* kit's `Select` (variant="borderless", width="auto", with its own aria-label and `name`). The box
|
|
2322
|
+
* gives it the field height and a hairline before the field; the popup is the Select's own.
|
|
2323
|
+
*/
|
|
2324
|
+
scope?: ReactNode;
|
|
2325
|
+
/**
|
|
2326
|
+
* `inset` (gh#1447): matches to list under the box while the field has focus, grouped by kind
|
|
2327
|
+
* (cards, products, sets). The box is then an ARIA combobox: arrows move through the rows, Enter
|
|
2328
|
+
* follows the active row's link, Escape closes. The consumer fetches; the kit only shows rows.
|
|
2329
|
+
*/
|
|
2330
|
+
suggestions?: EditorialSearchSuggestionGroupProp[];
|
|
2331
|
+
/** `inset`: the last row of the popup — the full results ("「ピカ」をすべて見る"). */
|
|
2332
|
+
suggestionsFooter?: EditorialSearchSuggestionFooterProp;
|
|
2333
|
+
/** `inset`: accessible name of the suggestions listbox. Default: `label`. */
|
|
2334
|
+
suggestionsLabel?: string;
|
|
2335
|
+
/**
|
|
2336
|
+
* `inset`: the field's text after every edit — never between `compositionstart` and
|
|
2337
|
+
* `compositionend` (an IME candidate is not a query); once more on `compositionend`.
|
|
2338
|
+
*/
|
|
2339
|
+
onQueryChange?: (query: string) => void;
|
|
2340
|
+
/** `inset`: the element rows render as — a router `Link` (receives `href`). Default `"a"`. */
|
|
2341
|
+
linkComponent?: React.ElementType;
|
|
2342
|
+
id?: IdProp;
|
|
2343
|
+
className?: ClassNameProp;
|
|
2344
|
+
};
|
|
2345
|
+
/** @see EditorialSearch — one group of suggestions under a heading (gh#1447). */
|
|
2346
|
+
export type EditorialSearchSuggestionGroupProp = {
|
|
2347
|
+
id: string;
|
|
2348
|
+
/** The group heading ("カード"). */
|
|
2349
|
+
label: string;
|
|
2350
|
+
items: EditorialSearchSuggestionProp[];
|
|
2351
|
+
};
|
|
2352
|
+
/** @see EditorialSearch — one suggestion row: a link with optional media, detail and trailing meta. */
|
|
2353
|
+
export type EditorialSearchSuggestionProp = {
|
|
2354
|
+
id: string;
|
|
2355
|
+
href: string;
|
|
2356
|
+
label: ReactNode;
|
|
2357
|
+
/** A second line (set, number). */
|
|
2358
|
+
description?: ReactNode;
|
|
2359
|
+
/** The leading thumbnail, logo or code chip, sized by `--editorial-search-suggestion-media-*`. */
|
|
2360
|
+
media?: ReactNode;
|
|
2361
|
+
/** Trailing value (a price). */
|
|
2362
|
+
meta?: ReactNode;
|
|
2363
|
+
};
|
|
2364
|
+
/** @see EditorialSearch — the popup's last row. */
|
|
2365
|
+
export type EditorialSearchSuggestionFooterProp = {
|
|
2366
|
+
href: string;
|
|
2367
|
+
label: ReactNode;
|
|
2368
|
+
};
|
|
2369
|
+
/**
|
|
2370
|
+
* @see EditorialPillNav — a horizontal band of section links (a site's "browse by game" row): an
|
|
2371
|
+
* optional lead label, then `EditorialPillNavItem`s; it scrolls sideways when it overflows.
|
|
2372
|
+
*/
|
|
2373
|
+
export type EditorialPillNavProp = {
|
|
2374
|
+
/** Accessible name of the navigation landmark. */
|
|
2375
|
+
"aria-label": string;
|
|
2376
|
+
/** Visible lead text before the pills (hidden from the accessibility tree; the landmark is named). */
|
|
2377
|
+
label?: LabelProp;
|
|
2378
|
+
children: ChildrenProp;
|
|
2379
|
+
className?: ClassNameProp;
|
|
2380
|
+
};
|
|
2381
|
+
/**
|
|
2382
|
+
* @see EditorialPillNavItem — one pill. `aria-current` on the link (`"page"`, or `"true"` for the
|
|
2383
|
+
* current filter of a set) shows it selected.
|
|
2384
|
+
*/
|
|
2385
|
+
export type EditorialPillNavItemProp = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "color"> & {
|
|
2386
|
+
children: ChildrenProp;
|
|
2387
|
+
asChild?: boolean;
|
|
2388
|
+
/** A leading glyph (an icon element), or `"dot"` for the small square marker. */
|
|
2389
|
+
icon?: ReactNode | "dot";
|
|
2390
|
+
};
|
|
2391
|
+
/**
|
|
2392
|
+
* @see CardShowcase — a staged composition of product pictures. `preset="fan"`: three cards fanned
|
|
2393
|
+
* over ornament orbits and stars, a corner label and a caption card (items: start, centre, end).
|
|
2394
|
+
* `preset="binder"`: a tilted binder page of pockets (up to six items). Decorations are aria-hidden;
|
|
2395
|
+
* each item keeps its own name.
|
|
2396
|
+
*/
|
|
2397
|
+
export type CardShowcaseProp = {
|
|
2398
|
+
preset: CardShowcasePresetProp;
|
|
2399
|
+
/** The pictures, in reading order — usually links wrapping an `<img>`. */
|
|
2400
|
+
items: ReactNode[];
|
|
2401
|
+
/** `fan`: the corner label ("ONE PLACE. MANY WORLDS."). */
|
|
2402
|
+
label?: LabelProp;
|
|
2403
|
+
/** `fan`: the caption card — a glyph, a small overline and a title. */
|
|
2404
|
+
caption?: {
|
|
2405
|
+
icon?: ReactNode;
|
|
2406
|
+
overline?: ReactNode;
|
|
2407
|
+
title: ReactNode;
|
|
2408
|
+
};
|
|
2409
|
+
className?: ClassNameProp;
|
|
2410
|
+
};
|
|
2411
|
+
/** Composition of a {@link CardShowcaseProp}. */
|
|
2412
|
+
export type CardShowcasePresetProp = "fan" | "binder";
|
|
2413
|
+
/**
|
|
2414
|
+
* @see EditorialBanner — a rounded brand panel inside the column: kicker, title, description and a
|
|
2415
|
+
* call to action beside a media slot (a `CardShowcase preset="binder"`), in the inverse palette.
|
|
2416
|
+
*/
|
|
2417
|
+
export type EditorialBannerProp = {
|
|
2418
|
+
eyebrow?: ReactNode;
|
|
2419
|
+
title: TitleProp;
|
|
2420
|
+
description?: DescriptionProp;
|
|
2421
|
+
action?: ReactNode;
|
|
2422
|
+
media?: ReactNode;
|
|
2423
|
+
/** Heading level of the title. Default `2`. */
|
|
2424
|
+
level?: 2 | 3;
|
|
2425
|
+
className?: ClassNameProp;
|
|
2426
|
+
};
|
|
2427
|
+
/**
|
|
2428
|
+
* @see CatalogCard — a catalog tile: the framed picture with an overlaid favourite toggle, then an
|
|
2429
|
+
* overline, the title (a heading wrapping the item link), metadata, a price line and a footer.
|
|
2430
|
+
* `variant="sealed"` frames a wider, unshadowed product picture.
|
|
2431
|
+
*/
|
|
2432
|
+
export type CatalogCardProp = {
|
|
2433
|
+
variant?: CatalogCardVariantProp;
|
|
2434
|
+
/** The picture — usually a link (tabIndex -1, aria-hidden) wrapping an `<img>`. */
|
|
2435
|
+
media: ReactNode;
|
|
2436
|
+
/** The overlaid favourite toggle. Omit for none. */
|
|
2437
|
+
favorite?: {
|
|
2438
|
+
pressed: boolean;
|
|
2439
|
+
onPressedChange: (pressed: boolean) => void;
|
|
2440
|
+
label: string;
|
|
2441
|
+
/** While the saved state is unknown (loading) or a change is in flight. */
|
|
2442
|
+
disabled?: boolean;
|
|
2443
|
+
};
|
|
2444
|
+
overline?: ReactNode;
|
|
2445
|
+
/** The title — the item link. Rendered inside a heading (see `level`). */
|
|
2446
|
+
title: TitleProp;
|
|
2447
|
+
level?: 2 | 3 | 4;
|
|
2448
|
+
/** Metadata row — text and `CatalogCardTag`s. */
|
|
2449
|
+
meta?: ReactNode;
|
|
2450
|
+
priceLabel?: ReactNode;
|
|
2451
|
+
price?: ReactNode;
|
|
2452
|
+
change?: ReactNode;
|
|
2453
|
+
footer?: ReactNode;
|
|
2454
|
+
className?: ClassNameProp;
|
|
2455
|
+
};
|
|
2456
|
+
/** Picture frame of a {@link CatalogCardProp}. */
|
|
2457
|
+
export type CatalogCardVariantProp = "card" | "sealed";
|
|
2458
|
+
/** @see CatalogCardTag — a small outlined tag in a `CatalogCard` metadata row (a rarity code). */
|
|
2459
|
+
export type CatalogCardTagProp = {
|
|
2460
|
+
children: ChildrenProp;
|
|
2461
|
+
className?: ClassNameProp;
|
|
2462
|
+
};
|
|
2463
|
+
/**
|
|
2464
|
+
* @see EditorialCard — a whole-card link. `variant="journal"`: an edge-to-edge cover, category,
|
|
2465
|
+
* title, two lines of description and a footer with a circled arrow; the link is named by the title.
|
|
2466
|
+
* `variant="spotlight"`: a kicker, title and line beside a tilted picture.
|
|
2467
|
+
* Pass the link element (a router `<Link>` or `<a href>`) as `link`; the card content goes inside it.
|
|
2468
|
+
*/
|
|
2469
|
+
export type EditorialCardProp = {
|
|
2470
|
+
variant: EditorialCardVariantProp;
|
|
2471
|
+
link: React.ReactElement;
|
|
2472
|
+
/** `journal`: the cover; `spotlight`: the picture. */
|
|
2473
|
+
media?: ReactNode;
|
|
2474
|
+
/** `journal`: the category; `spotlight`: the kicker. */
|
|
2475
|
+
overline?: ReactNode;
|
|
2476
|
+
title: TitleProp;
|
|
2477
|
+
description?: DescriptionProp;
|
|
2478
|
+
/** `journal`: the footer's call to action ("Read the story"). */
|
|
2479
|
+
action?: ReactNode;
|
|
2480
|
+
level?: 2 | 3 | 4;
|
|
2481
|
+
/** Id of the title (journal names its link by it). Generated when omitted. */
|
|
2482
|
+
titleId?: IdProp;
|
|
2483
|
+
className?: ClassNameProp;
|
|
2484
|
+
};
|
|
2485
|
+
/** Shape of an {@link EditorialCardProp}. */
|
|
2486
|
+
export type EditorialCardVariantProp = "journal" | "spotlight";
|
|
2487
|
+
/**
|
|
2488
|
+
* @see EditorialMasthead — a public site's header row, for `CenteredShell`'s `topbar` slot: the
|
|
2489
|
+
* logo, the primary navigation (`EditorialMastheadLink`s; `aria-current="page"` underlines the
|
|
2490
|
+
* current one), and the actions at the end (`EditorialMastheadAction`, kit `Select` pickers).
|
|
2491
|
+
* The bar that holds it turns sticky and translucent. `menu` is the phone-only trigger that opens
|
|
2492
|
+
* the same navigation (shown when the theme hides `nav`). Pickers in `actions` (language, currency)
|
|
2493
|
+
* are the kit's `Select variant="borderless" width="auto"`; the masthead sizes their trigger.
|
|
2494
|
+
*/
|
|
2495
|
+
export type EditorialMastheadProp = {
|
|
2496
|
+
/** The logo link (its accessible name is the home link's). */
|
|
2497
|
+
brand: ReactNode;
|
|
2498
|
+
/** Primary navigation links. */
|
|
2499
|
+
nav?: ReactNode;
|
|
2500
|
+
/** Accessible name of the navigation landmark. */
|
|
2501
|
+
navLabel?: string;
|
|
2502
|
+
actions?: ReactNode;
|
|
2503
|
+
/** The phone-only menu trigger. */
|
|
2504
|
+
menu?: ReactNode;
|
|
2505
|
+
className?: ClassNameProp;
|
|
2506
|
+
};
|
|
2507
|
+
/** @see EditorialMastheadLink — one primary navigation link of an `EditorialMasthead`. */
|
|
2508
|
+
export type EditorialMastheadLinkProp = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "color"> & {
|
|
2509
|
+
children: ChildrenProp;
|
|
2510
|
+
asChild?: boolean;
|
|
2511
|
+
};
|
|
2512
|
+
/**
|
|
2513
|
+
* @see EditorialMastheadAction — a 44px icon control at the end of an `EditorialMasthead` (theme
|
|
2514
|
+
* toggle, account). `variant="outline"` frames it; `collapse` lets the theme hide it on a phone
|
|
2515
|
+
* (`--editorial-masthead-collapsible-display`). Give it an `aria-label`.
|
|
2516
|
+
*/
|
|
2517
|
+
export type EditorialMastheadActionProp = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "color"> & {
|
|
2518
|
+
children: ChildrenProp;
|
|
2519
|
+
asChild?: boolean;
|
|
2520
|
+
variant?: "ghost" | "outline";
|
|
2521
|
+
collapse?: boolean;
|
|
2522
|
+
};
|
|
2523
|
+
/**
|
|
2524
|
+
* @see EditorialFooter — a public site's footer content, for `CenteredShell footerTone="inverse"`:
|
|
2525
|
+
* the logo and a tagline, link groups (each a heading + links), and a bottom row (rights, notes).
|
|
2526
|
+
* The footer that holds it takes the editorial spacing (`--editorial-footer-*`).
|
|
2527
|
+
*/
|
|
2528
|
+
export type EditorialFooterProp = {
|
|
2529
|
+
brand: ReactNode;
|
|
2530
|
+
tagline?: ReactNode;
|
|
2531
|
+
groups: {
|
|
2532
|
+
title: ReactNode;
|
|
2533
|
+
links: ReactNode[];
|
|
2534
|
+
}[];
|
|
2535
|
+
/** Heading level of the group titles. Default `2`. */
|
|
2536
|
+
level?: 2 | 3;
|
|
2537
|
+
legal?: ReactNode;
|
|
2538
|
+
note?: ReactNode;
|
|
2539
|
+
className?: ClassNameProp;
|
|
2540
|
+
};
|
|
2541
|
+
/**
|
|
2542
|
+
* @see EditorialFilterBar — a row of underlined filter toggles (one pressed at a time) with a
|
|
2543
|
+
* trailing note, above a collection ("Selected · Price drops · Price rises … vs. 30 days ago").
|
|
2544
|
+
* The buttons are a named `role="group"` of `aria-pressed` toggles; the collection below is the
|
|
2545
|
+
* consumer's.
|
|
2546
|
+
*/
|
|
2547
|
+
export type EditorialFilterBarProp = {
|
|
2548
|
+
"aria-label": string;
|
|
2549
|
+
options: {
|
|
2550
|
+
value: string;
|
|
2551
|
+
label: ReactNode;
|
|
2552
|
+
}[];
|
|
2553
|
+
value: string;
|
|
2554
|
+
onValueChange: (value: string) => void;
|
|
2555
|
+
extra?: ReactNode;
|
|
2556
|
+
className?: ClassNameProp;
|
|
2557
|
+
};
|
|
2558
|
+
/**
|
|
2559
|
+
* @see EditorialFilterPanel — a catalog's filter panel (gh#1438): one bordered surface of labelled
|
|
2560
|
+
* fields (`EditorialFilterField`, each holding one control such as a `Select`) that wrap, bottom
|
|
2561
|
+
* aligned, with a trailing `action` (a reset button). The controls inside read the panel's control
|
|
2562
|
+
* scale (`--editorial-filter-panel-control-*`).
|
|
2563
|
+
*/
|
|
2564
|
+
export type EditorialFilterPanelProp = {
|
|
2565
|
+
/**
|
|
2566
|
+
* `"panel"` (default): the bordered surface. `"bare"`: the same field row with no frame, ground,
|
|
2567
|
+
* padding or bottom margin, and its labels at `--editorial-filter-panel-bare-label-*` (a filter row
|
|
2568
|
+
* inside a module that is already framed, e.g. an item page's price comparison).
|
|
2569
|
+
*/
|
|
2570
|
+
variant?: "panel" | "bare";
|
|
2571
|
+
/** Accessible name of the group. */
|
|
2572
|
+
"aria-label": string;
|
|
2573
|
+
children: ChildrenProp;
|
|
2574
|
+
/** Trailing control after the fields — usually a reset `Button`. */
|
|
2575
|
+
action?: ReactNode;
|
|
2576
|
+
className?: ClassNameProp;
|
|
2577
|
+
};
|
|
2578
|
+
/**
|
|
2579
|
+
* @see EditorialFilterField — one labelled field of an `EditorialFilterPanel`: a visible label over
|
|
2580
|
+
* one control. `htmlFor` is the control's id (a `Select`'s `id`), which names it.
|
|
2581
|
+
*/
|
|
2582
|
+
export type EditorialFilterFieldProp = {
|
|
2583
|
+
label: LabelProp;
|
|
2584
|
+
htmlFor: string;
|
|
2585
|
+
children: ChildrenProp;
|
|
2586
|
+
className?: ClassNameProp;
|
|
2587
|
+
};
|
|
2588
|
+
/**
|
|
2589
|
+
* @see CatalogDetail — the head of a catalog item's page (gh#1438): a framed picture with the save
|
|
2590
|
+
* toggle over its corner and a caption under it, beside the item's kicker, its h1, a row of tags,
|
|
2591
|
+
* a summary price between two hairlines, actions and a two-column facts list.
|
|
2592
|
+
* Geometry: `--editorial-catalog-detail-*`.
|
|
2593
|
+
*/
|
|
2594
|
+
export type CatalogDetailProp = {
|
|
2595
|
+
/** `"sealed"` frames a product package instead of a card. */
|
|
2596
|
+
variant?: "card" | "sealed";
|
|
2597
|
+
/** The picture — an `<img>` (or a link around one). */
|
|
2598
|
+
media: ReactNode;
|
|
2599
|
+
/** The save toggle over the frame's corner (same shape as `CatalogCard`'s). */
|
|
2600
|
+
favorite?: CatalogCardProp["favorite"];
|
|
2601
|
+
/** A line under the frame (the picture's source, an official link). */
|
|
2602
|
+
mediaCaption?: ReactNode;
|
|
2603
|
+
/** The kicker above the title — usually an `Eyebrow` with the game. */
|
|
2604
|
+
overline?: ReactNode;
|
|
2605
|
+
/** The page's one h1. */
|
|
2606
|
+
title: TitleProp;
|
|
2607
|
+
/** Tags under the title — `CatalogDetailTag`s (number, rarity, printed language). */
|
|
2608
|
+
meta?: ReactNode;
|
|
2609
|
+
/** The summary price block: a label, the figure, a note. */
|
|
2610
|
+
summary?: {
|
|
2611
|
+
label?: ReactNode;
|
|
2612
|
+
price: ReactNode;
|
|
2613
|
+
note?: ReactNode;
|
|
2614
|
+
};
|
|
2615
|
+
/** The actions under the summary (add to collection, compare prices). */
|
|
2616
|
+
actions?: ReactNode;
|
|
2617
|
+
/** The facts list (game, expansion, language …), two columns. */
|
|
2618
|
+
facts?: {
|
|
2619
|
+
key: string;
|
|
2620
|
+
label: ReactNode;
|
|
2621
|
+
value: ReactNode;
|
|
2622
|
+
}[];
|
|
2623
|
+
className?: ClassNameProp;
|
|
2624
|
+
};
|
|
2625
|
+
/** @see CatalogDetailTag — one outlined tag in a `CatalogDetail` meta row. */
|
|
2626
|
+
export type CatalogDetailTagProp = {
|
|
2627
|
+
children: ChildrenProp;
|
|
2628
|
+
className?: ClassNameProp;
|
|
2629
|
+
};
|
|
2630
|
+
/**
|
|
2631
|
+
* @see CatalogDetailSection — one band of an item page under its head (gh#1438): a top hairline,
|
|
2632
|
+
* an h2 and a muted paragraph, then anything else (a list, a grid).
|
|
2633
|
+
*/
|
|
2634
|
+
export type CatalogDetailSectionProp = {
|
|
2635
|
+
/**
|
|
2636
|
+
* `"band"` (default): a top hairline and the band rhythm. `"module"`: a module of the page (the
|
|
2637
|
+
* price module) — no hairline, `--editorial-catalog-detail-module-padding-block`.
|
|
2638
|
+
*/
|
|
2639
|
+
variant?: "band" | "module";
|
|
2640
|
+
title?: TitleProp;
|
|
2641
|
+
description?: DescriptionProp;
|
|
2642
|
+
children?: ChildrenProp;
|
|
2643
|
+
/** Id on the section (an in-page link target, e.g. `#price-section`). */
|
|
2644
|
+
id?: IdProp;
|
|
2645
|
+
/** Id put on the h2. */
|
|
2646
|
+
titleId?: IdProp;
|
|
2647
|
+
className?: ClassNameProp;
|
|
2648
|
+
};
|
|
2649
|
+
/**
|
|
2650
|
+
* @see PriceSummary — a joined strip of headline figures (gh#1438): one bordered surface, cells
|
|
2651
|
+
* split by hairlines, each a label, a figure in the number face and a caption; an optional context
|
|
2652
|
+
* cell (the conditions compared) on the subtle ground, a little wider.
|
|
2653
|
+
* Geometry: `--editorial-price-summary-*`.
|
|
2654
|
+
*/
|
|
2655
|
+
export type PriceSummaryProp = {
|
|
2656
|
+
items: {
|
|
2657
|
+
key: string;
|
|
2658
|
+
label: ReactNode;
|
|
2659
|
+
value: ReactNode;
|
|
2660
|
+
caption?: ReactNode;
|
|
2661
|
+
}[];
|
|
2662
|
+
context?: {
|
|
2663
|
+
label: ReactNode;
|
|
2664
|
+
value: ReactNode;
|
|
2665
|
+
caption?: ReactNode;
|
|
2666
|
+
};
|
|
2667
|
+
className?: ClassNameProp;
|
|
2668
|
+
};
|
|
2669
|
+
/**
|
|
2670
|
+
* @see EditorialPrompt — a polite inline invitation (gh#1438): a round glyph, a heading, a short
|
|
2671
|
+
* paragraph and a note, with one action at the end ("sign in to see more"). Not a live region.
|
|
2672
|
+
* Geometry: `--editorial-prompt-*`.
|
|
2673
|
+
*/
|
|
2674
|
+
export type EditorialPromptProp = {
|
|
2675
|
+
/** The glyph in the round badge (an icon element). */
|
|
2676
|
+
icon?: ReactNode;
|
|
2677
|
+
title: TitleProp;
|
|
2678
|
+
description?: DescriptionProp;
|
|
2679
|
+
note?: ReactNode;
|
|
2680
|
+
/** The one action — usually a `Button asChild` around a link. */
|
|
2681
|
+
action?: ReactNode;
|
|
2682
|
+
/** Heading level. Default `3`. */
|
|
2683
|
+
level?: 2 | 3 | 4;
|
|
2684
|
+
className?: ClassNameProp;
|
|
2685
|
+
};
|