@godxjp/ui 20.0.0 → 20.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/app/theme-axes.d.ts +2 -0
- package/dist/app/theme-axes.js +45 -0
- package/dist/components/charts/chart-cartesian.d.ts +2 -1
- package/dist/components/charts/chart-cartesian.js +52 -3
- package/dist/components/charts/chart-category-axis.d.ts +55 -0
- package/dist/components/charts/chart-category-axis.js +93 -0
- package/dist/components/charts/chart-frame.d.ts +10 -1
- package/dist/components/charts/chart-frame.js +19 -3
- package/dist/components/charts/compact-bar-trend.d.ts +1 -1
- package/dist/components/charts/compact-bar-trend.js +2 -0
- package/dist/components/charts/pie-chart.d.ts +1 -1
- package/dist/components/charts/pie-chart.js +12 -1
- package/dist/components/charts/recharts-peer.d.ts +49 -0
- package/dist/components/charts/recharts-peer.js +45 -0
- package/dist/components/data-display/card.d.ts +12 -1
- package/dist/components/data-display/card.js +22 -4
- package/dist/components/data-display/code-block.js +6 -2
- package/dist/components/data-display/data-table.d.ts +39 -4
- package/dist/components/data-display/data-table.js +802 -270
- package/dist/components/data-display/descriptions.d.ts +27 -6
- package/dist/components/data-display/descriptions.js +58 -17
- package/dist/components/data-display/index.d.ts +2 -0
- package/dist/components/data-display/index.js +2 -0
- package/dist/components/data-display/list-row.d.ts +10 -1
- package/dist/components/data-display/list-row.js +7 -1
- package/dist/components/data-display/popover.d.ts +2 -2
- package/dist/components/data-display/popover.js +61 -11
- package/dist/components/data-display/range-timeline.d.ts +38 -0
- package/dist/components/data-display/range-timeline.js +161 -0
- package/dist/components/data-display/scroll-area.js +13 -2
- package/dist/components/data-display/service-launcher-card.js +10 -10
- package/dist/components/data-display/table.d.ts +11 -3
- package/dist/components/data-display/table.js +48 -18
- package/dist/components/data-display/tree-list.js +4 -9
- package/dist/components/data-entry/calendar.d.ts +2 -2
- package/dist/components/data-entry/calendar.js +12 -1
- package/dist/components/data-entry/cascader.d.ts +1 -1
- package/dist/components/data-entry/cascader.js +188 -24
- package/dist/components/data-entry/color-picker.d.ts +1 -1
- package/dist/components/data-entry/color-picker.js +17 -5
- package/dist/components/data-entry/control-appearance.d.ts +64 -0
- package/dist/components/data-entry/control-appearance.js +39 -0
- package/dist/components/data-entry/control-surface.d.ts +61 -0
- package/dist/components/data-entry/control-surface.js +39 -0
- package/dist/components/data-entry/date-picker.d.ts +1 -1
- package/dist/components/data-entry/date-picker.js +344 -113
- package/dist/components/data-entry/date-range-picker.d.ts +1 -1
- package/dist/components/data-entry/date-range-picker.js +278 -140
- package/dist/components/data-entry/form-field.d.ts +1 -1
- package/dist/components/data-entry/form-field.js +39 -4
- package/dist/components/data-entry/form.d.ts +4 -0
- package/dist/components/data-entry/form.js +4 -2
- package/dist/components/data-entry/index.d.ts +7 -3
- package/dist/components/data-entry/index.js +10 -1
- package/dist/components/data-entry/input-otp.d.ts +1 -1
- package/dist/components/data-entry/input.d.ts +12 -34
- package/dist/components/data-entry/input.js +92 -24
- package/dist/components/data-entry/month-picker.d.ts +1 -1
- package/dist/components/data-entry/month-picker.js +47 -10
- package/dist/components/data-entry/month-range-picker.d.ts +1 -1
- package/dist/components/data-entry/month-range-picker.js +51 -11
- package/dist/components/data-entry/number-input.d.ts +7 -0
- package/dist/components/data-entry/number-input.js +147 -98
- package/dist/components/data-entry/password-input.d.ts +1 -1
- package/dist/components/data-entry/radio.d.ts +1 -1
- package/dist/components/data-entry/radio.js +61 -13
- package/dist/components/data-entry/search-input.d.ts +1 -1
- package/dist/components/data-entry/search-input.js +16 -2
- package/dist/components/data-entry/search-select.d.ts +2 -2
- package/dist/components/data-entry/search-select.js +209 -78
- package/dist/components/data-entry/select.d.ts +22 -4
- package/dist/components/data-entry/select.js +215 -163
- package/dist/components/data-entry/slider.d.ts +9 -1
- package/dist/components/data-entry/slider.js +87 -9
- package/dist/components/data-entry/switch.d.ts +3 -0
- package/dist/components/data-entry/switch.js +29 -3
- package/dist/components/data-entry/textarea.d.ts +14 -56
- package/dist/components/data-entry/textarea.js +80 -33
- package/dist/components/data-entry/time-picker.d.ts +2 -2
- package/dist/components/data-entry/time-picker.js +333 -109
- package/dist/components/data-entry/time-range-picker.d.ts +5 -0
- package/dist/components/data-entry/time-range-picker.js +89 -0
- package/dist/components/data-entry/transfer.d.ts +1 -1
- package/dist/components/data-entry/transfer.js +86 -28
- package/dist/components/data-entry/tree-select.d.ts +1 -1
- package/dist/components/data-entry/tree-select.js +201 -113
- package/dist/components/data-entry/tree-utils.js +7 -14
- package/dist/components/data-entry/upload-files.d.ts +2 -0
- package/dist/components/data-entry/upload-files.js +31 -0
- package/dist/components/data-entry/upload-request.d.ts +4 -0
- package/dist/components/data-entry/upload-request.js +53 -0
- package/dist/components/data-entry/upload-types.d.ts +28 -0
- package/dist/components/data-entry/upload-types.js +2 -0
- package/dist/components/data-entry/upload.d.ts +2 -2
- package/dist/components/data-entry/upload.js +475 -115
- package/dist/components/feedback/dialog.js +16 -19
- package/dist/components/general/button.d.ts +1 -1
- package/dist/components/general/button.js +5 -1
- package/dist/components/general/index.d.ts +1 -0
- package/dist/components/general/index.js +2 -0
- package/dist/components/general/typography.d.ts +3 -0
- package/dist/components/general/typography.js +15 -1
- package/dist/components/general/visually-hidden.d.ts +3 -0
- package/dist/components/general/visually-hidden.js +9 -0
- package/dist/components/layout/app-launcher.d.ts +34 -0
- package/dist/components/layout/app-launcher.js +228 -0
- package/dist/components/layout/app-shell.d.ts +2 -0
- package/dist/components/layout/app-shell.js +20 -7
- package/dist/components/layout/breadcrumb.d.ts +14 -2
- package/dist/components/layout/breadcrumb.js +46 -4
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +23 -2
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.js +5 -1
- package/dist/components/layout/org-switcher.js +20 -1
- package/dist/components/layout/page-container.d.ts +1 -1
- package/dist/components/layout/page-container.js +5 -3
- package/dist/components/layout/responsive-grid.d.ts +16 -2
- package/dist/components/layout/responsive-grid.js +29 -2
- package/dist/components/layout/topbar-item.d.ts +3 -0
- package/dist/components/layout/topbar-item.js +18 -3
- package/dist/components/layout/topbar.d.ts +1 -1
- package/dist/components/layout/topbar.js +27 -6
- package/dist/components/navigation/dropdown-menu.d.ts +30 -2
- package/dist/components/navigation/dropdown-menu.js +68 -11
- package/dist/components/navigation/pagination.d.ts +2 -2
- package/dist/components/navigation/pagination.js +155 -83
- package/dist/components/navigation/steps.d.ts +2 -2
- package/dist/components/navigation/steps.js +29 -4
- package/dist/components/navigation/tabs.d.ts +5 -33
- package/dist/components/navigation/tabs.js +232 -64
- package/dist/components/ui/input-otp.d.ts +26 -28
- package/dist/components/ui/input-otp.js +50 -7
- package/dist/components/ui/password-input.d.ts +36 -2
- package/dist/components/ui/password-input.js +27 -7
- package/dist/components/ui/rating.d.ts +25 -0
- package/dist/components/ui/rating.js +67 -27
- package/dist/components/ui/segmented.d.ts +9 -0
- package/dist/components/ui/segmented.js +17 -2
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/separator.js +13 -0
- package/dist/components/ui/tag-input.d.ts +45 -0
- package/dist/components/ui/tag-input.js +109 -27
- package/dist/form/form-context.d.ts +29 -0
- package/dist/form/form-context.js +44 -4
- package/dist/form/form-field-array.d.ts +22 -0
- package/dist/form/form-field-array.js +50 -0
- package/dist/form/form-field-control.d.ts +2 -1
- package/dist/form/form-field-control.js +116 -40
- package/dist/form/form-root.d.ts +2 -1
- package/dist/form/form-root.js +142 -23
- package/dist/form/index.d.ts +3 -1
- package/dist/form/index.js +12 -1
- package/dist/i18n/messages/en.json +56 -5
- package/dist/i18n/messages/ja.json +56 -5
- package/dist/i18n/messages/vi.json +56 -5
- package/dist/inertia/index.d.ts +20 -0
- package/dist/inertia/index.js +60 -1
- package/dist/lib/control-styles.d.ts +25 -3
- package/dist/lib/control-styles.js +9 -3
- package/dist/lib/datetime/picker-format.d.ts +8 -0
- package/dist/lib/datetime/picker-format.js +54 -0
- package/dist/props/components/charts.prop.d.ts +21 -0
- package/dist/props/components/data-display.prop.d.ts +55 -4
- package/dist/props/components/data-entry.prop.d.ts +687 -43
- package/dist/props/components/form.prop.d.ts +142 -4
- package/dist/props/components/general.prop.d.ts +17 -1
- package/dist/props/components/index.d.ts +2 -2
- package/dist/props/components/layout.prop.d.ts +163 -6
- package/dist/props/components/navigation.prop.d.ts +113 -3
- package/dist/props/registry.d.ts +376 -10
- package/dist/props/registry.js +493 -9
- package/dist/props/vocabulary/data.prop.d.ts +179 -1
- package/dist/props/vocabulary/index.d.ts +4 -4
- package/dist/props/vocabulary/interaction.prop.d.ts +51 -2
- package/dist/props/vocabulary/navigation.prop.d.ts +40 -0
- package/dist/props/vocabulary/shared.prop.d.ts +33 -0
- package/dist/styles/badge-layout.css +2 -1
- package/dist/styles/card-layout.css +26 -4
- package/dist/styles/chart-layout.css +15 -0
- package/dist/styles/control.css +515 -14
- package/dist/styles/data-display-layout.css +241 -6
- package/dist/styles/data-entry-layout.css +13 -0
- package/dist/styles/layout.css +221 -4
- package/dist/styles/navigation-layout.css +227 -0
- package/dist/styles/shell-layout.css +229 -5
- package/dist/styles/table-layout.css +95 -6
- package/dist/styles/text-layout.css +5 -0
- package/dist/tokens/base.css +1 -0
- package/dist/tokens/components/badge.css +1 -0
- package/dist/tokens/components/chart.css +6 -0
- package/dist/tokens/components/control.css +79 -2
- package/dist/tokens/components/data-display.css +9 -0
- package/dist/tokens/components/descriptions.css +11 -0
- package/dist/tokens/components/flex.css +8 -0
- package/dist/tokens/components/navigation.css +55 -0
- package/dist/tokens/components/shell.css +50 -2
- package/dist/tokens/components/table.css +14 -0
- package/dist/tokens/semantic/layout.css +9 -0
- package/docs/CONSUMER-RULES.md +13 -0
- package/docs/DESIGN-AUTHORITY.md +43 -6
- package/docs/DEVELOPMENT.md +4 -3
- package/docs/FORMS.md +151 -6
- package/docs/FRAME-COVERAGE-REPORT.md +29 -16
- package/docs/README.md +1 -1
- package/docs/STANDARDS-vocabulary-tokens.md +1 -1
- package/docs/TESTING.md +15 -6
- package/docs/charts/cjk-category-axis.tsx +81 -0
- package/docs/data-display/card/index.tsx +22 -0
- package/docs/data-display/data-table/examples/antd-parity.tsx +257 -0
- package/docs/data-display/data-table/index.tsx +23 -0
- package/docs/data-display/descriptions.tsx +41 -0
- package/docs/data-display/scroll-area.tsx +31 -25
- package/docs/data-display/table.tsx +104 -45
- package/docs/data-display/timeline.tsx +41 -0
- package/docs/data-entry/date-picker.tsx +85 -0
- package/docs/data-entry/date-range-picker.tsx +26 -0
- package/docs/data-entry/form-dynamic-fields.tsx +199 -0
- package/docs/data-entry/form.tsx +74 -4
- package/docs/data-entry/input-otp.tsx +24 -0
- package/docs/data-entry/input.tsx +46 -1
- package/docs/data-entry/month-range-picker.tsx +1 -1
- package/docs/data-entry/select.tsx +27 -0
- package/docs/data-entry/switch.tsx +41 -0
- package/docs/data-entry/textarea.tsx +38 -0
- package/docs/data-entry/time-picker.tsx +85 -1
- package/docs/data-entry/time-range-picker.tsx +55 -0
- package/docs/data-entry/transfer.tsx +17 -0
- package/docs/data-entry/upload.tsx +56 -12
- package/docs/feedback/tooltip.tsx +1 -1
- package/docs/general/activity.tsx +2 -2
- package/docs/general/button/index.tsx +14 -1
- package/docs/general/typography.tsx +14 -1
- package/docs/layout/app-launcher.tsx +151 -0
- package/docs/layout/app-shell.tsx +11 -0
- package/docs/layout/flex.tsx +50 -0
- package/docs/layout/responsive-grid.tsx +21 -1
- package/docs/layout/topbar.tsx +5 -9
- package/docs/navigation/app-setting-picker.tsx +11 -0
- package/docs/navigation/breadcrumb.tsx +48 -0
- package/docs/navigation/dropdown-menu.tsx +21 -0
- package/docs/navigation/pagination.tsx +52 -0
- package/docs/navigation/steps.tsx +37 -0
- package/docs/navigation/tabs.tsx +97 -1
- package/docs/query/button-refetch.tsx +1 -0
- package/package.json +19 -2
- package/scripts/_agent-setup.mjs +19 -2
- package/scripts/init-guinea-pig.mjs +26 -4
- package/scripts/ui-audit.mjs +243 -30
package/docs/layout/flex.tsx
CHANGED
|
@@ -260,6 +260,56 @@ export default function Demo() {
|
|
|
260
260
|
</Flex>
|
|
261
261
|
</CardContent>
|
|
262
262
|
</Card>
|
|
263
|
+
|
|
264
|
+
<Card>
|
|
265
|
+
<CardHeader>
|
|
266
|
+
<CardTitle level={2}>レスポンシブな操作行</CardTitle>
|
|
267
|
+
</CardHeader>
|
|
268
|
+
<CardContent>
|
|
269
|
+
<Flex
|
|
270
|
+
id="responsive-actions"
|
|
271
|
+
direction={{ base: "col", lg: "row" }}
|
|
272
|
+
gap="md"
|
|
273
|
+
align="start"
|
|
274
|
+
>
|
|
275
|
+
<Flex fill>
|
|
276
|
+
<Text>画面幅に合わせて操作をまとめます。</Text>
|
|
277
|
+
</Flex>
|
|
278
|
+
<Button>保存</Button>
|
|
279
|
+
<Button variant="outline">キャンセル</Button>
|
|
280
|
+
</Flex>
|
|
281
|
+
</CardContent>
|
|
282
|
+
</Card>
|
|
283
|
+
<Card>
|
|
284
|
+
<CardHeader>
|
|
285
|
+
<CardTitle level={2}>軽い強調と行アクション</CardTitle>
|
|
286
|
+
</CardHeader>
|
|
287
|
+
<CardContent>
|
|
288
|
+
<Flex direction="col" gap="md">
|
|
289
|
+
<Flex id="hover-notice" surface="warning" pad={3} tabIndex={0}>
|
|
290
|
+
<Text>締切を確認してください。</Text>
|
|
291
|
+
<Flex reveal="hover" surface="popover" gap="xs" pad={1}>
|
|
292
|
+
<Button variant="ghost" size="sm">
|
|
293
|
+
編集
|
|
294
|
+
</Button>
|
|
295
|
+
<Button variant="ghost" size="sm">
|
|
296
|
+
解除
|
|
297
|
+
</Button>
|
|
298
|
+
</Flex>
|
|
299
|
+
</Flex>
|
|
300
|
+
<Flex as="ul" direction="col" gap="xs">
|
|
301
|
+
<li>添付ファイルを確認</li>
|
|
302
|
+
<li>担当者を選択</li>
|
|
303
|
+
</Flex>
|
|
304
|
+
<Flex surface="muted" pad={{ block: 2, inline: 3 }}>
|
|
305
|
+
<Text as="code" chip decoration="line-through">
|
|
306
|
+
old_status
|
|
307
|
+
</Text>
|
|
308
|
+
<Text>更新済み</Text>
|
|
309
|
+
</Flex>
|
|
310
|
+
</Flex>
|
|
311
|
+
</CardContent>
|
|
312
|
+
</Card>
|
|
263
313
|
</Flex>
|
|
264
314
|
</PageContainer>
|
|
265
315
|
);
|
|
@@ -217,7 +217,7 @@ export default function Demo() {
|
|
|
217
217
|
<CardDescription>
|
|
218
218
|
名前付きコレクション geometry: コンテナ幅が lg ステップ(64rem)に達するまでは 1
|
|
219
219
|
列、そこから 3 列に切り替わる。ResponsiveGrid には lg
|
|
220
|
-
より上のステップが無いため、1024px 相当でも 1440px 相当でも同じ 3 列になる
|
|
220
|
+
より上のステップが無いため、1024px 相当でも 1440px 相当でも同じ 3 列になる ·
|
|
221
221
|
課金プランカタログの「3/3/1」契約 (dxs-platform/platform#333)。`columns` の代わりに
|
|
222
222
|
`preset` を渡すだけで、呼び出し側がブレークポイント値を自作する必要がない。
|
|
223
223
|
</CardDescription>
|
|
@@ -254,6 +254,26 @@ export default function Demo() {
|
|
|
254
254
|
</ResponsiveGrid>
|
|
255
255
|
</CardContent>
|
|
256
256
|
</Card>
|
|
257
|
+
|
|
258
|
+
<Card>
|
|
259
|
+
<CardHeader>
|
|
260
|
+
<CardTitle level={2}>一覧と補助情報 2:1</CardTitle>
|
|
261
|
+
</CardHeader>
|
|
262
|
+
<CardContent>
|
|
263
|
+
<ResponsiveGrid columns={{ base: 1, lg: 3 }} pad={{ block: 2 }}>
|
|
264
|
+
<ResponsiveGrid.Item span={{ base: 1, lg: 2 }}>
|
|
265
|
+
<Flex id="grid-main" surface="muted" pad={3}>
|
|
266
|
+
<Text>メインの一覧</Text>
|
|
267
|
+
</Flex>
|
|
268
|
+
</ResponsiveGrid.Item>
|
|
269
|
+
<ResponsiveGrid.Item>
|
|
270
|
+
<Flex id="grid-rail" surface="muted" pad={3}>
|
|
271
|
+
<Text>補助情報</Text>
|
|
272
|
+
</Flex>
|
|
273
|
+
</ResponsiveGrid.Item>
|
|
274
|
+
</ResponsiveGrid>
|
|
275
|
+
</CardContent>
|
|
276
|
+
</Card>
|
|
257
277
|
</Flex>
|
|
258
278
|
</PageContainer>
|
|
259
279
|
);
|
package/docs/layout/topbar.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState } from "react";
|
|
2
|
-
import { AppShell, Flex, PageContainer, Sidebar, Topbar } from "@godxjp/ui/layout";
|
|
2
|
+
import { AppShell, Flex, PageContainer, Sidebar, Topbar, TopbarItem } from "@godxjp/ui/layout";
|
|
3
3
|
import type { SidebarSectionProp } from "@godxjp/ui/layout";
|
|
4
4
|
import {
|
|
5
5
|
Avatar,
|
|
@@ -154,18 +154,14 @@ export default function Demo() {
|
|
|
154
154
|
<Badge tone="warning" className="text-xs">
|
|
155
155
|
ステージング
|
|
156
156
|
</Badge>
|
|
157
|
-
<
|
|
158
|
-
variant="ghost"
|
|
159
|
-
size="icon-sm"
|
|
157
|
+
<TopbarItem
|
|
160
158
|
aria-label="通知"
|
|
161
|
-
|
|
159
|
+
badge={unread ? 12 : undefined}
|
|
160
|
+
badgeTone="destructive"
|
|
162
161
|
onClick={() => setUnread(false)}
|
|
163
162
|
>
|
|
164
163
|
<Bell />
|
|
165
|
-
|
|
166
|
-
<span className="bg-destructive absolute end-1.5 top-1.5 size-1.5 rounded-full" />
|
|
167
|
-
) : null}
|
|
168
|
-
</Button>
|
|
164
|
+
</TopbarItem>
|
|
169
165
|
<DropdownMenu>
|
|
170
166
|
<DropdownMenuTrigger asChild>
|
|
171
167
|
<Button variant="ghost" size="icon-sm" aria-label="アカウントメニュー">
|
|
@@ -33,6 +33,17 @@ export default function Demo() {
|
|
|
33
33
|
subtitle="kind で 1 つの AppProvider 設定を読み書きする統合ピッカー"
|
|
34
34
|
>
|
|
35
35
|
<Flex direction="col" gap="lg">
|
|
36
|
+
<Card>
|
|
37
|
+
<CardHeader>
|
|
38
|
+
<CardTitle level={2}>インライン表示</CardTitle>
|
|
39
|
+
</CardHeader>
|
|
40
|
+
<CardContent>
|
|
41
|
+
<Flex gap="md" align="center">
|
|
42
|
+
<Text>表示言語</Text>
|
|
43
|
+
<AppSettingPicker kind="locale" appearance="inline" id="setting-inline" />
|
|
44
|
+
</Flex>
|
|
45
|
+
</CardContent>
|
|
46
|
+
</Card>
|
|
36
47
|
<Card>
|
|
37
48
|
<CardHeader>
|
|
38
49
|
<CardTitle level={2}>kind で対象設定を選ぶ</CardTitle>
|
|
@@ -129,6 +129,54 @@ export default function Demo() {
|
|
|
129
129
|
</Flex>
|
|
130
130
|
</CardContent>
|
|
131
131
|
</Card>
|
|
132
|
+
|
|
133
|
+
{/* Ant Design parity surface — separator / itemRender / item menu */}
|
|
134
|
+
<Card>
|
|
135
|
+
<CardHeader>
|
|
136
|
+
<CardTitle level={2}>separator · itemRender · menu (Ant Design パリティ)</CardTitle>
|
|
137
|
+
<CardDescription>
|
|
138
|
+
separator は既定のシェブロンを任意のノードに置き換える(空文字で消える)。常に
|
|
139
|
+
aria-hidden なので、読み上げは ol / li の構造のまま。menu は antd の
|
|
140
|
+
BreadcrumbItemType.menu で、その区切りを兄弟切り替えのメニューボタンにする
|
|
141
|
+
(パス付きエントリは role="menuitem" を保ったまま本物のアンカーになる)。
|
|
142
|
+
</CardDescription>
|
|
143
|
+
</CardHeader>
|
|
144
|
+
<CardContent>
|
|
145
|
+
<Flex direction="col" gap="sm">
|
|
146
|
+
<div id="antd-breadcrumb-slash">
|
|
147
|
+
<Breadcrumb
|
|
148
|
+
ariaLabel="区切り文字のパンくず"
|
|
149
|
+
separator="/"
|
|
150
|
+
items={[
|
|
151
|
+
{ label: "ホーム", to: "/" },
|
|
152
|
+
{ label: "会員管理", to: "/members" },
|
|
153
|
+
{ label: "田中 太郎" },
|
|
154
|
+
]}
|
|
155
|
+
/>
|
|
156
|
+
</div>
|
|
157
|
+
<div id="antd-breadcrumb-menu">
|
|
158
|
+
<Breadcrumb
|
|
159
|
+
ariaLabel="プロジェクト切替のパンくず"
|
|
160
|
+
items={[
|
|
161
|
+
{ label: "ホーム", to: "/" },
|
|
162
|
+
{
|
|
163
|
+
label: "プロジェクト A",
|
|
164
|
+
to: "/p/a",
|
|
165
|
+
menu: {
|
|
166
|
+
items: [
|
|
167
|
+
{ value: "b", label: "プロジェクト B", to: "/p/b" },
|
|
168
|
+
{ value: "c", label: "プロジェクト C", to: "/p/c" },
|
|
169
|
+
{ value: "d", label: "プロジェクト D (準備中)", disabled: true },
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
{ label: "設定" },
|
|
174
|
+
]}
|
|
175
|
+
/>
|
|
176
|
+
</div>
|
|
177
|
+
</Flex>
|
|
178
|
+
</CardContent>
|
|
179
|
+
</Card>
|
|
132
180
|
</Flex>
|
|
133
181
|
</PageContainer>
|
|
134
182
|
);
|
|
@@ -37,6 +37,27 @@ export default function Demo() {
|
|
|
37
37
|
subtitle="Radix dropdown · Trigger asChild + Content + Item/Separator/Sub"
|
|
38
38
|
>
|
|
39
39
|
<Flex direction="col" gap="lg">
|
|
40
|
+
<Card>
|
|
41
|
+
<CardHeader>
|
|
42
|
+
<CardTitle level={2}>メニュー幅</CardTitle>
|
|
43
|
+
</CardHeader>
|
|
44
|
+
<CardContent>
|
|
45
|
+
<Flex wrap gap="md">
|
|
46
|
+
{(["auto", "trigger", "sm", "md", "lg"] as const).map((width) => (
|
|
47
|
+
<DropdownMenu key={width}>
|
|
48
|
+
<DropdownMenuTrigger asChild>
|
|
49
|
+
<Button id={`menu-width-${width}`} variant="outline">
|
|
50
|
+
{width}
|
|
51
|
+
</Button>
|
|
52
|
+
</DropdownMenuTrigger>
|
|
53
|
+
<DropdownMenuContent width={width}>
|
|
54
|
+
<DropdownMenuItem>編集</DropdownMenuItem>
|
|
55
|
+
</DropdownMenuContent>
|
|
56
|
+
</DropdownMenu>
|
|
57
|
+
))}
|
|
58
|
+
</Flex>
|
|
59
|
+
</CardContent>
|
|
60
|
+
</Card>
|
|
40
61
|
{/* Row action menu — the most common use */}
|
|
41
62
|
<Card>
|
|
42
63
|
<CardHeader>
|
|
@@ -235,6 +235,58 @@ export default function Demo() {
|
|
|
235
235
|
/>
|
|
236
236
|
</CardContent>
|
|
237
237
|
</Card>
|
|
238
|
+
|
|
239
|
+
{/* Ant Design parity surface — showQuickJumper / size / align / responsive */}
|
|
240
|
+
<Card>
|
|
241
|
+
<CardHeader>
|
|
242
|
+
<CardTitle level={2}>showQuickJumper · size · align (Ant Design パリティ)</CardTitle>
|
|
243
|
+
<CardDescription>
|
|
244
|
+
showQuickJumper はページ番号を直接入力するフィールド(Enter または goButton
|
|
245
|
+
で確定、範囲外はクランプ)。size="sm" はバーに --control-height
|
|
246
|
+
を一度だけ再束縛するので、ページボタン・サイズ変更・ジャンプ欄が同時に縮む。align
|
|
247
|
+
は論理軸(start / center / end)。responsive は既定で有効で、モバイル幅では simple
|
|
248
|
+
形態に畳む。
|
|
249
|
+
</CardDescription>
|
|
250
|
+
</CardHeader>
|
|
251
|
+
<CardContent>
|
|
252
|
+
<Flex direction="col" gap="lg">
|
|
253
|
+
<div id="antd-pagination-jumper">
|
|
254
|
+
<Pagination
|
|
255
|
+
ariaLabel="クイックジャンパー付きページネーション"
|
|
256
|
+
value={3}
|
|
257
|
+
total={95}
|
|
258
|
+
pageSize={10}
|
|
259
|
+
showTotal
|
|
260
|
+
showSizeChanger
|
|
261
|
+
showQuickJumper
|
|
262
|
+
onValueChange={() => {}}
|
|
263
|
+
/>
|
|
264
|
+
</div>
|
|
265
|
+
<div id="antd-pagination-sm">
|
|
266
|
+
<Pagination
|
|
267
|
+
ariaLabel="小サイズ・中央寄せのページネーション"
|
|
268
|
+
value={3}
|
|
269
|
+
total={95}
|
|
270
|
+
pageSize={10}
|
|
271
|
+
size="sm"
|
|
272
|
+
align="center"
|
|
273
|
+
showQuickJumper={{ goButton: "移動" }}
|
|
274
|
+
onValueChange={() => {}}
|
|
275
|
+
/>
|
|
276
|
+
</div>
|
|
277
|
+
<div id="antd-pagination-start">
|
|
278
|
+
<Pagination
|
|
279
|
+
ariaLabel="先頭寄せのページネーション"
|
|
280
|
+
value={3}
|
|
281
|
+
total={95}
|
|
282
|
+
pageSize={10}
|
|
283
|
+
align="start"
|
|
284
|
+
onValueChange={() => {}}
|
|
285
|
+
/>
|
|
286
|
+
</div>
|
|
287
|
+
</Flex>
|
|
288
|
+
</CardContent>
|
|
289
|
+
</Card>
|
|
238
290
|
</Flex>
|
|
239
291
|
</PageContainer>
|
|
240
292
|
);
|
|
@@ -259,6 +259,43 @@ export default function Demo() {
|
|
|
259
259
|
</Flex>
|
|
260
260
|
</CardContent>
|
|
261
261
|
</Card>
|
|
262
|
+
|
|
263
|
+
{/* Ant Design parity surface — percent + navigation */}
|
|
264
|
+
<Card>
|
|
265
|
+
<CardHeader>
|
|
266
|
+
<CardTitle level={2}>percent · navigation (Ant Design パリティ)</CardTitle>
|
|
267
|
+
<CardDescription>
|
|
268
|
+
percent は antd と同じく「現在ステップ」の進捗のみ(0–100
|
|
269
|
+
にクランプ)。マーカーの周りに確定アークを描き、role="progressbar"
|
|
270
|
+
として読み上げられる。type="navigation" は antd
|
|
271
|
+
のスラブ型ナビゲーションバーで、既定のヘアライン
|
|
272
|
+
コネクタは切られ、代わりにシェブロンで繋がる。
|
|
273
|
+
</CardDescription>
|
|
274
|
+
</CardHeader>
|
|
275
|
+
<CardContent>
|
|
276
|
+
<Flex direction="col" gap="lg">
|
|
277
|
+
<div id="antd-steps-percent">
|
|
278
|
+
<Steps
|
|
279
|
+
value={1}
|
|
280
|
+
percent={40}
|
|
281
|
+
items={[{ title: "申込" }, { title: "審査" }, { title: "完了" }]}
|
|
282
|
+
/>
|
|
283
|
+
</div>
|
|
284
|
+
<div id="antd-steps-navigation">
|
|
285
|
+
<Steps
|
|
286
|
+
type="navigation"
|
|
287
|
+
value={1}
|
|
288
|
+
onValueChange={() => {}}
|
|
289
|
+
items={[
|
|
290
|
+
{ title: "申込", description: "受付済" },
|
|
291
|
+
{ title: "審査", description: "書類確認中" },
|
|
292
|
+
{ title: "完了", description: "未着手" },
|
|
293
|
+
]}
|
|
294
|
+
/>
|
|
295
|
+
</div>
|
|
296
|
+
</Flex>
|
|
297
|
+
</CardContent>
|
|
298
|
+
</Card>
|
|
262
299
|
</Flex>
|
|
263
300
|
</PageContainer>
|
|
264
301
|
);
|
package/docs/navigation/tabs.tsx
CHANGED
|
@@ -46,6 +46,17 @@ const journalItems = [
|
|
|
46
46
|
|
|
47
47
|
export default function Demo() {
|
|
48
48
|
const [activeTab, setActiveTab] = useState("pending");
|
|
49
|
+
const [editableTabs, setEditableTabs] = useState([
|
|
50
|
+
{ value: "je-0042", label: "JE-0042", content: <Text as="p">売上計上 ¥480,000</Text> },
|
|
51
|
+
{ value: "je-0043", label: "JE-0043", content: <Text as="p">仕入計上 ¥120,000</Text> },
|
|
52
|
+
{
|
|
53
|
+
value: "je-0040",
|
|
54
|
+
label: "JE-0040 (固定)",
|
|
55
|
+
content: <Text as="p">給与支払 ¥2,800,000</Text>,
|
|
56
|
+
closable: false,
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
const [editableTab, setEditableTab] = useState("je-0042");
|
|
49
60
|
|
|
50
61
|
return (
|
|
51
62
|
<PageContainer
|
|
@@ -106,7 +117,7 @@ export default function Demo() {
|
|
|
106
117
|
<CardTitle level={2}>320px stress · 長いローカライズラベル</CardTitle>
|
|
107
118
|
<CardDescription>
|
|
108
119
|
狭いコンテナでも長いラベルはクリップされず、水平タブリストが自身でスクロールする
|
|
109
|
-
。compact navigation への変換は Tabs API に存在しないため擬似実装しない
|
|
120
|
+
。compact navigation への変換は Tabs API に存在しないため擬似実装しない ·
|
|
110
121
|
スクロールが意図した縮退動作。
|
|
111
122
|
</CardDescription>
|
|
112
123
|
</CardHeader>
|
|
@@ -308,6 +319,91 @@ export default function Demo() {
|
|
|
308
319
|
</Flex>
|
|
309
320
|
</CardContent>
|
|
310
321
|
</Card>
|
|
322
|
+
|
|
323
|
+
{/* Ant Design parity surface — editable-card + extra + centered + placement + size */}
|
|
324
|
+
<Card>
|
|
325
|
+
<CardHeader>
|
|
326
|
+
<CardTitle level={2}>Editable card · onEdit / extra / hideAdd</CardTitle>
|
|
327
|
+
<CardDescription>
|
|
328
|
+
variant="editable-card" は Ant Design の editable-card。タブ内の ×
|
|
329
|
+
はポインタ用ショートカット(aria-hidden)で、キーボードでは Delete /
|
|
330
|
+
Backspace(aria-keyshortcuts)。追加ボタンは tablist の外にある本物の button。extra は
|
|
331
|
+
antd の tabBarExtraContent を論理軸(start / end)にしたもの。
|
|
332
|
+
</CardDescription>
|
|
333
|
+
</CardHeader>
|
|
334
|
+
<CardContent>
|
|
335
|
+
<Tabs
|
|
336
|
+
id="antd-editable-card"
|
|
337
|
+
variant="editable-card"
|
|
338
|
+
value={editableTab}
|
|
339
|
+
onValueChange={setEditableTab}
|
|
340
|
+
onEdit={(target, action) => {
|
|
341
|
+
if (action === "add") {
|
|
342
|
+
const next = `tab-${editableTabs.length + 1}`;
|
|
343
|
+
setEditableTabs([
|
|
344
|
+
...editableTabs,
|
|
345
|
+
{
|
|
346
|
+
value: next,
|
|
347
|
+
label: `新規 ${editableTabs.length + 1}`,
|
|
348
|
+
content: <Text as="p">新規タブ {next}</Text>,
|
|
349
|
+
},
|
|
350
|
+
]);
|
|
351
|
+
setEditableTab(next);
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const rest = editableTabs.filter((item) => item.value !== target);
|
|
355
|
+
setEditableTabs(rest);
|
|
356
|
+
if (target === editableTab && rest[0]) setEditableTab(rest[0].value);
|
|
357
|
+
}}
|
|
358
|
+
extra={{
|
|
359
|
+
end: (
|
|
360
|
+
<Button size="sm" variant="outline">
|
|
361
|
+
一括操作
|
|
362
|
+
</Button>
|
|
363
|
+
),
|
|
364
|
+
}}
|
|
365
|
+
items={editableTabs}
|
|
366
|
+
/>
|
|
367
|
+
</CardContent>
|
|
368
|
+
</Card>
|
|
369
|
+
|
|
370
|
+
<Card>
|
|
371
|
+
<CardHeader>
|
|
372
|
+
<CardTitle level={2}>tabPlacement · size · centered</CardTitle>
|
|
373
|
+
<CardDescription>
|
|
374
|
+
tabPlacement は antd 6.6.2 の名前で、値は論理軸(top / bottom / start / end)。start /
|
|
375
|
+
end は tablist を縦方向のロービングフォーカスに切り替える。size はライブラリの control
|
|
376
|
+
band(sm / md / lg)に対応。
|
|
377
|
+
</CardDescription>
|
|
378
|
+
</CardHeader>
|
|
379
|
+
<CardContent>
|
|
380
|
+
<Flex direction="col" gap="lg">
|
|
381
|
+
<Tabs
|
|
382
|
+
id="antd-centered"
|
|
383
|
+
defaultValue="pending"
|
|
384
|
+
variant="line"
|
|
385
|
+
centered
|
|
386
|
+
items={journalItems}
|
|
387
|
+
/>
|
|
388
|
+
<Tabs
|
|
389
|
+
id="antd-bottom"
|
|
390
|
+
defaultValue="pending"
|
|
391
|
+
variant="card"
|
|
392
|
+
tabPlacement="bottom"
|
|
393
|
+
size="sm"
|
|
394
|
+
items={journalItems}
|
|
395
|
+
/>
|
|
396
|
+
<Tabs
|
|
397
|
+
id="antd-start"
|
|
398
|
+
defaultValue="pending"
|
|
399
|
+
variant="line"
|
|
400
|
+
tabPlacement="start"
|
|
401
|
+
size="lg"
|
|
402
|
+
items={journalItems}
|
|
403
|
+
/>
|
|
404
|
+
</Flex>
|
|
405
|
+
</CardContent>
|
|
406
|
+
</Card>
|
|
311
407
|
</Flex>
|
|
312
408
|
</PageContainer>
|
|
313
409
|
);
|
|
@@ -81,6 +81,7 @@ function VariantBlock() {
|
|
|
81
81
|
<ButtonRefetch query={query} variant="ghost" label="ghost" />
|
|
82
82
|
<ButtonRefetch query={query} variant="destructive" label="destructive" />
|
|
83
83
|
<ButtonRefetch query={query} variant="link" label="link" />
|
|
84
|
+
<ButtonRefetch query={query} variant="bare" label="bare" />
|
|
84
85
|
</Flex>
|
|
85
86
|
</CardContent>
|
|
86
87
|
</Card>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@godxjp/ui",
|
|
3
|
-
"version": "20.
|
|
4
|
-
"godxUiMcp": "20.
|
|
3
|
+
"version": "20.1.0",
|
|
4
|
+
"godxUiMcp": "20.1.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -85,6 +85,22 @@
|
|
|
85
85
|
"types": "./dist/components/charts/compact-bar-trend.d.ts",
|
|
86
86
|
"import": "./dist/components/charts/compact-bar-trend.js"
|
|
87
87
|
},
|
|
88
|
+
"./charts/line-chart": {
|
|
89
|
+
"types": "./dist/components/charts/line-chart.d.ts",
|
|
90
|
+
"import": "./dist/components/charts/line-chart.js"
|
|
91
|
+
},
|
|
92
|
+
"./charts/bar-chart": {
|
|
93
|
+
"types": "./dist/components/charts/bar-chart.d.ts",
|
|
94
|
+
"import": "./dist/components/charts/bar-chart.js"
|
|
95
|
+
},
|
|
96
|
+
"./charts/area-chart": {
|
|
97
|
+
"types": "./dist/components/charts/area-chart.d.ts",
|
|
98
|
+
"import": "./dist/components/charts/area-chart.js"
|
|
99
|
+
},
|
|
100
|
+
"./charts/pie-chart": {
|
|
101
|
+
"types": "./dist/components/charts/pie-chart.d.ts",
|
|
102
|
+
"import": "./dist/components/charts/pie-chart.js"
|
|
103
|
+
},
|
|
88
104
|
"./ui": {
|
|
89
105
|
"types": "./dist/components/ui/index.d.ts",
|
|
90
106
|
"import": "./dist/components/ui/index.js"
|
|
@@ -316,6 +332,7 @@
|
|
|
316
332
|
"test:visual:auth-registration": "node scripts/auth-shell-registration-visual.mjs",
|
|
317
333
|
"test:visual:topbar-collision": "node scripts/topbar-collision-visual.mjs",
|
|
318
334
|
"test:visual:table-collection-cjk": "node scripts/table-collection-cjk-visual.mjs",
|
|
335
|
+
"test:visual:chart-cjk-axis": "node scripts/chart-cjk-axis-visual.mjs",
|
|
319
336
|
"test:watch": "vitest",
|
|
320
337
|
"test:coverage": "vitest run --coverage",
|
|
321
338
|
"check:example-imports": "node scripts/check-example-imports.mjs",
|
package/scripts/_agent-setup.mjs
CHANGED
|
@@ -255,17 +255,34 @@ export function refreshGuineaPigSkill(root) {
|
|
|
255
255
|
const target = join(dir, "SKILL.md");
|
|
256
256
|
const optin = join(dir, ".guinea-pig-optin");
|
|
257
257
|
if (!existsSync(optin) || !existsSync(target)) return false;
|
|
258
|
-
if (readFileSync(optin, "utf8").trim() === KIT_VERSION) return false;
|
|
259
258
|
|
|
260
259
|
const base = readFileSync(join(SELF_ROOT, "scripts", "guinea-pig-skill.md"), "utf8");
|
|
260
|
+
/*
|
|
261
|
+
* The marker tracks the BASE TEXT, not the release — the same correction the consumer rule file
|
|
262
|
+
* needed, for the same reason. A version marker means editing this skill without cutting a
|
|
263
|
+
* release reaches nobody, and the skill is edited far more often than the version moves. The
|
|
264
|
+
* digest covers only the base: everything from the `# 8.` marker down belongs to the repo and
|
|
265
|
+
* must not make the package's own content look changed.
|
|
266
|
+
*
|
|
267
|
+
* `<version>:<digest>` rather than a bare digest, so the file still says which release wrote it
|
|
268
|
+
* to anyone reading it. Only the digest half is compared.
|
|
269
|
+
*/
|
|
270
|
+
const stamp = `${KIT_VERSION}:${digestOf(base)}`;
|
|
271
|
+
if (readFileSync(optin, "utf8").trim().split(":").pop() === digestOf(base)) return false;
|
|
272
|
+
|
|
261
273
|
const current = readFileSync(target, "utf8");
|
|
262
274
|
const marker = "\n---\n\n# 8. ";
|
|
263
275
|
const i = current.indexOf(marker);
|
|
264
276
|
writeFileSync(target, base.replace(/\s*$/, "") + "\n" + (i < 0 ? "" : current.slice(i)));
|
|
265
|
-
writeFileSync(optin, `${
|
|
277
|
+
writeFileSync(optin, `${stamp}\n`);
|
|
266
278
|
return true;
|
|
267
279
|
}
|
|
268
280
|
|
|
281
|
+
/** The stamp `init-guinea-pig` writes on a fresh install, so the first refresh is a no-op. */
|
|
282
|
+
export function guineaPigStamp() {
|
|
283
|
+
return `${KIT_VERSION}:${digestOf(readFileSync(join(SELF_ROOT, "scripts", "guinea-pig-skill.md"), "utf8"))}`;
|
|
284
|
+
}
|
|
285
|
+
|
|
269
286
|
/**
|
|
270
287
|
* Install the common consumer rules as a PATH-TRIGGERED file, and wire them into `.ai/rules`.
|
|
271
288
|
*
|
|
@@ -11,7 +11,7 @@ import { copyFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
|
11
11
|
import { dirname, join } from "node:path";
|
|
12
12
|
import { fileURLToPath } from "node:url";
|
|
13
13
|
|
|
14
|
-
import { KIT_VERSION, shouldSkip } from "./_agent-setup.mjs";
|
|
14
|
+
import { KIT_VERSION, guineaPigStamp, shouldSkip } from "./_agent-setup.mjs";
|
|
15
15
|
|
|
16
16
|
const root = process.env.INIT_CWD || process.cwd();
|
|
17
17
|
const skip = shouldSkip(root);
|
|
@@ -28,10 +28,32 @@ if (skip === "no-package") {
|
|
|
28
28
|
const source = join(dirname(fileURLToPath(import.meta.url)), "guinea-pig-skill.md");
|
|
29
29
|
const target = join(root, ".claude", "skills", "godx-ui-guinea-pig", "SKILL.md");
|
|
30
30
|
|
|
31
|
+
const optin = join(dirname(target), ".guinea-pig-optin");
|
|
32
|
+
|
|
31
33
|
if (existsSync(target)) {
|
|
32
|
-
|
|
34
|
+
/*
|
|
35
|
+
* PRESENT IS NOT THE SAME AS OPTED IN, and this used to exit here regardless — printing "its
|
|
36
|
+
* BASE sections now refresh on `npm update`" at a repo where they never would.
|
|
37
|
+
*
|
|
38
|
+
* `refreshGuineaPigSkill` keys entirely off the marker: no marker, no refresh, ever, and no
|
|
39
|
+
* report of it either. Measured across the three guinea pigs: one carried the marker and kept
|
|
40
|
+
* up; two had SKILL.md copied by an older path and had been reading whatever guidance was
|
|
41
|
+
* current the day it landed. Re-running is exactly how someone would try to fix that, so
|
|
42
|
+
* re-running has to actually fix it.
|
|
43
|
+
*/
|
|
44
|
+
if (!existsSync(optin)) {
|
|
45
|
+
writeFileSync(optin, `${guineaPigStamp()}\n`);
|
|
46
|
+
console.log(`
|
|
47
|
+
guinea-pig skill was present but NOT opted in — its base sections would never have refreshed.
|
|
48
|
+
Marker written; it now tracks @godxjp/ui@${KIT_VERSION}:
|
|
49
|
+
• ${target}
|
|
50
|
+
`);
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
console.log(` guinea-pig skill already present and opted in:\n ${target}`);
|
|
33
55
|
console.log(
|
|
34
|
-
"\n Its BASE sections
|
|
56
|
+
"\n Its BASE sections refresh on `npm update @godxjp/ui`; anything you appended below\n" +
|
|
35
57
|
" the `# 8.` marker is preserved. Re-running this command changes nothing.\n",
|
|
36
58
|
);
|
|
37
59
|
process.exit(0);
|
|
@@ -48,7 +70,7 @@ copyFileSync(source, target);
|
|
|
48
70
|
* exact staleness this whole change exists to remove. The marker lives next to the skill rather
|
|
49
71
|
* than in package.json so it travels with the thing it describes.
|
|
50
72
|
*/
|
|
51
|
-
writeFileSync(
|
|
73
|
+
writeFileSync(optin, `${guineaPigStamp()}\n`);
|
|
52
74
|
|
|
53
75
|
console.log(`
|
|
54
76
|
guinea-pig skill installed:
|