@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
|
@@ -1,31 +1,17 @@
|
|
|
1
|
-
/* Data-entry component tokens — small-by-design text knobs (rule #45/#46). */
|
|
2
1
|
|
|
3
|
-
:root {
|
|
4
2
|
|
|
3
|
+
:root {
|
|
5
4
|
--password-strength-score-font-size: var(--font-size-xs);
|
|
6
5
|
--password-strength-checklist-font-size: var(--font-size-xs);
|
|
7
6
|
|
|
8
|
-
/* BranchScopePicker (gh#319). `.ui-branch-scope-picker` was a bare hook with no rule anywhere:
|
|
9
|
-
* every measure lived as a Tailwind literal on the component, so a service could only retune
|
|
10
|
-
* the control by forking it (#45).
|
|
11
|
-
*
|
|
12
|
-
* All four are FLAT rems, not `--space-*` aliases, on purpose: the literals they replace read
|
|
13
|
-
* Tailwind's own `--spacing` grid, which this package never remaps and which does NOT move with
|
|
14
|
-
* the density axis. Aliasing them to `--space-3`/`--space-2`/`--space-1` would silently start
|
|
15
|
-
* scaling the control inside a `.ui-density-*` subtree — a visual change, not a refactor. */
|
|
16
|
-
/* Stack rhythm between the mode radios, the subset box and the error line (was `gap-3`). */
|
|
17
7
|
--branch-scope-picker-gap: 0.75rem;
|
|
18
|
-
|
|
8
|
+
|
|
19
9
|
--branch-scope-picker-badges-gap: 0.375rem;
|
|
20
|
-
|
|
21
|
-
* indent rule (was `gap-2` / `ps-4`). */
|
|
10
|
+
|
|
22
11
|
--branch-scope-picker-subset-gap: 0.5rem;
|
|
23
12
|
--branch-scope-picker-subset-padding-inline: 1rem;
|
|
24
|
-
|
|
25
|
-
* treatment sets it to 0 rather than forking the component. Default = today's `border-s-2`. */
|
|
13
|
+
|
|
26
14
|
--branch-scope-picker-subset-border-width: var(--stroke-md);
|
|
27
|
-
|
|
28
|
-
* keyboard-reachable scroll region whose job is to cap the control's measure, so it must not
|
|
29
|
-
* grow with density and push the surrounding form off a 390px frame. */
|
|
15
|
+
|
|
30
16
|
--branch-scope-picker-list-max-height: 16rem;
|
|
31
17
|
}
|
|
@@ -1,36 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
|
|
3
3
|
:root {
|
|
4
|
-
|
|
5
|
-
* shared column so the values line up (the horizontal-detail look, mirroring <Form layout>).
|
|
6
|
-
* A rem value gives a fixed aligned column; set `max-content` to size each label to its text.
|
|
7
|
-
* (rule #44/#45 — a service theme tunes it here instead of forking CSS.) */
|
|
4
|
+
|
|
8
5
|
--descriptions-label-width: 8rem;
|
|
9
|
-
|
|
10
|
-
* visually by default. A consumer composing Descriptions beside a Form/FormField (a read-only
|
|
11
|
-
* block above an editable field on the same card) retunes this to `var(--space-4)` to match
|
|
12
|
-
* Form's own field-to-field rhythm instead of the two blocks reading as visually unrelated. */
|
|
6
|
+
|
|
13
7
|
--descriptions-row-gap: var(--space-3);
|
|
14
|
-
|
|
15
|
-
* grid rhythm a service could NOT reach while --descriptions-row-gap was already a knob — so a
|
|
16
|
-
* 2/3-column detail block could be retuned vertically but never horizontally.
|
|
17
|
-
* A RAW rem, deliberately NOT var(--space-6): `gap-x-6` reads Tailwind's own --spacing grid,
|
|
18
|
-
* which this repo does NOT density-scale, so a --space-* default would silently rescale the
|
|
19
|
-
* column gap under a compact/comfortable density. Point it at var(--space-6) to opt in. */
|
|
8
|
+
|
|
20
9
|
--descriptions-column-gap: 1.5rem;
|
|
21
|
-
|
|
22
|
-
* --descriptions-label-width: a service that narrows the label column usually wants to close
|
|
23
|
-
* this gap in the same step. Raw rem for the same --spacing reason as above. */
|
|
10
|
+
|
|
24
11
|
--descriptions-label-gap: 0.75rem;
|
|
25
|
-
|
|
26
|
-
* SAME typography as a <dd> so a static Form row and a Descriptions value are indistinguishable
|
|
27
|
-
* when mixed on one card. That contract used to be two copies of the literal `text-sm` plus a
|
|
28
|
-
* comment asking future editors to keep them in sync; both call sites now read these tokens, so
|
|
29
|
-
* the mirror is mechanical and a service retunes BOTH from one place. */
|
|
12
|
+
|
|
30
13
|
--descriptions-value-font-size: var(--font-size-sm);
|
|
31
|
-
|
|
32
|
-
* replaces ALSO set a line-height, via Tailwind's default `--text-sm--line-height`
|
|
33
|
-
* (= calc(1.25 / 0.875)); the theme remaps --text-sm but never that companion. Without this the
|
|
34
|
-
* value would silently inherit ambient leading instead of its own 20px line box. */
|
|
14
|
+
|
|
35
15
|
--descriptions-value-line-height: calc(1.25 / 0.875);
|
|
36
16
|
}
|
|
@@ -1,101 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
* (`@godxjp/ui/email`). HTML email cannot read CSS custom properties: Outlook/Gmail strip <style>
|
|
3
|
-
* blocks and require LITERAL inline values, so a Blade/Twig/MJML template can never `var()` these.
|
|
4
|
-
* They still live in the component tier because this is the ONE source a maintainer edits — the
|
|
5
|
-
* `@godxjp/ui/email` export is GENERATED from this file plus the colour roles in foundation.css
|
|
6
|
-
* (scripts/gen-email-tokens.mjs), so an email template and a web screen can never drift apart.
|
|
7
|
-
*
|
|
8
|
-
* Every value is a LITERAL px/number (never rem, never calc, never var): email clients resolve
|
|
9
|
-
* neither the cascade nor relative units reliably, and the export must serialise to a plain hex/px
|
|
10
|
-
* string. Where a value mirrors a web token the comment names it, so a retune stays traceable.
|
|
11
|
-
*
|
|
12
|
-
* Colours are deliberately NOT redeclared here — they derive from the semantic roles
|
|
13
|
-
* (--card/--background/--foreground/--muted/--border/--primary/--ring/--brand) and are converted
|
|
14
|
-
* HSL→hex at module load, so a re-themed role re-tints the email with zero copy-paste.
|
|
15
|
-
* The identity mark reads --brand, NOT --success: --success is the wakatake status green, and the
|
|
16
|
-
* two are deliberately distinct roles (gh#250).
|
|
17
|
-
*/
|
|
1
|
+
|
|
18
2
|
:root {
|
|
19
|
-
/* ── Shell — the 480px transactional-email geometry ─────────────────────────────────────── */
|
|
20
|
-
--email-shell-width: 480px; /* canonical transactional card width */
|
|
21
|
-
--email-shell-padding: 32px; /* card inset — mirrors --space-8 (2rem) */
|
|
22
|
-
--email-shell-page-padding: 24px; /* gutter between the client viewport and the card (--space-6) */
|
|
23
|
-
--email-shell-border-width: 1px; /* card edge — mirrors the 1px --border hairline */
|
|
24
|
-
--email-card-radius: 10px; /* mirrors --card-radius (--radius-xl = 6px × φ ≈ 10px) */
|
|
25
|
-
--email-card-reference-height: 407px; /* canonical invitation reference measures 480×407 */
|
|
26
|
-
--email-stack-gap: 24px; /* block rhythm — mirrors --space-stack-lg (1.5rem) */
|
|
27
|
-
--email-stack-gap-sm: 12px; /* tight rhythm — mirrors --space-3 (0.75rem) */
|
|
28
3
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
--email-
|
|
4
|
+
--email-shell-width: 480px;
|
|
5
|
+
--email-shell-padding: 32px;
|
|
6
|
+
--email-shell-page-padding: 24px;
|
|
7
|
+
--email-shell-border-width: 1px;
|
|
8
|
+
--email-card-radius: 10px;
|
|
9
|
+
--email-card-reference-height: 407px;
|
|
10
|
+
--email-stack-gap: 24px;
|
|
11
|
+
--email-stack-gap-sm: 12px;
|
|
12
|
+
|
|
13
|
+
--email-mark-width: 22px;
|
|
35
14
|
--email-mark-height: 22px;
|
|
36
|
-
--email-mark-gap: 8px;
|
|
37
|
-
--email-wordmark-font-size: 13px;
|
|
38
|
-
--email-wordmark-font-weight: 700;
|
|
15
|
+
--email-mark-gap: 8px;
|
|
16
|
+
--email-wordmark-font-size: 13px;
|
|
17
|
+
--email-wordmark-font-weight: 700;
|
|
39
18
|
|
|
40
|
-
/* ── Typography — literal px so no client has to resolve the rem scale ──────────────────── */
|
|
41
|
-
/* The DXS canonical face is Noto Sans JP (see src/styles/fonts.css; product override, direct
|
|
42
|
-
* instruction). Email clients honour NO @font-face, so the stack ships the face NAME first and
|
|
43
|
-
* degrades through the platform JP faces to a generic — a client with Noto Sans JP installed (or
|
|
44
|
-
* a webmail that already loaded it, which is common — it is a widely preinstalled/CDN-cached
|
|
45
|
-
* Google face, more likely to actually render than the niche M PLUS 2 ever was) renders the
|
|
46
|
-
* canonical face, everything else lands on Hiragino (macOS/iOS) → Yu Gothic (Windows) →
|
|
47
|
-
* M PLUS 2 → Meiryo → the system UI face → Arial → sans-serif. Family names are SINGLE-quoted
|
|
48
|
-
* on export (the generator normalises) because an inline `style="…"` attribute is double-quoted;
|
|
49
|
-
* only ASCII aliases are listed, since a non-ASCII family name does not survive every transfer
|
|
50
|
-
* encoding. */
|
|
51
19
|
--email-font-family-sans:
|
|
52
20
|
"Noto Sans JP", "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Yu Gothic Medium", YuGothic,
|
|
53
21
|
"M PLUS 2", Meiryo, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, system-ui, Arial,
|
|
54
22
|
sans-serif;
|
|
55
|
-
|
|
56
|
-
* the mono face in the canonical card. Mirrors --font-family-mono. */
|
|
23
|
+
|
|
57
24
|
--email-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
58
|
-
--email-body-font-size: 14px;
|
|
59
|
-
|
|
60
|
-
* looser than a screen, because a mail client gives the reader no density control. */
|
|
25
|
+
--email-body-font-size: 14px;
|
|
26
|
+
|
|
61
27
|
--email-body-line-height: 1.9;
|
|
62
|
-
--email-body-font-weight: 400;
|
|
63
|
-
--email-heading-font-size: 17px;
|
|
64
|
-
--email-heading-line-height: 1.7;
|
|
65
|
-
--email-heading-font-weight: 500;
|
|
28
|
+
--email-body-font-weight: 400;
|
|
29
|
+
--email-heading-font-size: 17px;
|
|
30
|
+
--email-heading-line-height: 1.7;
|
|
31
|
+
--email-heading-font-weight: 500;
|
|
66
32
|
|
|
67
|
-
/* ── Primary CTA — the one action button ────────────────────────────────────────────────── */
|
|
68
|
-
/* TOUCH TARGET, deliberately DECOUPLED from --control-height-lg (36px). Do not "restore" the
|
|
69
|
-
* mirror: email is a mobile-first, touch-only medium. There is no hover state, no precise
|
|
70
|
-
* pointer, and mail clients do not reliably offer zoom or a focus affordance — so the web's AA
|
|
71
|
-
* floor (SC 2.5.8, 24x24, which 36px clears) is the wrong bar here. 44px is the AAA target size
|
|
72
|
-
* (SC 2.5.5, 44x44) and the Apple HIG 44pt / Material 48dp convention. A service that must keep
|
|
73
|
-
* the old box sets --email-cta-height + --email-cta-line-height in its own theme. */
|
|
74
33
|
--email-cta-height: 44px;
|
|
75
|
-
--email-cta-line-height: 44px;
|
|
76
|
-
--email-cta-padding-x: 16px;
|
|
77
|
-
--email-cta-radius: 6px;
|
|
78
|
-
--email-cta-font-size: 14px;
|
|
79
|
-
--email-cta-font-weight: 500;
|
|
34
|
+
--email-cta-line-height: 44px;
|
|
35
|
+
--email-cta-padding-x: 16px;
|
|
36
|
+
--email-cta-radius: 6px;
|
|
37
|
+
--email-cta-font-size: 14px;
|
|
38
|
+
--email-cta-font-weight: 500;
|
|
39
|
+
|
|
40
|
+
--email-footer-font-size: 11px;
|
|
41
|
+
--email-footer-line-height: 1.8;
|
|
42
|
+
--email-footer-link-gap: 12px;
|
|
43
|
+
--email-footer-padding-top: 20px;
|
|
44
|
+
--email-footer-border-width: 1px;
|
|
80
45
|
|
|
81
|
-
|
|
82
|
-
--email-footer-font-size: 11px; /* mirrors --font-size-2xs (base ÷ φ^¼² ≈ 11.1px) */
|
|
83
|
-
--email-footer-line-height: 1.8; /* the legal band runs looser than the web --line-height-normal */
|
|
84
|
-
--email-footer-link-gap: 12px; /* horizontal separation between footer links (--space-3) */
|
|
85
|
-
--email-footer-padding-top: 20px; /* space above the legal band */
|
|
86
|
-
--email-footer-border-width: 1px; /* the hairline above the legal band */
|
|
46
|
+
--email-focus-border-width: 2px;
|
|
87
47
|
|
|
88
|
-
|
|
89
|
-
--email-
|
|
48
|
+
--email-mobile-max-width: 520px;
|
|
49
|
+
--email-mobile-width: 100%;
|
|
50
|
+
--email-mobile-padding: 20px;
|
|
51
|
+
--email-mobile-page-padding: 12px;
|
|
90
52
|
|
|
91
|
-
/* ── Mobile reflow — applied under the narrow media query and by inline fallbacks ───────── */
|
|
92
|
-
--email-mobile-max-width: 520px; /* the reflow breakpoint (card width + both gutters) */
|
|
93
|
-
--email-mobile-width: 100%; /* the card goes fluid below the breakpoint */
|
|
94
|
-
--email-mobile-padding: 20px; /* reduced card inset — mirrors --space-5 */
|
|
95
|
-
--email-mobile-page-padding: 12px; /* reduced viewport gutter — mirrors --space-3 */
|
|
96
|
-
/* One step below the 17px desktop title. The canonical 390px reference raster is unusable (it is
|
|
97
|
-
* 435px wide and already clips the card — dxs-platform/platform#496), so this is the library's
|
|
98
|
-
* documented contract rather than a measured canonical value. */
|
|
99
53
|
--email-mobile-heading-font-size: 16px;
|
|
100
|
-
--email-mobile-cta-width: 100%;
|
|
54
|
+
--email-mobile-cta-width: 100%;
|
|
101
55
|
}
|
|
@@ -1,36 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
* Package-owned geometry: a service retunes the surface here (or in its own theme.css) instead of
|
|
4
|
-
* forking `.ui-error-surface` or adding a `className` to the component. Chrome defaults are QUIET
|
|
5
|
-
* (cardinal rule #44): the metadata block ships with no divider — a service opts IN.
|
|
6
|
-
*/
|
|
1
|
+
|
|
7
2
|
:root {
|
|
8
|
-
|
|
9
|
-
* headline wraps at a readable width in BOTH shells, including the application shell where
|
|
10
|
-
* PageContainer is much wider than the copy wants to be. */
|
|
3
|
+
|
|
11
4
|
--error-surface-max-width: 32rem;
|
|
12
5
|
|
|
13
|
-
/* Rhythm between the status code, the EmptyState body, the metadata list and the progress meter. */
|
|
14
6
|
--error-surface-gap: var(--space-3);
|
|
15
7
|
|
|
16
|
-
/* Block padding of the surface inside the shell it is placed in. Desktop (1440/1024) default; the
|
|
17
|
-
* 390 step steps it down so a phone loses no vertical space (see styles/shell-layout.css). */
|
|
18
8
|
--error-surface-padding-block: var(--space-10);
|
|
19
9
|
--error-surface-padding-block-compact: var(--space-6);
|
|
20
10
|
|
|
21
|
-
/* Brand slot (a Logo) above the status code, system mode only. */
|
|
22
11
|
--error-surface-brand-gap: var(--space-2);
|
|
23
12
|
|
|
24
|
-
/* Metadata description list: row rhythm and the label↔value gap inside one row. */
|
|
25
13
|
--error-surface-meta-gap: var(--space-1);
|
|
26
14
|
--error-surface-meta-row-gap: var(--space-2);
|
|
27
15
|
|
|
28
|
-
/* Chrome, default quiet (#44). A service opts in with
|
|
29
|
-
* `--error-surface-meta-border: 1px solid hsl(var(--border));`. */
|
|
30
16
|
--error-surface-meta-border: none;
|
|
31
17
|
--error-surface-meta-padding-block: 0;
|
|
32
18
|
|
|
33
|
-
/* Width of the maintenance progress meter — narrower than the measure, so it reads as metadata
|
|
34
|
-
* rather than as the primary content of the page. */
|
|
35
19
|
--error-surface-progress-max-width: 18rem;
|
|
36
20
|
}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
|
|
3
3
|
:root {
|
|
4
4
|
--sheet-width-default: 22.5rem;
|
|
5
|
-
|
|
6
|
-
* SITE under a scoped [data-tenant]/.dark theme (a :root binding to it freezes at :root and a
|
|
7
|
-
* scoped override never reaches the overlay). Each surface takes a SHARE of that one scrim rather
|
|
8
|
-
* than a private literal, so a service retints every backdrop with one --overlay-background while
|
|
9
|
-
* the calibrated per-surface depth survives: a slide-in Sheet washes the page more lightly than a
|
|
10
|
-
* modal Dialog. Defaults resolve to rgb(0 0 0 / 0.2) (sheet) and rgb(0 0 0 / 0.3) (dialog). */
|
|
5
|
+
|
|
11
6
|
--sheet-overlay-background: initial;
|
|
12
7
|
--sheet-overlay-alpha: 40%;
|
|
13
|
-
|
|
14
|
-
* INSIDE the chrome — header stack, title/subtitle pair, the extra-slot row — were literal, so
|
|
15
|
-
* a service could retune the sheet's outer padding and still be stuck with the inner rhythm. */
|
|
8
|
+
|
|
16
9
|
--sheet-shadow: var(--shadow-lg);
|
|
17
10
|
--sheet-header-space-gap: 0.375rem;
|
|
18
11
|
--sheet-title-block-space-gap: var(--space-1);
|
|
@@ -21,11 +14,9 @@
|
|
|
21
14
|
--sheet-footer-space-gap: var(--space-2);
|
|
22
15
|
--sheet-title-font-size: var(--font-size-lg);
|
|
23
16
|
--sheet-description-font-size: var(--font-size-sm);
|
|
24
|
-
|
|
25
|
-
* the scroll edges — retune together with --focus-ring-width. */
|
|
17
|
+
|
|
26
18
|
--sheet-body-space-block: var(--space-1);
|
|
27
|
-
|
|
28
|
-
* title never runs under it. */
|
|
19
|
+
|
|
29
20
|
--sheet-close-offset: var(--space-4);
|
|
30
21
|
--sheet-close-rest-alpha: 0.7;
|
|
31
22
|
--sheet-header-close-space-inline-end: var(--space-8);
|
|
@@ -33,125 +24,68 @@
|
|
|
33
24
|
--dialog-viewport-inset: 1.5rem;
|
|
34
25
|
--dialog-overlay-background: initial;
|
|
35
26
|
--dialog-overlay-alpha: 60%;
|
|
36
|
-
|
|
37
|
-
* whole system, or --dialog-space-x/-y for dialogs only). */
|
|
27
|
+
|
|
38
28
|
--dialog-space-x: var(--space-chrome-x);
|
|
39
29
|
--dialog-space-y: var(--space-chrome-y);
|
|
40
30
|
--dialog-space-inset: var(--dialog-space-y) var(--dialog-space-x);
|
|
41
31
|
--dialog-space-gap: var(--space-stack-md);
|
|
42
32
|
--dialog-close-space-offset: var(--space-4);
|
|
43
|
-
|
|
44
|
-
* header markup is byte-identical to Sheet's. --dialog-space-x/-y already governed the panel
|
|
45
|
-
* inset, but every gap INSIDE the chrome (header stack, title/subtitle pair, the extra-slot row)
|
|
46
|
-
* was a literal on the component, so a service could retune the outer padding and still be stuck
|
|
47
|
-
* with the inner rhythm. Defaults are the values the literals resolved to. */
|
|
33
|
+
|
|
48
34
|
--dialog-header-space-gap: var(--space-stack-xs);
|
|
49
35
|
--dialog-title-row-space-gap: var(--space-3);
|
|
50
36
|
--dialog-title-block-space-gap: var(--space-1);
|
|
51
37
|
--dialog-extra-space-gap: var(--space-2);
|
|
52
|
-
|
|
53
|
-
* absolutely-positioned close button; retune together with --dialog-close-space-offset.
|
|
54
|
-
* Mirrors --sheet-header-close-space-inline-end. */
|
|
38
|
+
|
|
55
39
|
--dialog-header-close-space-inline-end: var(--space-8);
|
|
56
|
-
|
|
57
|
-
* dialog-layout.css with no way for a theme to make the ✕ louder. Mirrors
|
|
58
|
-
* --sheet-close-rest-alpha so the two overlay siblings retune together. */
|
|
40
|
+
|
|
59
41
|
--dialog-close-rest-alpha: 0.7;
|
|
60
|
-
|
|
61
|
-
* `text-sm text-destructive` on the component, i.e. unreachable from a theme. */
|
|
42
|
+
|
|
62
43
|
--dialog-step-up-error-font-size: var(--font-size-sm);
|
|
63
|
-
|
|
64
|
-
* same page column as a Card — so the DEFAULT IS the Card radius (gh#282); a service re-tunes by
|
|
65
|
-
* overriding this once. Default keeps the historical --radius-md. */
|
|
44
|
+
|
|
66
45
|
--alert-radius: var(--card-radius);
|
|
67
46
|
--alert-space-inset: var(--space-section-active);
|
|
68
47
|
--alert-space-gap: var(--space-inline-md);
|
|
69
48
|
--alert-inner-space-gap: var(--space-stack-sm);
|
|
70
49
|
--alert-dismiss-space-offset: var(--space-3);
|
|
71
|
-
|
|
72
|
-
* alert-layout.css with no token at all, so the ONLY ways to resize it were `!important` or a
|
|
73
|
-
* forked stylesheet — the two things the icon axis's tier 2 exists to abolish (gh#326). Same
|
|
74
|
-
* step, so nothing moves; a service now scopes `--alert-icon-size` to one Alert instead.
|
|
75
|
-
* Deliberately NOT --scaling-multiplied: the literal it replaces did not track density. */
|
|
50
|
+
|
|
76
51
|
--alert-icon-size: var(--icon-size-lg);
|
|
77
|
-
|
|
78
|
-
* alpha was a hard 0.7 in alert-layout.css whose `:hover` companion lived on the COMPONENT as
|
|
79
|
-
* `hover:opacity-100`, so the two halves of one affordance sat in two files and neither was
|
|
80
|
-
* themeable. Mirrors --sheet-close-rest-alpha. The icon size carries a raw rem, not
|
|
81
|
-
* var(--space-N): it replaces a flat Tailwind `size-4` step and must not start tracking the
|
|
82
|
-
* density axis. */
|
|
52
|
+
|
|
83
53
|
--alert-dismiss-rest-alpha: 0.7;
|
|
84
54
|
--alert-dismiss-icon-size: var(--icon-size-md);
|
|
85
|
-
|
|
86
|
-
* (a brand's success-bg/-border are often more present than the faint 5%/30% default). */
|
|
55
|
+
|
|
87
56
|
--alert-bg-alpha: 0.05;
|
|
88
57
|
--alert-border-alpha: 0.3;
|
|
89
|
-
|
|
90
|
-
* match to its page grid is a knob (rule #45).
|
|
91
|
-
*
|
|
92
|
-
* --banner-radius and --banner-border-width are NOT declared here (gh#327). They used to be,
|
|
93
|
-
* and both copies were dead: components/banner.css declares the same two names at the same
|
|
94
|
-
* `:root`, base.css imports banner AFTER feedback, so banner won every time. Radius agreed at
|
|
95
|
-
* `0`, but border-width did not — this file said `0` and banner.css says `1px`, and `1px` is
|
|
96
|
-
* what alert-layout.css actually paints as the strip's block-end hairline. So anyone who read
|
|
97
|
-
* THIS file for the default was told the strip has no rule when it has one, and the MCP token
|
|
98
|
-
* catalog carried both entries with the two conflicting values. banner.css owns the strip
|
|
99
|
-
* geometry; these two live there and only there.
|
|
100
|
-
*
|
|
101
|
-
* The inline inset tracks the live page gutter, so a banner mounted above a PageContainer lines
|
|
102
|
-
* its text up with the page title instead of sitting at a second, unrelated margin. */
|
|
58
|
+
|
|
103
59
|
--banner-border-block-end-width: 1px;
|
|
104
60
|
--banner-space-block: var(--space-3);
|
|
105
|
-
|
|
106
|
-
* `--space-page-active-x` steps down to the compact gutter on `.ui-page-container` only, and
|
|
107
|
-
* custom properties inherit — so a banner rendered INSIDE the container picks the compact value
|
|
108
|
-
* up for free, while the normal case (a banner mounted ABOVE the container, or in AppShell) would
|
|
109
|
-
* keep the desktop gutter and sit 8px out at 390px. The compact step below is what actually keeps
|
|
110
|
-
* the two aligned; retune it rather than hard-coding a mobile inset at the call site. */
|
|
61
|
+
|
|
111
62
|
--banner-space-inline: var(--space-page-active-x);
|
|
112
63
|
--banner-space-inline-compact: var(--space-page-compact-x);
|
|
113
|
-
|
|
114
|
-
* optically centred on a one-line strip instead of floating at the inline-alert offset. */
|
|
64
|
+
|
|
115
65
|
--banner-dismiss-space-offset: var(--space-2);
|
|
116
|
-
|
|
117
|
-
* Paired AFTER --shadow-lg in the surface box-shadow so a service can wash the overlay with the
|
|
118
|
-
* global glow, e.g. --dialog-content-glow: var(--shadow-glow), with no markup change. */
|
|
66
|
+
|
|
119
67
|
--dialog-content-glow: 0 0 0 0 transparent;
|
|
120
68
|
--empty-state-space-y: var(--space-10);
|
|
121
69
|
--empty-state-space-x: var(--space-6);
|
|
122
|
-
|
|
123
|
-
* 28rem reads ~65 Latin characters per line; a JA/VI service that needs a shorter or longer
|
|
124
|
-
* measure for its own copy retunes this once instead of forking `.ui-empty-state-description`. */
|
|
70
|
+
|
|
125
71
|
--empty-state-description-max-width: 28rem;
|
|
126
72
|
--empty-state-section-space-y: var(--space-6);
|
|
127
73
|
--empty-state-section-space-x: var(--space-4);
|
|
128
74
|
--empty-state-compact-space-y: var(--space-3);
|
|
129
75
|
--empty-state-compact-space-x: var(--space-2);
|
|
130
|
-
|
|
131
|
-
* under a scoped theme (rule #44). A service recolours the glyph (--empty-state-icon-foreground)
|
|
132
|
-
* or washes the medallion fill (--empty-state-icon-tint) without forking.
|
|
133
|
-
* Defaults = hsl(var(--muted-foreground)) glyph · hsl(var(--muted)) fill. */
|
|
76
|
+
|
|
134
77
|
--empty-state-icon-foreground: initial;
|
|
135
78
|
--empty-state-icon-tint: initial;
|
|
136
|
-
|
|
137
|
-
* `size-6` utility on the icon), so a service could not scale the empty-state mark to its own
|
|
138
|
-
* page rhythm — and the two must move TOGETHER or the glyph stops sitting centred in its
|
|
139
|
-
* circle, which is exactly the kind of pair rule #45 exists to keep tunable as one. */
|
|
79
|
+
|
|
140
80
|
--empty-state-icon-size: var(--icon-size-4xl);
|
|
141
81
|
--empty-state-icon-glyph-size: var(--icon-size-xl);
|
|
142
82
|
--skeleton-row-gap: var(--space-stack-sm);
|
|
143
83
|
--skeleton-cell-gap: var(--space-inline-lg);
|
|
144
84
|
--skeleton-card-inset: var(--space-section-active);
|
|
145
85
|
--skeleton-radius: var(--radius);
|
|
146
|
-
|
|
147
|
-
* a scoped theme (a :root binding to a role var freezes at :root). A service tints the shimmer to
|
|
148
|
-
* its surface (rule #44) without forking the keyframes. Default = hsl(var(--muted)). */
|
|
86
|
+
|
|
149
87
|
--skeleton-background: initial;
|
|
150
|
-
|
|
151
|
-
* they replace were plain Tailwind steps, which are not multiplied by --scaling. Routing them
|
|
152
|
-
* through the spacing scale would silently make the loading state track the density axis while
|
|
153
|
-
* the loaded content it stands in for does not. Names say what each bar STANDS IN FOR, so a
|
|
154
|
-
* service retuning its type scale knows which one to move. */
|
|
88
|
+
|
|
155
89
|
--skeleton-block-height: 1rem;
|
|
156
90
|
--skeleton-caption-height: 0.75rem;
|
|
157
91
|
--skeleton-title-height: 1.75rem;
|
|
@@ -160,64 +94,33 @@
|
|
|
160
94
|
--skeleton-stat-value-width: 8rem;
|
|
161
95
|
--skeleton-stat-caption-width: 5rem;
|
|
162
96
|
|
|
163
|
-
/* QUERY LIFECYCLE FOOTERS — the two rows `<InfiniteQueryState>` appends under a paginated feed:
|
|
164
|
-
* the "load more" button row and the "loading more…" caption. Both gaps were Tailwind literals
|
|
165
|
-
* on the component (`pt-4` / `pt-2`), so a service running a denser (or airier) feed could not
|
|
166
|
-
* align them to its own vertical rhythm without forking the component (rule #45). They live in
|
|
167
|
-
* the feedback tier because these ARE query feedback surfaces and there is no query stylesheet.
|
|
168
|
-
* Defaults = var(--space-stack-md) (16px) and var(--space-stack-sm) (8px) — the exact values the
|
|
169
|
-
* Tailwind steps resolved to, so adopting this changes nothing until a theme opts in. */
|
|
170
97
|
--query-load-more-space-block-start: var(--space-stack-md);
|
|
171
98
|
--query-loading-more-space-block-start: var(--space-stack-sm);
|
|
172
99
|
|
|
173
|
-
/* TOOLTIP — the transient label surface. Every constant here was a Tailwind literal baked into
|
|
174
|
-
* the component (`max-w-xs px-2 py-1 rounded-md text-xs shadow-md`), so a service could not
|
|
175
|
-
* retune tooltip density or measure without forking the component (rule #45). Defaults reproduce
|
|
176
|
-
* the previous look exactly, so adopting this changes nothing until a theme opts in. */
|
|
177
100
|
--tooltip-max-width: 20rem;
|
|
178
101
|
--tooltip-space-inline: var(--space-2);
|
|
179
102
|
--tooltip-space-block: var(--space-1);
|
|
180
103
|
--tooltip-radius: var(--radius);
|
|
181
104
|
--tooltip-font-size: var(--font-size-xs);
|
|
182
|
-
|
|
105
|
+
|
|
183
106
|
--tooltip-shadow: var(--shadow-md);
|
|
184
|
-
|
|
185
|
-
* [data-tenant]/.dark theme (docs/TOKENS.md · "Role-mirror knobs MUST be `initial`").
|
|
186
|
-
* Defaults = hsl(var(--popover)) fill · hsl(var(--popover-foreground)) text. */
|
|
107
|
+
|
|
187
108
|
--tooltip-background: initial;
|
|
188
109
|
--tooltip-foreground: initial;
|
|
189
110
|
--tooltip-border-color: initial;
|
|
190
111
|
|
|
191
|
-
/* POPOVER — the interactive overlay panel. Same story as Tooltip: `w-72 rounded-md p-4 shadow-md`
|
|
192
|
-
* were literals, so a service could not align the panel to its own grid or width scale. */
|
|
193
112
|
--popover-width: 18rem;
|
|
194
113
|
--popover-space-inset: var(--space-4);
|
|
195
114
|
--popover-radius: var(--radius);
|
|
196
115
|
--popover-shadow: var(--shadow-md);
|
|
197
116
|
--popover-header-space-gap: var(--space-1);
|
|
198
117
|
--popover-header-font-size: var(--font-size-sm);
|
|
199
|
-
|
|
118
|
+
|
|
200
119
|
--popover-surface-background: initial;
|
|
201
120
|
--popover-surface-foreground: initial;
|
|
202
121
|
--popover-surface-border-color: initial;
|
|
203
122
|
|
|
204
|
-
/* TOAST (Sonner) — the status glyph in the toast's leading slot.
|
|
205
|
-
*
|
|
206
|
-
* WHY A KNOB AND NOT A UTILITY: sonner renders the toast body itself and takes the five status
|
|
207
|
-
* glyphs through ONE `icons={{ success, info, warning, error, loading }}` config prop. That prop
|
|
208
|
-
* is all-or-nothing — a consumer who wants a different glyph size must re-declare all five icons,
|
|
209
|
-
* re-importing lucide and re-deriving the aria wiring. Routing the size through a token makes it
|
|
210
|
-
* a one-line theme override instead (rule #45).
|
|
211
|
-
*
|
|
212
|
-
* Raw rem, not var(--space-N): it replaces a flat Tailwind `size-4` step, and the 16px box sonner
|
|
213
|
-
* gives `[data-icon]` is itself fixed — scaling the glyph with density alone would overflow it.
|
|
214
|
-
*
|
|
215
|
-
* NAMESPACE NOTE: sonner publishes its own `--toast-*` custom properties (--toast-icon-margin-*,
|
|
216
|
-
* --toast-svg-margin-*, --toast-button-margin-*, --toast-close-button-*). Neither name below
|
|
217
|
-
* collides with those; keep it that way when adding to this group. */
|
|
218
123
|
--toast-icon-size: var(--icon-size-md);
|
|
219
|
-
|
|
220
|
-
* CSS, so a var() string resolves normally. Flat 16px on purpose: this is a fixed inset from the
|
|
221
|
-
* device edge (thumb reach / safe area), not a density-scaled gap inside a surface. */
|
|
124
|
+
|
|
222
125
|
--toast-mobile-offset: 16px;
|
|
223
126
|
}
|
|
@@ -1,50 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
|
|
3
3
|
:root {
|
|
4
|
-
|
|
5
|
-
* this once (e.g. 110px) to align every form to its design grid; the Form/
|
|
6
|
-
* FormField `labelWidth` prop overrides per form/field. */
|
|
7
|
-
/* Fixed aligned label column by default (gh#284) — `max-content` sized each field's label
|
|
8
|
-
* column to its own label, so horizontal forms (especially columns={2} grids) had controls
|
|
9
|
-
* starting at ragged x positions. 8rem mirrors --descriptions-label-width so edit forms and
|
|
10
|
-
* show pages share the same optical grid; the Form/FormField `labelWidth` prop overrides. */
|
|
4
|
+
|
|
11
5
|
--form-label-width: 8rem;
|
|
12
6
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
--form-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
* CardContent and its CardFooter action row, or two FormFields that happen to be Form's OWN
|
|
25
|
-
* direct children (no Card framing). Unchanged from the historical value. */
|
|
26
|
-
--form-block-gap: var(--space-4); /* 16px */
|
|
27
|
-
|
|
28
|
-
/* Field-to-field row rhythm (gh#295) — mirrors --descriptions-row-gap so a read-only value
|
|
29
|
-
* mixed in via `FormField.staticText` (gh#294) and a real Descriptions block share ONE canonical
|
|
30
|
-
* rhythm. Applied via margin-based sibling spacing on FormField itself (not Form's flex `gap`,
|
|
31
|
-
* which only reaches DIRECT children — dead in the common `Form > CardContent > FormField*`
|
|
32
|
-
* composition every real Save-button form needs), so it holds at any DOM depth relative to Form. */
|
|
33
|
-
--form-field-row-gap: var(--space-3); /* 12px */
|
|
34
|
-
|
|
35
|
-
/* Row rhythm between the ROWS of a `<Form columns={n}>` grid (gh#304). The grid path cannot use
|
|
36
|
-
* the margin above — a per-item margin inside a grid double-counts the track gap AND leaves the
|
|
37
|
-
* first item of row 1 unshifted while its row-mates drop, so row 1's columns end up misaligned.
|
|
38
|
-
* The rhythm therefore rides the grid's own `row-gap`, and it DEFAULTS TO THE SAME
|
|
39
|
-
* --form-field-row-gap the stacked path uses so `columns={1}` — and every `columns={n}` form once
|
|
40
|
-
* it collapses to one column on a narrow container — is pixel-identical to a Form with no
|
|
41
|
-
* `columns` at all. Retune this alone only to give multi-column forms a looser row rhythm than
|
|
42
|
-
* stacked ones; retune --form-field-row-gap to move both together. */
|
|
43
|
-
--form-grid-row-gap: var(--form-field-row-gap); /* 12px */
|
|
44
|
-
|
|
45
|
-
/* Gutter between the COLUMNS of a `<Form columns={n}>` grid (gh#304). Was ResponsiveGrid's
|
|
46
|
-
* generic 16px stack gap with no way to say otherwise; it is a form's inter-field gutter and a
|
|
47
|
-
* service aligning forms to its design grid needs it as a knob (rule #45). The default keeps the
|
|
48
|
-
* historical 16px, so nothing moves unless a theme opts in. */
|
|
49
|
-
--form-grid-column-gap: var(--space-4); /* 16px */
|
|
7
|
+
--form-label-gap: var(--space-4);
|
|
8
|
+
|
|
9
|
+
--form-label-font-size: var(--text-sm);
|
|
10
|
+
|
|
11
|
+
--form-block-gap: var(--space-4);
|
|
12
|
+
|
|
13
|
+
--form-field-row-gap: var(--space-3);
|
|
14
|
+
|
|
15
|
+
--form-grid-row-gap: var(--form-field-row-gap);
|
|
16
|
+
|
|
17
|
+
--form-grid-column-gap: var(--space-4);
|
|
50
18
|
}
|