@godxjp/ui 19.1.0 → 19.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -128
- package/dist/app/theme-axes.d.ts +4 -15
- package/dist/app/timezones.d.ts +1 -4
- package/dist/components/charts/area-chart.d.ts +2 -3
- package/dist/components/charts/bar-chart.d.ts +2 -3
- package/dist/components/charts/chart-frame.d.ts +7 -16
- package/dist/components/charts/chart-summary.d.ts +2 -2
- package/dist/components/charts/compact-bar-trend.d.ts +9 -24
- package/dist/components/charts/index.d.ts +1 -6
- package/dist/components/data-display/badge.d.ts +2 -12
- package/dist/components/data-display/card.d.ts +21 -41
- package/dist/components/data-display/carousel.d.ts +1 -2
- package/dist/components/data-display/code-block.d.ts +4 -0
- package/dist/components/data-display/code-block.js +24 -0
- package/dist/components/data-display/data-table.d.ts +15 -37
- package/dist/components/data-display/data-table.js +1 -3
- package/dist/components/data-display/descriptions.d.ts +2 -6
- package/dist/components/data-display/descriptions.js +0 -2
- package/dist/components/data-display/index.d.ts +4 -0
- package/dist/components/data-display/index.js +4 -0
- package/dist/components/data-display/list-row.d.ts +3 -22
- package/dist/components/data-display/permission-matrix.d.ts +7 -20
- package/dist/components/data-display/progress.d.ts +1 -1
- package/dist/components/data-display/prose.d.ts +4 -0
- package/dist/components/data-display/prose.js +20 -0
- package/dist/components/data-display/service-launcher-card.d.ts +3 -10
- package/dist/components/data-display/table.d.ts +20 -80
- package/dist/components/data-display/table.js +0 -3
- package/dist/components/data-display/timeline.d.ts +3 -5
- package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
- package/dist/components/data-entry/branch-scope-picker.js +0 -1
- package/dist/components/data-entry/calendar.d.ts +3 -2
- package/dist/components/data-entry/calendar.js +58 -3
- package/dist/components/data-entry/command-palette.d.ts +8 -22
- package/dist/components/data-entry/date-picker.d.ts +4 -5
- package/dist/components/data-entry/date-picker.js +6 -1
- package/dist/components/data-entry/date-range-picker.d.ts +1 -1
- package/dist/components/data-entry/date-range-picker.js +8 -3
- package/dist/components/data-entry/form-errors.d.ts +7 -18
- package/dist/components/data-entry/form-field.js +1 -5
- package/dist/components/data-entry/form.d.ts +1 -9
- package/dist/components/data-entry/input.d.ts +16 -14
- package/dist/components/data-entry/input.js +3 -0
- package/dist/components/data-entry/month-picker.js +2 -2
- package/dist/components/data-entry/month-range-picker.d.ts +4 -6
- package/dist/components/data-entry/month-range-picker.js +2 -2
- package/dist/components/data-entry/number-input.d.ts +1 -5
- package/dist/components/data-entry/number-input.js +1 -0
- package/dist/components/data-entry/radio.js +0 -1
- package/dist/components/data-entry/search-select.d.ts +2 -4
- package/dist/components/data-entry/select.d.ts +11 -6
- package/dist/components/data-entry/select.js +4 -2
- package/dist/components/data-entry/switch.js +0 -1
- package/dist/components/data-entry/textarea.d.ts +10 -16
- package/dist/components/data-entry/time-picker.d.ts +3 -5
- package/dist/components/data-entry/upload-types.d.ts +1 -5
- package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
- package/dist/components/feedback/dialog.d.ts +6 -15
- package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
- package/dist/components/feedback/sheet.d.ts +3 -10
- package/dist/components/feedback/sheet.js +1 -1
- package/dist/components/feedback/sonner.js +2 -3
- package/dist/components/general/activity.d.ts +4 -30
- package/dist/components/general/button.js +1 -10
- package/dist/components/general/logo.d.ts +6 -28
- package/dist/components/general/reveal.d.ts +3 -9
- package/dist/components/general/typography.d.ts +1 -3
- package/dist/components/layout/account-chip.d.ts +8 -0
- package/dist/components/layout/account-chip.js +45 -0
- package/dist/components/layout/auth-divider.d.ts +2 -9
- package/dist/components/layout/auth-shell.d.ts +1 -14
- package/dist/components/layout/breadcrumb.d.ts +1 -5
- package/dist/components/layout/centered-shell.d.ts +4 -18
- package/dist/components/layout/error-surface.d.ts +11 -28
- package/dist/components/layout/error-surface.js +4 -1
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +2 -0
- package/dist/components/layout/legal-document-shell.d.ts +5 -28
- package/dist/components/layout/master-detail.d.ts +2 -18
- package/dist/components/layout/page-container.js +0 -1
- package/dist/components/layout/responsive-grid.d.ts +6 -1
- package/dist/components/layout/responsive-grid.js +9 -2
- package/dist/components/layout/service-role-panel.d.ts +7 -19
- package/dist/components/layout/sidebar.d.ts +5 -27
- package/dist/components/layout/sidebar.js +0 -1
- package/dist/components/layout/split-pane.d.ts +0 -7
- package/dist/components/layout/topbar.d.ts +1 -14
- package/dist/components/navigation/app-setting-picker.js +1 -3
- package/dist/components/navigation/filter-bar.d.ts +1 -6
- package/dist/components/navigation/pagination-utils.d.ts +2 -12
- package/dist/components/navigation/tabs-scroll.d.ts +2 -36
- package/dist/components/navigation/tabs.js +4 -8
- package/dist/components/query/data-state.d.ts +2 -2
- package/dist/components/ui/credential-reveal.d.ts +1 -4
- package/dist/components/ui/hover-card.d.ts +1 -2
- package/dist/components/ui/separator.d.ts +2 -15
- package/dist/components/ui/toggle-group.d.ts +1 -5
- package/dist/components/ui/toggle.d.ts +6 -31
- package/dist/email/brand-mark.d.ts +6 -34
- package/dist/email/color.d.ts +7 -17
- package/dist/email/geometry.d.ts +4 -8
- package/dist/email/index.d.ts +4 -48
- package/dist/email/inline-style.d.ts +3 -9
- package/dist/email/urgency.d.ts +2 -7
- package/dist/form/form-context.d.ts +2 -5
- package/dist/form/form-root.d.ts +1 -2
- package/dist/i18n/messages/en.json +4 -0
- package/dist/i18n/messages/ja.json +4 -0
- package/dist/i18n/messages/vi.json +4 -0
- package/dist/inertia/index.d.ts +2 -10
- package/dist/lib/control-styles.d.ts +10 -21
- package/dist/lib/control-styles.js +4 -6
- package/dist/lib/datetime/format-date.d.ts +1 -4
- package/dist/lib/field-a11y.d.ts +11 -68
- package/dist/lib/field-a11y.js +0 -1
- package/dist/lib/format.d.ts +4 -8
- package/dist/lib/hooks.d.ts +6 -12
- package/dist/lib/permission-grid.d.ts +3 -18
- package/dist/lib/query-error.d.ts +3 -3
- package/dist/props/components/app.prop.d.ts +15 -38
- package/dist/props/components/charts.prop.d.ts +2 -3
- package/dist/props/components/data-display.prop.d.ts +48 -72
- package/dist/props/components/data-entry.prop.d.ts +35 -40
- package/dist/props/components/form.prop.d.ts +2 -6
- package/dist/props/components/general.prop.d.ts +11 -27
- package/dist/props/components/layout.prop.d.ts +89 -260
- package/dist/props/components/navigation.prop.d.ts +27 -42
- package/dist/props/registry.d.ts +31 -0
- package/dist/props/registry.js +33 -0
- package/dist/props/vocabulary/data.prop.d.ts +18 -49
- package/dist/props/vocabulary/index.d.ts +1 -1
- package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
- package/dist/props/vocabulary/layout.prop.d.ts +8 -30
- package/dist/props/vocabulary/shared.prop.d.ts +3 -2
- package/dist/styles/alert-layout.css +1 -32
- package/dist/styles/badge-layout.css +4 -18
- package/dist/styles/base.css +14 -113
- package/dist/styles/card-layout.css +6 -128
- package/dist/styles/chart-layout.css +2 -17
- package/dist/styles/control.css +380 -458
- package/dist/styles/core.css +21 -0
- package/dist/styles/data-display-layout.css +175 -94
- package/dist/styles/data-entry-layout.css +0 -45
- package/dist/styles/density.css +1 -30
- package/dist/styles/dialog-layout.css +5 -69
- package/dist/styles/focus-ring.css +13 -87
- package/dist/styles/fonts.css +1 -31
- package/dist/styles/form-layout.css +7 -91
- package/dist/styles/index.css +2 -20
- package/dist/styles/layout.css +38 -456
- package/dist/styles/logo-layout.css +1 -35
- package/dist/styles/motion.css +3 -42
- package/dist/styles/navigation-layout.css +3 -50
- package/dist/styles/shell-layout.css +37 -403
- package/dist/styles/table-layout.css +16 -274
- package/dist/styles/text-layout.css +7 -21
- package/dist/styles/toggle.css +1 -23
- package/dist/theme/dxs.canonical.css +1 -55
- package/dist/theme/example.service.css +1 -26
- package/dist/theme/famgia.service.css +5 -15
- package/dist/tokens/axes.css +3 -40
- package/dist/tokens/base.css +1 -4
- package/dist/tokens/components/activity.css +6 -42
- package/dist/tokens/components/badge.css +4 -13
- package/dist/tokens/components/banner.css +4 -9
- package/dist/tokens/components/card.css +32 -88
- package/dist/tokens/components/chart.css +9 -26
- package/dist/tokens/components/control.css +37 -222
- package/dist/tokens/components/data-display.css +28 -79
- package/dist/tokens/components/data-entry.css +5 -19
- package/dist/tokens/components/descriptions.css +7 -27
- package/dist/tokens/components/email.css +38 -84
- package/dist/tokens/components/error-surface.css +2 -18
- package/dist/tokens/components/feedback.css +27 -124
- package/dist/tokens/components/form.css +13 -45
- package/dist/tokens/components/legal-document.css +16 -41
- package/dist/tokens/components/list-row.css +11 -36
- package/dist/tokens/components/logo.css +2 -57
- package/dist/tokens/components/navigation.css +16 -94
- package/dist/tokens/components/scroll-area.css +2 -18
- package/dist/tokens/components/separator.css +8 -30
- package/dist/tokens/components/sheet.css +3 -14
- package/dist/tokens/components/shell.css +53 -307
- package/dist/tokens/components/sidebar.css +5 -22
- package/dist/tokens/components/table.css +19 -140
- package/dist/tokens/components/toggle.css +3 -65
- package/dist/tokens/components/upload.css +7 -43
- package/dist/tokens/foundation.css +108 -383
- package/dist/tokens/semantic/layout.css +33 -207
- package/docs/CANONICAL-CONTRACTS.md +206 -0
- package/docs/COMPONENTS.md +157 -0
- package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
- package/docs/CONSUMER-RULES.md +14 -0
- package/docs/CUSTOMER-THEMING.md +162 -0
- package/docs/DATETIME.md +69 -0
- package/docs/DEVELOPMENT.md +173 -0
- package/docs/FORMS.md +143 -0
- package/docs/FRAME-A11Y-CI.md +267 -0
- package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
- package/docs/FRAME-COVERAGE-REPORT.md +140 -0
- package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
- package/docs/FRAME-COVERAGE.md +29 -0
- package/docs/PROPS-REGISTRY.md +61 -0
- package/docs/PROPS-VOCABULARY.md +100 -0
- package/docs/README.md +60 -0
- package/docs/REGISTRY.md +70 -0
- package/docs/SPACING.md +56 -0
- package/docs/STANDARDS-vocabulary-tokens.md +48 -0
- package/docs/TESTING.md +98 -0
- package/docs/TOKENS.md +347 -0
- package/docs/asset-modules.d.ts +46 -0
- package/docs/assets/cover-terrain.svg +6 -0
- package/docs/assets/portrait-amber.svg +5 -0
- package/docs/assets/portrait-clay.svg +5 -0
- package/docs/assets/portrait-indigo.svg +5 -0
- package/docs/assets/portrait-iris.svg +5 -0
- package/docs/assets/portrait-moss.svg +5 -0
- package/docs/assets/portrait-plum.svg +5 -0
- package/docs/assets/portrait-slate.svg +5 -0
- package/docs/charts/compact-bar-trend.tsx +328 -0
- package/docs/charts/size-tiers.tsx +192 -0
- package/docs/data-display/accordion.tsx +99 -0
- package/docs/data-display/avatar.tsx +355 -0
- package/docs/data-display/badge.tsx +247 -0
- package/docs/data-display/card/examples/detail-panel.tsx +106 -0
- package/docs/data-display/card/index.md +3 -0
- package/docs/data-display/card/index.tsx +285 -0
- package/docs/data-display/carousel.tsx +156 -0
- package/docs/data-display/charts.tsx +198 -0
- package/docs/data-display/code-block.tsx +90 -0
- package/docs/data-display/collapsible.tsx +162 -0
- package/docs/data-display/credential-reveal.tsx +145 -0
- package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
- package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
- package/docs/data-display/data-table/examples/list-page.tsx +175 -0
- package/docs/data-display/data-table/index.md +5 -0
- package/docs/data-display/data-table/index.tsx +295 -0
- package/docs/data-display/descriptions.tsx +143 -0
- package/docs/data-display/empty-state.tsx +164 -0
- package/docs/data-display/hover-card.tsx +181 -0
- package/docs/data-display/list-row.tsx +420 -0
- package/docs/data-display/permission-matrix.tsx +184 -0
- package/docs/data-display/popover-touch.tsx +27 -0
- package/docs/data-display/popover.tsx +245 -0
- package/docs/data-display/progress.tsx +84 -0
- package/docs/data-display/prose.tsx +105 -0
- package/docs/data-display/qr-code.tsx +68 -0
- package/docs/data-display/scroll-area.tsx +271 -0
- package/docs/data-display/service-launcher-card.tsx +145 -0
- package/docs/data-display/stat-card.tsx +99 -0
- package/docs/data-display/table.tsx +251 -0
- package/docs/data-display/timeline.tsx +112 -0
- package/docs/data-display/touch-actions.tsx +36 -0
- package/docs/data-display/tree-list.tsx +107 -0
- package/docs/data-entry/branch-scope-picker.tsx +123 -0
- package/docs/data-entry/calendar.tsx +180 -0
- package/docs/data-entry/cascader.tsx +378 -0
- package/docs/data-entry/checkbox.tsx +256 -0
- package/docs/data-entry/color-picker.tsx +117 -0
- package/docs/data-entry/command-palette.tsx +179 -0
- package/docs/data-entry/command.tsx +262 -0
- package/docs/data-entry/country-picker-recipe.tsx +170 -0
- package/docs/data-entry/date-picker.tsx +191 -0
- package/docs/data-entry/date-range-picker.tsx +149 -0
- package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
- package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
- package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
- package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
- package/docs/data-entry/form-field/index.md +8 -0
- package/docs/data-entry/form-field/index.tsx +326 -0
- package/docs/data-entry/form-inertia.tsx +80 -0
- package/docs/data-entry/form-root.tsx +102 -0
- package/docs/data-entry/form.tsx +724 -0
- package/docs/data-entry/input-otp.tsx +231 -0
- package/docs/data-entry/input.tsx +114 -0
- package/docs/data-entry/label.tsx +100 -0
- package/docs/data-entry/month-picker.tsx +101 -0
- package/docs/data-entry/month-range-picker.tsx +115 -0
- package/docs/data-entry/number-input.tsx +240 -0
- package/docs/data-entry/password-input.tsx +106 -0
- package/docs/data-entry/password-strength.tsx +97 -0
- package/docs/data-entry/radio-group.tsx +95 -0
- package/docs/data-entry/rating.tsx +87 -0
- package/docs/data-entry/search-input.tsx +120 -0
- package/docs/data-entry/select-async-contracts.tsx +108 -0
- package/docs/data-entry/select-matrix.tsx +204 -0
- package/docs/data-entry/select.tsx +369 -0
- package/docs/data-entry/slider.tsx +130 -0
- package/docs/data-entry/switch.tsx +67 -0
- package/docs/data-entry/tag-input.tsx +108 -0
- package/docs/data-entry/textarea.tsx +209 -0
- package/docs/data-entry/time-picker.tsx +99 -0
- package/docs/data-entry/toggle-count.tsx +293 -0
- package/docs/data-entry/toggle-group.tsx +225 -0
- package/docs/data-entry/toggle.tsx +127 -0
- package/docs/data-entry/transfer.tsx +97 -0
- package/docs/data-entry/tree-select.tsx +204 -0
- package/docs/data-entry/upload.tsx +184 -0
- package/docs/feedback/alert-dialog.tsx +270 -0
- package/docs/feedback/alert.tsx +248 -0
- package/docs/feedback/banner.tsx +183 -0
- package/docs/feedback/danger-confirm.tsx +88 -0
- package/docs/feedback/dialog-touch.tsx +24 -0
- package/docs/feedback/dialog.tsx +193 -0
- package/docs/feedback/sheet.tsx +410 -0
- package/docs/feedback/skeleton.tsx +111 -0
- package/docs/feedback/toast.tsx +135 -0
- package/docs/feedback/tooltip.tsx +171 -0
- package/docs/feedback/two-factor-setup.tsx +68 -0
- package/docs/foundation/_email-specimen.ts +274 -0
- package/docs/foundation/colors.tsx +202 -0
- package/docs/foundation/density.tsx +232 -0
- package/docs/foundation/email-tokens.tsx +306 -0
- package/docs/foundation/radius-shadow.tsx +152 -0
- package/docs/foundation/spacing.tsx +211 -0
- package/docs/foundation/typography.tsx +147 -0
- package/docs/general/activity.tsx +224 -0
- package/docs/general/button/examples/destructive-confirm.tsx +90 -0
- package/docs/general/button/examples/form-actions.tsx +85 -0
- package/docs/general/button/examples/toolbar.tsx +160 -0
- package/docs/general/button/index.md +12 -0
- package/docs/general/button/index.tsx +211 -0
- package/docs/general/logo.tsx +131 -0
- package/docs/general/reveal.tsx +41 -0
- package/docs/general/typography.tsx +152 -0
- package/docs/layout/account-chip.tsx +72 -0
- package/docs/layout/admin-collection.tsx +122 -0
- package/docs/layout/app-shell.tsx +374 -0
- package/docs/layout/aspect-ratio.tsx +119 -0
- package/docs/layout/auth-account-summary.tsx +103 -0
- package/docs/layout/auth-divider.tsx +28 -0
- package/docs/layout/auth-footer.tsx +37 -0
- package/docs/layout/auth-identity.tsx +36 -0
- package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
- package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
- package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
- package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
- package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
- package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
- package/docs/layout/auth-recovery/index.md +140 -0
- package/docs/layout/auth-recovery/index.tsx +96 -0
- package/docs/layout/auth-shell-context.tsx +103 -0
- package/docs/layout/auth-shell-device.tsx +112 -0
- package/docs/layout/auth-shell-registration.tsx +335 -0
- package/docs/layout/auth-shell-variants.tsx +139 -0
- package/docs/layout/auth-shell.tsx +59 -0
- package/docs/layout/auth-stack.tsx +40 -0
- package/docs/layout/centered-shell.tsx +102 -0
- package/docs/layout/error-surface/examples/application-403.tsx +84 -0
- package/docs/layout/error-surface/examples/application-404.tsx +77 -0
- package/docs/layout/error-surface/examples/system-500.tsx +47 -0
- package/docs/layout/error-surface/examples/system-503.tsx +48 -0
- package/docs/layout/error-surface/index.md +153 -0
- package/docs/layout/error-surface/index.tsx +239 -0
- package/docs/layout/flex.tsx +262 -0
- package/docs/layout/legal-document-shell/_data.ts +110 -0
- package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
- package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
- package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
- package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
- package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
- package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
- package/docs/layout/legal-document-shell/index.md +51 -0
- package/docs/layout/legal-document-shell/index.tsx +101 -0
- package/docs/layout/master-detail.tsx +387 -0
- package/docs/layout/org-switcher.tsx +131 -0
- package/docs/layout/page-container.tsx +946 -0
- package/docs/layout/resizable-panel.tsx +419 -0
- package/docs/layout/responsive-grid.tsx +235 -0
- package/docs/layout/separator.tsx +327 -0
- package/docs/layout/service-role-panel.tsx +144 -0
- package/docs/layout/sidebar.tsx +586 -0
- package/docs/layout/split-pane.tsx +451 -0
- package/docs/layout/topbar.tsx +347 -0
- package/docs/navigation/app-setting-picker.tsx +141 -0
- package/docs/navigation/breadcrumb.tsx +128 -0
- package/docs/navigation/context-menu.tsx +117 -0
- package/docs/navigation/dropdown-menu.tsx +213 -0
- package/docs/navigation/filter-bar.tsx +227 -0
- package/docs/navigation/menubar.tsx +141 -0
- package/docs/navigation/navigation-menu.tsx +165 -0
- package/docs/navigation/pagination.tsx +241 -0
- package/docs/navigation/steps.tsx +263 -0
- package/docs/navigation/tabs-rtl.tsx +28 -0
- package/docs/navigation/tabs.tsx +308 -0
- package/docs/navigation/toolbar.tsx +339 -0
- package/docs/providers/app-provider.tsx +191 -0
- package/docs/providers/format-date.tsx +230 -0
- package/docs/query/button-refetch.tsx +160 -0
- package/docs/query/data-state.tsx +192 -0
- package/docs/query/infinite-query-state.tsx +93 -0
- package/docs/query/mutation-feedback.tsx +70 -0
- package/docs/query/prefetch-link.tsx +262 -0
- package/docs/query/touch-actions.tsx +68 -0
- package/docs/showcase/acme-portal.tsx +441 -0
- package/docs/showcase/acme-website.tsx +455 -0
- package/docs/showcase/case1-warehouse-dashboard.tsx +343 -0
- package/docs/showcase/case2-employee-me.tsx +441 -0
- package/docs/showcase/case3-approval-workflow.tsx +527 -0
- package/docs/showcase/case4-login.tsx +307 -0
- package/docs/showcase/case5-shift-calendar.tsx +795 -0
- package/docs/showcase/case6-agency-handy.tsx +1072 -0
- package/docs/showcase/futurelastic-web.tsx +390 -0
- package/docs/showcase/org-switcher.tsx +313 -0
- package/docs/showcase/permission-matrix.tsx +343 -0
- package/docs/showcase/public-landing.tsx +210 -0
- package/docs/showcase/settings-account-sections.tsx +559 -0
- package/docs/showcase/settings-security-mfa.tsx +145 -0
- package/docs/showcase/table-approval-queue.tsx +199 -0
- package/docs/showcase/table-bulk-actions.tsx +460 -0
- package/docs/showcase/table-compact-kintone.tsx +438 -0
- package/docs/showcase/table-conditional-format.tsx +367 -0
- package/docs/showcase/table-crud-list.tsx +544 -0
- package/docs/showcase/table-density.tsx +340 -0
- package/docs/showcase/table-expandable-rows.tsx +471 -0
- package/docs/showcase/table-filter-chips.tsx +461 -0
- package/docs/showcase/table-footer-totals.tsx +311 -0
- package/docs/showcase/table-grouped-subtotals.tsx +388 -0
- package/docs/showcase/table-master-detail.tsx +479 -0
- package/docs/showcase/table-pagination.tsx +320 -0
- package/docs/showcase/table-states.tsx +363 -0
- package/docs/showcase/table-sticky-columns.tsx +373 -0
- package/docs/showcase/table-tree-rows.tsx +444 -0
- package/docs/showcase/table-view-tabs.tsx +488 -0
- package/package.json +9 -11
- package/scripts/_agent-setup.mjs +16 -2
- package/scripts/audit-hook.mjs +3 -13
- package/scripts/init-agent-kit.mjs +1 -14
- package/scripts/postinstall.mjs +12 -12
- package/scripts/ui-audit.mjs +93 -31
- package/scripts/visual-audit-rules.mjs +51 -7
- package/scripts/visual-audit.mjs +118 -47
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
@import "sonner/dist/styles.css";
|
|
3
|
+
@import "react-day-picker/style.css";
|
|
4
|
+
@import "./base.css";
|
|
5
|
+
@import "./shell-layout.css";
|
|
6
|
+
@import "./motion.css";
|
|
7
|
+
@import "./layout.css";
|
|
8
|
+
@import "./control.css";
|
|
9
|
+
@import "./toggle.css";
|
|
10
|
+
@import "./logo-layout.css";
|
|
11
|
+
@import "./card-layout.css";
|
|
12
|
+
@import "./text-layout.css";
|
|
13
|
+
@import "./table-layout.css";
|
|
14
|
+
@import "./dialog-layout.css";
|
|
15
|
+
@import "./alert-layout.css";
|
|
16
|
+
@import "./badge-layout.css";
|
|
17
|
+
@import "./data-display-layout.css";
|
|
18
|
+
@import "./data-entry-layout.css";
|
|
19
|
+
@import "./form-layout.css";
|
|
20
|
+
@import "./navigation-layout.css";
|
|
21
|
+
@import "./chart-layout.css";
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
justify-content: center;
|
|
10
10
|
overflow: hidden;
|
|
11
11
|
border-radius: var(--radius-pill);
|
|
12
|
-
/* Tint washes over the role background (default transparent = no-op, rule #44). */
|
|
13
12
|
background:
|
|
14
13
|
linear-gradient(var(--avatar-tint), var(--avatar-tint)),
|
|
15
14
|
var(--avatar-background, hsl(var(--muted)));
|
|
@@ -18,10 +17,6 @@
|
|
|
18
17
|
font-weight: var(--font-weight-medium);
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
/* Entity-header mark — `<Avatar shape="square">` (gh#249). Opt-in ONLY: without the attribute the
|
|
22
|
-
* avatar above is untouched. Geometry and colour are token-owned (rule #45); the brand fill is
|
|
23
|
-
* handed down through --avatar-background so the fallback slot picks it up with no extra rule,
|
|
24
|
-
* and a service that only wants a neutral square overrides --avatar-square-background. */
|
|
25
20
|
.ui-avatar[data-shape="square"] {
|
|
26
21
|
inline-size: var(--avatar-square-size);
|
|
27
22
|
block-size: var(--avatar-square-size);
|
|
@@ -30,11 +25,6 @@
|
|
|
30
25
|
color: var(--avatar-square-foreground, hsl(var(--primary-foreground)));
|
|
31
26
|
}
|
|
32
27
|
|
|
33
|
-
/* CAPABILITY MEDALLION — `<Avatar appearance="tinted">` (gh#12). The tinted companion of the
|
|
34
|
-
* solid entity mark: same box, same radius, a soft role wash instead of a solid fill and the
|
|
35
|
-
* glyph in the role itself. Declared AFTER the square rule (equal specificity) so it retints
|
|
36
|
-
* either shape. The glyph rule is scoped to this appearance ON PURPOSE — a global
|
|
37
|
-
* `.ui-avatar svg` would outrank the per-call-site icon classes existing avatars already use. */
|
|
38
28
|
.ui-avatar[data-appearance="tinted"] {
|
|
39
29
|
--avatar-background: var(--avatar-tinted-background, hsl(var(--primary) / 0.1));
|
|
40
30
|
color: var(--avatar-tinted-foreground, hsl(var(--primary)));
|
|
@@ -61,14 +51,6 @@
|
|
|
61
51
|
background: var(--avatar-background, hsl(var(--muted)));
|
|
62
52
|
}
|
|
63
53
|
|
|
64
|
-
/* PRESENCE (gh#309) — the realtime reachability dot on the mark itself.
|
|
65
|
-
*
|
|
66
|
-
* Opt-in ONLY: with no `presence` prop the avatar emits neither the attribute nor the node, so
|
|
67
|
-
* every existing call site keeps today's DOM and today's clip. WITH it the ROOT stops clipping —
|
|
68
|
-
* the dot straddles the mark's edge, which is exactly why a consumer could never place it from
|
|
69
|
-
* outside — and the clip moves down onto the image/fallback, which is where it was doing the real
|
|
70
|
-
* work. `border-radius: inherit` keeps that clip correct for both shapes: --radius-pill for a
|
|
71
|
-
* person, --avatar-square-radius for an entity mark. */
|
|
72
54
|
.ui-avatar[data-presence] {
|
|
73
55
|
overflow: visible;
|
|
74
56
|
}
|
|
@@ -79,16 +61,6 @@
|
|
|
79
61
|
border-radius: inherit;
|
|
80
62
|
}
|
|
81
63
|
|
|
82
|
-
/* NEVER COLOUR-ALONE (WCAG 1.4.1). Three independent encodings ride together: the localized
|
|
83
|
-
* sr-only string inside this span, a semantic ROLE colour, and a SHAPE — filled · half-filled ·
|
|
84
|
-
* barred · hollow — so the four states stay apart in greyscale, for a deuteranope, and under
|
|
85
|
-
* forced colors. `box-sizing: border-box` makes --avatar-presence-size the OUTER diameter, so the
|
|
86
|
-
* state stroke never changes the dot's footprint between states.
|
|
87
|
-
*
|
|
88
|
-
* The dot is a state, not an event: nothing here animates, so there is nothing for
|
|
89
|
-
* prefers-reduced-motion to switch off. Presence is deliberately NOT a live region either — a
|
|
90
|
-
* roster of 40 avatars resyncing over a socket would flood a screen reader; announcing a CHANGE is
|
|
91
|
-
* the consumer's call, in the consumer's own live region. */
|
|
92
64
|
[data-slot="avatar-presence"] {
|
|
93
65
|
position: absolute;
|
|
94
66
|
inset-block-end: var(--avatar-presence-inset);
|
|
@@ -102,20 +74,16 @@
|
|
|
102
74
|
border: var(--avatar-presence-stroke-width) solid transparent;
|
|
103
75
|
border-radius: var(--radius-pill);
|
|
104
76
|
background-origin: border-box;
|
|
105
|
-
|
|
106
|
-
* photo; a service that puts the avatar on a coloured surface retunes the colour once. */
|
|
77
|
+
|
|
107
78
|
box-shadow: 0 0 0 var(--avatar-presence-ring-width)
|
|
108
79
|
hsl(var(--avatar-presence-ring-color, var(--background)));
|
|
109
80
|
}
|
|
110
81
|
|
|
111
|
-
/* ONLINE — a SOLID disc. */
|
|
112
82
|
[data-slot="avatar-presence"][data-presence="online"] {
|
|
113
83
|
border-color: hsl(var(--avatar-presence-online-color, var(--success)));
|
|
114
84
|
background-color: hsl(var(--avatar-presence-online-color, var(--success)));
|
|
115
85
|
}
|
|
116
86
|
|
|
117
|
-
/* AWAY — a HALF-FILLED disc (block-end half), the one silhouette that survives greyscale next to
|
|
118
|
-
* both the solid and the hollow states. */
|
|
119
87
|
[data-slot="avatar-presence"][data-presence="away"] {
|
|
120
88
|
border-color: hsl(var(--avatar-presence-away-color, var(--warning)));
|
|
121
89
|
background-color: hsl(var(--avatar-presence-ring-color, var(--background)));
|
|
@@ -126,15 +94,11 @@
|
|
|
126
94
|
);
|
|
127
95
|
}
|
|
128
96
|
|
|
129
|
-
/* BUSY (do-not-disturb) — a solid disc CUT by a horizontal bar. */
|
|
130
97
|
[data-slot="avatar-presence"][data-presence="busy"] {
|
|
131
98
|
border-color: hsl(var(--avatar-presence-busy-color, var(--destructive)));
|
|
132
99
|
background-color: hsl(var(--avatar-presence-busy-color, var(--destructive)));
|
|
133
100
|
}
|
|
134
101
|
|
|
135
|
-
/* `inset: 0; margin: auto` centres the bar in BOTH axes with no translate, so it stays centred
|
|
136
|
-
* under dir="rtl" (a start-anchored `translate(-50%)` would slide it off-centre when the inline
|
|
137
|
-
* axis flips). */
|
|
138
102
|
[data-slot="avatar-presence"][data-presence="busy"]::before {
|
|
139
103
|
content: "";
|
|
140
104
|
position: absolute;
|
|
@@ -146,19 +110,11 @@
|
|
|
146
110
|
background: hsl(var(--avatar-presence-ring-color, var(--background)));
|
|
147
111
|
}
|
|
148
112
|
|
|
149
|
-
/* OFFLINE — a HOLLOW ring. Distinct from an ABSENT `presence`, which draws nothing at all: absent
|
|
150
|
-
* means "this entity has no presence concept" (an organization mark), offline means "known to be
|
|
151
|
-
* unreachable" — the same distinction ListRow draws between an omitted and a `false` `unread`. */
|
|
152
113
|
[data-slot="avatar-presence"][data-presence="offline"] {
|
|
153
114
|
border-color: hsl(var(--avatar-presence-offline-color, var(--muted-foreground)));
|
|
154
115
|
background-color: hsl(var(--avatar-presence-ring-color, var(--background)));
|
|
155
116
|
}
|
|
156
117
|
|
|
157
|
-
/* FORCED COLORS — the UA replaces author colours, and box-shadow is dropped outright, so the
|
|
158
|
-
* separator ring would vanish into the mark and all four states would collapse to one swatch.
|
|
159
|
-
* System-colour keywords ARE honoured inside this block, so re-draw the ring as an outline and
|
|
160
|
-
* re-state each silhouette in Canvas / CanvasText: the shape encoding survives, which is the half
|
|
161
|
-
* of WCAG 1.4.1 that a colour-only dot loses here first. */
|
|
162
118
|
@media (forced-colors: active) {
|
|
163
119
|
[data-slot="avatar-presence"] {
|
|
164
120
|
border-color: CanvasText;
|
|
@@ -207,9 +163,6 @@
|
|
|
207
163
|
background: hsl(var(--destructive));
|
|
208
164
|
}
|
|
209
165
|
|
|
210
|
-
/* Over-capacity: keep the destructive fill but lay a diagonal hatch over it so an over-limit bar
|
|
211
|
-
* (value > 100, width still capped at 100%) is visually distinct from a full one. Placed after the
|
|
212
|
-
* tone rules so background-color wins; background-image carries the stripes. */
|
|
213
166
|
.ui-progress[data-over] .ui-progress-bar {
|
|
214
167
|
background-color: hsl(var(--destructive));
|
|
215
168
|
background-image: repeating-linear-gradient(
|
|
@@ -296,8 +249,6 @@
|
|
|
296
249
|
column-gap: var(--space-stack-md);
|
|
297
250
|
}
|
|
298
251
|
|
|
299
|
-
/* Spacing lives INSIDE the item (not a flex gap between items) so the rail line
|
|
300
|
-
spans the full item height and the connector stays continuous dot-to-dot. */
|
|
301
252
|
.ui-timeline-body {
|
|
302
253
|
padding-bottom: var(--space-stack-md);
|
|
303
254
|
}
|
|
@@ -326,13 +277,11 @@
|
|
|
326
277
|
line-height: 1;
|
|
327
278
|
}
|
|
328
279
|
|
|
329
|
-
/* done → success fill. */
|
|
330
280
|
.ui-timeline-dot[data-status="done"] {
|
|
331
281
|
background: var(--timeline-dot-done-background, hsl(var(--success)));
|
|
332
282
|
color: hsl(var(--success-foreground));
|
|
333
283
|
}
|
|
334
284
|
|
|
335
|
-
/* current → primary fill + ring (also the legacy data-current shorthand). */
|
|
336
285
|
.ui-timeline-dot[data-status="current"],
|
|
337
286
|
.ui-timeline-dot[data-current="true"] {
|
|
338
287
|
background: var(--timeline-dot-current-background, hsl(var(--primary)));
|
|
@@ -340,7 +289,6 @@
|
|
|
340
289
|
box-shadow: 0 0 0 3px hsl(var(--primary) / 0.18);
|
|
341
290
|
}
|
|
342
291
|
|
|
343
|
-
/* pending → muted outline on the surface (no fill). */
|
|
344
292
|
.ui-timeline-dot[data-status="pending"] {
|
|
345
293
|
border-color: hsl(var(--border));
|
|
346
294
|
background: hsl(var(--background));
|
|
@@ -352,7 +300,6 @@
|
|
|
352
300
|
height: 0.75rem;
|
|
353
301
|
}
|
|
354
302
|
|
|
355
|
-
/* current pip glyph for variant="status" (filled inner dot). */
|
|
356
303
|
.ui-timeline-pip {
|
|
357
304
|
display: block;
|
|
358
305
|
width: 0.5rem;
|
|
@@ -368,7 +315,6 @@
|
|
|
368
315
|
background: hsl(var(--border));
|
|
369
316
|
}
|
|
370
317
|
|
|
371
|
-
/* The segment below a done/current step reads as travelled (completed). */
|
|
372
318
|
.ui-timeline-line[data-completed="true"] {
|
|
373
319
|
background: var(--timeline-line-completed-background, hsl(var(--primary)));
|
|
374
320
|
}
|
|
@@ -402,7 +348,6 @@
|
|
|
402
348
|
}
|
|
403
349
|
}
|
|
404
350
|
|
|
405
|
-
/* Accordion */
|
|
406
351
|
.ui-accordion-item {
|
|
407
352
|
border-bottom: 1px solid hsl(var(--border));
|
|
408
353
|
}
|
|
@@ -450,7 +395,6 @@
|
|
|
450
395
|
padding-bottom: var(--space-4);
|
|
451
396
|
}
|
|
452
397
|
|
|
453
|
-
/* HoverCard */
|
|
454
398
|
.ui-hover-card-content {
|
|
455
399
|
z-index: 50;
|
|
456
400
|
width: 16rem;
|
|
@@ -518,7 +462,6 @@
|
|
|
518
462
|
height: var(--carousel-arrow-icon-size);
|
|
519
463
|
}
|
|
520
464
|
|
|
521
|
-
/* Dot indicators — horizontal, centered row of round dots; the active one fills + widens. */
|
|
522
465
|
.ui-carousel-dots {
|
|
523
466
|
display: flex;
|
|
524
467
|
flex-wrap: wrap;
|
|
@@ -548,7 +491,6 @@
|
|
|
548
491
|
background: hsl(var(--primary));
|
|
549
492
|
}
|
|
550
493
|
|
|
551
|
-
/* Vertical orientation — stack the dots into a column beside the track. */
|
|
552
494
|
.ui-carousel[data-orientation="vertical"] .ui-carousel-dots {
|
|
553
495
|
flex-direction: column;
|
|
554
496
|
}
|
|
@@ -558,7 +500,6 @@
|
|
|
558
500
|
height: var(--space-5);
|
|
559
501
|
}
|
|
560
502
|
|
|
561
|
-
/* Vertical orientation (opts.axis === "y") — flips the track and the arrow positions. */
|
|
562
503
|
.ui-carousel[data-orientation="vertical"] .ui-carousel-content {
|
|
563
504
|
flex-direction: column;
|
|
564
505
|
margin-inline: 0;
|
|
@@ -589,14 +530,7 @@
|
|
|
589
530
|
}
|
|
590
531
|
|
|
591
532
|
@layer components {
|
|
592
|
-
|
|
593
|
-
* short lists inside a flush CardContent. Rows separate with a quiet divider; the last row
|
|
594
|
-
* leaves the Card border to close the list. Logical properties throughout (RTL-safe).
|
|
595
|
-
*
|
|
596
|
-
* Overflow contract (#224): the row itself may shrink (min-inline-size: 0) and WRAPS, the
|
|
597
|
-
* content column keeps only `min(--list-row-body-min-width, 100%)` — so it can always shrink
|
|
598
|
-
* below its intrinsic width and truncate/wrap — and the trailing actions wrap onto their own
|
|
599
|
-
* line instead of pushing the row (and the page root) wider than the viewport. */
|
|
533
|
+
|
|
600
534
|
[data-slot="list-row"] {
|
|
601
535
|
display: flex;
|
|
602
536
|
min-inline-size: 0;
|
|
@@ -606,8 +540,7 @@
|
|
|
606
540
|
padding: var(--list-row-padding-y) var(--list-row-padding-x);
|
|
607
541
|
background: var(--list-row-read-background, transparent);
|
|
608
542
|
}
|
|
609
|
-
|
|
610
|
-
* alone (WCAG 1.4.1). */
|
|
543
|
+
|
|
611
544
|
[data-slot="list-row"][data-unread] {
|
|
612
545
|
background: var(--list-row-unread-background, hsl(var(--muted)));
|
|
613
546
|
}
|
|
@@ -624,7 +557,7 @@
|
|
|
624
557
|
inline-size: var(--list-row-indicator-size);
|
|
625
558
|
block-size: var(--list-row-indicator-size);
|
|
626
559
|
border-radius: var(--radius-pill);
|
|
627
|
-
|
|
560
|
+
|
|
628
561
|
background: transparent;
|
|
629
562
|
}
|
|
630
563
|
[data-slot="list-row"][data-unread] [data-slot="list-row-indicator"] {
|
|
@@ -643,16 +576,10 @@
|
|
|
643
576
|
flex: 1 1 var(--list-row-body-min-width, 12rem);
|
|
644
577
|
flex-direction: column;
|
|
645
578
|
}
|
|
646
|
-
|
|
647
|
-
* the min-content width so an unbroken token (URL, long JA/VI compound) can't widen the row. */
|
|
579
|
+
|
|
648
580
|
[data-slot="list-row"][data-overflow="wrap"] [data-slot="list-row-body"] {
|
|
649
581
|
overflow-wrap: anywhere;
|
|
650
582
|
}
|
|
651
|
-
/* `density="compact"` (#246) — the compact inline-actions geometry: tighter block padding and
|
|
652
|
-
* column gap plus a LOWER body threshold, so a 36px avatar, the title/description and one or two
|
|
653
|
-
* small trailing Buttons stay inline inside the canonical 326px content column at 390px. It only
|
|
654
|
-
* LOWERS thresholds; the #224 overflow contract above is untouched (the row still wraps, the body
|
|
655
|
-
* is still clamped with min(…, 100%)), so a compact row can never widen the page root. */
|
|
656
583
|
[data-slot="list-row"][data-density="compact"] {
|
|
657
584
|
gap: var(--list-row-compact-gap, var(--space-2));
|
|
658
585
|
padding: var(--list-row-compact-padding-y, var(--space-2))
|
|
@@ -685,9 +612,6 @@
|
|
|
685
612
|
}
|
|
686
613
|
}
|
|
687
614
|
|
|
688
|
-
/* CredentialReveal — one-time secret surface: caution banner, masked/revealed value row with
|
|
689
|
-
* copy/reveal/download actions, and an optional acknowledge footer. Density-aware via the
|
|
690
|
-
* --control-height tier; colours/spacing read semantic role tokens only. */
|
|
691
615
|
.ui-credential-reveal {
|
|
692
616
|
display: flex;
|
|
693
617
|
flex-direction: column;
|
|
@@ -735,8 +659,6 @@
|
|
|
735
659
|
justify-content: flex-end;
|
|
736
660
|
}
|
|
737
661
|
|
|
738
|
-
/* QrCode — a quiet, scanner-safe SVG surface with an ISO/IEC-style four-module quiet zone
|
|
739
|
-
* supplied by the encoder. Sizing is natural rather than stretched across its container. */
|
|
740
662
|
.ui-qr-code {
|
|
741
663
|
display: block;
|
|
742
664
|
inline-size: var(--qr-code-size-md);
|
|
@@ -756,20 +678,14 @@
|
|
|
756
678
|
}
|
|
757
679
|
|
|
758
680
|
@layer components {
|
|
759
|
-
/* PERMISSION MATRIX — `.ui-permission-matrix` was a bare hook with no rule anywhere, so every
|
|
760
|
-
* constant sat on the component (#319). */
|
|
761
681
|
.ui-permission-matrix-table {
|
|
762
682
|
min-inline-size: var(--permission-matrix-min-width);
|
|
763
683
|
}
|
|
764
684
|
|
|
765
|
-
/* Sticky first column: the scrolling grid passes UNDER it, so it needs an opaque ground.
|
|
766
|
-
* Scoped through the matrix root because `[data-slot="table-head"]` sets its own background at
|
|
767
|
-
* the same specificity — an unscoped rule would win only by import order, which is not a
|
|
768
|
-
* property worth depending on. */
|
|
769
685
|
.ui-permission-matrix .ui-permission-matrix-pin {
|
|
770
686
|
position: sticky;
|
|
771
687
|
inset-inline-start: 0;
|
|
772
|
-
|
|
688
|
+
|
|
773
689
|
z-index: 20;
|
|
774
690
|
background-color: inherit;
|
|
775
691
|
border-inline-end: 1px solid hsl(var(--border));
|
|
@@ -796,10 +712,7 @@
|
|
|
796
712
|
}
|
|
797
713
|
|
|
798
714
|
@layer components {
|
|
799
|
-
|
|
800
|
-
* rail's whole geometry lived on the component as Tailwind literals, so a service could not
|
|
801
|
-
* retune it. Logical sizing (inline-/block-size) keeps the rail correct in RTL and in vertical
|
|
802
|
-
* writing modes; the thumb radius is a knob so a sharp-cornered theme squares it once. */
|
|
715
|
+
|
|
803
716
|
.ui-scroll-area-bar {
|
|
804
717
|
padding: var(--scroll-area-bar-padding);
|
|
805
718
|
}
|
|
@@ -816,3 +729,171 @@
|
|
|
816
729
|
border-radius: var(--scroll-area-thumb-radius);
|
|
817
730
|
}
|
|
818
731
|
}
|
|
732
|
+
|
|
733
|
+
@layer components {
|
|
734
|
+
|
|
735
|
+
:is(.ui-code-block, .ui-prose pre) {
|
|
736
|
+
margin: 0;
|
|
737
|
+
overflow: auto;
|
|
738
|
+
border-radius: var(--code-block-radius);
|
|
739
|
+
background: hsl(var(--muted));
|
|
740
|
+
padding: var(--code-block-space-inset);
|
|
741
|
+
color: hsl(var(--foreground));
|
|
742
|
+
font-family: var(--font-mono);
|
|
743
|
+
font-size: var(--code-block-font-size);
|
|
744
|
+
line-height: var(--code-block-line-height);
|
|
745
|
+
white-space: pre-wrap;
|
|
746
|
+
overflow-wrap: anywhere;
|
|
747
|
+
tab-size: 2;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
:is(.ui-code-block, .ui-prose pre) > code {
|
|
751
|
+
font: inherit;
|
|
752
|
+
background: transparent;
|
|
753
|
+
padding: 0;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
.ui-code-block[data-wrap="false"] {
|
|
757
|
+
white-space: pre;
|
|
758
|
+
overflow-wrap: normal;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
.ui-code-block[data-size="xs"] {
|
|
762
|
+
font-size: var(--code-block-font-size-xs);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.ui-code-block[data-max-height="sm"] {
|
|
766
|
+
max-block-size: var(--code-block-max-height-sm);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
.ui-code-block[data-max-height="md"] {
|
|
770
|
+
max-block-size: var(--code-block-max-height-md);
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
.ui-code-block[data-max-height="lg"] {
|
|
774
|
+
max-block-size: var(--code-block-max-height-lg);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
.ui-prose {
|
|
778
|
+
font-size: var(--prose-font-size);
|
|
779
|
+
line-height: var(--prose-line-height);
|
|
780
|
+
overflow-wrap: anywhere;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
.ui-prose[data-size="sm"] {
|
|
784
|
+
font-size: var(--prose-font-size-sm);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
.ui-prose[data-image-size="original"] {
|
|
788
|
+
overflow-x: auto;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
.ui-prose > * {
|
|
792
|
+
margin-block: 0;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
.ui-prose > * + * {
|
|
796
|
+
margin-block-start: var(--prose-space-block);
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
.ui-prose :is(h1, h2, h3, h4) {
|
|
800
|
+
font-weight: var(--font-weight-semibold);
|
|
801
|
+
line-height: var(--line-height-tight);
|
|
802
|
+
text-wrap: balance;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
.ui-prose > :is(h1, h2, h3, h4) + * {
|
|
806
|
+
margin-block-start: var(--prose-space-block);
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
.ui-prose > * + :is(h1, h2, h3, h4) {
|
|
810
|
+
margin-block-start: var(--prose-heading-space-block-start);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.ui-prose h1 {
|
|
814
|
+
font-size: var(--heading-h1);
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
.ui-prose h2 {
|
|
818
|
+
font-size: var(--heading-h2);
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
.ui-prose h3 {
|
|
822
|
+
font-size: var(--heading-h3);
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
.ui-prose h4 {
|
|
826
|
+
font-size: var(--heading-h4);
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
.ui-prose :is(ul, ol) {
|
|
830
|
+
padding-inline-start: var(--prose-list-space-inline);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
.ui-prose ul {
|
|
834
|
+
list-style: disc;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
.ui-prose ol {
|
|
838
|
+
list-style: decimal;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
.ui-prose li + li {
|
|
842
|
+
margin-block-start: var(--prose-list-item-space);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.ui-prose li > :is(ul, ol) {
|
|
846
|
+
margin-block-start: var(--prose-list-item-space);
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.ui-prose blockquote {
|
|
850
|
+
border-inline-start: var(--prose-quote-border-width) solid hsl(var(--border));
|
|
851
|
+
padding-inline-start: var(--prose-quote-space-inline);
|
|
852
|
+
color: hsl(var(--muted-foreground));
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.ui-prose :not(pre) > code {
|
|
856
|
+
font-family: var(--font-mono);
|
|
857
|
+
font-size: var(--prose-code-font-size);
|
|
858
|
+
background: hsl(var(--muted));
|
|
859
|
+
padding-inline: var(--prose-code-space-inline);
|
|
860
|
+
border-radius: var(--prose-code-radius);
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
.ui-prose a {
|
|
864
|
+
color: hsl(var(--primary));
|
|
865
|
+
text-decoration: underline;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
.ui-prose table {
|
|
869
|
+
inline-size: 100%;
|
|
870
|
+
border-collapse: collapse;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
.ui-prose :is(th, td) {
|
|
874
|
+
border: var(--stroke-hairline) solid hsl(var(--border));
|
|
875
|
+
padding: var(--table-cell-padding-y) var(--table-cell-space-x);
|
|
876
|
+
text-align: start;
|
|
877
|
+
vertical-align: top;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
.ui-prose th {
|
|
881
|
+
font-weight: var(--font-weight-medium);
|
|
882
|
+
background: hsl(var(--muted));
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
.ui-prose img {
|
|
886
|
+
max-inline-size: 100%;
|
|
887
|
+
block-size: auto;
|
|
888
|
+
border-radius: var(--prose-image-radius);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
.ui-prose[data-image-size="original"] img {
|
|
892
|
+
max-inline-size: none;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
.ui-prose hr {
|
|
896
|
+
border: 0;
|
|
897
|
+
border-block-start: var(--stroke-hairline) solid hsl(var(--border));
|
|
898
|
+
}
|
|
899
|
+
}
|
|
@@ -69,27 +69,6 @@
|
|
|
69
69
|
opacity: 0.7;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
.ui-time-input {
|
|
73
|
-
width: 100%;
|
|
74
|
-
min-height: var(--control-height);
|
|
75
|
-
border-radius: var(--radius-md);
|
|
76
|
-
border: 1px solid hsl(var(--input));
|
|
77
|
-
background: hsl(var(--background));
|
|
78
|
-
padding-inline: var(--space-3);
|
|
79
|
-
padding-block: 0;
|
|
80
|
-
font-size: var(--font-size-base);
|
|
81
|
-
color: hsl(var(--foreground));
|
|
82
|
-
outline: none;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.ui-time-input:focus-visible {
|
|
86
|
-
border-color: hsl(var(--focus-ring-color, var(--ring)));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.ui-time-input[aria-invalid="true"] {
|
|
90
|
-
border-color: hsl(var(--destructive));
|
|
91
|
-
}
|
|
92
|
-
|
|
93
72
|
.ui-password-strength {
|
|
94
73
|
display: grid;
|
|
95
74
|
gap: var(--space-1);
|
|
@@ -163,12 +142,6 @@
|
|
|
163
142
|
}
|
|
164
143
|
|
|
165
144
|
@layer components {
|
|
166
|
-
/* UPLOAD — five variants (dropzone · button · picture · picture-card · avatar) that used to
|
|
167
|
-
* carry their entire box as Tailwind literals on the component: 66 of them, the worst file in
|
|
168
|
-
* the library (#319). A service could not resize the avatar, dial back the dropzone's generous
|
|
169
|
-
* inset, or align the file row to its own grid without forking. Every constant is now a knob
|
|
170
|
-
* (rule #45); colour scrims are role-mirror knobs resolved at the CALL SITE so a scoped
|
|
171
|
-
* [data-tenant]/.dark override reaches them (docs/TOKENS.md). */
|
|
172
145
|
|
|
173
146
|
.ui-upload-dropzone {
|
|
174
147
|
cursor: pointer;
|
|
@@ -253,7 +226,6 @@
|
|
|
253
226
|
font-size: var(--upload-tile-label-font-size);
|
|
254
227
|
}
|
|
255
228
|
|
|
256
|
-
/* Busy scrim — one share of the surface role, resolved here so a scoped theme reaches it. */
|
|
257
229
|
.ui-upload-overlay {
|
|
258
230
|
position: absolute;
|
|
259
231
|
inset: 0;
|
|
@@ -380,8 +352,6 @@
|
|
|
380
352
|
color: hsl(var(--muted-foreground));
|
|
381
353
|
}
|
|
382
354
|
|
|
383
|
-
/* Sits ON the photo, so the wash is a fixed dark scrim rather than a surface role — it must
|
|
384
|
-
* stay legible over an arbitrary user image in either theme. */
|
|
385
355
|
.ui-upload-avatar-change {
|
|
386
356
|
position: absolute;
|
|
387
357
|
inset-inline: 0;
|
|
@@ -466,7 +436,6 @@
|
|
|
466
436
|
margin-inline-end: var(--space-2);
|
|
467
437
|
}
|
|
468
438
|
|
|
469
|
-
/* Disabled affordances share the one system alpha rather than a per-variant literal. */
|
|
470
439
|
.ui-upload-dropzone[data-disabled],
|
|
471
440
|
.ui-upload-tile-add[data-disabled],
|
|
472
441
|
.ui-upload-avatar[data-disabled] {
|
|
@@ -474,12 +443,6 @@
|
|
|
474
443
|
opacity: var(--disabled-opacity);
|
|
475
444
|
}
|
|
476
445
|
|
|
477
|
-
/* ── BranchScopePicker (gh#319) ────────────────────────────────────────────────
|
|
478
|
-
* `.ui-branch-scope-picker` shipped as a bare hook: the class existed but no rule did, so all
|
|
479
|
-
* of the control's geometry sat on the component as Tailwind literals. It composes RadioGroup +
|
|
480
|
-
* CheckboxGroup + SearchInput and has no field box of its own, so none of the control-affix
|
|
481
|
-
* machinery applies — these four rules are the whole surface. Every measure is a documented
|
|
482
|
-
* token (#45); see tokens/components/data-entry.css for why each default is a flat rem. */
|
|
483
446
|
.ui-branch-scope-picker {
|
|
484
447
|
display: flex;
|
|
485
448
|
flex-direction: column;
|
|
@@ -492,11 +455,6 @@
|
|
|
492
455
|
gap: var(--branch-scope-picker-badges-gap);
|
|
493
456
|
}
|
|
494
457
|
|
|
495
|
-
/* The `mode="selected"` subset, indented under its radio by a rule on the inline-start edge.
|
|
496
|
-
* Logical properties throughout, so the indent flips with the writing direction (the utilities
|
|
497
|
-
* this replaces, `border-s-2 ps-4`, already did). The colour is left to the global
|
|
498
|
-
* `* { border-color: hsl(var(--border)) }` so a scoped [data-tenant]/.dark override of
|
|
499
|
-
* `--border` still reaches it. */
|
|
500
458
|
.ui-branch-scope-picker-subset {
|
|
501
459
|
display: flex;
|
|
502
460
|
flex-direction: column;
|
|
@@ -505,9 +463,6 @@
|
|
|
505
463
|
border-inline-start-width: var(--branch-scope-picker-subset-border-width);
|
|
506
464
|
}
|
|
507
465
|
|
|
508
|
-
/* A bounded scroll region — the component gives it `tabIndex={0}` + a group name so it stays
|
|
509
|
-
* keyboard-reachable (WCAG 2.1.1 / axe scrollable-region-focusable) even when every checkbox
|
|
510
|
-
* in it is disabled. The cap is the token; the overflow is not negotiable. */
|
|
511
466
|
.ui-branch-scope-picker-list {
|
|
512
467
|
max-block-size: var(--branch-scope-picker-list-max-height);
|
|
513
468
|
overflow-y: auto;
|
package/dist/styles/density.css
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* DENSITY — named presets of the global `--scaling` factor (foundation.css).
|
|
3
|
-
* One knob: density sets `--scaling`, and every size token (spacing grid, control
|
|
4
|
-
* / table / checkbox / switch heights, radius, and everything derived from them)
|
|
5
|
-
* rescales in proportion. Two entry points, same variable:
|
|
6
|
-
* • `<PageContainer density>` → `.ui-density-*` class (scoped to a descendant,
|
|
7
|
-
* wins for its subtree by proximity).
|
|
8
|
-
* • the density AXIS → `:root[data-density="*"]` on <html> (AppProvider density
|
|
9
|
-
* prop), so it cascades app-wide incl. portalled overlays. For a value off the
|
|
10
|
-
* three presets, set `--scaling` directly (AppProvider `scaling` prop).
|
|
11
|
-
*
|
|
12
|
-
* INTENTIONALLY UNLAYERED — do NOT wrap in `@layer components`. `--scaling` has an
|
|
13
|
-
* unlayered `:root` default (foundation.css); a layered `:root[data-density]` would
|
|
14
|
-
* always lose to it regardless of specificity, making the axis a no-op on <html>.
|
|
15
|
-
* Unlayered, `:root[data-density="x"]` (0,2,0) beats the `:root` default (0,1,0).
|
|
16
|
-
*/
|
|
1
|
+
|
|
17
2
|
|
|
18
3
|
.ui-density-compact,
|
|
19
4
|
:root[data-density="compact"] {
|
|
@@ -30,20 +15,6 @@
|
|
|
30
15
|
--scaling: 1.08;
|
|
31
16
|
}
|
|
32
17
|
|
|
33
|
-
/*
|
|
34
|
-
* A DESCENDANT density scope (`.ui-density-*` from `<PageContainer density>`) must
|
|
35
|
-
* RE-DERIVE every --scaling-tied token, not just flip --scaling. CSS substitutes
|
|
36
|
-
* `var(--scaling)` at the element that DECLARES a token, so the size tokens declared
|
|
37
|
-
* at `:root` (foundation/control/table) are baked with the ROOT --scaling and inherit
|
|
38
|
-
* as fixed values — a subtree that only sets a new --scaling can't retune them. (Same
|
|
39
|
-
* reason `.ui-scale-fixed` re-declares the whole list.) Mirror that list here, scaled
|
|
40
|
-
* by the LOCAL --scaling, so controls/spacing in the subtree actually resize. The
|
|
41
|
-
* `:root[data-density]` selectors above need ONLY --scaling: they re-declare on the
|
|
42
|
-
* same element as the :root token formulas, so those re-resolve there.
|
|
43
|
-
*
|
|
44
|
-
* density.css is a registered tier-definition file (check-control-sizing), so the
|
|
45
|
-
* `calc(var(--control-height) ± …)` tier offsets are permitted here.
|
|
46
|
-
*/
|
|
47
18
|
.ui-density-compact,
|
|
48
19
|
.ui-density-default,
|
|
49
20
|
.ui-density-comfortable {
|