@godxjp/ui 33.15.0 → 33.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/agent/START-HERE.md +7 -7
- package/agent/components/AppShell.json +1 -1
- package/agent/components/AreaChart.json +6 -0
- package/agent/components/BarChart.json +6 -0
- package/agent/components/Card.json +1 -1
- package/agent/components/DashboardGrid.json +76 -0
- package/agent/components/DataTable.json +1 -1
- package/agent/components/Heading.json +6 -0
- package/agent/components/HeatmapChart.json +6 -0
- package/agent/components/LineChart.json +6 -0
- package/agent/components/Pagination.json +1 -1
- package/agent/components/PieChart.json +6 -0
- package/agent/components/Table.json +2 -1
- package/agent/components-index.json +9 -3
- package/agent/components.json +118 -5
- package/agent/index.json +8 -8
- package/agent/llms.txt +6 -6
- package/agent/rules.json +1 -1
- package/agent/tokens.json +74 -2
- package/agent/vocabulary.json +12 -0
- package/dist/components/charts/chart-cartesian.d.ts +3 -2
- package/dist/components/charts/chart-cartesian.js +146 -46
- package/dist/components/charts/chart-datum-selection.d.ts +15 -0
- package/dist/components/charts/chart-datum-selection.js +97 -0
- package/dist/components/charts/chart-frame.d.ts +2 -1
- package/dist/components/charts/chart-frame.js +2 -1
- package/dist/components/charts/heatmap-chart.d.ts +1 -1
- package/dist/components/charts/heatmap-chart.js +20 -0
- package/dist/components/charts/index.d.ts +1 -1
- package/dist/components/charts/pie-chart.d.ts +2 -1
- package/dist/components/charts/pie-chart.js +36 -1
- package/dist/components/charts/recharts-peer.d.ts +1 -1
- package/dist/components/charts/recharts-peer.js +6 -0
- package/dist/components/data-display/index.d.ts +1 -1
- package/dist/components/data-display/index.js +10 -1
- package/dist/components/data-display/table.d.ts +9 -0
- package/dist/components/data-display/table.js +3 -0
- package/dist/components/general/typography.d.ts +1 -0
- package/dist/components/general/typography.js +3 -0
- package/dist/contracts/measurement.json +1 -1
- package/dist/i18n/messages/en.json +10 -0
- package/dist/i18n/messages/ja.json +10 -0
- package/dist/i18n/messages/vi.json +10 -0
- package/dist/lab/dashboard-grid-layout.d.ts +4 -0
- package/dist/lab/dashboard-grid-layout.js +36 -0
- package/dist/lab/dashboard-grid.d.ts +5 -0
- package/dist/lab/dashboard-grid.js +258 -0
- package/dist/lab/index.d.ts +2 -0
- package/dist/lab/index.js +2 -0
- package/dist/lib/hooks.d.ts +8 -0
- package/dist/lib/hooks.js +20 -21
- package/dist/props/components/charts.prop.d.ts +11 -0
- package/dist/props/components/dashboard-grid.prop.d.ts +27 -0
- package/dist/props/components/dashboard-grid.prop.js +0 -0
- package/dist/props/components/general.prop.d.ts +8 -1
- package/dist/props/components/index.d.ts +1 -1
- package/dist/props/registry.d.ts +89 -6
- package/dist/props/registry.js +85 -0
- package/dist/props/vocabulary/index.d.ts +1 -1
- package/dist/props/vocabulary/interaction.prop.d.ts +6 -0
- package/dist/styles/badge-layout.css +1 -0
- package/dist/styles/base.css +8 -0
- package/dist/styles/card-layout.css +8 -0
- package/dist/styles/chart-layout.css +28 -0
- package/dist/styles/control.css +82 -0
- package/dist/styles/dialog-layout.css +7 -3
- package/dist/styles/layers.json +10 -1
- package/dist/styles/layout.css +2 -0
- package/dist/styles/logo-layout.css +18 -12
- package/dist/styles/navigation-layout.css +2 -0
- package/dist/styles/shell-layout.css +40 -1
- package/dist/styles/table-layout.css +30 -0
- package/dist/styles/text-layout.css +5 -0
- package/dist/styles.css +1 -1
- package/dist/theme/famgia.service.css +10 -8
- package/dist/themes/godx-tokens.css +20 -16
- package/dist/tokens/base.css +2 -0
- package/dist/tokens/components/dashboard-grid.css +14 -0
- package/dist/tokens/components/feedback.css +2 -0
- package/dist/tokens/components/logo.css +6 -4
- package/dist/tokens/components/table.css +5 -1
- package/dist/tokens/derived.css +28 -24
- package/dist/tokens/foundation.css +62 -56
- package/dist/tokens/semantic/layout.css +5 -3
- package/docs/COMPOSITION-VS-COMPONENT.md +15 -14
- package/docs/TOKENS.md +33 -0
- package/package.json +2 -2
package/agent/components.json
CHANGED
|
@@ -1329,7 +1329,7 @@
|
|
|
1329
1329
|
23
|
|
1330
1330
|
],
|
|
1331
1331
|
"storyPath": "layout/app-shell.tsx",
|
|
1332
|
-
"tagline": "Root application shell — composes sidebar, topbar rail, main content area, and optional footer. Keyboard focus in clipped chrome stays inset; the main scroll region shows an inset brand ring by default (--region-focus-ring-width).",
|
|
1332
|
+
"tagline": "Root application shell — composes sidebar, topbar rail, main content area, and optional footer. In print, navigation, topbar, breadcrumb and footer are hidden; main content flows across the paper width on the light --background. Put every consumer-authored dark theme override inside @media not print, with light declarations outside it, matching the package themes. Keyboard focus in clipped chrome stays inset; the main scroll region shows an inset brand ring by default (--region-focus-ring-width).",
|
|
1333
1333
|
"usage": [
|
|
1334
1334
|
"DO put a sidebar collapse toggle IN the rail, not floating in the bar (ADR C10): the shell does not render one, so pass it through `Sidebar action={(collapsed) => <Button variant=\"ghost\" size=\"icon\" aria-label={t(\"toggleSidebar\")} aria-expanded={!collapsed} …/>}` (or the `footer` render-prop), which keeps it attached to the rail in both states. A toggle in `Topbar start` under `topbarSpan=\"full\"` lands beside the brand, detached from the rail it controls. The shell has no edge-mounted toggle (a control straddling the rail border); `Sidebar action` keeps it inside the rail head, which is the supported placement. Below the navigation boundary the drawer has its own trigger; render no collapse toggle there.",
|
|
1335
1335
|
"useAppShellNavigationMode() returns drawer/docked at the same 56.25rem boundary as AppShell. The root also publishes data-navigation. Use this instead of a consumer media query.",
|
|
@@ -3042,6 +3042,12 @@
|
|
|
3042
3042
|
"description": "Single-line ellipsis.",
|
|
3043
3043
|
"name": "truncate",
|
|
3044
3044
|
"type": "boolean"
|
|
3045
|
+
},
|
|
3046
|
+
{
|
|
3047
|
+
"defaultValue": "\"display\"",
|
|
3048
|
+
"description": "Heading face. `editorial` sets this heading in --font-family-editorial — the opt-in serif a public/editorial page uses for its hero and section headings while every UI heading stays in the display face. Until a theme names --font-family-editorial it falls back to --font-family-display, so the prop is inert by default. Prefer it over moving --font-family-display, which re-faces EVERY heading (card titles, empty states, form sections).",
|
|
3049
|
+
"name": "family",
|
|
3050
|
+
"type": "\"display\" | \"editorial\""
|
|
3045
3051
|
}
|
|
3046
3052
|
],
|
|
3047
3053
|
"rules": [
|
|
@@ -3489,7 +3495,7 @@
|
|
|
3489
3495
|
},
|
|
3490
3496
|
{
|
|
3491
3497
|
"defaultValue": "'default'",
|
|
3492
|
-
"description": "Named collection contract — the SAME preset the Table primitive owns, forwarded to the table DataTable renders. 'default' emits NO attribute and matches no selector, so an existing DataTable is byte-identical. 'action-collection' is the canonical dense approval/action queue: at EVERY width the desktop INTRINSIC column widths give way to the token-owned column-PRIORITY measures (--table-action-collection-*: primary 18% · secondary 22% · meta 12% · actions a 3.5rem floor, the unmarked column takes the rest) under table-layout: fixed, and below collapseBelow they switch to the compact tier (24% · 22% · 20% · 2.75rem) — collapseBelow picks the TIER, it does not turn the measures on (gh#1408). Cells wrap, and the bordered surface drops its --table-surface-min-inline-size floor — so requester · target · reason · requested date · row actions all stay inside a 390px frame with no horizontal scroll. Mark each column with `priority` on its ColumnDef. Semantics are untouched (no display change, no role rewriting, no card swap), so header association, aria-sort and screen-reader table navigation are identical at 390 and 1440. Measured: table 1182 / 766 / 388px at 1440 / 1024 / 390, document scrollWidth === clientWidth at every width, LTR and RTL. 'stacked-record-collection' is the other direction, for a WIDE, HETEROGENEOUS record set that has no sensible narrow column measure: below collapseBelow the <thead> hides and every <tr> becomes a key-value record with a single separator between records (--table-stacked-collection
|
|
3498
|
+
"description": "Named collection contract — the SAME preset the Table primitive owns, forwarded to the table DataTable renders. 'default' emits NO attribute and matches no selector, so an existing DataTable is byte-identical. 'action-collection' is the canonical dense approval/action queue: at EVERY width the desktop INTRINSIC column widths give way to the token-owned column-PRIORITY measures (--table-action-collection-*: primary 18% · secondary 22% · meta 12% · actions a 3.5rem floor, the unmarked column takes the rest) under table-layout: fixed, and below collapseBelow they switch to the compact tier (24% · 22% · 20% · 2.75rem) — collapseBelow picks the TIER, it does not turn the measures on (gh#1408). Cells wrap, and the bordered surface drops its --table-surface-min-inline-size floor — so requester · target · reason · requested date · row actions all stay inside a 390px frame with no horizontal scroll. Mark each column with `priority` on its ColumnDef. Semantics are untouched (no display change, no role rewriting, no card swap), so header association, aria-sort and screen-reader table navigation are identical at 390 and 1440. Measured: table 1182 / 766 / 388px at 1440 / 1024 / 390, document scrollWidth === clientWidth at every width, LTR and RTL. 'stacked-record-collection' is the other direction, for a WIDE, HETEROGENEOUS record set that has no sensible narrow column measure: below collapseBelow the <thead> hides and every <tr> becomes a key-value record with zero gap and a single separator between records (--table-stacked-collection-*; --table-stacked-collection-card-gap defaults to 0 and remains themeable). Each cell then carries its column's header inline above the value, DERIVED from the same ColumnDef.header the <th> uses — so the card cannot drift from the table, and a column with a deliberately empty header names itself with ariaLabel (gh#864). In card mode the row inset defaults to the live --card-space-inset, sharing the CardTitle keyline at every density and in RTL (override --table-stacked-collection-card-padding-x independently). The CARD owns the inline inset: a folded cell has no inline padding of its own (--table-stacked-collection-cell-padding-x, default 0), and an EMPTY cell (content null) prints no label and drops out of the card (gh#1102). Every folded cell reads from the START: a column's `align`/`numeric` end or centre alignment belongs to the table, not the card, so a count sits under its label like every other field (gh#1310). The labels are aria-hidden: the real <th> is still in the DOM and remains the accessible-name source, so screen-reader table navigation is unchanged at every width. Reach for this instead of building a parallel Card tree beside the table; two trees for one dataset means two sets of labels to keep in sync.",
|
|
3493
3499
|
"name": "preset",
|
|
3494
3500
|
"type": "'default' | 'action-collection' | 'stacked-record-collection'"
|
|
3495
3501
|
},
|
|
@@ -3756,7 +3762,7 @@
|
|
|
3756
3762
|
"CardHeader",
|
|
3757
3763
|
"CardTitle"
|
|
3758
3764
|
],
|
|
3759
|
-
"tagline": "Surface container with optional accent stripe, variant fill (including the Ant Design borderless edge), hoverable lift, and density. ⚠️ The bare <Card> has NO inner padding — body content MUST be wrapped in <CardContent> (titles in <CardHeader>), or it sits FLUSH against the card edges. Never hand-roll padding with className=\"p-4\"; use <CardContent>. Compose with CardHeader/CardTitle/CardContent/CardFooter. For Ant Design's card-head TAB STRIP (tabs under the title, inside the card border) use the `tabList`/`activeTabKey`/`defaultActiveTabKey`/`onTabChange`/`extra`/`tabProps` props — the Card renders the strip and the children become the selected tab's body. For a non-tab TOOL strip inside the card (composer or editor tools) use <CardBar extra={…}> — a positionable bar that auto-draws its separator from its position (top→bottom border, bottom→top border, middle→both) and pins `extra` content to the inline-end edge; place it as first/last child of the Card. List FILTERS (search, filter selects, filter chips) are NOT a CardBar: CardBar's main slot scrolls sideways, and a filter strip never does — they go in a FilterBar ABOVE the card, which wraps (cardinal rule #51, pattern `list-filters`).",
|
|
3765
|
+
"tagline": "Surface container that requests break-inside: avoid in print, with optional accent stripe, variant fill (including the Ant Design borderless edge), hoverable lift, and density. ⚠️ The bare <Card> has NO inner padding — body content MUST be wrapped in <CardContent> (titles in <CardHeader>), or it sits FLUSH against the card edges. Never hand-roll padding with className=\"p-4\"; use <CardContent>. Compose with CardHeader/CardTitle/CardContent/CardFooter. For Ant Design's card-head TAB STRIP (tabs under the title, inside the card border) use the `tabList`/`activeTabKey`/`defaultActiveTabKey`/`onTabChange`/`extra`/`tabProps` props — the Card renders the strip and the children become the selected tab's body. For a non-tab TOOL strip inside the card (composer or editor tools) use <CardBar extra={…}> — a positionable bar that auto-draws its separator from its position (top→bottom border, bottom→top border, middle→both) and pins `extra` content to the inline-end edge; place it as first/last child of the Card. List FILTERS (search, filter selects, filter chips) are NOT a CardBar: CardBar's main slot scrolls sideways, and a filter strip never does — they go in a FilterBar ABOVE the card, which wraps (cardinal rule #51, pattern `list-filters`).",
|
|
3760
3766
|
"usage": [
|
|
3761
3767
|
"DO always wrap body content in <CardContent> — the bare <Card> div has zero inner padding; content renders flush against card edges without it. Never add className=\"p-4\" directly on <Card> as a substitute.",
|
|
3762
3768
|
"DO put titles/descriptions in <CardHeader>/<CardTitle>/<CardDescription>. Use <CardHeader banded> for a visually separated muted-background header band (mirrors <CardFooter separated>). Pair with <CardAction> inside a flex-row CardHeader for header-level action buttons.",
|
|
@@ -5696,7 +5702,7 @@
|
|
|
5696
5702
|
},
|
|
5697
5703
|
{
|
|
5698
5704
|
"defaultValue": "\"default\"",
|
|
5699
|
-
"description": "Named collection contract. \"default\" emits no attribute and keeps the plain table. \"action-collection\" is the canonical dense approval/action queue: the desktop INTRINSIC column widths (which make a five-column queue wider than its card and force a horizontal scroll at 390) are replaced by table-layout: fixed plus the token-owned column PRIORITY measures (--table-action-collection-*), and cells wrap. Mark each column with `priority` on its TableHead AND its TableCell. Semantics are untouched — no display change, no role rewriting, no card transformation — so header association, aria-sort and screen-reader table navigation are identical at 390 and 1440. \"stacked-record-collection\" is the other direction, for a WIDE, HETEROGENEOUS record set with no sensible narrow column measure: below collapseBelow the <thead> hides and every <tr> becomes a key-value record with a single separator between records (--table-stacked-collection
|
|
5705
|
+
"description": "Named collection contract. \"default\" emits no attribute and keeps the plain table. \"action-collection\" is the canonical dense approval/action queue: the desktop INTRINSIC column widths (which make a five-column queue wider than its card and force a horizontal scroll at 390) are replaced by table-layout: fixed plus the token-owned column PRIORITY measures (--table-action-collection-*), and cells wrap. Mark each column with `priority` on its TableHead AND its TableCell. Semantics are untouched — no display change, no role rewriting, no card transformation — so header association, aria-sort and screen-reader table navigation are identical at 390 and 1440. \"stacked-record-collection\" is the other direction, for a WIDE, HETEROGENEOUS record set with no sensible narrow column measure: below collapseBelow the <thead> hides and every <tr> becomes a key-value record with zero gap and a single separator between records (--table-stacked-collection-*; --table-stacked-collection-card-gap defaults to 0 and remains themeable). Give each TableCell a `label` — its column header — because the <th> association it normally reads from is the thing that just went away; DataTable derives that label from ColumnDef.header for you (gh#864). In card mode the row inset defaults to the live --card-space-inset, sharing the CardTitle keyline at every density and in RTL (override --table-stacked-collection-card-padding-x independently). The CARD owns the inline inset: a folded cell has no inline padding of its own (--table-stacked-collection-cell-padding-x, default 0), and an EMPTY cell (content null) prints no label and drops out of the card (gh#1102). Every folded cell reads from the START: a column's `align`/`numeric` end or centre alignment belongs to the table, not the card, so a count sits under its label like every other field (gh#1310). The label is aria-hidden and the real <th> stays in the DOM, so the accessible name and table navigation are unchanged.",
|
|
5700
5706
|
"name": "preset",
|
|
5701
5707
|
"type": "\"default\" | \"action-collection\" | \"stacked-record-collection\""
|
|
5702
5708
|
},
|
|
@@ -5722,6 +5728,7 @@
|
|
|
5722
5728
|
"storyPath": "data-display/table.tsx",
|
|
5723
5729
|
"subParts": [
|
|
5724
5730
|
"TableBody",
|
|
5731
|
+
"TableCaption",
|
|
5725
5732
|
"TableCell",
|
|
5726
5733
|
"TableHead",
|
|
5727
5734
|
"TableHeader",
|
|
@@ -8834,7 +8841,7 @@
|
|
|
8834
8841
|
"PaginationNext",
|
|
8835
8842
|
"PaginationPrevious"
|
|
8836
8843
|
],
|
|
8837
|
-
"tagline": "Offset/page-based pagination bar.
|
|
8844
|
+
"tagline": "Offset/page-based pagination bar. Its container owns the inset: no outer inline padding, including inside CardContent, CardFooter or PageContainer footer. Keyboard focus uses the shared inset ring in clipping surfaces; scrollports reveal partially clipped keyboard targets without changing their layout.",
|
|
8838
8845
|
"usage": [
|
|
8839
8846
|
"DO always control Pagination externally: store `value` (page) and `pageSize` in React state (or URL params), and update both in the `onValueChange(page, pageSize)` callback. Pagination is fully controlled — it has no internal state and will not move unless `value` changes.",
|
|
8840
8847
|
"DO let Pagination hide itself for zero items and single pages (`hideOnSinglePage`, default true) — it is navigation between multiple result pages. Render it inside a table footer only in the DATA state: never during loading, empty, error, or an unmet prerequisite. Pass `hideOnSinglePage={false}` only when you still want the bar on one page to keep `showTotal` visible.",
|
|
@@ -13557,6 +13564,11 @@
|
|
|
13557
13564
|
"importPath": "@godxjp/ui/charts",
|
|
13558
13565
|
"name": "LineChart",
|
|
13559
13566
|
"props": [
|
|
13567
|
+
{
|
|
13568
|
+
"description": "Opt-in pointer and Enter/Space selection. seriesKey is the series dataKey; index is the original data index. Arrows navigate; Home/End move to ends. Finite data only (pie: positive slices). No handler preserves the non-selectable chart. Dashboard owns filter state.",
|
|
13569
|
+
"name": "onDatumSelect",
|
|
13570
|
+
"type": "(datum: ChartDatum, context: { seriesKey: string; index: number }) => void"
|
|
13571
|
+
},
|
|
13560
13572
|
{
|
|
13561
13573
|
"description": "Row data: one category per row with a numeric value per series.",
|
|
13562
13574
|
"name": "data",
|
|
@@ -13656,6 +13668,7 @@
|
|
|
13656
13668
|
"rules": [],
|
|
13657
13669
|
"tagline": "Trends over an ordered category axis — one or more series, locale-formatted ticks/tooltips, screen-reader text alternative built in. Data-visualization graph / plot.",
|
|
13658
13670
|
"usage": [
|
|
13671
|
+
"DO use onDatumSelect for accessible drill-through; keep filter state in the screen. Marks have localized names, roving focus and the brand ring. Line/area display points while interactive. RTL mirrors horizontal arrow navigation.",
|
|
13659
13672
|
"DO import from the tree-shaken charts entry: `import { LineChart } from \"@godxjp/ui/charts\";`. Importing any other subpath never pulls in recharts.",
|
|
13660
13673
|
"DO import only the chart a screen uses — `import { LineChart } from \"@godxjp/ui/charts/line-chart\";` — when the `./charts` barrel should not link the whole chart family. Without the `recharts` peer the build then fails ONCE, naming the package and the fix.",
|
|
13661
13674
|
"DO install the `recharts` optional peer dependency in the consuming app — charts are the only part of @godxjp/ui that needs it, so apps without charts never pay for it.",
|
|
@@ -13677,6 +13690,11 @@
|
|
|
13677
13690
|
"importPath": "@godxjp/ui/charts",
|
|
13678
13691
|
"name": "BarChart",
|
|
13679
13692
|
"props": [
|
|
13693
|
+
{
|
|
13694
|
+
"description": "Opt-in pointer and Enter/Space selection. seriesKey is the series dataKey; index is the original data index. Arrows navigate; Home/End move to ends. Finite data only (pie: positive slices). No handler preserves the non-selectable chart. Dashboard owns filter state.",
|
|
13695
|
+
"name": "onDatumSelect",
|
|
13696
|
+
"type": "(datum: ChartDatum, context: { seriesKey: string; index: number }) => void"
|
|
13697
|
+
},
|
|
13680
13698
|
{
|
|
13681
13699
|
"description": "Row data: one category per row with a numeric value per series.",
|
|
13682
13700
|
"name": "data",
|
|
@@ -13776,6 +13794,7 @@
|
|
|
13776
13794
|
"rules": [],
|
|
13777
13795
|
"tagline": "Compare a value across categories — grouped or `stacked`, vertical or `horizontal`, with localized ticks/tooltips and a built-in text alternative. Data-visualization graph / plot / diagram.",
|
|
13778
13796
|
"usage": [
|
|
13797
|
+
"DO use onDatumSelect for accessible drill-through; keep filter state in the screen. Marks have localized names, roving focus and the brand ring. Line/area display points while interactive. RTL mirrors horizontal arrow navigation.",
|
|
13779
13798
|
"DO import from the charts entry: `import { BarChart } from \"@godxjp/ui/charts\";` (recharts optional peer required).",
|
|
13780
13799
|
"DO import only the chart a screen uses — `import { BarChart } from \"@godxjp/ui/charts/bar-chart\";` — when the `./charts` barrel should not link the whole chart family. Without the `recharts` peer the build then fails ONCE, naming the package and the fix.",
|
|
13781
13800
|
"DO use `horizontal` when category labels are long (they read better on the y-axis).",
|
|
@@ -13895,6 +13914,11 @@
|
|
|
13895
13914
|
"importPath": "@godxjp/ui/charts/heatmap-chart",
|
|
13896
13915
|
"name": "HeatmapChart",
|
|
13897
13916
|
"props": [
|
|
13917
|
+
{
|
|
13918
|
+
"description": "Opt-in pointer and Enter/Space selection. seriesKey is String(column key); index is the original data index. Arrows navigate; Home/End move to ends. Finite data only (pie: positive slices). No handler preserves the non-selectable chart. Dashboard owns filter state.",
|
|
13919
|
+
"name": "onDatumSelect",
|
|
13920
|
+
"type": "(datum: HeatmapDatum, context: { seriesKey: string; index: number }) => void"
|
|
13921
|
+
},
|
|
13898
13922
|
{
|
|
13899
13923
|
"description": "Row categories, top to bottom (the y axis — weekdays). `label` is already translated.",
|
|
13900
13924
|
"name": "rows",
|
|
@@ -13972,6 +13996,7 @@
|
|
|
13972
13996
|
"storyPath": "charts/heatmap-chart.tsx",
|
|
13973
13997
|
"tagline": "DEPENDENCY-FREE rows × columns heatmap — weekday × hour revenue / order counts, cell intensity from the sequential CVD-safe --chart-heat-1..5 ramp. Empty ≠ zero (dashed outline + 'no data' text), optional top-N ring, per-cell tooltip, APG grid keyboard, the table itself is the text alternative. Needs NO recharts. Matrix / punch card / activity heatmap / busy-hours chart.",
|
|
13974
13998
|
"usage": [
|
|
13999
|
+
"DO use onDatumSelect for accessible drill-through; keep filter state in the screen. Marks have localized names, roving focus and the brand ring. Line/area display points while interactive. RTL mirrors horizontal arrow navigation.",
|
|
13975
14000
|
"DO import from the isolated entry: `import { HeatmapChart } from \"@godxjp/ui/charts/heatmap-chart\";` — it never links the optional `recharts` peer.",
|
|
13976
14001
|
"DO derive axis labels with Intl in the active locale — weekdays via `Intl.DateTimeFormat(locale, { weekday: 'short' })`, hours via `Intl.NumberFormat(locale)` — and pass money through `numberFormat`, never a hand-built '¥' string.",
|
|
13977
14002
|
"DO leave a slot OUT of `data` (or pass `value: null`) when there is no measurement — a closed hour, a day before the store opened. Pass `0` only for a real zero. The two render differently (dashed outline vs filled) and read differently ('No data' vs '¥0').",
|
|
@@ -13992,6 +14017,11 @@
|
|
|
13992
14017
|
"importPath": "@godxjp/ui/charts",
|
|
13993
14018
|
"name": "AreaChart",
|
|
13994
14019
|
"props": [
|
|
14020
|
+
{
|
|
14021
|
+
"description": "Opt-in pointer and Enter/Space selection. seriesKey is the series dataKey; index is the original data index. Arrows navigate; Home/End move to ends. Finite data only (pie: positive slices). No handler preserves the non-selectable chart. Dashboard owns filter state.",
|
|
14022
|
+
"name": "onDatumSelect",
|
|
14023
|
+
"type": "(datum: ChartDatum, context: { seriesKey: string; index: number }) => void"
|
|
14024
|
+
},
|
|
13995
14025
|
{
|
|
13996
14026
|
"description": "Row data: one category per row with a numeric value per series.",
|
|
13997
14027
|
"name": "data",
|
|
@@ -14096,6 +14126,7 @@
|
|
|
14096
14126
|
"rules": [],
|
|
14097
14127
|
"tagline": "Magnitude over an ordered category axis — overlay or `stacked` areas, optional `curved` smoothing, localized formatting + text alternative. Data-visualization graph / plot.",
|
|
14098
14128
|
"usage": [
|
|
14129
|
+
"DO use onDatumSelect for accessible drill-through; keep filter state in the screen. Marks have localized names, roving focus and the brand ring. Line/area display points while interactive. RTL mirrors horizontal arrow navigation.",
|
|
14099
14130
|
"DO import from the charts entry: `import { AreaChart } from \"@godxjp/ui/charts\";` (recharts optional peer required).",
|
|
14100
14131
|
"DO import only the chart a screen uses — `import { AreaChart } from \"@godxjp/ui/charts/area-chart\";` — when the `./charts` barrel should not link the whole chart family. Without the `recharts` peer the build then fails ONCE, naming the package and the fix.",
|
|
14101
14132
|
"DO use `stacked` to show how parts accumulate into a total over time.",
|
|
@@ -14114,6 +14145,11 @@
|
|
|
14114
14145
|
"importPath": "@godxjp/ui/charts",
|
|
14115
14146
|
"name": "PieChart",
|
|
14116
14147
|
"props": [
|
|
14148
|
+
{
|
|
14149
|
+
"description": "Opt-in pointer and Enter/Space selection. seriesKey is dataKey; index is the original data index. Arrows navigate; Home/End move to ends. Finite data only (pie: positive slices). No handler preserves the non-selectable chart. Dashboard owns filter state.",
|
|
14150
|
+
"name": "onDatumSelect",
|
|
14151
|
+
"type": "(datum: ChartDatum, context: { seriesKey: string; index: number }) => void"
|
|
14152
|
+
},
|
|
14117
14153
|
{
|
|
14118
14154
|
"description": "Row data: one slice per row.",
|
|
14119
14155
|
"name": "data",
|
|
@@ -14195,6 +14231,7 @@
|
|
|
14195
14231
|
"rules": [],
|
|
14196
14232
|
"tagline": "Part-to-whole composition across a small set of slices — `donut` option, localized tooltips, and a screen-reader breakdown of every slice. Data-visualization graph / diagram.",
|
|
14197
14233
|
"usage": [
|
|
14234
|
+
"DO use onDatumSelect for accessible drill-through; keep filter state in the screen. Marks have localized names, roving focus and the brand ring. Line/area display points while interactive. RTL mirrors horizontal arrow navigation.",
|
|
14198
14235
|
"DO import from the charts entry: `import { PieChart } from \"@godxjp/ui/charts\";` (recharts optional peer required).",
|
|
14199
14236
|
"DO import only the chart a screen uses — `import { PieChart } from \"@godxjp/ui/charts/pie-chart\";` — when the `./charts` barrel should not link the whole chart family. Without the `recharts` peer the build then fails ONCE, naming the package and the fix.",
|
|
14200
14237
|
"DO keep slices few (≈2–6) — pies are unreadable past a handful; use BarChart for many categories.",
|
|
@@ -14386,6 +14423,82 @@
|
|
|
14386
14423
|
"The data loads on first open (one locale, ~100 KB gzip); nothing ships in your main bundle."
|
|
14387
14424
|
]
|
|
14388
14425
|
},
|
|
14426
|
+
{
|
|
14427
|
+
"docPath": "docs/lab/dashboard-grid.tsx",
|
|
14428
|
+
"example": "import { DashboardGrid } from \"@godxjp/ui/lab\";\n\n<DashboardGrid items={[{ id: \"revenue\", label: \"Revenue\", content: \"Revenue\" }]} defaultLayout={[{ id: \"revenue\", x: 0, y: 0, w: 2, h: 3 }]} columns={{ base: 1, lg: 4 }} editable />",
|
|
14429
|
+
"group": "layout",
|
|
14430
|
+
"importPath": "@godxjp/ui/lab",
|
|
14431
|
+
"name": "DashboardGrid",
|
|
14432
|
+
"props": [
|
|
14433
|
+
{
|
|
14434
|
+
"description": "Stable ids, visible header labels (also accessible region names) and widget body content. Wrap padded bodies in CardContent, tables in CardContent flush; DashboardGrid owns the Card and header. DOM reading order remains items order.",
|
|
14435
|
+
"name": "items",
|
|
14436
|
+
"required": true,
|
|
14437
|
+
"type": "{ id: string; label: string; content: ReactNode }[]"
|
|
14438
|
+
},
|
|
14439
|
+
{
|
|
14440
|
+
"description": "Controlled layout: {id,x,y,w,h}, integer cells, zero-based x from inline-start.",
|
|
14441
|
+
"name": "layout",
|
|
14442
|
+
"type": "DashboardGridItemProp[]"
|
|
14443
|
+
},
|
|
14444
|
+
{
|
|
14445
|
+
"description": "Uncontrolled initial layout.",
|
|
14446
|
+
"name": "defaultLayout",
|
|
14447
|
+
"type": "DashboardGridItemProp[]"
|
|
14448
|
+
},
|
|
14449
|
+
{
|
|
14450
|
+
"description": "One callback per changed drop; Escape restores without saving.",
|
|
14451
|
+
"name": "onLayoutChange",
|
|
14452
|
+
"type": "(layout: DashboardGridItemProp[]) => void"
|
|
14453
|
+
},
|
|
14454
|
+
{
|
|
14455
|
+
"description": "Default 12. Responsive viewport breakpoints; a single column stacks at natural content heights. Narrow projection never overwrites saved layout.",
|
|
14456
|
+
"name": "columns",
|
|
14457
|
+
"type": "number | { base: number; sm?: number; md?: number; lg?: number; xl?: number }"
|
|
14458
|
+
},
|
|
14459
|
+
{
|
|
14460
|
+
"description": "Positive pixel row track size. Omitted uses --dashboard-grid-row-height.",
|
|
14461
|
+
"name": "rowHeight",
|
|
14462
|
+
"type": "number"
|
|
14463
|
+
},
|
|
14464
|
+
{
|
|
14465
|
+
"description": "Default false. Inset header grip and bottom-end resize corner (on hover/focus); header space is reserved in view mode to prevent content shift. Enter/Space grab/drop, arrows move, Shift+arrows resize, Escape cancels.",
|
|
14466
|
+
"name": "editable",
|
|
14467
|
+
"type": "boolean"
|
|
14468
|
+
},
|
|
14469
|
+
{
|
|
14470
|
+
"description": "Root class.",
|
|
14471
|
+
"name": "className",
|
|
14472
|
+
"type": "string"
|
|
14473
|
+
},
|
|
14474
|
+
{
|
|
14475
|
+
"description": "Root id.",
|
|
14476
|
+
"name": "id",
|
|
14477
|
+
"type": "string"
|
|
14478
|
+
}
|
|
14479
|
+
],
|
|
14480
|
+
"related": [
|
|
14481
|
+
"ResponsiveGrid — static flow layout.",
|
|
14482
|
+
"SortableList — ordering without cell geometry."
|
|
14483
|
+
],
|
|
14484
|
+
"rules": [
|
|
14485
|
+
44,
|
|
14486
|
+
45
|
|
14487
|
+
],
|
|
14488
|
+
"storyPath": "lab/dashboard-grid.tsx",
|
|
14489
|
+
"tagline": "BI widget layout editor with deterministic push-down collisions and vertical compaction. Static CSS grid in view mode; temporary pointer/touch/keyboard previews commit once on drop.",
|
|
14490
|
+
"tier": "lab",
|
|
14491
|
+
"usage": [
|
|
14492
|
+
"C7 exception approved by the owner, BI precedents (Tableau/Power BI/Grafana/react-grid-layout). Approved 2026-10-23. Lab §2.1: same gates as core; promotion only once ≥2 repos import it.",
|
|
14493
|
+
"Use stable unique ids and order items by reading priority. Persist only onLayoutChange.",
|
|
14494
|
+
"Coordinates are normalized and compacted. View mode exposes content semantics, not an ARIA data grid.",
|
|
14495
|
+
"RTL mirrors x and horizontal keyboard/pointer deltas. Touch-action none is confined to handles.",
|
|
14496
|
+
"Theme --dashboard-grid-gap, row-height, handle-size, handle-inset, item-radius and preview-ring-color."
|
|
14497
|
+
],
|
|
14498
|
+
"useCases": [
|
|
14499
|
+
"BI dashboards with rearrangeable and resizable widgets."
|
|
14500
|
+
]
|
|
14501
|
+
},
|
|
14389
14502
|
{
|
|
14390
14503
|
"docPath": "docs/data-entry/sortable-list.tsx",
|
|
14391
14504
|
"example": "import { SortableList } from \"@godxjp/ui/lab\";\n\n<SortableList\n aria-label=\"Widgets\"\n items={[{ value: \"cal\", label: \"Calendar\" }, { value: \"mail\", label: \"Mail\" }]}\n value={order}\n onValueChange={setOrder}\n/>",
|
package/agent/index.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"counts": {
|
|
3
3
|
"anti-ai-tells": 35,
|
|
4
|
-
"components":
|
|
4
|
+
"components": 171,
|
|
5
5
|
"patterns": 28,
|
|
6
6
|
"rules": 44,
|
|
7
|
-
"tokens":
|
|
8
|
-
"vocabulary":
|
|
7
|
+
"tokens": 2263,
|
|
8
|
+
"vocabulary": 16
|
|
9
9
|
},
|
|
10
10
|
"design": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/DESIGN.md",
|
|
11
11
|
"files": [
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
"file": "components-index.json",
|
|
19
|
-
"note": "
|
|
19
|
+
"note": "54 KB — name + group + tagline for all 171. FETCH THIS FIRST, then fetch only the components you chose.",
|
|
20
20
|
"url": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
@@ -54,19 +54,19 @@
|
|
|
54
54
|
"note": "Pin to the tag that matches the @godxjp/ui version you installed. A catalog newer than your package describes props you do not have; older, and it hides props you do.",
|
|
55
55
|
"read": {
|
|
56
56
|
"live": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/index.json",
|
|
57
|
-
"pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v33.
|
|
57
|
+
"pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v33.17.0/agent/index.json"
|
|
58
58
|
},
|
|
59
59
|
"source": "mcp/src/data — the same data @godxjp/ui-mcp serves — plus the foundation and semantic token tiers, read from src/tokens/*.css",
|
|
60
60
|
"start": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/START-HERE.md",
|
|
61
61
|
"tokenTiers": {
|
|
62
62
|
"component": "per-part knobs, --{component}-{part}-{property}; usually leave these alone",
|
|
63
63
|
"counts": {
|
|
64
|
-
"component":
|
|
65
|
-
"foundation":
|
|
64
|
+
"component": 1930,
|
|
65
|
+
"foundation": 220,
|
|
66
66
|
"semantic": 113
|
|
67
67
|
},
|
|
68
68
|
"foundation": "the seeds a consumer is invited to set — --primary, --background, --radius",
|
|
69
69
|
"semantic": "named roles that follow the seeds — --ring, --text-link, --overlay-background"
|
|
70
70
|
},
|
|
71
|
-
"version": "33.
|
|
71
|
+
"version": "33.17.0"
|
|
72
72
|
}
|
package/agent/llms.txt
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# @godxjp/ui
|
|
2
2
|
|
|
3
|
-
> A Japanese-enterprise React design system:
|
|
4
|
-
> 44 cardinal rules. This file is the entry point for AI agents. Catalog version 33.
|
|
3
|
+
> A Japanese-enterprise React design system: 171 components, 2263 design tokens,
|
|
4
|
+
> 44 cardinal rules. This file is the entry point for AI agents. Catalog version 33.17.0.
|
|
5
5
|
|
|
6
6
|
If your client can run a process, do not read these files — run the MCP server instead
|
|
7
|
-
(`npx @godxjp/ui-mcp@33.
|
|
7
|
+
(`npx @godxjp/ui-mcp@33.17.0`). It is searchable and version-locked. These files exist for agents
|
|
8
8
|
that can only fetch URLs.
|
|
9
9
|
|
|
10
10
|
## Start
|
|
@@ -16,10 +16,10 @@ that can only fetch URLs.
|
|
|
16
16
|
## Catalog
|
|
17
17
|
|
|
18
18
|
- [patterns-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/patterns-index.json): 28 whole-task patterns (name, tagline, tags). Start here when the task is a TASK — "build a settings page" — then fetch `patterns/<name>.json` for complete code.
|
|
19
|
-
- [components-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json):
|
|
19
|
+
- [components-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json): 54 KB — all 171 components as name, group, tagline, plus `absorbed`: the names that do NOT exist and map to it (`Combobox` → `Select`).
|
|
20
20
|
- [components/<Name>.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components/Select.json): one file per component (1 KB–38 KB, median 6 KB). Read the index, then fetch only the ones you chose — this is the selective route, and the reason you do not need the blob.
|
|
21
21
|
- [components.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components.json): 1.3 MB — every entry in one file. Most URL fetchers truncate a response this size without saying so; prefer the per-component files.
|
|
22
|
-
- [tokens.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/tokens.json): every design token with its value, the reason it exists, and its `tier` —
|
|
22
|
+
- [tokens.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/tokens.json): every design token with its value, the reason it exists, and its `tier` — 220 `foundation` seeds (`--primary`, `--background`, `--radius`: set these when you are handed a brand), 113 `semantic` roles, 1930 `component` knobs.
|
|
23
23
|
- [vocabulary.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/vocabulary.json): the controlled prop vocabulary — which prop name means what, across every component.
|
|
24
24
|
- [rules.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/rules.json): 44 cardinal rules.
|
|
25
25
|
- [anti-ai-tells.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/anti-ai-tells.json): 35 shapes that make generated UI look generated, each with its fix.
|
|
@@ -27,7 +27,7 @@ that can only fetch URLs.
|
|
|
27
27
|
## Pinning
|
|
28
28
|
|
|
29
29
|
Every URL above tracks `main`. To pin to the release a project actually installed, swap `main` for
|
|
30
|
-
the tag: `.../godx-jp/godxjp-ui/v33.
|
|
30
|
+
the tag: `.../godx-jp/godxjp-ui/v33.17.0/agent/...`. A catalog that does not match the installed
|
|
31
31
|
package describes props that are absent, or hides props that are present, and says nothing either way.
|
|
32
32
|
|
|
33
33
|
Pinned catalogs only exist for releases whose tag actually contains `agent/`. If `…/v<version>/agent/index.json` returns 404, that release predates this catalog: read `…/main/…` instead and compare `index.json` → `version` against the package you have, so you at least know which way it drifted.
|
package/agent/rules.json
CHANGED
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"title": "No \"platform-only\" exports"
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
|
-
"body": "`.dark` / light theme, `data-density` (compact / default / comfortable) and `data-font-size` (sm / base / lg) are axes the component must follow. Read from tokens, never hardcode values.",
|
|
83
|
+
"body": "`.dark` / light theme, `data-density` (compact / default / comfortable) and `data-font-size` (sm / base / lg) are axes the component must follow. Read from tokens, never hardcode values. Enclose every consumer-authored dark override in @media not print and leave light declarations outside it, matching the shipped themes so paper uses the light palette.",
|
|
84
84
|
"number": 21,
|
|
85
85
|
"title": "Every component honours every theme axis"
|
|
86
86
|
},
|
package/agent/tokens.json
CHANGED
|
@@ -773,6 +773,18 @@
|
|
|
773
773
|
"tier": "foundation",
|
|
774
774
|
"value": "var(--font-family-sans)"
|
|
775
775
|
},
|
|
776
|
+
{
|
|
777
|
+
"description": "EDITORIAL face (opt-in) — a magazine-style serif for a hero, an article or a public page's section heading, beside a sans UI. Read by `Heading family=\"editorial\"` and by the PageContainer `headerScale=\"display\"` title. `initial`, default = --font-family-display at the call site, so nothing changes until a theme names a face.",
|
|
778
|
+
"name": "--font-family-editorial",
|
|
779
|
+
"tier": "foundation",
|
|
780
|
+
"value": "initial"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"description": "FIGURES face (opt-in) — the family tabular numbers are set in (`Text tabular`, `Badge tabular`, numeric TableHead/TableCell): a brand that sets prices in a figure face beside a CJK UI face. `initial` = inherit, so tabular figures keep the surrounding family until a theme names one.",
|
|
784
|
+
"name": "--font-family-tabular",
|
|
785
|
+
"tier": "foundation",
|
|
786
|
+
"value": "initial"
|
|
787
|
+
},
|
|
776
788
|
{
|
|
777
789
|
"description": "── Type scale — GOLDEN-RATIO modular scale (Ant/Tailwind model). ONE base + ONE ratio; every step is base × ratioⁿ, so the whole scale stays in golden proportion. `--font-size-ratio` is φ^¼ (the golden ratio's quarter-step ≈ 1.1227) — a TRUE golden ratio yet dense enough that headings stay small (h1≈20, h2≈18; pure φ=1.618 would be marketing-size). Internal apps get the 14px DEFAULT with ZERO config; a customer overrides `--font-size-base` (and optionally `--font-size-ratio`) and the entire scale rescales in golden proportion. 14px — THE base (= <body>). The single knob; override to retheme.",
|
|
778
790
|
"name": "--font-size-base",
|
|
@@ -5291,6 +5303,42 @@
|
|
|
5291
5303
|
"tier": "component",
|
|
5292
5304
|
"value": "var(--space-1)"
|
|
5293
5305
|
},
|
|
5306
|
+
{
|
|
5307
|
+
"description": "Gap between DashboardGrid tiles, both axes (#1397).",
|
|
5308
|
+
"name": "--dashboard-grid-gap",
|
|
5309
|
+
"tier": "component",
|
|
5310
|
+
"value": "var(--space-4)"
|
|
5311
|
+
},
|
|
5312
|
+
{
|
|
5313
|
+
"description": "Height of one grid row; a tile's `h` is a multiple of it.",
|
|
5314
|
+
"name": "--dashboard-grid-row-height",
|
|
5315
|
+
"tier": "component",
|
|
5316
|
+
"value": "var(--space-20)"
|
|
5317
|
+
},
|
|
5318
|
+
{
|
|
5319
|
+
"description": "Size of the drag and resize handles in edit mode (≥24px target).",
|
|
5320
|
+
"name": "--dashboard-grid-handle-size",
|
|
5321
|
+
"tier": "component",
|
|
5322
|
+
"value": "var(--control-height)"
|
|
5323
|
+
},
|
|
5324
|
+
{
|
|
5325
|
+
"description": "Inset of the resize handle from the tile's bottom-end corner.",
|
|
5326
|
+
"name": "--dashboard-grid-handle-inset",
|
|
5327
|
+
"tier": "component",
|
|
5328
|
+
"value": "var(--space-1)"
|
|
5329
|
+
},
|
|
5330
|
+
{
|
|
5331
|
+
"description": "Corner radius of a tile; defaults to the Card radius.",
|
|
5332
|
+
"name": "--dashboard-grid-item-radius",
|
|
5333
|
+
"tier": "component",
|
|
5334
|
+
"value": "var(--card-radius)"
|
|
5335
|
+
},
|
|
5336
|
+
{
|
|
5337
|
+
"description": "Colour of the drop-preview ring while moving or resizing (role-mirror knob; defaults to the focus ring colour).",
|
|
5338
|
+
"name": "--dashboard-grid-preview-ring-color",
|
|
5339
|
+
"tier": "component",
|
|
5340
|
+
"value": "initial"
|
|
5341
|
+
},
|
|
5294
5342
|
{
|
|
5295
5343
|
"description": "Accordion chevron and Carousel arrow. Both were bare 1rem literals in data-display-layout.css — glyphs with no tier-2 route, invisible to the icon ratchet because neither selector contains the word \"icon\".",
|
|
5296
5344
|
"name": "--accordion-chevron-size",
|
|
@@ -7151,6 +7199,12 @@
|
|
|
7151
7199
|
"tier": "component",
|
|
7152
7200
|
"value": "32rem"
|
|
7153
7201
|
},
|
|
7202
|
+
{
|
|
7203
|
+
"description": "Corner of the dialog panel. `initial`: square mobile, --radius-lg → --radius desktop at the call site; a brand whose dialogs are rounder than its cards (cards 8px, dialogs 16px) sets it once here.",
|
|
7204
|
+
"name": "--dialog-radius",
|
|
7205
|
+
"tier": "component",
|
|
7206
|
+
"value": "initial"
|
|
7207
|
+
},
|
|
7154
7208
|
{
|
|
7155
7209
|
"description": "Per-instance width, set by DialogContent `width` (gh#1174) — `initial`, so the default above resolves at the call site; the viewport cap (minus --dialog-viewport-inset) always wins.",
|
|
7156
7210
|
"name": "--dialog-width",
|
|
@@ -12588,7 +12642,7 @@
|
|
|
12588
12642
|
"value": "0px"
|
|
12589
12643
|
},
|
|
12590
12644
|
{
|
|
12591
|
-
"description": "Table · stacked-record-collection preset (gh#293 restore — SCR-215) — the canonical WIDE, heterogeneous record collection. Below the collapse step every `<tr>` becomes a
|
|
12645
|
+
"description": "Table · stacked-record-collection preset (gh#293 restore — SCR-215) — the canonical WIDE, heterogeneous record collection. Below the collapse step every `<tr>` becomes a continuous key-value record; these tokens own the record's geometry (unlike action-collection, there is no column-priority measure to retune — the whole row becomes one block).",
|
|
12592
12646
|
"name": "--table-stacked-collection-card-padding-y",
|
|
12593
12647
|
"tier": "component",
|
|
12594
12648
|
"value": "var(--space-stack-sm)"
|
|
@@ -12603,7 +12657,7 @@
|
|
|
12603
12657
|
"description": "Table component tokens: row height, cell padding.",
|
|
12604
12658
|
"name": "--table-stacked-collection-card-gap",
|
|
12605
12659
|
"tier": "component",
|
|
12606
|
-
"value": "
|
|
12660
|
+
"value": "0"
|
|
12607
12661
|
},
|
|
12608
12662
|
{
|
|
12609
12663
|
"description": "Table component tokens: row height, cell padding.",
|
|
@@ -12713,6 +12767,24 @@
|
|
|
12713
12767
|
"tier": "component",
|
|
12714
12768
|
"value": "0.06"
|
|
12715
12769
|
},
|
|
12770
|
+
{
|
|
12771
|
+
"description": "TableCaption — `initial`, defaults resolved at the call site (table-layout.css): ink --muted-foreground, size --font-size-sm, block inset --space-2. It sits above the rows (HTML's own side).",
|
|
12772
|
+
"name": "--table-caption-color",
|
|
12773
|
+
"tier": "component",
|
|
12774
|
+
"value": "initial"
|
|
12775
|
+
},
|
|
12776
|
+
{
|
|
12777
|
+
"description": "Table component tokens: row height, cell padding.",
|
|
12778
|
+
"name": "--table-caption-font-size",
|
|
12779
|
+
"tier": "component",
|
|
12780
|
+
"value": "initial"
|
|
12781
|
+
},
|
|
12782
|
+
{
|
|
12783
|
+
"description": "Table component tokens: row height, cell padding.",
|
|
12784
|
+
"name": "--table-caption-space-y",
|
|
12785
|
+
"tier": "component",
|
|
12786
|
+
"value": "initial"
|
|
12787
|
+
},
|
|
12716
12788
|
{
|
|
12717
12789
|
"description": "Distance from the text baseline to the underline. In `em` on purpose: the rule has to stay proportional across the seven type steps, and a px value that reads right at `lg` crowds the descenders at `2xs`. GoDX v2.3 guideline: `.gx a { text-underline-offset: .18em }`",
|
|
12718
12790
|
"name": "--text-link-underline-offset",
|
package/agent/vocabulary.json
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"concept": "Opt-in heading face, independent of UI headings.",
|
|
4
|
+
"name": "HeadingFamilyProp",
|
|
5
|
+
"notes": "display preserves the default markup; editorial reads --font-family-editorial with --font-family-display as its fallback.",
|
|
6
|
+
"usedBy": [
|
|
7
|
+
"Heading"
|
|
8
|
+
],
|
|
9
|
+
"values": [
|
|
10
|
+
"display",
|
|
11
|
+
"editorial"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
2
14
|
{
|
|
3
15
|
"concept": "Which breadcrumb item represents the current page.",
|
|
4
16
|
"name": "BreadcrumbCurrentItemProp",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type { ChartDatum, ChartSeriesProp } from "../../props/components/charts.prop.js";
|
|
2
|
+
import type { ChartDatum, ChartSeriesProp, ChartDatumSelect } from "../../props/components/charts.prop.js";
|
|
3
3
|
/**
|
|
4
4
|
* Shared cartesian renderer for Line / Bar / Area. Internal — the filename pascal
|
|
5
5
|
* (`ChartCartesian`) is intentionally NOT exported, so this is not a catalog entry.
|
|
@@ -21,6 +21,7 @@ type CartesianChartProps = {
|
|
|
21
21
|
valueTicks?: number[];
|
|
22
22
|
numberFormat?: Intl.NumberFormatOptions;
|
|
23
23
|
emptyMessage?: string;
|
|
24
|
+
onDatumSelect?: ChartDatumSelect;
|
|
24
25
|
onCategoryClick?: (datum: ChartDatum, index: number) => void;
|
|
25
26
|
className?: string;
|
|
26
27
|
id?: string;
|
|
@@ -33,5 +34,5 @@ type CartesianChartProps = {
|
|
|
33
34
|
/** bar */
|
|
34
35
|
horizontal?: boolean;
|
|
35
36
|
};
|
|
36
|
-
export declare function CartesianChart({ kind, data, series, categoryKey, label, showCaption, description, size, height, showLegend, showGrid, valueDomain, valueTicks, numberFormat, emptyMessage, onCategoryClick, className, id, curved, showDots, stacked, horizontal, }: CartesianChartProps): React.JSX.Element;
|
|
37
|
+
export declare function CartesianChart({ kind, data, series, categoryKey, label, showCaption, description, size, height, showLegend, showGrid, valueDomain, valueTicks, numberFormat, emptyMessage, onCategoryClick, onDatumSelect, className, id, curved, showDots, stacked, horizontal, }: CartesianChartProps): React.JSX.Element;
|
|
37
38
|
export {};
|