@godxjp/ui 31.31.8 → 32.0.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 +102 -121
- package/agent/START-HERE.md +10 -10
- package/agent/components/Accordion.json +2 -2
- package/agent/components/AccountChip.json +1 -1
- package/agent/components/Actions.json +1 -1
- package/agent/components/Activity.json +2 -2
- package/agent/components/Affix.json +1 -1
- package/agent/components/Alert.json +22 -6
- package/agent/components/AlertDialog.json +8 -1
- package/agent/components/Anchor.json +4 -3
- package/agent/components/AppLauncher.json +2 -2
- package/agent/components/AppProvider.json +19 -11
- package/agent/components/AppSettingPicker.json +18 -2
- package/agent/components/AppShell.json +4 -5
- package/agent/components/AreaChart.json +0 -1
- package/agent/components/AspectRatio.json +2 -2
- package/agent/components/Attachments.json +3 -3
- package/agent/components/AuthAccountSummary.json +1 -1
- package/agent/components/AuthDivider.json +1 -1
- package/agent/components/AuthExpiryProvider.json +0 -1
- package/agent/components/AuthFooter.json +2 -2
- package/agent/components/AuthIdentity.json +3 -3
- package/agent/components/AuthStack.json +1 -1
- package/agent/components/Avatar.json +2 -12
- package/agent/components/Badge.json +1 -1
- package/agent/components/BarChart.json +0 -1
- package/agent/components/BranchScopePicker.json +1 -1
- package/agent/components/Breadcrumb.json +1 -1
- package/agent/components/Button.json +3 -3
- package/agent/components/Calendar.json +1 -1
- package/agent/components/Card.json +2 -2
- package/agent/components/CardBar.json +0 -1
- package/agent/components/CardContent.json +0 -1
- package/agent/components/Carousel.json +4 -3
- package/agent/components/Cascader.json +1 -1
- package/agent/components/CenteredShell.json +78 -17
- package/agent/components/ChatBubble.json +3 -3
- package/agent/components/ChatBubbleList.json +3 -3
- package/agent/components/ChatComposer.json +3 -3
- package/agent/components/ChatSuggestion.json +3 -3
- package/agent/components/Checkbox.json +1 -1
- package/agent/components/CheckboxGroup.json +0 -1
- package/agent/components/CodeBlock.json +1 -1
- package/agent/components/Collapsible.json +4 -4
- package/agent/components/ColorPicker.json +1 -1
- package/agent/components/Command.json +5 -5
- package/agent/components/CommandPalette.json +1 -1
- package/agent/components/CompactBarTrend.json +1 -1
- package/agent/components/Conversations.json +3 -3
- package/agent/components/CredentialReveal.json +1 -1
- package/agent/components/DataState.json +2 -2
- package/agent/components/DataTable.json +1 -1
- package/agent/components/DatePicker.json +1 -1
- package/agent/components/Descriptions.json +1 -1
- package/agent/components/Dialog.json +2 -2
- package/agent/components/DraggablePanel.json +5 -4
- package/agent/components/DropdownMenu.json +1 -1
- package/agent/components/EmojiPicker.json +3 -2
- package/agent/components/EmptyState.json +1 -1
- package/agent/components/ErrorSurface.json +3 -3
- package/agent/components/FeatureList.json +1 -1
- package/agent/components/Field.json +0 -1
- package/agent/components/Flex.json +34 -4
- package/agent/components/FloatButton.json +6 -5
- package/agent/components/Form.json +1 -1
- package/agent/components/FormErrors.json +0 -1
- package/agent/components/FormField.json +6 -6
- package/agent/components/FormFieldArray.json +0 -1
- package/agent/components/FormFieldControl.json +0 -1
- package/agent/components/FormRoot.json +1 -1
- package/agent/components/Heading.json +3 -0
- package/agent/components/Icon.json +1 -1
- package/agent/components/Image.json +7 -4
- package/agent/components/InfiniteQueryState.json +1 -1
- package/agent/components/Input.json +1 -1
- package/agent/components/InputOTP.json +2 -2
- package/agent/components/Label.json +3 -3
- package/agent/components/LegalDocumentShell.json +5 -4
- package/agent/components/Legend.json +1 -1
- package/agent/components/LineChart.json +0 -1
- package/agent/components/Link.json +0 -1
- package/agent/components/ListRow.json +1 -1
- package/agent/components/Logo.json +5 -4
- package/agent/components/Marquee.json +4 -3
- package/agent/components/Masonry.json +4 -3
- package/agent/components/MasterDetail.json +1 -1
- package/agent/components/MegaMenu.json +4 -3
- package/agent/components/MobileShell.json +4 -4
- package/agent/components/NavList.json +1 -1
- package/agent/components/NumberInput.json +1 -1
- package/agent/components/OrgChart.json +4 -3
- package/agent/components/OrgSwitcher.json +1 -1
- package/agent/components/OverlayPortalProvider.json +0 -1
- package/agent/components/PageContainer.json +3 -3
- package/agent/components/PageCover.json +3 -2
- package/agent/components/Pagination.json +1 -1
- package/agent/components/PasswordInput.json +1 -1
- package/agent/components/PasswordStrength.json +1 -1
- package/agent/components/PermissionMatrix.json +1 -1
- package/agent/components/PieChart.json +0 -1
- package/agent/components/Popover.json +31 -6
- package/agent/components/PrefetchLink.json +1 -1
- package/agent/components/Progress.json +1 -1
- package/agent/components/Prose.json +1 -1
- package/agent/components/QrCode.json +1 -1
- package/agent/components/Radio.json +0 -1
- package/agent/components/RadioGroup.json +2 -2
- package/agent/components/RangeTimeline.json +2 -1
- package/agent/components/Rating.json +1 -1
- package/agent/components/RecordPicker.json +1 -1
- package/agent/components/ResizablePanel.json +1 -1
- package/agent/components/ResponsiveGrid.json +2 -2
- package/agent/components/Reveal.json +3 -3
- package/agent/components/ScrollArea.json +2 -2
- package/agent/components/SearchInput.json +1 -1
- package/agent/components/Segmented.json +1 -1
- package/agent/components/Select.json +7 -5
- package/agent/components/Separator.json +1 -1
- package/agent/components/ServiceCatalogCta.json +0 -1
- package/agent/components/ServiceLauncherCard.json +1 -1
- package/agent/components/ServiceRolePanel.json +1 -1
- package/agent/components/Sheet.json +5 -5
- package/agent/components/Sidebar.json +1 -1
- package/agent/components/Skeleton.json +26 -12
- package/agent/components/Slider.json +2 -2
- package/agent/components/SortableList.json +3 -2
- package/agent/components/SplitPane.json +1 -1
- package/agent/components/StatCard.json +1 -1
- package/agent/components/Steps.json +1 -1
- package/agent/components/Swatch.json +1 -1
- package/agent/components/Switch.json +1 -1
- package/agent/components/Table.json +1 -1
- package/agent/components/Tabs.json +3 -3
- package/agent/components/Text.json +5 -1
- package/agent/components/TextDiff.json +5 -4
- package/agent/components/Textarea.json +1 -1
- package/agent/components/ThemeScope.json +1 -1
- package/agent/components/ThoughtChain.json +3 -3
- package/agent/components/TimePicker.json +1 -1
- package/agent/components/Timeline.json +1 -1
- package/agent/components/TimelineGrid.json +5 -4
- package/agent/components/Toaster.json +0 -1
- package/agent/components/Toggle.json +3 -3
- package/agent/components/ToggleGroup.json +1 -1
- package/agent/components/Toolbar.json +10 -3
- package/agent/components/Tooltip.json +9 -9
- package/agent/components/Topbar.json +1 -1
- package/agent/components/TopbarItem.json +1 -1
- package/agent/components/Transfer.json +2 -2
- package/agent/components/Tree.json +1 -1
- package/agent/components/TreeSelect.json +1 -1
- package/agent/components/TwoFactorSetup.json +1 -1
- package/agent/components/Upload.json +1 -1
- package/agent/components/UploadCropDialog.json +1 -1
- package/agent/components/Welcome.json +3 -3
- package/agent/components/formatDate.json +2 -2
- package/agent/components/inertiaUpload.json +0 -1
- package/agent/components/useZodForm.json +0 -1
- package/agent/components-index.json +80 -154
- package/agent/components.json +541 -1737
- package/agent/index.json +10 -10
- package/agent/llms.txt +9 -9
- package/agent/patterns/account-recovery-settings.json +1 -1
- package/agent/patterns/auth-recovery-panels.json +2 -2
- package/agent/patterns/error-pages.json +1 -1
- package/agent/patterns/pricing-plans.json +17 -0
- package/agent/patterns-index.json +17 -1
- package/agent/patterns.json +21 -4
- package/agent/rules.json +30 -65
- package/agent/tokens.json +27 -57
- package/agent/vocabulary.json +3 -3
- package/dist/app/app-provider.d.ts +5 -3
- package/dist/app/app-provider.js +47 -12
- package/dist/app/date-format-labels.d.ts +3 -1
- package/dist/app/date-format-labels.js +2 -4
- package/dist/app/date-formats.d.ts +21 -2
- package/dist/app/date-formats.js +51 -2
- package/dist/app/index.d.ts +3 -1
- package/dist/app/index.js +5 -0
- package/dist/app/locales.d.ts +58 -3
- package/dist/app/locales.js +134 -8
- package/dist/app/preset.d.ts +25 -0
- package/dist/app/preset.js +10 -0
- package/dist/app/request-headers.d.ts +3 -3
- package/dist/app/request-headers.js +19 -10
- package/dist/app/settings-scope.d.ts +54 -0
- package/dist/app/settings-scope.js +46 -0
- package/dist/app/tenant-theme.js +8 -3
- package/dist/app/time-format-labels.d.ts +4 -1
- package/dist/app/time-format-labels.js +7 -1
- package/dist/app/types.d.ts +10 -2
- package/dist/app/use-formatting.d.ts +1 -1
- package/dist/components/admin/index.d.ts +1 -1
- package/dist/components/admin/index.js +1 -1
- package/dist/components/data-display/accordion.d.ts +51 -1
- package/dist/components/data-display/accordion.js +247 -1
- package/dist/components/data-display/avatar.d.ts +16 -1
- package/dist/components/data-display/avatar.js +109 -1
- package/dist/components/data-display/credential-reveal.d.ts +9 -2
- package/dist/components/data-display/credential-reveal.js +156 -1
- package/dist/components/data-display/image.js +5 -3
- package/dist/components/data-display/index.d.ts +0 -21
- package/dist/components/data-display/index.js +1 -43
- package/dist/components/data-display/popover.d.ts +15 -3
- package/dist/components/data-display/popover.js +168 -2
- package/dist/components/data-entry/branch-scope-picker.d.ts +1 -1
- package/dist/components/data-entry/index.d.ts +5 -12
- package/dist/components/data-entry/index.js +11 -12
- package/dist/components/data-entry/input-otp.d.ts +48 -2
- package/dist/components/data-entry/input-otp.js +94 -1
- package/dist/components/data-entry/number-input.d.ts +1 -1
- package/dist/components/data-entry/password-input.d.ts +38 -2
- package/dist/components/data-entry/password-input.js +56 -1
- package/dist/components/data-entry/rating.d.ts +38 -2
- package/dist/components/data-entry/rating.js +127 -1
- package/dist/components/data-entry/segmented.d.ts +94 -2
- package/dist/components/data-entry/segmented.js +104 -1
- package/dist/components/{ui/tag-input.d.ts → data-entry/select-tags-inline.d.ts} +7 -4
- package/dist/components/{ui/tag-input.js → data-entry/select-tags-inline.js} +4 -4
- package/dist/components/data-entry/select.js +4 -0
- package/dist/components/data-entry/toggle-group.d.ts +108 -2
- package/dist/components/data-entry/toggle-group.js +189 -1
- package/dist/components/data-entry/toggle.d.ts +86 -2
- package/dist/components/data-entry/toggle.js +153 -2
- package/dist/components/feedback/alert.d.ts +5 -3
- package/dist/components/feedback/alert.js +14 -2
- package/dist/components/feedback/index.d.ts +2 -6
- package/dist/components/feedback/index.js +1 -13
- package/dist/components/feedback/skeleton.d.ts +4 -17
- package/dist/components/feedback/skeleton.js +3 -40
- package/dist/components/general/index.d.ts +2 -4
- package/dist/components/general/index.js +1 -6
- package/dist/components/general/typography.d.ts +4 -58
- package/dist/components/general/typography.js +7 -141
- package/dist/components/layout/aspect-ratio.d.ts +24 -1
- package/dist/components/layout/aspect-ratio.js +18 -1
- package/dist/components/layout/auth-divider.js +1 -1
- package/dist/components/layout/auth-identity.js +6 -2
- package/dist/components/layout/centered-shell.d.ts +13 -8
- package/dist/components/layout/centered-shell.js +43 -1
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +73 -1
- package/dist/components/layout/index.d.ts +1 -13
- package/dist/components/layout/index.js +0 -12
- package/dist/components/layout/separator.d.ts +25 -2
- package/dist/components/layout/separator.js +71 -1
- package/dist/components/navigation/{app-setting-toggle.d.ts → app-setting-cycle.d.ts} +3 -4
- package/dist/components/navigation/{app-setting-toggle.js → app-setting-cycle.js} +3 -3
- package/dist/components/navigation/app-setting-picker.d.ts +6 -2
- package/dist/components/navigation/app-setting-picker.js +20 -2
- package/dist/components/navigation/index.d.ts +3 -11
- package/dist/components/navigation/index.js +1 -9
- package/dist/components/navigation/tabs.js +1 -1
- package/dist/components/ui/carousel.d.ts +1 -1
- package/dist/components/ui/carousel.js +1 -1
- package/dist/components/ui/index.d.ts +11 -5
- package/dist/components/ui/index.js +5 -5
- package/dist/contracts/measurement.json +2 -2
- package/dist/email/brand-mark.d.ts +3 -2
- package/dist/email/brand-mark.js +1 -1
- package/dist/email/tokens.generated.d.ts +6 -6
- package/dist/email/tokens.generated.js +6 -6
- package/dist/i18n/locale-tags.d.ts +25 -0
- package/dist/i18n/locale-tags.js +59 -0
- package/dist/i18n/translate.d.ts +20 -3
- package/dist/i18n/translate.js +25 -14
- package/dist/i18n/use-translation.d.ts +3 -3
- package/dist/i18n/use-translation.js +4 -2
- package/dist/{components/navigation → lab}/anchor.d.ts +2 -2
- package/dist/{components/navigation → lab}/anchor.js +5 -5
- package/dist/{components/data-display → lab}/carousel.js +2 -2
- package/dist/{components/layout → lab}/draggable-panel.d.ts +8 -8
- package/dist/{components/layout → lab}/draggable-panel.js +2 -2
- package/dist/{components/data-entry → lab}/emoji-picker.d.ts +2 -2
- package/dist/{components/data-entry → lab}/emoji-picker.js +6 -6
- package/dist/{components/general → lab}/float-button.d.ts +8 -8
- package/dist/{components/general → lab}/float-button.js +7 -7
- package/dist/lab/index.d.ts +39 -0
- package/dist/lab/index.js +48 -0
- package/dist/{components/layout → lab}/legal-document-shell.d.ts +2 -2
- package/dist/{components/layout → lab}/legal-document-shell.js +4 -4
- package/dist/{components/data-display → lab}/marquee.d.ts +5 -5
- package/dist/{components/data-display → lab}/marquee.js +5 -5
- package/dist/{components/layout → lab}/masonry.d.ts +2 -2
- package/dist/{components/layout → lab}/masonry.js +3 -3
- package/dist/{components/navigation → lab}/mega-menu.d.ts +4 -4
- package/dist/{components/navigation → lab}/mega-menu.js +2 -2
- package/dist/{components/data-display → lab}/org-chart.d.ts +2 -2
- package/dist/{components/data-display → lab}/org-chart.js +4 -4
- package/dist/{components/layout → lab}/page-cover.d.ts +2 -2
- package/dist/{components/layout → lab}/page-cover.js +2 -2
- package/dist/{components/data-display → lab}/range-timeline.d.ts +1 -1
- package/dist/{components/data-display → lab}/range-timeline.js +6 -6
- package/dist/{components/data-entry → lab}/sortable-list.d.ts +2 -2
- package/dist/{components/data-entry → lab}/sortable-list.js +3 -3
- package/dist/{components/data-display → lab}/text-diff.d.ts +3 -3
- package/dist/{components/data-display → lab}/text-diff.js +4 -4
- package/dist/{components/data-display → lab}/timeline-grid.d.ts +2 -2
- package/dist/{components/data-display → lab}/timeline-grid.js +1 -1
- package/dist/lib/control-styles.js +1 -1
- package/dist/lib/datetime/format.js +20 -6
- package/dist/lib/datetime/sync.d.ts +6 -2
- package/dist/lib/datetime/sync.js +14 -18
- package/dist/lib/platform.d.ts +1 -1
- package/dist/props/components/app.prop.d.ts +28 -13
- package/dist/props/components/data-display.prop.d.ts +19 -29
- package/dist/props/components/feedback.prop.d.ts +15 -44
- package/dist/props/components/general.prop.d.ts +2 -64
- package/dist/props/components/index.d.ts +9 -1
- package/dist/props/components/layout.prop.d.ts +41 -57
- package/dist/props/registry.d.ts +48 -101
- package/dist/props/registry.js +45 -129
- package/dist/props/vocabulary/index.d.ts +1 -1
- package/dist/props/vocabulary/interaction.prop.d.ts +3 -12
- package/dist/styles/alert-layout.css +0 -29
- package/dist/styles/data-display-layout.css +14 -22
- package/dist/styles/fonts/OFL.txt +93 -0
- package/dist/styles/form-layout.css +4 -0
- package/dist/styles/index.css +0 -2
- package/dist/styles/layers.json +44 -179
- package/dist/styles/text-layout.css +0 -15
- package/dist/styles.css +2 -0
- package/dist/themes/godx.css +43 -0
- package/dist/themes/godx.d.ts +13 -0
- package/dist/themes/godx.js +12 -0
- package/dist/tokens/components/feedback.css +0 -6
- package/dist/tokens/derived.css +23 -22
- package/dist/tokens/foundation.css +4 -6
- package/docs/COMPOSITION-VS-COMPONENT.md +58 -33
- package/docs/CONSUMER-RULES.md +1 -1
- package/docs/CUSTOMER-THEMING.md +17 -53
- package/docs/migrations/v32.md +98 -0
- package/package.json +58 -19
- package/scripts/_agent-setup.mjs +54 -3
- package/scripts/brand-accent.generated.mjs +15 -2
- package/scripts/cli.mjs +36 -11
- package/scripts/codemod.mjs +522 -0
- package/scripts/consumer-rule.md +21 -43
- package/scripts/postinstall.mjs +10 -47
- package/scripts/prune-css.mjs +1 -1
- package/scripts/ui-audit.mjs +5 -2
- package/dist/components/data-display/chat-bubble.d.ts +0 -30
- package/dist/components/data-display/chat-bubble.js +0 -229
- package/dist/components/data-display/hover-card.d.ts +0 -1
- package/dist/components/data-display/hover-card.js +0 -7
- package/dist/components/data-display/thought-chain.d.ts +0 -42
- package/dist/components/data-display/thought-chain.js +0 -177
- package/dist/components/data-display/thumbnail.d.ts +0 -37
- package/dist/components/data-display/thumbnail.js +0 -20
- package/dist/components/data-display/welcome.d.ts +0 -26
- package/dist/components/data-display/welcome.js +0 -37
- package/dist/components/data-entry/attachments.d.ts +0 -19
- package/dist/components/data-entry/attachments.js +0 -366
- package/dist/components/data-entry/chat-composer.d.ts +0 -51
- package/dist/components/data-entry/chat-composer.js +0 -200
- package/dist/components/data-entry/chat-suggestion.d.ts +0 -28
- package/dist/components/data-entry/chat-suggestion.js +0 -309
- package/dist/components/data-entry/tag-input.d.ts +0 -2
- package/dist/components/data-entry/tag-input.js +0 -5
- package/dist/components/feedback/banner.d.ts +0 -21
- package/dist/components/feedback/banner.js +0 -19
- package/dist/components/feedback/callout.d.ts +0 -23
- package/dist/components/feedback/callout.js +0 -42
- package/dist/components/layout/auth-shell.d.ts +0 -10
- package/dist/components/layout/auth-shell.js +0 -42
- package/dist/components/layout/space-compact.d.ts +0 -65
- package/dist/components/layout/space-compact.js +0 -52
- package/dist/components/navigation/conversations.d.ts +0 -39
- package/dist/components/navigation/conversations.js +0 -371
- package/dist/components/ui/accordion.d.ts +0 -51
- package/dist/components/ui/accordion.js +0 -254
- package/dist/components/ui/aspect-ratio.d.ts +0 -24
- package/dist/components/ui/aspect-ratio.js +0 -21
- package/dist/components/ui/avatar.d.ts +0 -16
- package/dist/components/ui/avatar.js +0 -115
- package/dist/components/ui/credential-reveal.d.ts +0 -9
- package/dist/components/ui/credential-reveal.js +0 -160
- package/dist/components/ui/hover-card.d.ts +0 -47
- package/dist/components/ui/hover-card.js +0 -205
- package/dist/components/ui/input-otp.d.ts +0 -48
- package/dist/components/ui/input-otp.js +0 -101
- package/dist/components/ui/password-input.d.ts +0 -38
- package/dist/components/ui/password-input.js +0 -60
- package/dist/components/ui/rating.d.ts +0 -38
- package/dist/components/ui/rating.js +0 -131
- package/dist/components/ui/segmented.d.ts +0 -94
- package/dist/components/ui/segmented.js +0 -108
- package/dist/components/ui/separator.d.ts +0 -25
- package/dist/components/ui/separator.js +0 -74
- package/dist/components/ui/toggle-group.d.ts +0 -108
- package/dist/components/ui/toggle-group.js +0 -194
- package/dist/components/ui/toggle.d.ts +0 -86
- package/dist/components/ui/toggle.js +0 -156
- package/docs/CANONICAL-CONTRACTS.md +0 -206
- package/docs/COMPONENTS.md +0 -163
- package/docs/DATETIME.md +0 -78
- package/docs/DEVELOPMENT.md +0 -269
- package/docs/FRAME-A11Y-CI.md +0 -287
- package/docs/FRAME-COVERAGE-LEDGER.md +0 -123
- package/docs/FRAME-COVERAGE-REPORT.md +0 -228
- package/docs/FRAME-COVERAGE-STANDARD.md +0 -65
- package/docs/FRAME-COVERAGE.md +0 -29
- package/docs/MEASUREMENT-CONTRACT.md +0 -109
- package/docs/PROPS-REGISTRY.md +0 -61
- package/docs/PROPS-VOCABULARY.md +0 -100
- package/docs/REGISTRY.md +0 -70
- package/docs/TESTING.md +0 -107
- package/docs/THEME-API-COVERAGE.md +0 -538
- package/docs/WHAT-BELONGS-HERE.md +0 -179
- package/docs/asset-modules.d.ts +0 -53
- package/docs/assets/cover-terrain.svg +0 -6
- package/docs/assets/portrait-amber.svg +0 -5
- package/docs/assets/portrait-clay.svg +0 -5
- package/docs/assets/portrait-indigo.svg +0 -5
- package/docs/assets/portrait-iris.svg +0 -5
- package/docs/assets/portrait-moss.svg +0 -5
- package/docs/assets/portrait-plum.svg +0 -5
- package/docs/assets/portrait-slate.svg +0 -5
- package/docs/assets/service-mark-rose.svg +0 -6
- package/docs/assets/service-mark-teal.svg +0 -5
- package/docs/assets/shot-landscape.svg +0 -12
- package/docs/assets/shot-portrait.svg +0 -10
- package/docs/assets/tcgm/card-1.svg +0 -1
- package/docs/assets/tcgm/card-2.svg +0 -1
- package/docs/assets/tcgm/card-3.svg +0 -1
- package/docs/assets/tcgm/card-4.svg +0 -1
- package/docs/assets/tcgm/card-5.svg +0 -1
- package/docs/assets/tcgm/card-6.svg +0 -1
- package/docs/assets/tcgm/hero-prism.svg +0 -1
- package/docs/assets/tcgm/scene-1.svg +0 -1
- package/docs/assets/tcgm/scene-2.svg +0 -1
- package/docs/assets/tcgm/scene-3.svg +0 -1
- package/docs/assets/tcgm/scene-4.svg +0 -1
- package/docs/assets/tcgm/scene-5.svg +0 -1
- package/docs/assets/tcgm/tcgm-lockup-color.svg +0 -1
- package/docs/assets/tcgm/tcgm-symbol-color.svg +0 -1
- package/docs/charts/cjk-category-axis.tsx +0 -81
- package/docs/charts/compact-bar-trend.tsx +0 -327
- package/docs/charts/size-tiers.tsx +0 -192
- package/docs/data-display/accordion.tsx +0 -99
- package/docs/data-display/avatar.tsx +0 -502
- package/docs/data-display/badge.tsx +0 -335
- package/docs/data-display/card/examples/detail-panel.tsx +0 -106
- package/docs/data-display/card/examples/tab-list.tsx +0 -97
- package/docs/data-display/card/index.md +0 -3
- package/docs/data-display/card/index.tsx +0 -390
- package/docs/data-display/carousel.tsx +0 -160
- package/docs/data-display/charts.tsx +0 -278
- package/docs/data-display/chat-bubble.tsx +0 -397
- package/docs/data-display/code-block.tsx +0 -188
- package/docs/data-display/collapsible.tsx +0 -162
- package/docs/data-display/credential-reveal.tsx +0 -148
- package/docs/data-display/data-table/examples/antd-parity.tsx +0 -257
- package/docs/data-display/data-table/examples/approval-queue.tsx +0 -212
- package/docs/data-display/data-table/examples/grid-features.tsx +0 -158
- package/docs/data-display/data-table/examples/list-page.tsx +0 -175
- package/docs/data-display/data-table/examples/selectable-inbox.tsx +0 -113
- package/docs/data-display/data-table/examples/server-paged.tsx +0 -179
- package/docs/data-display/data-table/examples/striped-list.tsx +0 -173
- package/docs/data-display/data-table/index.md +0 -9
- package/docs/data-display/data-table/index.tsx +0 -407
- package/docs/data-display/descriptions.tsx +0 -263
- package/docs/data-display/empty-state.tsx +0 -164
- package/docs/data-display/feature-list.tsx +0 -159
- package/docs/data-display/hover-card.tsx +0 -181
- package/docs/data-display/image.tsx +0 -170
- package/docs/data-display/legend.tsx +0 -158
- package/docs/data-display/list-row.tsx +0 -441
- package/docs/data-display/markdown.tsx +0 -86
- package/docs/data-display/marquee.tsx +0 -254
- package/docs/data-display/org-chart.tsx +0 -165
- package/docs/data-display/permission-matrix.tsx +0 -188
- package/docs/data-display/popover-touch.tsx +0 -27
- package/docs/data-display/popover.tsx +0 -331
- package/docs/data-display/progress.tsx +0 -162
- package/docs/data-display/prose.tsx +0 -169
- package/docs/data-display/qr-code.tsx +0 -68
- package/docs/data-display/scroll-area.tsx +0 -420
- package/docs/data-display/service-launcher-card.tsx +0 -445
- package/docs/data-display/stat-card.tsx +0 -354
- package/docs/data-display/swatch.tsx +0 -107
- package/docs/data-display/table.tsx +0 -362
- package/docs/data-display/text-diff.tsx +0 -89
- package/docs/data-display/thought-chain.tsx +0 -176
- package/docs/data-display/thumbnail.tsx +0 -128
- package/docs/data-display/timeline-grid.tsx +0 -119
- package/docs/data-display/timeline.tsx +0 -671
- package/docs/data-display/touch-actions.tsx +0 -36
- package/docs/data-display/tree.tsx +0 -724
- package/docs/data-display/welcome.tsx +0 -115
- package/docs/data-entry/attachments.tsx +0 -160
- package/docs/data-entry/block-editor.tsx +0 -105
- package/docs/data-entry/branch-scope-picker.tsx +0 -128
- package/docs/data-entry/calendar.tsx +0 -226
- package/docs/data-entry/cascader.tsx +0 -380
- package/docs/data-entry/chat-composer.tsx +0 -619
- package/docs/data-entry/chat-suggestion.tsx +0 -301
- package/docs/data-entry/checkbox.tsx +0 -256
- package/docs/data-entry/color-picker.tsx +0 -189
- package/docs/data-entry/command-palette.tsx +0 -179
- package/docs/data-entry/command.tsx +0 -341
- package/docs/data-entry/country-picker-recipe.tsx +0 -175
- package/docs/data-entry/date-picker.tsx +0 -452
- package/docs/data-entry/emoji-picker.tsx +0 -35
- package/docs/data-entry/form/examples/employee-settings.tsx +0 -267
- package/docs/data-entry/form/examples/invoice-form.tsx +0 -387
- package/docs/data-entry/form-dynamic-fields.tsx +0 -199
- package/docs/data-entry/form-field/examples/a11y-contract.tsx +0 -242
- package/docs/data-entry/form-field/examples/create-form.tsx +0 -107
- package/docs/data-entry/form-field/index.md +0 -8
- package/docs/data-entry/form-field/index.tsx +0 -337
- package/docs/data-entry/form-inertia.tsx +0 -80
- package/docs/data-entry/form-root.tsx +0 -112
- package/docs/data-entry/form.tsx +0 -1498
- package/docs/data-entry/input-otp.tsx +0 -258
- package/docs/data-entry/input.tsx +0 -796
- package/docs/data-entry/label.tsx +0 -102
- package/docs/data-entry/markdown-editor.tsx +0 -69
- package/docs/data-entry/number-input.tsx +0 -279
- package/docs/data-entry/password-input.tsx +0 -102
- package/docs/data-entry/password-strength.tsx +0 -99
- package/docs/data-entry/radio-group.tsx +0 -316
- package/docs/data-entry/rating.tsx +0 -91
- package/docs/data-entry/record-picker.tsx +0 -209
- package/docs/data-entry/search-input.tsx +0 -121
- package/docs/data-entry/segmented-in-filter-row.tsx +0 -60
- package/docs/data-entry/segmented.tsx +0 -300
- package/docs/data-entry/select-async-contracts.tsx +0 -108
- package/docs/data-entry/select-matrix.tsx +0 -209
- package/docs/data-entry/select.tsx +0 -547
- package/docs/data-entry/slider.tsx +0 -212
- package/docs/data-entry/sortable-list.tsx +0 -76
- package/docs/data-entry/switch.tsx +0 -314
- package/docs/data-entry/tag-input.tsx +0 -145
- package/docs/data-entry/textarea.tsx +0 -249
- package/docs/data-entry/time-picker.tsx +0 -187
- package/docs/data-entry/time-range-picker.tsx +0 -55
- package/docs/data-entry/toggle-count.tsx +0 -348
- package/docs/data-entry/toggle-group.tsx +0 -438
- package/docs/data-entry/toggle.tsx +0 -217
- package/docs/data-entry/transfer.tsx +0 -115
- package/docs/data-entry/tree-select.tsx +0 -204
- package/docs/data-entry/upload-crop-dialog.tsx +0 -109
- package/docs/data-entry/upload.tsx +0 -310
- package/docs/feedback/alert-dialog.tsx +0 -270
- package/docs/feedback/alert.tsx +0 -248
- package/docs/feedback/auth-expiry.tsx +0 -104
- package/docs/feedback/banner.tsx +0 -183
- package/docs/feedback/callout.tsx +0 -220
- package/docs/feedback/danger-confirm.tsx +0 -91
- package/docs/feedback/dialog-touch.tsx +0 -24
- package/docs/feedback/dialog.tsx +0 -373
- package/docs/feedback/sheet.tsx +0 -510
- package/docs/feedback/skeleton.tsx +0 -168
- package/docs/feedback/toast.tsx +0 -135
- package/docs/feedback/tooltip.tsx +0 -171
- package/docs/feedback/two-factor-setup.tsx +0 -68
- package/docs/foundation/_email-specimen.ts +0 -274
- package/docs/foundation/_theme-editor-scope.ts +0 -222
- package/docs/foundation/colors.tsx +0 -207
- package/docs/foundation/density.tsx +0 -242
- package/docs/foundation/email-tokens.tsx +0 -323
- package/docs/foundation/radius-shadow.tsx +0 -154
- package/docs/foundation/spacing.tsx +0 -216
- package/docs/foundation/theme-editor.tsx +0 -654
- package/docs/foundation/typography.tsx +0 -147
- package/docs/general/actions.tsx +0 -175
- package/docs/general/activity.tsx +0 -289
- package/docs/general/button/examples/destructive-confirm.tsx +0 -90
- package/docs/general/button/examples/form-actions.tsx +0 -87
- package/docs/general/button/examples/toolbar.tsx +0 -160
- package/docs/general/button/index.md +0 -16
- package/docs/general/button/index.tsx +0 -236
- package/docs/general/float-button.tsx +0 -133
- package/docs/general/icon.tsx +0 -217
- package/docs/general/logo.tsx +0 -194
- package/docs/general/reveal.tsx +0 -309
- package/docs/general/typography.tsx +0 -542
- package/docs/i18n/messages/en.json +0 -1715
- package/docs/i18n/messages/ja.json +0 -1708
- package/docs/i18n/messages/vi.json +0 -1708
- package/docs/layout/account-chip.tsx +0 -72
- package/docs/layout/admin-collection.tsx +0 -122
- package/docs/layout/affix.tsx +0 -209
- package/docs/layout/app-launcher.tsx +0 -211
- package/docs/layout/app-shell-arrangements.tsx +0 -225
- package/docs/layout/app-shell-narrow-bar.tsx +0 -205
- package/docs/layout/app-shell-states.tsx +0 -171
- package/docs/layout/app-shell.tsx +0 -395
- package/docs/layout/aspect-ratio.tsx +0 -135
- package/docs/layout/auth-account-summary.tsx +0 -103
- package/docs/layout/auth-divider.tsx +0 -28
- package/docs/layout/auth-footer.tsx +0 -37
- package/docs/layout/auth-identity.tsx +0 -70
- package/docs/layout/auth-recovery/examples/mfa-challenge.md +0 -41
- package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +0 -254
- package/docs/layout/auth-recovery/examples/mobile-390.md +0 -25
- package/docs/layout/auth-recovery/examples/mobile-390.tsx +0 -82
- package/docs/layout/auth-recovery/examples/password-recovery.md +0 -24
- package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -197
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +0 -27
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +0 -156
- package/docs/layout/auth-recovery/index.md +0 -140
- package/docs/layout/auth-recovery/index.tsx +0 -96
- package/docs/layout/auth-shell-context.tsx +0 -103
- package/docs/layout/auth-shell-device.tsx +0 -112
- package/docs/layout/auth-shell-registration.tsx +0 -338
- package/docs/layout/auth-shell-variants.tsx +0 -143
- package/docs/layout/auth-shell.tsx +0 -59
- package/docs/layout/auth-stack.tsx +0 -40
- package/docs/layout/centered-shell.tsx +0 -102
- package/docs/layout/draggable-panel.tsx +0 -127
- package/docs/layout/error-surface/examples/application-403.tsx +0 -84
- package/docs/layout/error-surface/examples/application-404.tsx +0 -77
- package/docs/layout/error-surface/examples/system-500.tsx +0 -47
- package/docs/layout/error-surface/examples/system-503.tsx +0 -48
- package/docs/layout/error-surface/index.md +0 -153
- package/docs/layout/error-surface/index.tsx +0 -239
- package/docs/layout/flex.tsx +0 -444
- package/docs/layout/legal-document-shell/_data.ts +0 -110
- package/docs/layout/legal-document-shell/examples/desktop-1440.md +0 -12
- package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +0 -83
- package/docs/layout/legal-document-shell/examples/mobile-390.md +0 -22
- package/docs/layout/legal-document-shell/examples/mobile-390.tsx +0 -70
- package/docs/layout/legal-document-shell/examples/tablet-1024.md +0 -3
- package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +0 -84
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +0 -18
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +0 -61
- package/docs/layout/legal-document-shell/index.md +0 -51
- package/docs/layout/legal-document-shell/index.tsx +0 -101
- package/docs/layout/masonry.tsx +0 -291
- package/docs/layout/master-detail.tsx +0 -390
- package/docs/layout/mobile-shell.tsx +0 -106
- package/docs/layout/nav-list.tsx +0 -584
- package/docs/layout/org-switcher.tsx +0 -131
- package/docs/layout/page-container.tsx +0 -1020
- package/docs/layout/page-cover.tsx +0 -56
- package/docs/layout/resizable-panel.tsx +0 -419
- package/docs/layout/responsive-grid.tsx +0 -403
- package/docs/layout/separator.tsx +0 -327
- package/docs/layout/service-role-panel.tsx +0 -144
- package/docs/layout/sidebar.tsx +0 -689
- package/docs/layout/space-compact.tsx +0 -202
- package/docs/layout/split-pane.tsx +0 -532
- package/docs/layout/topbar-item.tsx +0 -233
- package/docs/layout/topbar.tsx +0 -360
- package/docs/navigation/anchor.tsx +0 -295
- package/docs/navigation/app-setting-picker.tsx +0 -178
- package/docs/navigation/app-setting-toggle.tsx +0 -111
- package/docs/navigation/breadcrumb.tsx +0 -207
- package/docs/navigation/card-tabs.tsx +0 -344
- package/docs/navigation/conversations.tsx +0 -176
- package/docs/navigation/dropdown-menu.tsx +0 -345
- package/docs/navigation/filter-bar.tsx +0 -247
- package/docs/navigation/mega-menu-panel.tsx +0 -86
- package/docs/navigation/mega-menu.tsx +0 -254
- package/docs/navigation/pagination.tsx +0 -293
- package/docs/navigation/steps.tsx +0 -315
- package/docs/navigation/tabs-rtl.tsx +0 -28
- package/docs/navigation/tabs.tsx +0 -755
- package/docs/navigation/toolbar.tsx +0 -347
- package/docs/providers/app-provider.tsx +0 -191
- package/docs/providers/format-date.tsx +0 -230
- package/docs/providers/theme-scope.tsx +0 -186
- package/docs/query/button-refetch.tsx +0 -161
- package/docs/query/data-state.tsx +0 -262
- package/docs/query/infinite-query-state.tsx +0 -97
- package/docs/query/mutation-feedback.tsx +0 -128
- package/docs/query/touch-actions.tsx +0 -68
- package/docs/react-router/prefetch-link.tsx +0 -262
- package/docs/roadmap/ai-chat-components.md +0 -206
- package/docs/roadmap/antd-parity.md +0 -155
- package/docs/roadmap/badge-tag-chip-count.md +0 -172
- package/docs/roadmap/list-masonry.md +0 -159
- package/docs/roadmap/parity-audit-data-display-feedback.md +0 -567
- package/docs/roadmap/parity-audit-data-entry.md +0 -368
- package/docs/roadmap/parity-audit-layout-navigation-general.md +0 -459
- package/docs/roadmap/parity-backlog.md +0 -77
- package/docs/roadmap/tree-components.md +0 -151
- package/docs/roadmap/website-components.md +0 -813
- package/docs/showcase/acme-portal.tsx +0 -461
- package/docs/showcase/acme-website.tsx +0 -499
- package/docs/showcase/caimono-price-comparison.tsx +0 -919
- package/docs/showcase/case1-warehouse-dashboard.tsx +0 -358
- package/docs/showcase/case2-employee-me.tsx +0 -438
- package/docs/showcase/case3-approval-workflow.tsx +0 -531
- package/docs/showcase/case4-login.tsx +0 -312
- package/docs/showcase/case5-shift-calendar.tsx +0 -702
- package/docs/showcase/case6-agency-handy.tsx +0 -1120
- package/docs/showcase/futurelastic-web.tsx +0 -441
- package/docs/showcase/marketing-page.tsx +0 -895
- package/docs/showcase/org-switcher.tsx +0 -320
- package/docs/showcase/permission-matrix.tsx +0 -354
- package/docs/showcase/public-landing.tsx +0 -210
- package/docs/showcase/settings-account-sections.tsx +0 -559
- package/docs/showcase/settings-security-mfa.tsx +0 -145
- package/docs/showcase/table-approval-queue.tsx +0 -199
- package/docs/showcase/table-bulk-actions.tsx +0 -468
- package/docs/showcase/table-compact-kintone.tsx +0 -438
- package/docs/showcase/table-conditional-format.tsx +0 -367
- package/docs/showcase/table-crud-list.tsx +0 -544
- package/docs/showcase/table-density.tsx +0 -349
- package/docs/showcase/table-expandable-rows.tsx +0 -496
- package/docs/showcase/table-filter-chips.tsx +0 -468
- package/docs/showcase/table-footer-totals.tsx +0 -328
- package/docs/showcase/table-grouped-subtotals.tsx +0 -398
- package/docs/showcase/table-master-detail.tsx +0 -482
- package/docs/showcase/table-pagination.tsx +0 -409
- package/docs/showcase/table-states.tsx +0 -371
- package/docs/showcase/table-sticky-columns.tsx +0 -377
- package/docs/showcase/table-tree-rows.tsx +0 -451
- package/docs/showcase/table-view-tabs.tsx +0 -488
- package/docs/showcase/tcgm-website.tsx +0 -1047
- package/docs/showcase/tenant-brand-color.tsx +0 -338
- package/docs/showcase/theme-customization.tsx +0 -1292
- package/docs/showcase/theme-lab.tsx +0 -2125
- package/docs/themes/flat.css +0 -466
- package/docs/themes/glassmorphism.css +0 -960
- package/docs/themes/index.ts +0 -219
- package/docs/themes/neubrutalism.css +0 -481
- /package/dist/components/navigation/{filter-bar.d.ts → toolbar.d.ts} +0 -0
- /package/dist/components/navigation/{filter-bar.js → toolbar.js} +0 -0
- /package/dist/{components/data-display → lab}/carousel.d.ts +0 -0
- /package/dist/{components/data-entry → lab}/emoji-data.d.ts +0 -0
- /package/dist/{components/data-entry → lab}/emoji-data.js +0 -0
- /package/dist/{components/data-display → lab}/marquee-reveal.d.ts +0 -0
- /package/dist/{components/data-display → lab}/marquee-reveal.js +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
@import "../styles/fonts.css";
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
|
|
6
|
+
--primary: 268.7 100% 50%;
|
|
7
|
+
--primary-foreground: 60 33% 99%;
|
|
8
|
+
|
|
9
|
+
--brand: 268.7 100% 50%;
|
|
10
|
+
--brand-foreground: 60 33% 99%;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.dark,
|
|
14
|
+
:root[data-theme="dark"] {
|
|
15
|
+
|
|
16
|
+
--primary: 268.7 100% 86.9%;
|
|
17
|
+
--primary-foreground: 48 9% 9%;
|
|
18
|
+
--brand: 268.7 100% 86.9%;
|
|
19
|
+
--brand-foreground: 48 9% 9%;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@supports not (color: hsl(from red h s l)) {
|
|
23
|
+
:root {
|
|
24
|
+
--primary-hover: 268.7 100% 41.6%;
|
|
25
|
+
--primary-active: 268.7 100% 34.5%;
|
|
26
|
+
--primary-border: 268.7 68% 66%;
|
|
27
|
+
--control-outline: 268.7 100% 44.7%;
|
|
28
|
+
--text-link: 268.7 100% 41.6%;
|
|
29
|
+
--text-brand: 268.7 100% 41.6%;
|
|
30
|
+
--text-primary: 268.7 100% 34.5%;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.dark,
|
|
34
|
+
:root[data-theme="dark"] {
|
|
35
|
+
--primary-hover: 268.7 100% 92.7%;
|
|
36
|
+
--primary-active: 268.7 100% 81.1%;
|
|
37
|
+
--primary-border: 268.7 46.7% 23.5%;
|
|
38
|
+
--control-outline: 268.7 99% 61.8%;
|
|
39
|
+
--text-link: 268.7 100% 86.9%;
|
|
40
|
+
--text-brand: 268.7 100% 86.9%;
|
|
41
|
+
--text-primary: 268.7 100% 92.7%;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AppPreset } from "../app/preset.js";
|
|
2
|
+
/**
|
|
3
|
+
* The GoDX PRESET (v32, gh#1220): the product defaults GoDX surfaces shipped with in 31.x, now
|
|
4
|
+
* opt-in so the package's own defaults stay neutral. Pair it with the stylesheet that restores the
|
|
5
|
+
* violet identity:
|
|
6
|
+
*
|
|
7
|
+
* import "@godxjp/ui/themes/godx.css";
|
|
8
|
+
* import { godxPreset } from "@godxjp/ui/themes/godx";
|
|
9
|
+
* <AppProvider preset={godxPreset}>…</AppProvider>
|
|
10
|
+
*
|
|
11
|
+
* Core never imports this module, which is what keeps the GoDX artwork out of a neutral bundle.
|
|
12
|
+
*/
|
|
13
|
+
export declare const godxPreset: AppPreset;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
import { Logo } from "../components/general/logo.js";
|
|
3
|
+
const godxPreset = Object.freeze({
|
|
4
|
+
name: "godx",
|
|
5
|
+
defaultLocale: "vi",
|
|
6
|
+
timeZone: "Asia/Ho_Chi_Minh",
|
|
7
|
+
brandMark: createElement(Logo, { mark: "godx", tone: "success" }),
|
|
8
|
+
emailBrandLabel: "GoDX"
|
|
9
|
+
});
|
|
10
|
+
export {
|
|
11
|
+
godxPreset
|
|
12
|
+
};
|
|
@@ -119,14 +119,8 @@
|
|
|
119
119
|
--skeleton-stat-caption-width: 5rem;
|
|
120
120
|
|
|
121
121
|
--skeleton-element-radius: initial;
|
|
122
|
-
--skeleton-button-width-ratio: 2;
|
|
123
122
|
--skeleton-input-width-ratio: 5;
|
|
124
123
|
|
|
125
|
-
--skeleton-node-size: calc(var(--control-height) * 3);
|
|
126
|
-
--skeleton-image-glyph-size: var(--icon-size-4xl);
|
|
127
|
-
|
|
128
|
-
--skeleton-image-glyph-color: initial;
|
|
129
|
-
|
|
130
124
|
--skeleton-article-avatar-gap: var(--space-inline-lg);
|
|
131
125
|
--skeleton-article-avatar-title-offset: var(--space-3);
|
|
132
126
|
--skeleton-article-title-gap: var(--space-stack-lg);
|
package/dist/tokens/derived.css
CHANGED
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
--primary-border: initial;
|
|
8
8
|
--control-outline: initial;
|
|
9
9
|
|
|
10
|
-
--primary-hover-darken-channels: h s calc(l - 8.4);
|
|
11
|
-
--primary-active-darken-channels: h s calc(l - 15.5);
|
|
12
|
-
--primary-hover-lighten-channels: h s calc(l + 5.8);
|
|
13
|
-
--primary-active-lighten-channels: h s
|
|
10
|
+
--primary-hover-darken-channels: h s calc(l - 8.4 + 18 * clamp(0, (12 - l) * 1000, 1));
|
|
11
|
+
--primary-active-darken-channels: h s calc(l - 15.5 + 20.3 * clamp(0, (12 - l) * 1000, 1));
|
|
12
|
+
--primary-hover-lighten-channels: h s calc(l + 5.8 - 11.6 * clamp(0, (l - 94) * 1000, 1));
|
|
13
|
+
--primary-active-lighten-channels: h s
|
|
14
|
+
calc(l + 11.6 - 17.4 * clamp(0, (l - 83.4) * 1000, 1) - 5.8 * clamp(0, (l - 94) * 1000, 1));
|
|
14
15
|
|
|
15
16
|
--primary-hover-channels: var(--primary-hover-darken-channels);
|
|
16
17
|
--primary-active-channels: var(--primary-active-darken-channels);
|
|
@@ -24,10 +25,10 @@
|
|
|
24
25
|
--text-brand: initial;
|
|
25
26
|
--text-primary: initial;
|
|
26
27
|
|
|
27
|
-
--text-link-channels:
|
|
28
|
-
--text-brand-channels:
|
|
28
|
+
--text-link-channels: h s calc(l - 8.4);
|
|
29
|
+
--text-brand-channels: h s calc(l - 8.4);
|
|
29
30
|
|
|
30
|
-
--text-primary-channels:
|
|
31
|
+
--text-primary-channels: h s calc(l - 15.5);
|
|
31
32
|
|
|
32
33
|
--destructive-hover: 359 50.6% 53.1%;
|
|
33
34
|
--destructive-active: 355 70.6% 33.3%;
|
|
@@ -51,7 +52,7 @@
|
|
|
51
52
|
--text-link-channels: h s l;
|
|
52
53
|
--text-brand-channels: h s l;
|
|
53
54
|
|
|
54
|
-
--text-primary-channels:
|
|
55
|
+
--text-primary-channels: h s calc(l + 5.8);
|
|
55
56
|
|
|
56
57
|
--destructive-hover: 358.8 42.3% 53.1%;
|
|
57
58
|
--destructive-active: 357.3 50.6% 34.1%;
|
|
@@ -64,23 +65,23 @@
|
|
|
64
65
|
|
|
65
66
|
@supports not (color: hsl(from red h s l)) {
|
|
66
67
|
:root {
|
|
67
|
-
--primary-hover:
|
|
68
|
-
--primary-active:
|
|
69
|
-
--primary-border:
|
|
70
|
-
--control-outline:
|
|
71
|
-
--text-link:
|
|
72
|
-
--text-brand:
|
|
73
|
-
--text-primary:
|
|
68
|
+
--primary-hover: 240 6% 19.6%;
|
|
69
|
+
--primary-active: 240 6% 14.8%;
|
|
70
|
+
--primary-border: 240 4.08% 26%;
|
|
71
|
+
--control-outline: 240 6% 4.7%;
|
|
72
|
+
--text-link: 240 6% 1.6%;
|
|
73
|
+
--text-brand: 240 6% 1.6%;
|
|
74
|
+
--text-primary: 240 6% 0%;
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
.dark,
|
|
77
78
|
:root[data-theme="dark"] {
|
|
78
|
-
--primary-hover:
|
|
79
|
-
--primary-active:
|
|
80
|
-
--primary-border:
|
|
81
|
-
--control-outline:
|
|
82
|
-
--text-link:
|
|
83
|
-
--text-brand:
|
|
84
|
-
--text-primary:
|
|
79
|
+
--primary-hover: 0 0% 92.2%;
|
|
80
|
+
--primary-active: 0 0% 86.4%;
|
|
81
|
+
--primary-border: 0 0% 26.5%;
|
|
82
|
+
--control-outline: 0 0% 72.9%;
|
|
83
|
+
--text-link: 0 0% 98%;
|
|
84
|
+
--text-brand: 0 0% 98%;
|
|
85
|
+
--text-primary: 0 0% 100%;
|
|
85
86
|
}
|
|
86
87
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
--popover: 60 33% 99%;
|
|
17
17
|
--popover-foreground: 48 8% 13%;
|
|
18
18
|
|
|
19
|
-
--primary:
|
|
19
|
+
--primary: 240 6% 10%;
|
|
20
20
|
--primary-foreground: 60 33% 99%;
|
|
21
21
|
--secondary: 45 15% 95%;
|
|
22
22
|
--secondary-foreground: 48 8% 13%;
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
--attention: 25 99% 46%;
|
|
42
42
|
--attention-foreground: 48 8% 13%;
|
|
43
43
|
|
|
44
|
-
--brand:
|
|
44
|
+
--brand: 240 6% 10%;
|
|
45
45
|
--brand-foreground: 60 33% 99%;
|
|
46
46
|
|
|
47
47
|
--text-tertiary: 44 5% 55%;
|
|
@@ -188,8 +188,6 @@
|
|
|
188
188
|
--heading-h3: initial;
|
|
189
189
|
--heading-h4: initial;
|
|
190
190
|
|
|
191
|
-
--heading-h5: initial;
|
|
192
|
-
|
|
193
191
|
--font-weight-normal: 400;
|
|
194
192
|
--font-weight-medium: 500;
|
|
195
193
|
|
|
@@ -344,7 +342,7 @@
|
|
|
344
342
|
--card-foreground: 60 20% 96%;
|
|
345
343
|
--popover: 48 8% 12%;
|
|
346
344
|
--popover-foreground: 60 20% 96%;
|
|
347
|
-
--primary:
|
|
345
|
+
--primary: 0 0% 98%;
|
|
348
346
|
--primary-foreground: 48 9% 9%;
|
|
349
347
|
--secondary: 45 6% 18%;
|
|
350
348
|
--secondary-foreground: 60 20% 96%;
|
|
@@ -369,7 +367,7 @@
|
|
|
369
367
|
--attention: 25 95% 56%;
|
|
370
368
|
--attention-foreground: 48 9% 9%;
|
|
371
369
|
|
|
372
|
-
--brand:
|
|
370
|
+
--brand: 0 0% 98%;
|
|
373
371
|
--brand-foreground: 48 9% 9%;
|
|
374
372
|
|
|
375
373
|
--text-tertiary: 44 6% 56%;
|
|
@@ -31,15 +31,15 @@ A **specific arrangement of existing primitives** for a specific screen, domain
|
|
|
31
31
|
|
|
32
32
|
Before creating OR proposing a framework component, evaluate **every** criterion and record the verdict. **Allowed only if ALL are `PASS`.** Any `FAIL` ⇒ it is a composition pattern; use existing components instead.
|
|
33
33
|
|
|
34
|
-
| # | Criterion
|
|
35
|
-
| ----------------------------------------------------------------- |
|
|
36
|
-
| **C1. Universal, not design-specific** | Needed by many apps across domains; not a recreation of one design's block.
|
|
37
|
-
| **C2. Encapsulates reusable BEHAVIOR** | Owns non-trivial state / keyboard / focus / ARIA that must not be re-implemented per app.
|
|
38
|
-
| **C3. Not expressible by composing existing primitives + tokens** | You genuinely cannot build it from `Card`/`Button`/`Text`/`Grid`/`Flex`/… + token overrides.
|
|
39
|
-
| **C4. Single responsibility + controlled-vocabulary API** | One job; maps to `value`/`defaultValue`/`onValueChange`, `size ∈ xs\|sm\|md\|lg`, `tone`, etc.; generalizes beyond one screen.
|
|
40
|
-
| **C5. Fully token-themeable, zero baked brand** | Appearance is 100% token-driven; works for every brand with no code change.
|
|
41
|
-
| **C6. Earns the international contract** | Broad reuse justifies the full i18n (`t()`/`Intl`) + WAI-ARIA APG + WCAG 2.2 AA + RTL + a11y-test + MCP-catalog cost.
|
|
42
|
-
| **C7.
|
|
34
|
+
| # | Criterion | PASS means | FAIL means (→ compose) |
|
|
35
|
+
| ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
36
|
+
| **C1. Universal, not design-specific** | Needed by many apps across domains; not a recreation of one design's block. | A generic capability (a select, a table, a date picker). | "ACME Hero", "AcmePricingTable", "this dashboard's header". |
|
|
37
|
+
| **C2. Encapsulates reusable BEHAVIOR** | Owns non-trivial state / keyboard / focus / ARIA that must not be re-implemented per app. | Listbox navigation, dialog focus-trap, table sort/select, async load. | Pure static layout/visual arrangement (a hero, a footer, a banner). |
|
|
38
|
+
| **C3. Not expressible by composing existing primitives + tokens** | You genuinely cannot build it from `Card`/`Button`/`Text`/`Grid`/`Flex`/… + token overrides. | A new interaction primitive with no existing equivalent. | You _can_ build it today from primitives + tokens (then you must). |
|
|
39
|
+
| **C4. Single responsibility + controlled-vocabulary API** | One job; maps to `value`/`defaultValue`/`onValueChange`, `size ∈ xs\|sm\|md\|lg`, `tone`, etc.; generalizes beyond one screen. | `Select`, `Switch`, `Pagination`. | A grab-bag "Section"/"Block"/"Layout" with a bespoke, screen-shaped API. |
|
|
40
|
+
| **C5. Fully token-themeable, zero baked brand** | Appearance is 100% token-driven; works for every brand with no code change. | Reads `hsl(var(--…))` / semantic tokens only. | Needs baked colors / raw hex / per-brand styling to look right. |
|
|
41
|
+
| **C6. Earns the international contract** | Broad reuse justifies the full i18n (`t()`/`Intl`) + WAI-ARIA APG + WCAG 2.2 AA + RTL + a11y-test + MCP-catalog cost. | A control everyone uses and that needs correct ARIA. | A one-off where that cost is pure overhead. |
|
|
42
|
+
| **C7. Named pattern + neutral defaults** | A pattern named in at least TWO of WAI-ARIA APG, antd, MUI, shadcn (or an ISO/CLDR need), whose defaults encode no one product's policy. | `Select` (APG combobox · antd · MUI · shadcn), `Calendar` (CLDR). | A screen-shaped invention no reference names ⇒ compose; one product's policy baked in ⇒ that product's preset. |
|
|
43
43
|
|
|
44
44
|
> **Heuristic shortcuts** (a single one is usually enough to send it to composition):
|
|
45
45
|
>
|
|
@@ -48,6 +48,33 @@ Before creating OR proposing a framework component, evaluate **every** criterion
|
|
|
48
48
|
> DashboardHeader)?" → **yes ⇒ compose** (C1).
|
|
49
49
|
> - "Does it own **any real behavior**, or is it just **layout + content + color**?" → layout only ⇒ **compose** (C2).
|
|
50
50
|
|
|
51
|
+
### 2.1 The admission rule — usage decides the TIER, never the verdict (v32, #1205 decision B4)
|
|
52
|
+
|
|
53
|
+
C7 used to read "earns its bundle cost — used across most apps". That made usage the verdict, and
|
|
54
|
+
usage in our own repos measures **migration exposure, not worldwide need**: a date-range picker
|
|
55
|
+
nobody in GoDX happens to import yet is still a standard form primitive every adopter expects. The
|
|
56
|
+
rule that replaced it (R4, agreed by both reviewers; JEV 0.87–0.89):
|
|
57
|
+
|
|
58
|
+
A **core** component must
|
|
59
|
+
|
|
60
|
+
1. **own reusable behaviour** — keyboard, focus, ARIA, timing, measurement — **measured in the
|
|
61
|
+
source**, not claimed in the tagline (C2);
|
|
62
|
+
2. **match a pattern named in at least two of** WAI-ARIA APG, antd, MUI, shadcn, or an ISO/CLDR
|
|
63
|
+
need (C7);
|
|
64
|
+
3. **not be composable** from primitives plus tokens — if it is, it is a recipe in `docs/` (C3);
|
|
65
|
+
4. **have neutral defaults** — a component that encodes one product's policy (its roles, its
|
|
66
|
+
branches, its identity mark) belongs in that product's preset, e.g. `@godxjp/ui/themes/godx`
|
|
67
|
+
(C5 + C7).
|
|
68
|
+
|
|
69
|
+
Then **usage picks the tier**, it never removes a component on its own:
|
|
70
|
+
|
|
71
|
+
| Passes the rule, and … | Ships from | Notes |
|
|
72
|
+
| ---------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
73
|
+
| imported by consumers | `@godxjp/ui` (core) | The default agent context; the full contract. |
|
|
74
|
+
| **no consumer imports it yet** | **`@godxjp/ui/lab`** | Same gates as core (tests, a11y, i18n, tokens) and semver'd; left out of the default MCP listings. **Promoted** to core once imported by **≥ 2 repos**; **demotion is never automatic**. |
|
|
75
|
+
| a cohesive family with its own audience (chat) | its own package (`@godxjp/chat`) | Composes the kit's public API only. |
|
|
76
|
+
| fails the rule | — | A recipe in `docs/`, or the product's preset. |
|
|
77
|
+
|
|
51
78
|
### Decision flow
|
|
52
79
|
|
|
53
80
|
```
|
|
@@ -57,7 +84,7 @@ new UI need
|
|
|
57
84
|
│ (Select = searchable/async; AppShell/PageContainer = chrome; DataTable = grids)
|
|
58
85
|
│
|
|
59
86
|
├─ Run the Framework-Component Test (C1–C7).
|
|
60
|
-
│ ├─ ALL pass → it MAY be a framework component
|
|
87
|
+
│ ├─ ALL pass → it MAY be a framework component; §2.1 picks core vs `/lab` by usage
|
|
61
88
|
│ │ → follow the full `godxjp-ui-component` contract (i18n/a11y/vocab/
|
|
62
89
|
│ │ tokens/test/MCP/registry) before merging into src/components/.
|
|
63
90
|
│ └─ ANY fail → it is a COMPOSITION PATTERN
|
|
@@ -72,20 +99,20 @@ new UI need
|
|
|
72
99
|
|
|
73
100
|
## 3. Worked examples
|
|
74
101
|
|
|
75
|
-
| Thing | C1 | C2 | C3 | C4 | C5 | C6 | C7 | Verdict
|
|
76
|
-
| ------------------------------------------------------- | --- | --- | --- | --- | --- | --- | --- |
|
|
77
|
-
| `Select` (incl. search/async) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component**
|
|
78
|
-
| `DataTable`, `Dialog`, `Calendar`, `Switch`, `Combobox` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component**
|
|
79
|
-
| `StatCard` (+ `icon`) | ✅ | ➖ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** (a reusable KPI tile with a stable API + tokens)
|
|
80
|
-
| `ServiceLauncherCard` | ➖ | ❌ | ❌ | ✅ | ✅ | ➖ | ➖ | **Composition by the test — RETAINED as a recorded exception** (gh#814)
|
|
81
|
-
| `MegaMenu` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
82
|
-
| Marketing **Hero** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — section, static, composable, brand-specific
|
|
83
|
-
| **Navbar** / **Footer** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — layout of `Text`/`Button`/`Flex`
|
|
84
|
-
| **PricingTable** / feature grid | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — `ResponsiveGrid` + `Card`
|
|
85
|
-
| Dashboard **page layout** | ❌ | ❌ | ❌ | ❌ | ➖ | ❌ | ❌ | **Composition** — `AppShell` + `PageContainer` + `ResponsiveGrid`
|
|
86
|
-
| "Icon medallion" | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `Avatar` (square) + a Lucide glyph
|
|
87
|
-
| **Section** / **Band** (full-bleed + measured column) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `<section>` + `Flex measure` + `pad`; see §3.1
|
|
88
|
-
| `TenantTheme` (customer hex at runtime) | ✅ | ➖ | ❌ | ❌ | ✅ | ❌ | ➖ | **Composition + a published FUNCTION** — `tenantTheme()`; see §3.2
|
|
102
|
+
| Thing | C1 | C2 | C3 | C4 | C5 | C6 | C7 | Verdict |
|
|
103
|
+
| ------------------------------------------------------- | --- | --- | --- | --- | --- | --- | --- | ------------------------------------------------------------------------------------------------------------------ |
|
|
104
|
+
| `Select` (incl. search/async) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** |
|
|
105
|
+
| `DataTable`, `Dialog`, `Calendar`, `Switch`, `Combobox` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** |
|
|
106
|
+
| `StatCard` (+ `icon`) | ✅ | ➖ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** (a reusable KPI tile with a stable API + tokens) |
|
|
107
|
+
| `ServiceLauncherCard` | ➖ | ❌ | ❌ | ✅ | ✅ | ➖ | ➖ | **Composition by the test — RETAINED as a recorded exception** (gh#814) |
|
|
108
|
+
| `MegaMenu` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component, `@godxjp/ui/lab` tier** (no consumer yet, §2.1) — the instructive contrast with Hero, below |
|
|
109
|
+
| Marketing **Hero** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — section, static, composable, brand-specific |
|
|
110
|
+
| **Navbar** / **Footer** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — layout of `Text`/`Button`/`Flex` |
|
|
111
|
+
| **PricingTable** / feature grid | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — `ResponsiveGrid` + `Card` |
|
|
112
|
+
| Dashboard **page layout** | ❌ | ❌ | ❌ | ❌ | ➖ | ❌ | ❌ | **Composition** — `AppShell` + `PageContainer` + `ResponsiveGrid` |
|
|
113
|
+
| "Icon medallion" | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `Avatar` (square) + a Lucide glyph |
|
|
114
|
+
| **Section** / **Band** (full-bleed + measured column) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `<section>` + `Flex measure` + `pad`; see §3.1 |
|
|
115
|
+
| `TenantTheme` (customer hex at runtime) | ✅ | ➖ | ❌ | ❌ | ✅ | ❌ | ➖ | **Composition + a published FUNCTION** — `tenantTheme()`; see §3.2 |
|
|
89
116
|
|
|
90
117
|
`✅ pass · ❌ fail · ➖ borderline`. **StatCard** is the instructive borderline: C2 is weak (it owns little behavior), but it is a universal KPI tile with a controlled API, fully tokenized, broadly reused — so it earns its place. A **Hero** fails six of seven; it is unambiguously a composition.
|
|
91
118
|
|
|
@@ -99,12 +126,10 @@ get wrong: `DropdownMenu` looks like the answer and is the WRONG primitive, not
|
|
|
99
126
|
is react-aria-components `Menu`, i.e. `role="menu"` / `role="menuitem"`, which announces a set of
|
|
100
127
|
site links as a desktop application menu and takes Tab out of the widget. The APG says so itself in
|
|
101
128
|
its Disclosure Navigation example. A recipe over `DropdownMenu` would therefore ship the classic
|
|
102
|
-
megamenu accessibility defect, which is exactly the case C3 is asking about. **C7
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
`@radix-ui/react-navigation-menu`, no animation runtime). Compare `StatCard`, whose borderline is
|
|
107
|
-
C2 rather than C7.
|
|
129
|
+
megamenu accessibility defect, which is exactly the case C3 is asking about. **C7 passes** under
|
|
130
|
+
the v32 rule — APG names the Disclosure Navigation pattern and antd ships `Menu mode="horizontal"`
|
|
131
|
+
with popup panels. What the old C7 ("used across most apps") marked ➖ is now a TIER question, not a
|
|
132
|
+
verdict: no GoDX repo imports it yet, so it ships from `@godxjp/ui/lab` (§2.1) until two do.
|
|
108
133
|
|
|
109
134
|
**ServiceLauncherCard is the ONE recorded exception, and it is recorded so that it stays one.** It shipped before the test was run against it, and when the test was run it came back with two hard FAILs: **C2** — no state, no keyboard handling, no focus management, its only ARIA three static attributes — and **C3** — its own imports are `Card` + `CardContent` + `Badge` + a Lucide glyph, so "could I build this right now from primitives?" is yes. By §2 that makes it a composition pattern. It is kept anyway because `src/components/layout/app-launcher.tsx` consumes it: it is an internal building block of a component that **does** pass, so the question was never "should it exist" but "should it be PUBLIC", and removing a public export is breaking. Keeping it public was the cheaper call and the ledger lives on gh#814 and at the top of `src/components/data-display/service-launcher-card.tsx`. **Consumers should compose `Card` + `Badge` for a service tile** — reach for `ServiceLauncherCard` only to match `AppLauncher`'s own tiles — and this row is not precedent for adding another static tile to `src/components/`.
|
|
110
135
|
|
|
@@ -116,8 +141,8 @@ turned out to be neither "add a component" nor "do nothing".
|
|
|
116
141
|
**A `Section` component is refused, and it is refused for Hero's reasons.** It owns no state, no
|
|
117
142
|
keyboard, no focus and no ARIA a `<section aria-labelledby>` does not already have (**C2**); it is
|
|
118
143
|
`<section>` + `Flex` + padding + a max-width, i.e. buildable today (**C3**); its API would be the
|
|
119
|
-
grab-bag `band` / `measure` / `glow` / `surface` / `bleed` that **C4** names by name; and
|
|
120
|
-
|
|
144
|
+
grab-bag `band` / `measure` / `glow` / `surface` / `bleed` that **C4** names by name; and no
|
|
145
|
+
reference library names a "band" component — it is a page section, not a pattern (**C7**). One
|
|
121
146
|
criterion of seven passes. Nothing about that is close.
|
|
122
147
|
|
|
123
148
|
**But "do nothing" was also refused, and that is the part worth remembering.** The doctrine's own
|
|
@@ -163,7 +188,7 @@ copying it would have been the third private version of the same thing.
|
|
|
163
188
|
| **C4** single responsibility + controlled vocabulary | **FAIL** | The requested API is `primary` / `secondary` / `primaryForeground` / `tenant`. There is no `value`/`defaultValue`/`onValueChange`, no `size`, no `tone` — it is a configuration carrier with a screen-shaped API, which is the shape C4 names by name. |
|
|
164
189
|
| **C5** token-themeable, zero baked brand | **PASS** (vacuously) | It IS the theming mechanism; it bakes nothing. |
|
|
165
190
|
| **C6** earns the international contract | **FAIL** | It renders no text, has no role, no keyboard and no ARIA, so there is nothing for `t()` or the APG to say. The accessibility content of this feature is CONTRAST, and that lives in the computation and its tests — not in a component contract. |
|
|
166
|
-
| **C7**
|
|
191
|
+
| **C7** named pattern + neutral defaults | ➖ | The need is universal and the defaults are neutral, but no reference names a theming WRAPPER component — antd's ConfigProvider and MUI's ThemeProvider configure tokens, which is what the published function does. A React wrapper around a `<div>` is not the pattern. |
|
|
167
192
|
|
|
168
193
|
**Three hard FAILs. Verdict: composition pattern — plus a published function.** `tenantTheme(hex)`
|
|
169
194
|
in `@godxjp/ui/app` returns the declarations (`--primary`, `--primary-foreground`, `--ring`, and
|
package/docs/CONSUMER-RULES.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Read this once; the audit enforces it. Everything else in `docs/` is for contributors.
|
|
4
4
|
|
|
5
|
-
1. Load styles with
|
|
5
|
+
1. Load styles with `import "@godxjp/ui/styles.css"` (precompiled, no Tailwind needed) or `@import "@godxjp/ui/styles"` (Tailwind v4). Neither ships font files: fonts are opt-in since v32 (`pnpm add @fontsource/noto-sans-jp @fontsource/m-plus-2`, then `@import "@godxjp/ui/styles/fonts.css"` after the styles import; the GoDX preset does this for you). Never cherry-pick `*-layout.css`.
|
|
6
6
|
2. **Mount `<AppProvider defaultLocale="…">` once, at the root.** Without it the kit's OWN strings (dialog close/cancel/delete, counters, picker labels) fall to the resting locale `vi` and pickers to UTC — measured in a Japanese app as Vietnamese buttons, silently (gh#1005). A development build now warns once when a kit component renders outside it; `syncI18nLocale(locale, fallback)` is the escape for an app that truly cannot mount the provider. Every page is `<PageContainer title subtitle extra footer>`; its sections are spaced by the page. Group items inside a section with `<Flex direction="col" gap>` or `<ResponsiveGrid>`.
|
|
7
7
|
3. No Tailwind layout on your own elements: no `flex`, `grid`, `gap-*`, `p-*`, `m-*`, `space-*`. Rows are `<Flex>` (default row), stacks are `<Flex direction="col">`, grids are `<ResponsiveGrid>`.
|
|
8
8
|
4. No hand-rolled surfaces: no `rounded-* border bg-*` divs. A box is `Card`, a pill is `Badge`, a person is `Avatar`, a row is `ListRow`, a label/value pair is `Descriptions`, an empty area is `EmptyState`, a read-only sample of a colour the USER chose is `Swatch`. A LIST of those rows is `<Flex as="ul" marker="none" direction="col" gap="none">` with `<ListRow as="li">` children — `marker="none"` keeps the `<ul>`, the `<li>` semantics and the gap token while dropping the bullet and the indent. Never a raw `<ul>`/`<ol>` (it carries no gap token), never `<div role="list">` + `<div role="listitem">`, and never a wrapper around each row: the divider is `:not(:last-child)` among siblings, so a row alone in its own wrapper is always the last one and EVERY divider disappears silently. A bulleted prose list is the same `<Flex as="ul">` without `marker`.
|
package/docs/CUSTOMER-THEMING.md
CHANGED
|
@@ -99,79 +99,43 @@ hand in the generated file, and an explicit value always beats a derived default
|
|
|
99
99
|
## Internal apps — zero config
|
|
100
100
|
|
|
101
101
|
```ts
|
|
102
|
-
import "@godxjp/ui/styles";
|
|
102
|
+
import "@godxjp/ui/styles.css"; // precompiled, no Tailwind needed
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## CSS entries — `styles`, `styles/core`, `styles/core-with-fallbacks`, `styles/core-with-jis-level1`, nothing smaller
|
|
110
|
-
|
|
111
|
-
`@godxjp/ui/styles` bundles every component's CSS plus the fonts: **729 woff2 subsets, ~11.7 MB on disk** at the current @fontsource versions (issue #535 measured 737 files / 13 MB in a real consumer build). When you manage fonts yourself (next/font, a system stack, a browser extension that must not ship font files), load the same layers without the faces:
|
|
105
|
+
With Tailwind v4, import the source entry instead and keep your `@source` lines:
|
|
112
106
|
|
|
113
107
|
```css
|
|
114
|
-
@import "@godxjp/ui/styles
|
|
108
|
+
@import "@godxjp/ui/styles";
|
|
115
109
|
```
|
|
116
110
|
|
|
117
|
-
|
|
111
|
+
Either import ships colors, the golden-ratio type scale, spacing grid, radius scale, shadow ramp, and all component CSS. **It ships no font files** (opt-in since v32, below). Nothing else to configure. Pick density per surface with `<PageContainer density="compact | default | comfortable">`.
|
|
118
112
|
|
|
119
|
-
|
|
120
|
-
@import "@godxjp/ui/styles/core-with-fallbacks"; /* core + 6 local()-only faces */
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
It declares the faces and nothing else — name the family yourself, directly after your own face:
|
|
113
|
+
---
|
|
124
114
|
|
|
125
|
-
|
|
126
|
-
:root {
|
|
127
|
-
--font-sans-base: "Noto Sans JP", "Noto Sans JP Fallback", system-ui, sans-serif;
|
|
128
|
-
}
|
|
129
|
-
```
|
|
115
|
+
## CSS entries and fonts — `styles.css`, `styles`, `styles/fonts`, nothing smaller
|
|
130
116
|
|
|
131
|
-
|
|
117
|
+
`@godxjp/ui/styles` carries every component's CSS and **no `@font-face`**. Fonts are a separate, opt-in sheet, so an app that manages its own faces (next/font, a system stack, a browser extension that must not ship font files) pays for none of them:
|
|
132
118
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
plus kana, symbols, Cyrillic, Latin and Vietnamese, 3861 code points:
|
|
119
|
+
```bash
|
|
120
|
+
pnpm add @fontsource/noto-sans-jp @fontsource/m-plus-2
|
|
121
|
+
```
|
|
137
122
|
|
|
138
123
|
```css
|
|
139
|
-
@import "@godxjp/ui/styles
|
|
124
|
+
@import "@godxjp/ui/styles";
|
|
125
|
+
@import "@godxjp/ui/styles/fonts.css"; /* after the styles import: Noto Sans JP + M PLUS 2 */
|
|
140
126
|
```
|
|
141
127
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
| distinct Japanese characters on screen | `styles` | `core-with-jis-level1` |
|
|
145
|
-
| --------------------------------------------- | -------------------------: | -----------------------: |
|
|
146
|
-
| 448 — this package's own `ja` labels, no data | 99 requests · 1,051,268 B | 3 requests · 1,534,636 B |
|
|
147
|
-
| 694 — labels plus names, addresses, prose | 150 requests · 1,772,728 B | 3 requests · 1,534,636 B |
|
|
148
|
-
| 772 — a little more prose | 216 requests · 3,491,840 B | 3 requests · 1,534,636 B |
|
|
149
|
-
|
|
150
|
-
The left column grows with your content and is paid again on every screen that renders a character
|
|
151
|
-
no earlier screen did; the right column does not move. **Below roughly 620 distinct characters the
|
|
152
|
-
slices are fewer bytes** (in ~100 requests), so an app that renders less Japanese than this
|
|
153
|
-
package's own menu labels should stay on `styles`.
|
|
154
|
-
|
|
155
|
-
What is deliberately not in it: **JIS level 2** (rows 48–84), which would roughly double the bytes
|
|
156
|
-
to cover kanji that appear in rare surnames — those resolve from the platform Japanese face, so
|
|
157
|
-
name one after ours. **M PLUS 2**, which sits behind Noto Sans JP in every stack this package ships
|
|
158
|
-
and is therefore never downloaded today either; merging it would add 1,089,676 bytes for nothing.
|
|
159
|
-
And **no `unicode-range`** on the merged faces, because per-range discovery is the mechanism the
|
|
160
|
-
entry exists to remove — the cost of that is a Latin-only screen downloading its weight's ~500 KB
|
|
161
|
-
rather than the ~25 KB of Latin inside it.
|
|
162
|
-
|
|
163
|
-
Like `core-with-fallbacks`, it declares faces and does not set `--font-sans-base`; name a platform
|
|
164
|
-
Japanese face after ours so level 2 kanji have somewhere to land:
|
|
128
|
+
The GoDX preset adds the fonts import for you. The font sheet declares the faces and sets `--font-sans-base` to the bundled stack; if you supply the face yourself, skip it and name the family directly:
|
|
165
129
|
|
|
166
130
|
```css
|
|
167
131
|
:root {
|
|
168
|
-
--font-sans-base:
|
|
169
|
-
"Noto Sans JP", "Noto Sans JP Fallback", "Hiragino Sans", "Yu Gothic Medium", Meiryo, system-ui,
|
|
170
|
-
sans-serif;
|
|
132
|
+
--font-sans-base: "Noto Sans JP", "Noto Sans JP Fallback", system-ui, sans-serif;
|
|
171
133
|
}
|
|
172
134
|
```
|
|
173
135
|
|
|
174
|
-
|
|
136
|
+
Keep `"Noto Sans JP Fallback"` directly after your own Noto Sans JP: it is the metric-matched local face that stops the cold-visit swap from reflowing the page (issue #475).
|
|
137
|
+
|
|
138
|
+
The per-layer files (`control`, `card-layout`, `navigation-layout`, …) are the package's internal structure, **not a public menu**. Layers share rules — a Select's rows and a menu's surface, a form's rhythm, a card's header type — so a page that loads a subset renders naked menus and unsized rows with no error. The runtime `visual-audit` reports it as `css-layers-missing`. The one supported way to ship less than the full entry is `npx godxjp-ui prune-css`, which slices along the dependency graph the package ships.
|
|
175
139
|
|
|
176
140
|
---
|
|
177
141
|
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Migrating to @godxjp/ui v32
|
|
2
|
+
|
|
3
|
+
v32 turns `@godxjp/ui` from a framework tuned for GoDX products into a framework any team can adopt:
|
|
4
|
+
neutral defaults, open localization, an inert install, styles that work without Tailwind, and a
|
|
5
|
+
smaller, more honest component surface. GoDX products keep their exact look through the GoDX preset.
|
|
6
|
+
All six packages (`@godxjp/ui`, `@godxjp/ui-mcp`, `@godxjp/markdown`, `@godxjp/editor`,
|
|
7
|
+
`@godxjp/block-editor` and the new `@godxjp/chat`) move to 32.0.0 together.
|
|
8
|
+
|
|
9
|
+
Most of the upgrade is mechanical. Run the codemod first, then read the list below for what it
|
|
10
|
+
reports but cannot decide.
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
npx godxjp-ui codemod v32 src --dry-run # preview
|
|
14
|
+
npx godxjp-ui codemod v32 src --godx # a GoDX product: keep today's look
|
|
15
|
+
npx godxjp-ui codemod v32 src # any other app
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Off-cycle approved: owner, 2026-10-09 — the single v32 batch decided on godx-jp/godxjp-ui#1205
|
|
19
|
+
(recorded by Claude from the owner's instruction "do it all in one batch, one major, one CD run").
|
|
20
|
+
|
|
21
|
+
## Breaking changes
|
|
22
|
+
|
|
23
|
+
### Neutral identity; GoDX is a preset (#1220)
|
|
24
|
+
|
|
25
|
+
- The default `--primary` and `--brand` are a neutral ink (`240 6% 10%` light, `0 0% 98%` dark), not
|
|
26
|
+
the GoDX violet. Hover and pressed steps stay visible at both ends of the lightness ramp.
|
|
27
|
+
- `AuthIdentity` renders no mark when `brand` is omitted, unless a preset provides one. `null` always
|
|
28
|
+
renders none.
|
|
29
|
+
- The email brand mark has no default label.
|
|
30
|
+
- The GoDX look ships as `godxPreset` (`@godxjp/ui/themes/godx`) plus `@godxjp/ui/themes/godx.css`.
|
|
31
|
+
|
|
32
|
+
### Locale defaults and open localization (#1219)
|
|
33
|
+
|
|
34
|
+
- `AppProvider`'s `defaultLocale` now defaults to `<html lang>` when it names a registered locale, then
|
|
35
|
+
the preset's locale, then `en`. It used to be `vi`.
|
|
36
|
+
- `AppLocale` is `string` (any BCP-47 tag). The three built-in packs are `BuiltInLocale`.
|
|
37
|
+
- Register another locale with `registerLocale({ code, messages, dateFns, dayPicker })`. Date order,
|
|
38
|
+
separators and the first day of the week come from `Intl`.
|
|
39
|
+
- `registerMessages` throws for an unregistered locale.
|
|
40
|
+
- Server rendering: pass `defaultLocale` explicitly and wrap each request in
|
|
41
|
+
`runWithAppSettings(settings, render)`, so concurrent requests cannot read each other's locale,
|
|
42
|
+
timezone or formats.
|
|
43
|
+
|
|
44
|
+
### Fonts are opt-in; styles work without Tailwind (#1221)
|
|
45
|
+
|
|
46
|
+
- `@godxjp/ui/styles` no longer imports the Japanese fonts. Add
|
|
47
|
+
`@godxjp/ui/styles/fonts.css` after it (the codemod does), and install `@fontsource/noto-sans-jp`
|
|
48
|
+
and `@fontsource/m-plus-2`, which are now optional peers.
|
|
49
|
+
- New: `@godxjp/ui/styles.css`, a precompiled stylesheet for apps without Tailwind.
|
|
50
|
+
|
|
51
|
+
### Install and package (#1215, #1216, #1222)
|
|
52
|
+
|
|
53
|
+
- Installing writes nothing into your project. Run `npx godxjp-ui sync-rules` (preview with
|
|
54
|
+
`--dry-run`) after installing and after each upgrade to refresh the agent files.
|
|
55
|
+
- `sideEffects` now lists CSS, so bundlers keep `@godxjp/ui/styles`.
|
|
56
|
+
- `react-aria-components`, `react-aria` and `react-stately` are pinned in lockstep (1.22.0 / 3.53.0 /
|
|
57
|
+
3.51.0), so an install resolves one copy of each. `engines.node` is `>=22`.
|
|
58
|
+
|
|
59
|
+
### Component surface (#1223)
|
|
60
|
+
|
|
61
|
+
The catalog goes from 185 entries to 161: 134 in core, 15 in `@godxjp/ui/lab`, 12 in sibling
|
|
62
|
+
packages. The codemod rewrites every import below; the "you finish" column is printed as a `note`.
|
|
63
|
+
|
|
64
|
+
| v31 | v32 | You finish |
|
|
65
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | ---------------------------------------------------------------------- |
|
|
66
|
+
| `Banner` | `Alert` | add `variant="banner"` |
|
|
67
|
+
| `Callout` | `Alert` | add `variant="callout"`; it keeps `role="note"` |
|
|
68
|
+
| `TagInput` | `Select` | add `mode="tags" open={false}`; `Select` takes no `ref` |
|
|
69
|
+
| `Thumbnail` | `Image` | add `fit="intrinsic" preview={false}` |
|
|
70
|
+
| `HoverCard` (+ Trigger, Content) | `Popover` (+ Trigger, Content) | add `openOn="hover"`; `openDelay` / `closeDelay` keep working |
|
|
71
|
+
| `AuthShell` | `CenteredShell` | add `variant="auth"`; `variant="canonical"` becomes `"auth-canonical"` |
|
|
72
|
+
| `SpaceCompact` | `Flex` | add `attached`; `orientation`/`vertical` become `direction="col"` |
|
|
73
|
+
| `AppSettingToggle` | `AppSettingPicker` | add `menu={false}` |
|
|
74
|
+
| `Title`, `Paragraph`, `Typography` | `Heading`, `Text as="p"`, `Prose` | the antd compatibility shims are removed |
|
|
75
|
+
| `SkeletonAvatar`, `SkeletonButton`, `SkeletonImage`, `SkeletonNode` | — | removed: use `SkeletonArticle avatar` or a sized `Skeleton` |
|
|
76
|
+
| `FloatButton`, `DraggablePanel`, `PageCover`, `Masonry`, `LegalDocumentShell`, `Marquee`, `TextDiff`, `OrgChart`, `Carousel`, `TimelineGrid`, `RangeTimeline`, `EmojiPicker`, `SortableList`, `MegaMenu`, `Anchor` | same names from `@godxjp/ui/lab` | nothing: same API, opt-in subpath |
|
|
77
|
+
| `ChatBubble`, `ChatBubbleList`, `ChatComposer`, `ChatSuggestion`, `Conversations`, `ThoughtChain`, `Welcome`, `Attachments` | same names from `@godxjp/chat` | install `@godxjp/chat` |
|
|
78
|
+
|
|
79
|
+
Unchanged: `SplitPane` stays (its merge into `MasterDetail` failed the parity test), `Actions` stays
|
|
80
|
+
in `@godxjp/ui/general`, and `FilterBar` stays an alias of `Toolbar`. The `./ui/*` subpaths are
|
|
81
|
+
deprecated re-exports and will be removed in a later major.
|
|
82
|
+
|
|
83
|
+
## How to upgrade
|
|
84
|
+
|
|
85
|
+
1. Upgrade all six packages to 32.0.0 together (`@godxjp/chat` only if you use the chat components).
|
|
86
|
+
2. Run `npx godxjp-ui codemod v32 <src> --dry-run`, review, then run it without `--dry-run`. Use
|
|
87
|
+
`--godx` for GoDX products.
|
|
88
|
+
3. Finish every `note` the codemod printed (a component move that changes props, an `AppProvider`
|
|
89
|
+
that relied on the old `vi` default).
|
|
90
|
+
4. Install the font packages if you keep the Japanese fonts.
|
|
91
|
+
5. Run `npx godxjp-ui sync-rules` and restart your coding agent.
|
|
92
|
+
6. Build, then compare a few screens: with the GoDX preset they should be pixel-identical to 31.x.
|
|
93
|
+
|
|
94
|
+
## Support
|
|
95
|
+
|
|
96
|
+
v31 receives no further releases. A security fix for v31 is an owner exception, decided case by case.
|
|
97
|
+
From v32 on, a new major ships at most once per quarter, and the publish job refuses a major whose
|
|
98
|
+
migration note is missing or incomplete.
|