@godxjp/ui 19.1.0 → 19.3.1
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 +20 -14
- package/dist/components/data-display/badge.js +18 -4
- 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 +55 -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 +36 -1
- package/dist/props/registry.js +45 -1
- 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 +19 -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 +12 -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 +283 -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 +160 -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 +188 -0
- package/docs/data-display/popover-touch.tsx +27 -0
- package/docs/data-display/popover.tsx +246 -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 +303 -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 +175 -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 +330 -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 +102 -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 +420 -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 +204 -0
- package/docs/foundation/density.tsx +232 -0
- package/docs/foundation/email-tokens.tsx +323 -0
- package/docs/foundation/radius-shadow.tsx +154 -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 +135 -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 +266 -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 +954 -0
- package/docs/layout/resizable-panel.tsx +419 -0
- package/docs/layout/responsive-grid.tsx +243 -0
- package/docs/layout/separator.tsx +327 -0
- package/docs/layout/service-role-panel.tsx +144 -0
- package/docs/layout/sidebar.tsx +609 -0
- package/docs/layout/split-pane.tsx +468 -0
- package/docs/layout/topbar.tsx +349 -0
- package/docs/navigation/app-setting-picker.tsx +142 -0
- package/docs/navigation/breadcrumb.tsx +135 -0
- package/docs/navigation/context-menu.tsx +123 -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 +158 -0
- package/docs/navigation/pagination.tsx +241 -0
- package/docs/navigation/steps.tsx +265 -0
- package/docs/navigation/tabs-rtl.tsx +28 -0
- package/docs/navigation/tabs.tsx +314 -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 +455 -0
- package/docs/showcase/acme-website.tsx +461 -0
- package/docs/showcase/case1-warehouse-dashboard.tsx +359 -0
- package/docs/showcase/case2-employee-me.tsx +444 -0
- package/docs/showcase/case3-approval-workflow.tsx +529 -0
- package/docs/showcase/case4-login.tsx +313 -0
- package/docs/showcase/case5-shift-calendar.tsx +795 -0
- package/docs/showcase/case6-agency-handy.tsx +1113 -0
- package/docs/showcase/futurelastic-web.tsx +392 -0
- package/docs/showcase/org-switcher.tsx +313 -0
- package/docs/showcase/permission-matrix.tsx +346 -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 +347 -0
- package/docs/showcase/table-expandable-rows.tsx +480 -0
- package/docs/showcase/table-filter-chips.tsx +456 -0
- package/docs/showcase/table-footer-totals.tsx +314 -0
- package/docs/showcase/table-grouped-subtotals.tsx +391 -0
- package/docs/showcase/table-master-detail.tsx +484 -0
- package/docs/showcase/table-pagination.tsx +327 -0
- package/docs/showcase/table-states.tsx +366 -0
- package/docs/showcase/table-sticky-columns.tsx +376 -0
- package/docs/showcase/table-tree-rows.tsx +444 -0
- package/docs/showcase/table-view-tabs.tsx +488 -0
- package/package.json +9 -12
- 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,154 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Badge,
|
|
3
|
+
Card,
|
|
4
|
+
CardContent,
|
|
5
|
+
CardDescription,
|
|
6
|
+
CardHeader,
|
|
7
|
+
CardTitle,
|
|
8
|
+
} from "@godxjp/ui/data-display";
|
|
9
|
+
import { Text } from "@godxjp/ui/general";
|
|
10
|
+
import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Radius & Shadow · design-token foundation. base radius 6px; shadows stay flat
|
|
14
|
+
* (cards have NO shadow at rest · elevation only climbs at popover / dialog).
|
|
15
|
+
* Boxes render the real token var; composed only from real @godxjp/ui components.
|
|
16
|
+
*/
|
|
17
|
+
// DS authors the base --radius (6px) and derives sm/md/lg in @theme. --radius-xl
|
|
18
|
+
// and --radius-full are NOT overridden · they fall through to Tailwind defaults.
|
|
19
|
+
// `value` is the CSS the swatch renders. ds tokens resolve their var; xl/full are NOT authored as
|
|
20
|
+
// vars (they fall through to Tailwind `rounded-xl` / `rounded-full`), so we render their literal
|
|
21
|
+
// value — otherwise `var(--radius-full)` is undefined and the swatch collapses to a square.
|
|
22
|
+
const radii = [
|
|
23
|
+
{ token: "--radius-sm", px: "2px", value: "var(--radius-sm)", source: "ds" as const },
|
|
24
|
+
{ token: "--radius-md", px: "4px", value: "var(--radius-md)", source: "ds" as const },
|
|
25
|
+
{ token: "--radius", px: "6px (base)", value: "var(--radius)", source: "ds" as const },
|
|
26
|
+
{ token: "--radius-lg", px: "6px", value: "var(--radius-lg)", source: "ds" as const },
|
|
27
|
+
{ token: "--radius-xl", px: "12px", value: "0.75rem", source: "tw" as const },
|
|
28
|
+
{ token: "--radius-full", px: "pill", value: "9999px", source: "tw" as const },
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const shadows = [
|
|
32
|
+
{ token: "--shadow-sm", role: "subtle lift" },
|
|
33
|
+
{ token: "--shadow-lg", role: "popover / elevated" },
|
|
34
|
+
{ token: "--shadow-xl", role: "dialog" },
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
export default function Demo() {
|
|
38
|
+
return (
|
|
39
|
+
<PageContainer
|
|
40
|
+
title="Radius & Shadow"
|
|
41
|
+
subtitle="6px base radius · flat by default · elevation climbs only at popover / dialog"
|
|
42
|
+
>
|
|
43
|
+
<Flex direction="col" gap="lg">
|
|
44
|
+
<Card>
|
|
45
|
+
<CardHeader>
|
|
46
|
+
<CardTitle level={2}>Corner radius</CardTitle>
|
|
47
|
+
<CardDescription>
|
|
48
|
+
The system authors the base 6px radius and derives sm/md/lg from it. xl and full are
|
|
49
|
+
not overridden; they fall through to Tailwind defaults.
|
|
50
|
+
</CardDescription>
|
|
51
|
+
</CardHeader>
|
|
52
|
+
<CardContent>
|
|
53
|
+
<ResponsiveGrid columns={{ sm: 2, md: 3, lg: 6 }}>
|
|
54
|
+
{radii.map((r) => (
|
|
55
|
+
<Flex key={r.token} direction="col" gap="xs">
|
|
56
|
+
<div
|
|
57
|
+
className="bg-secondary border-border h-16 border"
|
|
58
|
+
style={{ borderRadius: r.value }}
|
|
59
|
+
/>
|
|
60
|
+
<div>
|
|
61
|
+
<Flex align="center" gap="xs">
|
|
62
|
+
<Text size="xs" mono>
|
|
63
|
+
{r.token}
|
|
64
|
+
</Text>
|
|
65
|
+
{r.source === "tw" ? (
|
|
66
|
+
<Badge variant="outline" className="text-xs">
|
|
67
|
+
Tailwind default
|
|
68
|
+
</Badge>
|
|
69
|
+
) : null}
|
|
70
|
+
</Flex>
|
|
71
|
+
<Text as="div" size="xs" tone="muted">
|
|
72
|
+
{r.px}
|
|
73
|
+
</Text>
|
|
74
|
+
</div>
|
|
75
|
+
</Flex>
|
|
76
|
+
))}
|
|
77
|
+
</ResponsiveGrid>
|
|
78
|
+
</CardContent>
|
|
79
|
+
</Card>
|
|
80
|
+
|
|
81
|
+
<Card>
|
|
82
|
+
<CardHeader>
|
|
83
|
+
<CardTitle level={2}>Elevation</CardTitle>
|
|
84
|
+
<CardDescription>
|
|
85
|
+
Cards carry a 1px border and NO shadow at rest. Shadow appears only on floating
|
|
86
|
+
surfaces: popover and dialog.
|
|
87
|
+
</CardDescription>
|
|
88
|
+
</CardHeader>
|
|
89
|
+
<CardContent>
|
|
90
|
+
<Flex direction="col" gap="lg">
|
|
91
|
+
<ResponsiveGrid columns={{ sm: 1, md: 3 }}>
|
|
92
|
+
{shadows.map((s) => (
|
|
93
|
+
<Flex key={s.token} direction="col" gap="xs">
|
|
94
|
+
<div
|
|
95
|
+
className="bg-card h-16 rounded-md"
|
|
96
|
+
style={{ boxShadow: `var(${s.token})` }}
|
|
97
|
+
/>
|
|
98
|
+
<div>
|
|
99
|
+
<Text as="div" size="xs" mono>
|
|
100
|
+
{s.token}
|
|
101
|
+
</Text>
|
|
102
|
+
<Text as="div" size="xs" tone="muted">
|
|
103
|
+
{s.role}
|
|
104
|
+
</Text>
|
|
105
|
+
</div>
|
|
106
|
+
</Flex>
|
|
107
|
+
))}
|
|
108
|
+
</ResponsiveGrid>
|
|
109
|
+
|
|
110
|
+
{/* Rest vs elevated, shown live: a resting Card (border, no shadow) next to a
|
|
111
|
+
floating surface lifted by --shadow-lg, so the elevation rule is demonstrated,
|
|
112
|
+
not just asserted. */}
|
|
113
|
+
<ResponsiveGrid columns={{ sm: 1, md: 2 }}>
|
|
114
|
+
<Flex direction="col" gap="xs">
|
|
115
|
+
<Card>
|
|
116
|
+
<CardContent>
|
|
117
|
+
<Text as="div" weight="medium">
|
|
118
|
+
At rest(カード)
|
|
119
|
+
</Text>
|
|
120
|
+
<Text as="div" size="xs" tone="muted">
|
|
121
|
+
border-border, no shadow
|
|
122
|
+
</Text>
|
|
123
|
+
</CardContent>
|
|
124
|
+
</Card>
|
|
125
|
+
<Text as="div" size="xs" tone="muted">
|
|
126
|
+
resting surface · flat
|
|
127
|
+
</Text>
|
|
128
|
+
</Flex>
|
|
129
|
+
<Flex direction="col" gap="xs">
|
|
130
|
+
<Card>
|
|
131
|
+
<CardContent flush>
|
|
132
|
+
{/* ui-audit-disable-next-line no-utility-spacing — a tile showing the shadow token itself; the box IS the subject */}
|
|
133
|
+
<div className="p-4" style={{ boxShadow: "var(--shadow-lg)" }}>
|
|
134
|
+
<Text as="div" weight="medium">
|
|
135
|
+
Floating(ポップオーバー)
|
|
136
|
+
</Text>
|
|
137
|
+
<Text as="div" size="xs" tone="muted">
|
|
138
|
+
--shadow-lg lifts it off the page
|
|
139
|
+
</Text>
|
|
140
|
+
</div>
|
|
141
|
+
</CardContent>
|
|
142
|
+
</Card>
|
|
143
|
+
<Text as="div" size="xs" tone="muted">
|
|
144
|
+
floating surface · elevated
|
|
145
|
+
</Text>
|
|
146
|
+
</Flex>
|
|
147
|
+
</ResponsiveGrid>
|
|
148
|
+
</Flex>
|
|
149
|
+
</CardContent>
|
|
150
|
+
</Card>
|
|
151
|
+
</Flex>
|
|
152
|
+
</PageContainer>
|
|
153
|
+
);
|
|
154
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { type RefObject, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
|
|
3
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
|
|
4
|
+
import { Text } from "@godxjp/ui/general";
|
|
5
|
+
import { Flex, PageContainer } from "@godxjp/ui/layout";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Spacing · design-token foundation. Two raw scales (a 4px grid + a golden-ratio
|
|
9
|
+
* φ scale) feed the semantic layout tokens that Flex / PageContainer consume.
|
|
10
|
+
* Each bar's width is the real token var() and every px label is resolved from
|
|
11
|
+
* that same var() at runtime, so nothing can drift from the source. Composed
|
|
12
|
+
* only from real @godxjp/ui components.
|
|
13
|
+
*/
|
|
14
|
+
const rawScale = [
|
|
15
|
+
"--space-0",
|
|
16
|
+
"--space-1",
|
|
17
|
+
"--space-2",
|
|
18
|
+
"--space-3",
|
|
19
|
+
"--space-4",
|
|
20
|
+
"--space-5",
|
|
21
|
+
"--space-6",
|
|
22
|
+
"--space-8",
|
|
23
|
+
"--space-10",
|
|
24
|
+
"--space-12",
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const phiScale = [
|
|
28
|
+
{ token: "--phi-n2", role: "φ⁻² · phi-unit ÷ φ²" },
|
|
29
|
+
{ token: "--phi-n1", role: "φ⁻¹ · phi-unit ÷ φ" },
|
|
30
|
+
{ token: "--phi-0", role: "φ⁰ · phi-unit (= --space-4)" },
|
|
31
|
+
{ token: "--phi-p1", role: "φ¹ · phi-unit × φ" },
|
|
32
|
+
{ token: "--phi-p2", role: "φ² · phi-unit × φ²" },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const layoutScale = [
|
|
36
|
+
{ token: "--space-page-x", role: "page gutter X (PageContainer)" },
|
|
37
|
+
{ token: "--space-page-y", role: "page gutter Y (PageContainer)" },
|
|
38
|
+
{ token: "--space-section", role: "section gap (= --phi-0)" },
|
|
39
|
+
{ token: "--space-stack-xs", role: "Flex gap='xs'" },
|
|
40
|
+
{ token: "--space-stack-sm", role: "Flex gap='sm'" },
|
|
41
|
+
{ token: "--space-stack-md", role: "Flex gap='md' (default · = --phi-0)" },
|
|
42
|
+
{ token: "--space-stack-lg", role: "Flex gap='lg' (= --phi-p1)" },
|
|
43
|
+
{ token: "--space-stack-xl", role: "Flex gap='xl' (= --phi-p2)" },
|
|
44
|
+
{ token: "--space-inline-xs", role: "inline gap='xs'" },
|
|
45
|
+
{ token: "--space-inline-sm", role: "inline gap='sm'" },
|
|
46
|
+
{ token: "--space-inline-md", role: "inline gap='md' (= --phi-n1)" },
|
|
47
|
+
{ token: "--space-inline-lg", role: "inline gap='lg' (= --phi-0)" },
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
const allTokens = [
|
|
51
|
+
...rawScale,
|
|
52
|
+
...phiScale.map((s) => s.token),
|
|
53
|
+
...layoutScale.map((s) => s.token),
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
/** Resolve each token's computed pixel value from a live probe element, so the
|
|
57
|
+
* px labels are read from the same var() as the bars and can never drift. */
|
|
58
|
+
type PxMap = Record<string, string> & { __probeRef: RefObject<HTMLDivElement | null> };
|
|
59
|
+
|
|
60
|
+
function usePx(tokens: string[]): PxMap {
|
|
61
|
+
const probeRef = useRef<HTMLDivElement>(null);
|
|
62
|
+
const [px, setPx] = useState<Record<string, string>>({});
|
|
63
|
+
|
|
64
|
+
useLayoutEffect(() => {
|
|
65
|
+
const host = probeRef.current;
|
|
66
|
+
if (!host) return;
|
|
67
|
+
const next: Record<string, string> = {};
|
|
68
|
+
for (const token of tokens) {
|
|
69
|
+
const probe = document.createElement("div");
|
|
70
|
+
probe.style.width = `var(${token})`;
|
|
71
|
+
host.appendChild(probe);
|
|
72
|
+
const width = probe.getBoundingClientRect().width;
|
|
73
|
+
host.removeChild(probe);
|
|
74
|
+
next[token] = `${Math.round(width * 10) / 10}px`;
|
|
75
|
+
}
|
|
76
|
+
setPx(next);
|
|
77
|
+
}, [tokens]);
|
|
78
|
+
|
|
79
|
+
return { ...px, __probeRef: probeRef } as PxMap;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function TokenBar({
|
|
83
|
+
token,
|
|
84
|
+
px,
|
|
85
|
+
role,
|
|
86
|
+
className,
|
|
87
|
+
}: {
|
|
88
|
+
token: string;
|
|
89
|
+
px?: string;
|
|
90
|
+
role?: string;
|
|
91
|
+
className: string;
|
|
92
|
+
}) {
|
|
93
|
+
return (
|
|
94
|
+
<Flex direction="row" align="center" gap="md">
|
|
95
|
+
<Text size="xs" tone="muted" mono className="w-44 shrink-0">
|
|
96
|
+
{token}
|
|
97
|
+
</Text>
|
|
98
|
+
<div className={className} style={{ width: `var(${token})` }} />
|
|
99
|
+
<Text size="xs" tone="muted" mono className="w-14 shrink-0 text-end">
|
|
100
|
+
{px ?? "·"}
|
|
101
|
+
</Text>
|
|
102
|
+
{role ? (
|
|
103
|
+
<Text size="xs" tone="muted">
|
|
104
|
+
{role}
|
|
105
|
+
</Text>
|
|
106
|
+
) : null}
|
|
107
|
+
</Flex>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export default function Demo() {
|
|
112
|
+
const px = usePx(allTokens);
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<PageContainer
|
|
116
|
+
title="Spacing"
|
|
117
|
+
subtitle="4px raw grid + golden-ratio (φ) scale → semantic layout gaps · never raw gap-* / margins"
|
|
118
|
+
>
|
|
119
|
+
{/* Off-screen probe host: bars are measured here, then removed. */}
|
|
120
|
+
<div
|
|
121
|
+
ref={px.__probeRef}
|
|
122
|
+
aria-hidden
|
|
123
|
+
className="pointer-events-none absolute -z-10 opacity-0"
|
|
124
|
+
/>
|
|
125
|
+
|
|
126
|
+
<Flex direction="col" gap="lg">
|
|
127
|
+
<Card>
|
|
128
|
+
<CardHeader>
|
|
129
|
+
<CardTitle level={2}>Raw scale · 4px grid</CardTitle>
|
|
130
|
+
<CardDescription>
|
|
131
|
+
The base step is 4px; every value is a 4-multiple. Bar width is the live token var(),
|
|
132
|
+
the px label is resolved from it at runtime.
|
|
133
|
+
</CardDescription>
|
|
134
|
+
</CardHeader>
|
|
135
|
+
<CardContent>
|
|
136
|
+
<Flex direction="col" gap="sm">
|
|
137
|
+
{rawScale.map((token) => (
|
|
138
|
+
<TokenBar
|
|
139
|
+
key={token}
|
|
140
|
+
token={token}
|
|
141
|
+
px={px[token]}
|
|
142
|
+
className="bg-primary h-3 shrink-0 rounded-sm"
|
|
143
|
+
/>
|
|
144
|
+
))}
|
|
145
|
+
</Flex>
|
|
146
|
+
</CardContent>
|
|
147
|
+
</Card>
|
|
148
|
+
|
|
149
|
+
<Card>
|
|
150
|
+
<CardHeader>
|
|
151
|
+
<CardTitle level={2}>Golden-ratio scale · φ ≈ 1.618</CardTitle>
|
|
152
|
+
<CardDescription>
|
|
153
|
+
Off-grid by design: each step is the previous multiplied or divided by φ around{" "}
|
|
154
|
+
<Text mono>--phi-unit</Text> (= --space-4). These back the larger stack / inline gaps,
|
|
155
|
+
so they read as off the 4px grid (e.g. stack-lg ≈ 25.9px).
|
|
156
|
+
</CardDescription>
|
|
157
|
+
</CardHeader>
|
|
158
|
+
<CardContent>
|
|
159
|
+
<Flex direction="col" gap="sm">
|
|
160
|
+
{phiScale.map((s) => (
|
|
161
|
+
<TokenBar
|
|
162
|
+
key={s.token}
|
|
163
|
+
token={s.token}
|
|
164
|
+
px={px[s.token]}
|
|
165
|
+
role={s.role}
|
|
166
|
+
className="bg-attention h-3 shrink-0 rounded-sm"
|
|
167
|
+
/>
|
|
168
|
+
))}
|
|
169
|
+
</Flex>
|
|
170
|
+
</CardContent>
|
|
171
|
+
</Card>
|
|
172
|
+
|
|
173
|
+
<Card>
|
|
174
|
+
<CardHeader>
|
|
175
|
+
<CardTitle level={2}>Semantic layout tokens</CardTitle>
|
|
176
|
+
<CardDescription>
|
|
177
|
+
What Flex gap and PageContainer padding resolve to: set the rhythm once, never
|
|
178
|
+
hand-tune margins per element. Tokens marked (= --phi-*) inherit the golden-ratio
|
|
179
|
+
scale above, so their px value is off the 4px grid.
|
|
180
|
+
</CardDescription>
|
|
181
|
+
</CardHeader>
|
|
182
|
+
<CardContent>
|
|
183
|
+
<Flex direction="col" gap="sm">
|
|
184
|
+
{layoutScale.map((s) => (
|
|
185
|
+
<TokenBar
|
|
186
|
+
key={s.token}
|
|
187
|
+
token={s.token}
|
|
188
|
+
px={px[s.token]}
|
|
189
|
+
role={s.role}
|
|
190
|
+
className="bg-info h-3 shrink-0 rounded-sm"
|
|
191
|
+
/>
|
|
192
|
+
))}
|
|
193
|
+
</Flex>
|
|
194
|
+
</CardContent>
|
|
195
|
+
</Card>
|
|
196
|
+
|
|
197
|
+
<Card>
|
|
198
|
+
<CardHeader>
|
|
199
|
+
<CardTitle level={2}>Density retunes the φ scale</CardTitle>
|
|
200
|
+
<CardDescription>
|
|
201
|
+
PageContainer density remaps <Text mono>--phi-unit</Text> (compact → --space-3,
|
|
202
|
+
comfortable → --space-6). Because every φ-derived token (stack-md/lg/xl, inline-md/lg,
|
|
203
|
+
section) is built from --phi-unit, the whole semantic rhythm scales with one knob ·
|
|
204
|
+
the px values above shift accordingly.
|
|
205
|
+
</CardDescription>
|
|
206
|
+
</CardHeader>
|
|
207
|
+
</Card>
|
|
208
|
+
</Flex>
|
|
209
|
+
</PageContainer>
|
|
210
|
+
);
|
|
211
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
|
|
2
|
+
import { Flex, PageContainer } from "@godxjp/ui/layout";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Typography · design-token foundation. Real semantic <h1>-<h6> elements (no
|
|
6
|
+
* faked sizes): the base heading layer renders the reference-design scale and keeps
|
|
7
|
+
* the document outline SEO/accessibility correct. Composed only from real
|
|
8
|
+
* @godxjp/ui components.
|
|
9
|
+
*/
|
|
10
|
+
export default function Demo() {
|
|
11
|
+
return (
|
|
12
|
+
<PageContainer
|
|
13
|
+
title="Typography"
|
|
14
|
+
subtitle="Noto Sans JP (M PLUS 2 fallback) · 14 / 1.7 body · headings 20/18/14/13 @ 500 · three weights only"
|
|
15
|
+
>
|
|
16
|
+
<Flex direction="col" gap="lg">
|
|
17
|
+
<Card>
|
|
18
|
+
<CardHeader>
|
|
19
|
+
<CardTitle level={2}>Heading scale</CardTitle>
|
|
20
|
+
<CardDescription>
|
|
21
|
+
h1 20 / h2 18 / h3 14 / h4-h6 13px, weight 500 (h5/h6 collapse to 13px). SEO/a11y:
|
|
22
|
+
exactly one <h1> per page (the page title above); h2-h6 below never skip a
|
|
23
|
+
level.
|
|
24
|
+
</CardDescription>
|
|
25
|
+
</CardHeader>
|
|
26
|
+
<CardContent>
|
|
27
|
+
<Flex direction="col" gap="xs">
|
|
28
|
+
<h2><h2> 見出し · section heading · 18px / 500</h2>
|
|
29
|
+
<h3><h3> 見出し · subsection · 14px / 500</h3>
|
|
30
|
+
<h4><h4> 見出し · minor heading · 13px / 500</h4>
|
|
31
|
+
<h5><h5> 見出し · 13px / 500</h5>
|
|
32
|
+
<h6><h6> 見出し · 13px / 500</h6>
|
|
33
|
+
</Flex>
|
|
34
|
+
</CardContent>
|
|
35
|
+
</Card>
|
|
36
|
+
|
|
37
|
+
<Card>
|
|
38
|
+
<CardHeader>
|
|
39
|
+
<CardTitle level={2}>Body & weights</CardTitle>
|
|
40
|
+
<CardDescription>
|
|
41
|
+
Default body 14px / 1.7 (間 ma); dense tables 13px / 1.5. Three weights only · 400
|
|
42
|
+
body, 500 heading/label, 700 emphasis. NO 300, NO 600.
|
|
43
|
+
</CardDescription>
|
|
44
|
+
</CardHeader>
|
|
45
|
+
<CardContent>
|
|
46
|
+
<Flex direction="col" gap="sm">
|
|
47
|
+
<p className="text-sm">
|
|
48
|
+
本文 14px / 1.7 · 漢字の密度に合わせて行間を広めに取り、読み疲れを抑えます。Body
|
|
49
|
+
copy mixes 日本語 and Latin without breaking rhythm.
|
|
50
|
+
</p>
|
|
51
|
+
<Flex direction="col" gap="xs">
|
|
52
|
+
<p className="text-sm font-normal">400 normal · 通常の本文 · regular body</p>
|
|
53
|
+
<p className="text-sm font-medium">
|
|
54
|
+
500 medium · 見出し・ラベル · headings, labels
|
|
55
|
+
</p>
|
|
56
|
+
<p className="text-sm font-bold">700 bold · 強調のみ · emphasis only</p>
|
|
57
|
+
</Flex>
|
|
58
|
+
</Flex>
|
|
59
|
+
</CardContent>
|
|
60
|
+
</Card>
|
|
61
|
+
|
|
62
|
+
<Card>
|
|
63
|
+
<CardHeader>
|
|
64
|
+
<CardTitle level={2}>Tabular figures</CardTitle>
|
|
65
|
+
<CardDescription>
|
|
66
|
+
tabular-nums on every numeric column / large stat so digits align under 1.7 leading.
|
|
67
|
+
</CardDescription>
|
|
68
|
+
</CardHeader>
|
|
69
|
+
<CardContent>
|
|
70
|
+
<Flex direction="col" gap="xs">
|
|
71
|
+
<span className="text-2xl tabular-nums">¥1,284,500 · tabular ✓</span>
|
|
72
|
+
<span className="text-2xl normal-nums">¥1,284,500 · proportional ✗</span>
|
|
73
|
+
</Flex>
|
|
74
|
+
</CardContent>
|
|
75
|
+
</Card>
|
|
76
|
+
|
|
77
|
+
<Card>
|
|
78
|
+
<CardHeader>
|
|
79
|
+
<CardTitle level={2}>Size scale</CardTitle>
|
|
80
|
+
<CardDescription>
|
|
81
|
+
Six steps on the JP-dense base. text-sm (14px) is body; text-base+ are for stats /
|
|
82
|
+
large numerals, not running copy.
|
|
83
|
+
</CardDescription>
|
|
84
|
+
</CardHeader>
|
|
85
|
+
<CardContent>
|
|
86
|
+
<Flex direction="col" gap="xs">
|
|
87
|
+
<p className="text-xs">text-xs · 13px · 補足・密なテーブル</p>
|
|
88
|
+
<p className="text-sm">text-sm · 14px · 本文 body</p>
|
|
89
|
+
<p className="text-base">text-base · 15px · やや大きい本文</p>
|
|
90
|
+
<p className="text-lg">text-lg · 19px · リード文 lead</p>
|
|
91
|
+
<p className="text-xl">text-xl · 22px · 小見出し統計</p>
|
|
92
|
+
<p className="text-2xl">text-2xl · 26px · 大きな統計値</p>
|
|
93
|
+
</Flex>
|
|
94
|
+
</CardContent>
|
|
95
|
+
</Card>
|
|
96
|
+
|
|
97
|
+
<Card>
|
|
98
|
+
<CardHeader>
|
|
99
|
+
<CardTitle level={2}>Font family</CardTitle>
|
|
100
|
+
<CardDescription>
|
|
101
|
+
font-sans · Noto Sans JP by default (Japanese + Latin, incl. the Vietnamese subset); M
|
|
102
|
+
PLUS 2 is the fallback face for every supported locale. font-mono · the UI-monospace
|
|
103
|
+
stack for code, IDs and aligned digits.
|
|
104
|
+
</CardDescription>
|
|
105
|
+
</CardHeader>
|
|
106
|
+
<CardContent>
|
|
107
|
+
<Flex direction="col" gap="sm">
|
|
108
|
+
<p className="font-sans text-sm">
|
|
109
|
+
春はあけぼの · Số hóa văn bản · The quick brown fox jumps over the lazy dog
|
|
110
|
+
0123456789
|
|
111
|
+
</p>
|
|
112
|
+
<code className="font-mono text-sm">
|
|
113
|
+
const id = "EMP-2025-001"; // 0123456789 IlO0
|
|
114
|
+
</code>
|
|
115
|
+
</Flex>
|
|
116
|
+
</CardContent>
|
|
117
|
+
</Card>
|
|
118
|
+
|
|
119
|
+
<Card>
|
|
120
|
+
<CardHeader>
|
|
121
|
+
<CardTitle level={2}>Line height</CardTitle>
|
|
122
|
+
<CardDescription>
|
|
123
|
+
tight 1.25 · headings · normal 1.5 · dense tables · body 1.7 · running 日本語/Latin
|
|
124
|
+
copy (the default applied to <body>).
|
|
125
|
+
</CardDescription>
|
|
126
|
+
</CardHeader>
|
|
127
|
+
<CardContent>
|
|
128
|
+
<Flex direction="col" gap="sm">
|
|
129
|
+
<p className="text-sm leading-tight">
|
|
130
|
+
tight 1.25 · 見出し向けの詰めた行間。Compact leading for headings and single-line
|
|
131
|
+
labels where vertical rhythm should stay tight.
|
|
132
|
+
</p>
|
|
133
|
+
<p className="text-sm leading-normal">
|
|
134
|
+
normal 1.5 · 密なテーブル向け。Slightly looser for dense tables and metadata where
|
|
135
|
+
rows must stay scannable but not cramped.
|
|
136
|
+
</p>
|
|
137
|
+
<p className="text-sm leading-[var(--line-height-body)]">
|
|
138
|
+
body 1.7 · 本文向け。Generous leading for running mixed 日本語 and Latin copy so the
|
|
139
|
+
kanji density never reads as a wall of text.
|
|
140
|
+
</p>
|
|
141
|
+
</Flex>
|
|
142
|
+
</CardContent>
|
|
143
|
+
</Card>
|
|
144
|
+
</Flex>
|
|
145
|
+
</PageContainer>
|
|
146
|
+
);
|
|
147
|
+
}
|