@godxjp/ui 19.2.0 → 19.4.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.
Files changed (144) hide show
  1. package/dist/components/data-display/badge.d.ts +26 -2
  2. package/dist/components/data-display/badge.js +20 -5
  3. package/dist/components/data-display/index.d.ts +2 -0
  4. package/dist/components/data-display/index.js +2 -0
  5. package/dist/components/data-display/popover.d.ts +13 -1
  6. package/dist/components/data-display/popover.js +3 -1
  7. package/dist/components/data-display/table.d.ts +19 -2
  8. package/dist/components/data-display/table.js +4 -1
  9. package/dist/components/data-display/timeline-grid.d.ts +18 -0
  10. package/dist/components/data-display/timeline-grid.js +222 -0
  11. package/dist/components/data-entry/cascader.js +4 -6
  12. package/dist/components/data-entry/checkbox.js +1 -1
  13. package/dist/components/data-entry/search-select.js +5 -7
  14. package/dist/components/data-entry/select.js +32 -28
  15. package/dist/components/data-entry/tree-select.js +4 -6
  16. package/dist/components/general/inert-background.d.ts +5 -0
  17. package/dist/components/general/inert-background.js +48 -0
  18. package/dist/components/layout/auth-shell.d.ts +4 -2
  19. package/dist/components/layout/auth-shell.js +7 -1
  20. package/dist/components/layout/centered-shell.d.ts +2 -2
  21. package/dist/components/layout/flex.d.ts +1 -1
  22. package/dist/components/layout/flex.js +2 -1
  23. package/dist/components/layout/index.d.ts +3 -0
  24. package/dist/components/layout/index.js +2 -0
  25. package/dist/components/layout/mobile-shell.d.ts +21 -0
  26. package/dist/components/layout/mobile-shell.js +43 -0
  27. package/dist/components/layout/sidebar-link.d.ts +1 -1
  28. package/dist/components/navigation/context-menu.js +13 -9
  29. package/dist/components/navigation/dropdown-menu.js +17 -13
  30. package/dist/inertia/index.d.ts +1 -1
  31. package/dist/lib/variants.d.ts +3 -3
  32. package/dist/lib/variants.js +1 -0
  33. package/dist/props/components/data-display.prop.d.ts +72 -0
  34. package/dist/props/components/data-entry.prop.d.ts +1 -1
  35. package/dist/props/components/layout.prop.d.ts +93 -6
  36. package/dist/props/registry.d.ts +113 -2
  37. package/dist/props/registry.js +155 -1
  38. package/dist/props/vocabulary/data.prop.d.ts +6 -0
  39. package/dist/props/vocabulary/index.d.ts +3 -3
  40. package/dist/props/vocabulary/layout.prop.d.ts +17 -2
  41. package/dist/props/vocabulary/shared.prop.d.ts +7 -0
  42. package/dist/styles/badge-layout.css +15 -0
  43. package/dist/styles/control.css +18 -1
  44. package/dist/styles/data-display-layout.css +167 -0
  45. package/dist/styles/layout.css +7 -0
  46. package/dist/styles/shell-layout.css +148 -0
  47. package/dist/styles/table-layout.css +23 -4
  48. package/dist/tokens/components/badge.css +8 -0
  49. package/dist/tokens/components/control.css +1 -0
  50. package/dist/tokens/components/data-display.css +20 -0
  51. package/dist/tokens/components/shell.css +22 -0
  52. package/dist/tokens/components/table.css +2 -0
  53. package/docs/SPACING.md +19 -6
  54. package/docs/charts/compact-bar-trend.tsx +5 -6
  55. package/docs/data-display/avatar.tsx +7 -9
  56. package/docs/data-display/badge.tsx +37 -1
  57. package/docs/data-display/card/index.tsx +6 -4
  58. package/docs/data-display/carousel.tsx +8 -4
  59. package/docs/data-display/data-table/examples/approval-queue.tsx +1 -1
  60. package/docs/data-display/data-table/examples/grid-features.tsx +1 -1
  61. package/docs/data-display/data-table/index.tsx +1 -1
  62. package/docs/data-display/permission-matrix.tsx +15 -11
  63. package/docs/data-display/popover.tsx +2 -1
  64. package/docs/data-display/scroll-area.tsx +108 -76
  65. package/docs/data-display/table.tsx +2 -2
  66. package/docs/data-display/timeline-grid.tsx +119 -0
  67. package/docs/data-entry/branch-scope-picker.tsx +1 -1
  68. package/docs/data-entry/calendar.tsx +1 -1
  69. package/docs/data-entry/checkbox.tsx +1 -1
  70. package/docs/data-entry/country-picker-recipe.tsx +11 -6
  71. package/docs/data-entry/form-field/index.tsx +33 -29
  72. package/docs/data-entry/form-root.tsx +1 -1
  73. package/docs/data-entry/input-otp.tsx +1 -1
  74. package/docs/data-entry/password-input.tsx +1 -5
  75. package/docs/data-entry/select.tsx +7 -7
  76. package/docs/data-entry/textarea.tsx +3 -3
  77. package/docs/data-entry/toggle-count.tsx +1 -1
  78. package/docs/feedback/alert.tsx +1 -1
  79. package/docs/feedback/banner.tsx +1 -1
  80. package/docs/feedback/sheet.tsx +112 -102
  81. package/docs/feedback/skeleton.tsx +2 -2
  82. package/docs/foundation/colors.tsx +8 -6
  83. package/docs/foundation/email-tokens.tsx +83 -66
  84. package/docs/foundation/radius-shadow.tsx +13 -11
  85. package/docs/general/activity.tsx +1 -1
  86. package/docs/layout/app-shell.tsx +2 -2
  87. package/docs/layout/aspect-ratio.tsx +30 -14
  88. package/docs/layout/auth-account-summary.tsx +1 -1
  89. package/docs/layout/auth-recovery/examples/mobile-390.tsx +1 -1
  90. package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -2
  91. package/docs/layout/auth-shell-context.tsx +1 -1
  92. package/docs/layout/auth-shell-device.tsx +2 -2
  93. package/docs/layout/auth-shell-registration.tsx +1 -1
  94. package/docs/layout/auth-shell.tsx +1 -1
  95. package/docs/layout/flex.tsx +6 -2
  96. package/docs/layout/master-detail.tsx +2 -2
  97. package/docs/layout/mobile-shell.tsx +101 -0
  98. package/docs/layout/page-container.tsx +15 -7
  99. package/docs/layout/responsive-grid.tsx +12 -4
  100. package/docs/layout/separator.tsx +2 -2
  101. package/docs/layout/service-role-panel.tsx +1 -1
  102. package/docs/layout/sidebar.tsx +175 -152
  103. package/docs/layout/split-pane.tsx +45 -28
  104. package/docs/layout/topbar.tsx +19 -23
  105. package/docs/navigation/app-setting-picker.tsx +5 -4
  106. package/docs/navigation/breadcrumb.tsx +12 -5
  107. package/docs/navigation/context-menu.tsx +10 -4
  108. package/docs/navigation/filter-bar.tsx +2 -2
  109. package/docs/navigation/navigation-menu.tsx +89 -96
  110. package/docs/navigation/pagination.tsx +2 -2
  111. package/docs/navigation/steps.tsx +13 -11
  112. package/docs/navigation/tabs.tsx +27 -21
  113. package/docs/navigation/toolbar.tsx +15 -15
  114. package/docs/providers/format-date.tsx +2 -2
  115. package/docs/showcase/acme-portal.tsx +41 -28
  116. package/docs/showcase/acme-website.tsx +67 -61
  117. package/docs/showcase/case1-warehouse-dashboard.tsx +46 -31
  118. package/docs/showcase/case2-employee-me.tsx +33 -36
  119. package/docs/showcase/case3-approval-workflow.tsx +34 -32
  120. package/docs/showcase/case4-login.tsx +95 -101
  121. package/docs/showcase/case5-shift-calendar.tsx +182 -281
  122. package/docs/showcase/case6-agency-handy.tsx +514 -470
  123. package/docs/showcase/futurelastic-web.tsx +32 -29
  124. package/docs/showcase/org-switcher.tsx +20 -13
  125. package/docs/showcase/permission-matrix.tsx +20 -17
  126. package/docs/showcase/public-landing.tsx +1 -1
  127. package/docs/showcase/settings-account-sections.tsx +2 -2
  128. package/docs/showcase/settings-security-mfa.tsx +3 -3
  129. package/docs/showcase/table-approval-queue.tsx +1 -1
  130. package/docs/showcase/table-bulk-actions.tsx +49 -52
  131. package/docs/showcase/table-conditional-format.tsx +9 -9
  132. package/docs/showcase/table-crud-list.tsx +4 -4
  133. package/docs/showcase/table-density.tsx +49 -42
  134. package/docs/showcase/table-expandable-rows.tsx +112 -100
  135. package/docs/showcase/table-filter-chips.tsx +78 -71
  136. package/docs/showcase/table-footer-totals.tsx +30 -23
  137. package/docs/showcase/table-grouped-subtotals.tsx +31 -25
  138. package/docs/showcase/table-master-detail.tsx +27 -24
  139. package/docs/showcase/table-pagination.tsx +34 -27
  140. package/docs/showcase/table-states.tsx +42 -34
  141. package/docs/showcase/table-sticky-columns.tsx +11 -7
  142. package/docs/showcase/table-tree-rows.tsx +22 -15
  143. package/docs/showcase/table-view-tabs.tsx +12 -14
  144. package/package.json +7 -7
@@ -1,5 +1,5 @@
1
1
  import { useState } from "react";
2
- import { Flex, PageContainer, ResponsiveGrid, SplitPane } from "@godxjp/ui/layout";
2
+ import { Flex, PageContainer, ResponsiveGrid, Separator, SplitPane } from "@godxjp/ui/layout";
3
3
  import {
4
4
  Card,
5
5
  CardContent,
@@ -17,7 +17,7 @@ import { FileText, Building2, Calendar, CreditCard, ArrowRight } from "lucide-re
17
17
  * Shows: main list + detail panel, asideWidth sm/md, nested inside PageContainer.
18
18
  * It OWNS its query container (container-type: inline-size), so the two-column split
19
19
  * is chosen from the PANE's own width (≥48rem), not the viewport — a narrow embedded
20
- * pane on a large screen correctly stays single-column (gh#165).
20
+ * pane on a large screen correctly stays single-column.
21
21
  * Composed only from real @godxjp/ui components.
22
22
  *
23
23
  * NOTE: <Flex> defaults to direction="row"; vertical stacks set direction="col"
@@ -188,7 +188,7 @@ export default function Demo() {
188
188
  </CardTitle>
189
189
  </CardHeader>
190
190
  <CardContent>
191
- <Flex direction="col" gap="sm">
191
+ <Flex direction="col" gap="xs">
192
192
  <Flex direction="row" justify="between">
193
193
  <Text tone="muted">小計</Text>
194
194
  <Text tabular>{selected.amount}</Text>
@@ -197,7 +197,8 @@ export default function Demo() {
197
197
  <Text tone="muted">消費税 (10%)</Text>
198
198
  <Text tabular>{yen(base * 0.1)}</Text>
199
199
  </Flex>
200
- <div className="border-border mt-1 border-t pt-2">
200
+ <Separator />
201
+ <div>
201
202
  <Flex direction="row" justify="between">
202
203
  <Text weight="bold">合計</Text>
203
204
  <Text weight="bold" tabular>
@@ -417,31 +418,47 @@ export default function Demo() {
417
418
  <CardContent>
418
419
  <Flex direction="col" gap="md">
419
420
  {/* Narrow embed → stays single column (the container is < 48rem). */}
420
- <div className="max-w-md border p-2">
421
- <Text size="xs" tone="muted">
422
- 28rem のコンテナ → 縦積み
423
- </Text>
424
- <SplitPane
425
- asideLabel="補助パネル(狭い埋め込み)"
426
- asideWidth="sm"
427
- aside={<div className="bg-muted p-4">補助パネル</div>}
428
- >
429
- <div className="bg-muted p-4">メインコンテンツ</div>
430
- </SplitPane>
431
- </div>
421
+ <Card className="max-w-md">
422
+ <CardContent>
423
+ <Text size="xs" tone="muted">
424
+ 約 28rem のコンテナ → 縦積み
425
+ </Text>
426
+ <SplitPane
427
+ asideLabel="補助パネル(狭い埋め込み)"
428
+ asideWidth="sm"
429
+ aside={
430
+ <Card variant="muted">
431
+ <CardContent>補助パネル</CardContent>
432
+ </Card>
433
+ }
434
+ >
435
+ <Card variant="muted">
436
+ <CardContent>メインコンテンツ</CardContent>
437
+ </Card>
438
+ </SplitPane>
439
+ </CardContent>
440
+ </Card>
432
441
  {/* Wide embed → splits into two columns (the container is ≥ 48rem). */}
433
- <div className="max-w-4xl border p-2">
434
- <Text size="xs" tone="muted">
435
- 56rem のコンテナ → 2 カラム
436
- </Text>
437
- <SplitPane
438
- asideLabel="補助パネル(広い埋め込み)"
439
- asideWidth="sm"
440
- aside={<div className="bg-muted p-4">補助パネル</div>}
441
- >
442
- <div className="bg-muted p-4">メインコンテンツ</div>
443
- </SplitPane>
444
- </div>
442
+ <Card className="max-w-4xl">
443
+ <CardContent>
444
+ <Text size="xs" tone="muted">
445
+ 約 56rem のコンテナ → 2 カラム
446
+ </Text>
447
+ <SplitPane
448
+ asideLabel="補助パネル(広い埋め込み)"
449
+ asideWidth="sm"
450
+ aside={
451
+ <Card variant="muted">
452
+ <CardContent>補助パネル</CardContent>
453
+ </Card>
454
+ }
455
+ >
456
+ <Card variant="muted">
457
+ <CardContent>メインコンテンツ</CardContent>
458
+ </Card>
459
+ </SplitPane>
460
+ </CardContent>
461
+ </Card>
445
462
  </Flex>
446
463
  </CardContent>
447
464
  </Card>
@@ -37,10 +37,7 @@ import {
37
37
 
38
38
  /**
39
39
  * Topbar · a PURE SLOT bar. The shell only positions `start` / `center` / `end`; the CONSUMER
40
- * composes every control. This demo builds the chrome the OLD baked Topbar used to force ·
41
- * sidebar toggle, brand mark (Avatar), an entity switcher, a search trigger, a notifications button, a
42
- * user menu · entirely from real primitives, so you can see there is no hidden template (and no
43
- * dead dropdown: a control exists ONLY because it's placed here).
40
+ * composes every control.
44
41
  */
45
42
  const SECTIONS: SidebarSectionProp[] = [
46
43
  {
@@ -98,7 +95,7 @@ export default function Demo() {
98
95
  {collapsed ? <PanelLeftOpen /> : <PanelLeftClose />}
99
96
  </Button>
100
97
  {/* Decorative mark — hidden below sm so the budget goes to the two real controls. */}
101
- <Avatar className="hidden rounded-md sm:flex">
98
+ <Avatar className="rounded-md">
102
99
  <AvatarFallback className="bg-primary text-primary-foreground font-bold">C</AvatarFallback>
103
100
  </Avatar>
104
101
  <DropdownMenu>
@@ -120,7 +117,7 @@ export default function Demo() {
120
117
  <DropdownMenuSeparator />
121
118
  {ENTITIES.map((e) => (
122
119
  <DropdownMenuItem key={e.id} onSelect={() => setActiveEntity(e)}>
123
- <Building2 className="me-2 size-4" />
120
+ <Building2 className="size-4" />
124
121
  {e.name}
125
122
  {activeEntity.id === e.id ? (
126
123
  <Badge variant="secondary" className="ms-auto text-xs">
@@ -153,11 +150,8 @@ export default function Demo() {
153
150
  // end · notifications + user menu, both consumer-composed.
154
151
  const end = (
155
152
  <>
156
- {/* The end slot is `flex: 0 0 auto` — whatever sits here is taken out of the start slot's
157
- budget before it gets a say. At 320 this environment chip alone claimed 93 of the bar's
158
- 198px, squeezing start to 25px and clipping the entity switcher inside it. An ambient
159
- status label is the first thing a compact bar drops, so it appears from sm up. */}
160
- <Badge tone="warning" className="hidden text-xs sm:inline-flex">
153
+ {}
154
+ <Badge tone="warning" className="text-xs">
161
155
  ステージング
162
156
  </Badge>
163
157
  <Button
@@ -184,16 +178,16 @@ export default function Demo() {
184
178
  <DropdownMenuLabel>佐藤 花子</DropdownMenuLabel>
185
179
  <DropdownMenuSeparator />
186
180
  <DropdownMenuItem>
187
- <UserRound className="me-2 size-4" />
181
+ <UserRound className="size-4" />
188
182
  プロフィール
189
183
  </DropdownMenuItem>
190
184
  <DropdownMenuItem>
191
- <Settings className="me-2 size-4" />
185
+ <Settings className="size-4" />
192
186
  アカウント設定
193
187
  </DropdownMenuItem>
194
188
  <DropdownMenuSeparator />
195
189
  <DropdownMenuItem>
196
- <LogOut className="me-2 size-4" />
190
+ <LogOut className="size-4" />
197
191
  ログアウト
198
192
  </DropdownMenuItem>
199
193
  </DropdownMenuContent>
@@ -291,9 +285,9 @@ export default function Demo() {
291
285
  { prop: "children", desc: "3 slot を使わず完全カスタムにする場合の逃げ道" },
292
286
  ].map(({ prop, desc }) => (
293
287
  <Flex key={prop} align="start" gap="sm">
294
- <code className="bg-muted shrink-0 rounded px-1.5 py-0.5 font-mono text-xs">
288
+ <Badge variant="secondary" className="shrink-0">
295
289
  {prop}
296
- </code>
290
+ </Badge>
297
291
  <Text tone="muted">{desc}</Text>
298
292
  </Flex>
299
293
  ))}
@@ -331,13 +325,15 @@ export default function Demo() {
331
325
  </CardDescription>
332
326
  </CardHeader>
333
327
  <CardContent>
334
- <div className="max-w-80 overflow-hidden border p-2">
335
- <Topbar
336
- start={<Text weight="medium">株式会社とても長い組織名称</Text>}
337
- center={<Button variant="outline">すべての取引を検索</Button>}
338
- end={<Button variant="ghost">山田 太郎 システム管理者</Button>}
339
- />
340
- </div>
328
+ <Card className="max-w-80 overflow-hidden">
329
+ <CardContent>
330
+ <Topbar
331
+ start={<Text weight="medium">株式会社とても長い組織名称</Text>}
332
+ center={<Button variant="outline">すべての取引を検索</Button>}
333
+ end={<Button variant="ghost">山田 太郎 システム管理者</Button>}
334
+ />
335
+ </CardContent>
336
+ </Card>
341
337
  </CardContent>
342
338
  </Card>
343
339
  </Flex>
@@ -90,9 +90,11 @@ export default function Demo() {
90
90
  </CardDescription>
91
91
  </CardHeader>
92
92
  <CardContent>
93
- <div className="max-w-80 border p-3" lang="ja">
94
- <AppSettingPicker kind="timezone" id="setting-timezone-narrow" />
95
- </div>
93
+ <Card className="max-w-80" lang="ja">
94
+ <CardContent>
95
+ <AppSettingPicker kind="timezone" id="setting-timezone-narrow" />
96
+ </CardContent>
97
+ </Card>
96
98
  </CardContent>
97
99
  </Card>
98
100
 
@@ -106,7 +108,6 @@ export default function Demo() {
106
108
  </CardHeader>
107
109
  <CardContent>
108
110
  <Topbar
109
- className="rounded-md border"
110
111
  start={
111
112
  <Avatar className="rounded-md">
112
113
  <AvatarFallback>G</AvatarFallback>
@@ -1,6 +1,13 @@
1
1
  import { forwardRef } from "react";
2
2
  import type { AnchorHTMLAttributes } from "react";
3
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
3
+ import {
4
+ Card,
5
+ CardContent,
6
+ CardDescription,
7
+ CardHeader,
8
+ CardTitle,
9
+ CodeBlock,
10
+ } from "@godxjp/ui/data-display";
4
11
  import { Text } from "@godxjp/ui/general";
5
12
  import { Breadcrumb } from "@godxjp/ui/layout";
6
13
  import { Flex, PageContainer } from "@godxjp/ui/layout";
@@ -110,15 +117,15 @@ export default function Demo() {
110
117
  {/* tabIndex: the snippet scrolls sideways on a narrow viewport and holds no
111
118
  focusable content, so without its own tab stop a keyboard user cannot reach the
112
119
  clipped end of the line (WCAG 2.1.1). */}
113
- <pre tabIndex={0} className="bg-muted overflow-x-auto rounded p-3 text-xs">
120
+ <CodeBlock size="xs" wrap={false}>
114
121
  {`<Breadcrumb items={[{ label: "ホーム", to: "/" }, { label: "現在ページ" }]} />`}
115
- </pre>
122
+ </CodeBlock>
116
123
  <Text as="p" size="xs" tone="muted">
117
124
  PageContainer / AppShell の breadcrumb プロップに (任意):
118
125
  </Text>
119
- <pre tabIndex={0} className="bg-muted overflow-x-auto rounded p-3 text-xs">
126
+ <CodeBlock size="xs" wrap={false}>
120
127
  {`<PageContainer title="仕訳詳細" breadcrumb={[{ label: "ホーム", to: "/" }, { label: "JE-0042" }]}>`}
121
- </pre>
128
+ </CodeBlock>
122
129
  </Flex>
123
130
  </CardContent>
124
131
  </Card>
@@ -47,8 +47,11 @@ export default function Demo() {
47
47
  </CardHeader>
48
48
  <CardContent>
49
49
  <ContextMenu>
50
- <ContextMenuTrigger className="border-border flex h-36 w-full cursor-context-menu items-center justify-center rounded-md border border-dashed">
51
- <Text tone="muted">ここを右クリックしてください</Text>
50
+ {/* ui-audit-disable-next-line no-hand-rolled-surface the dashed area is the right-click target the demo asks you to use */}
51
+ <ContextMenuTrigger className="border-border h-36 w-full cursor-context-menu rounded-md border border-dashed">
52
+ <Flex align="center" justify="center" gap="xs">
53
+ <Text tone="muted">ここを右クリックしてください</Text>
54
+ </Flex>
52
55
  </ContextMenuTrigger>
53
56
  <ContextMenuContent>
54
57
  <ContextMenuLabel>仕訳操作</ContextMenuLabel>
@@ -89,8 +92,11 @@ export default function Demo() {
89
92
  </CardHeader>
90
93
  <CardContent>
91
94
  <ContextMenu>
92
- <ContextMenuTrigger className="border-border flex h-36 w-full cursor-context-menu items-center justify-center rounded-md border border-dashed">
93
- <Text tone="muted">右クリック · 表示設定</Text>
95
+ {/* ui-audit-disable-next-line no-hand-rolled-surface the dashed area is the right-click target the demo asks you to use */}
96
+ <ContextMenuTrigger className="border-border h-36 w-full cursor-context-menu rounded-md border border-dashed">
97
+ <Flex align="center" justify="center" gap="xs">
98
+ <Text tone="muted">右クリック · 表示設定</Text>
99
+ </Flex>
94
100
  </ContextMenuTrigger>
95
101
  <ContextMenuContent>
96
102
  <ContextMenuLabel>表示オプション</ContextMenuLabel>
@@ -39,7 +39,7 @@ export default function Demo() {
39
39
  const [period, setPeriod] = useState("all");
40
40
  const hasActiveFilters = query !== "" || status !== "all";
41
41
 
42
- // Typed model (gh#258) — ALL state is consumer data; the bar only renders it.
42
+ // Typed model — ALL state is consumer data; the bar only renders it.
43
43
  const [modelQuery, setModelQuery] = useState("田中");
44
44
  const [modelStatus, setModelStatus] = useState("active");
45
45
  const [modelRole, setModelRole] = useState("");
@@ -80,7 +80,7 @@ export default function Demo() {
80
80
  subtitle="Search, labelled filters, active state, consumer-owned reset, and both responsive overflow strategies"
81
81
  >
82
82
  <Flex direction="col" gap="lg">
83
- {/* Typed model (gh#258) — search/filters/chips/reset/result-count/actions as DATA.
83
+ {/* Typed model — search/filters/chips/reset/result-count/actions as DATA.
84
84
  The bar owns layout, token widths, chip lifecycle and keyboard order; the page owns
85
85
  every piece of state. Remove a chip, reset, or pick a filter and watch the chips row
86
86
  and the localized result count follow. */}
@@ -8,7 +8,7 @@ import {
8
8
  NavigationMenuTrigger,
9
9
  NavigationMenuViewport,
10
10
  } from "@godxjp/ui/navigation";
11
- import { Flex, PageContainer } from "@godxjp/ui/layout";
11
+ import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout";
12
12
  import { Text } from "@godxjp/ui/general";
13
13
 
14
14
  /**
@@ -38,60 +38,56 @@ export default function Demo() {
38
38
  <NavigationMenuTrigger>会計</NavigationMenuTrigger>
39
39
  <NavigationMenuContent>
40
40
  {/* ui-audit-disable-next-line no-arbitrary-size — NavigationMenu flyout panel width (demo layout) */}
41
- <ul className="grid gap-2 p-4 md:w-[400px] md:grid-cols-2">
42
- <li>
43
- <NavigationMenuLink
44
- href="#"
45
- className="hover:bg-accent block rounded-md p-3"
46
- >
47
- <Text as="div" weight="medium">
48
- 仕訳入力
49
- </Text>
50
- <Text as="p" size="xs" tone="muted" className="mt-1">
51
- 借方・貸方を直接入力して仕訳を作成します。
52
- </Text>
53
- </NavigationMenuLink>
54
- </li>
55
- <li>
56
- <NavigationMenuLink
57
- href="#"
58
- className="hover:bg-accent block rounded-md p-3"
59
- >
60
- <Text as="div" weight="medium">
61
- 仕訳帳
62
- </Text>
63
- <Text as="p" size="xs" tone="muted" className="mt-1">
64
- 全仕訳の一覧・検索・フィルタリング。
65
- </Text>
66
- </NavigationMenuLink>
67
- </li>
68
- <li>
69
- <NavigationMenuLink
70
- href="#"
71
- className="hover:bg-accent block rounded-md p-3"
72
- >
73
- <Text as="div" weight="medium">
74
- 総勘定元帳
75
- </Text>
76
- <Text as="p" size="xs" tone="muted" className="mt-1">
77
- 勘定科目ごとの残高・取引履歴。
78
- </Text>
79
- </NavigationMenuLink>
80
- </li>
81
- <li>
82
- <NavigationMenuLink
83
- href="#"
84
- className="hover:bg-accent block rounded-md p-3"
85
- >
86
- <Text as="div" weight="medium">
87
- 試算表
88
- </Text>
89
- <Text as="p" size="xs" tone="muted" className="mt-1">
90
- 期間指定で借方・貸方の合計を確認。
91
- </Text>
92
- </NavigationMenuLink>
93
- </li>
94
- </ul>
41
+ <ResponsiveGrid columns={{ sm: 1, md: 2 }} gap="sm" className="md:w-[400px]">
42
+ <NavigationMenuLink href="#" className="hover:bg-accent block rounded-md">
43
+ <CardContent>
44
+ <Flex direction="col" gap="xs">
45
+ <Text as="div" weight="medium">
46
+ 仕訳入力
47
+ </Text>
48
+ <Text as="p" size="xs" tone="muted">
49
+ 借方・貸方を直接入力して仕訳を作成します。
50
+ </Text>
51
+ </Flex>
52
+ </CardContent>
53
+ </NavigationMenuLink>
54
+ <NavigationMenuLink href="#" className="hover:bg-accent block rounded-md">
55
+ <CardContent>
56
+ <Flex direction="col" gap="xs">
57
+ <Text as="div" weight="medium">
58
+ 仕訳帳
59
+ </Text>
60
+ <Text as="p" size="xs" tone="muted">
61
+ 全仕訳の一覧・検索・フィルタリング。
62
+ </Text>
63
+ </Flex>
64
+ </CardContent>
65
+ </NavigationMenuLink>
66
+ <NavigationMenuLink href="#" className="hover:bg-accent block rounded-md">
67
+ <CardContent>
68
+ <Flex direction="col" gap="xs">
69
+ <Text as="div" weight="medium">
70
+ 総勘定元帳
71
+ </Text>
72
+ <Text as="p" size="xs" tone="muted">
73
+ 勘定科目ごとの残高・取引履歴。
74
+ </Text>
75
+ </Flex>
76
+ </CardContent>
77
+ </NavigationMenuLink>
78
+ <NavigationMenuLink href="#" className="hover:bg-accent block rounded-md">
79
+ <CardContent>
80
+ <Flex direction="col" gap="xs">
81
+ <Text as="div" weight="medium">
82
+ 試算表
83
+ </Text>
84
+ <Text as="p" size="xs" tone="muted">
85
+ 期間指定で借方・貸方の合計を確認。
86
+ </Text>
87
+ </Flex>
88
+ </CardContent>
89
+ </NavigationMenuLink>
90
+ </ResponsiveGrid>
95
91
  </NavigationMenuContent>
96
92
  </NavigationMenuItem>
97
93
 
@@ -99,47 +95,44 @@ export default function Demo() {
99
95
  <NavigationMenuTrigger>レポート</NavigationMenuTrigger>
100
96
  <NavigationMenuContent>
101
97
  {/* ui-audit-disable-next-line no-arbitrary-size — NavigationMenu flyout panel width (demo layout) */}
102
- <ul className="grid gap-2 p-4 md:w-[360px]">
103
- <li>
104
- <NavigationMenuLink
105
- href="#"
106
- className="hover:bg-accent block rounded-md p-3"
107
- >
108
- <Text as="div" weight="medium">
109
- 貸借対照表
110
- </Text>
111
- <Text as="p" size="xs" tone="muted" className="mt-1">
112
- 特定日時点の資産・負債・純資産。
113
- </Text>
114
- </NavigationMenuLink>
115
- </li>
116
- <li>
117
- <NavigationMenuLink
118
- href="#"
119
- className="hover:bg-accent block rounded-md p-3"
120
- >
121
- <Text as="div" weight="medium">
122
- 損益計算書
123
- </Text>
124
- <Text as="p" size="xs" tone="muted" className="mt-1">
125
- 期間中の収益・費用・利益の要約。
126
- </Text>
127
- </NavigationMenuLink>
128
- </li>
129
- <li>
130
- <NavigationMenuLink
131
- href="#"
132
- className="hover:bg-accent block rounded-md p-3"
133
- >
134
- <Text as="div" weight="medium">
135
- キャッシュフロー計算書
136
- </Text>
137
- <Text as="p" size="xs" tone="muted" className="mt-1">
138
- 営業・投資・財務活動別の資金移動。
139
- </Text>
140
- </NavigationMenuLink>
141
- </li>
142
- </ul>
98
+ <ResponsiveGrid columns={1} gap="sm" className="md:w-[360px]">
99
+ <NavigationMenuLink href="#" className="hover:bg-accent block rounded-md">
100
+ <CardContent>
101
+ <Flex direction="col" gap="xs">
102
+ <Text as="div" weight="medium">
103
+ 貸借対照表
104
+ </Text>
105
+ <Text as="p" size="xs" tone="muted">
106
+ 特定日時点の資産・負債・純資産。
107
+ </Text>
108
+ </Flex>
109
+ </CardContent>
110
+ </NavigationMenuLink>
111
+ <NavigationMenuLink href="#" className="hover:bg-accent block rounded-md">
112
+ <CardContent>
113
+ <Flex direction="col" gap="xs">
114
+ <Text as="div" weight="medium">
115
+ 損益計算書
116
+ </Text>
117
+ <Text as="p" size="xs" tone="muted">
118
+ 期間中の収益・費用・利益の要約。
119
+ </Text>
120
+ </Flex>
121
+ </CardContent>
122
+ </NavigationMenuLink>
123
+ <NavigationMenuLink href="#" className="hover:bg-accent block rounded-md">
124
+ <CardContent>
125
+ <Flex direction="col" gap="xs">
126
+ <Text as="div" weight="medium">
127
+ キャッシュフロー計算書
128
+ </Text>
129
+ <Text as="p" size="xs" tone="muted">
130
+ 営業・投資・財務活動別の資金移動。
131
+ </Text>
132
+ </Flex>
133
+ </CardContent>
134
+ </NavigationMenuLink>
135
+ </ResponsiveGrid>
143
136
  </NavigationMenuContent>
144
137
  </NavigationMenuItem>
145
138
 
@@ -97,7 +97,7 @@ export default function Demo() {
97
97
  onValueChange={handleChange}
98
98
  />
99
99
 
100
- {/* Regression: total=0, exactly one page, multiple pages, + the single-page opt-in (gh#153). */}
100
+ {/* Regression: total=0, exactly one page, multiple pages, + the single-page opt-in. */}
101
101
  <Card>
102
102
  <CardHeader>
103
103
  <CardTitle level={2}>境界状態 · 0 件 / 1 ページ / 複数ページ</CardTitle>
@@ -136,7 +136,7 @@ export default function Demo() {
136
136
  </CardContent>
137
137
  </Card>
138
138
 
139
- {/* Long localized total label — the row stays ONE line and never wraps on desktop (gh#153). */}
139
+ {/* Long localized total label — the row stays ONE line and never wraps on desktop. */}
140
140
  <Card>
141
141
  <CardHeader>
142
142
  <CardTitle level={2}>長いローカライズ済みラベル · 折り返さない</CardTitle>
@@ -187,16 +187,18 @@ export default function Demo() {
187
187
  </CardDescription>
188
188
  </CardHeader>
189
189
  <CardContent>
190
- <div className="max-w-80 border p-2">
191
- <Steps
192
- value={1}
193
- items={[
194
- { title: "会社情報の入力", description: "法人番号と所在地" },
195
- { title: "本人確認書類のアップロード", description: "代表者の確認" },
196
- { title: "申請内容の最終確認", description: "送信前の確認" },
197
- ]}
198
- />
199
- </div>
190
+ <Card className="max-w-80">
191
+ <CardContent>
192
+ <Steps
193
+ value={1}
194
+ items={[
195
+ { title: "会社情報の入力", description: "法人番号と所在地" },
196
+ { title: "本人確認書類のアップロード", description: "代表者の確認" },
197
+ { title: "申請内容の最終確認", description: "送信前の確認" },
198
+ ]}
199
+ />
200
+ </CardContent>
201
+ </Card>
200
202
  </CardContent>
201
203
  </Card>
202
204
 
@@ -227,7 +229,7 @@ export default function Demo() {
227
229
  </CardContent>
228
230
  </Card>
229
231
 
230
- {/* Inline row — the hosted-identity / device progression (gh#12) */}
232
+ {/* Inline row — the hosted-identity / device progression */}
231
233
  <Card>
232
234
  <CardHeader>
233
235
  <CardTitle level={2}>