@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.
- package/dist/components/data-display/badge.d.ts +26 -2
- package/dist/components/data-display/badge.js +20 -5
- package/dist/components/data-display/index.d.ts +2 -0
- package/dist/components/data-display/index.js +2 -0
- package/dist/components/data-display/popover.d.ts +13 -1
- package/dist/components/data-display/popover.js +3 -1
- package/dist/components/data-display/table.d.ts +19 -2
- package/dist/components/data-display/table.js +4 -1
- package/dist/components/data-display/timeline-grid.d.ts +18 -0
- package/dist/components/data-display/timeline-grid.js +222 -0
- package/dist/components/data-entry/cascader.js +4 -6
- package/dist/components/data-entry/checkbox.js +1 -1
- package/dist/components/data-entry/search-select.js +5 -7
- package/dist/components/data-entry/select.js +32 -28
- package/dist/components/data-entry/tree-select.js +4 -6
- package/dist/components/general/inert-background.d.ts +5 -0
- package/dist/components/general/inert-background.js +48 -0
- package/dist/components/layout/auth-shell.d.ts +4 -2
- package/dist/components/layout/auth-shell.js +7 -1
- package/dist/components/layout/centered-shell.d.ts +2 -2
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +2 -1
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.js +2 -0
- package/dist/components/layout/mobile-shell.d.ts +21 -0
- package/dist/components/layout/mobile-shell.js +43 -0
- package/dist/components/layout/sidebar-link.d.ts +1 -1
- package/dist/components/navigation/context-menu.js +13 -9
- package/dist/components/navigation/dropdown-menu.js +17 -13
- package/dist/inertia/index.d.ts +1 -1
- package/dist/lib/variants.d.ts +3 -3
- package/dist/lib/variants.js +1 -0
- package/dist/props/components/data-display.prop.d.ts +72 -0
- package/dist/props/components/data-entry.prop.d.ts +1 -1
- package/dist/props/components/layout.prop.d.ts +93 -6
- package/dist/props/registry.d.ts +113 -2
- package/dist/props/registry.js +155 -1
- package/dist/props/vocabulary/data.prop.d.ts +6 -0
- package/dist/props/vocabulary/index.d.ts +3 -3
- package/dist/props/vocabulary/layout.prop.d.ts +17 -2
- package/dist/props/vocabulary/shared.prop.d.ts +7 -0
- package/dist/styles/badge-layout.css +15 -0
- package/dist/styles/control.css +18 -1
- package/dist/styles/data-display-layout.css +167 -0
- package/dist/styles/layout.css +7 -0
- package/dist/styles/shell-layout.css +148 -0
- package/dist/styles/table-layout.css +23 -4
- package/dist/tokens/components/badge.css +8 -0
- package/dist/tokens/components/control.css +1 -0
- package/dist/tokens/components/data-display.css +20 -0
- package/dist/tokens/components/shell.css +22 -0
- package/dist/tokens/components/table.css +2 -0
- package/docs/SPACING.md +19 -6
- package/docs/charts/compact-bar-trend.tsx +5 -6
- package/docs/data-display/avatar.tsx +7 -9
- package/docs/data-display/badge.tsx +37 -1
- package/docs/data-display/card/index.tsx +6 -4
- package/docs/data-display/carousel.tsx +8 -4
- package/docs/data-display/data-table/examples/approval-queue.tsx +1 -1
- package/docs/data-display/data-table/examples/grid-features.tsx +1 -1
- package/docs/data-display/data-table/index.tsx +1 -1
- package/docs/data-display/permission-matrix.tsx +15 -11
- package/docs/data-display/popover.tsx +2 -1
- package/docs/data-display/scroll-area.tsx +108 -76
- package/docs/data-display/table.tsx +2 -2
- package/docs/data-display/timeline-grid.tsx +119 -0
- package/docs/data-entry/branch-scope-picker.tsx +1 -1
- package/docs/data-entry/calendar.tsx +1 -1
- package/docs/data-entry/checkbox.tsx +1 -1
- package/docs/data-entry/country-picker-recipe.tsx +11 -6
- package/docs/data-entry/form-field/index.tsx +33 -29
- package/docs/data-entry/form-root.tsx +1 -1
- package/docs/data-entry/input-otp.tsx +1 -1
- package/docs/data-entry/password-input.tsx +1 -5
- package/docs/data-entry/select.tsx +7 -7
- package/docs/data-entry/textarea.tsx +3 -3
- package/docs/data-entry/toggle-count.tsx +1 -1
- package/docs/feedback/alert.tsx +1 -1
- package/docs/feedback/banner.tsx +1 -1
- package/docs/feedback/sheet.tsx +112 -102
- package/docs/feedback/skeleton.tsx +2 -2
- package/docs/foundation/colors.tsx +8 -6
- package/docs/foundation/email-tokens.tsx +83 -66
- package/docs/foundation/radius-shadow.tsx +13 -11
- package/docs/general/activity.tsx +1 -1
- package/docs/layout/app-shell.tsx +2 -2
- package/docs/layout/aspect-ratio.tsx +30 -14
- package/docs/layout/auth-account-summary.tsx +1 -1
- package/docs/layout/auth-recovery/examples/mobile-390.tsx +1 -1
- package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -2
- package/docs/layout/auth-shell-context.tsx +1 -1
- package/docs/layout/auth-shell-device.tsx +2 -2
- package/docs/layout/auth-shell-registration.tsx +1 -1
- package/docs/layout/auth-shell.tsx +1 -1
- package/docs/layout/flex.tsx +6 -2
- package/docs/layout/master-detail.tsx +2 -2
- package/docs/layout/mobile-shell.tsx +101 -0
- package/docs/layout/page-container.tsx +15 -7
- package/docs/layout/responsive-grid.tsx +12 -4
- package/docs/layout/separator.tsx +2 -2
- package/docs/layout/service-role-panel.tsx +1 -1
- package/docs/layout/sidebar.tsx +175 -152
- package/docs/layout/split-pane.tsx +45 -28
- package/docs/layout/topbar.tsx +19 -23
- package/docs/navigation/app-setting-picker.tsx +5 -4
- package/docs/navigation/breadcrumb.tsx +12 -5
- package/docs/navigation/context-menu.tsx +10 -4
- package/docs/navigation/filter-bar.tsx +2 -2
- package/docs/navigation/navigation-menu.tsx +89 -96
- package/docs/navigation/pagination.tsx +2 -2
- package/docs/navigation/steps.tsx +13 -11
- package/docs/navigation/tabs.tsx +27 -21
- package/docs/navigation/toolbar.tsx +15 -15
- package/docs/providers/format-date.tsx +2 -2
- package/docs/showcase/acme-portal.tsx +41 -28
- package/docs/showcase/acme-website.tsx +67 -61
- package/docs/showcase/case1-warehouse-dashboard.tsx +46 -31
- package/docs/showcase/case2-employee-me.tsx +33 -36
- package/docs/showcase/case3-approval-workflow.tsx +34 -32
- package/docs/showcase/case4-login.tsx +95 -101
- package/docs/showcase/case5-shift-calendar.tsx +182 -281
- package/docs/showcase/case6-agency-handy.tsx +514 -470
- package/docs/showcase/futurelastic-web.tsx +32 -29
- package/docs/showcase/org-switcher.tsx +20 -13
- package/docs/showcase/permission-matrix.tsx +20 -17
- package/docs/showcase/public-landing.tsx +1 -1
- package/docs/showcase/settings-account-sections.tsx +2 -2
- package/docs/showcase/settings-security-mfa.tsx +3 -3
- package/docs/showcase/table-approval-queue.tsx +1 -1
- package/docs/showcase/table-bulk-actions.tsx +49 -52
- package/docs/showcase/table-conditional-format.tsx +9 -9
- package/docs/showcase/table-crud-list.tsx +4 -4
- package/docs/showcase/table-density.tsx +49 -42
- package/docs/showcase/table-expandable-rows.tsx +112 -100
- package/docs/showcase/table-filter-chips.tsx +78 -71
- package/docs/showcase/table-footer-totals.tsx +30 -23
- package/docs/showcase/table-grouped-subtotals.tsx +31 -25
- package/docs/showcase/table-master-detail.tsx +27 -24
- package/docs/showcase/table-pagination.tsx +34 -27
- package/docs/showcase/table-states.tsx +42 -34
- package/docs/showcase/table-sticky-columns.tsx +11 -7
- package/docs/showcase/table-tree-rows.tsx +22 -15
- package/docs/showcase/table-view-tabs.tsx +12 -14
- 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
|
|
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="
|
|
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
|
-
<
|
|
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
|
-
<
|
|
421
|
-
<
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
<
|
|
434
|
-
<
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
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>
|
package/docs/layout/topbar.tsx
CHANGED
|
@@ -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.
|
|
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="
|
|
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="
|
|
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
|
-
{
|
|
157
|
-
|
|
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="
|
|
181
|
+
<UserRound className="size-4" />
|
|
188
182
|
プロフィール
|
|
189
183
|
</DropdownMenuItem>
|
|
190
184
|
<DropdownMenuItem>
|
|
191
|
-
<Settings className="
|
|
185
|
+
<Settings className="size-4" />
|
|
192
186
|
アカウント設定
|
|
193
187
|
</DropdownMenuItem>
|
|
194
188
|
<DropdownMenuSeparator />
|
|
195
189
|
<DropdownMenuItem>
|
|
196
|
-
<LogOut className="
|
|
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
|
-
<
|
|
288
|
+
<Badge variant="secondary" className="shrink-0">
|
|
295
289
|
{prop}
|
|
296
|
-
</
|
|
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
|
-
<
|
|
335
|
-
<
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
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
|
-
<
|
|
94
|
-
<
|
|
95
|
-
|
|
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 {
|
|
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
|
-
<
|
|
120
|
+
<CodeBlock size="xs" wrap={false}>
|
|
114
121
|
{`<Breadcrumb items={[{ label: "ホーム", to: "/" }, { label: "現在ページ" }]} />`}
|
|
115
|
-
</
|
|
122
|
+
</CodeBlock>
|
|
116
123
|
<Text as="p" size="xs" tone="muted">
|
|
117
124
|
PageContainer / AppShell の breadcrumb プロップに (任意):
|
|
118
125
|
</Text>
|
|
119
|
-
<
|
|
126
|
+
<CodeBlock size="xs" wrap={false}>
|
|
120
127
|
{`<PageContainer title="仕訳詳細" breadcrumb={[{ label: "ホーム", to: "/" }, { label: "JE-0042" }]}>`}
|
|
121
|
-
</
|
|
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
|
-
|
|
51
|
-
|
|
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
|
-
|
|
93
|
-
|
|
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
|
|
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
|
|
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
|
-
<
|
|
42
|
-
<
|
|
43
|
-
<
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
</
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
<
|
|
103
|
-
<
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
</
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
|
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
|
|
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
|
-
<
|
|
191
|
-
<
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
{
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
|
232
|
+
{/* Inline row — the hosted-identity / device progression */}
|
|
231
233
|
<Card>
|
|
232
234
|
<CardHeader>
|
|
233
235
|
<CardTitle level={2}>
|