@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
|
@@ -1,71 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
* (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky
|
|
3
|
-
* table-of-contents rail.
|
|
4
|
-
*
|
|
5
|
-
* Rule #45 — every service-tunable constant is a knob: the readable measure, the rail
|
|
6
|
-
* width/offset, the section rhythm and the body leading are exactly the values a service
|
|
7
|
-
* theme wants to re-tune to match its design grid, so NONE of them are hard-coded in
|
|
8
|
-
* `src/styles/layout.css`.
|
|
9
|
-
*
|
|
10
|
-
* Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to
|
|
11
|
-
* `none`. A service opts IN via theme, e.g.
|
|
12
|
-
* --legal-document-toc-border: 1px solid hsl(var(--border));
|
|
13
|
-
*
|
|
14
|
-
* Colour knobs whose default is a ROLE token are declared `initial` here with the role
|
|
15
|
-
* default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md ·
|
|
16
|
-
* "Role-mirror knobs MUST be `initial`" — so a scoped `[data-tenant]` / `.dark`
|
|
17
|
-
* override of the role still reaches them.
|
|
18
|
-
*/
|
|
1
|
+
|
|
19
2
|
|
|
20
3
|
:root {
|
|
21
|
-
|
|
22
|
-
/* Readable document measure. Caps the header, the section column and the footer so
|
|
23
|
-
* a 1440px viewport still reads at ~75-90 characters per line. */
|
|
24
|
-
/* Section anchor ring needs a gap so the mark does not touch the heading
|
|
25
|
-
* (outline form — styles/focus-ring.css). */
|
|
4
|
+
|
|
26
5
|
--legal-document-section-focus-ring-offset: var(--space-1);
|
|
27
6
|
|
|
28
7
|
--legal-document-measure-max-width: 46rem;
|
|
29
|
-
|
|
8
|
+
|
|
30
9
|
--legal-document-column-gap: var(--space-10);
|
|
31
|
-
|
|
10
|
+
|
|
32
11
|
--legal-document-toc-width: 15rem;
|
|
33
|
-
|
|
12
|
+
|
|
34
13
|
--legal-document-toc-inset-block-start: var(--space-6);
|
|
35
|
-
|
|
14
|
+
|
|
36
15
|
--legal-document-toc-max-height: calc(100dvh - var(--space-12));
|
|
37
16
|
--legal-document-toc-gap: var(--space-1);
|
|
38
17
|
--legal-document-toc-item-padding: var(--space-1) var(--space-2);
|
|
39
18
|
--legal-document-toc-item-radius: var(--radius);
|
|
40
19
|
--legal-document-toc-title-font-size: var(--font-size-2xs);
|
|
41
20
|
--legal-document-toc-font-size: var(--font-size-xs);
|
|
42
|
-
|
|
43
|
-
* active state is never colour-only (WCAG 1.4.1). */
|
|
21
|
+
|
|
44
22
|
--legal-document-toc-marker-width: var(--stroke-md);
|
|
45
|
-
|
|
23
|
+
|
|
46
24
|
--legal-document-nav-gap: var(--space-4);
|
|
47
25
|
--legal-document-header-gap: var(--space-2);
|
|
48
26
|
--legal-document-meta-gap: var(--space-2);
|
|
49
27
|
--legal-document-meta-font-size: var(--font-size-xs);
|
|
50
28
|
--legal-document-section-gap: var(--space-10);
|
|
51
29
|
--legal-document-section-title-gap: var(--space-3);
|
|
52
|
-
|
|
30
|
+
|
|
53
31
|
--legal-document-body-line-height: 1.8;
|
|
54
|
-
|
|
55
|
-
* activation leaves above the heading so it is not hidden under sticky chrome. */
|
|
32
|
+
|
|
56
33
|
--legal-document-scroll-offset: var(--space-6);
|
|
57
34
|
--legal-document-footer-gap: var(--space-4);
|
|
58
35
|
|
|
59
|
-
/* ── Chrome — quiet by default (rule #44) ─────────────────────────────────── */
|
|
60
36
|
--legal-document-toc-border: none;
|
|
61
37
|
--legal-document-header-border: none;
|
|
62
38
|
--legal-document-footer-border: none;
|
|
63
39
|
|
|
64
|
-
|
|
65
|
-
--legal-document-
|
|
66
|
-
--legal-document-
|
|
67
|
-
--legal-document-toc-foreground: initial;
|
|
68
|
-
--legal-document-toc-active-
|
|
69
|
-
--legal-document-toc-
|
|
70
|
-
--legal-document-toc-marker-color: initial; /* default = hsl(var(--primary)) */
|
|
40
|
+
--legal-document-meta-foreground: initial;
|
|
41
|
+
--legal-document-summary-foreground: initial;
|
|
42
|
+
--legal-document-toc-foreground: initial;
|
|
43
|
+
--legal-document-toc-active-foreground: initial;
|
|
44
|
+
--legal-document-toc-active-background: initial;
|
|
45
|
+
--legal-document-toc-marker-color: initial;
|
|
71
46
|
}
|
|
@@ -1,52 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
* (sessions / API tokens / linked accounts / passkeys / notifications …). Sits in a flush
|
|
3
|
-
* CardContent; rows separate with a quiet divider (#44 — chrome defaults to the calm
|
|
4
|
-
* semantic border). */
|
|
1
|
+
|
|
5
2
|
:root {
|
|
6
3
|
--list-row-padding-y: var(--space-3);
|
|
7
4
|
--list-row-padding-x: var(--space-4);
|
|
8
5
|
--list-row-gap: var(--space-3);
|
|
9
|
-
|
|
10
|
-
* theme (a :root binding to a role var freezes at :root). Default = 1px solid hsl(var(--border)). */
|
|
6
|
+
|
|
11
7
|
--list-row-border: initial;
|
|
12
|
-
|
|
13
|
-
* (#45 — a service retunes the stack threshold to its grid). Clamped with min(…, 100%) at the
|
|
14
|
-
* call site, so a container narrower than the knob can never force page-root overflow (#224). */
|
|
8
|
+
|
|
15
9
|
--list-row-body-min-width: 12rem;
|
|
16
|
-
|
|
10
|
+
|
|
17
11
|
--list-row-trailing-gap: var(--space-2);
|
|
18
|
-
|
|
19
|
-
* The canonical invitation / history row: a 36px leading avatar, a shrinkable title +
|
|
20
|
-
* description body and one or two small trailing Buttons, all on ONE line inside the canonical
|
|
21
|
-
* 358px card (326px content after the row's own inline inset) at a 390px viewport. These knobs
|
|
22
|
-
* only LOWER the geometry — the #224 wrap contract (row + trailing cluster wrap, body clamped
|
|
23
|
-
* with min(…, 100%)) is untouched, so a cluster that genuinely cannot fit still wraps instead of
|
|
24
|
-
* widening the page root.
|
|
25
|
-
* Declared `initial` so the spacing defaults re-resolve at the CALL SITE — --space-2 is
|
|
26
|
-
* density-scaled and re-declared inside a `.ui-density-*` subtree, so a :root binding would
|
|
27
|
-
* freeze compact rows at the :root density (docs/TOKENS.md — the :root freeze rule).
|
|
28
|
-
* Defaults = var(--space-2) block padding · var(--list-row-padding-x) inline padding ·
|
|
29
|
-
* var(--space-2) gap. */
|
|
12
|
+
|
|
30
13
|
--list-row-compact-padding-y: initial;
|
|
31
|
-
|
|
32
|
-
* one optical axis; a service retunes it to its own grid (#45). */
|
|
14
|
+
|
|
33
15
|
--list-row-compact-padding-x: initial;
|
|
34
16
|
--list-row-compact-gap: initial;
|
|
35
|
-
|
|
36
|
-
* canonical column (36 + 8 + 96 + 8 + 146 = 294 ≤ 326), and still a readable measure. */
|
|
17
|
+
|
|
37
18
|
--list-row-compact-body-min-width: 6rem;
|
|
38
|
-
|
|
39
|
-
* surface shows through untouched (#44 — chrome defaults to the quietest state). */
|
|
19
|
+
|
|
40
20
|
--list-row-read-background: initial;
|
|
41
|
-
|
|
42
|
-
* call site under a scoped theme. Documented default = hsl(var(--muted)), the same quiet
|
|
43
|
-
* emphasis role the table header uses; it keeps the xs muted description line at WCAG AA
|
|
44
|
-
* (4.63:1 light / 5.47:1 dark), which hsl(var(--accent)) would not (4.23:1 light). */
|
|
21
|
+
|
|
45
22
|
--list-row-unread-background: initial;
|
|
46
|
-
|
|
47
|
-
* under a scoped theme. Documented default = hsl(var(--primary)). */
|
|
23
|
+
|
|
48
24
|
--list-row-indicator-color: initial;
|
|
49
|
-
|
|
50
|
-
* titles of a mixed list stay on one optical axis. */
|
|
25
|
+
|
|
51
26
|
--list-row-indicator-size: var(--space-2);
|
|
52
27
|
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* app shell header, auth screens, and topbars. Size + radius + per-tier font-size are knobs so a
|
|
3
|
-
* service theme retunes the mark without forking CSS (rules #44/#45). Colours read the primary
|
|
4
|
-
* role tokens directly, so a re-themed --primary re-tints the mark automatically. */
|
|
1
|
+
|
|
5
2
|
:root {
|
|
6
3
|
--logo-radius: var(--radius);
|
|
7
4
|
--logo-size-xs: 1.25rem;
|
|
@@ -12,71 +9,19 @@
|
|
|
12
9
|
--logo-font-size-sm: var(--font-size-xs);
|
|
13
10
|
--logo-font-size-md: var(--font-size-sm);
|
|
14
11
|
--logo-font-size-lg: var(--font-size-base);
|
|
15
|
-
|
|
16
|
-
* action colour never recolours the mark) AND of --success (the 若竹 STATUS green stays on
|
|
17
|
-
* badges/progress/"saved" text — the mark used to borrow it and rendered ΔE76 ≈ 17.5 off the
|
|
18
|
-
* canonical emerald, gh#250). Services retune the role once for every Logo.
|
|
19
|
-
* ROLE-MIRROR KNOBS — declared `initial` here with the role default at the CALL SITE
|
|
20
|
-
* (logo-layout.css), so a scoped `.dark` / `[data-tenant]` override of --brand actually
|
|
21
|
-
* reaches the mark instead of freezing at the :root value (docs/TOKENS.md ·
|
|
22
|
-
* "Role-mirror knobs MUST be `initial`"). Documented defaults:
|
|
23
|
-
* --logo-success-background = hsl(var(--brand))
|
|
24
|
-
* --logo-success-foreground = hsl(var(--logo-identity-foreground))
|
|
25
|
-
* --logo-godx-color = hsl(var(--brand)) */
|
|
12
|
+
|
|
26
13
|
--logo-success-background: initial;
|
|
27
14
|
--logo-success-foreground: initial;
|
|
28
15
|
--logo-godx-color: initial;
|
|
29
16
|
|
|
30
|
-
/* Identity-fill INK — the ink `mark="glyph"` sets its (caller-supplied) TEXT in when it sits on
|
|
31
|
-
* the --brand identity fill. This is deliberately NOT --brand-foreground.
|
|
32
|
-
*
|
|
33
|
-
* --brand-foreground is the identity artwork's KNOCKOUT colour, not an ink: it tracks
|
|
34
|
-
* --background in both themes (light 60 33% 99% = --background; dark 48 9% 9% = --background)
|
|
35
|
-
* because `<Logo mark="godx">` punches its inner bar as an evenodd HOLE and the email mark has to
|
|
36
|
-
* paint that hole as a solid fill to match. Negative space only has to clear WCAG 2.2 SC 1.4.11
|
|
37
|
-
* (3:1, non-text) — and at 3.67:1 on the emerald it does.
|
|
38
|
-
*
|
|
39
|
-
* The boxed glyph is a different thing: it renders real TEXT, so SC 1.4.3 applies at 4.5:1 (14px
|
|
40
|
-
* bold is NOT "large text" — that needs 18.66px bold / 24px), and the knockout white measured
|
|
41
|
-
* 3.67:1 → a genuine AA failure. This ink is 48 9% 9% (#191815), the same near-black spine the
|
|
42
|
-
* DARK theme already inked the glyph with, so it is theme-INVARIANT: dark renders byte-identically
|
|
43
|
-
* (6.89:1, unchanged) and light rises 3.67 → 4.74:1. A service that re-themes --brand to a dark
|
|
44
|
-
* fill overrides --logo-success-foreground (the public knob) to re-invert the ink.
|
|
45
|
-
*
|
|
46
|
-
* NOT a role-mirror knob: its default is a real value, not a role token, so there is no role to
|
|
47
|
-
* freeze at :root and the `initial` + call-site rule (docs/TOKENS.md) does not apply to it. */
|
|
48
17
|
--logo-identity-foreground: 48 9% 9%;
|
|
49
18
|
|
|
50
|
-
/* ── Identity-mark box (`<Logo mark="godx" />`) ──────────────────────────────────────────────
|
|
51
|
-
* The `size` prop drives the identity mark exactly like it drives the boxed glyph — a public
|
|
52
|
-
* prop that renders identically at every tier is a silent no-op, and the godx LOCKUP already
|
|
53
|
-
* scaled its wordmark per tier, so a fixed mark broke the mark↔wordmark proportion at
|
|
54
|
-
* `size="lg"` (gh#163 follow-up). The godx artwork is a horizontal capsule inside a square
|
|
55
|
-
* viewBox, so it carries less optical weight than the fully-filled glyph box: each tier sits
|
|
56
|
-
* +0.25rem above its --logo-size-* sibling. `md` is 2rem — the historical fixed value — so
|
|
57
|
-
* every existing default-size identity surface renders byte-identically.
|
|
58
|
-
*
|
|
59
|
-
* --logo-godx-size is the PIN: declared `initial` (guaranteed-invalid) here with the per-tier
|
|
60
|
-
* default at the CALL SITE (logo-layout.css), so it is inert by default and a service that
|
|
61
|
-
* sets it once freezes the mark at that box on EVERY tier — the same call-site pattern the
|
|
62
|
-
* role-mirror colour knobs use (docs/TOKENS.md). Retune a single tier via --logo-godx-size-*.
|
|
63
|
-
* Documented default: --logo-godx-size = unset (tiers apply). */
|
|
64
19
|
--logo-godx-size-xs: 1.5rem;
|
|
65
20
|
--logo-godx-size-sm: 1.75rem;
|
|
66
21
|
--logo-godx-size-md: 2rem;
|
|
67
22
|
--logo-godx-size-lg: 2.5rem;
|
|
68
23
|
--logo-godx-size: initial;
|
|
69
24
|
|
|
70
|
-
/* ── Wordmark / lockup (`<Logo wordmark="GoDX" />`) ─────────────────────────────────────────
|
|
71
|
-
* The readable product name set beside the mark. The package ships NO wordmark artwork: the
|
|
72
|
-
* wordmark is typeset in the design-system display face, so a service retunes face, weight,
|
|
73
|
-
* tracking, size and the mark↔wordmark gap here instead of writing page CSS. The colour is a
|
|
74
|
-
* role-mirror knob whose default is the IDENTITY role --brand (never --primary, never the
|
|
75
|
-
* --success status green): the GoDX/`success` lockup is canonical emerald out of the box, and
|
|
76
|
-
* every other lockup reads --foreground.
|
|
77
|
-
* Documented defaults: --logo-wordmark-font-family = var(--font-family-display);
|
|
78
|
-
* --logo-wordmark-color = hsl(var(--foreground)), or hsl(var(--brand)) on the
|
|
79
|
-
* godx / tone="success" lockup. */
|
|
80
25
|
--logo-wordmark-gap: var(--space-2);
|
|
81
26
|
--logo-wordmark-font-size-xs: var(--font-size-xs);
|
|
82
27
|
--logo-wordmark-font-size-sm: var(--font-size-sm);
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
|
|
3
3
|
:root {
|
|
4
4
|
--pagination-gap: var(--space-inline-sm);
|
|
5
5
|
--pagination-item-gap: var(--space-inline-xs);
|
|
6
|
-
|
|
7
|
-
* localized labels (ja 100/ページ) never clip; this token only keeps short labels from
|
|
8
|
-
* collapsing below the control rhythm. */
|
|
6
|
+
|
|
9
7
|
--pagination-size-width: 5.5rem;
|
|
10
|
-
|
|
11
|
-
* only takes effect once a number outgrows that box. Deliberately --space-1 rather than
|
|
12
|
-
* --space-2: at the wider value a two-digit label (14.8px of text + 2 * 8px + 2px border) came
|
|
13
|
-
* to 32.8px and pushed the common 1–2 digit buttons off square by 0.8px. */
|
|
8
|
+
|
|
14
9
|
--pagination-page-padding-x: var(--space-1);
|
|
15
10
|
--pagination-total-font-size: var(--font-size-sm);
|
|
16
|
-
|
|
17
|
-
* Buttons, so `.ui-button--sm svg` would draw them at --control-icon-size-sm; the component
|
|
18
|
-
* pinned them larger with a literal `size-4` class instead, because in simple mode the chevron
|
|
19
|
-
* IS the control — there is no label beside it to carry the affordance. The knob keeps that
|
|
20
|
-
* deliberate override themeable (rule #45) and tracks the default control-icon tier, so it now
|
|
21
|
-
* follows density like every other control glyph instead of staying a flat 1rem. */
|
|
11
|
+
|
|
22
12
|
--pagination-icon-size: var(--control-icon-size);
|
|
23
13
|
--filter-bar-gap: var(--space-3);
|
|
24
14
|
--filter-bar-padding-y: var(--space-2);
|
|
@@ -29,20 +19,11 @@
|
|
|
29
19
|
--steps-inline-item-gap: var(--space-1);
|
|
30
20
|
--steps-inline-font-size: var(--font-size-xs);
|
|
31
21
|
--steps-inline-separator-size: var(--control-icon-size-sm);
|
|
32
|
-
|
|
33
|
-
* service can express progression the canonical way — an accent TINT at normal weight — instead
|
|
34
|
-
* of the original bold. --steps-inline-index-color / --steps-inline-separator-color are
|
|
35
|
-
* role-mirror knobs (docs/TOKENS.md): `initial` so their defaults (the inherited step colour and
|
|
36
|
-
* the --muted-foreground role) resolve at the CALL SITE and a scoped [data-tenant]/.dark
|
|
37
|
-
* override still reaches them. Defaults reproduce today's row byte for byte. */
|
|
22
|
+
|
|
38
23
|
--steps-inline-index-font-weight: var(--font-weight-bold);
|
|
39
|
-
--steps-inline-index-color: initial;
|
|
40
|
-
--steps-inline-separator-color: initial;
|
|
24
|
+
--steps-inline-index-color: initial;
|
|
25
|
+
--steps-inline-separator-color: initial;
|
|
41
26
|
|
|
42
|
-
/* AppSettingPicker `compact` (gh#217) — the small, content-hugging labelled trigger used in an
|
|
43
|
-
* auth/legal footer, where the square icon-only default reads as a stray button and the full
|
|
44
|
-
* labelled trigger is too tall. Box height comes from the official --control-height-sm tier (never
|
|
45
|
-
* a literal / ad-hoc calc), and every other knob is themeable (rule #45). */
|
|
46
27
|
--app-setting-picker-compact-control-height: var(--control-height-sm);
|
|
47
28
|
--app-setting-picker-compact-padding-x: var(--space-2);
|
|
48
29
|
--app-setting-picker-compact-gap: var(--space-1);
|
|
@@ -52,104 +33,51 @@
|
|
|
52
33
|
--tabs-list-max-inline-size: 100%;
|
|
53
34
|
--tabs-list-overflow: auto;
|
|
54
35
|
|
|
55
|
-
/* Tabs `line` active indicator (gh#248) — the ONLY selected-state decoration the line variant
|
|
56
|
-
* paints. The surrounding active ring belongs to the default/card lists, so `:focus-visible`
|
|
57
|
-
* keeps its own distinct keyboard ring here (WCAG 2.4.7). `--tabs-indicator-background` is a
|
|
58
|
-
* role-mirror knob: `initial` so hsl(var(--primary)) re-resolves at the CALL SITE under a scoped
|
|
59
|
-
* [data-tenant]/.dark theme (a :root binding to a role var would freeze at :root).
|
|
60
|
-
* Default = hsl(var(--primary)) · 2px thick · flush with the trigger edge (offset 0 = quietest,
|
|
61
|
-
* rule #44); a service raises the offset to park the bar on a thicker strip hairline. */
|
|
62
36
|
--tabs-indicator-background: initial;
|
|
63
37
|
--tabs-indicator-size: 2px;
|
|
64
38
|
--tabs-indicator-offset: 0px;
|
|
65
39
|
|
|
66
|
-
/* TABS BOX GEOMETRY (#319) — the strip↔panel gap and the whole `line` trigger box were Tailwind
|
|
67
|
-
* scale literals on tabs.tsx, so a service could only retune the tab rhythm by forking the
|
|
68
|
-
* component (rule #45).
|
|
69
|
-
* Every default below is a RAW rem/px, deliberately NOT a --space-* step: the classes they
|
|
70
|
-
* replace (`gap-2`, `p-0`, `rounded-none`, `px-4`, `py-2`) read Tailwind's own --spacing grid,
|
|
71
|
-
* which this repo does NOT density-scale, so a --space-* default would silently resize the tabs
|
|
72
|
-
* under a compact/comfortable density. A service that WANTS a knob to follow density simply
|
|
73
|
-
* points it at var(--space-2) itself. */
|
|
74
|
-
|
|
75
|
-
/* Gap between the tab strip and the panel below it. */
|
|
76
40
|
--tabs-root-gap: 0.5rem;
|
|
77
|
-
|
|
78
|
-
* a flat underlined rail, so its default is the quietest value — none (rule #44). Raise it to
|
|
79
|
-
* give the rail breathing room above its hairline. */
|
|
41
|
+
|
|
80
42
|
--tabs-list-line-space-inset: 0px;
|
|
81
|
-
|
|
82
|
-
* never a pill; the hit box is wider/taller than the pill trigger so the underline spans a real
|
|
83
|
-
* column of the rail. */
|
|
43
|
+
|
|
84
44
|
--tabs-trigger-line-radius: 0px;
|
|
85
45
|
--tabs-trigger-line-padding-x: 1rem;
|
|
86
46
|
--tabs-trigger-line-padding-y: 0.5rem;
|
|
87
47
|
|
|
88
|
-
/* Menu item hover/highlight tint — `initial` so the --accent default re-resolves at the call site
|
|
89
|
-
* under a scoped theme (a :root binding to a role var freezes at :root).
|
|
90
|
-
* Defaults = hsl(var(--accent)) fill · hsl(var(--accent-foreground)) text. */
|
|
91
48
|
--menubar-item-hover-background: initial;
|
|
92
49
|
--menubar-item-hover-foreground: initial;
|
|
93
50
|
|
|
94
|
-
/* Sticky offset for the pinned filter strip (Toolbar `sticky`, #197). Default 0 (chrome,
|
|
95
|
-
* rule #44); raise it so the strip parks below a fixed topbar. */
|
|
96
51
|
--filter-bar-sticky-offset: 0px;
|
|
97
|
-
|
|
98
|
-
* so --background re-resolves at the call site under a scoped [data-tenant]/.dark theme. */
|
|
52
|
+
|
|
99
53
|
--filter-bar-sticky-background: initial;
|
|
100
|
-
|
|
101
|
-
* scrollbar never overlaps the controls. Rule #45 — a service theme retunes it to its grid
|
|
102
|
-
* (0 on an overlay-scrollbar platform). */
|
|
54
|
+
|
|
103
55
|
--filter-bar-scroll-padding-y: var(--space-1);
|
|
104
56
|
|
|
105
|
-
/* FilterBar typed model (gh#258) — token-owned geometry so every list page gets the SAME
|
|
106
|
-
* search width, filter width, chip rhythm and section stacking without page-local CSS.
|
|
107
|
-
* All are rule-#45 knobs: a service theme retunes them once, props/className override per
|
|
108
|
-
* instance. Below 640px the strip stacks (search/filters full-width); the widths apply from
|
|
109
|
-
* the 640px breakpoint up, always clamped by min(100%, …) so a narrow container never
|
|
110
|
-
* overflows at 390px with long JA/EN/VI labels. */
|
|
111
57
|
--filter-bar-search-width: 20rem;
|
|
112
58
|
--filter-bar-filter-width: var(--filter-picker-width-md);
|
|
113
59
|
--filter-bar-chip-gap: var(--space-2);
|
|
114
60
|
--filter-bar-section-gap: var(--space-2);
|
|
115
61
|
|
|
116
|
-
/* MENU SURFACES — one row rhythm shared by ContextMenu, Menubar and DropdownMenu. All three are
|
|
117
|
-
* the same Radix popup surface; the row height was a literal `2rem` in the CSS and DropdownMenu
|
|
118
|
-
* had not been converted at all, so it carried the whole box as Tailwind literals on the
|
|
119
|
-
* component (#319). A service tunes the menu rhythm once here instead of three times. */
|
|
120
62
|
--menu-item-height: var(--band-height-md);
|
|
121
63
|
--menu-item-radius: var(--radius-sm);
|
|
122
64
|
--menu-item-space-inline: var(--space-2);
|
|
123
65
|
--menu-item-space-gap: var(--space-2);
|
|
124
66
|
--menu-item-font-size: var(--font-size-base);
|
|
125
|
-
|
|
126
|
-
* labels stay aligned with their checked siblings. */
|
|
67
|
+
|
|
127
68
|
--menu-item-inset-space-inline-start: var(--space-8);
|
|
128
69
|
--menu-indicator-size: 0.875rem;
|
|
129
70
|
--menu-indicator-inset-inline-start: var(--space-2);
|
|
130
71
|
--menu-icon-size: var(--icon-size-md);
|
|
131
72
|
--menu-content-space-inset: var(--space-1);
|
|
132
73
|
--menu-content-min-width: 10rem;
|
|
133
|
-
|
|
74
|
+
|
|
134
75
|
--dropdown-content-min-width: 8rem;
|
|
135
76
|
--menu-separator-space-block: var(--space-1);
|
|
136
77
|
--menu-separator-space-inline: calc(var(--space-1) * -1);
|
|
137
78
|
|
|
138
|
-
/* NAVIGATION MENU — the disclosure chevron on a top-level trigger. It was a bare `0.9rem` in
|
|
139
|
-
* navigation-layout.css: no token, so unreachable from an app (gh#326), and 14.4px, so off the
|
|
140
|
-
* icon scale AND off the pixel grid. A stroked chevron drawn into a 14.4px box lands its path
|
|
141
|
-
* on half pixels at 1x, which is a rendering defect rather than a rounding preference, so this
|
|
142
|
-
* SNAPS to the nearest step — --icon-size-sm, 14px, −0.4px. The nearest step upward is 16px
|
|
143
|
-
* (+1.6px) and would also fight the `opacity: 0.7` that makes this chevron deliberately quiet.
|
|
144
|
-
* `sm` rather than `md` is the same call the other quiet chevrons in the system already made
|
|
145
|
-
* (--month-picker-separator-icon-size, --steps-inline-separator-size). NOT
|
|
146
|
-
* --scaling-multiplied: the literal it replaces did not track density. */
|
|
147
79
|
--navigation-menu-trigger-icon-size: var(--icon-size-sm);
|
|
148
80
|
|
|
149
|
-
/* STEPS — the full (non-inline) variant. `--steps-inline-*` already covers the compact inline
|
|
150
|
-
* form; the marker, connector and text rhythm of the main variant were still literal on the
|
|
151
|
-
* component (#319), so a service could not resize the dot, retighten the vertical run, or move
|
|
152
|
-
* the horizontal connector to match its own grid. */
|
|
153
81
|
--steps-dot-size: 0.625rem;
|
|
154
82
|
--steps-dot-process-ring-width: var(--stroke-xl);
|
|
155
83
|
--steps-marker-border-width: var(--stroke-md);
|
|
@@ -159,21 +87,16 @@
|
|
|
159
87
|
--steps-title-font-size: var(--font-size-sm);
|
|
160
88
|
--steps-title-font-size-compact: var(--font-size-xs);
|
|
161
89
|
--steps-subtitle-font-size: var(--font-size-xs);
|
|
162
|
-
|
|
90
|
+
|
|
163
91
|
--steps-vertical-space-gap: var(--space-3);
|
|
164
92
|
--steps-vertical-space-block-end: var(--space-8);
|
|
165
93
|
--steps-vertical-text-space-block-start: var(--space-1);
|
|
166
|
-
|
|
167
|
-
* two markers — inset by the marker radius on each side so it never runs under a marker. */
|
|
94
|
+
|
|
168
95
|
--steps-horizontal-text-space-block-start: var(--space-2);
|
|
169
96
|
--steps-horizontal-text-space-inline: var(--space-2);
|
|
170
97
|
--steps-connector-inset: 1.25rem;
|
|
171
98
|
--steps-connector-space-block-start: var(--space-4);
|
|
172
99
|
|
|
173
|
-
/* APP SETTING PICKER — per-kind trigger widths (#319). Each picker is sized to the longest
|
|
174
|
-
* value it can show: a timezone name is far wider than a theme name. These were literal
|
|
175
|
-
* `sm:w-*` steps in a lookup table, so a service whose locale renders longer labels (a German
|
|
176
|
-
* timezone list, a Japanese density label) could not widen just the one that overflows. */
|
|
177
100
|
--app-setting-picker-locale-width: 10rem;
|
|
178
101
|
--app-setting-picker-timezone-width: 14rem;
|
|
179
102
|
--app-setting-picker-date-format-width: 11rem;
|
|
@@ -182,8 +105,7 @@
|
|
|
182
105
|
--app-setting-picker-brand-width: 11rem;
|
|
183
106
|
--app-setting-picker-density-width: 10rem;
|
|
184
107
|
--app-setting-picker-font-size-width: 9rem;
|
|
185
|
-
|
|
186
|
-
* dropped into a narrow topbar never stretches the bar (gh#165). */
|
|
108
|
+
|
|
187
109
|
--app-setting-picker-width-breakpoint: 40rem;
|
|
188
110
|
--app-setting-picker-icon-size: var(--icon-size-md);
|
|
189
111
|
--app-setting-picker-icon-rest-alpha: 0.7;
|
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
* The rail geometry (--scroll-area-bar-size / --scroll-area-bar-padding / --scroll-area-thumb-radius)
|
|
4
|
-
* lives with the other data-display knobs in ./data-display.css, because it is styled from
|
|
5
|
-
* styles/data-display-layout.css. What lives HERE is the one constant that is read by JavaScript
|
|
6
|
-
* rather than by CSS, so it needs no layout rule to hang off.
|
|
7
|
-
*/
|
|
1
|
+
|
|
8
2
|
:root {
|
|
9
|
-
|
|
10
|
-
* `<ScrollArea anchor="bottom">`. Inside this band new content keeps the viewport pinned to the
|
|
11
|
-
* newest item; one pixel beyond it the reader is reading history and anchoring NEVER moves them
|
|
12
|
-
* again until they come back (WCAG 3.2.5 — no change of context on request of the machine).
|
|
13
|
-
*
|
|
14
|
-
* It is a rule #45 knob because the right distance is a function of the row height a service
|
|
15
|
-
* renders: one line of a dense audit log is ~20px, a chat bubble with an avatar is ~64px, and
|
|
16
|
-
* "one row from the bottom" is what the reader actually means. Expressed in rem on purpose — it
|
|
17
|
-
* then tracks the user's font size, so the band is still one row at 200% zoom (WCAG 1.4.4)
|
|
18
|
-
* instead of collapsing to a third of a row. The `anchorOffset` prop overrides it per instance;
|
|
19
|
-
* px/rem/em are all accepted. */
|
|
3
|
+
|
|
20
4
|
--scroll-area-anchor-offset: 3rem;
|
|
21
5
|
}
|
|
@@ -1,42 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
* interrupts: a message stream's day divider, an unread "new messages" watermark, an auth
|
|
3
|
-
* conjunction. Before #308 the only labelled rule in the library was the auth-scoped AuthDivider,
|
|
4
|
-
* whose rule baked `height: 1px` into shell-layout.css and whose type ramp lived on the
|
|
5
|
-
* `--auth-shell-divider-*` layer — so a service that retuned its login divider silently retuned
|
|
6
|
-
* every day divider in its chat. These knobs are the generic layer; AuthDivider now re-points them.
|
|
7
|
-
*
|
|
8
|
-
* Chrome defaults to the QUIETEST state (rule #44): one hairline, a muted xs label, no surrounding
|
|
9
|
-
* padding. A service opts IN to a louder watermark from its theme, never by forking CSS. */
|
|
1
|
+
|
|
10
2
|
:root {
|
|
11
|
-
|
|
3
|
+
|
|
12
4
|
--separator-rule-size: var(--stroke-hairline);
|
|
13
|
-
|
|
14
|
-
* CALL SITE under a scoped [data-tenant] / .dark theme (docs/TOKENS.md — the :root freeze rule).
|
|
15
|
-
* Documented default = hsl(var(--border)). */
|
|
5
|
+
|
|
16
6
|
--separator-rule-color: initial;
|
|
17
|
-
|
|
18
|
-
* site: --space-* is density-scaled and re-declared inside a `.ui-density-*` subtree, so a
|
|
19
|
-
* :root binding would freeze the gap at the :root density. Documented default = var(--space-3). */
|
|
7
|
+
|
|
20
8
|
--separator-label-gap: initial;
|
|
21
|
-
|
|
22
|
-
* inline edge (the Slack/Mattermost stream convention). It is a grid track on the INLINE axis,
|
|
23
|
-
* so it flips with the writing direction under dir="rtl" with no extra rule. `initial` for the
|
|
24
|
-
* same density reason as the gap. Documented default = var(--space-6). */
|
|
9
|
+
|
|
25
10
|
--separator-label-inset: initial;
|
|
26
|
-
|
|
27
|
-
* stream/divider voice; --separator-label-line-height keeps ja/vi descenders and tone marks
|
|
28
|
-
* intact (cf. #254); --separator-label-font-weight lets a service raise an unread watermark
|
|
29
|
-
* without touching the day divider. */
|
|
11
|
+
|
|
30
12
|
--separator-label-font-size: var(--font-size-xs);
|
|
31
13
|
--separator-label-line-height: var(--line-height-normal);
|
|
32
14
|
--separator-label-font-weight: var(--font-weight-medium);
|
|
33
|
-
|
|
15
|
+
|
|
34
16
|
--separator-label-color: initial;
|
|
35
|
-
|
|
36
|
-
* alone — so an attention rule such as an unread watermark is not colour-only (WCAG 1.4.1) and
|
|
37
|
-
* survives forced-colors. All role-mirror → `initial`; documented defaults are the matching
|
|
38
|
-
* semantic role. `muted` deliberately mirrors the quiet default so a service can still split the
|
|
39
|
-
* two voices later without a breaking change. */
|
|
17
|
+
|
|
40
18
|
--separator-tone-muted-rule-color: initial;
|
|
41
19
|
--separator-tone-muted-label-color: initial;
|
|
42
20
|
--separator-tone-primary-rule-color: initial;
|
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
* Lives in its own tier file rather than in feedback.css because these two knobs are the
|
|
4
|
-
* *responsive* contract (`SheetContent responsive="auto"`), not the static panel chrome —
|
|
5
|
-
* see feedback.css for --sheet-width-default / --sheet-pad-* / --sheet-overlay-background.
|
|
6
|
-
*/
|
|
1
|
+
|
|
7
2
|
|
|
8
3
|
:root {
|
|
9
|
-
|
|
10
|
-
* sheet instead of the desktop side panel. Read at runtime by useSheetResponsiveMode() (a CSS
|
|
11
|
-
* @media cannot resolve a custom property), so a service moves the drawer breakpoint from ONE
|
|
12
|
-
* knob for every overlay that opts into the responsive contract — Sheet and OrgSwitcher alike.
|
|
13
|
-
* 48rem = 768px mirrors the library's canonical mobile line (useIsMobile). Accepts px/rem/em. */
|
|
4
|
+
|
|
14
5
|
--sheet-responsive-breakpoint-width: 48rem;
|
|
15
|
-
|
|
16
|
-
* `side="bottom"` sheet, which stays content-sized). Keeps the sheet below the viewport so the
|
|
17
|
-
* SheetBody scrolls and the page behind it stays visible/dismissable. */
|
|
6
|
+
|
|
18
7
|
--sheet-bottom-max-height: 85dvh;
|
|
19
8
|
}
|