@godxjp/ui 21.0.0 → 22.0.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/dist/app/app-provider.js +2 -1
- package/dist/components/data-display/badge.d.ts +28 -1
- package/dist/components/data-display/badge.js +2 -0
- package/dist/components/data-display/data-table.d.ts +18 -2
- package/dist/components/data-display/data-table.js +4 -0
- package/dist/components/data-display/index.d.ts +1 -1
- package/dist/components/data-display/popover.d.ts +19 -1
- package/dist/components/data-display/popover.js +9 -1
- package/dist/components/data-display/progress.d.ts +37 -0
- package/dist/components/data-display/progress.js +57 -5
- package/dist/components/data-entry/date-picker.d.ts +10 -3
- package/dist/components/data-entry/date-picker.js +503 -238
- package/dist/components/data-entry/form-field.d.ts +1 -1
- package/dist/components/data-entry/form-field.js +4 -1
- package/dist/components/data-entry/form.js +10 -1
- package/dist/components/data-entry/index.d.ts +0 -6
- package/dist/components/data-entry/index.js +0 -6
- package/dist/components/data-entry/label.d.ts +14 -1
- package/dist/components/data-entry/label.js +6 -1
- package/dist/components/data-entry/radio.d.ts +27 -6
- package/dist/components/data-entry/radio.js +88 -43
- package/dist/components/data-entry/search-select.js +8 -1
- package/dist/components/data-entry/select.js +2 -0
- package/dist/components/data-entry/switch.d.ts +6 -3
- package/dist/components/data-entry/switch.js +34 -11
- package/dist/components/layout/mobile-shell.d.ts +1 -1
- package/dist/components/layout/mobile-shell.js +2 -0
- package/dist/components/navigation/menubar.d.ts +10 -3
- package/dist/components/navigation/steps.d.ts +1 -1
- package/dist/components/navigation/steps.js +3 -1
- package/dist/components/navigation/tabs-scroll.d.ts +27 -0
- package/dist/components/navigation/tabs-scroll.js +52 -1
- package/dist/components/navigation/tabs.d.ts +2 -2
- package/dist/components/navigation/tabs.js +88 -23
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/components/ui/index.js +0 -1
- package/dist/components/ui/segmented.d.ts +15 -1
- package/dist/components/ui/segmented.js +13 -6
- package/dist/i18n/messages/en.json +3 -2
- package/dist/i18n/messages/ja.json +3 -2
- package/dist/i18n/messages/vi.json +3 -2
- package/dist/lib/datetime/picker-format.d.ts +18 -0
- package/dist/lib/datetime/picker-format.js +35 -1
- package/dist/lib/field-a11y.d.ts +12 -0
- package/dist/lib/field-a11y.js +14 -1
- package/dist/props/components/data-display.prop.d.ts +7 -0
- package/dist/props/components/data-entry.prop.d.ts +180 -99
- package/dist/props/components/index.d.ts +1 -1
- package/dist/props/components/layout.prop.d.ts +12 -1
- package/dist/props/components/navigation.prop.d.ts +76 -1
- package/dist/props/registry.d.ts +16 -16
- package/dist/props/registry.js +16 -15
- package/dist/props/vocabulary/data.prop.d.ts +12 -0
- package/dist/props/vocabulary/index.d.ts +2 -2
- package/dist/props/vocabulary/layout.prop.d.ts +11 -0
- package/dist/styles/badge-layout.css +4 -0
- package/dist/styles/card-layout.css +6 -6
- package/dist/styles/control.css +15 -6
- package/dist/styles/data-display-layout.css +76 -13
- package/dist/styles/focus-ring.css +4 -2
- package/dist/styles/navigation-layout.css +25 -0
- package/dist/styles/shell-layout.css +5 -0
- package/dist/styles/table-layout.css +34 -0
- package/dist/tokens/components/data-display.css +9 -0
- package/dist/tokens/components/navigation.css +6 -0
- package/dist/tokens/components/segmented.css +0 -2
- package/dist/tokens/components/shell.css +2 -0
- package/dist/tokens/components/table.css +3 -0
- package/dist/tokens/foundation.css +7 -0
- package/docs/COMPONENTS.md +14 -14
- package/docs/CONSUMER-RULES.md +24 -1
- package/docs/FRAME-COVERAGE-REPORT.md +3 -6
- package/docs/TOKENS.md +65 -0
- package/docs/data-display/badge.tsx +37 -0
- package/docs/data-display/data-table/index.tsx +18 -0
- package/docs/data-display/popover.tsx +41 -1
- package/docs/data-display/progress.tsx +28 -0
- package/docs/data-entry/calendar.tsx +2 -2
- package/docs/data-entry/date-picker.tsx +143 -3
- package/docs/data-entry/form/examples/invoice-form.tsx +2 -2
- package/docs/data-entry/form-field/examples/a11y-contract.tsx +3 -5
- package/docs/data-entry/form.tsx +4 -4
- package/docs/data-entry/number-input.tsx +31 -0
- package/docs/data-entry/segmented.tsx +103 -1
- package/docs/layout/mobile-shell.tsx +5 -0
- package/docs/navigation/tabs.tsx +149 -0
- package/docs/roadmap/antd-parity.md +35 -34
- package/docs/roadmap/parity-audit-data-entry.md +178 -165
- package/docs/roadmap/parity-backlog.md +6 -7
- package/docs/showcase/acme-portal.tsx +7 -0
- package/package.json +11 -23
- package/scripts/ui-audit.mjs +17 -4
- package/dist/components/data-entry/date-range-picker.d.ts +0 -11
- package/dist/components/data-entry/date-range-picker.js +0 -349
- package/dist/components/data-entry/month-picker.d.ts +0 -10
- package/dist/components/data-entry/month-picker.js +0 -241
- package/dist/components/data-entry/month-range-picker.d.ts +0 -10
- package/dist/components/data-entry/month-range-picker.js +0 -301
- package/dist/components/ui/date-range-picker.d.ts +0 -1
- package/dist/components/ui/date-range-picker.js +0 -2
- package/docs/data-entry/date-range-picker.tsx +0 -175
- package/docs/data-entry/month-picker.tsx +0 -101
- package/docs/data-entry/month-range-picker.tsx +0 -115
|
@@ -32,6 +32,11 @@ export default function Demo() {
|
|
|
32
32
|
|
|
33
33
|
return (
|
|
34
34
|
<MobileShell
|
|
35
|
+
// `width="phone"` because this frame is READ ON A DESKTOP. The shell's own docstring already
|
|
36
|
+
// named this case on the block axis (`height="fill"` for "a phone view embedded in a wider
|
|
37
|
+
// page"); the inline axis had no answer until now, so this page drew a 1232px-wide handheld
|
|
38
|
+
// app with its four tab-bar destinations spread across the screen.
|
|
39
|
+
width="phone"
|
|
35
40
|
statusBar={
|
|
36
41
|
<>
|
|
37
42
|
<Text size="sm" weight="medium" tabular>
|
package/docs/navigation/tabs.tsx
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { useState } from "react";
|
|
2
2
|
|
|
3
|
+
import { Trash2 } from "lucide-react";
|
|
4
|
+
|
|
3
5
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
|
|
4
6
|
import { Button, Text } from "@godxjp/ui/general";
|
|
5
7
|
import { Flex, PageContainer } from "@godxjp/ui/layout";
|
|
@@ -44,8 +46,45 @@ const journalItems = [
|
|
|
44
46
|
},
|
|
45
47
|
];
|
|
46
48
|
|
|
49
|
+
/**
|
|
50
|
+
* 20 saved views with real Japanese labels — a strip that is wider than 1920px, so it overflows at
|
|
51
|
+
* EVERY width the browser gates sweep. `scripts/check-tabs-overflow-menu.mjs` measures this frame;
|
|
52
|
+
* it fails if the strip ever stops overflowing, because a gate over a bar that fits proves nothing.
|
|
53
|
+
*/
|
|
54
|
+
const savedViewItems = [
|
|
55
|
+
{ value: "all", label: "すべての仕訳", content: <Text as="p">全 1,284 件</Text> },
|
|
56
|
+
{ value: "pending", label: "未承認の仕訳", content: <Text as="p">未承認 2 件</Text> },
|
|
57
|
+
{ value: "posted", label: "承認済の仕訳", content: <Text as="p">承認済 48 件</Text> },
|
|
58
|
+
{ value: "voided", label: "取消済の仕訳", content: <Text as="p">取消済 3 件</Text> },
|
|
59
|
+
{ value: "returned", label: "差戻しの仕訳", content: <Text as="p">差戻し 5 件</Text> },
|
|
60
|
+
{ value: "draft", label: "下書きの仕訳", content: <Text as="p">下書き 12 件</Text> },
|
|
61
|
+
{ value: "recurring", label: "定期仕訳のひな形", content: <Text as="p">ひな形 7 件</Text> },
|
|
62
|
+
{ value: "accrual", label: "未払費用の計上", content: <Text as="p">未払費用 9 件</Text> },
|
|
63
|
+
{ value: "prepaid", label: "前払費用の振替", content: <Text as="p">前払費用 4 件</Text> },
|
|
64
|
+
{ value: "payroll", label: "給与支払の仕訳", content: <Text as="p">給与 3 件</Text> },
|
|
65
|
+
{ value: "tax", label: "消費税の集計", content: <Text as="p">消費税 6 件</Text> },
|
|
66
|
+
{ value: "closing", label: "決算整理の仕訳", content: <Text as="p">決算整理 11 件</Text> },
|
|
67
|
+
{ value: "audit", label: "監査対象の仕訳", content: <Text as="p">監査対象 8 件</Text> },
|
|
68
|
+
{
|
|
69
|
+
value: "archived",
|
|
70
|
+
label: "アーカイブ済の仕訳",
|
|
71
|
+
content: <Text as="p">アーカイブ 214 件</Text>,
|
|
72
|
+
},
|
|
73
|
+
{ value: "fx", label: "外貨建の換算差額", content: <Text as="p">換算差額 2 件</Text> },
|
|
74
|
+
{ value: "intercompany", label: "関係会社間の取引", content: <Text as="p">関係会社 15 件</Text> },
|
|
75
|
+
{
|
|
76
|
+
value: "fixed-asset",
|
|
77
|
+
label: "固定資産の減価償却",
|
|
78
|
+
content: <Text as="p">減価償却 22 件</Text>,
|
|
79
|
+
},
|
|
80
|
+
{ value: "inventory", label: "棚卸資産の評価替", content: <Text as="p">評価替 6 件</Text> },
|
|
81
|
+
{ value: "bank", label: "銀行勘定の照合", content: <Text as="p">未照合 4 件</Text> },
|
|
82
|
+
{ value: "reversal", label: "翌期首の振戻し", content: <Text as="p">振戻し 9 件</Text> },
|
|
83
|
+
];
|
|
84
|
+
|
|
47
85
|
export default function Demo() {
|
|
48
86
|
const [activeTab, setActiveTab] = useState("pending");
|
|
87
|
+
const [reopened, setReopened] = useState(0);
|
|
49
88
|
const [editableTabs, setEditableTabs] = useState([
|
|
50
89
|
{ value: "je-0042", label: "JE-0042", content: <Text as="p">売上計上 ¥480,000</Text> },
|
|
51
90
|
{ value: "je-0043", label: "JE-0043", content: <Text as="p">仕入計上 ¥120,000</Text> },
|
|
@@ -367,6 +406,116 @@ export default function Demo() {
|
|
|
367
406
|
</CardContent>
|
|
368
407
|
</Card>
|
|
369
408
|
|
|
409
|
+
{/* antd `more` — overflow="menu" beside the default overflow="scroll" */}
|
|
410
|
+
<Card>
|
|
411
|
+
<CardHeader>
|
|
412
|
+
<CardTitle level={2}>overflow · scroll(既定) / menu</CardTitle>
|
|
413
|
+
<CardDescription>
|
|
414
|
+
antd の more をこのライブラリの overflow 語彙に写したもの。既定の scroll
|
|
415
|
+
は今までどおり、帯が自分の水平オーバーフローをスクロールする。menu
|
|
416
|
+
はそれに加えて、帯の外に「他のタブ」ボタンを出し、いま見えていないタブだけを並べる ·
|
|
417
|
+
antd と違いタブは帯から取り除かれない(tablist はタブ以外を持てず、display:none
|
|
418
|
+
のタブはロービングフォーカスを受け取れないため · WAI-ARIA APG)。
|
|
419
|
+
</CardDescription>
|
|
420
|
+
</CardHeader>
|
|
421
|
+
<CardContent>
|
|
422
|
+
<Flex direction="col" gap="lg">
|
|
423
|
+
<Flex direction="col" gap="sm">
|
|
424
|
+
<Text as="p" size="sm" tone="muted">
|
|
425
|
+
overflow="scroll"(既定)
|
|
426
|
+
</Text>
|
|
427
|
+
<Tabs
|
|
428
|
+
id="antd-overflow-scroll"
|
|
429
|
+
defaultValue="all"
|
|
430
|
+
variant="line"
|
|
431
|
+
items={savedViewItems}
|
|
432
|
+
/>
|
|
433
|
+
</Flex>
|
|
434
|
+
<Flex direction="col" gap="sm">
|
|
435
|
+
<Text as="p" size="sm" tone="muted">
|
|
436
|
+
overflow="menu"
|
|
437
|
+
</Text>
|
|
438
|
+
<Tabs
|
|
439
|
+
id="antd-overflow-menu"
|
|
440
|
+
defaultValue="all"
|
|
441
|
+
variant="line"
|
|
442
|
+
overflow="menu"
|
|
443
|
+
items={savedViewItems}
|
|
444
|
+
/>
|
|
445
|
+
</Flex>
|
|
446
|
+
</Flex>
|
|
447
|
+
</CardContent>
|
|
448
|
+
</Card>
|
|
449
|
+
|
|
450
|
+
{/* antd onTabClick / removeIcon / Tab.forceRender */}
|
|
451
|
+
<Card>
|
|
452
|
+
<CardHeader>
|
|
453
|
+
<CardTitle level={2}>onTabClick · closeIcon · forceRender</CardTitle>
|
|
454
|
+
<CardDescription>
|
|
455
|
+
onTabClick は antd の onTabClick で、ポインタで押されたときだけ発火し DOM の
|
|
456
|
+
MouseEvent を渡す(キーボードは activationMode="manual"
|
|
457
|
+
でフォーカス移動と選択が分かれるため発火しない · 選択は onValueChange
|
|
458
|
+
が担当)。closeIcon は antd の removeIcon で、タブ全体の既定グリフを差し替える(item
|
|
459
|
+
側の closeIcon が優先)。item の forceRender は antd の Tab.forceRender
|
|
460
|
+
で、そのパネルだけを先にマウントし、他のタブに 切り替えても保持する。
|
|
461
|
+
</CardDescription>
|
|
462
|
+
</CardHeader>
|
|
463
|
+
<CardContent>
|
|
464
|
+
<Flex direction="col" gap="md">
|
|
465
|
+
<Text as="p" size="sm" tone="muted">
|
|
466
|
+
同じタブを押し直した回数: {reopened}
|
|
467
|
+
</Text>
|
|
468
|
+
<Tabs
|
|
469
|
+
id="antd-tab-click"
|
|
470
|
+
defaultValue="pending"
|
|
471
|
+
variant="line"
|
|
472
|
+
onTabClick={(value) => {
|
|
473
|
+
if (value === activeTab) setReopened((count) => count + 1);
|
|
474
|
+
setActiveTab(value);
|
|
475
|
+
}}
|
|
476
|
+
items={[
|
|
477
|
+
{
|
|
478
|
+
value: "pending",
|
|
479
|
+
label: "未承認",
|
|
480
|
+
content: <Text as="p">未承認の仕訳が 2 件あります。</Text>,
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
value: "chart",
|
|
484
|
+
label: "推移グラフ",
|
|
485
|
+
// The one panel that must survive a tab switch — antd Tab.forceRender.
|
|
486
|
+
forceRender: true,
|
|
487
|
+
content: <Text as="p">月次推移: 4 月 ¥3,120,000 · 5 月 ¥4,820,000</Text>,
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
value: "posted",
|
|
491
|
+
label: "承認済",
|
|
492
|
+
content: <Text as="p">当期承認済: 48 件</Text>,
|
|
493
|
+
},
|
|
494
|
+
]}
|
|
495
|
+
/>
|
|
496
|
+
<Tabs
|
|
497
|
+
id="antd-remove-icon"
|
|
498
|
+
variant="editable-card"
|
|
499
|
+
defaultValue="je-0042"
|
|
500
|
+
closeIcon={<Trash2 aria-hidden="true" />}
|
|
501
|
+
onEdit={() => undefined}
|
|
502
|
+
items={[
|
|
503
|
+
{
|
|
504
|
+
value: "je-0042",
|
|
505
|
+
label: "JE-0042",
|
|
506
|
+
content: <Text as="p">売上計上 ¥480,000</Text>,
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
value: "je-0043",
|
|
510
|
+
label: "JE-0043",
|
|
511
|
+
content: <Text as="p">仕入計上 ¥120,000</Text>,
|
|
512
|
+
},
|
|
513
|
+
]}
|
|
514
|
+
/>
|
|
515
|
+
</Flex>
|
|
516
|
+
</CardContent>
|
|
517
|
+
</Card>
|
|
518
|
+
|
|
370
519
|
<Card>
|
|
371
520
|
<CardHeader>
|
|
372
521
|
<CardTitle level={2}>tabPlacement · size · centered</CardTitle>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Ant Design parity — the audit programme
|
|
2
2
|
|
|
3
|
-
> The complaint is systemic:
|
|
3
|
+
> The complaint is systemic: _"hầu hết các component thiếu tính năng so với Ant Design."_
|
|
4
4
|
> This document is the **method**, so that 127 catalog entries can be audited by different agents
|
|
5
5
|
> and still produce comparable, reviewable results. Per-component specs live in sibling files.
|
|
6
6
|
|
|
@@ -29,7 +29,7 @@ is machine-checkable, so check it before you hand it to anyone.
|
|
|
29
29
|
|
|
30
30
|
**Spacing is not free-form.** `docs/SPACING.md` is binding:
|
|
31
31
|
|
|
32
|
-
- Macro layout uses a **φ modular scale (≈1.618)**,
|
|
32
|
+
- Macro layout uses a **φ modular scale (≈1.618)**, _not_ the 8pt grid. `xs`/`sm` = 4px grid,
|
|
33
33
|
`md` = φ⁰, `lg` = φ¹, `xl` = φ². Applying Material's 8pt grid here is wrong, not "standard".
|
|
34
34
|
- Tailwind `p-*` / `m-*` / `gap-*` are rejected by `no-utility-spacing`; hand-rolled `flex`/`grid`
|
|
35
35
|
by `no-utility-layout`. Rows are `<Flex>`, stacks `<Flex direction="col" gap>`, grids
|
|
@@ -63,8 +63,8 @@ pnpm check:token-tiers && pnpm check:no-hardcoded-geometry && pnpm run audit
|
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
This section exists because it was violated: a comparison table in
|
|
66
|
-
`badge-tag-chip-count.md` wrote an antd `Badge` + `count` example to illustrate
|
|
67
|
-
`check:doc-prop-existence` correctly read it as a claim about
|
|
66
|
+
`badge-tag-chip-count.md` wrote an antd `Badge` + `count` example to illustrate _Ant's_ API and
|
|
67
|
+
`check:doc-prop-existence` correctly read it as a claim about _ours_; and three specs named tokens
|
|
68
68
|
`--…-surface` / `--…-bg`, which the shape above forbids. Both were caught by gates that already
|
|
69
69
|
existed and simply had not been run.
|
|
70
70
|
|
|
@@ -72,8 +72,8 @@ existed and simply had not been run.
|
|
|
72
72
|
|
|
73
73
|
One row per antd capability. No prose findings.
|
|
74
74
|
|
|
75
|
-
| Ant Design prop / behaviour | Status
|
|
76
|
-
|
|
|
75
|
+
| Ant Design prop / behaviour | Status | Evidence | Verdict |
|
|
76
|
+
| --------------------------- | --------------------------------------------------------------------- | -------------------------------------------- | ---------------------------------------------------------- |
|
|
77
77
|
| `<prop>` — one-line meaning | `PRESENT` / `RENAMED` / `COVERED-ELSEWHERE` / `MISSING` / `WONT-PORT` | `src/…:line`, or the grep that found nothing | for `MISSING`: the godx prop name to add, or "composition" |
|
|
78
78
|
|
|
79
79
|
- `RENAMED` — present under the house spelling. Record both names; no work.
|
|
@@ -88,12 +88,12 @@ but it is hand-rolled and a11y-risky), `P2` (nice to have).
|
|
|
88
88
|
|
|
89
89
|
### 3.1 Already specced — see the sibling documents
|
|
90
90
|
|
|
91
|
-
| Area
|
|
92
|
-
|
|
|
93
|
-
| `Tree` / `TreeList` / `TreeSelect` | `TreeSelect` fine; `TreeList` is not a tree; **`Tree` missing entirely**
|
|
94
|
-
| Badge / Tag / Chip / Pill / Count
|
|
95
|
-
| `List` (Ant `Listy`) / `Masonry`
|
|
96
|
-
| AI / chat surface
|
|
91
|
+
| Area | Verdict | Spec |
|
|
92
|
+
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------- |
|
|
93
|
+
| `Tree` / `TreeList` / `TreeSelect` | `TreeSelect` fine; `TreeList` is not a tree; **`Tree` missing entirely** | `tree-components.md` |
|
|
94
|
+
| Badge / Tag / Chip / Pill / Count | Count marker missing entirely; removable chip trapped inside `TagInput`; selectable chip already is `Toggle` | `badge-tag-chip-count.md` |
|
|
95
|
+
| `List` (Ant `Listy`) / `Masonry` | Both missing entirely — no virtualization and no column packing anywhere in `src/` | `list-masonry.md` |
|
|
96
|
+
| AI / chat surface | Nothing exists; 4 components + 6 compositions decided | `ai-chat-components.md` |
|
|
97
97
|
|
|
98
98
|
### 3.2 `Tabs`, `Steps`, `Segmented` — audited 2026-09-10
|
|
99
99
|
|
|
@@ -106,14 +106,14 @@ Present: `items` (incl. `closable`/`closeIcon`/`icon`), `value`/`defaultValue`/`
|
|
|
106
106
|
(= antd `tabBarExtraContent`), `destroyOnHidden`, `onEdit`, `addIcon`, `hideAdd`. Overflow already
|
|
107
107
|
scrolls and keeps the active tab visible (`src/components/navigation/tabs-scroll.ts`).
|
|
108
108
|
|
|
109
|
-
| Gap
|
|
110
|
-
|
|
|
111
|
-
| `moreIcon` + an overflow **"more" dropdown** when the strip cannot scroll (narrow viewports) | **P1**
|
|
112
|
-
| `indicator: { size, align }`
|
|
113
|
-
| `tabBarGutter`
|
|
114
|
-
| `animated`
|
|
115
|
-
| `renderTabBar`
|
|
116
|
-
| `size` lacks `xs`
|
|
109
|
+
| Gap | Priority | Verdict |
|
|
110
|
+
| -------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------- |
|
|
111
|
+
| `moreIcon` + an overflow **"more" dropdown** when the strip cannot scroll (narrow viewports) | **P1** | Add. Scrolling alone hides tabs from a touch user with no affordance. |
|
|
112
|
+
| `indicator: { size, align }` | P2 | Add as tokens (`--tabs-indicator-*`), not props — it is a design knob (cardinal rule #44). |
|
|
113
|
+
| `tabBarGutter` | P2 | Token, not a prop. |
|
|
114
|
+
| `animated` | P2 | `WONT-PORT` as a prop — motion is a system decision and must follow `prefers-reduced-motion`. |
|
|
115
|
+
| `renderTabBar` | P2 | `WONT-PORT` — an escape hatch that lets a consumer bypass the a11y contract. |
|
|
116
|
+
| `size` lacks `xs` | P2 | Add `xs` for the full `xs\|sm\|md\|lg` tier. |
|
|
117
117
|
|
|
118
118
|
**`Steps`** (`src/props/components/navigation.prop.ts:201-240`).
|
|
119
119
|
Present: `items` (`title`/`subtitle`/`description`/`icon`/`status`/`disabled`),
|
|
@@ -121,23 +121,24 @@ Present: `items` (`title`/`subtitle`/`description`/`icon`/`status`/`disabled`),
|
|
|
121
121
|
(`default`/`dot`/`inline`/`navigation` — `dot` **is** antd's deprecated `progressDot`), `percent`,
|
|
122
122
|
`titlePlacement`, `separator`.
|
|
123
123
|
|
|
124
|
-
| Gap
|
|
125
|
-
|
|
|
126
|
-
| `initial` — start the visible numbering at N
|
|
127
|
-
| `responsive` — auto-switch to vertical on a narrow container | **P1**
|
|
128
|
-
| `size` is `md\|sm` only
|
|
124
|
+
| Gap | Priority | Verdict |
|
|
125
|
+
| ------------------------------------------------------------ | -------- | ---------------------------------------------------------------------- |
|
|
126
|
+
| `initial` — start the visible numbering at N | P2 | Add. Trivial, and real for resumed wizards. |
|
|
127
|
+
| `responsive` — auto-switch to vertical on a narrow container | **P1** | Add. Today a horizontal 5-step bar on a phone is the caller's problem. |
|
|
128
|
+
| `size` is `md\|sm` only | P2 | Extend to `xs\|sm\|md\|lg`. |
|
|
129
129
|
|
|
130
|
-
**`Segmented`** (`src/components/ui/segmented.tsx`). Built on
|
|
131
|
-
|
|
130
|
+
**`Segmented`** (`src/components/ui/segmented.tsx`). Built on react-aria-components' `RadioGroup`
|
|
131
|
+
(Radix's, when this was audited) — the correct APG choice either way, and the comment explaining why
|
|
132
|
+
it is not a `ToggleGroup` should be preserved verbatim.
|
|
132
133
|
Present: `options` (`value`/`label`/`icon`/`disabled`), `value`/`defaultValue`/`onValueChange`,
|
|
133
134
|
`block`, `vertical`, `size`, `disabled`, `name`.
|
|
134
135
|
|
|
135
|
-
| Gap
|
|
136
|
-
|
|
|
137
|
-
| `shape: 'default' \| 'round'`
|
|
138
|
-
| Option as a bare `string \| number`
|
|
139
|
-
| Per-option `title` (a tooltip / hover hint) | P2
|
|
140
|
-
| `size` lacks `xs`
|
|
136
|
+
| Gap | Priority | Verdict |
|
|
137
|
+
| ------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
|
|
138
|
+
| `shape: 'default' \| 'round'` | P2 | Add as `shape` — the existing `ShapeProp` vocabulary already has `pill`; reuse it rather than antd's `round`. |
|
|
139
|
+
| Option as a bare `string \| number` | P2 | Add. Ant accepts it; it removes ceremony for the common case. |
|
|
140
|
+
| Per-option `title` (a tooltip / hover hint) | P2 | `COVERED-ELSEWHERE` — wrap the option in `Tooltip`. Do not add a second tooltip API. |
|
|
141
|
+
| `size` lacks `xs` | P2 | Add. |
|
|
141
142
|
|
|
142
143
|
**None of these three is the source of the "doesn't look like Ant Design" impression** — that is
|
|
143
144
|
`TreeList`, the missing count badge, and the missing `List`/`Masonry`/`Tree`.
|
|
@@ -146,7 +147,7 @@ Present: `options` (`value`/`label`/`icon`/`disabled`), `value`/`defaultValue`/`
|
|
|
146
147
|
|
|
147
148
|
1. Read the group's catalog entries in `mcp/src/data/components.ts` and the prop types in
|
|
148
149
|
`src/props/components/<group>.prop.ts`.
|
|
149
|
-
2. Fetch the matching Ant Design docs page for each. Where a component's
|
|
150
|
+
2. Fetch the matching Ant Design docs page for each. Where a component's _identity_ is unclear,
|
|
150
151
|
settle it at <https://namethatui.com/?platform=web> before writing anything.
|
|
151
152
|
3. Produce the §2 ledger per component. Cite file:line.
|
|
152
153
|
4. Publish a GATE-0 C1–C7 ledger for anything proposed as a **new** component.
|