@godxjp/ui 28.13.0 → 29.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.
Files changed (159) hide show
  1. package/agent/START-HERE.md +29 -10
  2. package/agent/components/Anchor.json +6 -1
  3. package/agent/components/AppShell.json +1 -1
  4. package/agent/components/AreaChart.json +19 -1
  5. package/agent/components/BarChart.json +11 -1
  6. package/agent/components/Cascader.json +1 -1
  7. package/agent/components/CompactBarTrend.json +1 -1
  8. package/agent/components/DataState.json +1 -1
  9. package/agent/components/DataTable.json +4 -4
  10. package/agent/components/FormField.json +1 -1
  11. package/agent/components/InfiniteQueryState.json +1 -1
  12. package/agent/components/Input.json +1 -1
  13. package/agent/components/LineChart.json +20 -2
  14. package/agent/components/ListRow.json +1 -1
  15. package/agent/components/Masonry.json +1 -1
  16. package/agent/components/MasterDetail.json +1 -1
  17. package/agent/components/PasswordStrength.json +1 -1
  18. package/agent/components/PermissionMatrix.json +1 -1
  19. package/agent/components/Select.json +1 -0
  20. package/agent/components/Sidebar.json +1 -1
  21. package/agent/components/Table.json +8 -3
  22. package/agent/components/ThemeScope.json +49 -0
  23. package/agent/components/Topbar.json +1 -0
  24. package/agent/components/TopbarItem.json +2 -1
  25. package/agent/components/Transfer.json +1 -1
  26. package/agent/components/TreeSelect.json +1 -1
  27. package/agent/components/UploadCropDialog.json +1 -1
  28. package/agent/components/formatDate.json +1 -1
  29. package/agent/components-index.json +5 -0
  30. package/agent/components.json +138 -30
  31. package/agent/index.json +19 -9
  32. package/agent/llms.txt +10 -10
  33. package/agent/patterns/tenant-brand-color.json +28 -0
  34. package/agent/patterns-index.json +27 -0
  35. package/agent/patterns.json +28 -0
  36. package/agent/rules.json +15 -0
  37. package/agent/tokens.json +4965 -970
  38. package/dist/app/index.d.ts +3 -0
  39. package/dist/app/index.js +3 -0
  40. package/dist/app/tenant-theme.d.ts +80 -0
  41. package/dist/app/tenant-theme.js +154 -0
  42. package/dist/app/theme-axes.d.ts +14 -1
  43. package/dist/app/theme-axes.js +24 -31
  44. package/dist/components/charts/chart-cartesian.d.ts +5 -1
  45. package/dist/components/charts/chart-cartesian.js +15 -8
  46. package/dist/components/data-display/badge.d.ts +1 -1
  47. package/dist/components/data-display/badge.js +20 -2
  48. package/dist/components/data-display/carousel.js +4 -4
  49. package/dist/components/data-display/data-table.js +13 -2
  50. package/dist/components/data-display/permission-matrix.js +1 -1
  51. package/dist/components/data-display/table.d.ts +11 -2
  52. package/dist/components/data-display/table.js +18 -2
  53. package/dist/components/data-entry/control-appearance.d.ts +12 -6
  54. package/dist/components/data-entry/control-appearance.js +1 -1
  55. package/dist/components/data-entry/select.js +4 -3
  56. package/dist/components/feedback/dialog.js +6 -3
  57. package/dist/components/feedback/overlay-header-tone.d.ts +7 -0
  58. package/dist/components/feedback/overlay-header-tone.js +4 -4
  59. package/dist/components/feedback/sheet.d.ts +1 -1
  60. package/dist/components/feedback/sheet.js +6 -9
  61. package/dist/components/feedback/sonner.js +16 -3
  62. package/dist/components/general/button.js +22 -5
  63. package/dist/components/layout/affix.js +15 -1
  64. package/dist/components/layout/sidebar.js +7 -1
  65. package/dist/components/navigation/anchor.d.ts +1 -1
  66. package/dist/components/navigation/anchor.js +5 -4
  67. package/dist/components/navigation/app-setting-picker.js +1 -1
  68. package/dist/components/navigation/pagination.js +1 -1
  69. package/dist/components/navigation/tabs.js +15 -2
  70. package/dist/components/query/infinite-query-state.d.ts +22 -6
  71. package/dist/lib/control-styles.d.ts +31 -11
  72. package/dist/lib/control-styles.js +6 -6
  73. package/dist/lib/overlay-portal.d.ts +20 -0
  74. package/dist/lib/overlay-portal.js +93 -0
  75. package/dist/props/components/app.prop.d.ts +12 -0
  76. package/dist/props/components/charts.prop.d.ts +30 -0
  77. package/dist/props/components/index.d.ts +1 -1
  78. package/dist/props/components/navigation.prop.d.ts +21 -2
  79. package/dist/props/components/query.prop.d.ts +36 -2
  80. package/dist/props/registry.d.ts +46 -1
  81. package/dist/props/registry.js +38 -3
  82. package/dist/styles/alert-layout.css +34 -14
  83. package/dist/styles/badge-layout.css +10 -6
  84. package/dist/styles/base.css +14 -5
  85. package/dist/styles/card-layout.css +19 -8
  86. package/dist/styles/chart-layout.css +22 -3
  87. package/dist/styles/control.css +165 -59
  88. package/dist/styles/data-display-layout.css +129 -36
  89. package/dist/styles/data-entry-layout.css +23 -87
  90. package/dist/styles/dialog-layout.css +49 -19
  91. package/dist/styles/float-button-layout.css +5 -5
  92. package/dist/styles/focus-ring.css +9 -5
  93. package/dist/styles/layout.css +42 -15
  94. package/dist/styles/logo-layout.css +1 -1
  95. package/dist/styles/motion.css +1 -1
  96. package/dist/styles/navigation-layout.css +90 -29
  97. package/dist/styles/shell-layout.css +63 -40
  98. package/dist/styles/table-layout.css +56 -17
  99. package/dist/styles/text-layout.css +13 -4
  100. package/dist/styles/toggle.css +8 -2
  101. package/dist/tokens/components/actions.css +1 -1
  102. package/dist/tokens/components/attachments.css +4 -4
  103. package/dist/tokens/components/badge.css +4 -4
  104. package/dist/tokens/components/callout.css +1 -1
  105. package/dist/tokens/components/card.css +9 -4
  106. package/dist/tokens/components/chart.css +10 -1
  107. package/dist/tokens/components/chat-bubble.css +1 -1
  108. package/dist/tokens/components/control.css +28 -10
  109. package/dist/tokens/components/conversations.css +2 -1
  110. package/dist/tokens/components/data-display.css +12 -7
  111. package/dist/tokens/components/descriptions.css +1 -1
  112. package/dist/tokens/components/draggable-panel.css +1 -1
  113. package/dist/tokens/components/feedback.css +28 -8
  114. package/dist/tokens/components/float-button.css +1 -1
  115. package/dist/tokens/components/legal-document.css +1 -1
  116. package/dist/tokens/components/logo.css +1 -1
  117. package/dist/tokens/components/mega-menu.css +5 -3
  118. package/dist/tokens/components/navigation.css +21 -7
  119. package/dist/tokens/components/segmented.css +8 -3
  120. package/dist/tokens/components/shell.css +19 -5
  121. package/dist/tokens/components/table.css +9 -1
  122. package/dist/tokens/components/thought-chain.css +1 -1
  123. package/dist/tokens/components/toggle.css +2 -0
  124. package/dist/tokens/components/tree.css +3 -1
  125. package/dist/tokens/components/upload.css +6 -6
  126. package/dist/tokens/components/welcome.css +1 -1
  127. package/dist/tokens/foundation.css +28 -1
  128. package/docs/COMPOSITION-VS-COMPONENT.md +31 -0
  129. package/docs/CUSTOMER-THEMING.md +637 -1
  130. package/docs/FRAME-COVERAGE-REPORT.md +3 -2
  131. package/docs/GLASSMORPHISM-STANDARD.md +196 -0
  132. package/docs/THEME-API-COVERAGE.md +538 -0
  133. package/docs/TOKEN-RESOLUTION.md +195 -0
  134. package/docs/TOKENS.md +63 -24
  135. package/docs/asset-modules.d.ts +7 -0
  136. package/docs/data-display/charts.tsx +80 -0
  137. package/docs/data-display/data-table/index.tsx +30 -0
  138. package/docs/data-display/popover.tsx +1 -1
  139. package/docs/data-display/table.tsx +52 -0
  140. package/docs/feedback/sheet.tsx +10 -10
  141. package/docs/foundation/density.tsx +4 -4
  142. package/docs/i18n/messages/en.json +502 -0
  143. package/docs/i18n/messages/ja.json +502 -0
  144. package/docs/i18n/messages/vi.json +502 -0
  145. package/docs/layout/account-chip.tsx +2 -2
  146. package/docs/layout/responsive-grid.tsx +1 -1
  147. package/docs/navigation/toolbar.tsx +20 -12
  148. package/docs/providers/theme-scope.tsx +186 -0
  149. package/docs/showcase/caimono-price-comparison.tsx +911 -0
  150. package/docs/showcase/case4-login.tsx +2 -2
  151. package/docs/showcase/permission-matrix.tsx +13 -5
  152. package/docs/showcase/table-pagination.tsx +2 -1
  153. package/docs/showcase/tenant-brand-color.tsx +338 -0
  154. package/docs/showcase/theme-lab.tsx +2125 -0
  155. package/docs/themes/flat.css +462 -0
  156. package/docs/themes/glassmorphism.css +958 -0
  157. package/docs/themes/index.ts +200 -0
  158. package/package.json +4 -3
  159. package/scripts/explain-token.mjs +382 -0
@@ -0,0 +1,186 @@
1
+ import { ThemeScope, tenantTheme } from "@godxjp/ui/app";
2
+ import {
3
+ Badge,
4
+ Card,
5
+ CardContent,
6
+ CardDescription,
7
+ CardHeader,
8
+ CardTitle,
9
+ Popover,
10
+ PopoverContent,
11
+ PopoverTrigger,
12
+ } from "@godxjp/ui/data-display";
13
+ import { Select } from "@godxjp/ui/data-entry";
14
+ import {
15
+ Dialog,
16
+ DialogBody,
17
+ DialogContent,
18
+ DialogDescription,
19
+ DialogFooter,
20
+ DialogHeader,
21
+ DialogTitle,
22
+ DialogTrigger,
23
+ Toaster,
24
+ toast,
25
+ } from "@godxjp/ui/feedback";
26
+ import { Button, Text } from "@godxjp/ui/general";
27
+ import { useTranslation } from "@godxjp/ui/i18n";
28
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
29
+
30
+ /**
31
+ * ThemeScope · the region whose overlays keep the region's tokens (gh#877).
32
+ *
33
+ * The screen is a review queue handled on behalf of two customers at once — the case that makes
34
+ * the defect visible, because both regions are on the page together and every overlay they open
35
+ * used to come back in the package's own violet.
36
+ *
37
+ * Each region is themed a DIFFERENT way on purpose: the first from `tenantTheme(hex).vars`, the
38
+ * second from a `.dark` class. ThemeScope has no theme prop and reads neither — it reads the
39
+ * COMPUTED tokens at its own element, which is why both work and why a `[data-tenant]` rule in a
40
+ * consumer's own stylesheet works too. Open a Dialog, a Select listbox, a Popover or a toast from
41
+ * either region: all of them are painted by that region.
42
+ *
43
+ * Composed only from real @godxjp/ui components.
44
+ */
45
+
46
+ const REVIEWERS = [
47
+ { value: "sato", label: "Sakura Sato" },
48
+ { value: "tran", label: "Trần Minh" },
49
+ { value: "novak", label: "Ana Novák" },
50
+ ];
51
+
52
+ function ReviewRegion({ name }: { name: string }) {
53
+ const { t } = useTranslation();
54
+
55
+ return (
56
+ <Card>
57
+ <CardHeader>
58
+ <CardTitle level={2}>{name}</CardTitle>
59
+ <CardDescription>{t("themeScopeDocs.region.description")}</CardDescription>
60
+ </CardHeader>
61
+ <CardContent>
62
+ <Flex direction="col" gap="md">
63
+ <Flex gap="sm" align="center" wrap>
64
+ <Badge>{t("themeScopeDocs.region.pending")}</Badge>
65
+ <Text tone="muted">{t("themeScopeDocs.region.queue")}</Text>
66
+ </Flex>
67
+
68
+ <Select
69
+ aria-label={t("themeScopeDocs.region.reviewerLabel")}
70
+ placeholder={t("themeScopeDocs.region.reviewerPlaceholder")}
71
+ options={REVIEWERS}
72
+ />
73
+
74
+ <Flex gap="sm" wrap>
75
+ <Dialog>
76
+ <DialogTrigger asChild>
77
+ <Button>{t("themeScopeDocs.region.approve")}</Button>
78
+ </DialogTrigger>
79
+ <DialogContent>
80
+ <DialogHeader>
81
+ <DialogTitle>{t("themeScopeDocs.dialog.title")}</DialogTitle>
82
+ <DialogDescription>{t("themeScopeDocs.dialog.description")}</DialogDescription>
83
+ </DialogHeader>
84
+ <DialogBody>
85
+ <Text>{t("themeScopeDocs.dialog.body")}</Text>
86
+ </DialogBody>
87
+ <DialogFooter>
88
+ <Button onClick={() => toast.success(t("themeScopeDocs.toast.approved"))}>
89
+ {t("themeScopeDocs.dialog.confirm")}
90
+ </Button>
91
+ </DialogFooter>
92
+ </DialogContent>
93
+ </Dialog>
94
+
95
+ <Popover>
96
+ <PopoverTrigger asChild>
97
+ <Button variant="outline">{t("themeScopeDocs.region.history")}</Button>
98
+ </PopoverTrigger>
99
+ <PopoverContent>
100
+ <Text>{t("themeScopeDocs.popover.body")}</Text>
101
+ </PopoverContent>
102
+ </Popover>
103
+
104
+ <Button variant="ghost" onClick={() => toast(t("themeScopeDocs.toast.saved"))}>
105
+ {t("themeScopeDocs.region.notify")}
106
+ </Button>
107
+ </Flex>
108
+ </Flex>
109
+ </CardContent>
110
+ </Card>
111
+ );
112
+ }
113
+
114
+ export default function Demo() {
115
+ const { t } = useTranslation();
116
+ const acme = tenantTheme("#0076bd");
117
+
118
+ return (
119
+ <PageContainer
120
+ title={t("themeScopeDocs.page.title")}
121
+ subtitle={t("themeScopeDocs.page.subtitle")}
122
+ >
123
+ <Flex direction="col" gap="lg">
124
+ <Card>
125
+ <CardHeader>
126
+ <CardTitle level={2}>{t("themeScopeDocs.intro.title")}</CardTitle>
127
+ <CardDescription>{t("themeScopeDocs.intro.description")}</CardDescription>
128
+ </CardHeader>
129
+ <CardContent>
130
+ <Text as="p" tone="muted">
131
+ {t("themeScopeDocs.intro.body")}
132
+ </Text>
133
+ </CardContent>
134
+ </Card>
135
+
136
+ {/* Themed from a customer hex. The Toaster lives inside the region, so its toasts do too. */}
137
+ <ThemeScope style={acme.vars} data-tenant="acme">
138
+ <ReviewRegion name={t("themeScopeDocs.acme.name")} />
139
+ <Toaster />
140
+
141
+ {/*
142
+ NESTED, and themed by a CLASS rather than a style: the night-shift console stays dark
143
+ whatever the page does. The INNER scope wins for its overlays — measured, its Dialog
144
+ reads --card 48 8% 12% (dark) where the outer region reads 60 33% 99%.
145
+
146
+ `acme.vars` is repeated here on purpose, and that is worth knowing: `.dark` RESTATES the
147
+ whole brand ramp, so an inner scope that only adds the class would hand its overlays the
148
+ package's dark violet rather than the customer's blue. Inheritance carries what the
149
+ inner scope does not redeclare; `.dark` redeclares this.
150
+ */}
151
+ <ThemeScope className="dark" style={acme.vars}>
152
+ <ReviewRegion name={t("themeScopeDocs.night.name")} />
153
+ </ThemeScope>
154
+ </ThemeScope>
155
+
156
+ <Card>
157
+ <CardHeader>
158
+ <CardTitle level={2}>{t("themeScopeDocs.without.title")}</CardTitle>
159
+ <CardDescription>{t("themeScopeDocs.without.description")}</CardDescription>
160
+ </CardHeader>
161
+ <CardContent>
162
+ {/* No ThemeScope: the region is themed, its overlays are not. This is the defect. */}
163
+ <div style={acme.vars} data-tenant="acme-unscoped">
164
+ <Dialog>
165
+ <DialogTrigger asChild>
166
+ <Button>{t("themeScopeDocs.without.open")}</Button>
167
+ </DialogTrigger>
168
+ <DialogContent>
169
+ <DialogHeader>
170
+ <DialogTitle>{t("themeScopeDocs.without.dialogTitle")}</DialogTitle>
171
+ <DialogDescription>
172
+ {t("themeScopeDocs.without.dialogDescription")}
173
+ </DialogDescription>
174
+ </DialogHeader>
175
+ <DialogBody>
176
+ <Text>{t("themeScopeDocs.without.dialogBody")}</Text>
177
+ </DialogBody>
178
+ </DialogContent>
179
+ </Dialog>
180
+ </div>
181
+ </CardContent>
182
+ </Card>
183
+ </Flex>
184
+ </PageContainer>
185
+ );
186
+ }