@godxjp/ui 31.3.0 → 31.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent/START-HERE.md +6 -6
- package/agent/components/CodeBlock.json +7 -1
- package/agent/components/OrgChart.json +59 -0
- package/agent/components/Tabs.json +5 -0
- package/agent/components-index.json +5 -0
- package/agent/components.json +71 -1
- package/agent/index.json +7 -7
- package/agent/llms.txt +6 -6
- package/agent/tokens.json +141 -3
- package/dist/components/data-display/code-block.js +90 -4
- package/dist/components/data-display/index.d.ts +2 -0
- package/dist/components/data-display/index.js +2 -0
- package/dist/components/data-display/org-chart.d.ts +5 -0
- package/dist/components/data-display/org-chart.js +169 -0
- package/dist/components/data-entry/upload.js +12 -1
- package/dist/components/general/typography.d.ts +32 -0
- package/dist/components/general/typography.js +11 -2
- package/dist/components/navigation/tabs.d.ts +2 -2
- package/dist/components/navigation/tabs.js +57 -10
- 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/props/components/data-display.prop.d.ts +51 -1
- package/dist/props/components/navigation.prop.d.ts +19 -1
- package/dist/props/registry.d.ts +40 -1
- package/dist/props/registry.js +50 -0
- package/dist/styles/alert-layout.css +12 -12
- package/dist/styles/control.css +18 -2
- package/dist/styles/data-display-layout.css +173 -0
- package/dist/styles/data-entry-layout.css +4 -0
- package/dist/styles/form-layout.css +47 -5
- package/dist/styles/layers.json +14 -1
- package/dist/styles/layout.css +2 -1
- package/dist/tokens/base.css +1 -0
- package/dist/tokens/components/org-chart.css +27 -0
- package/dist/tokens/components/segmented.css +4 -0
- package/dist/tokens/semantic/layout.css +2 -0
- package/docs/FRAME-COVERAGE-REPORT.md +3 -2
- package/docs/data-display/code-block.tsx +27 -0
- package/docs/data-display/org-chart.tsx +165 -0
- package/docs/data-entry/segmented.tsx +2 -0
- package/docs/navigation/tabs.tsx +45 -0
- package/docs/query/data-state.tsx +30 -8
- package/docs/showcase/table-view-tabs.tsx +15 -13
- package/docs/themes/flat.css +4 -0
- package/docs/themes/glassmorphism.css +2 -0
- package/docs/themes/neubrutalism.css +6 -0
- package/package.json +2 -2
package/agent/START-HERE.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
You are about to write code against a design system you did not author. This file is the whole
|
|
4
4
|
contract. Read it before you write JSX.
|
|
5
5
|
|
|
6
|
-
**This catalog describes `@godxjp/ui` 31.
|
|
6
|
+
**This catalog describes `@godxjp/ui` 31.5.0.** If the project you are editing has a different
|
|
7
7
|
version in its `package.json`, read the pinned catalog for THAT version instead
|
|
8
8
|
(`…/v<their-version>/agent/…`). A catalog newer than the installed package describes props that do
|
|
9
9
|
not exist yet; older, and it hides props that do. Neither failure announces itself.
|
|
@@ -47,7 +47,7 @@ Then ask it: `search_components`, `get_component`, `get_tokens`, `get_rule`, `li
|
|
|
47
47
|
task is a task** — "build a settings page", "confirm a destructive delete", "a list page with
|
|
48
48
|
filters" — start HERE, not at the components. Then fetch `patterns/<name>.json` for complete,
|
|
49
49
|
copy-paste-ready code. A component index answers "does X exist"; it cannot answer "build Y".
|
|
50
|
-
1. `components-index.json` — 47 KB, all
|
|
50
|
+
1. `components-index.json` — 47 KB, all 177 components as name + group +
|
|
51
51
|
tagline. Read this when you already know the SHAPE you need. Each entry may carry `absorbed`:
|
|
52
52
|
names that **do not exist** and map to it — `Combobox`, `Autocomplete`, `CountrySelect` and
|
|
53
53
|
`SearchSelect` are all `Select`. If you are about to hand-roll something, search this field
|
|
@@ -56,10 +56,10 @@ Then ask it: `search_components`, `get_component`, `get_tokens`, `get_rule`, `li
|
|
|
56
56
|
its `importPath`, and its examples. Fetch only the handful you picked in step 1.
|
|
57
57
|
3. `rules.json` — 50 cardinal rules. The ones about raw HTML and hardcoded colour are not
|
|
58
58
|
style advice.
|
|
59
|
-
4. `tokens.json` —
|
|
59
|
+
4. `tokens.json` — 2098 design tokens, each tagged with its `tier`. **If you were handed a
|
|
60
60
|
brand, read the 211 `foundation` entries first** — `--primary`, `--background`,
|
|
61
61
|
`--radius`, `--font-size-base` are the handful everything else derives from. The
|
|
62
|
-
|
|
62
|
+
1783 `component` entries are per-part knobs; reach for one only when a role is
|
|
63
63
|
right everywhere except one component.
|
|
64
64
|
5. `anti-ai-tells.json` — 26 shapes that make generated UI look generated, each with the
|
|
65
65
|
fix. Read before you reach for a gradient hero or a wall of coloured chips.
|
|
@@ -144,8 +144,8 @@ has stopped following the brand.
|
|
|
144
144
|
| `tier` | count | what it is | set it? |
|
|
145
145
|
|---|---|---|---|
|
|
146
146
|
| `foundation` | 211 | the seeds — `--primary`, `--background`, `--foreground`, `--radius`, `--font-size-base`, `--shadow-color`. Everything below is derived from these | **yes — this is the main road.** Handed a brand colour, this is where it goes: `:root { --primary: <H> <S>% <L>%; }` (HSL components, no `hsl()` wrapper) |
|
|
147
|
-
| `semantic` |
|
|
148
|
-
| `component` |
|
|
147
|
+
| `semantic` | 104 | named roles that follow the seeds — `--ring`, `--text-link`, `--primary-hover`, `--overlay-background` | only when the seed is right and ONE role must differ. That role then stops following a later brand change |
|
|
148
|
+
| `component` | 1783 | per-part knobs, `--{component}-{part}-{property}` | rarely. Most are declared `initial` with the real default at the call site — deliberate, so a scoped override re-resolves instead of freezing at `:root` |
|
|
149
149
|
|
|
150
150
|
A token whose `value` is `initial` is not empty and not broken: `initial` is the guaranteed-invalid
|
|
151
151
|
value, so the real default is computed where the element paints it. Set it and yours wins.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"example": "import { CodeBlock } from \"@godxjp/ui/data-display\";\n\n<CodeBlock maxHeight=\"sm\" language=\"json\" aria-label=\"Response body\">{body}</CodeBlock>\n<CodeBlock size=\"xs\" maxHeight=\"md\" aria-label=\"Console\">{consoleText}</CodeBlock>",
|
|
2
|
+
"example": "import { CodeBlock } from \"@godxjp/ui/data-display\";\n\n<CodeBlock maxHeight=\"sm\" language=\"json\" aria-label=\"Response body\">{body}</CodeBlock>\n<CodeBlock size=\"xs\" maxHeight=\"md\" aria-label=\"Console\">{consoleText}</CodeBlock>\n<CodeBlock copyable language=\"bash\">pnpm add @godxjp/ui</CodeBlock>",
|
|
3
3
|
"group": "data-display",
|
|
4
4
|
"importPath": "@godxjp/ui/data-display",
|
|
5
5
|
"name": "CodeBlock",
|
|
@@ -31,6 +31,11 @@
|
|
|
31
31
|
"name": "language",
|
|
32
32
|
"type": "string"
|
|
33
33
|
},
|
|
34
|
+
{
|
|
35
|
+
"description": "antd Typography's `copyable`, same name and semantics (gh#1032): a copy button in the block's inline-end corner. `true` copies the block's text content (highlighter spans included); `text` overrides it. The block reserves the button's column, the confirmed state is announced politely, and `onCopy` fires only after the clipboard write succeeds.",
|
|
36
|
+
"name": "copyable",
|
|
37
|
+
"type": "boolean | { text?: string | (() => string | Promise<string>); onCopy?: (event) => void; tooltips?: ReactNode | [ReactNode, ReactNode] | false; icon?: ReactNode | [ReactNode, ReactNode]; format?: \"text/plain\" | \"text/html\"; tabIndex?: number }"
|
|
38
|
+
},
|
|
34
39
|
{
|
|
35
40
|
"description": "Extra classes on the `pre`.",
|
|
36
41
|
"name": "className",
|
|
@@ -52,6 +57,7 @@
|
|
|
52
57
|
"DO cap the height of anything that can be large (a 64 KB response body, a console dump) with `maxHeight`; the page keeps its rhythm and the block scrolls.",
|
|
53
58
|
"DON'T hand-roll `<pre className=\"max-h-64 overflow-auto rounded bg-muted p-2 whitespace-pre-wrap\">`: every one of those values is a copy of a token this component reads.",
|
|
54
59
|
"DON'T reach for `Text as=\"code\"` for a block: that is inline monospace with no wrapping axis. Use `Text as=\"code\"` for an identifier inside a sentence, CodeBlock for a block.",
|
|
60
|
+
"DO use `copyable` for a command or snippet the reader will paste (gh#1032). DON'T hand-roll a copy Button next to or over a CodeBlock: `copyable` owns the clipboard call, the confirmed state, the placement and the polite announcement.",
|
|
55
61
|
"DON'T use CodeBlock for a single value in a Descriptions row: `Descriptions.Item mono` owns that (it breaks the value, not the row).",
|
|
56
62
|
"SYNTAX COLOUR (gh#784): CodeBlock does not highlight, but it DOES own the palette. Tag each span from your highlighter with `data-code-token` — the twelve names are Shiki createCssVariablesTheme's verbatim (comment, keyword, string, string-expression, function, constant, parameter, punctuation, link, inserted, deleted, changed, plus the block foreground) — and the package colours them. DON'T put `style={{ color }}` or a palette `className` on the spans: both are visual overrides, and the colour is not the consumer's to choose. Retheme with the `--code-block-token-*-color` knobs, which are role-mirrors, so light and dark follow the theme with no second palette."
|
|
57
63
|
],
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"docPath": "data-display/org-chart.tsx",
|
|
3
|
+
"example": "import { Avatar, AvatarFallback, Badge, OrgChart } from \"@godxjp/ui/data-display\";\n\n<OrgChart\n label=\"Company org chart\"\n data={[\n {\n key: \"ceo\", name: \"Haruka Tanaka\", title: \"CEO\",\n avatar: <Avatar size=\"sm\"><AvatarFallback>HT</AvatarFallback></Avatar>,\n children: [\n { key: \"cto\", name: \"Kenji Watanabe\", title: \"CTO\" },\n { key: \"bot\", name: \"Review Agent\", title: \"Code review\", variant: \"agent\",\n extra: <Badge tone=\"success\">Running</Badge> },\n ],\n },\n ]}\n/>",
|
|
4
|
+
"group": "data-display",
|
|
5
|
+
"importPath": "@godxjp/ui/data-display",
|
|
6
|
+
"name": "OrgChart",
|
|
7
|
+
"props": [
|
|
8
|
+
{
|
|
9
|
+
"description": "The hierarchy: { key, name, title?, avatar?, extra?, variant?: \"person\" | \"agent\", children? }. `key` is unique across the chart. `avatar` is usually an <Avatar>; `extra` a Badge or status.",
|
|
10
|
+
"name": "data",
|
|
11
|
+
"type": "OrgChartNodeProp[]"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "Replace a box's content. The box, its border, the connectors and the keyboard stay the library's; the narrow Tree form uses it too.",
|
|
15
|
+
"name": "renderNode",
|
|
16
|
+
"type": "(node: OrgChartNodeProp) => ReactNode"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"description": "Accessible name of the role=\"tree\" (a plain string). Localized default \"Organization chart\".",
|
|
20
|
+
"name": "label",
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"description": "DOM id of the root.",
|
|
25
|
+
"name": "id",
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"description": "Root class.",
|
|
30
|
+
"name": "className",
|
|
31
|
+
"type": "string"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"related": [
|
|
35
|
+
"Tree — the indented, collapsible outline. OrgChart renders it as its narrow form.",
|
|
36
|
+
"Avatar — the mark in each box.",
|
|
37
|
+
"Badge — a status in a box's `extra` slot."
|
|
38
|
+
],
|
|
39
|
+
"rules": [
|
|
40
|
+
2,
|
|
41
|
+
6,
|
|
42
|
+
23,
|
|
43
|
+
44,
|
|
44
|
+
45
|
|
45
|
+
],
|
|
46
|
+
"storyPath": "data-display/OrgChart.stories.tsx",
|
|
47
|
+
"tagline": "An organization chart: boxes (avatar, name, title, extra) joined by CSS connector lines, top-down; `agent` nodes are dashed. Scrolls horizontally in its own named region when wider than its container, and turns into an indented Tree when the CONTAINER is under 40rem. APG tree view (tree/treeitem/group, roving tabindex, arrow keys).",
|
|
48
|
+
"usage": [
|
|
49
|
+
"DO mark AI agents with `variant: \"agent\"` — the box is dashed AND its accessible name ends in a localized \"AI agent\", so the kind is never carried by the stroke alone.",
|
|
50
|
+
"DO give it the width it has; the breakpoint is a container query, so a chart in a narrow side panel switches to the Tree form on a wide screen too.",
|
|
51
|
+
"DO retune boxes and lines through the --org-chart-* tokens (node size, gaps, line width/colour, agent border style).",
|
|
52
|
+
"DON'T wrap it in your own overflow-x scroller — it owns its scroll region, which only becomes a named tab stop when the chart actually overflows.",
|
|
53
|
+
"DON'T use it for an outline users expand and collapse — that is Tree. OrgChart always shows every node."
|
|
54
|
+
],
|
|
55
|
+
"useCases": [
|
|
56
|
+
"A company or team org chart with people and AI agents side by side.",
|
|
57
|
+
"Reporting lines on an admin screen, falling back to an indented list in a narrow panel or on a phone."
|
|
58
|
+
]
|
|
59
|
+
}
|
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
"name": "onValueChange",
|
|
25
25
|
"type": "(value: string) => void"
|
|
26
26
|
},
|
|
27
|
+
{
|
|
28
|
+
"description": "Strip-only mode (gh#1021): the tabs drive content OUTSIDE the strip. No tabpanel is rendered, and the selected tab's `aria-controls` points at this id, which is the consumer's own region (give it `role=\"region\"` and a name). Content there is never remounted on a tab switch, so a typed draft survives. With the compound form it applies to triggers without a declared `TabsContent` (a declared panel wins). A pure filter with NO region to point at is not a tab strip; use `Segmented`. The root's `aria-label`/`aria-labelledby` name the `role=\"tablist\"` (gh#1020), and a compound `TabsTrigger` takes `count`/`overflowCount`/`showZero`/`countLabel`, drawn exactly like `items[].count`.",
|
|
29
|
+
"name": "controls",
|
|
30
|
+
"type": "IdProp"
|
|
31
|
+
},
|
|
27
32
|
{
|
|
28
33
|
"defaultValue": "\"default\"",
|
|
29
34
|
"description": "Trigger-strip appearance — this is Ant Design's `type` under the library's own `variant` vocabulary. `default` is the pill strip (antd has no equivalent). `line` is UNDERLINE-ONLY: the selected trigger gets no ring or card border at all — only the token-owned 2px primary bar (--tabs-indicator-{background,size,offset}) — so the `:focus-visible` keyboard ring stays visible and clearly distinct from selection. `card` gives each tab a boxed face on a rail (--tabs-card-*). `editable-card` is `card` plus the add button and per-tab remove shortcut, and needs `onEdit` to do anything. With `items`, the variant is forwarded to the list; when composing manually, pass the same value to `<TabsList variant=\"line\">`.",
|
|
@@ -886,6 +886,11 @@
|
|
|
886
886
|
"name": "ThoughtChain",
|
|
887
887
|
"tagline": "The assistant's reasoning, step by step (Ant Design X ThoughtChain): an ORDERED list of steps, each with an ordinal or a glyph, a status, and a body it can collapse — where Ant X's own step is a <div onClick> with no role and no aria-expanded."
|
|
888
888
|
},
|
|
889
|
+
{
|
|
890
|
+
"group": "data-display",
|
|
891
|
+
"name": "OrgChart",
|
|
892
|
+
"tagline": "An organization chart: boxes (avatar, name, title, extra) joined by CSS connector lines, top-down; `agent` nodes are dashed. Scrolls horizontally in its own named region when wider than its container, and turns into an indented Tree when the CONTAINER is under 40rem. APG tree view (tree/treeitem/group, roving tabindex, arrow keys)."
|
|
893
|
+
},
|
|
889
894
|
{
|
|
890
895
|
"group": "data-entry",
|
|
891
896
|
"name": "Attachments",
|
package/agent/components.json
CHANGED
|
@@ -4808,7 +4808,7 @@
|
|
|
4808
4808
|
]
|
|
4809
4809
|
},
|
|
4810
4810
|
{
|
|
4811
|
-
"example": "import { CodeBlock } from \"@godxjp/ui/data-display\";\n\n<CodeBlock maxHeight=\"sm\" language=\"json\" aria-label=\"Response body\">{body}</CodeBlock>\n<CodeBlock size=\"xs\" maxHeight=\"md\" aria-label=\"Console\">{consoleText}</CodeBlock>",
|
|
4811
|
+
"example": "import { CodeBlock } from \"@godxjp/ui/data-display\";\n\n<CodeBlock maxHeight=\"sm\" language=\"json\" aria-label=\"Response body\">{body}</CodeBlock>\n<CodeBlock size=\"xs\" maxHeight=\"md\" aria-label=\"Console\">{consoleText}</CodeBlock>\n<CodeBlock copyable language=\"bash\">pnpm add @godxjp/ui</CodeBlock>",
|
|
4812
4812
|
"group": "data-display",
|
|
4813
4813
|
"importPath": "@godxjp/ui/data-display",
|
|
4814
4814
|
"name": "CodeBlock",
|
|
@@ -4840,6 +4840,11 @@
|
|
|
4840
4840
|
"name": "language",
|
|
4841
4841
|
"type": "string"
|
|
4842
4842
|
},
|
|
4843
|
+
{
|
|
4844
|
+
"description": "antd Typography's `copyable`, same name and semantics (gh#1032): a copy button in the block's inline-end corner. `true` copies the block's text content (highlighter spans included); `text` overrides it. The block reserves the button's column, the confirmed state is announced politely, and `onCopy` fires only after the clipboard write succeeds.",
|
|
4845
|
+
"name": "copyable",
|
|
4846
|
+
"type": "boolean | { text?: string | (() => string | Promise<string>); onCopy?: (event) => void; tooltips?: ReactNode | [ReactNode, ReactNode] | false; icon?: ReactNode | [ReactNode, ReactNode]; format?: \"text/plain\" | \"text/html\"; tabIndex?: number }"
|
|
4847
|
+
},
|
|
4843
4848
|
{
|
|
4844
4849
|
"description": "Extra classes on the `pre`.",
|
|
4845
4850
|
"name": "className",
|
|
@@ -4861,6 +4866,7 @@
|
|
|
4861
4866
|
"DO cap the height of anything that can be large (a 64 KB response body, a console dump) with `maxHeight`; the page keeps its rhythm and the block scrolls.",
|
|
4862
4867
|
"DON'T hand-roll `<pre className=\"max-h-64 overflow-auto rounded bg-muted p-2 whitespace-pre-wrap\">`: every one of those values is a copy of a token this component reads.",
|
|
4863
4868
|
"DON'T reach for `Text as=\"code\"` for a block: that is inline monospace with no wrapping axis. Use `Text as=\"code\"` for an identifier inside a sentence, CodeBlock for a block.",
|
|
4869
|
+
"DO use `copyable` for a command or snippet the reader will paste (gh#1032). DON'T hand-roll a copy Button next to or over a CodeBlock: `copyable` owns the clipboard call, the confirmed state, the placement and the polite announcement.",
|
|
4864
4870
|
"DON'T use CodeBlock for a single value in a Descriptions row: `Descriptions.Item mono` owns that (it breaks the value, not the row).",
|
|
4865
4871
|
"SYNTAX COLOUR (gh#784): CodeBlock does not highlight, but it DOES own the palette. Tag each span from your highlighter with `data-code-token` — the twelve names are Shiki createCssVariablesTheme's verbatim (comment, keyword, string, string-expression, function, constant, parameter, punctuation, link, inserted, deleted, changed, plus the block foreground) — and the package colours them. DON'T put `style={{ color }}` or a palette `className` on the spans: both are visual overrides, and the colour is not the consumer's to choose. Retheme with the `--code-block-token-*-color` knobs, which are role-mirrors, so light and dark follow the theme with no second palette."
|
|
4866
4872
|
],
|
|
@@ -7880,6 +7886,11 @@
|
|
|
7880
7886
|
"name": "onValueChange",
|
|
7881
7887
|
"type": "(value: string) => void"
|
|
7882
7888
|
},
|
|
7889
|
+
{
|
|
7890
|
+
"description": "Strip-only mode (gh#1021): the tabs drive content OUTSIDE the strip. No tabpanel is rendered, and the selected tab's `aria-controls` points at this id, which is the consumer's own region (give it `role=\"region\"` and a name). Content there is never remounted on a tab switch, so a typed draft survives. With the compound form it applies to triggers without a declared `TabsContent` (a declared panel wins). A pure filter with NO region to point at is not a tab strip; use `Segmented`. The root's `aria-label`/`aria-labelledby` name the `role=\"tablist\"` (gh#1020), and a compound `TabsTrigger` takes `count`/`overflowCount`/`showZero`/`countLabel`, drawn exactly like `items[].count`.",
|
|
7891
|
+
"name": "controls",
|
|
7892
|
+
"type": "IdProp"
|
|
7893
|
+
},
|
|
7883
7894
|
{
|
|
7884
7895
|
"defaultValue": "\"default\"",
|
|
7885
7896
|
"description": "Trigger-strip appearance — this is Ant Design's `type` under the library's own `variant` vocabulary. `default` is the pill strip (antd has no equivalent). `line` is UNDERLINE-ONLY: the selected trigger gets no ring or card border at all — only the token-owned 2px primary bar (--tabs-indicator-{background,size,offset}) — so the `:focus-visible` keyboard ring stays visible and clearly distinct from selection. `card` gives each tab a boxed face on a rail (--tabs-card-*). `editable-card` is `card` plus the add button and per-tab remove shortcut, and needs `onEdit` to do anything. With `items`, the variant is forwarded to the list; when composing manually, pass the same value to `<TabsList variant=\"line\">`.",
|
|
@@ -15603,6 +15614,65 @@
|
|
|
15603
15614
|
"ThoughtChainItem alone: the chip an assistant drops inline to name the tool it just reached for."
|
|
15604
15615
|
]
|
|
15605
15616
|
},
|
|
15617
|
+
{
|
|
15618
|
+
"docPath": "data-display/org-chart.tsx",
|
|
15619
|
+
"example": "import { Avatar, AvatarFallback, Badge, OrgChart } from \"@godxjp/ui/data-display\";\n\n<OrgChart\n label=\"Company org chart\"\n data={[\n {\n key: \"ceo\", name: \"Haruka Tanaka\", title: \"CEO\",\n avatar: <Avatar size=\"sm\"><AvatarFallback>HT</AvatarFallback></Avatar>,\n children: [\n { key: \"cto\", name: \"Kenji Watanabe\", title: \"CTO\" },\n { key: \"bot\", name: \"Review Agent\", title: \"Code review\", variant: \"agent\",\n extra: <Badge tone=\"success\">Running</Badge> },\n ],\n },\n ]}\n/>",
|
|
15620
|
+
"group": "data-display",
|
|
15621
|
+
"importPath": "@godxjp/ui/data-display",
|
|
15622
|
+
"name": "OrgChart",
|
|
15623
|
+
"props": [
|
|
15624
|
+
{
|
|
15625
|
+
"description": "The hierarchy: { key, name, title?, avatar?, extra?, variant?: \"person\" | \"agent\", children? }. `key` is unique across the chart. `avatar` is usually an <Avatar>; `extra` a Badge or status.",
|
|
15626
|
+
"name": "data",
|
|
15627
|
+
"type": "OrgChartNodeProp[]"
|
|
15628
|
+
},
|
|
15629
|
+
{
|
|
15630
|
+
"description": "Replace a box's content. The box, its border, the connectors and the keyboard stay the library's; the narrow Tree form uses it too.",
|
|
15631
|
+
"name": "renderNode",
|
|
15632
|
+
"type": "(node: OrgChartNodeProp) => ReactNode"
|
|
15633
|
+
},
|
|
15634
|
+
{
|
|
15635
|
+
"description": "Accessible name of the role=\"tree\" (a plain string). Localized default \"Organization chart\".",
|
|
15636
|
+
"name": "label",
|
|
15637
|
+
"type": "string"
|
|
15638
|
+
},
|
|
15639
|
+
{
|
|
15640
|
+
"description": "DOM id of the root.",
|
|
15641
|
+
"name": "id",
|
|
15642
|
+
"type": "string"
|
|
15643
|
+
},
|
|
15644
|
+
{
|
|
15645
|
+
"description": "Root class.",
|
|
15646
|
+
"name": "className",
|
|
15647
|
+
"type": "string"
|
|
15648
|
+
}
|
|
15649
|
+
],
|
|
15650
|
+
"related": [
|
|
15651
|
+
"Tree — the indented, collapsible outline. OrgChart renders it as its narrow form.",
|
|
15652
|
+
"Avatar — the mark in each box.",
|
|
15653
|
+
"Badge — a status in a box's `extra` slot."
|
|
15654
|
+
],
|
|
15655
|
+
"rules": [
|
|
15656
|
+
2,
|
|
15657
|
+
6,
|
|
15658
|
+
23,
|
|
15659
|
+
44,
|
|
15660
|
+
45
|
|
15661
|
+
],
|
|
15662
|
+
"storyPath": "data-display/OrgChart.stories.tsx",
|
|
15663
|
+
"tagline": "An organization chart: boxes (avatar, name, title, extra) joined by CSS connector lines, top-down; `agent` nodes are dashed. Scrolls horizontally in its own named region when wider than its container, and turns into an indented Tree when the CONTAINER is under 40rem. APG tree view (tree/treeitem/group, roving tabindex, arrow keys).",
|
|
15664
|
+
"usage": [
|
|
15665
|
+
"DO mark AI agents with `variant: \"agent\"` — the box is dashed AND its accessible name ends in a localized \"AI agent\", so the kind is never carried by the stroke alone.",
|
|
15666
|
+
"DO give it the width it has; the breakpoint is a container query, so a chart in a narrow side panel switches to the Tree form on a wide screen too.",
|
|
15667
|
+
"DO retune boxes and lines through the --org-chart-* tokens (node size, gaps, line width/colour, agent border style).",
|
|
15668
|
+
"DON'T wrap it in your own overflow-x scroller — it owns its scroll region, which only becomes a named tab stop when the chart actually overflows.",
|
|
15669
|
+
"DON'T use it for an outline users expand and collapse — that is Tree. OrgChart always shows every node."
|
|
15670
|
+
],
|
|
15671
|
+
"useCases": [
|
|
15672
|
+
"A company or team org chart with people and AI agents side by side.",
|
|
15673
|
+
"Reporting lines on an admin screen, falling back to an indented list in a narrow panel or on a phone."
|
|
15674
|
+
]
|
|
15675
|
+
},
|
|
15606
15676
|
{
|
|
15607
15677
|
"docPath": "data-entry/attachments.tsx",
|
|
15608
15678
|
"example": "import { Attachments } from \"@godxjp/ui/data-entry\";\n\n<Attachments\n items={files}\n onChange={({ fileList }) => setFiles(fileList)}\n overflow=\"scrollX\"\n maxCount={5}\n/>",
|
package/agent/index.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"counts": {
|
|
3
3
|
"anti-ai-tells": 26,
|
|
4
|
-
"components":
|
|
4
|
+
"components": 177,
|
|
5
5
|
"patterns": 21,
|
|
6
6
|
"rules": 50,
|
|
7
|
-
"tokens":
|
|
7
|
+
"tokens": 2098,
|
|
8
8
|
"vocabulary": 14
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
{
|
|
12
12
|
"file": "components-index.json",
|
|
13
|
-
"note": "47 KB — name + group + tagline for all
|
|
13
|
+
"note": "47 KB — name + group + tagline for all 177. FETCH THIS FIRST, then fetch only the components you chose.",
|
|
14
14
|
"url": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
@@ -48,19 +48,19 @@
|
|
|
48
48
|
"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.",
|
|
49
49
|
"read": {
|
|
50
50
|
"live": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/index.json",
|
|
51
|
-
"pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v31.
|
|
51
|
+
"pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v31.5.0/agent/index.json"
|
|
52
52
|
},
|
|
53
53
|
"source": "mcp/src/data — the same data @godxjp/ui-mcp serves — plus the foundation and semantic token tiers, read from src/tokens/*.css",
|
|
54
54
|
"start": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/START-HERE.md",
|
|
55
55
|
"tokenTiers": {
|
|
56
56
|
"component": "per-part knobs, --{component}-{part}-{property}; usually leave these alone",
|
|
57
57
|
"counts": {
|
|
58
|
-
"component":
|
|
58
|
+
"component": 1783,
|
|
59
59
|
"foundation": 211,
|
|
60
|
-
"semantic":
|
|
60
|
+
"semantic": 104
|
|
61
61
|
},
|
|
62
62
|
"foundation": "the seeds a consumer is invited to set — --primary, --background, --radius",
|
|
63
63
|
"semantic": "named roles that follow the seeds — --ring, --text-link, --overlay-background"
|
|
64
64
|
},
|
|
65
|
-
"version": "31.
|
|
65
|
+
"version": "31.5.0"
|
|
66
66
|
}
|
package/agent/llms.txt
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# @godxjp/ui
|
|
2
2
|
|
|
3
|
-
> A Japanese-enterprise React design system:
|
|
4
|
-
> 50 cardinal rules. This file is the entry point for AI agents. Catalog version 31.
|
|
3
|
+
> A Japanese-enterprise React design system: 177 components, 2098 design tokens,
|
|
4
|
+
> 50 cardinal rules. This file is the entry point for AI agents. Catalog version 31.5.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@31.
|
|
7
|
+
(`npx @godxjp/ui-mcp@31.5.0`). It is searchable and version-locked. These files exist for agents
|
|
8
8
|
that can only fetch URLs.
|
|
9
9
|
|
|
10
10
|
## Start
|
|
@@ -15,10 +15,10 @@ that can only fetch URLs.
|
|
|
15
15
|
## Catalog
|
|
16
16
|
|
|
17
17
|
- [patterns-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/patterns-index.json): 21 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.
|
|
18
|
-
- [components-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json): 47 KB — all
|
|
18
|
+
- [components-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json): 47 KB — all 177 components as name, group, tagline, plus `absorbed`: the names that do NOT exist and map to it (`Combobox` → `Select`).
|
|
19
19
|
- [components/<Name>.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components/Select.json): one file per component (1 KB–35 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.
|
|
20
20
|
- [components.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components.json): 1.2 MB — every entry in one file. Most URL fetchers truncate a response this size without saying so; prefer the per-component files.
|
|
21
|
-
- [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` — 211 `foundation` seeds (`--primary`, `--background`, `--radius`: set these when you are handed a brand),
|
|
21
|
+
- [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` — 211 `foundation` seeds (`--primary`, `--background`, `--radius`: set these when you are handed a brand), 104 `semantic` roles, 1783 `component` knobs.
|
|
22
22
|
- [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.
|
|
23
23
|
- [rules.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/rules.json): 50 cardinal rules.
|
|
24
24
|
- [anti-ai-tells.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/anti-ai-tells.json): 26 shapes that make generated UI look generated, each with its fix.
|
|
@@ -26,7 +26,7 @@ that can only fetch URLs.
|
|
|
26
26
|
## Pinning
|
|
27
27
|
|
|
28
28
|
Every URL above tracks `main`. To pin to the release a project actually installed, swap `main` for
|
|
29
|
-
the tag: `.../godx-jp/godxjp-ui/v31.
|
|
29
|
+
the tag: `.../godx-jp/godxjp-ui/v31.5.0/agent/...`. A catalog that does not match the installed
|
|
30
30
|
package describes props that are absent, or hides props that are present, and says nothing either way.
|
|
31
31
|
|
|
32
32
|
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/tokens.json
CHANGED
|
@@ -1625,6 +1625,12 @@
|
|
|
1625
1625
|
"tier": "semantic",
|
|
1626
1626
|
"value": "none"
|
|
1627
1627
|
},
|
|
1628
|
+
{
|
|
1629
|
+
"description": "The widest share of the header row the actions (`extra`) keep on ONE row before they wrap (gh#1025); the title keeps the rest. `initial` — default 60% at the call site.",
|
|
1630
|
+
"name": "--page-header-extra-max-measure",
|
|
1631
|
+
"tier": "semantic",
|
|
1632
|
+
"value": "initial"
|
|
1633
|
+
},
|
|
1628
1634
|
{
|
|
1629
1635
|
"description": "PageContainer `toolbar` — the fixed chrome band between the header and the (scrolling) body. ALL THREE knobs are quiet by default (rule #44): background — `transparent`, i.e. the band shows the page ground exactly as it did before the knob existed. It is bound at `:root` and NOT `initial`, unlike the divider below, because the default is a plain CSS keyword rather than another role token: there is nothing for a scoped [data-tenant]/.dark override to re-resolve, so the `initial` + call-site-fallback dance would buy nothing and only hide the default from anyone reading this file. A service that wants the band to read as its own surface — the design that asked for this knob puts a chat channel's workflow rail on the card ground — sets `--page-toolbar-background: hsl(var(--card));` ONCE in its theme. Never `className=\"bg-card\"` at the call site: that is hand-laid page chrome, it paints only under `variant=\"flush\"` gutters correctly by accident, and it cannot be re-themed per tenant. pad-block 0 — the band's ONLY breathing room, and the only one it should ever have. The band is chrome, so it sits FLUSH against the header above and the body below (src/styles/layout.css cancels the container's --page-band-gap from the band itself); there is deliberately no outside space to tune, because a ruled, painted band floating in a void divides nothing. A service that opts into the background or the divider gives the band its inset HERE (`--page-toolbar-pad-block: var(--space-2)`) instead of padding the strip at the call site. Still 0 by default: a transparent band is not a surface and has no inside to breathe, and under `fill` every pixel of it comes straight off the scroll viewport the slot exists to protect. divider — declared `initial` so the CALL SITE can fall back to --page-header-divider (`var(--page-toolbar-divider, var(--page-header-divider))`). One theme declaration therefore rules the whole page chrome consistently, and a scoped [data-tenant]/.dark override of the header divider still reaches the band — a `:root` binding would freeze it at the :root value (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"). Set `--page-toolbar-divider: none` to silence just this band.",
|
|
1630
1636
|
"name": "--page-toolbar-background",
|
|
@@ -9215,6 +9221,114 @@
|
|
|
9215
9221
|
"tier": "component",
|
|
9216
9222
|
"value": "0.7"
|
|
9217
9223
|
},
|
|
9224
|
+
{
|
|
9225
|
+
"description": "The box. A fixed inline size, so siblings line up in even columns and the connector bus has a predictable pitch; long names wrap inside it instead of widening one box.",
|
|
9226
|
+
"name": "--org-chart-node-inline-size",
|
|
9227
|
+
"tier": "component",
|
|
9228
|
+
"value": "13rem"
|
|
9229
|
+
},
|
|
9230
|
+
{
|
|
9231
|
+
"description": "ORG CHART — boxes joined by lines, top-down (`src/components/data-display/org-chart.tsx`). Every length the chart paints is a knob (cardinal rule #45) and the defaults are the quiet reading (#44): a hairline connector in the border hue, a card-coloured box with the hairline edge every other surface here has. An `agent` box differs by its STROKE STYLE only (dashed), so a theme that retunes the edge colour retunes both kinds at once. ROLE-MIRROR KNOBS ARE `initial`, WITH THE DEFAULT AT THE CALL SITE (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"), so a scoped `[data-tenant]` / `.dark` override reaches them instead of freezing at `:root`.",
|
|
9232
|
+
"name": "--org-chart-node-padding-block",
|
|
9233
|
+
"tier": "component",
|
|
9234
|
+
"value": "var(--space-3)"
|
|
9235
|
+
},
|
|
9236
|
+
{
|
|
9237
|
+
"description": "ORG CHART — boxes joined by lines, top-down (`src/components/data-display/org-chart.tsx`). Every length the chart paints is a knob (cardinal rule #45) and the defaults are the quiet reading (#44): a hairline connector in the border hue, a card-coloured box with the hairline edge every other surface here has. An `agent` box differs by its STROKE STYLE only (dashed), so a theme that retunes the edge colour retunes both kinds at once. ROLE-MIRROR KNOBS ARE `initial`, WITH THE DEFAULT AT THE CALL SITE (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"), so a scoped `[data-tenant]` / `.dark` override reaches them instead of freezing at `:root`.",
|
|
9238
|
+
"name": "--org-chart-node-padding-inline",
|
|
9239
|
+
"tier": "component",
|
|
9240
|
+
"value": "var(--space-3)"
|
|
9241
|
+
},
|
|
9242
|
+
{
|
|
9243
|
+
"description": "ORG CHART — boxes joined by lines, top-down (`src/components/data-display/org-chart.tsx`). Every length the chart paints is a knob (cardinal rule #45) and the defaults are the quiet reading (#44): a hairline connector in the border hue, a card-coloured box with the hairline edge every other surface here has. An `agent` box differs by its STROKE STYLE only (dashed), so a theme that retunes the edge colour retunes both kinds at once. ROLE-MIRROR KNOBS ARE `initial`, WITH THE DEFAULT AT THE CALL SITE (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"), so a scoped `[data-tenant]` / `.dark` override reaches them instead of freezing at `:root`.",
|
|
9244
|
+
"name": "--org-chart-node-gap",
|
|
9245
|
+
"tier": "component",
|
|
9246
|
+
"value": "var(--space-3)"
|
|
9247
|
+
},
|
|
9248
|
+
{
|
|
9249
|
+
"description": "ORG CHART — boxes joined by lines, top-down (`src/components/data-display/org-chart.tsx`). Every length the chart paints is a knob (cardinal rule #45) and the defaults are the quiet reading (#44): a hairline connector in the border hue, a card-coloured box with the hairline edge every other surface here has. An `agent` box differs by its STROKE STYLE only (dashed), so a theme that retunes the edge colour retunes both kinds at once. ROLE-MIRROR KNOBS ARE `initial`, WITH THE DEFAULT AT THE CALL SITE (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"), so a scoped `[data-tenant]` / `.dark` override reaches them instead of freezing at `:root`.",
|
|
9250
|
+
"name": "--org-chart-node-text-gap",
|
|
9251
|
+
"tier": "component",
|
|
9252
|
+
"value": "var(--space-1)"
|
|
9253
|
+
},
|
|
9254
|
+
{
|
|
9255
|
+
"description": "gh#888 — φ tier freezes at :root; default = var(--radius)",
|
|
9256
|
+
"name": "--org-chart-node-radius",
|
|
9257
|
+
"tier": "component",
|
|
9258
|
+
"value": "initial"
|
|
9259
|
+
},
|
|
9260
|
+
{
|
|
9261
|
+
"description": "default = var(--stroke-hairline)",
|
|
9262
|
+
"name": "--org-chart-node-border-width",
|
|
9263
|
+
"tier": "component",
|
|
9264
|
+
"value": "initial"
|
|
9265
|
+
},
|
|
9266
|
+
{
|
|
9267
|
+
"description": "default = hsl(var(--border))",
|
|
9268
|
+
"name": "--org-chart-node-border-color",
|
|
9269
|
+
"tier": "component",
|
|
9270
|
+
"value": "initial"
|
|
9271
|
+
},
|
|
9272
|
+
{
|
|
9273
|
+
"description": "default = hsl(var(--card))",
|
|
9274
|
+
"name": "--org-chart-node-background",
|
|
9275
|
+
"tier": "component",
|
|
9276
|
+
"value": "initial"
|
|
9277
|
+
},
|
|
9278
|
+
{
|
|
9279
|
+
"description": "default = hsl(var(--card-foreground))",
|
|
9280
|
+
"name": "--org-chart-node-foreground",
|
|
9281
|
+
"tier": "component",
|
|
9282
|
+
"value": "initial"
|
|
9283
|
+
},
|
|
9284
|
+
{
|
|
9285
|
+
"description": "default = hsl(var(--muted-foreground))",
|
|
9286
|
+
"name": "--org-chart-node-title-color",
|
|
9287
|
+
"tier": "component",
|
|
9288
|
+
"value": "initial"
|
|
9289
|
+
},
|
|
9290
|
+
{
|
|
9291
|
+
"description": "ORG CHART — boxes joined by lines, top-down (`src/components/data-display/org-chart.tsx`). Every length the chart paints is a knob (cardinal rule #45) and the defaults are the quiet reading (#44): a hairline connector in the border hue, a card-coloured box with the hairline edge every other surface here has. An `agent` box differs by its STROKE STYLE only (dashed), so a theme that retunes the edge colour retunes both kinds at once. ROLE-MIRROR KNOBS ARE `initial`, WITH THE DEFAULT AT THE CALL SITE (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"), so a scoped `[data-tenant]` / `.dark` override reaches them instead of freezing at `:root`.",
|
|
9292
|
+
"name": "--org-chart-node-font-size",
|
|
9293
|
+
"tier": "component",
|
|
9294
|
+
"value": "var(--font-size-sm, var(--font-size-base))"
|
|
9295
|
+
},
|
|
9296
|
+
{
|
|
9297
|
+
"description": "The `agent` variant's stroke style. A dashed edge, not a second colour — the difference must survive greyscale, and the sr-only \"AI agent\" carries it for a screen reader.",
|
|
9298
|
+
"name": "--org-chart-agent-border-style",
|
|
9299
|
+
"tier": "component",
|
|
9300
|
+
"value": "dashed"
|
|
9301
|
+
},
|
|
9302
|
+
{
|
|
9303
|
+
"description": "Spacing of the tree itself: the vertical run between a parent and its children's row, and the gutter between two siblings. The connector is drawn inside these gaps, half above the bus and half below it.",
|
|
9304
|
+
"name": "--org-chart-level-gap",
|
|
9305
|
+
"tier": "component",
|
|
9306
|
+
"value": "var(--space-8)"
|
|
9307
|
+
},
|
|
9308
|
+
{
|
|
9309
|
+
"description": "ORG CHART — boxes joined by lines, top-down (`src/components/data-display/org-chart.tsx`). Every length the chart paints is a knob (cardinal rule #45) and the defaults are the quiet reading (#44): a hairline connector in the border hue, a card-coloured box with the hairline edge every other surface here has. An `agent` box differs by its STROKE STYLE only (dashed), so a theme that retunes the edge colour retunes both kinds at once. ROLE-MIRROR KNOBS ARE `initial`, WITH THE DEFAULT AT THE CALL SITE (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"), so a scoped `[data-tenant]` / `.dark` override reaches them instead of freezing at `:root`.",
|
|
9310
|
+
"name": "--org-chart-sibling-gap",
|
|
9311
|
+
"tier": "component",
|
|
9312
|
+
"value": "var(--space-4)"
|
|
9313
|
+
},
|
|
9314
|
+
{
|
|
9315
|
+
"description": "The connector. default = var(--stroke-hairline)",
|
|
9316
|
+
"name": "--org-chart-line-width",
|
|
9317
|
+
"tier": "component",
|
|
9318
|
+
"value": "initial"
|
|
9319
|
+
},
|
|
9320
|
+
{
|
|
9321
|
+
"description": "default = hsl(var(--border))",
|
|
9322
|
+
"name": "--org-chart-line-color",
|
|
9323
|
+
"tier": "component",
|
|
9324
|
+
"value": "initial"
|
|
9325
|
+
},
|
|
9326
|
+
{
|
|
9327
|
+
"description": "Room around the chart inside its scroll region, so an edge box's focus ring is not clipped.",
|
|
9328
|
+
"name": "--org-chart-padding",
|
|
9329
|
+
"tier": "component",
|
|
9330
|
+
"value": "var(--space-2)"
|
|
9331
|
+
},
|
|
9218
9332
|
{
|
|
9219
9333
|
"description": "`thin` reproduces the old 10px rail closely on the platforms that draw a classic scrollbar; `auto` gives the full-width platform bar, which is what a touch/coarse-pointer console wants. Only `auto | thin | none` are valid — a length is not (that is the standard property's whole bargain, and the reason `--scroll-area-bar-size` could not survive as a rem).",
|
|
9220
9334
|
"name": "--scroll-area-scrollbar-width",
|
|
@@ -9384,7 +9498,7 @@
|
|
|
9384
9498
|
"value": "initial"
|
|
9385
9499
|
},
|
|
9386
9500
|
{
|
|
9387
|
-
"description": "Counter pill beside the label (gh#602). Geometry matches Button/Toggle count pills;
|
|
9501
|
+
"description": "Counter pill beside the label (gh#602). Geometry matches Button/Toggle count pills; COLOUR follows `Tabs` (gh#1019): resting = `--background` / `--muted-foreground`, byte-identical to a resting `.ui-tabs-count` on a CARD tab — the Tabs rule for a pill whose host surface is `--muted`, which the Segmented track is (a `--muted` pill there is 1.00:1, shape gone). The selected segment's pill = `--primary` / `--primary-foreground`, identical to the active tab's. gh#602 had painted EVERY pill primary — four identical blobs that dropped the one thing a count pill in a one-of-N control can say, \"this is the chosen one\". The resting number is held to SC 1.4.3 (≥ 4.5:1 in both themes, measured in segmented-count-tabs-convention-1019.test.ts); it is not the selection indicator, so its fill only has to stand off the track, not reach 3:1. antd has no `count` on SegmentedItemType; this knob exists because every faceted filter in the wild needs one and nesting Badge in `label` was the only API until now.",
|
|
9388
9502
|
"name": "--segmented-count-min-width",
|
|
9389
9503
|
"tier": "component",
|
|
9390
9504
|
"value": "var(--button-count-min-width)"
|
|
@@ -9414,17 +9528,41 @@
|
|
|
9414
9528
|
"value": "var(--space-1)"
|
|
9415
9529
|
},
|
|
9416
9530
|
{
|
|
9417
|
-
"description": "
|
|
9531
|
+
"description": "default = hsl(var(--background)) at the call site",
|
|
9418
9532
|
"name": "--segmented-count-background",
|
|
9419
9533
|
"tier": "component",
|
|
9420
9534
|
"value": "initial"
|
|
9421
9535
|
},
|
|
9422
9536
|
{
|
|
9423
|
-
"description": "
|
|
9537
|
+
"description": "default = hsl(var(--muted-foreground)) at the call site",
|
|
9424
9538
|
"name": "--segmented-count-color",
|
|
9425
9539
|
"tier": "component",
|
|
9426
9540
|
"value": "initial"
|
|
9427
9541
|
},
|
|
9542
|
+
{
|
|
9543
|
+
"description": "default = hsl(var(--primary)) at the call site",
|
|
9544
|
+
"name": "--segmented-count-selected-background",
|
|
9545
|
+
"tier": "component",
|
|
9546
|
+
"value": "initial"
|
|
9547
|
+
},
|
|
9548
|
+
{
|
|
9549
|
+
"description": "default = 100% at the call site",
|
|
9550
|
+
"name": "--segmented-count-selected-background-alpha",
|
|
9551
|
+
"tier": "component",
|
|
9552
|
+
"value": "initial"
|
|
9553
|
+
},
|
|
9554
|
+
{
|
|
9555
|
+
"description": "default = hsl(var(--primary-foreground)) at the call site",
|
|
9556
|
+
"name": "--segmented-count-selected-color",
|
|
9557
|
+
"tier": "component",
|
|
9558
|
+
"value": "initial"
|
|
9559
|
+
},
|
|
9560
|
+
{
|
|
9561
|
+
"description": "default = var(--stroke-hairline) at the call site",
|
|
9562
|
+
"name": "--segmented-count-forced-outline-width",
|
|
9563
|
+
"tier": "component",
|
|
9564
|
+
"value": "initial"
|
|
9565
|
+
},
|
|
9428
9566
|
{
|
|
9429
9567
|
"description": "Rule weight, both orientations and both halves of a labelled rule. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
9430
9568
|
"name": "--separator-rule-size",
|