@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.
Files changed (727) hide show
  1. package/README.md +102 -121
  2. package/agent/START-HERE.md +10 -10
  3. package/agent/components/Accordion.json +2 -2
  4. package/agent/components/AccountChip.json +1 -1
  5. package/agent/components/Actions.json +1 -1
  6. package/agent/components/Activity.json +2 -2
  7. package/agent/components/Affix.json +1 -1
  8. package/agent/components/Alert.json +22 -6
  9. package/agent/components/AlertDialog.json +8 -1
  10. package/agent/components/Anchor.json +4 -3
  11. package/agent/components/AppLauncher.json +2 -2
  12. package/agent/components/AppProvider.json +19 -11
  13. package/agent/components/AppSettingPicker.json +18 -2
  14. package/agent/components/AppShell.json +4 -5
  15. package/agent/components/AreaChart.json +0 -1
  16. package/agent/components/AspectRatio.json +2 -2
  17. package/agent/components/Attachments.json +3 -3
  18. package/agent/components/AuthAccountSummary.json +1 -1
  19. package/agent/components/AuthDivider.json +1 -1
  20. package/agent/components/AuthExpiryProvider.json +0 -1
  21. package/agent/components/AuthFooter.json +2 -2
  22. package/agent/components/AuthIdentity.json +3 -3
  23. package/agent/components/AuthStack.json +1 -1
  24. package/agent/components/Avatar.json +2 -12
  25. package/agent/components/Badge.json +1 -1
  26. package/agent/components/BarChart.json +0 -1
  27. package/agent/components/BranchScopePicker.json +1 -1
  28. package/agent/components/Breadcrumb.json +1 -1
  29. package/agent/components/Button.json +3 -3
  30. package/agent/components/Calendar.json +1 -1
  31. package/agent/components/Card.json +2 -2
  32. package/agent/components/CardBar.json +0 -1
  33. package/agent/components/CardContent.json +0 -1
  34. package/agent/components/Carousel.json +4 -3
  35. package/agent/components/Cascader.json +1 -1
  36. package/agent/components/CenteredShell.json +78 -17
  37. package/agent/components/ChatBubble.json +3 -3
  38. package/agent/components/ChatBubbleList.json +3 -3
  39. package/agent/components/ChatComposer.json +3 -3
  40. package/agent/components/ChatSuggestion.json +3 -3
  41. package/agent/components/Checkbox.json +1 -1
  42. package/agent/components/CheckboxGroup.json +0 -1
  43. package/agent/components/CodeBlock.json +1 -1
  44. package/agent/components/Collapsible.json +4 -4
  45. package/agent/components/ColorPicker.json +1 -1
  46. package/agent/components/Command.json +5 -5
  47. package/agent/components/CommandPalette.json +1 -1
  48. package/agent/components/CompactBarTrend.json +1 -1
  49. package/agent/components/Conversations.json +3 -3
  50. package/agent/components/CredentialReveal.json +1 -1
  51. package/agent/components/DataState.json +2 -2
  52. package/agent/components/DataTable.json +1 -1
  53. package/agent/components/DatePicker.json +1 -1
  54. package/agent/components/Descriptions.json +1 -1
  55. package/agent/components/Dialog.json +2 -2
  56. package/agent/components/DraggablePanel.json +5 -4
  57. package/agent/components/DropdownMenu.json +1 -1
  58. package/agent/components/EmojiPicker.json +3 -2
  59. package/agent/components/EmptyState.json +1 -1
  60. package/agent/components/ErrorSurface.json +3 -3
  61. package/agent/components/FeatureList.json +1 -1
  62. package/agent/components/Field.json +0 -1
  63. package/agent/components/Flex.json +34 -4
  64. package/agent/components/FloatButton.json +6 -5
  65. package/agent/components/Form.json +1 -1
  66. package/agent/components/FormErrors.json +0 -1
  67. package/agent/components/FormField.json +6 -6
  68. package/agent/components/FormFieldArray.json +0 -1
  69. package/agent/components/FormFieldControl.json +0 -1
  70. package/agent/components/FormRoot.json +1 -1
  71. package/agent/components/Heading.json +3 -0
  72. package/agent/components/Icon.json +1 -1
  73. package/agent/components/Image.json +7 -4
  74. package/agent/components/InfiniteQueryState.json +1 -1
  75. package/agent/components/Input.json +1 -1
  76. package/agent/components/InputOTP.json +2 -2
  77. package/agent/components/Label.json +3 -3
  78. package/agent/components/LegalDocumentShell.json +5 -4
  79. package/agent/components/Legend.json +1 -1
  80. package/agent/components/LineChart.json +0 -1
  81. package/agent/components/Link.json +0 -1
  82. package/agent/components/ListRow.json +1 -1
  83. package/agent/components/Logo.json +5 -4
  84. package/agent/components/Marquee.json +4 -3
  85. package/agent/components/Masonry.json +4 -3
  86. package/agent/components/MasterDetail.json +1 -1
  87. package/agent/components/MegaMenu.json +4 -3
  88. package/agent/components/MobileShell.json +4 -4
  89. package/agent/components/NavList.json +1 -1
  90. package/agent/components/NumberInput.json +1 -1
  91. package/agent/components/OrgChart.json +4 -3
  92. package/agent/components/OrgSwitcher.json +1 -1
  93. package/agent/components/OverlayPortalProvider.json +0 -1
  94. package/agent/components/PageContainer.json +3 -3
  95. package/agent/components/PageCover.json +3 -2
  96. package/agent/components/Pagination.json +1 -1
  97. package/agent/components/PasswordInput.json +1 -1
  98. package/agent/components/PasswordStrength.json +1 -1
  99. package/agent/components/PermissionMatrix.json +1 -1
  100. package/agent/components/PieChart.json +0 -1
  101. package/agent/components/Popover.json +31 -6
  102. package/agent/components/PrefetchLink.json +1 -1
  103. package/agent/components/Progress.json +1 -1
  104. package/agent/components/Prose.json +1 -1
  105. package/agent/components/QrCode.json +1 -1
  106. package/agent/components/Radio.json +0 -1
  107. package/agent/components/RadioGroup.json +2 -2
  108. package/agent/components/RangeTimeline.json +2 -1
  109. package/agent/components/Rating.json +1 -1
  110. package/agent/components/RecordPicker.json +1 -1
  111. package/agent/components/ResizablePanel.json +1 -1
  112. package/agent/components/ResponsiveGrid.json +2 -2
  113. package/agent/components/Reveal.json +3 -3
  114. package/agent/components/ScrollArea.json +2 -2
  115. package/agent/components/SearchInput.json +1 -1
  116. package/agent/components/Segmented.json +1 -1
  117. package/agent/components/Select.json +7 -5
  118. package/agent/components/Separator.json +1 -1
  119. package/agent/components/ServiceCatalogCta.json +0 -1
  120. package/agent/components/ServiceLauncherCard.json +1 -1
  121. package/agent/components/ServiceRolePanel.json +1 -1
  122. package/agent/components/Sheet.json +5 -5
  123. package/agent/components/Sidebar.json +1 -1
  124. package/agent/components/Skeleton.json +26 -12
  125. package/agent/components/Slider.json +2 -2
  126. package/agent/components/SortableList.json +3 -2
  127. package/agent/components/SplitPane.json +1 -1
  128. package/agent/components/StatCard.json +1 -1
  129. package/agent/components/Steps.json +1 -1
  130. package/agent/components/Swatch.json +1 -1
  131. package/agent/components/Switch.json +1 -1
  132. package/agent/components/Table.json +1 -1
  133. package/agent/components/Tabs.json +3 -3
  134. package/agent/components/Text.json +5 -1
  135. package/agent/components/TextDiff.json +5 -4
  136. package/agent/components/Textarea.json +1 -1
  137. package/agent/components/ThemeScope.json +1 -1
  138. package/agent/components/ThoughtChain.json +3 -3
  139. package/agent/components/TimePicker.json +1 -1
  140. package/agent/components/Timeline.json +1 -1
  141. package/agent/components/TimelineGrid.json +5 -4
  142. package/agent/components/Toaster.json +0 -1
  143. package/agent/components/Toggle.json +3 -3
  144. package/agent/components/ToggleGroup.json +1 -1
  145. package/agent/components/Toolbar.json +10 -3
  146. package/agent/components/Tooltip.json +9 -9
  147. package/agent/components/Topbar.json +1 -1
  148. package/agent/components/TopbarItem.json +1 -1
  149. package/agent/components/Transfer.json +2 -2
  150. package/agent/components/Tree.json +1 -1
  151. package/agent/components/TreeSelect.json +1 -1
  152. package/agent/components/TwoFactorSetup.json +1 -1
  153. package/agent/components/Upload.json +1 -1
  154. package/agent/components/UploadCropDialog.json +1 -1
  155. package/agent/components/Welcome.json +3 -3
  156. package/agent/components/formatDate.json +2 -2
  157. package/agent/components/inertiaUpload.json +0 -1
  158. package/agent/components/useZodForm.json +0 -1
  159. package/agent/components-index.json +80 -154
  160. package/agent/components.json +541 -1737
  161. package/agent/index.json +10 -10
  162. package/agent/llms.txt +9 -9
  163. package/agent/patterns/account-recovery-settings.json +1 -1
  164. package/agent/patterns/auth-recovery-panels.json +2 -2
  165. package/agent/patterns/error-pages.json +1 -1
  166. package/agent/patterns/pricing-plans.json +17 -0
  167. package/agent/patterns-index.json +17 -1
  168. package/agent/patterns.json +21 -4
  169. package/agent/rules.json +30 -65
  170. package/agent/tokens.json +27 -57
  171. package/agent/vocabulary.json +3 -3
  172. package/dist/app/app-provider.d.ts +5 -3
  173. package/dist/app/app-provider.js +47 -12
  174. package/dist/app/date-format-labels.d.ts +3 -1
  175. package/dist/app/date-format-labels.js +2 -4
  176. package/dist/app/date-formats.d.ts +21 -2
  177. package/dist/app/date-formats.js +51 -2
  178. package/dist/app/index.d.ts +3 -1
  179. package/dist/app/index.js +5 -0
  180. package/dist/app/locales.d.ts +58 -3
  181. package/dist/app/locales.js +134 -8
  182. package/dist/app/preset.d.ts +25 -0
  183. package/dist/app/preset.js +10 -0
  184. package/dist/app/request-headers.d.ts +3 -3
  185. package/dist/app/request-headers.js +19 -10
  186. package/dist/app/settings-scope.d.ts +54 -0
  187. package/dist/app/settings-scope.js +46 -0
  188. package/dist/app/tenant-theme.js +8 -3
  189. package/dist/app/time-format-labels.d.ts +4 -1
  190. package/dist/app/time-format-labels.js +7 -1
  191. package/dist/app/types.d.ts +10 -2
  192. package/dist/app/use-formatting.d.ts +1 -1
  193. package/dist/components/admin/index.d.ts +1 -1
  194. package/dist/components/admin/index.js +1 -1
  195. package/dist/components/data-display/accordion.d.ts +51 -1
  196. package/dist/components/data-display/accordion.js +247 -1
  197. package/dist/components/data-display/avatar.d.ts +16 -1
  198. package/dist/components/data-display/avatar.js +109 -1
  199. package/dist/components/data-display/credential-reveal.d.ts +9 -2
  200. package/dist/components/data-display/credential-reveal.js +156 -1
  201. package/dist/components/data-display/image.js +5 -3
  202. package/dist/components/data-display/index.d.ts +0 -21
  203. package/dist/components/data-display/index.js +1 -43
  204. package/dist/components/data-display/popover.d.ts +15 -3
  205. package/dist/components/data-display/popover.js +168 -2
  206. package/dist/components/data-entry/branch-scope-picker.d.ts +1 -1
  207. package/dist/components/data-entry/index.d.ts +5 -12
  208. package/dist/components/data-entry/index.js +11 -12
  209. package/dist/components/data-entry/input-otp.d.ts +48 -2
  210. package/dist/components/data-entry/input-otp.js +94 -1
  211. package/dist/components/data-entry/number-input.d.ts +1 -1
  212. package/dist/components/data-entry/password-input.d.ts +38 -2
  213. package/dist/components/data-entry/password-input.js +56 -1
  214. package/dist/components/data-entry/rating.d.ts +38 -2
  215. package/dist/components/data-entry/rating.js +127 -1
  216. package/dist/components/data-entry/segmented.d.ts +94 -2
  217. package/dist/components/data-entry/segmented.js +104 -1
  218. package/dist/components/{ui/tag-input.d.ts → data-entry/select-tags-inline.d.ts} +7 -4
  219. package/dist/components/{ui/tag-input.js → data-entry/select-tags-inline.js} +4 -4
  220. package/dist/components/data-entry/select.js +4 -0
  221. package/dist/components/data-entry/toggle-group.d.ts +108 -2
  222. package/dist/components/data-entry/toggle-group.js +189 -1
  223. package/dist/components/data-entry/toggle.d.ts +86 -2
  224. package/dist/components/data-entry/toggle.js +153 -2
  225. package/dist/components/feedback/alert.d.ts +5 -3
  226. package/dist/components/feedback/alert.js +14 -2
  227. package/dist/components/feedback/index.d.ts +2 -6
  228. package/dist/components/feedback/index.js +1 -13
  229. package/dist/components/feedback/skeleton.d.ts +4 -17
  230. package/dist/components/feedback/skeleton.js +3 -40
  231. package/dist/components/general/index.d.ts +2 -4
  232. package/dist/components/general/index.js +1 -6
  233. package/dist/components/general/typography.d.ts +4 -58
  234. package/dist/components/general/typography.js +7 -141
  235. package/dist/components/layout/aspect-ratio.d.ts +24 -1
  236. package/dist/components/layout/aspect-ratio.js +18 -1
  237. package/dist/components/layout/auth-divider.js +1 -1
  238. package/dist/components/layout/auth-identity.js +6 -2
  239. package/dist/components/layout/centered-shell.d.ts +13 -8
  240. package/dist/components/layout/centered-shell.js +43 -1
  241. package/dist/components/layout/flex.d.ts +1 -1
  242. package/dist/components/layout/flex.js +73 -1
  243. package/dist/components/layout/index.d.ts +1 -13
  244. package/dist/components/layout/index.js +0 -12
  245. package/dist/components/layout/separator.d.ts +25 -2
  246. package/dist/components/layout/separator.js +71 -1
  247. package/dist/components/navigation/{app-setting-toggle.d.ts → app-setting-cycle.d.ts} +3 -4
  248. package/dist/components/navigation/{app-setting-toggle.js → app-setting-cycle.js} +3 -3
  249. package/dist/components/navigation/app-setting-picker.d.ts +6 -2
  250. package/dist/components/navigation/app-setting-picker.js +20 -2
  251. package/dist/components/navigation/index.d.ts +3 -11
  252. package/dist/components/navigation/index.js +1 -9
  253. package/dist/components/navigation/tabs.js +1 -1
  254. package/dist/components/ui/carousel.d.ts +1 -1
  255. package/dist/components/ui/carousel.js +1 -1
  256. package/dist/components/ui/index.d.ts +11 -5
  257. package/dist/components/ui/index.js +5 -5
  258. package/dist/contracts/measurement.json +2 -2
  259. package/dist/email/brand-mark.d.ts +3 -2
  260. package/dist/email/brand-mark.js +1 -1
  261. package/dist/email/tokens.generated.d.ts +6 -6
  262. package/dist/email/tokens.generated.js +6 -6
  263. package/dist/i18n/locale-tags.d.ts +25 -0
  264. package/dist/i18n/locale-tags.js +59 -0
  265. package/dist/i18n/translate.d.ts +20 -3
  266. package/dist/i18n/translate.js +25 -14
  267. package/dist/i18n/use-translation.d.ts +3 -3
  268. package/dist/i18n/use-translation.js +4 -2
  269. package/dist/{components/navigation → lab}/anchor.d.ts +2 -2
  270. package/dist/{components/navigation → lab}/anchor.js +5 -5
  271. package/dist/{components/data-display → lab}/carousel.js +2 -2
  272. package/dist/{components/layout → lab}/draggable-panel.d.ts +8 -8
  273. package/dist/{components/layout → lab}/draggable-panel.js +2 -2
  274. package/dist/{components/data-entry → lab}/emoji-picker.d.ts +2 -2
  275. package/dist/{components/data-entry → lab}/emoji-picker.js +6 -6
  276. package/dist/{components/general → lab}/float-button.d.ts +8 -8
  277. package/dist/{components/general → lab}/float-button.js +7 -7
  278. package/dist/lab/index.d.ts +39 -0
  279. package/dist/lab/index.js +48 -0
  280. package/dist/{components/layout → lab}/legal-document-shell.d.ts +2 -2
  281. package/dist/{components/layout → lab}/legal-document-shell.js +4 -4
  282. package/dist/{components/data-display → lab}/marquee.d.ts +5 -5
  283. package/dist/{components/data-display → lab}/marquee.js +5 -5
  284. package/dist/{components/layout → lab}/masonry.d.ts +2 -2
  285. package/dist/{components/layout → lab}/masonry.js +3 -3
  286. package/dist/{components/navigation → lab}/mega-menu.d.ts +4 -4
  287. package/dist/{components/navigation → lab}/mega-menu.js +2 -2
  288. package/dist/{components/data-display → lab}/org-chart.d.ts +2 -2
  289. package/dist/{components/data-display → lab}/org-chart.js +4 -4
  290. package/dist/{components/layout → lab}/page-cover.d.ts +2 -2
  291. package/dist/{components/layout → lab}/page-cover.js +2 -2
  292. package/dist/{components/data-display → lab}/range-timeline.d.ts +1 -1
  293. package/dist/{components/data-display → lab}/range-timeline.js +6 -6
  294. package/dist/{components/data-entry → lab}/sortable-list.d.ts +2 -2
  295. package/dist/{components/data-entry → lab}/sortable-list.js +3 -3
  296. package/dist/{components/data-display → lab}/text-diff.d.ts +3 -3
  297. package/dist/{components/data-display → lab}/text-diff.js +4 -4
  298. package/dist/{components/data-display → lab}/timeline-grid.d.ts +2 -2
  299. package/dist/{components/data-display → lab}/timeline-grid.js +1 -1
  300. package/dist/lib/control-styles.js +1 -1
  301. package/dist/lib/datetime/format.js +20 -6
  302. package/dist/lib/datetime/sync.d.ts +6 -2
  303. package/dist/lib/datetime/sync.js +14 -18
  304. package/dist/lib/platform.d.ts +1 -1
  305. package/dist/props/components/app.prop.d.ts +28 -13
  306. package/dist/props/components/data-display.prop.d.ts +19 -29
  307. package/dist/props/components/feedback.prop.d.ts +15 -44
  308. package/dist/props/components/general.prop.d.ts +2 -64
  309. package/dist/props/components/index.d.ts +9 -1
  310. package/dist/props/components/layout.prop.d.ts +41 -57
  311. package/dist/props/registry.d.ts +48 -101
  312. package/dist/props/registry.js +45 -129
  313. package/dist/props/vocabulary/index.d.ts +1 -1
  314. package/dist/props/vocabulary/interaction.prop.d.ts +3 -12
  315. package/dist/styles/alert-layout.css +0 -29
  316. package/dist/styles/data-display-layout.css +14 -22
  317. package/dist/styles/fonts/OFL.txt +93 -0
  318. package/dist/styles/form-layout.css +4 -0
  319. package/dist/styles/index.css +0 -2
  320. package/dist/styles/layers.json +44 -179
  321. package/dist/styles/text-layout.css +0 -15
  322. package/dist/styles.css +2 -0
  323. package/dist/themes/godx.css +43 -0
  324. package/dist/themes/godx.d.ts +13 -0
  325. package/dist/themes/godx.js +12 -0
  326. package/dist/tokens/components/feedback.css +0 -6
  327. package/dist/tokens/derived.css +23 -22
  328. package/dist/tokens/foundation.css +4 -6
  329. package/docs/COMPOSITION-VS-COMPONENT.md +58 -33
  330. package/docs/CONSUMER-RULES.md +1 -1
  331. package/docs/CUSTOMER-THEMING.md +17 -53
  332. package/docs/migrations/v32.md +98 -0
  333. package/package.json +58 -19
  334. package/scripts/_agent-setup.mjs +54 -3
  335. package/scripts/brand-accent.generated.mjs +15 -2
  336. package/scripts/cli.mjs +36 -11
  337. package/scripts/codemod.mjs +522 -0
  338. package/scripts/consumer-rule.md +21 -43
  339. package/scripts/postinstall.mjs +10 -47
  340. package/scripts/prune-css.mjs +1 -1
  341. package/scripts/ui-audit.mjs +5 -2
  342. package/dist/components/data-display/chat-bubble.d.ts +0 -30
  343. package/dist/components/data-display/chat-bubble.js +0 -229
  344. package/dist/components/data-display/hover-card.d.ts +0 -1
  345. package/dist/components/data-display/hover-card.js +0 -7
  346. package/dist/components/data-display/thought-chain.d.ts +0 -42
  347. package/dist/components/data-display/thought-chain.js +0 -177
  348. package/dist/components/data-display/thumbnail.d.ts +0 -37
  349. package/dist/components/data-display/thumbnail.js +0 -20
  350. package/dist/components/data-display/welcome.d.ts +0 -26
  351. package/dist/components/data-display/welcome.js +0 -37
  352. package/dist/components/data-entry/attachments.d.ts +0 -19
  353. package/dist/components/data-entry/attachments.js +0 -366
  354. package/dist/components/data-entry/chat-composer.d.ts +0 -51
  355. package/dist/components/data-entry/chat-composer.js +0 -200
  356. package/dist/components/data-entry/chat-suggestion.d.ts +0 -28
  357. package/dist/components/data-entry/chat-suggestion.js +0 -309
  358. package/dist/components/data-entry/tag-input.d.ts +0 -2
  359. package/dist/components/data-entry/tag-input.js +0 -5
  360. package/dist/components/feedback/banner.d.ts +0 -21
  361. package/dist/components/feedback/banner.js +0 -19
  362. package/dist/components/feedback/callout.d.ts +0 -23
  363. package/dist/components/feedback/callout.js +0 -42
  364. package/dist/components/layout/auth-shell.d.ts +0 -10
  365. package/dist/components/layout/auth-shell.js +0 -42
  366. package/dist/components/layout/space-compact.d.ts +0 -65
  367. package/dist/components/layout/space-compact.js +0 -52
  368. package/dist/components/navigation/conversations.d.ts +0 -39
  369. package/dist/components/navigation/conversations.js +0 -371
  370. package/dist/components/ui/accordion.d.ts +0 -51
  371. package/dist/components/ui/accordion.js +0 -254
  372. package/dist/components/ui/aspect-ratio.d.ts +0 -24
  373. package/dist/components/ui/aspect-ratio.js +0 -21
  374. package/dist/components/ui/avatar.d.ts +0 -16
  375. package/dist/components/ui/avatar.js +0 -115
  376. package/dist/components/ui/credential-reveal.d.ts +0 -9
  377. package/dist/components/ui/credential-reveal.js +0 -160
  378. package/dist/components/ui/hover-card.d.ts +0 -47
  379. package/dist/components/ui/hover-card.js +0 -205
  380. package/dist/components/ui/input-otp.d.ts +0 -48
  381. package/dist/components/ui/input-otp.js +0 -101
  382. package/dist/components/ui/password-input.d.ts +0 -38
  383. package/dist/components/ui/password-input.js +0 -60
  384. package/dist/components/ui/rating.d.ts +0 -38
  385. package/dist/components/ui/rating.js +0 -131
  386. package/dist/components/ui/segmented.d.ts +0 -94
  387. package/dist/components/ui/segmented.js +0 -108
  388. package/dist/components/ui/separator.d.ts +0 -25
  389. package/dist/components/ui/separator.js +0 -74
  390. package/dist/components/ui/toggle-group.d.ts +0 -108
  391. package/dist/components/ui/toggle-group.js +0 -194
  392. package/dist/components/ui/toggle.d.ts +0 -86
  393. package/dist/components/ui/toggle.js +0 -156
  394. package/docs/CANONICAL-CONTRACTS.md +0 -206
  395. package/docs/COMPONENTS.md +0 -163
  396. package/docs/DATETIME.md +0 -78
  397. package/docs/DEVELOPMENT.md +0 -269
  398. package/docs/FRAME-A11Y-CI.md +0 -287
  399. package/docs/FRAME-COVERAGE-LEDGER.md +0 -123
  400. package/docs/FRAME-COVERAGE-REPORT.md +0 -228
  401. package/docs/FRAME-COVERAGE-STANDARD.md +0 -65
  402. package/docs/FRAME-COVERAGE.md +0 -29
  403. package/docs/MEASUREMENT-CONTRACT.md +0 -109
  404. package/docs/PROPS-REGISTRY.md +0 -61
  405. package/docs/PROPS-VOCABULARY.md +0 -100
  406. package/docs/REGISTRY.md +0 -70
  407. package/docs/TESTING.md +0 -107
  408. package/docs/THEME-API-COVERAGE.md +0 -538
  409. package/docs/WHAT-BELONGS-HERE.md +0 -179
  410. package/docs/asset-modules.d.ts +0 -53
  411. package/docs/assets/cover-terrain.svg +0 -6
  412. package/docs/assets/portrait-amber.svg +0 -5
  413. package/docs/assets/portrait-clay.svg +0 -5
  414. package/docs/assets/portrait-indigo.svg +0 -5
  415. package/docs/assets/portrait-iris.svg +0 -5
  416. package/docs/assets/portrait-moss.svg +0 -5
  417. package/docs/assets/portrait-plum.svg +0 -5
  418. package/docs/assets/portrait-slate.svg +0 -5
  419. package/docs/assets/service-mark-rose.svg +0 -6
  420. package/docs/assets/service-mark-teal.svg +0 -5
  421. package/docs/assets/shot-landscape.svg +0 -12
  422. package/docs/assets/shot-portrait.svg +0 -10
  423. package/docs/assets/tcgm/card-1.svg +0 -1
  424. package/docs/assets/tcgm/card-2.svg +0 -1
  425. package/docs/assets/tcgm/card-3.svg +0 -1
  426. package/docs/assets/tcgm/card-4.svg +0 -1
  427. package/docs/assets/tcgm/card-5.svg +0 -1
  428. package/docs/assets/tcgm/card-6.svg +0 -1
  429. package/docs/assets/tcgm/hero-prism.svg +0 -1
  430. package/docs/assets/tcgm/scene-1.svg +0 -1
  431. package/docs/assets/tcgm/scene-2.svg +0 -1
  432. package/docs/assets/tcgm/scene-3.svg +0 -1
  433. package/docs/assets/tcgm/scene-4.svg +0 -1
  434. package/docs/assets/tcgm/scene-5.svg +0 -1
  435. package/docs/assets/tcgm/tcgm-lockup-color.svg +0 -1
  436. package/docs/assets/tcgm/tcgm-symbol-color.svg +0 -1
  437. package/docs/charts/cjk-category-axis.tsx +0 -81
  438. package/docs/charts/compact-bar-trend.tsx +0 -327
  439. package/docs/charts/size-tiers.tsx +0 -192
  440. package/docs/data-display/accordion.tsx +0 -99
  441. package/docs/data-display/avatar.tsx +0 -502
  442. package/docs/data-display/badge.tsx +0 -335
  443. package/docs/data-display/card/examples/detail-panel.tsx +0 -106
  444. package/docs/data-display/card/examples/tab-list.tsx +0 -97
  445. package/docs/data-display/card/index.md +0 -3
  446. package/docs/data-display/card/index.tsx +0 -390
  447. package/docs/data-display/carousel.tsx +0 -160
  448. package/docs/data-display/charts.tsx +0 -278
  449. package/docs/data-display/chat-bubble.tsx +0 -397
  450. package/docs/data-display/code-block.tsx +0 -188
  451. package/docs/data-display/collapsible.tsx +0 -162
  452. package/docs/data-display/credential-reveal.tsx +0 -148
  453. package/docs/data-display/data-table/examples/antd-parity.tsx +0 -257
  454. package/docs/data-display/data-table/examples/approval-queue.tsx +0 -212
  455. package/docs/data-display/data-table/examples/grid-features.tsx +0 -158
  456. package/docs/data-display/data-table/examples/list-page.tsx +0 -175
  457. package/docs/data-display/data-table/examples/selectable-inbox.tsx +0 -113
  458. package/docs/data-display/data-table/examples/server-paged.tsx +0 -179
  459. package/docs/data-display/data-table/examples/striped-list.tsx +0 -173
  460. package/docs/data-display/data-table/index.md +0 -9
  461. package/docs/data-display/data-table/index.tsx +0 -407
  462. package/docs/data-display/descriptions.tsx +0 -263
  463. package/docs/data-display/empty-state.tsx +0 -164
  464. package/docs/data-display/feature-list.tsx +0 -159
  465. package/docs/data-display/hover-card.tsx +0 -181
  466. package/docs/data-display/image.tsx +0 -170
  467. package/docs/data-display/legend.tsx +0 -158
  468. package/docs/data-display/list-row.tsx +0 -441
  469. package/docs/data-display/markdown.tsx +0 -86
  470. package/docs/data-display/marquee.tsx +0 -254
  471. package/docs/data-display/org-chart.tsx +0 -165
  472. package/docs/data-display/permission-matrix.tsx +0 -188
  473. package/docs/data-display/popover-touch.tsx +0 -27
  474. package/docs/data-display/popover.tsx +0 -331
  475. package/docs/data-display/progress.tsx +0 -162
  476. package/docs/data-display/prose.tsx +0 -169
  477. package/docs/data-display/qr-code.tsx +0 -68
  478. package/docs/data-display/scroll-area.tsx +0 -420
  479. package/docs/data-display/service-launcher-card.tsx +0 -445
  480. package/docs/data-display/stat-card.tsx +0 -354
  481. package/docs/data-display/swatch.tsx +0 -107
  482. package/docs/data-display/table.tsx +0 -362
  483. package/docs/data-display/text-diff.tsx +0 -89
  484. package/docs/data-display/thought-chain.tsx +0 -176
  485. package/docs/data-display/thumbnail.tsx +0 -128
  486. package/docs/data-display/timeline-grid.tsx +0 -119
  487. package/docs/data-display/timeline.tsx +0 -671
  488. package/docs/data-display/touch-actions.tsx +0 -36
  489. package/docs/data-display/tree.tsx +0 -724
  490. package/docs/data-display/welcome.tsx +0 -115
  491. package/docs/data-entry/attachments.tsx +0 -160
  492. package/docs/data-entry/block-editor.tsx +0 -105
  493. package/docs/data-entry/branch-scope-picker.tsx +0 -128
  494. package/docs/data-entry/calendar.tsx +0 -226
  495. package/docs/data-entry/cascader.tsx +0 -380
  496. package/docs/data-entry/chat-composer.tsx +0 -619
  497. package/docs/data-entry/chat-suggestion.tsx +0 -301
  498. package/docs/data-entry/checkbox.tsx +0 -256
  499. package/docs/data-entry/color-picker.tsx +0 -189
  500. package/docs/data-entry/command-palette.tsx +0 -179
  501. package/docs/data-entry/command.tsx +0 -341
  502. package/docs/data-entry/country-picker-recipe.tsx +0 -175
  503. package/docs/data-entry/date-picker.tsx +0 -452
  504. package/docs/data-entry/emoji-picker.tsx +0 -35
  505. package/docs/data-entry/form/examples/employee-settings.tsx +0 -267
  506. package/docs/data-entry/form/examples/invoice-form.tsx +0 -387
  507. package/docs/data-entry/form-dynamic-fields.tsx +0 -199
  508. package/docs/data-entry/form-field/examples/a11y-contract.tsx +0 -242
  509. package/docs/data-entry/form-field/examples/create-form.tsx +0 -107
  510. package/docs/data-entry/form-field/index.md +0 -8
  511. package/docs/data-entry/form-field/index.tsx +0 -337
  512. package/docs/data-entry/form-inertia.tsx +0 -80
  513. package/docs/data-entry/form-root.tsx +0 -112
  514. package/docs/data-entry/form.tsx +0 -1498
  515. package/docs/data-entry/input-otp.tsx +0 -258
  516. package/docs/data-entry/input.tsx +0 -796
  517. package/docs/data-entry/label.tsx +0 -102
  518. package/docs/data-entry/markdown-editor.tsx +0 -69
  519. package/docs/data-entry/number-input.tsx +0 -279
  520. package/docs/data-entry/password-input.tsx +0 -102
  521. package/docs/data-entry/password-strength.tsx +0 -99
  522. package/docs/data-entry/radio-group.tsx +0 -316
  523. package/docs/data-entry/rating.tsx +0 -91
  524. package/docs/data-entry/record-picker.tsx +0 -209
  525. package/docs/data-entry/search-input.tsx +0 -121
  526. package/docs/data-entry/segmented-in-filter-row.tsx +0 -60
  527. package/docs/data-entry/segmented.tsx +0 -300
  528. package/docs/data-entry/select-async-contracts.tsx +0 -108
  529. package/docs/data-entry/select-matrix.tsx +0 -209
  530. package/docs/data-entry/select.tsx +0 -547
  531. package/docs/data-entry/slider.tsx +0 -212
  532. package/docs/data-entry/sortable-list.tsx +0 -76
  533. package/docs/data-entry/switch.tsx +0 -314
  534. package/docs/data-entry/tag-input.tsx +0 -145
  535. package/docs/data-entry/textarea.tsx +0 -249
  536. package/docs/data-entry/time-picker.tsx +0 -187
  537. package/docs/data-entry/time-range-picker.tsx +0 -55
  538. package/docs/data-entry/toggle-count.tsx +0 -348
  539. package/docs/data-entry/toggle-group.tsx +0 -438
  540. package/docs/data-entry/toggle.tsx +0 -217
  541. package/docs/data-entry/transfer.tsx +0 -115
  542. package/docs/data-entry/tree-select.tsx +0 -204
  543. package/docs/data-entry/upload-crop-dialog.tsx +0 -109
  544. package/docs/data-entry/upload.tsx +0 -310
  545. package/docs/feedback/alert-dialog.tsx +0 -270
  546. package/docs/feedback/alert.tsx +0 -248
  547. package/docs/feedback/auth-expiry.tsx +0 -104
  548. package/docs/feedback/banner.tsx +0 -183
  549. package/docs/feedback/callout.tsx +0 -220
  550. package/docs/feedback/danger-confirm.tsx +0 -91
  551. package/docs/feedback/dialog-touch.tsx +0 -24
  552. package/docs/feedback/dialog.tsx +0 -373
  553. package/docs/feedback/sheet.tsx +0 -510
  554. package/docs/feedback/skeleton.tsx +0 -168
  555. package/docs/feedback/toast.tsx +0 -135
  556. package/docs/feedback/tooltip.tsx +0 -171
  557. package/docs/feedback/two-factor-setup.tsx +0 -68
  558. package/docs/foundation/_email-specimen.ts +0 -274
  559. package/docs/foundation/_theme-editor-scope.ts +0 -222
  560. package/docs/foundation/colors.tsx +0 -207
  561. package/docs/foundation/density.tsx +0 -242
  562. package/docs/foundation/email-tokens.tsx +0 -323
  563. package/docs/foundation/radius-shadow.tsx +0 -154
  564. package/docs/foundation/spacing.tsx +0 -216
  565. package/docs/foundation/theme-editor.tsx +0 -654
  566. package/docs/foundation/typography.tsx +0 -147
  567. package/docs/general/actions.tsx +0 -175
  568. package/docs/general/activity.tsx +0 -289
  569. package/docs/general/button/examples/destructive-confirm.tsx +0 -90
  570. package/docs/general/button/examples/form-actions.tsx +0 -87
  571. package/docs/general/button/examples/toolbar.tsx +0 -160
  572. package/docs/general/button/index.md +0 -16
  573. package/docs/general/button/index.tsx +0 -236
  574. package/docs/general/float-button.tsx +0 -133
  575. package/docs/general/icon.tsx +0 -217
  576. package/docs/general/logo.tsx +0 -194
  577. package/docs/general/reveal.tsx +0 -309
  578. package/docs/general/typography.tsx +0 -542
  579. package/docs/i18n/messages/en.json +0 -1715
  580. package/docs/i18n/messages/ja.json +0 -1708
  581. package/docs/i18n/messages/vi.json +0 -1708
  582. package/docs/layout/account-chip.tsx +0 -72
  583. package/docs/layout/admin-collection.tsx +0 -122
  584. package/docs/layout/affix.tsx +0 -209
  585. package/docs/layout/app-launcher.tsx +0 -211
  586. package/docs/layout/app-shell-arrangements.tsx +0 -225
  587. package/docs/layout/app-shell-narrow-bar.tsx +0 -205
  588. package/docs/layout/app-shell-states.tsx +0 -171
  589. package/docs/layout/app-shell.tsx +0 -395
  590. package/docs/layout/aspect-ratio.tsx +0 -135
  591. package/docs/layout/auth-account-summary.tsx +0 -103
  592. package/docs/layout/auth-divider.tsx +0 -28
  593. package/docs/layout/auth-footer.tsx +0 -37
  594. package/docs/layout/auth-identity.tsx +0 -70
  595. package/docs/layout/auth-recovery/examples/mfa-challenge.md +0 -41
  596. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +0 -254
  597. package/docs/layout/auth-recovery/examples/mobile-390.md +0 -25
  598. package/docs/layout/auth-recovery/examples/mobile-390.tsx +0 -82
  599. package/docs/layout/auth-recovery/examples/password-recovery.md +0 -24
  600. package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -197
  601. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +0 -27
  602. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +0 -156
  603. package/docs/layout/auth-recovery/index.md +0 -140
  604. package/docs/layout/auth-recovery/index.tsx +0 -96
  605. package/docs/layout/auth-shell-context.tsx +0 -103
  606. package/docs/layout/auth-shell-device.tsx +0 -112
  607. package/docs/layout/auth-shell-registration.tsx +0 -338
  608. package/docs/layout/auth-shell-variants.tsx +0 -143
  609. package/docs/layout/auth-shell.tsx +0 -59
  610. package/docs/layout/auth-stack.tsx +0 -40
  611. package/docs/layout/centered-shell.tsx +0 -102
  612. package/docs/layout/draggable-panel.tsx +0 -127
  613. package/docs/layout/error-surface/examples/application-403.tsx +0 -84
  614. package/docs/layout/error-surface/examples/application-404.tsx +0 -77
  615. package/docs/layout/error-surface/examples/system-500.tsx +0 -47
  616. package/docs/layout/error-surface/examples/system-503.tsx +0 -48
  617. package/docs/layout/error-surface/index.md +0 -153
  618. package/docs/layout/error-surface/index.tsx +0 -239
  619. package/docs/layout/flex.tsx +0 -444
  620. package/docs/layout/legal-document-shell/_data.ts +0 -110
  621. package/docs/layout/legal-document-shell/examples/desktop-1440.md +0 -12
  622. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +0 -83
  623. package/docs/layout/legal-document-shell/examples/mobile-390.md +0 -22
  624. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +0 -70
  625. package/docs/layout/legal-document-shell/examples/tablet-1024.md +0 -3
  626. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +0 -84
  627. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +0 -18
  628. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +0 -61
  629. package/docs/layout/legal-document-shell/index.md +0 -51
  630. package/docs/layout/legal-document-shell/index.tsx +0 -101
  631. package/docs/layout/masonry.tsx +0 -291
  632. package/docs/layout/master-detail.tsx +0 -390
  633. package/docs/layout/mobile-shell.tsx +0 -106
  634. package/docs/layout/nav-list.tsx +0 -584
  635. package/docs/layout/org-switcher.tsx +0 -131
  636. package/docs/layout/page-container.tsx +0 -1020
  637. package/docs/layout/page-cover.tsx +0 -56
  638. package/docs/layout/resizable-panel.tsx +0 -419
  639. package/docs/layout/responsive-grid.tsx +0 -403
  640. package/docs/layout/separator.tsx +0 -327
  641. package/docs/layout/service-role-panel.tsx +0 -144
  642. package/docs/layout/sidebar.tsx +0 -689
  643. package/docs/layout/space-compact.tsx +0 -202
  644. package/docs/layout/split-pane.tsx +0 -532
  645. package/docs/layout/topbar-item.tsx +0 -233
  646. package/docs/layout/topbar.tsx +0 -360
  647. package/docs/navigation/anchor.tsx +0 -295
  648. package/docs/navigation/app-setting-picker.tsx +0 -178
  649. package/docs/navigation/app-setting-toggle.tsx +0 -111
  650. package/docs/navigation/breadcrumb.tsx +0 -207
  651. package/docs/navigation/card-tabs.tsx +0 -344
  652. package/docs/navigation/conversations.tsx +0 -176
  653. package/docs/navigation/dropdown-menu.tsx +0 -345
  654. package/docs/navigation/filter-bar.tsx +0 -247
  655. package/docs/navigation/mega-menu-panel.tsx +0 -86
  656. package/docs/navigation/mega-menu.tsx +0 -254
  657. package/docs/navigation/pagination.tsx +0 -293
  658. package/docs/navigation/steps.tsx +0 -315
  659. package/docs/navigation/tabs-rtl.tsx +0 -28
  660. package/docs/navigation/tabs.tsx +0 -755
  661. package/docs/navigation/toolbar.tsx +0 -347
  662. package/docs/providers/app-provider.tsx +0 -191
  663. package/docs/providers/format-date.tsx +0 -230
  664. package/docs/providers/theme-scope.tsx +0 -186
  665. package/docs/query/button-refetch.tsx +0 -161
  666. package/docs/query/data-state.tsx +0 -262
  667. package/docs/query/infinite-query-state.tsx +0 -97
  668. package/docs/query/mutation-feedback.tsx +0 -128
  669. package/docs/query/touch-actions.tsx +0 -68
  670. package/docs/react-router/prefetch-link.tsx +0 -262
  671. package/docs/roadmap/ai-chat-components.md +0 -206
  672. package/docs/roadmap/antd-parity.md +0 -155
  673. package/docs/roadmap/badge-tag-chip-count.md +0 -172
  674. package/docs/roadmap/list-masonry.md +0 -159
  675. package/docs/roadmap/parity-audit-data-display-feedback.md +0 -567
  676. package/docs/roadmap/parity-audit-data-entry.md +0 -368
  677. package/docs/roadmap/parity-audit-layout-navigation-general.md +0 -459
  678. package/docs/roadmap/parity-backlog.md +0 -77
  679. package/docs/roadmap/tree-components.md +0 -151
  680. package/docs/roadmap/website-components.md +0 -813
  681. package/docs/showcase/acme-portal.tsx +0 -461
  682. package/docs/showcase/acme-website.tsx +0 -499
  683. package/docs/showcase/caimono-price-comparison.tsx +0 -919
  684. package/docs/showcase/case1-warehouse-dashboard.tsx +0 -358
  685. package/docs/showcase/case2-employee-me.tsx +0 -438
  686. package/docs/showcase/case3-approval-workflow.tsx +0 -531
  687. package/docs/showcase/case4-login.tsx +0 -312
  688. package/docs/showcase/case5-shift-calendar.tsx +0 -702
  689. package/docs/showcase/case6-agency-handy.tsx +0 -1120
  690. package/docs/showcase/futurelastic-web.tsx +0 -441
  691. package/docs/showcase/marketing-page.tsx +0 -895
  692. package/docs/showcase/org-switcher.tsx +0 -320
  693. package/docs/showcase/permission-matrix.tsx +0 -354
  694. package/docs/showcase/public-landing.tsx +0 -210
  695. package/docs/showcase/settings-account-sections.tsx +0 -559
  696. package/docs/showcase/settings-security-mfa.tsx +0 -145
  697. package/docs/showcase/table-approval-queue.tsx +0 -199
  698. package/docs/showcase/table-bulk-actions.tsx +0 -468
  699. package/docs/showcase/table-compact-kintone.tsx +0 -438
  700. package/docs/showcase/table-conditional-format.tsx +0 -367
  701. package/docs/showcase/table-crud-list.tsx +0 -544
  702. package/docs/showcase/table-density.tsx +0 -349
  703. package/docs/showcase/table-expandable-rows.tsx +0 -496
  704. package/docs/showcase/table-filter-chips.tsx +0 -468
  705. package/docs/showcase/table-footer-totals.tsx +0 -328
  706. package/docs/showcase/table-grouped-subtotals.tsx +0 -398
  707. package/docs/showcase/table-master-detail.tsx +0 -482
  708. package/docs/showcase/table-pagination.tsx +0 -409
  709. package/docs/showcase/table-states.tsx +0 -371
  710. package/docs/showcase/table-sticky-columns.tsx +0 -377
  711. package/docs/showcase/table-tree-rows.tsx +0 -451
  712. package/docs/showcase/table-view-tabs.tsx +0 -488
  713. package/docs/showcase/tcgm-website.tsx +0 -1047
  714. package/docs/showcase/tenant-brand-color.tsx +0 -338
  715. package/docs/showcase/theme-customization.tsx +0 -1292
  716. package/docs/showcase/theme-lab.tsx +0 -2125
  717. package/docs/themes/flat.css +0 -466
  718. package/docs/themes/glassmorphism.css +0 -960
  719. package/docs/themes/index.ts +0 -219
  720. package/docs/themes/neubrutalism.css +0 -481
  721. /package/dist/components/navigation/{filter-bar.d.ts → toolbar.d.ts} +0 -0
  722. /package/dist/components/navigation/{filter-bar.js → toolbar.js} +0 -0
  723. /package/dist/{components/data-display → lab}/carousel.d.ts +0 -0
  724. /package/dist/{components/data-entry → lab}/emoji-data.d.ts +0 -0
  725. /package/dist/{components/data-entry → lab}/emoji-data.js +0 -0
  726. /package/dist/{components/data-display → lab}/marquee-reveal.d.ts +0 -0
  727. /package/dist/{components/data-display → lab}/marquee-reveal.js +0 -0
@@ -1,1708 +0,0 @@
1
- {
2
- "textExamples": {
3
- "preservedText": "Văn bản thuần",
4
- "sampleText": "Dòng đầu\n Dòng thụt vào\n\nDòng cuối",
5
- "breakTitle": "break · ngắt dòng một định danh",
6
- "breakDescription": "Định danh không có chỗ ngắt — địa chỉ email, mã giảm giá, ID đăng nhập — dùng break=\"anywhere\", và cột vẫn nằm gọn trong bề ngang màn hình kể cả trong ô của bảng. whitespace=\"pre-wrap\" dành cho ký tự xuống dòng do người nhập; nó không ngắt được một định danh trong ô bảng.",
7
- "breakColumnOwner": "Phụ trách",
8
- "breakColumnEmail": "Địa chỉ email",
9
- "breakSampleName": "Sato",
10
- "ellipsisTitle": "ellipsis · toàn văn trong tooltip khi bị cắt",
11
- "ellipsisDescription": "ellipsis={{ tooltip: true }} giữ một dòng và hiện toàn văn khi rê chuột và khi bàn phím đưa tiêu điểm tới điều khiển chứa nó (liên kết, mục cây, nút sắp xếp). Tiêu đề vừa chỗ thì không có tooltip, và Text không bao giờ tự thành một điểm dừng Tab.",
12
- "ellipsisPlain": "Text thường",
13
- "ellipsisLink": "Text asChild · liên kết",
14
- "ellipsisTree": "titleRender của Tree",
15
- "ellipsisTable": "Bộ kiểm thử",
16
- "ellipsisBreadcrumb": "Breadcrumb có cắt chữ",
17
- "ellipsisCrumbHome": "Trang chủ",
18
- "ellipsisLongTitle": "Kiểm thử tích hợp quý 3 · mô-đun thanh toán · kịch bản xuất lại hoá đơn và rà soát tiêu chí nghiệm thu",
19
- "ellipsisShortTitle": "Kiểm thử nhanh đăng nhập",
20
- "ellipsisLongHeader": "Tên lần chạy gần nhất (bản ứng viên 2026-09)"
21
- },
22
- "themeShowcase": {
23
- "page": {
24
- "title": "Tùy biến giao diện linh hoạt",
25
- "subtitle": "Một hạt giống làm cả hệ thống đổi màu. Chọn một bảng màu và mọi điều khiển, bề mặt, dấu hiệu và vòng focus trên bảng bên dưới sẽ được vẽ lại tại chỗ."
26
- },
27
- "bar": {
28
- "title": "Giao diện",
29
- "description": "Các chip đặt hạt giống --primary trong một phạm vi. Không sửa component, không tách stylesheet, không ghi đè vai trò.",
30
- "paletteLabel": "Bảng màu",
31
- "cornerLabel": "Bo góc",
32
- "customLabel": "Hạt giống tự chọn",
33
- "customHint": "Bất kỳ mã hex nào. Các bậc hover, nhấn, viền, focus và liên kết đều suy ra từ đó.",
34
- "identityNote": "Màu nhận diện cố ý đứng yên: đổi màu hành động của một tenant không làm nhuộm lại logo của họ."
35
- },
36
- "palette": {
37
- "godx": "GoDX",
38
- "indigo": "Chàm",
39
- "teal": "Mòng két",
40
- "amber": "Hổ phách",
41
- "rose": "Hồng đào",
42
- "custom": "Tự chọn"
43
- },
44
- "corner": {
45
- "sharp": "Vuông",
46
- "default": "Mặc định",
47
- "soft": "Mềm"
48
- },
49
- "tabs": {
50
- "components": "Component",
51
- "dashboard": "Bảng điều khiển"
52
- },
53
- "form": {
54
- "email": "Email công việc",
55
- "emailHint": "Chỉ dùng cho thông báo phát hành.",
56
- "emailPlaceholder": "you@ops.example.jp",
57
- "handle": "Tên định danh",
58
- "regions": "Khu vực",
59
- "regionsPlaceholder": "Chọn khu vực",
60
- "regionsEmpty": "Chưa chọn khu vực nào.",
61
- "labels": "Nhãn",
62
- "labelsPlaceholder": "Thêm nhãn",
63
- "plan": "Gói",
64
- "releaseDate": "Ngày phát hành",
65
- "channels": "Kênh thông báo",
66
- "cadence": "Tần suất",
67
- "density": "Mật độ dòng",
68
- "autoDeploy": "Triển khai khi merge",
69
- "autoDeployHint": "Pipeline xanh sẽ tự đưa lên staging.",
70
- "freeze": "Đóng băng phát hành",
71
- "budget": "Ngân sách lỗi · {value}",
72
- "syncing": "Đang đồng bộ sổ phát hành"
73
- },
74
- "plan": {
75
- "starter": "Khởi đầu",
76
- "standard": "Tiêu chuẩn",
77
- "scale": "Mở rộng"
78
- },
79
- "channel": {
80
- "email": "Email",
81
- "escalation": "Chuyển lên ca trực khi một bản phát hành nằm ở trạng thái xét duyệt quá một ngày làm việc, tính cả cuối tuần và ngày lễ của khu vực phụ trách",
82
- "escalationHint": "Gửi cho ca trực, không gửi cho cá nhân.",
83
- "pager": "Máy nhắn tin"
84
- },
85
- "cadence": {
86
- "daily": "Hằng ngày",
87
- "weekly": "Hằng tuần",
88
- "manual": "Thủ công"
89
- },
90
- "density": {
91
- "compact": "Gọn",
92
- "default": "Mặc định",
93
- "comfortable": "Thoáng"
94
- },
95
- "steps": {
96
- "caption": "Tiến độ phát hành",
97
- "finished": "Hoàn tất",
98
- "finishedHint": "Đã ký và lưu trữ hiện vật.",
99
- "inProcess": "Đang xử lý",
100
- "waiting": "Chờ",
101
- "waitingHint": "Đang chờ kiểm tra tương phản cho hạt giống mới."
102
- },
103
- "progress": {
104
- "rollout": "Triển khai · {value}",
105
- "quota": "Phút build · {value}",
106
- "done": "Xong"
107
- },
108
- "legend": {
109
- "failed": "Thất bại",
110
- "review": "Đang xét duyệt",
111
- "shipped": "Đã phát hành"
112
- },
113
- "status": {
114
- "caption": "Dấu hiệu trạng thái",
115
- "success": "Thành công",
116
- "error": "Lỗi",
117
- "default": "Mặc định",
118
- "processing": "Đang xử lý",
119
- "warning": "Cảnh báo",
120
- "seed": "Hạt giống"
121
- },
122
- "action": {
123
- "primary": "Triển khai",
124
- "secondary": "So sánh",
125
- "outline": "Quay lui",
126
- "dashed": "Thêm bước",
127
- "ghost": "Nhật ký",
128
- "deploying": "Đang triển khai",
129
- "discard": "Loại bỏ bản ứng viên này"
130
- },
131
- "confirm": {
132
- "trigger": "Xóa bản phát hành",
133
- "title": "Xóa bản phát hành này?",
134
- "description": "Hiện vật vẫn nằm trong registry. Hồ sơ phát hành và các phê duyệt thì không.",
135
- "cancel": "Giữ lại",
136
- "ok": "Xóa"
137
- },
138
- "avatars": {
139
- "caption": "12 người duyệt"
140
- },
141
- "rating": {
142
- "1": "Không dùng được",
143
- "2": "Còn thô",
144
- "3": "Chấp nhận được",
145
- "4": "Tốt",
146
- "5": "Sẵn sàng phát hành"
147
- },
148
- "otp": {
149
- "title": "Xác minh thiết bị này",
150
- "description": "Nhập mã sáu chữ số từ ứng dụng xác thực của bạn.",
151
- "field": "Mã xác minh",
152
- "verify": "Xác minh"
153
- },
154
- "signup": {
155
- "title": "Tạo tài khoản",
156
- "description": "Một tài khoản dùng cho mọi môi trường bạn được cấp quyền.",
157
- "email": "Email công việc",
158
- "password": "Mật khẩu",
159
- "submit": "Tạo tài khoản",
160
- "or": "hoặc",
161
- "sso": "Tiếp tục bằng đăng nhập một lần",
162
- "passkey": "Tiếp tục bằng passkey"
163
- },
164
- "notify": {
165
- "title": "Thông báo",
166
- "longTitle": "Lời mời tham gia nhóm công tác về Độ tin cậy nền tảng và Quản trị phát hành đang chờ bạn trả lời",
167
- "longMeta": "2026-09-12 09:12 UTC · hết hạn sau 3 ngày",
168
- "open": "Mở",
169
- "bareTitle": "Đã phát hành hóa đơn"
170
- },
171
- "qr": {
172
- "caption": "Đăng ký ứng dụng xác thực",
173
- "label": "Mã thiết lập xác thực hai yếu tố",
174
- "manualKey": "Khóa thiết lập thủ công"
175
- },
176
- "welcome": {
177
- "title": "Bắt đầu từ một mã hex",
178
- "description": "Đưa cho trình tạo một màu thương hiệu, nó viết tệp hạt giống, đo mọi cặp tương phản và từ chối những giá trị không đạt.",
179
- "dismiss": "Đóng"
180
- },
181
- "chat": {
182
- "assistant": "Trợ lý",
183
- "sent": "09:41",
184
- "answer": "Hạt giống được giới hạn trong bảng, nên phần còn lại của tài liệu vẫn giữ bảng màu của nó.",
185
- "bare": "Còn vòng focus thì sao?"
186
- },
187
- "thought": {
188
- "label": "Cách hạt giống được áp dụng",
189
- "read": "Đọc phạm vi",
190
- "readHint": "[data-godx-theme] trên gốc của bảng",
191
- "contrast": "Đo từng cặp",
192
- "contrastBody": "Nhãn trên nền tô và nền tô trên canvas, ở cả hai giao diện, theo WCAG 2.2 SC 1.4.3 và SC 1.4.11.",
193
- "write": "Viết giá trị dự phòng cho email"
194
- },
195
- "carousel": {
196
- "caption": "Các bảng màu đã phát hành"
197
- },
198
- "alert": {
199
- "title": "Lưu ý",
200
- "description": "Hạt giống tự chọn được áp dụng đúng như đã nhập. CSS không có cách nào nâng một hạt giống sáng lên sống lưng tối, nên một thương hiệu cần đọc được trên cả hai canvas phải có giá trị thứ hai được đo trên nền tối.",
201
- "okTitle": "Đã kiểm tra tương phản"
202
- },
203
- "timeline": {
204
- "seedApplied": "Đã áp dụng hạt giống",
205
- "scope": "Phạm vi bảng",
206
- "contrastQueued": "Đã xếp hàng kiểm tra tương phản"
207
- },
208
- "dashboard": {
209
- "releases": "Số bản phát hành",
210
- "releasesHint": "30 ngày gần nhất",
211
- "revenue": "Doanh thu ghi nhận",
212
- "failureRate": "Tỷ lệ thay đổi thất bại",
213
- "failureHint": "Càng thấp càng tốt",
214
- "seatsLabel": "Khu vực trong phạm vi",
215
- "seats": {
216
- "other": "{count} khu vực"
217
- },
218
- "mix": "Cơ cấu phát hành",
219
- "activity": "Hoạt động gần đây",
220
- "environment": "Môi trường",
221
- "owner": "Phụ trách",
222
- "ledger": "Tham chiếu sổ",
223
- "table": "Danh sách phát hành",
224
- "tableHint": "Phụ trách, khu vực và số tiền được định dạng theo ngôn ngữ đang dùng.",
225
- "updated": "Cập nhật {date}",
226
- "rotate": "Xoay khóa"
227
- },
228
- "table": {
229
- "id": "Bản phát hành",
230
- "owner": "Phụ trách",
231
- "region": "Khu vực",
232
- "ref": "Tham chiếu",
233
- "status": "Trạng thái",
234
- "amount": "Số tiền",
235
- "noRef": "Chưa đặt"
236
- },
237
- "releaseStatus": {
238
- "shipped": "Đã phát hành",
239
- "review": "Đang xét duyệt",
240
- "draft": "Bản nháp",
241
- "failed": "Thất bại"
242
- }
243
- },
244
- "themeEditor": {
245
- "title": "Trình sửa theme",
246
- "subtitle": "Một màu hạt giống vào, cả bộ thương hiệu ra, được đo chứ không phải khẳng định.",
247
- "unreadable": {
248
- "title": "Không đọc được stylesheet token",
249
- "description": "Trang này suy ra thương hiệu từ màu nền và các bậc ramp mà tài liệu đang vẽ, đọc trực tiếp từ stylesheet. Ở đây không đọc được cả hai, nên mọi số bên dưới sẽ không còn là phép đo."
250
- },
251
- "order": {
252
- "title": "Hạt giống, rồi vai trò, rồi phạm vi, rồi từng phần tử",
253
- "description": "Hãy dừng ở mức đầu tiên giải quyết được việc. Mọi mức dưới hạt giống là một giá trị đã thôi suy ra, và không gì báo cho bạn khi thương hiệu đi tiếp."
254
- },
255
- "seed": {
256
- "title": "1. Hạt giống",
257
- "description": "Màu hành động của thương hiệu: màu tô của nút chính. Phần lớn trường hợp, chừng này là đủ cho cả theme.",
258
- "label": "Hạt giống thương hiệu",
259
- "helper": "Một mã hex sáu chữ số. Mọi thứ bên dưới suy ra từ nó và được đo theo WCAG 2.2 AA.",
260
- "presetLabel": "Các ca biên",
261
- "presetHelper": "Mỗi ca cho một câu trả lời mà một màu xanh ngoan ngoãn sẽ giấu đi.",
262
- "presetPlaceholder": "Một hạt giống của bạn",
263
- "preset": {
264
- "godx": "Hạt giống của chính gói này",
265
- "blue": "Một màu xanh thương hiệu thông thường",
266
- "very-light": "Gần trắng: màu tô không đạt ngưỡng trên nền sáng",
267
- "very-dark": "Gần đen: hạt giống tối chạy tới trắng",
268
- "sunflower": "Hướng dương: đảo hướng bậc trạng thái ở cả hai theme"
269
- },
270
- "announce": "Hạt giống {hex}. Sáng {light}, tối {dark}. {pass} trên {count} cặp đo được đạt AA.",
271
- "announceNoDark": "Hạt giống {hex}. Với sắc và độ bão hoà này, không độ sáng nào cho một màu tô đọc được trên nền tối, nên không có theme tối để đo."
272
- },
273
- "derived": {
274
- "title": "2. Hạt giống sinh ra những gì",
275
- "description": "Chỉ đọc, vì đây là kết quả. Mỗi theme chỉ ghi ba vai trò vào bản xuất; phần còn lại suy ra từ primary trong phạm vi của chính phần tử đang vẽ, nên ghi ra sẽ ghim chúng vào hạt giống này.",
276
- "tableLabel": "Các vai trò suy ra từ hạt giống",
277
- "column": {
278
- "token": "Token",
279
- "light": "Sáng",
280
- "dark": "Tối",
281
- "emitted": "Trong bản xuất"
282
- },
283
- "written": "Được ghi",
284
- "derivedOnly": "Suy ra"
285
- },
286
- "contrast": {
287
- "title": "3. Tương phản",
288
- "description": "Mọi cặp hạt giống sinh ra, đo bằng chính helper WCAG của gói. Nhãn trên nền tô cần 4.5:1 (SC 1.4.3); màu tô trên nền phía sau cần 3:1 (SC 1.4.11).",
289
- "tableLabel": "Các cặp tương phản đã đo",
290
- "column": {
291
- "pair": "Cặp",
292
- "measured": "Đo được",
293
- "threshold": "Cần",
294
- "result": "Kết quả"
295
- },
296
- "pair": {
297
- "label-on-fill-light": "Nhãn trên nền tô, sáng",
298
- "label-on-fill-dark": "Nhãn trên nền tô, tối",
299
- "fill-on-canvas-light": "Màu tô trên nền trang, sáng",
300
- "fill-on-canvas-dark": "Màu tô trên nền trang, tối",
301
- "link-on-canvas-light": "Màu liên kết trên nền trang, sáng",
302
- "link-on-canvas-dark": "Màu liên kết trên nền trang, tối"
303
- },
304
- "ratio": "{value}:1",
305
- "pass": "Đạt AA",
306
- "fail": "Dưới AA"
307
- },
308
- "overrides": {
309
- "title": "4. Ghi đè từng token",
310
- "description": "Đặt dưới hạt giống là có chủ ý. Chỉ dùng khi hạt giống đã đúng và duy nhất một token cần khác đi.",
311
- "costTitle": "Cái giá của một lần ghi đè",
312
- "costDescription": "Một token đặt tay sẽ thôi bám theo hạt giống. Lần đổi thương hiệu sau, mọi thứ suy ra đều dịch chuyển và riêng giá trị này ở lại, không bản kiểm nào báo.",
313
- "labelTitle": "Màu nhãn trên nền tô",
314
- "labelHelper": "Mặc định, nhãn do chính độ chói của hạt giống chọn, cùng ngưỡng 0.179 mà lần đổi theme lúc chạy dùng. Ép nhãn là ghi đè duy nhất trình sinh có cờ cho nó.",
315
- "labelAuto": "Tự động",
316
- "labelLight": "Nhãn sáng",
317
- "labelDark": "Nhãn tối",
318
- "darkTitle": "Độ sáng của hạt giống tối",
319
- "darkHelper": "Tương phản ngang bằng với theme sáng đặt nó ở {parity}. Sắc và độ bão hoà luôn giữ nguyên; chỉ độ sáng dịch chuyển. Một giá trị đặt tay được phép trượt ngưỡng, và bảng trên là nơi nó nói ra.",
320
- "darkNoParity": "Với sắc và độ bão hoà này, không độ sáng nào đạt cả hai ngưỡng, nên không có giá trị ngang bằng để rời khỏi.",
321
- "darkReset": "Về giá trị ngang bằng",
322
- "darkAuthored": "Đặt tay",
323
- "darkParity": "Ngang bằng"
324
- },
325
- "export": {
326
- "title": "5. Bản xuất",
327
- "description": "Dán khối đầu vào file theme của bạn, và khối thứ hai đè lên bảng màu email đã nướng sẵn, nơi không stylesheet nào với tới.",
328
- "nameLabel": "Tên theme",
329
- "nameHelper": "Ghi ra {name}.service.css và {name}.email.ts.",
330
- "matches": "Trùng khớp gen:brand",
331
- "diverges": "Không lệnh nào sinh ra bản này",
332
- "divergesWhy": "Độ sáng của hạt giống tối được đặt tay ở đây. Trình sinh tìm giá trị ngang bằng và không có cờ cho nó, nên không lệnh nào tái tạo được file này.",
333
- "cssLabel": "CSS theme cho {name}",
334
- "emailLabel": "Bảng màu email cho {name}",
335
- "noDarkTitle": "Hạt giống này không có màu tô tối đọc được",
336
- "noDarkDescription": "Với sắc và độ bão hoà này, không độ sáng nào đạt đồng thời 4.5:1 với nhãn của nó và 3:1 với nền tối. Hãy giảm bão hoà, hoặc ép nhãn ở trên rồi xem lại."
337
- },
338
- "preview": {
339
- "lightTitle": "Sáng",
340
- "darkTitle": "Tối",
341
- "seedIs": "Phạm vi {hex}",
342
- "tableLabel": "Dòng hoá đơn",
343
- "column": {
344
- "id": "Dòng",
345
- "item": "Hạng mục",
346
- "owner": "Phụ trách",
347
- "state": "Trạng thái"
348
- },
349
- "state": {
350
- "active": "Đang chạy",
351
- "pending": "Chờ"
352
- },
353
- "line": {
354
- "licence": "Bản quyền",
355
- "support": "Bảo trì",
356
- "setup": "Triển khai"
357
- },
358
- "action": {
359
- "save": "Lưu",
360
- "duplicate": "Nhân bản",
361
- "export": "Xuất",
362
- "add": "Thêm dòng",
363
- "dismiss": "Bỏ qua",
364
- "delete": "Xoá",
365
- "details": "Chi tiết"
366
- },
367
- "badge": {
368
- "brand": "Thương hiệu",
369
- "success": "Đã thu",
370
- "warning": "Sắp đến hạn",
371
- "destructive": "Quá hạn",
372
- "info": "Nháp",
373
- "neutral": "Lưu trữ"
374
- },
375
- "alert": {
376
- "title": "Địa chỉ xuất hoá đơn chưa đủ",
377
- "description": "Chưa thể phát hành hoá đơn cho tới khi điền xong.",
378
- "link": "Về phần hạt giống"
379
- },
380
- "field": {
381
- "org": "Tổ chức",
382
- "orgHelper": "Hiện trên mọi chứng từ phát hành.",
383
- "plan": "Gói",
384
- "tax": "Gồm thuế",
385
- "mail": "Gửi tự động"
386
- },
387
- "plan": {
388
- "starter": "Khởi đầu",
389
- "pro": "Chuyên nghiệp",
390
- "scale": "Mở rộng"
391
- }
392
- }
393
- },
394
- "marketingShowcase": {
395
- "brand": {
396
- "name": "Example Works",
397
- "suffix": "Phê duyệt"
398
- },
399
- "nav": {
400
- "label": "Điều hướng chính",
401
- "product": "Sản phẩm",
402
- "solutions": "Giải pháp",
403
- "pricing": "Bảng giá",
404
- "docs": "Tài liệu",
405
- "signIn": "Đăng nhập",
406
- "getStarted": "Dùng thử miễn phí",
407
- "open": "Mở điều hướng",
408
- "title": "Điều hướng",
409
- "description": "Mọi điểm đến trên thanh tiêu đề, gồm cả hai mục bị ẩn ở khổ điện thoại.",
410
- "close": "Đóng điều hướng"
411
- },
412
- "hero": {
413
- "eyebrow": "Quy trình phê duyệt",
414
- "title": "Mọi phê duyệt, trong một dấu vết.",
415
- "lead": "Chuyển hoá đơn, đơn mua hàng hay hợp đồng tới đúng người chịu trách nhiệm, giữ chứng cứ ngay cạnh quyết định, và xuất cả năm trong một tệp.",
416
- "primary": "Dùng thử miễn phí",
417
- "secondary": "Đặt lịch xem demo",
418
- "trust": "Không cần thẻ. 14 ngày. Huỷ ngay trong sản phẩm.",
419
- "panelTitle": "Hàng đợi hôm nay",
420
- "panelNote": "Số liệu thật của một tenant, cập nhật sau mỗi lần duyệt.",
421
- "pending": "Đang chờ bạn",
422
- "cleared": "Đã xong hôm nay",
423
- "median": "Trung vị thời gian quyết định",
424
- "medianValue": "4 giờ 12 phút",
425
- "endpointLabel": "Endpoint webhook",
426
- "endpointNote": "Dán nguyên văn vào gateway. Chuỗi này không có chỗ để ngắt dòng."
427
- },
428
- "logos": {
429
- "title": "Những đội đã bỏ phê duyệt qua email",
430
- "caption": "Băng chạy được giao ở trạng thái DỪNG, và nút cạnh nó là một nút thật, có trong thứ tự tab.",
431
- "marqueeLabel": "Logo khách hàng"
432
- },
433
- "features": {
434
- "title": "Sản phẩm làm gì",
435
- "lead": "Sáu năng lực, và không cái nào là một component mới.",
436
- "routingTitle": "Định tuyến",
437
- "routingBody": "Một quy tắc đọc số tiền, trung tâm chi phí và nhà cung cấp, rồi chọn người duyệt phụ trách tổ hợp đó.",
438
- "auditTitle": "Dấu vết kiểm toán mà kế toán đọc được mà không phải hỏi ai mã trạng thái nghĩa là gì",
439
- "residencyTitle": "Nơi lưu trữ dữ liệu",
440
- "residencyBody": "Mọi tài liệu và chỉ mục dẫn xuất đều ở lại vùng Tokyo.",
441
- "evidenceTitle": "承認の証跡",
442
- "evidenceBody": "決裁の理由と添付を同じ行に残します。Chứng cứ và quyết định là một bản ghi, không phải hai hệ thống.",
443
- "webhookTitle": "Webhook",
444
- "webhookBody": "Mỗi endpoint mang một định danh không có chỗ ngắt dòng, và thẻ này chứa được nó:",
445
- "ssoTitle": "SSO",
446
- "ssoBody": "SAML và OIDC, ánh xạ nhóm sang vai trò phê duyệt."
447
- },
448
- "testimonials": {
449
- "title": "Năm đầu tiên trông như thế nào",
450
- "label": "Trích dẫn khách hàng",
451
- "ratingLabel": "Đánh giá",
452
- "q1": "Chúng tôi đóng quý mà không còn phê duyệt nào nằm lại trong hộp thư của ai đó, kiểm toán chỉ hỏi một bản xuất thay vì mười một, và bộ phận tài chính bỏ hẳn bảng tính riêng dùng để theo dõi thứ đã thực sự được ký.",
453
- "a1": "山口 佳奈",
454
- "r1": "Kế toán trưởng, Aoba Foods",
455
- "q2": "Nó chấm dứt tranh cãi.",
456
- "a2": "Dana Whitfield",
457
- "r2": "Trưởng bộ phận Mua hàng, Meridian Health",
458
- "q3": "Chúng tôi chuyển 240 quy trình phê duyệt sang đây trong sáu tuần, và không mất một chứng từ nào.",
459
- "a3": "Trần Minh Khoa",
460
- "r3": "Phụ trách Tài chính, Truong An"
461
- },
462
- "pricing": {
463
- "title": "Bảng giá",
464
- "lead": "Tính theo mỗi người duyệt, mỗi tháng. Chu kỳ năm chỉ xuất hoá đơn một lần.",
465
- "cycleLabel": "Chu kỳ thanh toán",
466
- "monthly": "Theo tháng",
467
- "yearly": "Theo năm",
468
- "perMonth": "mỗi người duyệt / tháng",
469
- "billedYearly": "xuất hoá đơn một lần mỗi năm",
470
- "popular": "Được chọn nhiều nhất",
471
- "saving": "Miễn phí 2 tháng",
472
- "fresh": "Mới",
473
- "quoted": "Báo giá riêng",
474
- "quotedNote": "Báo giá theo số người duyệt và vùng lưu trữ của bạn.",
475
- "starterName": "Starter",
476
- "starterNote": "Một luồng phê duyệt, một vùng.",
477
- "teamName": "Team",
478
- "teamNote": "Luồng song song, uỷ quyền, và bản xuất chứng cứ.",
479
- "enterpriseName": "エンタープライズ",
480
- "enterpriseNote": "専用テナント · SSO · 監査窓口。Tenant riêng, SSO, đầu mối kiểm toán.",
481
- "cta": "Dùng thử miễn phí",
482
- "ctaQuote": "Liên hệ với chúng tôi",
483
- "featChains": "Luồng phê duyệt",
484
- "featDelegation": "Uỷ quyền và vắng mặt",
485
- "featExport": "Xuất kiểm toán một tệp",
486
- "featSso": "SAML và OIDC",
487
- "featResidency": "Chọn vùng lưu trữ",
488
- "featSupport": "Đầu mối hỗ trợ riêng",
489
- "limitedChains": "Chỉ một luồng",
490
- "limitedSupport": "Giờ hành chính"
491
- },
492
- "cta": {
493
- "title": "Tuần này hãy cho một luồng phê duyệt chạy thử",
494
- "lead": "Nhập một luồng từ bảng tính, cho ba phê duyệt thật chạy qua, và giữ lại bản xuất.",
495
- "primary": "Dùng thử miễn phí",
496
- "secondary": "Đặt lịch xem demo",
497
- "note": "Bộ phận kinh doanh trả lời trong một ngày làm việc, giờ Tokyo."
498
- },
499
- "footer": {
500
- "label": "Chân trang",
501
- "product": "Sản phẩm",
502
- "company": "Công ty",
503
- "legal": "Pháp lý",
504
- "contact": "Liên hệ",
505
- "featuresLink": "Tính năng",
506
- "pricingLink": "Bảng giá",
507
- "changelog": "Nhật ký thay đổi",
508
- "status": "Tình trạng hệ thống",
509
- "about": "Giới thiệu",
510
- "careers": "Tuyển dụng",
511
- "terms": "Điều khoản",
512
- "privacy": "Quyền riêng tư",
513
- "security": "Bảo mật",
514
- "subprocessors": "Bên xử lý phụ",
515
- "accessibility": "Tuyên bố về khả năng tiếp cận",
516
- "salesLine": "Kinh doanh",
517
- "supportLine": "Hỗ trợ",
518
- "addressLabel": "Trụ sở đăng ký",
519
- "address": "Chiyoda, Tokyo",
520
- "rights": "Example Works. Một công ty hư cấu, chỉ dùng cho tài liệu."
521
- }
522
- },
523
- "showcase": {
524
- "pagination": {
525
- "recordCount": {
526
- "other": "{count} bản ghi"
527
- },
528
- "loadMore": {
529
- "other": "Tải thêm {count}"
530
- }
531
- },
532
- "flexMeasure": {
533
- "title": "measure — tràn viền bên ngoài, cột đo bên trong",
534
- "lead": "Một dải là <section> mang phần nền tràn viền, bao quanh một Flex được measure canh giữa và chặn ở --page-measure-*. Lề vẫn do pad giữ: measure không thêm lề. narrow (42rem) và medium (48rem) là measure cho nội dung đọc; wide (72rem) là measure cho trang marketing."
535
- },
536
- "tagInput": {
537
- "longIdTitle": "Định danh dài và +N",
538
- "ledgerLabel": "Mã sổ cái",
539
- "ledgerHelper": "Định danh 71 ký tự vẫn nằm trong khung"
540
- },
541
- "select": {
542
- "createTitle": "Tags: dòng tạo mới, onCreate và so khớp không phân biệt hoa thường",
543
- "createDescription": "Văn bản gõ vào không khớp tùy chọn nào được đưa ra thành dòng “Tạo” rõ ràng. onCreate chỉ báo văn bản mới tạo, không bao giờ báo id của tùy chọn. Gõ “bug” sẽ tìm thấy “Bug” thay vì tạo bản trùng (caseSensitive trả lại so khớp chính xác). Khác antd, dòng tạo có nhãn và văn bản dài hơn 12 ký tự bị allowCreate từ chối. Khi đang gõ, dòng tạo (hoặc tùy chọn khớp chính xác) là dòng đầu tiên và đang được chọn, nên Enter không bao giờ gỡ một thẻ đã chọn; cũng khác antd, tùy chọn khớp chính xác được đưa lên đầu.",
544
- "createField": "Nhãn",
545
- "createdHelper": "Đã tạo trong phiên này: {list}",
546
- "createdNone": "Chưa tạo gì"
547
- },
548
- "colorPicker": {
549
- "presetsTitle": "Màu thẻ chọn từ bảng màu",
550
- "presetsDescription": "presets — các nhóm ô màu cố định dưới bộ chọn; mỗi nhóm thu gọn được, bộ chọn tự do vẫn còn.",
551
- "paletteLabel": "Màu nhãn",
552
- "recommendedGroup": "Đề xuất",
553
- "recentGroup": "Dùng gần đây",
554
- "presetsOnlyTitle": "Chỉ bảng màu",
555
- "presetsOnlyDescription": "panelRender chỉ trả về Presets — người dùng chọn trong bảng màu, không gõ được mã hex tuỳ ý.",
556
- "tagColorLabel": "Màu thẻ",
557
- "tagColorHelper": "Phím mũi tên di chuyển giữa các ô màu; ô đang chọn được đọc lên."
558
- },
559
- "splitPaneStackOrder": {
560
- "title": "stackOrder — đưa cột phụ lên trước khi xếp chồng",
561
- "lead": "stackOrder=\"aside-first\" đặt cột phụ lên trên cột chính khi khung quá hẹp để chia đôi, và đặt nó trước trong DOM nên phím Tab cũng tới nó trước. Khi đủ rộng để chia, nó nằm ở cột cuối như mặc định. Khung nhúng bên dưới hẹp hơn ngưỡng chia đôi, nên thẻ thuộc tính nằm trên luồng bình luận.",
562
- "propertiesTitle": "Thuộc tính",
563
- "status": "Trạng thái",
564
- "statusValue": "Đang xử lý",
565
- "assignee": "Người phụ trách",
566
- "threadTitle": "Bình luận",
567
- "threadLead": "Trên điện thoại, luồng bình luận dài không còn đẩy phần thuộc tính xuống dưới."
568
- }
569
- },
570
- "serviceLauncherShowcase": {
571
- "page": {
572
- "title": "ServiceLauncherCard",
573
- "subtitle": "Các ô cho danh sách ứng dụng nội bộ của tổ chức — khả dụng, hạn chế, tạm dừng, lưu trữ, đang tải và lối vào danh mục."
574
- },
575
- "status": {
576
- "available": "Khả dụng",
577
- "active": "Đang hoạt động",
578
- "maintenance": "Đang bảo trì",
579
- "stopped": "Đã dừng",
580
- "adminOnly": "Chỉ dành cho quản trị viên",
581
- "preparing": "Đang chuẩn bị",
582
- "archived": "Đã lưu trữ",
583
- "unapplied": "Chưa đăng ký",
584
- "noPermission": "Không có quyền",
585
- "attentionRequired": "Attention required"
586
- },
587
- "action": {
588
- "openService": "Mở dịch vụ",
589
- "open": "Mở",
590
- "viewStatus": "Xem tình trạng",
591
- "viewHistory": "Xem lịch sử",
592
- "checkPermissions": "Kiểm tra quyền",
593
- "openSettings": "Mở cài đặt",
594
- "viewArchive": "Xem lưu trữ",
595
- "openRequestForm": "Mở biểu mẫu yêu cầu",
596
- "openList": "Mở danh sách",
597
- "openServiceEnglish": "Open service"
598
- },
599
- "sections": {
600
- "basics": {
601
- "heading": "1 · Cơ bản · các dịch vụ có thể sử dụng",
602
- "why": "Biểu tượng, tên, trạng thái, mô tả, định danh, thao tác. Nội dung trạng thái luôn do phía sử dụng cung cấp — component chỉ quyết định ý nghĩa của tone trên Badge.",
603
- "attendance": {
604
- "title": "Quản lý chấm công",
605
- "description": "Quản lý chấm công, ca làm việc và đơn xin nghỉ phép trong một không gian làm việc duy nhất."
606
- },
607
- "expense": {
608
- "title": "Quyết toán chi phí",
609
- "description": "Xử lý từ nộp hóa đơn, phê duyệt cho đến đồng bộ với sổ kế toán."
610
- },
611
- "meetingRoom": {
612
- "title": "Đặt phòng họp",
613
- "description": "Đặt phòng họp và thiết bị theo từng cơ sở."
614
- }
615
- },
616
- "statusTones": {
617
- "heading": "2 · Toàn bộ 6 giá trị statusTone",
618
- "why": "success / warning / destructive / info / neutral / muted. Tone chỉ quyết định ý nghĩa của Badge — nội dung, phán đoán và việc thao tác có được phép hay không đều do phía sử dụng cung cấp.",
619
- "mail": {
620
- "title": "Email nội bộ",
621
- "description": "Quản lý hộp thư, danh sách phân phối và chữ ký dùng chung."
622
- },
623
- "fileShare": {
624
- "title": "Chia sẻ tệp",
625
- "description": "Xử lý thư mục phòng ban và liên kết chia sẻ ra bên ngoài."
626
- },
627
- "dataSync": {
628
- "title": "Nền tảng tích hợp dữ liệu",
629
- "description": "Quản lý các tác vụ đồng bộ dữ liệu với hệ thống bên ngoài."
630
- },
631
- "iam": {
632
- "title": "Quản lý quyền truy cập",
633
- "description": "Xem vai trò, chính sách xác thực hai yếu tố và các sự kiện kiểm toán."
634
- },
635
- "integrations": {
636
- "title": "Ứng dụng liên kết",
637
- "description": "Cấu hình kết nối và phạm vi cho các tích hợp bên thứ ba."
638
- },
639
- "legacyKb": {
640
- "title": "Cơ sở tri thức cũ",
641
- "description": "Lưu trữ ở chế độ chỉ đọc các quy trình vận hành đến hết năm tài chính 2024."
642
- }
643
- },
644
- "disabledReason": {
645
- "heading": "3 · disabledReason · lý do thao tác không thực hiện được được đặt trước thao tác",
646
- "why": "Một nút bị vô hiệu hóa không truyền tải bất kỳ lý do 'tại sao' nào. Vì vậy lý do được đặt trước thao tác theo thứ tự DOM (WCAG 2.2 · 1.3.2), và ô mang thuộc tính data-unavailable khiến huy hiệu mờ đi. disabledReason không vô hiệu hóa nút — đó vẫn là prop Button do phía sử dụng kiểm soát.",
647
- "inventory": {
648
- "title": "Quản lý tồn kho",
649
- "description": "Quản lý tồn kho, nhập xuất kho và kiểm kê theo từng cơ sở.",
650
- "reason": "Yêu cầu sử dụng của phòng ban này vẫn chưa được phê duyệt."
651
- },
652
- "contracts": {
653
- "title": "Quản lý hợp đồng",
654
- "description": "Xử lý lưu trữ hợp đồng, thông báo hạn và yêu cầu ký điện tử.",
655
- "reason": "Cần có vai trò của bộ phận pháp chế để xem. Vui lòng đăng ký qua bộ phận hỗ trợ IT."
656
- },
657
- "analytics": {
658
- "title": "Nền tảng phân tích",
659
- "description": "Cung cấp bảng điều khiển và kho dữ liệu cho toàn công ty.",
660
- "reason": "Dịch vụ này đã bị quản trị viên của tổ chức tạm dừng."
661
- }
662
- },
663
- "loadingCatalog": {
664
- "heading": "4 · Trạng thái đang tải và lối vào danh mục",
665
- "why": "ServiceLauncherCardSkeleton là placeholder ban đầu có cùng khung xương, bắt buộc phải có label, mang aria-busy, và cố ý không mở live region. ServiceCatalogCta là ô đồng hành chỉ đặt cạnh khi thực sự có thêm lối vào, và nó nhận một glyph khác ngoài Plus mặc định.",
666
- "skeletonLabel": "Đang tải dịch vụ",
667
- "addApp": {
668
- "title": "Thêm ứng dụng"
669
- },
670
- "allApps": {
671
- "title": "Xem tất cả ứng dụng nội bộ"
672
- }
673
- },
674
- "edgeCases": {
675
- "heading": "5 · Chạm tới giới hạn · tên 3 dòng, không có mô tả, tên máy chủ dài không thể ngắt",
676
- "why": "Một ví dụ gọn gàng không bao giờ cho thấy nơi ô bị vỡ. Đây là mặt vỡ đó: một tên phải xuống 3 dòng nằm cạnh một tên chỉ 2 từ trên cùng một hàng, một ô không có mô tả đặt cạnh một ô có mô tả, và một tên máy chủ không có khoảng trắng cố kéo giãn cột. Nếu trông có vẻ xấu xí, tức là phần này đang làm đúng việc của nó — thứ phải chịu được áp lực là component, chứ không phải dữ liệu mẫu.",
677
- "hrPortal": {
678
- "title": "Nền tảng thông tin nhân sự toàn cầu · Cổng tự phục vụ nhân viên (khu vực châu Á - Thái Bình Dương)",
679
- "description": "Không gian làm việc tích hợp quản lý tập trung dữ liệu nhân sự gốc, chấm công, lương và đánh giá."
680
- },
681
- "dailyReport": {
682
- "title": "Báo cáo hằng ngày"
683
- },
684
- "warningConsole": {
685
- "title": "Global Workforce Identity & Entitlement Administration Console",
686
- "description": "Review pending entitlement requests before the next access certification.",
687
- "reason": "Your organization has no approved request for this service yet."
688
- }
689
- },
690
- "minimalTiles": {
691
- "heading": "6 · Ô tối giản",
692
- "why": "Chỉ có icon, title và action là bắt buộc. Bỏ statusLabel thì cả hàng Badge biến mất; bỏ cả description và metadata thì khung vẫn được giữ nguyên — hãy so sánh chiều cao với ô đầy đủ bên cạnh.",
693
- "wiki": {
694
- "title": "Wiki nội bộ"
695
- },
696
- "contact": {
697
- "title": "Đầu mối liên hệ hỗ trợ",
698
- "description": "Nơi tiếp nhận các thắc mắc về hệ thống nội bộ."
699
- },
700
- "calendar": {
701
- "title": "Lịch toàn công ty",
702
- "description": "Chia sẻ sự kiện toàn công ty, ngày nghỉ và lịch theo từng cơ sở.",
703
- "reason": "Được công khai ở chế độ chỉ đọc."
704
- }
705
- },
706
- "logo": {
707
- "heading": "7 · logo · logo đã tải lên, và những dịch vụ chưa có logo",
708
- "why": "logo là URL của một hình ảnh do quản trị viên tải lên, và nó chỉ thay thế icon khi tải thành công. icon vẫn là bắt buộc — một dịch vụ vừa tạo chưa có logo, và một dịch vụ có URL trả về 404 cũng không có logo. Một hình ảnh bị lỗi sẽ không bao giờ vào DOM. Khung hình ảnh có cùng kích thước 20px với glyph (--card-service-launcher-icon-glyph-size), và tỉ lệ khung hình được giữ nguyên nhờ object-fit: contain.",
709
- "uploaded": {
710
- "title": "Quản lý chấm công",
711
- "description": "Dịch vụ đã tải lên logo. Huy hiệu hiển thị logo thay vì icon."
712
- },
713
- "missing": {
714
- "title": "Quản lý chấm công (chưa đặt logo)",
715
- "description": "Cùng một ô nhưng không truyền logo. icon vẫn giữ nguyên, và kích thước huy hiệu cũng không đổi."
716
- },
717
- "broken": {
718
- "title": "Nền tảng tích hợp dữ liệu (logo lỗi 404)",
719
- "description": "logo_url đã được đặt nhưng tệp không tồn tại. Ô không bị trống mà quay về dùng icon."
720
- },
721
- "wideMark": {
722
- "title": "Quyết toán chi phí",
723
- "description": "Logo dạng chữ nằm ngang 240×96. Vì dùng contain nên không bị cắt xén, và chiều rộng khung vẫn giữ nguyên như glyph."
724
- },
725
- "withReason": {
726
- "title": "Quản lý quyền truy cập",
727
- "description": "logo và disabledReason là hai trục độc lập. Trạng thái được truyền tải qua Badge và văn bản lý do — chúng ta không tự ý để màu thương hiệu của bên khác gánh vai trò đó.",
728
- "reason": "Cần có vai trò quản trị viên để xem."
729
- },
730
- "emptyString": {
731
- "title": "Email nội bộ",
732
- "description": "logo là chuỗi rỗng. Được xử lý giống như chưa đặt, và cũng không phát sinh yêu cầu thừa."
733
- }
734
- }
735
- }
736
- },
737
- "caimono": {
738
- "brand": "Caimono",
739
- "eyebrow": "HIỂU RÕ GIÁ. CHỌN ĐÚNG NƠI.",
740
- "demo": "BẢN THIẾT KẾ TƯƠNG TÁC · Sản phẩm, cửa hàng và giá đều là minh hoạ.",
741
- "synthetic": "SẢN PHẨM GIẢ LẬP",
742
- "product": "Aero H1 Wireless",
743
- "productMeta": "Model AERO-H1 · {count} sản phẩm · Không gộp H2 hoặc hàng theo bộ",
744
- "variant": "Màu đang so sánh",
745
- "black": "Đen · H1-BK",
746
- "cream": "Kem · H1-CR",
747
- "condition": "Tình trạng sản phẩm",
748
- "new": "Hàng mới",
749
- "used": "Đã qua sử dụng",
750
- "lowest": "Tổng thấp nhất đủ điều kiện",
751
- "noEligible": "Chưa có giá đủ điều kiện",
752
- "incl": "Gồm thuế và phí giao nội địa đã biết",
753
- "couponActive": "Đã trừ coupon Hako theo xác nhận của bạn",
754
- "couponInactive": "Chưa trừ coupon; chưa trừ điểm",
755
- "bestDetails": "Xem báo giá thấp nhất",
756
- "priceAlert": "Báo khi giá giảm",
757
- "save": "Lưu sản phẩm",
758
- "saved": "Đã lưu sản phẩm",
759
- "offers": "So sánh nơi bán",
760
- "snapshot": "Mốc dữ liệu mẫu: {date} (giờ Nhật)",
761
- "findShop": "Tìm cửa hàng trong bảng",
762
- "searchPlaceholder": "Tên cửa hàng…",
763
- "deliverTo": "Giao nội địa tới",
764
- "Tokyo": "Tokyo",
765
- "Osaka": "Osaka",
766
- "sort": "Sắp xếp",
767
- "totalSort": "Tổng tiền: thấp → cao",
768
- "deliverySort": "Giao hàng: sớm nhất",
769
- "free": "Miễn phí giao nội địa",
770
- "stockOnly": "Chỉ còn hàng",
771
- "fast": "Giao trong {duration}",
772
- "reset": "Xoá bộ lọc",
773
- "counts": "Báo giá: {total} · Đủ điều kiện xếp hạng: {eligible}",
774
- "shop": "Cửa hàng",
775
- "cash": "Tổng tiền phải trả",
776
- "delivery": "Giao hàng & bảo hành",
777
- "action": "Hành động",
778
- "breakdown": "Xem chi tiết giá",
779
- "detailFor": "Chi tiết giá — {merchant}",
780
- "best": "Tổng thấp nhất",
781
- "observed": "Ghi nhận lúc {date}",
782
- "itemValue": "Sản phẩm: {amount}",
783
- "shippingValue": "Giao nội địa: {amount}",
784
- "discountValue": "Coupon đủ điều kiện: −{amount}",
785
- "unknownTotal": "Chưa đủ phí để tính tổng",
786
- "unknown": "Chưa xác định",
787
- "eta": "Dự kiến {duration} (demo)",
788
- "pointsValue": "Điểm thưởng: {count} · Không trừ vào tiền phải trả",
789
- "stale": "Giá cũ — cần kiểm tra lại",
790
- "outStock": "Hết hàng",
791
- "needsShipping": "Phí giao cần xác nhận",
792
- "inStock": "Còn hàng",
793
- "manufacturer": "Bảo hành nhà sản xuất (demo)",
794
- "sellerWarranty": "Bảo hành cửa hàng (demo)",
795
- "noResultTitle": "Chưa thấy cửa hàng phù hợp",
796
- "noResultBody": "Thử bỏ bớt bộ lọc hoặc đổi tên cửa hàng. Dữ liệu chưa có không có nghĩa là giá bằng 0.",
797
- "limitNote": "Chỉ so sánh các báo giá hiển thị đúng model, màu, tình trạng, thị trường và có tổng tiền xác định. Giá cuối cùng cần kiểm tra tại cửa hàng.",
798
- "couponTitle": "Bạn có coupon Hako?",
799
- "couponLabel": "Tôi đã kiểm tra và đủ điều kiện giảm {amount}",
800
- "couponHelp": "Mô phỏng coupon tài khoản mới; chỉ áp dụng Hako Market. Không tự bật.",
801
- "expires": "Hết hạn: {date} (giờ Nhật)",
802
- "whyRank": "Cách bảng giá được xếp",
803
- "rule1": "Cùng biến thể, tình trạng và thị trường.",
804
- "rule2": "Ưu tiên giá còn mới, còn hàng, đủ phí.",
805
- "rule3": "Không lấy hoa hồng để đẩy thứ hạng.",
806
- "kaimiBody": "Điểm thưởng không phải tiền được giảm ngay. Hãy nhìn tổng tiền trước, rồi kiểm tra điều kiện và thời hạn dùng điểm nhé.",
807
- "buyAssist": "Bạn cần mua hộ từ Nhật?",
808
- "buyAssistBody": "Tách riêng phí mua hộ, vận chuyển quốc tế và khoản chưa xác định. Không gọi giá nội địa là giá về tay.",
809
- "quote": "Xem cấu trúc báo giá",
810
- "historyTitle": "Giá thấp nhất theo thời gian",
811
- "historyScope": "Dữ liệu giả lập · đen / mới / Tokyo · trước coupon · không thay đổi theo bộ lọc",
812
- "period": "Khoảng thời gian",
813
- "historyMetric": "Tổng đã biết, chưa trừ điểm",
814
- "date": "Ngày mẫu",
815
- "price": "Tổng tiền mẫu",
816
- "reviewTitle": "Chọn đúng trước khi chọn rẻ",
817
- "editorial": "Đánh giá biên tập",
818
- "editorialBody": "Chưa có kiểm thử thực tế cho sản phẩm giả lập này. Không hiển thị điểm kiểm thử hoặc huy hiệu “đã kiểm chứng”.",
819
- "community": "Đánh giá cộng đồng",
820
- "communityBody": "Chưa có đánh giá. Điểm của cửa hàng không được dùng làm điểm chất lượng sản phẩm.",
821
- "specTitle": "Thông số mô phỏng",
822
- "model": "Model",
823
- "modelValue": "AERO-H1",
824
- "connection": "Kết nối",
825
- "wireless": "Không dây",
826
- "unit": "Đơn vị so sánh",
827
- "market": "Thị trường",
828
- "japan": "Nhật Bản",
829
- "disclosure": "MINH BẠCH THƯƠNG MẠI",
830
- "disclosureText": "Bản mẫu chưa gắn liên kết tiếp thị. Khi triển khai, công khai hoa hồng gần bảng giá và tách riêng thẻ tài trợ. Demo loại giá cũ hơn {duration} khỏi nhãn tổng thấp nhất.",
831
- "footerNote": "Bản mẫu · Không kết nối shop, thanh toán hoặc thông báo thật.",
832
- "close": "Đóng",
833
- "breakdownTitle": "Hiểu rõ khoản phải trả",
834
- "breakdownNote": "Dữ liệu minh hoạ; không có giao dịch thật và không chuyển sang website cửa hàng.",
835
- "item": "Giá sản phẩm",
836
- "shipping": "Phí giao nội địa",
837
- "fee": "Phí bắt buộc",
838
- "discount": "Coupon đủ điều kiện",
839
- "points": "Điểm thưởng dự kiến",
840
- "notDeducted": "Không trừ vào tiền phải trả",
841
- "notRankedExplain": "Báo giá này không đủ điều kiện gắn nhãn tổng thấp nhất. Vẫn giữ giá nguồn để người dùng nhận biết dữ liệu cũ hoặc thiếu phí.",
842
- "alertTitle": "Đặt ngưỡng giá mong muốn",
843
- "alertBody": "Demo chỉ lưu ngưỡng trong trình duyệt này, không gửi email hoặc thông báo. Khi triển khai, cảnh báo phải gắn với đúng biến thể, tình trạng, nơi giao và loại giá.",
844
- "alertScope": "AERO-H1 · {variant} · {condition} · {destination} · JPY",
845
- "alertLabel": "Thông báo khi tổng không vượt quá (JPY)",
846
- "alertHelp": "Số nguyên lớn hơn 0. Không trừ điểm hoặc coupon cá nhân.",
847
- "alertSave": "Lưu ngưỡng trong demo",
848
- "alertSaved": "Đã lưu ngưỡng trên thiết bị này. Không có thông báo thật được thiết lập.",
849
- "storageFail": "Trình duyệt không cho phép lưu. Chưa lưu thiết lập.",
850
- "favoriteOn": "Đã lưu sản phẩm trong trình duyệt này.",
851
- "favoriteOff": "Đã bỏ lưu sản phẩm trong trình duyệt này.",
852
- "quoteTitle": "Mua hộ: báo giá hai giai đoạn",
853
- "quoteBody": "Đây là mẫu giải thích, không phải báo giá dịch vụ. Phải tách khoản đã biết khỏi khoản cần xác nhận trước khi yêu cầu thanh toán.",
854
- "domestic": "Giá mua trong Nhật theo lựa chọn",
855
- "assistFee": "Phí mua hộ",
856
- "intlShip": "Phí gửi quốc tế",
857
- "importCost": "Thuế / phí nhập khẩu",
858
- "landed": "Tổng về tay",
859
- "pendingQuote": "Cần báo giá",
860
- "notFinal": "Chưa thể xác nhận",
861
- "quoteNote": "Không hiển thị nút thanh toán khi còn thiếu phí. Bước tiếp theo ở sản phẩm thật là yêu cầu báo giá, không phải “mua ngay”.",
862
- "merchants": {
863
- "mori": "Mori Store",
864
- "aoi": "Aoi Direct",
865
- "hako": "Hako Market",
866
- "kumo": "Kumo Shop",
867
- "haru": "Haru Select",
868
- "mika": "Mika Audio",
869
- "neko": "Neko Outlet",
870
- "other": "Other Model Shop"
871
- }
872
- },
873
- "dataTableDocs": {
874
- "stackedRecordWide": "Bộ bản ghi (khổ rộng: vẫn là bảng)",
875
- "stackedRecordFolded": "Cùng bảng, cùng định nghĩa cột (khổ hẹp: gập thành thẻ)"
876
- },
877
- "chartsDocs": {
878
- "areaSplitTitle": "AreaChart · tách màu nền khỏi nét / cắt trục giá trị",
879
- "areaSplitBody": "series[].fillColor đặt màu dải nền độc lập với color của đường, còn valueDomain / valueTicks nói rõ trục giá trị. Trục không bắt đầu từ 0 chỉ chính đáng khi HÌNH DẠNG mới là thông điệp và số 0 không phải mốc có nghĩa — giá, nhiệt độ, chỉ số, phân vị độ trễ. Ở mọi biểu đồ bắt người đọc so sánh độ lớn (mọi biểu đồ cột), nó phóng đại dao động và gây hiểu sai. Nếu cắt, hãy ghi rõ khoảng và giữ lưới.",
880
- "areaSplitLabel": "Giá theo tuần (cắt còn 24.000–31.000 ¥)",
881
- "areaSplitDescription": "Không lấy mốc 0. Trục chạy từ 24.000 đến 31.000 ¥.",
882
- "priceSeries": "Giá",
883
- "tokenScopeTitle": "Token chủ đề · phạm vi một vùng",
884
- "tokenScopeBody": "Độ dày nét, độ đậm dải nền và kiểu gạch của lưới là phong cách chung nên là token chứ không phải prop. --chart-series-stroke-width / --chart-area-fill-alpha / --chart-grid-line-dash chỉ đặt trên khối bên dưới. Không cần CSS riêng cho trang, không cần recharts thô.",
885
- "tokenScopeLabel": "Giá theo tuần (đã áp chủ đề)"
886
- },
887
- "themeScopeDocs": {
888
- "page": {
889
- "subtitle": "Một vùng có theme riêng, và overlay nó mở ra giữ nguyên token của vùng đó.",
890
- "title": "ThemeScope"
891
- },
892
- "intro": {
893
- "title": "Vì sao một vùng cần đến nó",
894
- "description": "Mọi overlay đều portal ra document.body, nên kế thừa custom property dừng lại ở ranh giới portal.",
895
- "body": "Một vùng tự đặt theme chỉ phủ được cây con của nó, không phủ được thứ nó mở ra: đo trên một scope có theme, vùng đọc --primary 204 100% 37% còn Dialog nó mở đọc 268.7 100% 50% — mặc định của package. ThemeScope mang phần CHÊNH LỆCH đã tính giữa vùng và gốc tài liệu sang một host đặt tại đích portal, nên overlay kế thừa bằng chính quan hệ chứa trong DOM. Nó không có prop theme — nó đọc DOM, nên style inline, class hay rule trong stylesheet đều cho cùng một kết quả."
896
- },
897
- "region": {
898
- "description": "Mở bất cứ thứ gì ở đây. Panel mở ra được tô bằng token của vùng này.",
899
- "pending": "Chờ duyệt",
900
- "queue": "12 hồ sơ đang trong hàng đợi",
901
- "reviewerLabel": "Giao người duyệt",
902
- "reviewerPlaceholder": "Chọn người duyệt",
903
- "approve": "Duyệt hồ sơ",
904
- "history": "Lịch sử duyệt",
905
- "notify": "Báo cho người nộp"
906
- },
907
- "dialog": {
908
- "title": "Duyệt hồ sơ này",
909
- "description": "Lượt duyệt được ghi vào tài khoản của bạn và người nộp được báo ngay.",
910
- "confirm": "Duyệt",
911
- "body": "Ba hồ sơ của khách hàng này đang chờ cùng một bộ chứng từ."
912
- },
913
- "popover": {
914
- "body": "Đã trả lại một lần vì thiếu chứng từ, nộp lại trong cùng ngày."
915
- },
916
- "toast": {
917
- "approved": "Đã duyệt hồ sơ",
918
- "saved": "Đã báo cho người nộp"
919
- },
920
- "acme": {
921
- "name": "ACME Logistics"
922
- },
923
- "night": {
924
- "name": "Bảng điều khiển ca đêm"
925
- },
926
- "without": {
927
- "title": "Cũng vùng đó nhưng không có ThemeScope",
928
- "description": "Token khai báo y hệt phía trên — chỉ khác là wrapper chỉ còn là một div thường.",
929
- "open": "Duyệt hồ sơ",
930
- "dialogTitle": "Duyệt hồ sơ này",
931
- "dialogDescription": "Panel này chính là lỗi: nó được tô bằng mặc định của package, không phải bằng vùng đã mở nó.",
932
- "dialogBody": "So nút đã mở panel với nút nằm trong panel: màu của vùng đã không đi theo."
933
- }
934
- },
935
- "tableDocs": {
936
- "title": "Biến động thu chi · row tone",
937
- "item": "Khoản mục",
938
- "amount": "Số tiền",
939
- "status": "Trạng thái",
940
- "fee": "Phí chuyển khoản",
941
- "done": "Đã xử lý",
942
- "overdue": "Quá hạn thanh toán (3 ngày)",
943
- "check": "Cần kiểm tra",
944
- "failed": "Ghi nợ tự động thất bại",
945
- "failedBadge": "Thất bại"
946
- },
947
- "themeLab": {
948
- "page": {
949
- "title": "Phòng thí nghiệm theme",
950
- "subtitle": "Một trang, mọi component có thể render, nhiều theme, nhiều màu seed. Theme ở đây chỉ gồm custom property, không gì khác.",
951
- "footer": "URL mang theo theme và seed, nên ảnh chụp và phép đo cùng chỉ tới một ô của ma trận."
952
- },
953
- "product": "Theme Lab",
954
- "switch": {
955
- "title": "Theme và màu seed",
956
- "note": "Thêm một theme là thêm một file CSS và một dòng trong docs/themes/index.ts. Trang này không phải sửa.",
957
- "themeLabel": "Theme",
958
- "seedLabel": "Màu seed",
959
- "modeLabel": "Sắc độ",
960
- "seedHex": "Seed",
961
- "seedInk": "Màu chữ trên seed",
962
- "seedContrast": "Tương phản chữ, WCAG 2.2 SC 1.4.3",
963
- "legendPass": "từ 4.5:1 trở lên",
964
- "legendFail": "dưới AA"
965
- },
966
- "mode": {
967
- "light": "Sáng",
968
- "dark": "Tối"
969
- },
970
- "theme": {
971
- "base": {
972
- "name": "Mặc định",
973
- "note": "Theme của chính thư viện. Không file theme, không override — đây là nhóm đối chứng cho thấy component khi chưa khoác theme."
974
- },
975
- "glass": {
976
- "name": "Glassmorphism",
977
- "note": "Mặt kính mờ bán trong suốt, blur nền kèm bão hoà, viền sáng mảnh và chiều sâu nhiều lớp trên một nền rực rỡ."
978
- },
979
- "flat": {
980
- "name": "Flat",
981
- "note": "Không bo góc, không đổ bóng, mặt đục ngăn nhau bằng một đường kẻ. Bo góc về 0 tốn sáu mươi bảy khai báo."
982
- },
983
- "neubrutalism": {
984
- "name": "Neubrutalism",
985
- "note": "Viền đen dày, bóng đổ cứng không làm mờ, góc vuông và mảng màu bão hoà. Làm dày viền tốn 22 khai báo mà vẫn chỉ với tới một phần năm số chỗ."
986
- }
987
- },
988
- "seed": {
989
- "violet": "Tím",
990
- "azure": "Xanh lam",
991
- "coral": "Cam san hô",
992
- "citron": "Vàng chanh",
993
- "navy": "Xanh navy"
994
- },
995
- "nav": {
996
- "section": "Không gian làm việc",
997
- "overview": "Tổng quan",
998
- "reports": "Báo cáo",
999
- "people": "Nhân sự",
1000
- "settings": "Cài đặt",
1001
- "role": "Quản trị viên",
1002
- "footer": "Đã đăng nhập"
1003
- },
1004
- "app": {
1005
- "console": "Bảng điều khiển",
1006
- "billing": "Thanh toán"
1007
- },
1008
- "topbar": {
1009
- "notifications": "Thông báo",
1010
- "account": "Tài khoản"
1011
- },
1012
- "menu": {
1013
- "profile": "Hồ sơ",
1014
- "billing": "Thanh toán",
1015
- "logout": "Đăng xuất"
1016
- },
1017
- "popover": {
1018
- "title": "Hai mục mới",
1019
- "body": "Hiện chưa có gì cần bạn xử lý.",
1020
- "action": "Đánh dấu đã đọc"
1021
- },
1022
- "section": {
1023
- "type": "Chữ, ký hiệu và nhịp",
1024
- "typeNote": "Thang màu chữ là thứ vỡ đầu tiên trên một mặt bán trong suốt, nên mọi bậc của nó cùng nằm trên trang.",
1025
- "actions": "Hành động",
1026
- "display": "Trạng thái và hiển thị dữ liệu",
1027
- "tables": "Bảng",
1028
- "charts": "Biểu đồ",
1029
- "fields": "Thành phần nhập liệu",
1030
- "fieldsNote": "Một ô nhập phải đọc ra là chỗ gõ được trước khi đọc ra là một theme: nền, viền, vòng focus, placeholder và cả hai trạng thái rỗng/đã điền đều ở đây.",
1031
- "nav": "Điều hướng",
1032
- "feedback": "Phản hồi",
1033
- "overlays": "Lớp phủ",
1034
- "overlaysNote": "Những lớp này được MỞ khi đo, không chỉ đặt sẵn. Mỗi lớp portal ra ngoài cây DOM này và nhận theme qua overlay host của ThemeScope.",
1035
- "regions": "Vùng lồng nhau",
1036
- "chat": "Hội thoại",
1037
- "absent": "Không render được",
1038
- "absentNote": "Một thiếu sót không ai thấy là thiếu sót không ai tính đến."
1039
- },
1040
- "absent": {
1041
- "export": "Export",
1042
- "reason": "Lý do",
1043
- "provider": "Một provider, đã được runtime preview mount ở phía trên trang này.",
1044
- "overlayPortal": "Provider đổi nơi portal của mọi lớp phủ; dùng ở đây sẽ thay mất chính overlay host của ThemeScope mà trang này muốn đo.",
1045
- "themeScope": "Chính là wrapper của trang này.",
1046
- "ownsPage": "Shell chiếm trọn tài liệu, không lồng được trong AppShell.",
1047
- "hook": "Là hook, không có mặt nào để sơn.",
1048
- "function": "Là hàm, không phải component.",
1049
- "inertia": "Adapter của Inertia; cần một router mà preview này không có.",
1050
- "needsFile": "Cần một File thật do người dùng chọn từ ô tải lên.",
1051
- "needsNetwork": "Cần ảnh qua mạng; ở đây dùng asset đã commit thay thế.",
1052
- "needsRouter": "Cần một route và một query prefetch được.",
1053
- "needsQuery": "Cần kết quả TanStack Query thật, vốn là chuyện dữ liệu chứ không phải theme.",
1054
- "invisible": "Có trên trang, và theo định nghĩa thì nó không sơn gì cả.",
1055
- "needsSchema": "Cần một schema zod, trong khi check:example-imports chỉ cho trang tài liệu import react, lucide-react và @godxjp/ui.",
1056
- "sameSurface": "Là dạng lắp ghép của AlertDialog vốn đã có trên trang; nó không vẽ thêm mặt nào."
1057
- },
1058
- "action": {
1059
- "save": "Lưu",
1060
- "cancel": "Huỷ",
1061
- "secondary": "Phụ",
1062
- "outline": "Viền",
1063
- "ghost": "Trong suốt",
1064
- "dashed": "Nét đứt",
1065
- "destructive": "Xoá",
1066
- "link": "Liên kết",
1067
- "disabled": "Vô hiệu",
1068
- "search": "Tìm kiếm",
1069
- "bold": "Đậm",
1070
- "unread": "Chưa đọc",
1071
- "retry": "Thử lại",
1072
- "more": "Thêm",
1073
- "share": "Chia sẻ",
1074
- "open": "Mở"
1075
- },
1076
- "align": {
1077
- "start": "Trái",
1078
- "center": "Giữa",
1079
- "end": "Phải"
1080
- },
1081
- "label": {
1082
- "variants": "Biến thể",
1083
- "sizes": "Kích thước",
1084
- "toggles": "Toggle và đánh giá",
1085
- "actionsBar": "Thao tác với câu trả lời",
1086
- "badges": "Badge và ô màu",
1087
- "items": "mục",
1088
- "align": "Canh lề",
1089
- "progress": "Dung lượng đã dùng",
1090
- "people": "Nhóm",
1091
- "tools": "Công cụ",
1092
- "schedule": "Lịch",
1093
- "week": "Tuần",
1094
- "start": "Bắt đầu khoảng",
1095
- "end": "Kết thúc khoảng",
1096
- "permissions": "Quyền",
1097
- "quickPick": "Chọn nhanh",
1098
- "noResults": "Không có gì để hiển thị",
1099
- "available": "Có thể chọn",
1100
- "selected": "Đã chọn",
1101
- "qr": "Mã QR đăng ký",
1102
- "thumbnail": "Ảnh chụp bảng điều khiển",
1103
- "credential": "Khoá API",
1104
- "detail": "Chi tiết",
1105
- "master": "Danh sách",
1106
- "catalog": "Thêm từ catalogue",
1107
- "mainNav": "Điều hướng chính",
1108
- "onThisPage": "Mục lục trang",
1109
- "pinned": "Thanh ghim",
1110
- "skeletons": "Khung chờ tải",
1111
- "assistant": "Trợ lý",
1112
- "loading": "Đang tải",
1113
- "rating": "Đánh giá"
1114
- },
1115
- "table": {
1116
- "name": "Tên",
1117
- "owner": "Phụ trách",
1118
- "status": "Trạng thái",
1119
- "amount": "Số tiền"
1120
- },
1121
- "tone": {
1122
- "neutral": "Thường",
1123
- "success": "Đã duyệt",
1124
- "warning": "Chờ xử lý",
1125
- "destructive": "Từ chối",
1126
- "info": "Thông tin"
1127
- },
1128
- "stat": {
1129
- "members": "Thành viên",
1130
- "revenue": "Doanh thu",
1131
- "usage": "Mức sử dụng",
1132
- "open": "Yêu cầu đang mở",
1133
- "hint": "Tăng 3% so với tháng trước"
1134
- },
1135
- "chart": {
1136
- "trend": "Kế hoạch và thực tế",
1137
- "plan": "Kế hoạch",
1138
- "actual": "Thực tế",
1139
- "byMonth": "Theo tháng",
1140
- "stacked": "Chồng lớp",
1141
- "split": "Cơ cấu",
1142
- "weekly": "Bảy ngày gần nhất"
1143
- },
1144
- "field": {
1145
- "name": "Tên",
1146
- "namePlaceholder": "Từ 2 đến 60 ký tự",
1147
- "email": "Email",
1148
- "emailError": "Đây không phải một địa chỉ email.",
1149
- "search": "Tìm kiếm",
1150
- "searchPlaceholder": "Tìm theo tên hoặc mã",
1151
- "quantity": "Số lượng",
1152
- "password": "Mật khẩu",
1153
- "notes": "Ghi chú",
1154
- "tags": "Nhãn",
1155
- "role": "Vai trò",
1156
- "date": "Ngày",
1157
- "time": "Giờ",
1158
- "timeRange": "Ca làm",
1159
- "colour": "Màu thương hiệu",
1160
- "volume": "Âm lượng",
1161
- "region": "Khu vực",
1162
- "account": "Tài khoản kế toán",
1163
- "notify": "Thông báo qua email",
1164
- "agree": "Tôi đồng ý với điều khoản",
1165
- "scope": "Phạm vi áp dụng"
1166
- },
1167
- "role": {
1168
- "viewer": "Người xem",
1169
- "editor": "Người biên tập",
1170
- "admin": "Quản trị viên"
1171
- },
1172
- "perm": {
1173
- "read": "Đọc",
1174
- "write": "Ghi",
1175
- "admin": "Quản trị"
1176
- },
1177
- "overlay": {
1178
- "dialog": "Mở dialog",
1179
- "sheet": "Mở sheet",
1180
- "alertDialog": "Xác nhận xoá",
1181
- "tooltip": "Rê chuột xem tooltip",
1182
- "toast": "Hiện toast",
1183
- "toastMessage": "Đã lưu.",
1184
- "twoFactor": "Thiết lập hai lớp",
1185
- "inlineNote": "Listbox của Select cũng là một lớp phủ: nó cần nền đục nhất trong ba loại, vì một menu luôn nằm trên nội dung bất kỳ."
1186
- },
1187
- "error": {
1188
- "title": "Bạn không có quyền xem báo cáo này"
1189
- },
1190
- "auth": {
1191
- "title": "Đăng nhập",
1192
- "requester": "Theme Lab đang yêu cầu quyền truy cập",
1193
- "switch": "Đổi tài khoản",
1194
- "or": "hoặc",
1195
- "terms": "Điều khoản",
1196
- "privacy": "Quyền riêng tư"
1197
- },
1198
- "chat": {
1199
- "welcomeTitle": "Chào bạn",
1200
- "welcomeBody": "Hỏi tôi về hoá đơn, chi phí hay chấm công.",
1201
- "assistant": "Tôi có thể giúp gì?",
1202
- "user": "Tóm tắt hoá đơn hôm qua giúp tôi.",
1203
- "assistantName": "Trợ lý",
1204
- "userName": "Bạn",
1205
- "thoughts": "Các bước đã thực hiện",
1206
- "placeholder": "Nhập tin nhắn"
1207
- },
1208
- "sample": {
1209
- "alpha": "Khu vực phía Bắc",
1210
- "beta": "Văn phòng trung tâm",
1211
- "gamma": "Kho phía Nam",
1212
- "delta": "Nhà phụ cảng",
1213
- "epsilon": "Đội hiện trường",
1214
- "one": "Phạm Thái Dương",
1215
- "two": "Mai Sato",
1216
- "three": "Diego Costa",
1217
- "short": "Cập nhật vài phút trước.",
1218
- "long": "Một bảng mẫu gọn gàng mới là lỗi, không phải kết quả: hàng này cố tình đặt một nhãn ba dòng cạnh một nhãn một từ, một chuỗi không ngắt được cạnh một ô rỗng, và chuỗi dài nhất mà layout có thể phải nhận.",
1219
- "headline": "Bộ component này có khoác nổi một theme phức tạp không?",
1220
- "linkLabel": "Đọc quy tắc phân giải token",
1221
- "codeLabel": "Trích đoạn theme",
1222
- "secure": "Phiên làm việc đã mã hoá",
1223
- "syncing": "Đang đồng bộ",
1224
- "marqueeLabel": "Tạm dừng danh sách chạy",
1225
- "aspectTitle": "Vùng có tỉ lệ cố định"
1226
- },
1227
- "launcher": {
1228
- "trigger": "Ứng dụng",
1229
- "title": "Chuyển ứng dụng"
1230
- },
1231
- "org": {
1232
- "trigger": "Tổ chức"
1233
- },
1234
- "twoFactor": {
1235
- "title": "Thiết lập xác thực hai lớp",
1236
- "description": "Quét mã bằng ứng dụng xác thực, rồi nhập sáu chữ số hiển thị.",
1237
- "manualKey": "Hoặc nhập tay khoá này",
1238
- "code": "Mã sáu chữ số",
1239
- "recovery": "Hãy cất các mã khôi phục ở nơi an toàn. Chúng chỉ hiện một lần.",
1240
- "acknowledge": "Tôi đã lưu lại"
1241
- }
1242
- },
1243
- "spaceCompactDocs": {
1244
- "title": "SpaceCompact",
1245
- "subtitle": "Đọc một hàng control như MỘT hộp — lặp lại, tìm kiếm, số tiền kèm đơn vị",
1246
- "recur": {
1247
- "title": "Lặp lại (mỗi N tuần)",
1248
- "body": "Con số và đơn vị là một thiết lập, nên chúng đọc như một hộp. FormField gắn nhãn lên HÀNG, nên screen reader mở đầu bằng “Lặp lại, nhóm” và mỗi control bên trong vẫn giữ tên riêng.",
1249
- "label": "Lặp lại",
1250
- "helper": "Tần suất phát hành hoá đơn tự động.",
1251
- "every": "Khoảng",
1252
- "unit": "Đơn vị",
1253
- "reads": "Đọc thành",
1254
- "role": "role",
1255
- "roleValue": "group (chỉ khi hàng CÓ tên)"
1256
- },
1257
- "unit": {
1258
- "day": "ngày",
1259
- "week": "tuần",
1260
- "month": "tháng"
1261
- },
1262
- "search": {
1263
- "title": "Tìm kiếm và nút của nó",
1264
- "body": "Gõ và chạy là một thao tác liền mạch nên bỏ đường nối. Nút vẫn là Button thật — vòng focus và disabled vẫn hoạt động. Với `fullWidth`, ô nhập lấp phần còn lại của hàng, nút giữ đúng bề rộng của nó (antd `block`).",
1265
- "row": "Tìm nhân viên",
1266
- "term": "Từ khoá",
1267
- "run": "Chạy tìm kiếm",
1268
- "placeholder": "Tên hoặc mã nhân viên"
1269
- },
1270
- "amount": {
1271
- "title": "Số tiền, tiền tệ và fullWidth",
1272
- "body": "`fullWidth` kéo hàng đầy chiều rộng cha (antd `block`). Tỉ lệ bên trong vẫn của từng control nên chữ số không bị bóp trên màn hẹp.",
1273
- "label": "Số tiền hoá đơn",
1274
- "value": "Số tiền",
1275
- "currency": "Tiền tệ"
1276
- },
1277
- "vertical": {
1278
- "title": "orientation=\"vertical\" — phần port còn thiếu, đã ghi rõ",
1279
- "body": "Xếp dọc thì gộp được đường viền chung, nhưng bo góc hiện chỉ làm ở trục ngang: token góc của Input và trigger chỉ có ở trục inline. Ghi rõ thành việc tiếp theo, không để thiếu âm thầm.",
1280
- "row": "Ghi chú và gửi",
1281
- "note": "Ghi chú bàn giao",
1282
- "send": "Gửi",
1283
- "alias": "`vertical` là cách viết boolean của antd. Đặt cả hai thì `orientation` thắng."
1284
- },
1285
- "dont": {
1286
- "title": "Khi KHÔNG nên nối",
1287
- "body": "Nối những thứ không phải một thiết lập sẽ khiến các giá trị không liên quan trông như một hộp. Hãy tách FormField riêng.",
1288
- "dept": "Mã phòng ban",
1289
- "ext": "Số máy lẻ"
1290
- }
1291
- },
1292
- "chatComposerDocs": {
1293
- "footerTitle": "footer dạng NodeRender · đưa đính kèm / gợi ý / gửi xuống thanh dưới",
1294
- "footerBody": "Với `actions={false}` nút gửi nội dòng bị ẩn, và truyền một hàm vào `footer` sẽ trả về `components.SubmitButton` — đã nối sẵn onSubmit, disabled và trạng thái loading. Ô soạn giữ nguyên toàn chiều rộng; đính kèm ở đầu hàng, gửi ở cuối.",
1295
- "noComments": "Chưa có bình luận nào",
1296
- "commentLabel": "Bình luận (thanh dưới)",
1297
- "commentPlaceholder": "Nhập bình luận",
1298
- "attach": "Đính kèm tệp",
1299
- "enterHint": "Enter để gửi · Shift + Enter để xuống dòng",
1300
- "sendComment": "Gửi bình luận"
1301
- },
1302
- "tcgm": {
1303
- "demoNotice": "DESIGN PROTOTYPE · mọi thẻ, giá, cửa hàng và ngày phát hành bên dưới đều là mẫu hư cấu.",
1304
- "brandAlt": "TCG-M",
1305
- "nav": {
1306
- "cards": "Tìm thẻ",
1307
- "news": "Tin tức",
1308
- "calendar": "Lịch phát hành",
1309
- "watchlist": "Danh sách theo dõi",
1310
- "method": "Dữ liệu & biên tập",
1311
- "label": "Điều hướng chính"
1312
- },
1313
- "header": {
1314
- "search": "Tìm thẻ",
1315
- "watchlist": "Danh sách theo dõi",
1316
- "tryApp": "Trải nghiệm app",
1317
- "openMenu": "Mở menu",
1318
- "menu": "Menu"
1319
- },
1320
- "hero": {
1321
- "eyebrow": "Different cards. Same passion.",
1322
- "titleLine1": "Tìm thêm những lá bài",
1323
- "titleLine2": "mà bạn yêu thích.",
1324
- "leadLine1": "Từ lá bài bạn đang tìm đến điều bạn chưa biết mình sẽ thích.",
1325
- "leadLine2": "Thông tin thẻ, so sánh giá và tin tức, gom về một chỗ.",
1326
- "searchPlaceholder": "Tìm theo tên thẻ, mã số hoặc bộ bài",
1327
- "searchLabel": "Tên thẻ, mã số hoặc bộ bài",
1328
- "artAlt": "Minh hoạ thẻ bài gốc trải trên nền trời nhạt",
1329
- "artTag": "More cards. More possibilities.",
1330
- "hintTitles": "Nhiều tựa game",
1331
- "hintCompare": "So sánh cùng điều kiện",
1332
- "hintDiscover": "Khám phá điều mới"
1333
- },
1334
- "games": {
1335
- "label": "Lọc theo tựa game",
1336
- "all": "Tất cả",
1337
- "pokemon": "Pokémon Card",
1338
- "onepiece": "ONE PIECE",
1339
- "yugioh": "Yu-Gi-Oh!",
1340
- "duel": "Duel Masters",
1341
- "mtg": "MTG",
1342
- "other": "Khác"
1343
- },
1344
- "card": {
1345
- "classifiedAs": "Phân loại: {game}",
1346
- "priceLabel": "Giá bán tại shop niêm yết",
1347
- "noPrice": "Chưa có giá",
1348
- "shippingNote": "Chưa gồm ship",
1349
- "sampleNote": "Mẫu",
1350
- "sampleBadge": "SAMPLE",
1351
- "artAlt": "Thẻ hư cấu: {name}",
1352
- "watchAdd": "Thêm {name} vào danh sách theo dõi",
1353
- "watchRemove": "Bỏ {name} khỏi danh sách theo dõi"
1354
- },
1355
- "cards": {
1356
- "demo-01": {
1357
- "name": "Người dẫn đường giữa các vì sao",
1358
- "edition": "Bản thường"
1359
- },
1360
- "demo-02": {
1361
- "name": "Xưởng vẽ màu trời",
1362
- "edition": "Bản holo"
1363
- },
1364
- "demo-03": {
1365
- "name": "Khu vườn dưới trăng",
1366
- "edition": "Bản thường"
1367
- },
1368
- "demo-04": {
1369
- "name": "Hành trình san hô",
1370
- "edition": "Bản khác hình"
1371
- },
1372
- "demo-05": {
1373
- "name": "Lá thư nối những cơn gió",
1374
- "edition": "Bản thường"
1375
- },
1376
- "demo-06": {
1377
- "name": "Lăng kính lúc rạng đông",
1378
- "edition": "Bản holo"
1379
- }
1380
- },
1381
- "collection": {
1382
- "eyebrow": "Explore the collection",
1383
- "title": "Gặp một lá bài bạn chưa từng gặp.",
1384
- "action": "Tìm thẻ",
1385
- "count": "{count} mẫu",
1386
- "note": "Các thẻ bên dưới là hư cấu, chỉ dùng để duyệt thiết kế. Không phải thẻ chính thức của bất kỳ tựa game có thật nào.",
1387
- "emptyTitle": "Không có thẻ nào khớp điều kiện",
1388
- "emptyBody": "Hãy thử tựa game hoặc mã thẻ khác.",
1389
- "reset": "Đặt lại bộ lọc"
1390
- },
1391
- "news": {
1392
- "eyebrow": "Read & discover",
1393
- "title": "Hiểu thẻ bài thêm một chút.",
1394
- "action": "Đọc bài viết",
1395
- "sample": "Bài mẫu",
1396
- "meta": "2026.09.24 · đọc 4 phút",
1397
- "manual": "Chuyển tay · không tự chạy"
1398
- },
1399
- "articles": {
1400
- "compare": {
1401
- "title": "Năm điều nên kiểm tra trước khi nhìn giá",
1402
- "cat": "Hướng dẫn nhập môn"
1403
- },
1404
- "edition": {
1405
- "title": "Cùng tên nhưng khác thẻ? Cách phân biệt bản in",
1406
- "cat": "Kiến thức thẻ"
1407
- },
1408
- "watch": {
1409
- "title": "Gom những lá bài bạn quan tâm vào một danh sách",
1410
- "cat": "Cách dùng"
1411
- },
1412
- "sources": {
1413
- "title": "Vì sao mốc \"cập nhật lần cuối\" của dữ liệu giá lại quan trọng",
1414
- "cat": "Đọc dữ liệu"
1415
- }
1416
- },
1417
- "releases": {
1418
- "eyebrow": "Coming next",
1419
- "title": "Đưa điều bạn đang chờ lên lịch.",
1420
- "action": "Xem lịch",
1421
- "view": "Xem lịch phát hành"
1422
- },
1423
- "release": {
1424
- "prism": {
1425
- "title": "Prism World — Chương của Bầu trời",
1426
- "kind": "Bộ hư cấu gốc"
1427
- },
1428
- "notes": {
1429
- "title": "Collector's Notes Vol.01",
1430
- "kind": "Ví dụ phát hành hướng dẫn"
1431
- },
1432
- "study": {
1433
- "title": "Edition Study — Sáng và Tối",
1434
- "kind": "Bộ hư cấu gốc"
1435
- }
1436
- },
1437
- "trust": {
1438
- "eyebrow": "Clarity comes first",
1439
- "titleLine1": "Thông tin để so sánh,",
1440
- "titleLine2": "trình bày cho dễ hiểu.",
1441
- "bodyLine1": "Không chỉ giá: còn bản in, tình trạng, phí ship và thời điểm kiểm tra gần nhất.",
1442
- "bodyLine2": "Đủ căn cứ để bạn chọn một cách yên tâm.",
1443
- "link": "Dữ liệu & biên tập",
1444
- "editionTitle": "Cùng bản in, cùng tình trạng",
1445
- "editionBody": "Bản thường và bản khác hình được so sánh tách riêng.",
1446
- "freshnessTitle": "Ghi rõ thời điểm cập nhật",
1447
- "freshnessBody": "Điều kiện lúc niêm yết có thể khác hiện tại.",
1448
- "adsTitle": "Tách quảng cáo khỏi so sánh",
1449
- "adsBody": "Nhãn PR và lý do thứ tự sắp xếp đều hiển thị rõ."
1450
- },
1451
- "footer": {
1452
- "taglineLine1": "Những lá bài bạn yêu, nối tới một thế giới rộng hơn.",
1453
- "taglineLine2": "So sánh giá thẻ · thông tin thẻ · tin tức",
1454
- "accent": "Different cards. Same passion.",
1455
- "colFind": "Tìm & so sánh",
1456
- "colRead": "Đọc & hiểu",
1457
- "colAbout": "Về TCG-M",
1458
- "linkSearch": "Tìm thẻ",
1459
- "linkCompare": "So sánh bản in",
1460
- "linkWatchlist": "Danh sách theo dõi",
1461
- "linkNews": "Tin tức & hướng dẫn",
1462
- "linkCalendar": "Lịch phát hành",
1463
- "linkBasics": "Cơ bản về so sánh",
1464
- "linkMethod": "Dữ liệu & biên tập",
1465
- "linkComponents": "Thành phần UI",
1466
- "linkConsent": "Cài đặt lưu trữ demo",
1467
- "legal": "© TCG-M · tcg-m.com · Design prototype",
1468
- "disclaimer": "Tên các tựa game là ví dụ phân loại, không thể hiện dịch vụ chính thức hay quan hệ hợp tác."
1469
- },
1470
- "toast": {
1471
- "saved": "Đã lưu vào trình duyệt này",
1472
- "removed": "Đã bỏ khỏi danh sách theo dõi"
1473
- },
1474
- "dialog": {
1475
- "title": "Lịch phát hành hư cấu",
1476
- "body": "Đây là ví dụ hiển thị lịch. Không phải đợt phát hành hay đặt trước có thật.",
1477
- "sample": "Mẫu",
1478
- "date": "Tháng 9/2026 · ngày dùng cho demo"
1479
- }
1480
- },
1481
- "authExpiryDocs": {
1482
- "membersTitle": "Thành viên",
1483
- "nameColumn": "Họ tên",
1484
- "inviteTitle": "Gửi lời mời",
1485
- "send": "Gửi"
1486
- },
1487
- "treeDocs": {
1488
- "longList": {
1489
- "title": "Danh sách con dài (height · virtual · filterTreeNode)",
1490
- "description": "2 bộ → 28 mục → tối đa 421 ca. Với height, cây cuộn trong chiều cao đó và chỉ vẽ các hàng đang thấy (antd height + virtual). Nút khớp từ tìm kiếm được filterTreeNode làm nổi bật, không bị ẩn. Mục 2 thất bại ở lần loadData đầu và tải lại khi mở lần nữa. Mục 3 là ví dụ ghép cho API phân trang: chọn lá cuối để tải thêm 100 ca.",
1491
- "searchLabel": "Tìm ca kiểm thử",
1492
- "searchPlaceholder": "Làm nổi bật theo tên ca (vd: 042)",
1493
- "treeLabel": "Bộ kiểm thử",
1494
- "suiteIntegration": "Kiểm thử tích hợp",
1495
- "suiteAcceptance": "Kiểm thử chấp nhận",
1496
- "section": "Mục {number}",
1497
- "sectionFailing": "Mục {number} (lần tải đầu thất bại)",
1498
- "sectionPaged": "Mục {number} (mỗi lần {count} ca)",
1499
- "case": "Ca {number}",
1500
- "loadMore": {
1501
- "other": "Tải thêm {count} ca"
1502
- }
1503
- },
1504
- "drag": {
1505
- "title": "Kéo để sắp xếp hoặc đổi cha (draggable · allowDrop · onDrop)",
1506
- "description": "Thả vào 1/4 trên của dòng để đặt trước nó, 1/4 dưới để đặt sau, phần giữa để đặt vào trong. Tree không sửa treeData; onDrop báo nước đi. Bàn phím: Alt+↑ / Alt+↓ qua mục ngang hàng, Alt+← lùi cấp, Alt+→ thụt vào mục liền trước. Mỗi lần di chuyển được đọc qua live region. Ở đây allowDrop không cho thả vào trong “Ghi chú phát hành”.",
1507
- "treeLabel": "Danh sách trang sắp xếp được",
1508
- "lastMove": "Lần di chuyển cuối: {move}",
1509
- "none": "chưa có",
1510
- "keys": "Khi draggable: qua mục ngang hàng / lùi cấp / thụt cấp",
1511
- "pages": {
1512
- "guide": "Hướng dẫn sử dụng",
1513
- "start": "Bắt đầu",
1514
- "setup": "Cài đặt",
1515
- "faq": "Câu hỏi thường gặp",
1516
- "notes": "Ghi chú phát hành"
1517
- }
1518
- }
1519
- },
1520
- "progressDocs": {
1521
- "testRun": {
1522
- "passed": "Đạt",
1523
- "failed": "Lỗi",
1524
- "blocked": "Bị chặn",
1525
- "notRun": "Chưa chạy",
1526
- "caption": "Bộ kiểm thử hồi quy — {total} ca"
1527
- }
1528
- },
1529
- "breadcrumbExamples": {
1530
- "ellipsisTitle": "ellipsis · một đoạn dài trên một dòng",
1531
- "ellipsisDescription": "ellipsis trên một đoạn giữ breadcrumb trên một dòng và cắt nhãn đó bằng \"…\"; toàn văn hiện trong tooltip khi rê chuột và khi liên kết của đoạn nhận tiêu điểm bàn phím. Breadcrumb của antd không có ellipsis theo từng mục — hình dạng lấy theo Typography. breadcrumb của PageContainer nhận cùng trường này.",
1532
- "ellipsisAria": "Breadcrumb có cắt chữ",
1533
- "home": "Trang chủ",
1534
- "longSuite": "Kiểm thử tích hợp quý 3 · mô-đun thanh toán · kịch bản xuất lại hoá đơn",
1535
- "longSection": "Rà soát tiêu chí nghiệm thu cho bản ứng viên tháng 9/2026"
1536
- },
1537
- "timelineDocs": {
1538
- "log": {
1539
- "title": "status=\"log\" (nhật ký hoạt động)",
1540
- "description": "Với bản ghi những việc đã xảy ra như lịch sử issue, dùng status=\"log\": chấm trung tính, đường mảnh, không đọc tiền tố “Hoàn thành:” / “Sắp tới:” (giống item gray của antd).",
1541
- "status": "Tanaka đổi trạng thái Mở → Đang xử lý",
1542
- "comment": "Nguyễn đã bình luận",
1543
- "assignee": "Tanaka đổi người phụ trách"
1544
- }
1545
- },
1546
- "textDiffDocs": {
1547
- "subtitle": "Cho thấy điều gì đã đổi giữa hai phiên bản của một văn bản, dưới dạng phần xoá và phần thêm",
1548
- "source": {
1549
- "title": "Xem thay đổi của bản gốc",
1550
- "description": "Bản gốc lúc viết bản dịch so với bản gốc hiện tại. Tiếng Nhật được so từng ký tự, nên đổi một trợ từ không làm cả câu bị đánh dấu."
1551
- },
1552
- "policy": {
1553
- "title": "Sửa đổi quy định (đặt cạnh nhau)",
1554
- "description": "Các dòng không đổi được thu gọn sau một nút. Phần xoá bị gạch ngang, phần thêm được gạch chân, không chỉ dựa vào màu.",
1555
- "before": "Trước sửa đổi",
1556
- "after": "Sau sửa đổi"
1557
- },
1558
- "words": {
1559
- "title": "Văn bản chữ Latinh, theo từng từ",
1560
- "description": "Ngôn ngữ tách từ bằng dấu cách được so theo từng từ. Truyền granularity=\"line\" để so cả dòng."
1561
- }
1562
- },
1563
- "badgeDocs": {
1564
- "longLabels": {
1565
- "title": "Nhãn dài",
1566
- "description": "Chip không bao giờ xuống dòng: nhãn rộng hơn khung chứa sẽ kết thúc bằng dấu ba chấm (gh#1101), và khi bị cắt thì toàn văn hiện trong tooltip khi rê chuột hoặc khi focus bàn phím vào liên kết/hàng chứa chip (gh#1105). Trong ô bảng hay Card đều không cần thêm prop.",
1567
- "sample": "Qua nhóm · Đội vận hành hạ tầng nền tảng (vùng Đông Nhật Bản, ca trực đêm nhóm 2)"
1568
- }
1569
- },
1570
- "markdownDocs": {
1571
- "subtitle": "@godxjp/markdown · GFM + neo tiêu đề + sanitize · renderer v{version}",
1572
- "page": {
1573
- "title": "Nội dung trang",
1574
- "description": "Bảng, danh sách việc, mã, chú thích, Mermaid. Khối mermaid chỉ thành sơ đồ khi SVG sinh ra qua được kiểm tra; trước đó hiện dạng mã."
1575
- },
1576
- "hostile": {
1577
- "title": "Nội dung độc hại",
1578
- "description": "HTML thô không bao giờ thành phần tử; URL javascript: và data: bị loại bỏ."
1579
- }
1580
- },
1581
- "markdownEditorDocs": {
1582
- "subtitle": "@godxjp/editor · thanh định dạng · soạn / xem trước / song song · dán hoặc kéo thả để đính kèm",
1583
- "edit": {
1584
- "title": "Sửa trang",
1585
- "description": "⌘/Ctrl + B, I, K: đậm, nghiêng, liên kết. Phím tắt không chạy khi đang gõ IME.",
1586
- "label": "Nội dung",
1587
- "save": "Lưu"
1588
- },
1589
- "readOnly": {
1590
- "title": "Chỉ đọc",
1591
- "description": "Thanh công cụ vẫn nhận focus nhưng thao tác bị vô hiệu.",
1592
- "label": "Nội dung (chỉ xem)"
1593
- }
1594
- },
1595
- "blockEditorDocs": {
1596
- "subtitle": "@godxjp/block-editor · menu khối / · tay nắm kéo · thanh định dạng · lưu Markdown",
1597
- "edit": {
1598
- "title": "Sửa trang",
1599
- "description": "Gõ / để chèn khối, chọn chữ để định dạng, kéo ⋮⋮ để di chuyển khối (bàn phím: Alt+Shift+↑↓).",
1600
- "label": "Nội dung",
1601
- "save": "Lưu"
1602
- },
1603
- "markdown": {
1604
- "title": "Nội dung được lưu",
1605
- "description": "Markdown chuẩn hoá — đúng kết quả normalize() của @godxjp/markdown/codec.",
1606
- "label": "Markdown"
1607
- },
1608
- "readOnly": {
1609
- "title": "Chỉ xem",
1610
- "description": "Không có tay nắm, không có menu; nội dung hiển thị bằng Prose.",
1611
- "label": "Nội dung (chỉ xem)"
1612
- },
1613
- "pages": {
1614
- "guide": "Hướng dẫn thiết kế",
1615
- "setup": "Cài đặt",
1616
- "release": "Các bước phát hành"
1617
- }
1618
- },
1619
- "pageCoverDocs": {
1620
- "title": "Ghi chú kế hoạch quý",
1621
- "icon": "Biểu tượng trang",
1622
- "reposition": "Chỉnh vị trí",
1623
- "done": "Xong",
1624
- "body": "Khi đang chỉnh vị trí, kéo ảnh bìa hoặc dùng phím mũi tên; bấm biểu tượng để mở bộ chọn emoji.",
1625
- "position": "Tiêu điểm: {value}% tính từ trên"
1626
- },
1627
- "emojiPickerDocs": {
1628
- "subtitle": "Tìm theo ngôn ngữ · danh mục · dùng gần đây · điều khiển bằng bàn phím",
1629
- "title": "Chọn biểu tượng trang",
1630
- "description": "Gõ từ khoá theo ngôn ngữ hiện tại hoặc duyệt danh mục. Phím mũi tên để di chuyển, Enter để chọn.",
1631
- "label": "Biểu tượng",
1632
- "chosen": "Đã chọn: {icon}",
1633
- "none": "Không có biểu tượng"
1634
- },
1635
- "dialogWidthDocs": {
1636
- "title": "Hộp thoại rộng (width)",
1637
- "description": "width của DialogContent nới rộng bảng cho một lưới tổng quan; bị giới hạn bằng chiều rộng màn hình trừ lề, nên vẫn vừa điện thoại.",
1638
- "open": "Mở tổng quan",
1639
- "dialogTitle": "Tất cả màn hình làm việc",
1640
- "dialogDescription": "Hộp thoại 60rem chứa một lưới ba cột.",
1641
- "desktop": "Màn hình {n}"
1642
- },
1643
- "sortableListDocs": {
1644
- "subtitle": "Kéo tay nắm, hoặc Space · mũi tên · Space · Esc — mỗi lần di chuyển đều được đọc",
1645
- "widgetsTitle": "Widget trang chủ",
1646
- "widgetsDescription": "Sắp xếp các ô trên màn hình. Thứ tự được lưu một lần khi bạn thả.",
1647
- "calendar": "Lịch",
1648
- "mail": "Thư",
1649
- "tasks": "Công việc",
1650
- "notes": "Ghi chú",
1651
- "slot": "Ô {position}",
1652
- "saved": "Thứ tự đã lưu: {order}",
1653
- "tabsTitle": "Tab dự án",
1654
- "tabsDescription": "Dạng danh sách. Thanh toán bị khoá theo gói nên không nhấc được — các mục khác vẫn di chuyển qua nó.",
1655
- "overview": "Tổng quan",
1656
- "members": "Thành viên",
1657
- "billing": "Thanh toán",
1658
- "audit": "Nhật ký kiểm tra"
1659
- },
1660
- "topbarItemDocs": {
1661
- "notifications": "Thông báo",
1662
- "notificationsUnread": "Thông báo, {count} chưa đọc"
1663
- },
1664
- "appLauncherDocs": {
1665
- "requestAccess": "Yêu cầu quyền truy cập",
1666
- "allApps": "Tất cả ứng dụng"
1667
- },
1668
- "responsiveGridDocs": {
1669
- "boardTitle": "Bảng widget (rowSpan + dense)",
1670
- "boardDescription": "Một ô 2×1, một ô cao 1×2 (ResponsiveGrid.Item rowSpan={2}) và các ô 1×1. dense cho các ô nhỏ lấp chỗ trống cạnh ô rộng và ô cao.",
1671
- "revenue": "Doanh thu tháng",
1672
- "tasks": "Công việc đang mở",
1673
- "members": "Thành viên",
1674
- "invoices": "Hoá đơn",
1675
- "services": "Dịch vụ",
1676
- "invitations": "Lời mời"
1677
- },
1678
- "avatarDocs": {
1679
- "fitTitle": "Logo: fit=\"contain\"",
1680
- "fitDescription": "cover (mặc định) cắt cho đầy khung — hợp với ảnh khuôn mặt. contain hiện trọn logo rộng hoặc trong suốt.",
1681
- "logo": "Logo Acme"
1682
- },
1683
- "sidebarDocs": {
1684
- "newEntry": "Thêm bút toán"
1685
- },
1686
- "rangeTimelineDocs": {
1687
- "resizeTitle": "Cột nhãn đổi độ rộng, đang tải, hàng chưa có ngày",
1688
- "resizeDescription": "Kéo vạch ngăn ở header (hoặc focus rồi dùng phím mũi tên, Shift để bước lớn, Home/End) để mở rộng cột nhãn. Độ rộng là prop controlled nên app có thể lưu theo từng người dùng. Công tắc đánh dấu đang tải khoảng mới; hàng chưa có ngày hiện gợi ý thay cho thanh.",
1689
- "busyToggle": "Đang tải khoảng mới",
1690
- "longTask": "EXSELI-81 Làm lại form liên hệ và email xác nhận",
1691
- "undatedTask": "EXSELI-82 Chưa lên lịch",
1692
- "width": "Cột nhãn: {width}px",
1693
- "doneTask": "EXSELI-79 Ghi chú phát hành (xong)",
1694
- "lateTask": "EXSELI-80 Chuyển dữ liệu (quá hạn)",
1695
- "plannedTask": "EXSELI-84 API thanh toán (kế hoạch 3–7, thực tế 3–10)",
1696
- "schedulesTitle": "Lịch trình: mốc, phụ thuộc, đường cơ sở",
1697
- "schedulesDescription": "Một hàng tiêu đề không có gợi ý, các thanh so với đường cơ sở (nhãn trễ và sớm), một mốc hình thoi với đường cơ sở rỗng, một hàng chưa ghi nhận hoàn thành không có tay nắm cuối, một hàng đã hủy, một hàng chỉ có ngày hoàn thành, và các mũi tên phụ thuộc: mũi tên vi phạm có điểm đánh dấu có thể focus. Nhấn mạnh đánh dấu đường găng và hàng có rủi ro.",
1698
- "baseline": "đường cơ sở",
1699
- "phase": "Giai đoạn 1: Ra mắt",
1700
- "design": "Thiết kế",
1701
- "build": "Phát triển",
1702
- "release": "Phát hành",
1703
- "ops": "Vận hành (đang chạy)",
1704
- "legacy": "Chuyển hệ thống cũ (đã hủy)",
1705
- "audit": "Đánh giá bảo mật (chỉ ngày hoàn thành)",
1706
- "violation": "Không thể phát hành trước khi phát triển xong"
1707
- }
1708
- }