@godxjp/ui 19.1.0 → 19.2.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 +25 -128
- package/dist/app/theme-axes.d.ts +4 -15
- package/dist/app/timezones.d.ts +1 -4
- package/dist/components/charts/area-chart.d.ts +2 -3
- package/dist/components/charts/bar-chart.d.ts +2 -3
- package/dist/components/charts/chart-frame.d.ts +7 -16
- package/dist/components/charts/chart-summary.d.ts +2 -2
- package/dist/components/charts/compact-bar-trend.d.ts +9 -24
- package/dist/components/charts/index.d.ts +1 -6
- package/dist/components/data-display/badge.d.ts +2 -12
- package/dist/components/data-display/card.d.ts +21 -41
- package/dist/components/data-display/carousel.d.ts +1 -2
- package/dist/components/data-display/code-block.d.ts +4 -0
- package/dist/components/data-display/code-block.js +24 -0
- package/dist/components/data-display/data-table.d.ts +15 -37
- package/dist/components/data-display/data-table.js +1 -3
- package/dist/components/data-display/descriptions.d.ts +2 -6
- package/dist/components/data-display/descriptions.js +0 -2
- package/dist/components/data-display/index.d.ts +4 -0
- package/dist/components/data-display/index.js +4 -0
- package/dist/components/data-display/list-row.d.ts +3 -22
- package/dist/components/data-display/permission-matrix.d.ts +7 -20
- package/dist/components/data-display/progress.d.ts +1 -1
- package/dist/components/data-display/prose.d.ts +4 -0
- package/dist/components/data-display/prose.js +20 -0
- package/dist/components/data-display/service-launcher-card.d.ts +3 -10
- package/dist/components/data-display/table.d.ts +20 -80
- package/dist/components/data-display/table.js +0 -3
- package/dist/components/data-display/timeline.d.ts +3 -5
- package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
- package/dist/components/data-entry/branch-scope-picker.js +0 -1
- package/dist/components/data-entry/calendar.d.ts +3 -2
- package/dist/components/data-entry/calendar.js +58 -3
- package/dist/components/data-entry/command-palette.d.ts +8 -22
- package/dist/components/data-entry/date-picker.d.ts +4 -5
- package/dist/components/data-entry/date-picker.js +6 -1
- package/dist/components/data-entry/date-range-picker.d.ts +1 -1
- package/dist/components/data-entry/date-range-picker.js +8 -3
- package/dist/components/data-entry/form-errors.d.ts +7 -18
- package/dist/components/data-entry/form-field.js +1 -5
- package/dist/components/data-entry/form.d.ts +1 -9
- package/dist/components/data-entry/input.d.ts +16 -14
- package/dist/components/data-entry/input.js +3 -0
- package/dist/components/data-entry/month-picker.js +2 -2
- package/dist/components/data-entry/month-range-picker.d.ts +4 -6
- package/dist/components/data-entry/month-range-picker.js +2 -2
- package/dist/components/data-entry/number-input.d.ts +1 -5
- package/dist/components/data-entry/number-input.js +1 -0
- package/dist/components/data-entry/radio.js +0 -1
- package/dist/components/data-entry/search-select.d.ts +2 -4
- package/dist/components/data-entry/select.d.ts +11 -6
- package/dist/components/data-entry/select.js +4 -2
- package/dist/components/data-entry/switch.js +0 -1
- package/dist/components/data-entry/textarea.d.ts +10 -16
- package/dist/components/data-entry/time-picker.d.ts +3 -5
- package/dist/components/data-entry/upload-types.d.ts +1 -5
- package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
- package/dist/components/feedback/dialog.d.ts +6 -15
- package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
- package/dist/components/feedback/sheet.d.ts +3 -10
- package/dist/components/feedback/sheet.js +1 -1
- package/dist/components/feedback/sonner.js +2 -3
- package/dist/components/general/activity.d.ts +4 -30
- package/dist/components/general/button.js +1 -10
- package/dist/components/general/logo.d.ts +6 -28
- package/dist/components/general/reveal.d.ts +3 -9
- package/dist/components/general/typography.d.ts +1 -3
- package/dist/components/layout/account-chip.d.ts +8 -0
- package/dist/components/layout/account-chip.js +45 -0
- package/dist/components/layout/auth-divider.d.ts +2 -9
- package/dist/components/layout/auth-shell.d.ts +1 -14
- package/dist/components/layout/breadcrumb.d.ts +1 -5
- package/dist/components/layout/centered-shell.d.ts +4 -18
- package/dist/components/layout/error-surface.d.ts +11 -28
- package/dist/components/layout/error-surface.js +4 -1
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +2 -0
- package/dist/components/layout/legal-document-shell.d.ts +5 -28
- package/dist/components/layout/master-detail.d.ts +2 -18
- package/dist/components/layout/page-container.js +0 -1
- package/dist/components/layout/responsive-grid.d.ts +6 -1
- package/dist/components/layout/responsive-grid.js +9 -2
- package/dist/components/layout/service-role-panel.d.ts +7 -19
- package/dist/components/layout/sidebar.d.ts +5 -27
- package/dist/components/layout/sidebar.js +0 -1
- package/dist/components/layout/split-pane.d.ts +0 -7
- package/dist/components/layout/topbar.d.ts +1 -14
- package/dist/components/navigation/app-setting-picker.js +1 -3
- package/dist/components/navigation/filter-bar.d.ts +1 -6
- package/dist/components/navigation/pagination-utils.d.ts +2 -12
- package/dist/components/navigation/tabs-scroll.d.ts +2 -36
- package/dist/components/navigation/tabs.js +4 -8
- package/dist/components/query/data-state.d.ts +2 -2
- package/dist/components/ui/credential-reveal.d.ts +1 -4
- package/dist/components/ui/hover-card.d.ts +1 -2
- package/dist/components/ui/separator.d.ts +2 -15
- package/dist/components/ui/toggle-group.d.ts +1 -5
- package/dist/components/ui/toggle.d.ts +6 -31
- package/dist/email/brand-mark.d.ts +6 -34
- package/dist/email/color.d.ts +7 -17
- package/dist/email/geometry.d.ts +4 -8
- package/dist/email/index.d.ts +4 -48
- package/dist/email/inline-style.d.ts +3 -9
- package/dist/email/urgency.d.ts +2 -7
- package/dist/form/form-context.d.ts +2 -5
- package/dist/form/form-root.d.ts +1 -2
- package/dist/i18n/messages/en.json +4 -0
- package/dist/i18n/messages/ja.json +4 -0
- package/dist/i18n/messages/vi.json +4 -0
- package/dist/inertia/index.d.ts +2 -10
- package/dist/lib/control-styles.d.ts +10 -21
- package/dist/lib/control-styles.js +4 -6
- package/dist/lib/datetime/format-date.d.ts +1 -4
- package/dist/lib/field-a11y.d.ts +11 -68
- package/dist/lib/field-a11y.js +0 -1
- package/dist/lib/format.d.ts +4 -8
- package/dist/lib/hooks.d.ts +6 -12
- package/dist/lib/permission-grid.d.ts +3 -18
- package/dist/lib/query-error.d.ts +3 -3
- package/dist/props/components/app.prop.d.ts +15 -38
- package/dist/props/components/charts.prop.d.ts +2 -3
- package/dist/props/components/data-display.prop.d.ts +48 -72
- package/dist/props/components/data-entry.prop.d.ts +35 -40
- package/dist/props/components/form.prop.d.ts +2 -6
- package/dist/props/components/general.prop.d.ts +11 -27
- package/dist/props/components/layout.prop.d.ts +89 -260
- package/dist/props/components/navigation.prop.d.ts +27 -42
- package/dist/props/registry.d.ts +31 -0
- package/dist/props/registry.js +33 -0
- package/dist/props/vocabulary/data.prop.d.ts +18 -49
- package/dist/props/vocabulary/index.d.ts +1 -1
- package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
- package/dist/props/vocabulary/layout.prop.d.ts +8 -30
- package/dist/props/vocabulary/shared.prop.d.ts +3 -2
- package/dist/styles/alert-layout.css +1 -32
- package/dist/styles/badge-layout.css +4 -18
- package/dist/styles/base.css +14 -113
- package/dist/styles/card-layout.css +6 -128
- package/dist/styles/chart-layout.css +2 -17
- package/dist/styles/control.css +380 -458
- package/dist/styles/core.css +21 -0
- package/dist/styles/data-display-layout.css +175 -94
- package/dist/styles/data-entry-layout.css +0 -45
- package/dist/styles/density.css +1 -30
- package/dist/styles/dialog-layout.css +5 -69
- package/dist/styles/focus-ring.css +13 -87
- package/dist/styles/fonts.css +1 -31
- package/dist/styles/form-layout.css +7 -91
- package/dist/styles/index.css +2 -20
- package/dist/styles/layout.css +38 -456
- package/dist/styles/logo-layout.css +1 -35
- package/dist/styles/motion.css +3 -42
- package/dist/styles/navigation-layout.css +3 -50
- package/dist/styles/shell-layout.css +37 -403
- package/dist/styles/table-layout.css +16 -274
- package/dist/styles/text-layout.css +7 -21
- package/dist/styles/toggle.css +1 -23
- package/dist/theme/dxs.canonical.css +1 -55
- package/dist/theme/example.service.css +1 -26
- package/dist/theme/famgia.service.css +5 -15
- package/dist/tokens/axes.css +3 -40
- package/dist/tokens/base.css +1 -4
- package/dist/tokens/components/activity.css +6 -42
- package/dist/tokens/components/badge.css +4 -13
- package/dist/tokens/components/banner.css +4 -9
- package/dist/tokens/components/card.css +32 -88
- package/dist/tokens/components/chart.css +9 -26
- package/dist/tokens/components/control.css +37 -222
- package/dist/tokens/components/data-display.css +28 -79
- package/dist/tokens/components/data-entry.css +5 -19
- package/dist/tokens/components/descriptions.css +7 -27
- package/dist/tokens/components/email.css +38 -84
- package/dist/tokens/components/error-surface.css +2 -18
- package/dist/tokens/components/feedback.css +27 -124
- package/dist/tokens/components/form.css +13 -45
- package/dist/tokens/components/legal-document.css +16 -41
- package/dist/tokens/components/list-row.css +11 -36
- package/dist/tokens/components/logo.css +2 -57
- package/dist/tokens/components/navigation.css +16 -94
- package/dist/tokens/components/scroll-area.css +2 -18
- package/dist/tokens/components/separator.css +8 -30
- package/dist/tokens/components/sheet.css +3 -14
- package/dist/tokens/components/shell.css +53 -307
- package/dist/tokens/components/sidebar.css +5 -22
- package/dist/tokens/components/table.css +19 -140
- package/dist/tokens/components/toggle.css +3 -65
- package/dist/tokens/components/upload.css +7 -43
- package/dist/tokens/foundation.css +108 -383
- package/dist/tokens/semantic/layout.css +33 -207
- package/docs/CANONICAL-CONTRACTS.md +206 -0
- package/docs/COMPONENTS.md +157 -0
- package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
- package/docs/CONSUMER-RULES.md +14 -0
- package/docs/CUSTOMER-THEMING.md +162 -0
- package/docs/DATETIME.md +69 -0
- package/docs/DEVELOPMENT.md +173 -0
- package/docs/FORMS.md +143 -0
- package/docs/FRAME-A11Y-CI.md +267 -0
- package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
- package/docs/FRAME-COVERAGE-REPORT.md +140 -0
- package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
- package/docs/FRAME-COVERAGE.md +29 -0
- package/docs/PROPS-REGISTRY.md +61 -0
- package/docs/PROPS-VOCABULARY.md +100 -0
- package/docs/README.md +60 -0
- package/docs/REGISTRY.md +70 -0
- package/docs/SPACING.md +56 -0
- package/docs/STANDARDS-vocabulary-tokens.md +48 -0
- package/docs/TESTING.md +98 -0
- package/docs/TOKENS.md +347 -0
- package/docs/asset-modules.d.ts +46 -0
- package/docs/assets/cover-terrain.svg +6 -0
- package/docs/assets/portrait-amber.svg +5 -0
- package/docs/assets/portrait-clay.svg +5 -0
- package/docs/assets/portrait-indigo.svg +5 -0
- package/docs/assets/portrait-iris.svg +5 -0
- package/docs/assets/portrait-moss.svg +5 -0
- package/docs/assets/portrait-plum.svg +5 -0
- package/docs/assets/portrait-slate.svg +5 -0
- package/docs/charts/compact-bar-trend.tsx +328 -0
- package/docs/charts/size-tiers.tsx +192 -0
- package/docs/data-display/accordion.tsx +99 -0
- package/docs/data-display/avatar.tsx +355 -0
- package/docs/data-display/badge.tsx +247 -0
- package/docs/data-display/card/examples/detail-panel.tsx +106 -0
- package/docs/data-display/card/index.md +3 -0
- package/docs/data-display/card/index.tsx +285 -0
- package/docs/data-display/carousel.tsx +156 -0
- package/docs/data-display/charts.tsx +198 -0
- package/docs/data-display/code-block.tsx +90 -0
- package/docs/data-display/collapsible.tsx +162 -0
- package/docs/data-display/credential-reveal.tsx +145 -0
- package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
- package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
- package/docs/data-display/data-table/examples/list-page.tsx +175 -0
- package/docs/data-display/data-table/index.md +5 -0
- package/docs/data-display/data-table/index.tsx +295 -0
- package/docs/data-display/descriptions.tsx +143 -0
- package/docs/data-display/empty-state.tsx +164 -0
- package/docs/data-display/hover-card.tsx +181 -0
- package/docs/data-display/list-row.tsx +420 -0
- package/docs/data-display/permission-matrix.tsx +184 -0
- package/docs/data-display/popover-touch.tsx +27 -0
- package/docs/data-display/popover.tsx +245 -0
- package/docs/data-display/progress.tsx +84 -0
- package/docs/data-display/prose.tsx +105 -0
- package/docs/data-display/qr-code.tsx +68 -0
- package/docs/data-display/scroll-area.tsx +271 -0
- package/docs/data-display/service-launcher-card.tsx +145 -0
- package/docs/data-display/stat-card.tsx +99 -0
- package/docs/data-display/table.tsx +251 -0
- package/docs/data-display/timeline.tsx +112 -0
- package/docs/data-display/touch-actions.tsx +36 -0
- package/docs/data-display/tree-list.tsx +107 -0
- package/docs/data-entry/branch-scope-picker.tsx +123 -0
- package/docs/data-entry/calendar.tsx +180 -0
- package/docs/data-entry/cascader.tsx +378 -0
- package/docs/data-entry/checkbox.tsx +256 -0
- package/docs/data-entry/color-picker.tsx +117 -0
- package/docs/data-entry/command-palette.tsx +179 -0
- package/docs/data-entry/command.tsx +262 -0
- package/docs/data-entry/country-picker-recipe.tsx +170 -0
- package/docs/data-entry/date-picker.tsx +191 -0
- package/docs/data-entry/date-range-picker.tsx +149 -0
- package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
- package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
- package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
- package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
- package/docs/data-entry/form-field/index.md +8 -0
- package/docs/data-entry/form-field/index.tsx +326 -0
- package/docs/data-entry/form-inertia.tsx +80 -0
- package/docs/data-entry/form-root.tsx +102 -0
- package/docs/data-entry/form.tsx +724 -0
- package/docs/data-entry/input-otp.tsx +231 -0
- package/docs/data-entry/input.tsx +114 -0
- package/docs/data-entry/label.tsx +100 -0
- package/docs/data-entry/month-picker.tsx +101 -0
- package/docs/data-entry/month-range-picker.tsx +115 -0
- package/docs/data-entry/number-input.tsx +240 -0
- package/docs/data-entry/password-input.tsx +106 -0
- package/docs/data-entry/password-strength.tsx +97 -0
- package/docs/data-entry/radio-group.tsx +95 -0
- package/docs/data-entry/rating.tsx +87 -0
- package/docs/data-entry/search-input.tsx +120 -0
- package/docs/data-entry/select-async-contracts.tsx +108 -0
- package/docs/data-entry/select-matrix.tsx +204 -0
- package/docs/data-entry/select.tsx +369 -0
- package/docs/data-entry/slider.tsx +130 -0
- package/docs/data-entry/switch.tsx +67 -0
- package/docs/data-entry/tag-input.tsx +108 -0
- package/docs/data-entry/textarea.tsx +209 -0
- package/docs/data-entry/time-picker.tsx +99 -0
- package/docs/data-entry/toggle-count.tsx +293 -0
- package/docs/data-entry/toggle-group.tsx +225 -0
- package/docs/data-entry/toggle.tsx +127 -0
- package/docs/data-entry/transfer.tsx +97 -0
- package/docs/data-entry/tree-select.tsx +204 -0
- package/docs/data-entry/upload.tsx +184 -0
- package/docs/feedback/alert-dialog.tsx +270 -0
- package/docs/feedback/alert.tsx +248 -0
- package/docs/feedback/banner.tsx +183 -0
- package/docs/feedback/danger-confirm.tsx +88 -0
- package/docs/feedback/dialog-touch.tsx +24 -0
- package/docs/feedback/dialog.tsx +193 -0
- package/docs/feedback/sheet.tsx +410 -0
- package/docs/feedback/skeleton.tsx +111 -0
- package/docs/feedback/toast.tsx +135 -0
- package/docs/feedback/tooltip.tsx +171 -0
- package/docs/feedback/two-factor-setup.tsx +68 -0
- package/docs/foundation/_email-specimen.ts +274 -0
- package/docs/foundation/colors.tsx +202 -0
- package/docs/foundation/density.tsx +232 -0
- package/docs/foundation/email-tokens.tsx +306 -0
- package/docs/foundation/radius-shadow.tsx +152 -0
- package/docs/foundation/spacing.tsx +211 -0
- package/docs/foundation/typography.tsx +147 -0
- package/docs/general/activity.tsx +224 -0
- package/docs/general/button/examples/destructive-confirm.tsx +90 -0
- package/docs/general/button/examples/form-actions.tsx +85 -0
- package/docs/general/button/examples/toolbar.tsx +160 -0
- package/docs/general/button/index.md +12 -0
- package/docs/general/button/index.tsx +211 -0
- package/docs/general/logo.tsx +131 -0
- package/docs/general/reveal.tsx +41 -0
- package/docs/general/typography.tsx +152 -0
- package/docs/layout/account-chip.tsx +72 -0
- package/docs/layout/admin-collection.tsx +122 -0
- package/docs/layout/app-shell.tsx +374 -0
- package/docs/layout/aspect-ratio.tsx +119 -0
- package/docs/layout/auth-account-summary.tsx +103 -0
- package/docs/layout/auth-divider.tsx +28 -0
- package/docs/layout/auth-footer.tsx +37 -0
- package/docs/layout/auth-identity.tsx +36 -0
- package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
- package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
- package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
- package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
- package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
- package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
- package/docs/layout/auth-recovery/index.md +140 -0
- package/docs/layout/auth-recovery/index.tsx +96 -0
- package/docs/layout/auth-shell-context.tsx +103 -0
- package/docs/layout/auth-shell-device.tsx +112 -0
- package/docs/layout/auth-shell-registration.tsx +335 -0
- package/docs/layout/auth-shell-variants.tsx +139 -0
- package/docs/layout/auth-shell.tsx +59 -0
- package/docs/layout/auth-stack.tsx +40 -0
- package/docs/layout/centered-shell.tsx +102 -0
- package/docs/layout/error-surface/examples/application-403.tsx +84 -0
- package/docs/layout/error-surface/examples/application-404.tsx +77 -0
- package/docs/layout/error-surface/examples/system-500.tsx +47 -0
- package/docs/layout/error-surface/examples/system-503.tsx +48 -0
- package/docs/layout/error-surface/index.md +153 -0
- package/docs/layout/error-surface/index.tsx +239 -0
- package/docs/layout/flex.tsx +262 -0
- package/docs/layout/legal-document-shell/_data.ts +110 -0
- package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
- package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
- package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
- package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
- package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
- package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
- package/docs/layout/legal-document-shell/index.md +51 -0
- package/docs/layout/legal-document-shell/index.tsx +101 -0
- package/docs/layout/master-detail.tsx +387 -0
- package/docs/layout/org-switcher.tsx +131 -0
- package/docs/layout/page-container.tsx +946 -0
- package/docs/layout/resizable-panel.tsx +419 -0
- package/docs/layout/responsive-grid.tsx +235 -0
- package/docs/layout/separator.tsx +327 -0
- package/docs/layout/service-role-panel.tsx +144 -0
- package/docs/layout/sidebar.tsx +586 -0
- package/docs/layout/split-pane.tsx +451 -0
- package/docs/layout/topbar.tsx +347 -0
- package/docs/navigation/app-setting-picker.tsx +141 -0
- package/docs/navigation/breadcrumb.tsx +128 -0
- package/docs/navigation/context-menu.tsx +117 -0
- package/docs/navigation/dropdown-menu.tsx +213 -0
- package/docs/navigation/filter-bar.tsx +227 -0
- package/docs/navigation/menubar.tsx +141 -0
- package/docs/navigation/navigation-menu.tsx +165 -0
- package/docs/navigation/pagination.tsx +241 -0
- package/docs/navigation/steps.tsx +263 -0
- package/docs/navigation/tabs-rtl.tsx +28 -0
- package/docs/navigation/tabs.tsx +308 -0
- package/docs/navigation/toolbar.tsx +339 -0
- package/docs/providers/app-provider.tsx +191 -0
- package/docs/providers/format-date.tsx +230 -0
- package/docs/query/button-refetch.tsx +160 -0
- package/docs/query/data-state.tsx +192 -0
- package/docs/query/infinite-query-state.tsx +93 -0
- package/docs/query/mutation-feedback.tsx +70 -0
- package/docs/query/prefetch-link.tsx +262 -0
- package/docs/query/touch-actions.tsx +68 -0
- package/docs/showcase/acme-portal.tsx +441 -0
- package/docs/showcase/acme-website.tsx +455 -0
- package/docs/showcase/case1-warehouse-dashboard.tsx +343 -0
- package/docs/showcase/case2-employee-me.tsx +441 -0
- package/docs/showcase/case3-approval-workflow.tsx +527 -0
- package/docs/showcase/case4-login.tsx +307 -0
- package/docs/showcase/case5-shift-calendar.tsx +795 -0
- package/docs/showcase/case6-agency-handy.tsx +1072 -0
- package/docs/showcase/futurelastic-web.tsx +390 -0
- package/docs/showcase/org-switcher.tsx +313 -0
- package/docs/showcase/permission-matrix.tsx +343 -0
- package/docs/showcase/public-landing.tsx +210 -0
- package/docs/showcase/settings-account-sections.tsx +559 -0
- package/docs/showcase/settings-security-mfa.tsx +145 -0
- package/docs/showcase/table-approval-queue.tsx +199 -0
- package/docs/showcase/table-bulk-actions.tsx +460 -0
- package/docs/showcase/table-compact-kintone.tsx +438 -0
- package/docs/showcase/table-conditional-format.tsx +367 -0
- package/docs/showcase/table-crud-list.tsx +544 -0
- package/docs/showcase/table-density.tsx +340 -0
- package/docs/showcase/table-expandable-rows.tsx +471 -0
- package/docs/showcase/table-filter-chips.tsx +461 -0
- package/docs/showcase/table-footer-totals.tsx +311 -0
- package/docs/showcase/table-grouped-subtotals.tsx +388 -0
- package/docs/showcase/table-master-detail.tsx +479 -0
- package/docs/showcase/table-pagination.tsx +320 -0
- package/docs/showcase/table-states.tsx +363 -0
- package/docs/showcase/table-sticky-columns.tsx +373 -0
- package/docs/showcase/table-tree-rows.tsx +444 -0
- package/docs/showcase/table-view-tabs.tsx +488 -0
- package/package.json +9 -11
- package/scripts/_agent-setup.mjs +16 -2
- package/scripts/audit-hook.mjs +3 -13
- package/scripts/init-agent-kit.mjs +1 -14
- package/scripts/postinstall.mjs +12 -12
- package/scripts/ui-audit.mjs +93 -31
- package/scripts/visual-audit-rules.mjs +51 -7
- package/scripts/visual-audit.mjs +118 -47
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Avatar,
|
|
3
|
+
AvatarFallback,
|
|
4
|
+
AvatarImage,
|
|
5
|
+
Card,
|
|
6
|
+
CardContent,
|
|
7
|
+
CardDescription,
|
|
8
|
+
CardHeader,
|
|
9
|
+
CardTitle,
|
|
10
|
+
HoverCard,
|
|
11
|
+
HoverCardContent,
|
|
12
|
+
HoverCardTrigger,
|
|
13
|
+
} from "@godxjp/ui/data-display";
|
|
14
|
+
import { Button, Text } from "@godxjp/ui/general";
|
|
15
|
+
import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* HoverCard — a rich popover shown on hover/focus of a trigger (sighted-pointer
|
|
19
|
+
* affordance; not a replacement for Tooltip). Composed only from real
|
|
20
|
+
* @godxjp/ui components. Touch layouts must keep essential identity/actions visible in the
|
|
21
|
+
* trigger or destination; never make HoverCard the only route to required information.
|
|
22
|
+
*/
|
|
23
|
+
export default function Demo() {
|
|
24
|
+
return (
|
|
25
|
+
<PageContainer
|
|
26
|
+
title="HoverCard"
|
|
27
|
+
subtitle="Rich preview on hover/focus · entity peek, user card, positioning & delay"
|
|
28
|
+
>
|
|
29
|
+
<Flex direction="col" gap="lg">
|
|
30
|
+
{/* Entity peek — hover (or focus) the link to reveal the card */}
|
|
31
|
+
<Card>
|
|
32
|
+
<CardHeader>
|
|
33
|
+
<CardTitle level={2}>取引先プレビュー</CardTitle>
|
|
34
|
+
<CardDescription>
|
|
35
|
+
リンクをホバーまたはフォーカスすると、ページを離れずに取引先を確認できます。トリガーは
|
|
36
|
+
フォーカス可能なリンクなので、キーボード操作でも開きます。
|
|
37
|
+
</CardDescription>
|
|
38
|
+
</CardHeader>
|
|
39
|
+
<CardContent>
|
|
40
|
+
<HoverCard>
|
|
41
|
+
<HoverCardTrigger asChild>
|
|
42
|
+
<Button variant="link">株式会社ベトヤ</Button>
|
|
43
|
+
</HoverCardTrigger>
|
|
44
|
+
<HoverCardContent>
|
|
45
|
+
<Flex direction="row" gap="md" align="center">
|
|
46
|
+
<Avatar>
|
|
47
|
+
<AvatarFallback>VB</AvatarFallback>
|
|
48
|
+
</Avatar>
|
|
49
|
+
<Flex direction="col" gap="xs">
|
|
50
|
+
<Text weight="medium">株式会社ベトヤ</Text>
|
|
51
|
+
<Text size="xs" tone="muted">
|
|
52
|
+
取引先 · BTY-0012 · 売掛 ¥482,000
|
|
53
|
+
</Text>
|
|
54
|
+
</Flex>
|
|
55
|
+
</Flex>
|
|
56
|
+
</HoverCardContent>
|
|
57
|
+
</HoverCard>
|
|
58
|
+
</CardContent>
|
|
59
|
+
</Card>
|
|
60
|
+
|
|
61
|
+
{/* User card — the second pattern promised by the subtitle */}
|
|
62
|
+
<Card>
|
|
63
|
+
<CardHeader>
|
|
64
|
+
<CardTitle level={2}>ユーザーカード</CardTitle>
|
|
65
|
+
<CardDescription>
|
|
66
|
+
担当者名にホバーすると、連絡先と所属を含むユーザーカードを表示します。
|
|
67
|
+
</CardDescription>
|
|
68
|
+
</CardHeader>
|
|
69
|
+
<CardContent>
|
|
70
|
+
<HoverCard>
|
|
71
|
+
<HoverCardTrigger asChild>
|
|
72
|
+
<Button variant="link">田中 美咲</Button>
|
|
73
|
+
</HoverCardTrigger>
|
|
74
|
+
<HoverCardContent>
|
|
75
|
+
<Flex direction="row" gap="md" align="center">
|
|
76
|
+
<Avatar>
|
|
77
|
+
<AvatarImage src="/avatars/tanaka.png" alt="田中 美咲" />
|
|
78
|
+
<AvatarFallback>田</AvatarFallback>
|
|
79
|
+
</Avatar>
|
|
80
|
+
<Flex direction="col" gap="xs">
|
|
81
|
+
<Text weight="medium">田中 美咲</Text>
|
|
82
|
+
<Text size="xs" tone="muted">
|
|
83
|
+
営業部 · 主任
|
|
84
|
+
</Text>
|
|
85
|
+
<Text size="xs" tone="muted">
|
|
86
|
+
misaki.tanaka@example.co.jp
|
|
87
|
+
</Text>
|
|
88
|
+
</Flex>
|
|
89
|
+
</Flex>
|
|
90
|
+
</HoverCardContent>
|
|
91
|
+
</HoverCard>
|
|
92
|
+
</CardContent>
|
|
93
|
+
</Card>
|
|
94
|
+
|
|
95
|
+
{/* Positioning — every `side` value, plus `align` and `sideOffset` */}
|
|
96
|
+
<Card>
|
|
97
|
+
<CardHeader>
|
|
98
|
+
<CardTitle level={2}>配置(side · align · sideOffset)</CardTitle>
|
|
99
|
+
<CardDescription>
|
|
100
|
+
ポップオーバーを開く向きは side(top / right / bottom / left)、トリガーに沿った
|
|
101
|
+
位置は align、トリガーとの距離は sideOffset で制御します。各リンクをホバーすると
|
|
102
|
+
その向きで表示されます。
|
|
103
|
+
</CardDescription>
|
|
104
|
+
</CardHeader>
|
|
105
|
+
<CardContent>
|
|
106
|
+
<ResponsiveGrid columns={{ sm: 1, md: 2, lg: 4 }}>
|
|
107
|
+
<HoverCard>
|
|
108
|
+
<HoverCardTrigger asChild>
|
|
109
|
+
<Button variant="link">side=top</Button>
|
|
110
|
+
</HoverCardTrigger>
|
|
111
|
+
<HoverCardContent side="top">
|
|
112
|
+
<Text>上に表示(align=center)</Text>
|
|
113
|
+
</HoverCardContent>
|
|
114
|
+
</HoverCard>
|
|
115
|
+
|
|
116
|
+
<HoverCard>
|
|
117
|
+
<HoverCardTrigger asChild>
|
|
118
|
+
<Button variant="link">side=right</Button>
|
|
119
|
+
</HoverCardTrigger>
|
|
120
|
+
<HoverCardContent side="right" align="start">
|
|
121
|
+
<Text>右に表示(align=start)</Text>
|
|
122
|
+
</HoverCardContent>
|
|
123
|
+
</HoverCard>
|
|
124
|
+
|
|
125
|
+
<HoverCard>
|
|
126
|
+
<HoverCardTrigger asChild>
|
|
127
|
+
<Button variant="link">side=bottom</Button>
|
|
128
|
+
</HoverCardTrigger>
|
|
129
|
+
<HoverCardContent side="bottom" align="end">
|
|
130
|
+
<Text>下に表示(align=end)</Text>
|
|
131
|
+
</HoverCardContent>
|
|
132
|
+
</HoverCard>
|
|
133
|
+
|
|
134
|
+
<HoverCard>
|
|
135
|
+
<HoverCardTrigger asChild>
|
|
136
|
+
<Button variant="link">side=left</Button>
|
|
137
|
+
</HoverCardTrigger>
|
|
138
|
+
<HoverCardContent side="left" sideOffset={12}>
|
|
139
|
+
<Text>左に表示(sideOffset=12)</Text>
|
|
140
|
+
</HoverCardContent>
|
|
141
|
+
</HoverCard>
|
|
142
|
+
</ResponsiveGrid>
|
|
143
|
+
</CardContent>
|
|
144
|
+
</Card>
|
|
145
|
+
|
|
146
|
+
{/* Delay — openDelay / closeDelay tune the hover affordance */}
|
|
147
|
+
<Card>
|
|
148
|
+
<CardHeader>
|
|
149
|
+
<CardTitle level={2}>開閉ディレイ(openDelay · closeDelay)</CardTitle>
|
|
150
|
+
<CardDescription>
|
|
151
|
+
openDelay はホバーから表示までの待ち時間、closeDelay は離れてから閉じるまでの
|
|
152
|
+
猶予です。長い openDelay で誤爆を防ぎ、長い closeDelay でポップオーバー内へ
|
|
153
|
+
ポインタを移動しやすくします。
|
|
154
|
+
</CardDescription>
|
|
155
|
+
</CardHeader>
|
|
156
|
+
<CardContent>
|
|
157
|
+
<Flex direction="row" gap="lg" wrap>
|
|
158
|
+
<HoverCard openDelay={700} closeDelay={150}>
|
|
159
|
+
<HoverCardTrigger asChild>
|
|
160
|
+
<Button variant="link">openDelay=700ms</Button>
|
|
161
|
+
</HoverCardTrigger>
|
|
162
|
+
<HoverCardContent>
|
|
163
|
+
<Text>待ってから表示。意図しないホバーで開きません。</Text>
|
|
164
|
+
</HoverCardContent>
|
|
165
|
+
</HoverCard>
|
|
166
|
+
|
|
167
|
+
<HoverCard openDelay={0} closeDelay={600}>
|
|
168
|
+
<HoverCardTrigger asChild>
|
|
169
|
+
<Button variant="link">closeDelay=600ms</Button>
|
|
170
|
+
</HoverCardTrigger>
|
|
171
|
+
<HoverCardContent>
|
|
172
|
+
<Text>即座に表示し、離れても少し残るのでカード内に移動できます。</Text>
|
|
173
|
+
</HoverCardContent>
|
|
174
|
+
</HoverCard>
|
|
175
|
+
</Flex>
|
|
176
|
+
</CardContent>
|
|
177
|
+
</Card>
|
|
178
|
+
</Flex>
|
|
179
|
+
</PageContainer>
|
|
180
|
+
);
|
|
181
|
+
}
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Avatar,
|
|
3
|
+
AvatarFallback,
|
|
4
|
+
Badge,
|
|
5
|
+
Card,
|
|
6
|
+
CardContent,
|
|
7
|
+
CardDescription,
|
|
8
|
+
CardHeader,
|
|
9
|
+
CardTitle,
|
|
10
|
+
ListRow,
|
|
11
|
+
} from "@godxjp/ui/data-display";
|
|
12
|
+
import { Button, Text } from "@godxjp/ui/general";
|
|
13
|
+
import { Flex, PageContainer } from "@godxjp/ui/layout";
|
|
14
|
+
import { KeyRound, Laptop, Link2, Smartphone } from "lucide-react";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* ListRow — the single-line entity-row surface for SHORT lists inside a Card. Replaces the
|
|
18
|
+
* hand-rolled `flex items-center justify-between border-b py-3` repeated across account pages.
|
|
19
|
+
* Drop rows into a flush CardContent: they stack with a quiet divider and the Card border closes
|
|
20
|
+
* the list. Border / radius / padding are tokenized (`--list-row-*`).
|
|
21
|
+
*/
|
|
22
|
+
export default function Demo() {
|
|
23
|
+
return (
|
|
24
|
+
<PageContainer
|
|
25
|
+
title="ListRow"
|
|
26
|
+
subtitle="leading · title/description · trailing action · short entity lists inside a Card"
|
|
27
|
+
>
|
|
28
|
+
<Flex direction="col" gap="lg">
|
|
29
|
+
<Card>
|
|
30
|
+
<CardHeader>
|
|
31
|
+
<CardTitle level={2}>アクティブなセッション Active sessions</CardTitle>
|
|
32
|
+
<CardDescription>
|
|
33
|
+
Rows live in a flush CardContent and draw their own dividers. Trailing holds the row
|
|
34
|
+
action: a status Badge or a destructive Button.
|
|
35
|
+
</CardDescription>
|
|
36
|
+
</CardHeader>
|
|
37
|
+
<CardContent flush>
|
|
38
|
+
<ListRow
|
|
39
|
+
leading={<Smartphone aria-hidden="true" className="size-4" />}
|
|
40
|
+
title="iPhone 15 · Tokyo"
|
|
41
|
+
description="最終アクセス 2分前 · 153.240.x.x"
|
|
42
|
+
trailing={<Badge status="active" />}
|
|
43
|
+
/>
|
|
44
|
+
<ListRow
|
|
45
|
+
leading={<Laptop aria-hidden="true" className="size-4" />}
|
|
46
|
+
title="MacBook Pro · Osaka"
|
|
47
|
+
description="最終アクセス 3日前 · 126.18.x.x"
|
|
48
|
+
trailing={
|
|
49
|
+
<Button size="xs" variant="outline">
|
|
50
|
+
ログアウト Sign out
|
|
51
|
+
</Button>
|
|
52
|
+
}
|
|
53
|
+
/>
|
|
54
|
+
<ListRow
|
|
55
|
+
leading={<Laptop aria-hidden="true" className="size-4" />}
|
|
56
|
+
title="Windows · Nagoya"
|
|
57
|
+
description="最終アクセス 先月 · 49.98.x.x"
|
|
58
|
+
trailing={
|
|
59
|
+
<Button size="xs" variant="outline">
|
|
60
|
+
ログアウト Sign out
|
|
61
|
+
</Button>
|
|
62
|
+
}
|
|
63
|
+
/>
|
|
64
|
+
</CardContent>
|
|
65
|
+
</Card>
|
|
66
|
+
|
|
67
|
+
<Card>
|
|
68
|
+
<CardHeader>
|
|
69
|
+
<CardTitle level={2}>連携アカウント Linked accounts</CardTitle>
|
|
70
|
+
<CardDescription>
|
|
71
|
+
Leading takes an icon or Avatar; trailing takes any action control. `as="li"` when the
|
|
72
|
+
rows are a semantic list.
|
|
73
|
+
</CardDescription>
|
|
74
|
+
</CardHeader>
|
|
75
|
+
<CardContent flush>
|
|
76
|
+
{/* `as="li"` rows are a SEMANTIC list — axe's `listitem` rule requires the parent to
|
|
77
|
+
actually be a list container (ul/ol/role=list), not just visually stacked divs. */}
|
|
78
|
+
<ul>
|
|
79
|
+
<ListRow
|
|
80
|
+
as="li"
|
|
81
|
+
leading={<Link2 aria-hidden="true" className="size-4" />}
|
|
82
|
+
title="GitHub"
|
|
83
|
+
description="taro@example.com として接続済み"
|
|
84
|
+
trailing={
|
|
85
|
+
<Button size="xs" variant="ghost">
|
|
86
|
+
解除 Disconnect
|
|
87
|
+
</Button>
|
|
88
|
+
}
|
|
89
|
+
/>
|
|
90
|
+
<ListRow
|
|
91
|
+
as="li"
|
|
92
|
+
leading={<KeyRound aria-hidden="true" className="size-4" />}
|
|
93
|
+
title="Passkey · iCloud Keychain"
|
|
94
|
+
description="2026年3月12日に追加"
|
|
95
|
+
trailing={<Badge tone="neutral">未使用</Badge>}
|
|
96
|
+
/>
|
|
97
|
+
</ul>
|
|
98
|
+
</CardContent>
|
|
99
|
+
</Card>
|
|
100
|
+
|
|
101
|
+
{/* #224 — a long organization name plus TWO trailing Buttons. The content column shrinks
|
|
102
|
+
to `min(--list-row-body-min-width, 100%)` and the actions wrap onto their own line at
|
|
103
|
+
narrow widths, so the page root never scrolls horizontally at 390px. */}
|
|
104
|
+
<Card>
|
|
105
|
+
<CardHeader>
|
|
106
|
+
<CardTitle level={2}>招待 Pending invitations</CardTitle>
|
|
107
|
+
<CardDescription>
|
|
108
|
+
Long titles + two actions: the row wraps instead of widening the page. Retune the
|
|
109
|
+
stack threshold with `--list-row-body-min-width`, the action gap with
|
|
110
|
+
`--list-row-trailing-gap`.
|
|
111
|
+
</CardDescription>
|
|
112
|
+
</CardHeader>
|
|
113
|
+
<CardContent flush>
|
|
114
|
+
<ListRow
|
|
115
|
+
align="start"
|
|
116
|
+
overflow="wrap"
|
|
117
|
+
leading={
|
|
118
|
+
<Avatar className="size-8">
|
|
119
|
+
<AvatarFallback>グ</AvatarFallback>
|
|
120
|
+
</Avatar>
|
|
121
|
+
}
|
|
122
|
+
title="グローバル・トランスフォーメーション推進本部 デジタルプラットフォーム統括部"
|
|
123
|
+
description="招待者 山田 太郎 · 2026-07-28"
|
|
124
|
+
trailing={
|
|
125
|
+
<>
|
|
126
|
+
<Button size="xs" variant="ghost">
|
|
127
|
+
辞退 Decline
|
|
128
|
+
</Button>
|
|
129
|
+
<Button size="xs" variant="outline">
|
|
130
|
+
参加 Accept
|
|
131
|
+
</Button>
|
|
132
|
+
</>
|
|
133
|
+
}
|
|
134
|
+
/>
|
|
135
|
+
<ListRow
|
|
136
|
+
align="start"
|
|
137
|
+
overflow="wrap"
|
|
138
|
+
leading={
|
|
139
|
+
<Avatar className="size-8">
|
|
140
|
+
<AvatarFallback>T</AvatarFallback>
|
|
141
|
+
</Avatar>
|
|
142
|
+
}
|
|
143
|
+
title="Trung tâm Điều phối Chuyển đổi số và Quản trị Dữ liệu Doanh nghiệp Toàn cầu"
|
|
144
|
+
description="Người mời nguyễn.van.a@example.com · 2026-07-27"
|
|
145
|
+
trailing={
|
|
146
|
+
<>
|
|
147
|
+
<Button size="xs" variant="ghost">
|
|
148
|
+
Từ chối
|
|
149
|
+
</Button>
|
|
150
|
+
<Button size="xs" variant="outline">
|
|
151
|
+
Chấp nhận
|
|
152
|
+
</Button>
|
|
153
|
+
</>
|
|
154
|
+
}
|
|
155
|
+
/>
|
|
156
|
+
<ListRow
|
|
157
|
+
leading={
|
|
158
|
+
<Avatar className="size-8">
|
|
159
|
+
<AvatarFallback>A</AvatarFallback>
|
|
160
|
+
</Avatar>
|
|
161
|
+
}
|
|
162
|
+
title="Acme Global Transformation Office · Data Platform Division"
|
|
163
|
+
description="Invited by taro@example.com · 2026-07-26"
|
|
164
|
+
trailing={
|
|
165
|
+
<>
|
|
166
|
+
<Button size="xs" variant="ghost">
|
|
167
|
+
Decline
|
|
168
|
+
</Button>
|
|
169
|
+
<Button size="xs" variant="outline">
|
|
170
|
+
Accept
|
|
171
|
+
</Button>
|
|
172
|
+
</>
|
|
173
|
+
}
|
|
174
|
+
/>
|
|
175
|
+
</CardContent>
|
|
176
|
+
</Card>
|
|
177
|
+
|
|
178
|
+
{/* #246 — `density="compact"` inline-actions geometry. Inside the canonical narrow card
|
|
179
|
+
(358px at a 390px viewport → 326px content column) the 36px Avatar, the shrinkable
|
|
180
|
+
title/description and the two small trailing Buttons stay on ONE line, and the history
|
|
181
|
+
rows keep their status Badge + ISO-8601 date inline with the title. The #224 wrap
|
|
182
|
+
contract is untouched: a cluster that cannot fit still wraps, never widening the page. */}
|
|
183
|
+
<Card>
|
|
184
|
+
<CardHeader>
|
|
185
|
+
<CardTitle level={2}>招待 · コンパクト Compact invitations</CardTitle>
|
|
186
|
+
<CardDescription>
|
|
187
|
+
`density="compact"` lowers the row inset, the column gap and the body
|
|
188
|
+
threshold (`--list-row-compact-*`) so avatar · title · actions read as one line in a
|
|
189
|
+
narrow card, instead of the actions dropping to a second row.
|
|
190
|
+
</CardDescription>
|
|
191
|
+
</CardHeader>
|
|
192
|
+
<CardContent flush>
|
|
193
|
+
<ListRow
|
|
194
|
+
density="compact"
|
|
195
|
+
leading={
|
|
196
|
+
<Avatar className="size-9">
|
|
197
|
+
<AvatarFallback>グ</AvatarFallback>
|
|
198
|
+
</Avatar>
|
|
199
|
+
}
|
|
200
|
+
title="グローバル推進本部"
|
|
201
|
+
description="山田 太郎 · 2026-07-28"
|
|
202
|
+
trailing={
|
|
203
|
+
<>
|
|
204
|
+
<Button size="xs" variant="ghost">
|
|
205
|
+
辞退
|
|
206
|
+
</Button>
|
|
207
|
+
<Button size="xs" variant="outline">
|
|
208
|
+
参加
|
|
209
|
+
</Button>
|
|
210
|
+
</>
|
|
211
|
+
}
|
|
212
|
+
/>
|
|
213
|
+
<ListRow
|
|
214
|
+
density="compact"
|
|
215
|
+
leading={
|
|
216
|
+
<Avatar className="size-9">
|
|
217
|
+
<AvatarFallback>T</AvatarFallback>
|
|
218
|
+
</Avatar>
|
|
219
|
+
}
|
|
220
|
+
title="Trung tâm Dữ liệu"
|
|
221
|
+
description="nguyen.van.a@example.com · 2026-07-27"
|
|
222
|
+
trailing={
|
|
223
|
+
<>
|
|
224
|
+
<Button size="xs" variant="ghost">
|
|
225
|
+
Từ chối
|
|
226
|
+
</Button>
|
|
227
|
+
<Button size="xs" variant="outline">
|
|
228
|
+
Đồng ý
|
|
229
|
+
</Button>
|
|
230
|
+
</>
|
|
231
|
+
}
|
|
232
|
+
/>
|
|
233
|
+
<ListRow
|
|
234
|
+
density="compact"
|
|
235
|
+
leading={
|
|
236
|
+
<Avatar className="size-9">
|
|
237
|
+
<AvatarFallback>A</AvatarFallback>
|
|
238
|
+
</Avatar>
|
|
239
|
+
}
|
|
240
|
+
title="Acme Data Platform"
|
|
241
|
+
description="taro@example.com · 2026-07-26"
|
|
242
|
+
trailing={
|
|
243
|
+
<>
|
|
244
|
+
<Button size="xs" variant="ghost">
|
|
245
|
+
Decline
|
|
246
|
+
</Button>
|
|
247
|
+
<Button size="xs" variant="outline">
|
|
248
|
+
Accept
|
|
249
|
+
</Button>
|
|
250
|
+
</>
|
|
251
|
+
}
|
|
252
|
+
/>
|
|
253
|
+
{/* Compact does NOT give up the #224 safety net: a title too long for the compact
|
|
254
|
+
threshold still wraps (and the actions drop to their own line if they cannot fit),
|
|
255
|
+
so the page root never scrolls horizontally. */}
|
|
256
|
+
<ListRow
|
|
257
|
+
density="compact"
|
|
258
|
+
align="start"
|
|
259
|
+
overflow="wrap"
|
|
260
|
+
leading={
|
|
261
|
+
<Avatar className="size-9">
|
|
262
|
+
<AvatarFallback>グ</AvatarFallback>
|
|
263
|
+
</Avatar>
|
|
264
|
+
}
|
|
265
|
+
title="グローバル・トランスフォーメーション推進本部 デジタルプラットフォーム統括部"
|
|
266
|
+
description="Trung tâm Điều phối Chuyển đổi số · 2026-07-25"
|
|
267
|
+
trailing={
|
|
268
|
+
<>
|
|
269
|
+
<Button size="xs" variant="ghost">
|
|
270
|
+
辞退 Decline
|
|
271
|
+
</Button>
|
|
272
|
+
<Button size="xs" variant="outline">
|
|
273
|
+
参加 Accept
|
|
274
|
+
</Button>
|
|
275
|
+
</>
|
|
276
|
+
}
|
|
277
|
+
/>
|
|
278
|
+
</CardContent>
|
|
279
|
+
</Card>
|
|
280
|
+
|
|
281
|
+
{/* #246 — the compact HISTORY row: no leading slot, status Badge + ISO-8601 date inline. */}
|
|
282
|
+
<Card>
|
|
283
|
+
<CardHeader>
|
|
284
|
+
<CardTitle level={2}>履歴 Invitation history</CardTitle>
|
|
285
|
+
<CardDescription>
|
|
286
|
+
A compact row with a status Badge and an ISO-8601 date in `trailing` stays a single
|
|
287
|
+
line at 390px. The metadata never drops under the title.
|
|
288
|
+
</CardDescription>
|
|
289
|
+
</CardHeader>
|
|
290
|
+
<CardContent flush>
|
|
291
|
+
<ListRow
|
|
292
|
+
density="compact"
|
|
293
|
+
title="グローバル推進本部"
|
|
294
|
+
trailing={
|
|
295
|
+
<>
|
|
296
|
+
<Badge tone="success">承認済み</Badge>
|
|
297
|
+
<Text size="xs" tone="muted">
|
|
298
|
+
2026-07-12
|
|
299
|
+
</Text>
|
|
300
|
+
</>
|
|
301
|
+
}
|
|
302
|
+
/>
|
|
303
|
+
<ListRow
|
|
304
|
+
density="compact"
|
|
305
|
+
title="Trung tâm Dữ liệu"
|
|
306
|
+
trailing={
|
|
307
|
+
<>
|
|
308
|
+
<Badge tone="neutral">期限切れ</Badge>
|
|
309
|
+
<Text size="xs" tone="muted">
|
|
310
|
+
2026-06-30
|
|
311
|
+
</Text>
|
|
312
|
+
</>
|
|
313
|
+
}
|
|
314
|
+
/>
|
|
315
|
+
<ListRow
|
|
316
|
+
density="compact"
|
|
317
|
+
title="Acme Data Platform"
|
|
318
|
+
trailing={
|
|
319
|
+
<>
|
|
320
|
+
<Badge tone="destructive">辞退</Badge>
|
|
321
|
+
<Text size="xs" tone="muted">
|
|
322
|
+
2026-06-18
|
|
323
|
+
</Text>
|
|
324
|
+
</>
|
|
325
|
+
}
|
|
326
|
+
/>
|
|
327
|
+
</CardContent>
|
|
328
|
+
</Card>
|
|
329
|
+
|
|
330
|
+
{/* Both density branches on the same content, so the inset difference is readable at rest
|
|
331
|
+
without toggling anything. `default` is what a row renders with density omitted. */}
|
|
332
|
+
<Card>
|
|
333
|
+
<CardHeader>
|
|
334
|
+
<CardTitle level={2}>密度の対比 density=default vs compact</CardTitle>
|
|
335
|
+
<CardDescription>
|
|
336
|
+
同じ行を density="default"(既定 · ゆとりのある行間)と
|
|
337
|
+
density="compact"(明細向けの詰めた行間)で並べています。切り替えるのは
|
|
338
|
+
inset · 列間 · 本文の折り返し閾値だけで、内容と操作は変わりません。
|
|
339
|
+
</CardDescription>
|
|
340
|
+
</CardHeader>
|
|
341
|
+
<CardContent flush>
|
|
342
|
+
<ListRow
|
|
343
|
+
density="default"
|
|
344
|
+
leading={<Laptop aria-hidden="true" className="size-4" />}
|
|
345
|
+
title="MacBook Pro · Osaka"
|
|
346
|
+
description={'density="default" · 最終アクセス 3日前'}
|
|
347
|
+
trailing={<Badge status="active" />}
|
|
348
|
+
/>
|
|
349
|
+
<ListRow
|
|
350
|
+
density="compact"
|
|
351
|
+
leading={<Laptop aria-hidden="true" className="size-4" />}
|
|
352
|
+
title="MacBook Pro · Osaka"
|
|
353
|
+
description={'density="compact" · 最終アクセス 3日前'}
|
|
354
|
+
trailing={<Badge status="active" />}
|
|
355
|
+
/>
|
|
356
|
+
</CardContent>
|
|
357
|
+
</Card>
|
|
358
|
+
|
|
359
|
+
{/* #225 — notification rows. `unread` renders the indicator dot (a SHAPE with localized
|
|
360
|
+
sr-only text, never colour alone) plus the tokenized emphasis surface; read rows keep
|
|
361
|
+
the gutter so every title stays on one optical axis. */}
|
|
362
|
+
<Card>
|
|
363
|
+
<CardHeader>
|
|
364
|
+
<CardTitle level={2}>通知 Notifications</CardTitle>
|
|
365
|
+
<CardDescription>
|
|
366
|
+
`unread` = indicator dot + `--list-row-unread-background`; `unread={false}` = the
|
|
367
|
+
neutral `--list-row-read-background`. Zero, one or two inline trailing actions.
|
|
368
|
+
</CardDescription>
|
|
369
|
+
</CardHeader>
|
|
370
|
+
<CardContent flush>
|
|
371
|
+
<ListRow
|
|
372
|
+
unread
|
|
373
|
+
align="start"
|
|
374
|
+
overflow="wrap"
|
|
375
|
+
title="組織「グローバル・トランスフォーメーション推進本部」への招待が届いています"
|
|
376
|
+
description="2026-07-30 09:12"
|
|
377
|
+
trailing={
|
|
378
|
+
<>
|
|
379
|
+
<Button size="xs" variant="ghost">
|
|
380
|
+
既読にする
|
|
381
|
+
</Button>
|
|
382
|
+
<Button size="xs" variant="outline">
|
|
383
|
+
開く
|
|
384
|
+
</Button>
|
|
385
|
+
</>
|
|
386
|
+
}
|
|
387
|
+
/>
|
|
388
|
+
<ListRow
|
|
389
|
+
unread
|
|
390
|
+
align="start"
|
|
391
|
+
overflow="wrap"
|
|
392
|
+
title="Yêu cầu phê duyệt hợp đồng cung cấp dịch vụ vận hành hạ tầng đám mây quý III"
|
|
393
|
+
description="2026-07-29 17:04"
|
|
394
|
+
trailing={
|
|
395
|
+
<Button size="xs" variant="outline">
|
|
396
|
+
Mở
|
|
397
|
+
</Button>
|
|
398
|
+
}
|
|
399
|
+
/>
|
|
400
|
+
<ListRow
|
|
401
|
+
unread={false}
|
|
402
|
+
align="start"
|
|
403
|
+
overflow="wrap"
|
|
404
|
+
title="Your monthly platform usage report for the Data Platform Division is ready"
|
|
405
|
+
description="2026-07-28 08:00"
|
|
406
|
+
/>
|
|
407
|
+
<ListRow
|
|
408
|
+
unread={false}
|
|
409
|
+
align="start"
|
|
410
|
+
overflow="wrap"
|
|
411
|
+
title="請求書 INV-2026-0731 が発行されました"
|
|
412
|
+
description="2026-07-27 18:40"
|
|
413
|
+
trailing={<Badge tone="neutral">既読</Badge>}
|
|
414
|
+
/>
|
|
415
|
+
</CardContent>
|
|
416
|
+
</Card>
|
|
417
|
+
</Flex>
|
|
418
|
+
</PageContainer>
|
|
419
|
+
);
|
|
420
|
+
}
|