@godxjp/ui 28.9.0 → 28.12.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 (244) hide show
  1. package/agent/START-HERE.md +193 -0
  2. package/agent/anti-ai-tells.json +158 -0
  3. package/agent/components/Accordion.json +60 -0
  4. package/agent/components/AccountChip.json +59 -0
  5. package/agent/components/Actions.json +78 -0
  6. package/agent/components/Activity.json +80 -0
  7. package/agent/components/Affix.json +78 -0
  8. package/agent/components/Alert.json +65 -0
  9. package/agent/components/AlertDialog.json +109 -0
  10. package/agent/components/AlertDialogRoot.json +52 -0
  11. package/agent/components/Anchor.json +119 -0
  12. package/agent/components/AppLauncher.json +95 -0
  13. package/agent/components/AppProvider.json +105 -0
  14. package/agent/components/AppSettingPicker.json +88 -0
  15. package/agent/components/AppSettingToggle.json +70 -0
  16. package/agent/components/AppShell.json +159 -0
  17. package/agent/components/AreaChart.json +105 -0
  18. package/agent/components/AspectRatio.json +38 -0
  19. package/agent/components/Attachments.json +77 -0
  20. package/agent/components/AuthAccountSummary.json +64 -0
  21. package/agent/components/AuthDivider.json +35 -0
  22. package/agent/components/AuthFooter.json +48 -0
  23. package/agent/components/AuthIdentity.json +42 -0
  24. package/agent/components/AuthShell.json +108 -0
  25. package/agent/components/AuthStack.json +21 -0
  26. package/agent/components/Avatar.json +89 -0
  27. package/agent/components/Badge.json +96 -0
  28. package/agent/components/Banner.json +48 -0
  29. package/agent/components/BarChart.json +108 -0
  30. package/agent/components/BranchScopePicker.json +89 -0
  31. package/agent/components/Breadcrumb.json +54 -0
  32. package/agent/components/Button.json +133 -0
  33. package/agent/components/Calendar.json +259 -0
  34. package/agent/components/Callout.json +46 -0
  35. package/agent/components/Card.json +112 -0
  36. package/agent/components/CardBar.json +49 -0
  37. package/agent/components/CardContent.json +51 -0
  38. package/agent/components/Carousel.json +50 -0
  39. package/agent/components/Cascader.json +209 -0
  40. package/agent/components/CenteredShell.json +66 -0
  41. package/agent/components/ChatBubble.json +100 -0
  42. package/agent/components/ChatBubbleList.json +64 -0
  43. package/agent/components/ChatComposer.json +160 -0
  44. package/agent/components/ChatSuggestion.json +86 -0
  45. package/agent/components/Checkbox.json +68 -0
  46. package/agent/components/CheckboxGroup.json +96 -0
  47. package/agent/components/CodeBlock.json +64 -0
  48. package/agent/components/Collapsible.json +74 -0
  49. package/agent/components/ColorPicker.json +87 -0
  50. package/agent/components/Command.json +168 -0
  51. package/agent/components/CommandPalette.json +84 -0
  52. package/agent/components/CompactBarTrend.json +101 -0
  53. package/agent/components/Conversations.json +82 -0
  54. package/agent/components/CredentialReveal.json +93 -0
  55. package/agent/components/DataState.json +79 -0
  56. package/agent/components/DataTable.json +268 -0
  57. package/agent/components/DatePicker.json +275 -0
  58. package/agent/components/Descriptions.json +67 -0
  59. package/agent/components/Dialog.json +78 -0
  60. package/agent/components/DraggablePanel.json +106 -0
  61. package/agent/components/DropdownMenu.json +102 -0
  62. package/agent/components/EmptyState.json +83 -0
  63. package/agent/components/ErrorSurface.json +128 -0
  64. package/agent/components/FeatureList.json +43 -0
  65. package/agent/components/Field.json +64 -0
  66. package/agent/components/FilterBar.json +99 -0
  67. package/agent/components/Flex.json +153 -0
  68. package/agent/components/FloatButton.json +91 -0
  69. package/agent/components/Form.json +87 -0
  70. package/agent/components/FormErrors.json +51 -0
  71. package/agent/components/FormField.json +137 -0
  72. package/agent/components/FormFieldArray.json +39 -0
  73. package/agent/components/FormFieldControl.json +129 -0
  74. package/agent/components/FormRoot.json +122 -0
  75. package/agent/components/Heading.json +61 -0
  76. package/agent/components/HoverCard.json +55 -0
  77. package/agent/components/Icon.json +60 -0
  78. package/agent/components/InfiniteQueryState.json +58 -0
  79. package/agent/components/Input.json +122 -0
  80. package/agent/components/InputOTP.json +106 -0
  81. package/agent/components/Label.json +43 -0
  82. package/agent/components/LegalDocumentShell.json +102 -0
  83. package/agent/components/Legend.json +42 -0
  84. package/agent/components/LineChart.json +103 -0
  85. package/agent/components/Link.json +41 -0
  86. package/agent/components/ListRow.json +92 -0
  87. package/agent/components/Logo.json +85 -0
  88. package/agent/components/Marquee.json +91 -0
  89. package/agent/components/Masonry.json +82 -0
  90. package/agent/components/MasterDetail.json +95 -0
  91. package/agent/components/MegaMenu.json +120 -0
  92. package/agent/components/MobileShell.json +73 -0
  93. package/agent/components/NavList.json +63 -0
  94. package/agent/components/NumberInput.json +158 -0
  95. package/agent/components/OrgSwitcher.json +89 -0
  96. package/agent/components/OverlayPortalProvider.json +42 -0
  97. package/agent/components/PageContainer.json +181 -0
  98. package/agent/components/Pagination.json +132 -0
  99. package/agent/components/Paragraph.json +40 -0
  100. package/agent/components/PasswordInput.json +79 -0
  101. package/agent/components/PasswordStrength.json +51 -0
  102. package/agent/components/PermissionMatrix.json +81 -0
  103. package/agent/components/PieChart.json +99 -0
  104. package/agent/components/Popover.json +110 -0
  105. package/agent/components/PrefetchLink.json +65 -0
  106. package/agent/components/Progress.json +79 -0
  107. package/agent/components/Prose.json +57 -0
  108. package/agent/components/QrCode.json +62 -0
  109. package/agent/components/Radio.json +98 -0
  110. package/agent/components/RadioGroup.json +91 -0
  111. package/agent/components/RangeTimeline.json +80 -0
  112. package/agent/components/Rating.json +92 -0
  113. package/agent/components/ResizablePanel.json +69 -0
  114. package/agent/components/ResponsiveGrid.json +77 -0
  115. package/agent/components/Reveal.json +70 -0
  116. package/agent/components/ScrollArea.json +104 -0
  117. package/agent/components/SearchInput.json +98 -0
  118. package/agent/components/Segmented.json +96 -0
  119. package/agent/components/Select.json +397 -0
  120. package/agent/components/Separator.json +86 -0
  121. package/agent/components/ServiceCatalogCta.json +46 -0
  122. package/agent/components/ServiceLauncherCard.json +93 -0
  123. package/agent/components/ServiceRolePanel.json +83 -0
  124. package/agent/components/Sheet.json +85 -0
  125. package/agent/components/Sidebar.json +118 -0
  126. package/agent/components/Skeleton.json +57 -0
  127. package/agent/components/SkeletonArticle.json +71 -0
  128. package/agent/components/SkeletonAvatar.json +50 -0
  129. package/agent/components/SkeletonButton.json +57 -0
  130. package/agent/components/SkeletonForm.json +52 -0
  131. package/agent/components/SkeletonImage.json +37 -0
  132. package/agent/components/SkeletonInput.json +51 -0
  133. package/agent/components/SkeletonNode.json +42 -0
  134. package/agent/components/SkeletonRows.json +49 -0
  135. package/agent/components/SkeletonTable.json +45 -0
  136. package/agent/components/Slider.json +160 -0
  137. package/agent/components/SplitPane.json +66 -0
  138. package/agent/components/StatCard.json +83 -0
  139. package/agent/components/Steps.json +95 -0
  140. package/agent/components/Swatch.json +41 -0
  141. package/agent/components/Switch.json +81 -0
  142. package/agent/components/Table.json +112 -0
  143. package/agent/components/Tabs.json +158 -0
  144. package/agent/components/TagInput.json +105 -0
  145. package/agent/components/Text.json +201 -0
  146. package/agent/components/Textarea.json +126 -0
  147. package/agent/components/ThoughtChain.json +76 -0
  148. package/agent/components/Thumbnail.json +70 -0
  149. package/agent/components/TimePicker.json +200 -0
  150. package/agent/components/TimeRangePicker.json +90 -0
  151. package/agent/components/Timeline.json +47 -0
  152. package/agent/components/TimelineGrid.json +92 -0
  153. package/agent/components/Title.json +67 -0
  154. package/agent/components/Toaster.json +42 -0
  155. package/agent/components/Toggle.json +90 -0
  156. package/agent/components/ToggleGroup.json +102 -0
  157. package/agent/components/Toolbar.json +120 -0
  158. package/agent/components/Tooltip.json +110 -0
  159. package/agent/components/Topbar.json +83 -0
  160. package/agent/components/TopbarItem.json +79 -0
  161. package/agent/components/Transfer.json +141 -0
  162. package/agent/components/Tree.json +185 -0
  163. package/agent/components/TreeSelect.json +232 -0
  164. package/agent/components/TwoFactorSetup.json +79 -0
  165. package/agent/components/Typography.json +42 -0
  166. package/agent/components/Upload.json +221 -0
  167. package/agent/components/UploadCropDialog.json +60 -0
  168. package/agent/components/VisuallyHidden.json +20 -0
  169. package/agent/components/Welcome.json +65 -0
  170. package/agent/components/formatDate.json +46 -0
  171. package/agent/components/inertiaUpload.json +32 -0
  172. package/agent/components/useZodForm.json +39 -0
  173. package/agent/components-index.json +884 -0
  174. package/agent/components.json +15515 -0
  175. package/agent/index.json +56 -0
  176. package/agent/llms.txt +32 -0
  177. package/agent/patterns/account-recovery-settings.json +19 -0
  178. package/agent/patterns/async-data-state.json +20 -0
  179. package/agent/patterns/auth-recovery-panels.json +29 -0
  180. package/agent/patterns/badge-coloring.json +14 -0
  181. package/agent/patterns/common-fixes.json +16 -0
  182. package/agent/patterns/confirm-destructive.json +11 -0
  183. package/agent/patterns/data-table-page.json +18 -0
  184. package/agent/patterns/deferred-loading.json +12 -0
  185. package/agent/patterns/error-pages.json +28 -0
  186. package/agent/patterns/inertia-detail-page.json +13 -0
  187. package/agent/patterns/inertia-list-page.json +15 -0
  188. package/agent/patterns/inertia-persistent-layout.json +14 -0
  189. package/agent/patterns/organization-memberships.json +19 -0
  190. package/agent/patterns/page-sections.json +18 -0
  191. package/agent/patterns/settings-page-responsive.json +18 -0
  192. package/agent/patterns/settings-section-rows.json +23 -0
  193. package/agent/patterns/signup-form.json +13 -0
  194. package/agent/patterns/topbar-account-chip.json +18 -0
  195. package/agent/patterns/transactional-email.json +22 -0
  196. package/agent/patterns-index.json +323 -0
  197. package/agent/patterns.json +342 -0
  198. package/agent/rules.json +237 -0
  199. package/agent/tokens.json +8427 -0
  200. package/agent/vocabulary.json +198 -0
  201. package/dist/components/data-display/service-launcher-card.d.ts +19 -0
  202. package/dist/components/data-display/service-launcher-card.js +14 -1
  203. package/dist/components/data-entry/attachments.js +77 -33
  204. package/dist/components/data-entry/input.js +8 -1
  205. package/dist/components/layout/flex.d.ts +2 -2
  206. package/dist/components/layout/flex.js +2 -0
  207. package/dist/components/ui/avatar.d.ts +1 -18
  208. package/dist/components/ui/avatar.js +1 -36
  209. package/dist/components/ui/tag-input.d.ts +10 -0
  210. package/dist/components/ui/tag-input.js +35 -2
  211. package/dist/contracts/measurement.json +1 -1
  212. package/dist/i18n/messages/en.json +190 -1
  213. package/dist/i18n/messages/ja.json +188 -1
  214. package/dist/i18n/messages/vi.json +188 -1
  215. package/dist/lib/image-loading-status.d.ts +25 -0
  216. package/dist/lib/image-loading-status.js +41 -0
  217. package/dist/props/components/data-entry.prop.d.ts +21 -2
  218. package/dist/props/components/layout.prop.d.ts +42 -0
  219. package/dist/props/registry.d.ts +14 -1
  220. package/dist/props/registry.js +18 -1
  221. package/dist/styles/card-layout.css +10 -4
  222. package/dist/styles/control.css +33 -4
  223. package/dist/styles/data-display-layout.css +1 -1
  224. package/dist/styles/data-entry-layout.css +245 -2
  225. package/dist/styles/layout.css +17 -0
  226. package/dist/styles/navigation-layout.css +3 -1
  227. package/dist/styles/shell-layout.css +2 -0
  228. package/dist/styles/table-layout.css +50 -9
  229. package/dist/tokens/components/attachments.css +18 -9
  230. package/dist/tokens/components/segmented.css +7 -3
  231. package/dist/tokens/components/table.css +2 -1
  232. package/docs/COMPOSITION-VS-COMPONENT.md +41 -0
  233. package/docs/DESIGN-AUTHORITY.md +52 -0
  234. package/docs/DEVELOPMENT.md +81 -6
  235. package/docs/assets/service-mark-rose.svg +6 -0
  236. package/docs/assets/service-mark-teal.svg +5 -0
  237. package/docs/data-display/service-launcher-card.tsx +232 -92
  238. package/docs/data-entry/tag-input.tsx +37 -0
  239. package/docs/layout/flex.tsx +40 -0
  240. package/docs/roadmap/website-components.md +34 -0
  241. package/docs/showcase/marketing-page.tsx +54 -45
  242. package/docs/showcase/table-pagination.tsx +99 -18
  243. package/docs/showcase/theme-customization.tsx +25 -2
  244. package/package.json +8 -5
@@ -0,0 +1,22 @@
1
+ {
2
+ "aliases": [
3
+ "email-template",
4
+ "email-tokens",
5
+ "blade-email",
6
+ "html-email"
7
+ ],
8
+ "code": "// ───────────────────────────────────────────────────────────────────────\n// WHY a separate export: an email is rendered by Blade/Twig/MJML and by clients that strip\n// <style>, ignore CSS custom properties and block remote images. So NEITHER the React components\n// NOR @godxjp/ui/tokens are reachable — every value must be a LITERAL inline style.\n// @godxjp/ui/email is that bridge. It is React-free and dependency-free, and every value is\n// DERIVED from src/tokens/ (HSL→hex at module load), so it can never drift from the web palette.\n//\n// ❌ style=\"background:#0077c7\" // hand-copied hex → drifts the first re-theme\n// ❌ style=\"padding: var(--space-8)\" // no email client resolves var()\n// ❌ style=\"width: 30rem\" // rem is unreliable; use literal px\n// ❌ <img src=\"https://cdn…/logo.png\"> // blocked by default in most clients\n// ❌ an emerald pill with no internal glyph // that is the INCOMPLETE mark\n// ✅ every value from the token export + the embedded brand mark below\n\nimport {\n EMAIL_BRAND_MARK,\n EMAIL_COLORS,\n EMAIL_CTA,\n EMAIL_FOOTER,\n EMAIL_MOBILE,\n EMAIL_SHELL,\n EMAIL_TYPOGRAPHY,\n emailBrandMarkSvg,\n emailInlineStyle,\n} from \"@godxjp/ui/email\";\n\nconst c = EMAIL_COLORS;\n\n// 1) THE 480px SHELL — a table, not a div: Outlook's Word renderer has no flex/grid.\nconst page = emailInlineStyle({ padding: EMAIL_SHELL.pagePadding, backgroundColor: c.background });\nconst card = emailInlineStyle({\n width: EMAIL_SHELL.width, // \"480px\" — EMAIL_SHELL.widthPx (480) for width=\"480\"\n maxWidth: \"100%\",\n backgroundColor: c.surface, // ← --card\n border: `${EMAIL_SHELL.borderWidth} solid ${c.border}`,\n borderRadius: EMAIL_SHELL.radius,\n});\nconst body = emailInlineStyle({\n padding: EMAIL_SHELL.padding, // content column = EMAIL_SHELL.contentWidth (416px)\n fontFamily: EMAIL_TYPOGRAPHY.fontFamily,\n fontSize: EMAIL_TYPOGRAPHY.bodyFontSize,\n lineHeight: EMAIL_TYPOGRAPHY.bodyLineHeight,\n color: c.foreground,\n});\n\n// 2) THE BRAND MARK — emerald capsule + internal glyph, embedded, zero network fetch.\n// EMAIL_BRAND_MARK.svg inline <svg> (Apple Mail, iOS, Thunderbird)\n// EMAIL_BRAND_MARK.dataUri data: URL for <img src> (no request)\n// EMAIL_BRAND_MARK.tableHtml <table> fallback (renders everywhere)\n// The header is a LOCKUP: mark (22px) + EMAIL_BRAND_MARK.gap + the wordmark at\n// EMAIL_BRAND_MARK.wordmarkFontSize/wordmarkFontWeight. The mark is DECORATIVE there —\n// emailBrandMarkSvg({ label: \"\" }) — so the wordmark carries the name and it is announced once.\nconst mark = emailBrandMarkSvg({ label: \"\" });\n\n// 3) THE CTA — line-height EQUALS height, so the label centres with no flexbox.\nconst ctaCell = emailInlineStyle({\n height: EMAIL_CTA.height, // 36px — the canonical box (mirrors --control-height-lg)\n borderRadius: EMAIL_CTA.radius,\n backgroundColor: c.primary,\n});\nconst ctaLink = emailInlineStyle({\n display: \"inline-block\",\n padding: `0 ${EMAIL_CTA.paddingX}`,\n lineHeight: EMAIL_CTA.lineHeight,\n fontSize: EMAIL_CTA.fontSize,\n fontWeight: EMAIL_CTA.fontWeight,\n color: c.primaryForeground,\n textDecoration: \"none\",\n});\n\n// 4) LEGAL FOOTER — quiet type over a hairline; links separated by a fixed-width spacer span\n// (margins between inline links are dropped by several clients).\nconst footer = emailInlineStyle({\n borderTop: `${EMAIL_FOOTER.borderWidth} solid ${c.border}`,\n paddingTop: EMAIL_FOOTER.paddingTop,\n fontSize: EMAIL_FOOTER.fontSize,\n lineHeight: EMAIL_FOOTER.lineHeight,\n color: c.mutedForeground,\n});\nconst linkSpacer = emailInlineStyle({ display: \"inline-block\", width: EMAIL_FOOTER.linkGap });\n\nexport const html = `\n<table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n <tr><td align=\"center\" style=\"${page}\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"\n width=\"${EMAIL_SHELL.widthPx}\" class=\"email-card\" style=\"${card}\">\n <tr><td class=\"email-body\" style=\"${body}\">\n ${mark}\n <h1 class=\"email-heading\">Your subject line</h1>\n <p>Your body copy.</p>\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr><td class=\"email-cta\" align=\"center\" style=\"${ctaCell}\">\n <a class=\"email-cta-link\" href=\"https://your.app/action\" style=\"${ctaLink}\">Continue</a>\n </td></tr>\n </table>\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n <tr><td style=\"${footer}\">\n <p>This mailbox is not monitored.</p>\n <p><a href=\"#\">Help</a><span style=\"${linkSpacer}\">&#8203;</span><a href=\"#\">Privacy</a></p>\n </td></tr>\n </table>\n </td></tr>\n </table>\n </td></tr>\n</table>`;\n\n// 5) MOBILE REFLOW — progressive enhancement ONLY. Every rule below has an inline equivalent\n// above, so a client that strips <style> still renders the desktop layout, never a broken one.\nexport const mediaQuery = `\n@media (max-width: ${EMAIL_MOBILE.maxWidth}) {\n .email-card { width: ${EMAIL_MOBILE.width} !important; }\n .email-body { padding: ${EMAIL_MOBILE.padding} !important; }\n .email-heading { font-size: ${EMAIL_MOBILE.headingFontSize} !important; }\n .email-cta, .email-cta-link { width: ${EMAIL_MOBILE.ctaWidth} !important; }\n}`;\n\n// 6) BLADE / TWIG / any non-JS engine — dump the same values once in the build step:\n// node --input-type=module -e 'import(\"@godxjp/ui/email\").then(m => process.stdout.write(m.EMAIL_TOKENS_JSON))' > resources/design/email-tokens.json\n// then read the JSON from PHP. Same numbers, same source, no copy-paste.",
9
+ "name": "transactional-email",
10
+ "tagline": "Build a transactional HTML email (Blade/Twig/MJML/React) from @godxjp/ui/email — literal hex + px derived from the web tokens, the canonical GoDX brand mark, a bulletproof CTA, legal footer and mobile reflow. NEVER hand-copy hex or hand-draw the logo in a mail template.",
11
+ "tags": [
12
+ "email",
13
+ "transactional",
14
+ "blade",
15
+ "laravel",
16
+ "tokens",
17
+ "brand",
18
+ "mark",
19
+ "mjml",
20
+ "cta"
21
+ ]
22
+ }
@@ -0,0 +1,323 @@
1
+ [
2
+ {
3
+ "name": "common-fixes",
4
+ "tagline": "Fix the most common @godxjp/ui consumer mistakes & visual bugs (StatCard double-border, grey Badge, crushed/empty table headers, washed-out sidebar footer, Inertia layout crash, SSR hydration). Before → after.",
5
+ "tags": [
6
+ "fixes",
7
+ "migration",
8
+ "bug",
9
+ "cardstat",
10
+ "statusbadge",
11
+ "datatable",
12
+ "sidebar",
13
+ "gotcha",
14
+ "review"
15
+ ]
16
+ },
17
+ {
18
+ "name": "signup-form",
19
+ "tagline": "Card-wrapped sign-up form using react-hook-form + zod with FormField/Input and a CardFooter action bar (real @godxjp/ui API).",
20
+ "tags": [
21
+ "form",
22
+ "auth",
23
+ "sign-up",
24
+ "zod",
25
+ "validation",
26
+ "react-hook-form"
27
+ ]
28
+ },
29
+ {
30
+ "aliases": [
31
+ "settings-tabs",
32
+ "settings-page",
33
+ "settings-layout"
34
+ ],
35
+ "name": "settings-page-responsive",
36
+ "tagline": "Route-backed settings: persistent desktop local navigation, compact mobile tab strip, deep links + browser history, and bounded form content — NO Card wrapper, NO undefined CSS.",
37
+ "tags": [
38
+ "settings",
39
+ "form",
40
+ "tabs",
41
+ "admin",
42
+ "responsive",
43
+ "navigation"
44
+ ]
45
+ },
46
+ {
47
+ "aliases": [
48
+ "settings-section",
49
+ "settings-row",
50
+ "danger-zone",
51
+ "billing-handoff",
52
+ "preferences-rows",
53
+ "account-identity"
54
+ ],
55
+ "name": "settings-section-rows",
56
+ "tagline": "The four canonical settings BLOCKS — identity · preference rows · billing handoff · danger zone — composed from Card + ListRow + Descriptions + StatusBadge + AlertDialog. A COMPOSITION pattern: godx-ui ships no SettingsSection/SettingsRow/DangerZone component and never will.",
57
+ "tags": [
58
+ "settings",
59
+ "account",
60
+ "billing",
61
+ "danger",
62
+ "preferences",
63
+ "listrow",
64
+ "card",
65
+ "admin"
66
+ ]
67
+ },
68
+ {
69
+ "name": "confirm-destructive",
70
+ "tagline": "Type-to-confirm destructive dialog — AlertDialogRoot + Input gate + toast (real @godxjp/ui API).",
71
+ "tags": [
72
+ "dialog",
73
+ "confirm",
74
+ "destructive",
75
+ "delete"
76
+ ]
77
+ },
78
+ {
79
+ "name": "deferred-loading",
80
+ "tagline": "Inertia deferred props with a Skeleton fallback — SkeletonTable while data loads, then DataTable (real @godxjp/ui API).",
81
+ "tags": [
82
+ "loading",
83
+ "skeleton",
84
+ "deferred",
85
+ "inertia",
86
+ "table"
87
+ ]
88
+ },
89
+ {
90
+ "name": "inertia-list-page",
91
+ "tagline": "Inertia + @godxjp/ui list page — PageContainer + Toolbar + DataTable + Badge + Pagination (current primitive API).",
92
+ "tags": [
93
+ "inertia",
94
+ "list",
95
+ "table",
96
+ "page",
97
+ "filter",
98
+ "pagination",
99
+ "datatable",
100
+ "crm"
101
+ ]
102
+ },
103
+ {
104
+ "name": "inertia-detail-page",
105
+ "tagline": "Inertia detail page — receives {id} prop, Descriptions (compound) + StatCard + EmptyState fallback.",
106
+ "tags": [
107
+ "inertia",
108
+ "detail",
109
+ "show",
110
+ "page",
111
+ "keyvaluegrid",
112
+ "crm"
113
+ ]
114
+ },
115
+ {
116
+ "name": "inertia-persistent-layout",
117
+ "tagline": "Inertia persistent layout (AppShell+Sidebar) — the array-form gotcha + the SSR/Math.random gotcha.",
118
+ "tags": [
119
+ "inertia",
120
+ "layout",
121
+ "appshell",
122
+ "sidebar",
123
+ "ssr",
124
+ "hydration",
125
+ "gotcha"
126
+ ]
127
+ },
128
+ {
129
+ "aliases": [
130
+ "error-surface",
131
+ "errorsurface",
132
+ "403",
133
+ "404",
134
+ "500",
135
+ "503",
136
+ "exception-page"
137
+ ],
138
+ "name": "error-pages",
139
+ "tagline": "400 / 403 / 404 / 500 / 503 exception pages. USE THE COMPONENT: import { ErrorSurface } from \"@godxjp/ui/layout\". `mode=\"application\"` (400/403/404) is the body you put inside the AppShell the route already renders; `mode=\"system\"` (500/503) owns the page via CenteredShell align=\"center\".",
140
+ "tags": [
141
+ "error",
142
+ "errorsurface",
143
+ "403",
144
+ "404",
145
+ "500",
146
+ "503",
147
+ "maintenance",
148
+ "inertia",
149
+ "ssr",
150
+ "layout",
151
+ "emptystate",
152
+ "centeredshell"
153
+ ]
154
+ },
155
+ {
156
+ "name": "badge-coloring",
157
+ "tagline": "Colour a Badge for localized labels and tiers via tone + icon (escape-hatch props).",
158
+ "tags": [
159
+ "statusbadge",
160
+ "badge",
161
+ "tone",
162
+ "color",
163
+ "status",
164
+ "tier",
165
+ "table"
166
+ ]
167
+ },
168
+ {
169
+ "aliases": [
170
+ "loading-states",
171
+ "data-state",
172
+ "query-states"
173
+ ],
174
+ "name": "async-data-state",
175
+ "tagline": "The full async state machine — ONE primary state at a time: prerequisite, disabled-vs-loading, stale refresh, populated, real-empty, and cause-aware error (401/403/404/422/transient) with correct recovery.",
176
+ "tags": [
177
+ "async",
178
+ "loading",
179
+ "query",
180
+ "error",
181
+ "empty",
182
+ "prerequisite",
183
+ "retry",
184
+ "react-query"
185
+ ]
186
+ },
187
+ {
188
+ "aliases": [
189
+ "filter-bar",
190
+ "table-state",
191
+ "list-page"
192
+ ],
193
+ "name": "data-table-page",
194
+ "tagline": "Filter (Toolbar) + table surface + bottom pagination driven by a query state machine — pagination shows ONLY for successful multi-page data; filters/page survive a transient retry.",
195
+ "tags": [
196
+ "table",
197
+ "pagination",
198
+ "filter",
199
+ "async",
200
+ "toolbar",
201
+ "datatable"
202
+ ]
203
+ },
204
+ {
205
+ "aliases": [
206
+ "organization-switcher",
207
+ "workspace-switcher",
208
+ "received-invitations",
209
+ "memberships"
210
+ ],
211
+ "name": "organization-memberships",
212
+ "tagline": "Workspace membership list — recognizable identity, current/active state, role, permission-aware Open/Switch/Manage/Leave row actions, page-level Create, and CONDITIONAL invitations (omit when none).",
213
+ "tags": [
214
+ "organization",
215
+ "workspace",
216
+ "membership",
217
+ "invitation",
218
+ "account",
219
+ "switcher"
220
+ ]
221
+ },
222
+ {
223
+ "aliases": [
224
+ "password-recovery",
225
+ "forgot-password",
226
+ "reset-password",
227
+ "mfa-challenge",
228
+ "two-factor-challenge",
229
+ "2fa-challenge",
230
+ "otp-challenge",
231
+ "passkey-failure",
232
+ "scr-008"
233
+ ],
234
+ "name": "auth-recovery-panels",
235
+ "tagline": "Signed-OUT password recovery + sign-in MFA challenge panels (SCR-008). There is NO PasswordRecoveryPanel and NO MfaChallengePanel — compose Card + AuthStack + FormField/InputOTP + Button inside AuthShell preset=\"account-recovery\" (the 432px token-owned measure).",
236
+ "tags": [
237
+ "auth",
238
+ "authshell",
239
+ "recovery",
240
+ "password",
241
+ "mfa",
242
+ "2fa",
243
+ "otp",
244
+ "inputotp",
245
+ "passkey",
246
+ "layout",
247
+ "presentation"
248
+ ]
249
+ },
250
+ {
251
+ "aliases": [
252
+ "recovery-email",
253
+ "backup-codes",
254
+ "security-settings",
255
+ "recovery-settings"
256
+ ],
257
+ "name": "account-recovery-settings",
258
+ "tagline": "Signed-in recovery: compact method status/action rows (email · phone · backup codes) + a separate password-change destination — capability-aware, risk-appropriate, NO stacked Info Alerts.",
259
+ "tags": [
260
+ "account",
261
+ "recovery",
262
+ "security",
263
+ "backup-codes",
264
+ "password",
265
+ "settings"
266
+ ]
267
+ },
268
+ {
269
+ "aliases": [
270
+ "email-template",
271
+ "email-tokens",
272
+ "blade-email",
273
+ "html-email"
274
+ ],
275
+ "name": "transactional-email",
276
+ "tagline": "Build a transactional HTML email (Blade/Twig/MJML/React) from @godxjp/ui/email — literal hex + px derived from the web tokens, the canonical GoDX brand mark, a bulletproof CTA, legal footer and mobile reflow. NEVER hand-copy hex or hand-draw the logo in a mail template.",
277
+ "tags": [
278
+ "email",
279
+ "transactional",
280
+ "blade",
281
+ "laravel",
282
+ "tokens",
283
+ "brand",
284
+ "mark",
285
+ "mjml",
286
+ "cta"
287
+ ]
288
+ },
289
+ {
290
+ "aliases": [
291
+ "cards-in-page",
292
+ "page-layout",
293
+ "stack-cards"
294
+ ],
295
+ "name": "page-sections",
296
+ "tagline": "A page made of several Card sections: PageContainer spaces its direct children by default; group items inside a section with Flex/ResponsiveGrid, never Tailwind gap-*/p-*.",
297
+ "tags": [
298
+ "layout",
299
+ "page",
300
+ "card",
301
+ "spacing",
302
+ "flex",
303
+ "grid"
304
+ ]
305
+ },
306
+ {
307
+ "aliases": [
308
+ "user-chip",
309
+ "account-menu",
310
+ "signed-in-user"
311
+ ],
312
+ "name": "topbar-account-chip",
313
+ "tagline": "Signed-in user in a PageContainer `extra` slot: Avatar + name + sign-out as a Flex row of primitives — same control height as the buttons beside it. Never a hand-rolled rounded-full border div.",
314
+ "tags": [
315
+ "auth",
316
+ "topbar",
317
+ "avatar",
318
+ "header",
319
+ "account",
320
+ "chip"
321
+ ]
322
+ }
323
+ ]