@cyberskill/design 1.0.0 → 1.1.1

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 (266) hide show
  1. package/DESIGN.md +10 -9
  2. package/README.md +31 -28
  3. package/SKILL.md +13 -9
  4. package/VERSION +1 -1
  5. package/_ds_bundle.js +660 -202
  6. package/_ds_manifest.json +1 -1
  7. package/_esm/cs.mjs +14 -8
  8. package/_esm/react.d.ts +216 -0
  9. package/_esm/react.mjs +114 -0
  10. package/base/collections.css +31 -0
  11. package/base/components.css +3 -0
  12. package/base/data.css +33 -0
  13. package/base/forms.css +8 -0
  14. package/base/interaction.css +1 -0
  15. package/base/typography.css +6 -0
  16. package/components/_i18n/strings.js +8 -4
  17. package/components/ai/ai-conversation.card.html +2 -2
  18. package/components/ai/ai-lumi.card.html +2 -2
  19. package/components/ai/ai.card.html +2 -2
  20. package/components/brand/brand.card.html +2 -2
  21. package/components/button/buttons.card.html +2 -2
  22. package/components/data/AspectRatio.d.ts +16 -0
  23. package/components/data/AspectRatio.figma.tsx +12 -0
  24. package/components/data/AspectRatio.jsx +16 -0
  25. package/components/data/AspectRatio.prompt.md +7 -0
  26. package/components/data/Collapsible.d.ts +21 -0
  27. package/components/data/Collapsible.figma.tsx +12 -0
  28. package/components/data/Collapsible.jsx +49 -0
  29. package/components/data/Collapsible.prompt.md +7 -0
  30. package/components/data/Image.d.ts +4 -0
  31. package/components/data/Image.prompt.md +2 -2
  32. package/components/data/Item.d.ts +26 -0
  33. package/components/data/Item.figma.tsx +12 -0
  34. package/components/data/Item.jsx +63 -0
  35. package/components/data/Item.prompt.md +10 -0
  36. package/components/data/ScrollArea.d.ts +16 -0
  37. package/components/data/ScrollArea.figma.tsx +12 -0
  38. package/components/data/ScrollArea.jsx +25 -0
  39. package/components/data/ScrollArea.prompt.md +7 -0
  40. package/components/data/collections.card.html +15 -4
  41. package/components/data/data.card.html +15 -4
  42. package/components/datatable/datatable.card.html +2 -2
  43. package/components/dialog/dialog.card.html +2 -2
  44. package/components/feedback/feedback-2.card.html +2 -2
  45. package/components/feedback/feedback.card.html +2 -2
  46. package/components/forms/Cascader.jsx +5 -3
  47. package/components/forms/Editor.prompt.md +1 -1
  48. package/components/forms/InputGroup.d.ts +4 -0
  49. package/components/forms/InputGroup.jsx +38 -8
  50. package/components/forms/InputGroup.prompt.md +3 -3
  51. package/components/forms/NativeSelect.d.ts +22 -0
  52. package/components/forms/NativeSelect.figma.tsx +12 -0
  53. package/components/forms/NativeSelect.jsx +56 -0
  54. package/components/forms/NativeSelect.prompt.md +10 -0
  55. package/components/forms/NumberField.d.ts +5 -0
  56. package/components/forms/NumberField.jsx +51 -7
  57. package/components/forms/NumberField.prompt.md +2 -2
  58. package/components/forms/SegmentedControl.jsx +1 -1
  59. package/components/forms/TagInput.d.ts +3 -0
  60. package/components/forms/TagInput.jsx +62 -20
  61. package/components/forms/TagInput.prompt.md +2 -2
  62. package/components/forms/forms-2.card.html +2 -2
  63. package/components/forms/forms.card.html +5 -4
  64. package/components/icon/Icon.prompt.md +1 -1
  65. package/components/icon/icon.card.html +2 -2
  66. package/components/logo/Logo.jsx +2 -1
  67. package/components/logo/logo.card.html +2 -2
  68. package/components/navigation/Menu.jsx +14 -1
  69. package/components/navigation/navigation.card.html +2 -2
  70. package/components/navigation/shell.card.html +2 -2
  71. package/components/overlays/AlertDialog.d.ts +29 -0
  72. package/components/overlays/AlertDialog.figma.tsx +12 -0
  73. package/components/overlays/AlertDialog.jsx +142 -0
  74. package/components/overlays/AlertDialog.prompt.md +12 -0
  75. package/components/overlays/Drawer.jsx +1 -1
  76. package/components/overlays/Popconfirm.jsx +14 -1
  77. package/components/overlays/Popover.jsx +14 -1
  78. package/components/overlays/alertdialog.card.html +42 -0
  79. package/components/overlays/overlays.card.html +2 -2
  80. package/components/textfield/textfield.card.html +2 -2
  81. package/docs/benchmark-rubric.md +46 -0
  82. package/docs/ci-cd.md +17 -11
  83. package/docs/consumer-grant.md +37 -0
  84. package/docs/consuming.md +45 -16
  85. package/docs/contrast-report.md +91 -103
  86. package/docs/conventions.md +12 -9
  87. package/docs/decisions.md +33 -10
  88. package/docs/deploy.md +1 -1
  89. package/docs/design-styles.md +26 -8
  90. package/docs/figma.md +3 -3
  91. package/docs/live-hub.md +5 -3
  92. package/docs/products.md +13 -11
  93. package/docs/quality-gates.md +35 -21
  94. package/docs/release-notes.md +21 -3
  95. package/docs/status/assets/favicon.svg +5 -0
  96. package/docs/status/assets/status-legacy.css +399 -0
  97. package/docs/status/assets/status-legacy.js +505 -0
  98. package/docs/status/assets/status.css +644 -0
  99. package/docs/status/assets/status.js +1308 -0
  100. package/docs/status/data/status-feed.json +1 -0
  101. package/docs/status/data/task/TASK-REL-001.js +1 -0
  102. package/docs/status/data/task/TASK-REL-002.js +1 -0
  103. package/docs/status/index.html +42 -0
  104. package/docs/status/roadmap.html +4 -0
  105. package/docs/status/status-legacy.html +117 -0
  106. package/docs/storybook.md +5 -4
  107. package/docs/sync.md +3 -2
  108. package/docs/tasks/BACKLOG.md +26 -0
  109. package/docs/tasks/release/TASK-REL-001-launch-1-1-0/spec.md +55 -0
  110. package/docs/tasks/release/TASK-REL-002-republish-1-1-1/spec.md +54 -0
  111. package/docs/template-schema-v2.md +15 -3
  112. package/docs/vi/benchmark-rubric.md +46 -0
  113. package/docs/vi/ci-cd.md +17 -11
  114. package/docs/vi/consumer-grant.md +37 -0
  115. package/docs/vi/consuming.md +45 -16
  116. package/docs/vi/contrast-report.md +94 -106
  117. package/docs/vi/conventions.md +12 -9
  118. package/docs/vi/decisions.md +33 -10
  119. package/docs/vi/deploy.md +1 -1
  120. package/docs/vi/design-styles.md +26 -8
  121. package/docs/vi/figma.md +3 -3
  122. package/docs/vi/live-hub.md +5 -3
  123. package/docs/vi/products.md +13 -11
  124. package/docs/vi/quality-gates.md +35 -21
  125. package/docs/vi/release-notes.md +26 -8
  126. package/docs/vi/storybook.md +5 -4
  127. package/docs/vi/sync.md +3 -2
  128. package/docs/vi/template-schema-v2.md +15 -3
  129. package/docs/viewer.html +2 -2
  130. package/fonts/spacegrotesk-var-latin-ext.woff2 +0 -0
  131. package/fonts/spacegrotesk-var-latin.woff2 +0 -0
  132. package/fonts/spacegrotesk-var-vietnamese.woff2 +0 -0
  133. package/guidelines/atomic-view.html +40 -27
  134. package/guidelines/elements-geometry.html +69 -0
  135. package/guidelines/elements-variants.html +17 -17
  136. package/guidelines/type-families.html +16 -10
  137. package/llms.txt +17 -11
  138. package/package.json +38 -16
  139. package/styles.css +1 -0
  140. package/templates/ai-cluster-demo.html +29 -14
  141. package/templates/app-shell/support.js +4 -4
  142. package/templates/article/content-schema.json +6 -0
  143. package/templates/article/support.js +4 -4
  144. package/templates/auth/support.js +4 -4
  145. package/templates/bod-deck/support.js +4 -4
  146. package/templates/bod-investor-update/support.js +4 -4
  147. package/templates/bod-memo/support.js +4 -4
  148. package/templates/bod-minutes/content-schema.json +12 -0
  149. package/templates/bod-minutes/support.js +4 -4
  150. package/templates/bod-report/support.js +4 -4
  151. package/templates/bod-resolution/support.js +4 -4
  152. package/templates/culture-event-invite/support.js +4 -4
  153. package/templates/dashboard/support.js +4 -4
  154. package/templates/delivery-change-note/support.js +4 -4
  155. package/templates/delivery-kickoff/support.js +4 -4
  156. package/templates/delivery-qbr-deck/support.js +4 -4
  157. package/templates/delivery-runbook/content-schema.json +6 -0
  158. package/templates/delivery-runbook/support.js +4 -4
  159. package/templates/delivery-status-email/support.js +4 -4
  160. package/templates/doc-style-guide/DocStyleGuide.dc.html +2 -2
  161. package/templates/doc-style-guide/support.js +4 -4
  162. package/templates/doc-suite-index/support.js +4 -4
  163. package/templates/doc-templates/DocTemplates.dc.html +1 -1
  164. package/templates/doc-templates/support.js +4 -4
  165. package/templates/email/support.js +4 -4
  166. package/templates/email-safe/README.md +17 -4
  167. package/templates/email-safe/email-launch.html +3 -3
  168. package/templates/email-safe/email-newsletter.html +1 -1
  169. package/templates/finance-dunning-email/support.js +4 -4
  170. package/templates/finance-expense-report/support.js +4 -4
  171. package/templates/finance-invoice/support.js +4 -4
  172. package/templates/finance-quote/support.js +4 -4
  173. package/templates/hr-announcement/support.js +4 -4
  174. package/templates/hr-interview-kit/content-schema.json +12 -0
  175. package/templates/hr-interview-kit/support.js +4 -4
  176. package/templates/hr-offboarding/content-schema.json +12 -0
  177. package/templates/hr-offboarding/support.js +4 -4
  178. package/templates/hr-performance-review/content-schema.json +12 -0
  179. package/templates/hr-performance-review/support.js +4 -4
  180. package/templates/hr-pip/content-schema.json +12 -0
  181. package/templates/hr-pip/support.js +4 -4
  182. package/templates/legal-msa/content-schema.json +16 -0
  183. package/templates/legal-msa/support.js +4 -4
  184. package/templates/legal-sow/support.js +4 -4
  185. package/templates/marketing-campaign-brief/support.js +4 -4
  186. package/templates/marketing-case-study/support.js +4 -4
  187. package/templates/marketing-launch/support.js +4 -4
  188. package/templates/marketing-newsletter/support.js +4 -4
  189. package/templates/marketing-page/content-schema.json +0 -1
  190. package/templates/marketing-page/support.js +4 -4
  191. package/templates/marketing-press-release/support.js +4 -4
  192. package/templates/marketing-social-kit/support.js +4 -4
  193. package/templates/playground.html +8 -4
  194. package/templates/sales-one-pager/support.js +4 -4
  195. package/templates/sales-proposal-deck/support.js +4 -4
  196. package/templates/settings/Settings.dc.html +26 -14
  197. package/templates/settings/content-schema.json +36 -0
  198. package/templates/settings/support.js +4 -4
  199. package/templates/slide-deck/support.js +4 -4
  200. package/templates/team-meeting-agenda/content-schema.json +16 -0
  201. package/templates/team-meeting-agenda/support.js +4 -4
  202. package/templates/tech-incident-report/support.js +4 -4
  203. package/templates/tech-release-notes/support.js +4 -4
  204. package/templates/tech-retro/content-schema.json +12 -0
  205. package/templates/tech-retro/support.js +4 -4
  206. package/templates/tech-rfc/content-schema.json +6 -0
  207. package/templates/tech-rfc/support.js +4 -4
  208. package/templates/vn-appointment-transfer/support.js +4 -4
  209. package/templates/vn-certificate-of-employment/support.js +4 -4
  210. package/templates/vn-code-of-conduct/support.js +4 -4
  211. package/templates/vn-compensation-regulation/support.js +4 -4
  212. package/templates/vn-contract-amendment/support.js +4 -4
  213. package/templates/vn-contractor-agreement/support.js +4 -4
  214. package/templates/vn-data-protection-policy/support.js +4 -4
  215. package/templates/vn-disciplinary-case-file/support.js +4 -4
  216. package/templates/vn-disciplinary-schedule/content-schema.json +15 -0
  217. package/templates/vn-disciplinary-schedule/support.js +4 -4
  218. package/templates/vn-employee-request/support.js +4 -4
  219. package/templates/vn-exit-handover/support.js +4 -4
  220. package/templates/vn-foreign-employee-pack/support.js +4 -4
  221. package/templates/vn-grassroots-democracy/support.js +4 -4
  222. package/templates/vn-infosec-policy/support.js +4 -4
  223. package/templates/vn-internal-labor-regulations/support.js +4 -4
  224. package/templates/vn-internship-agreement/support.js +4 -4
  225. package/templates/vn-job-description/support.js +4 -4
  226. package/templates/vn-labor-contract/support.js +4 -4
  227. package/templates/vn-labour-management-book/content-schema.json +15 -0
  228. package/templates/vn-labour-management-book/support.js +4 -4
  229. package/templates/vn-mutual-nda/support.js +4 -4
  230. package/templates/vn-ndnca-ip/support.js +4 -4
  231. package/templates/vn-offer-letter/support.js +4 -4
  232. package/templates/vn-onboarding-checklist/support.js +4 -4
  233. package/templates/vn-pdpl-consent/support.js +4 -4
  234. package/templates/vn-performance-evaluation-regulation/support.js +4 -4
  235. package/templates/vn-performance-review-form/support.js +4 -4
  236. package/templates/vn-phantom-stock/support.js +4 -4
  237. package/templates/vn-probation-contract/support.js +4 -4
  238. package/templates/vn-receipt-acknowledgement/content-schema.json +15 -0
  239. package/templates/vn-receipt-acknowledgement/support.js +4 -4
  240. package/templates/vn-remote-work-policy/support.js +4 -4
  241. package/templates/vn-resignation-letter/support.js +4 -4
  242. package/templates/vn-salary-scale/content-schema.json +15 -0
  243. package/templates/vn-salary-scale/support.js +4 -4
  244. package/templates/vn-sow-appendix/support.js +4 -4
  245. package/templates/vn-termination-decision/support.js +4 -4
  246. package/templates/vn-total-rewards-appendix/support.js +4 -4
  247. package/templates/vn-training-commitment/support.js +4 -4
  248. package/templates/vn-travel-expense-policy/support.js +4 -4
  249. package/tokens/element-seeds.json +112 -0
  250. package/tokens/elements.css +274 -187
  251. package/tokens/fonts.css +12 -3
  252. package/tokens/native/CSTokens.kt +84 -68
  253. package/tokens/native/CSTokens.swift +84 -68
  254. package/tokens/native/cs_tokens.dart +84 -68
  255. package/tokens/provenance.json +9 -9
  256. package/tokens/styles.css +15 -0
  257. package/tokens/tokens.dtcg.json +258 -233
  258. package/tokens/tokens.js +168 -167
  259. package/tokens/tokens.json +167 -166
  260. package/tokens/typography.css +9 -1
  261. package/ui_kits/status-hub/README.md +1 -2
  262. package/ui_kits/status-hub/index.html +2 -2
  263. package/ui_kits/status-hub/settings.html +6 -3
  264. package/ui_kits/website/chat.html +2 -2
  265. package/ui_kits/website/index.html +2 -2
  266. package/ui_kits/status-hub/identity-lab.html +0 -134
package/_esm/cs.mjs CHANGED
@@ -1,8 +1,8 @@
1
- // CyberSkill Design System — ESM entry point (GENERATED from _ds_manifest.json at v3.6.0).
2
- // No build step: import this module directly in a browser. It ensures React 18.3.1 (pinned,
3
- // skipped when window.React already exists), side-loads ../_ds_bundle.js once, resolves the
4
- // compiler-assigned namespace BY PREFIX (never a hardcoded suffix), and re-exports every component.
5
- // Styles are NOT injected — link styles.css yourself (same contract as the UMD path).
1
+ // CyberSkill Design System — ESM entry point (GENERATED from _ds_manifest.json at v1.1.1).
2
+ // No build step: import this module directly in a browser. It ensures React 19.2.8 via umd-react
3
+ // (official React 19 dropped UMD; pinned + SRI; skipped when window.React already exists), side-loads
4
+ // ../_ds_bundle.js once, resolves the compiler-assigned namespace BY PREFIX (never a hardcoded suffix),
5
+ // and re-exports every component. Styles are NOT injected — link styles.css yourself.
6
6
  // Regenerate when exports change — the esm-smoke gate fails on export/manifest drift.
7
7
  const g = typeof window !== "undefined" ? window : globalThis;
8
8
  async function ensureScript(src, integrity){
@@ -12,18 +12,20 @@ async function ensureScript(src, integrity){
12
12
  if (integrity) { s.integrity = integrity; s.crossOrigin = "anonymous"; }
13
13
  s.onload = res; s.onerror = () => rej(new Error("cs.js: failed to load " + href)); document.head.appendChild(s); });
14
14
  }
15
- if (!g.React) await ensureScript("https://unpkg.com/react@18.3.1/umd/react.development.js", "sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L");
16
- if (!g.ReactDOM) await ensureScript("https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js", "sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm");
15
+ if (!g.React) await ensureScript("https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js", "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30");
16
+ if (!g.ReactDOM) await ensureScript("https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js", "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu");
17
17
  const found = () => Object.keys(g).find(k => /^CyberSkillDesignSystem_/.test(k));
18
18
  if (!found()) await ensureScript("../_ds_bundle.js");
19
19
  export const CS = g[found()];
20
20
  if (!CS) throw new Error("cs.js: bundle loaded but no CyberSkillDesignSystem_* namespace found");
21
21
  export default CS;
22
- export const VERSION = "3.6.0";
22
+ export const VERSION = "1.1.1";
23
23
  export const AIDisclosureBadge = CS.AIDisclosureBadge;
24
24
  export const Accordion = CS.Accordion;
25
25
  export const Alert = CS.Alert;
26
+ export const AlertDialog = CS.AlertDialog;
26
27
  export const Anchor = CS.Anchor;
28
+ export const AspectRatio = CS.AspectRatio;
27
29
  export const Avatar = CS.Avatar;
28
30
  export const AvatarGroup = CS.AvatarGroup;
29
31
  export const BackTop = CS.BackTop;
@@ -46,6 +48,7 @@ export const ChatMessage = CS.ChatMessage;
46
48
  export const Checkbox = CS.Checkbox;
47
49
  export const CitationList = CS.CitationList;
48
50
  export const CodeBlock = CS.CodeBlock;
51
+ export const Collapsible = CS.Collapsible;
49
52
  export const ColorPicker = CS.ColorPicker;
50
53
  export const Combobox = CS.Combobox;
51
54
  export const CommandPalette = CS.CommandPalette;
@@ -76,6 +79,7 @@ export const Image = CS.Image;
76
79
  export const InlineEdit = CS.InlineEdit;
77
80
  export const InputGroup = CS.InputGroup;
78
81
  export const InputOTP = CS.InputOTP;
82
+ export const Item = CS.Item;
79
83
  export const Kbd = CS.Kbd;
80
84
  export const Link = CS.Link;
81
85
  export const List = CS.List;
@@ -87,6 +91,7 @@ export const Mentions = CS.Mentions;
87
91
  export const Menu = CS.Menu;
88
92
  export const MenuItem = CS.MenuItem;
89
93
  export const Menubar = CS.Menubar;
94
+ export const NativeSelect = CS.NativeSelect;
90
95
  export const NavItem = CS.NavItem;
91
96
  export const NavigationMenu = CS.NavigationMenu;
92
97
  export const NumberField = CS.NumberField;
@@ -101,6 +106,7 @@ export const Radio = CS.Radio;
101
106
  export const RadioGroup = CS.RadioGroup;
102
107
  export const Rating = CS.Rating;
103
108
  export const Result = CS.Result;
109
+ export const ScrollArea = CS.ScrollArea;
104
110
  export const SearchField = CS.SearchField;
105
111
  export const SegmentedControl = CS.SegmentedControl;
106
112
  export const Select = CS.Select;
@@ -0,0 +1,216 @@
1
+ // CyberSkill Design System — bundler-native React types (GENERATED).
2
+ // Mirrors `_esm/react.mjs`. Regenerate: node scripts/generate-react-entry.mjs
3
+
4
+ export { AIDisclosureBadge } from "../components/ai/AIDisclosureBadge";
5
+ export type * from "../components/ai/AIDisclosureBadge";
6
+ export { ChatMessage } from "../components/ai/ChatMessage";
7
+ export type * from "../components/ai/ChatMessage";
8
+ export { CitationList } from "../components/ai/CitationList";
9
+ export type * from "../components/ai/CitationList";
10
+ export { ConfidenceMeter } from "../components/ai/ConfidenceMeter";
11
+ export type * from "../components/ai/ConfidenceMeter";
12
+ export { HumanReviewGate } from "../components/ai/HumanReviewGate";
13
+ export type * from "../components/ai/HumanReviewGate";
14
+ export { PromptInput } from "../components/ai/PromptInput";
15
+ export type * from "../components/ai/PromptInput";
16
+ export { PromptSuggestions } from "../components/ai/PromptSuggestions";
17
+ export type * from "../components/ai/PromptSuggestions";
18
+ export { TypingIndicator } from "../components/ai/TypingIndicator";
19
+ export type * from "../components/ai/TypingIndicator";
20
+ export { LumiAvatar } from "../components/brand/LumiAvatar";
21
+ export type * from "../components/brand/LumiAvatar";
22
+ export { Button } from "../components/button/Button";
23
+ export type * from "../components/button/Button";
24
+ export { ButtonGroup } from "../components/button/ButtonGroup";
25
+ export type * from "../components/button/ButtonGroup";
26
+ export { FloatingActionButton } from "../components/button/FloatingActionButton";
27
+ export type * from "../components/button/FloatingActionButton";
28
+ export { Accordion } from "../components/data/Accordion";
29
+ export type * from "../components/data/Accordion";
30
+ export { AspectRatio } from "../components/data/AspectRatio";
31
+ export type * from "../components/data/AspectRatio";
32
+ export { Avatar, AvatarGroup } from "../components/data/Avatar";
33
+ export type * from "../components/data/Avatar";
34
+ export { Card, CardHeader, CardBody, CardFooter } from "../components/data/Card";
35
+ export type * from "../components/data/Card";
36
+ export { Carousel } from "../components/data/Carousel";
37
+ export type * from "../components/data/Carousel";
38
+ export { Chart } from "../components/data/Chart";
39
+ export type * from "../components/data/Chart";
40
+ export { CodeBlock } from "../components/data/CodeBlock";
41
+ export type * from "../components/data/CodeBlock";
42
+ export { Collapsible } from "../components/data/Collapsible";
43
+ export type * from "../components/data/Collapsible";
44
+ export { Comment } from "../components/data/Comment";
45
+ export type * from "../components/data/Comment";
46
+ export { DescriptionList } from "../components/data/DescriptionList";
47
+ export type * from "../components/data/DescriptionList";
48
+ export { Divider } from "../components/data/Divider";
49
+ export type * from "../components/data/Divider";
50
+ export { Image } from "../components/data/Image";
51
+ export type * from "../components/data/Image";
52
+ export { Item } from "../components/data/Item";
53
+ export type * from "../components/data/Item";
54
+ export { Kbd } from "../components/data/Kbd";
55
+ export type * from "../components/data/Kbd";
56
+ export { List, ListItem } from "../components/data/List";
57
+ export type * from "../components/data/List";
58
+ export { Masonry } from "../components/data/Masonry";
59
+ export type * from "../components/data/Masonry";
60
+ export { QRCode } from "../components/data/QRCode";
61
+ export type * from "../components/data/QRCode";
62
+ export { ScrollArea } from "../components/data/ScrollArea";
63
+ export type * from "../components/data/ScrollArea";
64
+ export { Sortable } from "../components/data/Sortable";
65
+ export type * from "../components/data/Sortable";
66
+ export { Splitter } from "../components/data/Splitter";
67
+ export type * from "../components/data/Splitter";
68
+ export { Stat } from "../components/data/Stat";
69
+ export type * from "../components/data/Stat";
70
+ export { Terminal } from "../components/data/Terminal";
71
+ export type * from "../components/data/Terminal";
72
+ export { Timeline } from "../components/data/Timeline";
73
+ export type * from "../components/data/Timeline";
74
+ export { Tooltip } from "../components/data/Tooltip";
75
+ export type * from "../components/data/Tooltip";
76
+ export { Tree } from "../components/data/Tree";
77
+ export type * from "../components/data/Tree";
78
+ export { Watermark } from "../components/data/Watermark";
79
+ export type * from "../components/data/Watermark";
80
+ export { DataGrid } from "../components/datatable/DataGrid";
81
+ export type * from "../components/datatable/DataGrid";
82
+ export { DataTable } from "../components/datatable/DataTable";
83
+ export type * from "../components/datatable/DataTable";
84
+ export { TreeTable } from "../components/datatable/TreeTable";
85
+ export type * from "../components/datatable/TreeTable";
86
+ export { Dialog } from "../components/dialog/Dialog";
87
+ export type * from "../components/dialog/Dialog";
88
+ export { Alert } from "../components/feedback/Alert";
89
+ export type * from "../components/feedback/Alert";
90
+ export { Badge } from "../components/feedback/Badge";
91
+ export type * from "../components/feedback/Badge";
92
+ export { EmptyState } from "../components/feedback/EmptyState";
93
+ export type * from "../components/feedback/EmptyState";
94
+ export { ProgressBar } from "../components/feedback/ProgressBar";
95
+ export type * from "../components/feedback/ProgressBar";
96
+ export { Result } from "../components/feedback/Result";
97
+ export type * from "../components/feedback/Result";
98
+ export { Skeleton } from "../components/feedback/Skeleton";
99
+ export type * from "../components/feedback/Skeleton";
100
+ export { Spinner } from "../components/feedback/Spinner";
101
+ export type * from "../components/feedback/Spinner";
102
+ export { StatusIndicator } from "../components/feedback/StatusIndicator";
103
+ export type * from "../components/feedback/StatusIndicator";
104
+ export { Tag } from "../components/feedback/Tag";
105
+ export type * from "../components/feedback/Tag";
106
+ export { ToastStack, Toast } from "../components/feedback/Toast";
107
+ export type * from "../components/feedback/Toast";
108
+ export { Calendar } from "../components/forms/Calendar";
109
+ export type * from "../components/forms/Calendar";
110
+ export { Cascader } from "../components/forms/Cascader";
111
+ export type * from "../components/forms/Cascader";
112
+ export { Checkbox } from "../components/forms/Checkbox";
113
+ export type * from "../components/forms/Checkbox";
114
+ export { ColorPicker } from "../components/forms/ColorPicker";
115
+ export type * from "../components/forms/ColorPicker";
116
+ export { Combobox } from "../components/forms/Combobox";
117
+ export type * from "../components/forms/Combobox";
118
+ export { DatePicker } from "../components/forms/DatePicker";
119
+ export type * from "../components/forms/DatePicker";
120
+ export { Editor } from "../components/forms/Editor";
121
+ export type * from "../components/forms/Editor";
122
+ export { FileUpload } from "../components/forms/FileUpload";
123
+ export type * from "../components/forms/FileUpload";
124
+ export { Form, FormField, FormFieldArray, FormWizard } from "../components/forms/Form";
125
+ export type * from "../components/forms/Form";
126
+ export { InlineEdit } from "../components/forms/InlineEdit";
127
+ export type * from "../components/forms/InlineEdit";
128
+ export { InputGroup } from "../components/forms/InputGroup";
129
+ export type * from "../components/forms/InputGroup";
130
+ export { InputOTP } from "../components/forms/InputOTP";
131
+ export type * from "../components/forms/InputOTP";
132
+ export { Mentions } from "../components/forms/Mentions";
133
+ export type * from "../components/forms/Mentions";
134
+ export { NativeSelect } from "../components/forms/NativeSelect";
135
+ export type * from "../components/forms/NativeSelect";
136
+ export { NumberField } from "../components/forms/NumberField";
137
+ export type * from "../components/forms/NumberField";
138
+ export { Radio, RadioGroup } from "../components/forms/RadioGroup";
139
+ export type * from "../components/forms/RadioGroup";
140
+ export { Rating } from "../components/forms/Rating";
141
+ export type * from "../components/forms/Rating";
142
+ export { SearchField } from "../components/forms/SearchField";
143
+ export type * from "../components/forms/SearchField";
144
+ export { SegmentedControl } from "../components/forms/SegmentedControl";
145
+ export type * from "../components/forms/SegmentedControl";
146
+ export { Select } from "../components/forms/Select";
147
+ export type * from "../components/forms/Select";
148
+ export { Slider } from "../components/forms/Slider";
149
+ export type * from "../components/forms/Slider";
150
+ export { Switch } from "../components/forms/Switch";
151
+ export type * from "../components/forms/Switch";
152
+ export { TagInput } from "../components/forms/TagInput";
153
+ export type * from "../components/forms/TagInput";
154
+ export { Textarea } from "../components/forms/Textarea";
155
+ export type * from "../components/forms/Textarea";
156
+ export { TimePicker } from "../components/forms/TimePicker";
157
+ export type * from "../components/forms/TimePicker";
158
+ export { Toggle } from "../components/forms/Toggle";
159
+ export type * from "../components/forms/Toggle";
160
+ export { Transfer } from "../components/forms/Transfer";
161
+ export type * from "../components/forms/Transfer";
162
+ export { TreeSelect } from "../components/forms/TreeSelect";
163
+ export type * from "../components/forms/TreeSelect";
164
+ export { Icon } from "../components/icon/Icon";
165
+ export type * from "../components/icon/Icon";
166
+ export declare const CS_ICONS: Readonly<Record<string, string>>;
167
+ export { Logo } from "../components/logo/Logo";
168
+ export type * from "../components/logo/Logo";
169
+ export declare const CS_LOGO_VIEWBOX: string;
170
+ export declare const CS_LOGO_MARK_INNER: string;
171
+ export { Anchor } from "../components/navigation/Anchor";
172
+ export type * from "../components/navigation/Anchor";
173
+ export { BackTop } from "../components/navigation/BackTop";
174
+ export type * from "../components/navigation/BackTop";
175
+ export { Breadcrumb } from "../components/navigation/Breadcrumb";
176
+ export type * from "../components/navigation/Breadcrumb";
177
+ export { CommandPalette } from "../components/navigation/CommandPalette";
178
+ export type * from "../components/navigation/CommandPalette";
179
+ export { Dock } from "../components/navigation/Dock";
180
+ export type * from "../components/navigation/Dock";
181
+ export { HotKeys } from "../components/navigation/HotKeys";
182
+ export type * from "../components/navigation/HotKeys";
183
+ export { Link } from "../components/navigation/Link";
184
+ export type * from "../components/navigation/Link";
185
+ export { Menu, MenuItem } from "../components/navigation/Menu";
186
+ export type * from "../components/navigation/Menu";
187
+ export { Menubar } from "../components/navigation/Menubar";
188
+ export type * from "../components/navigation/Menubar";
189
+ export { NavigationMenu } from "../components/navigation/NavigationMenu";
190
+ export type * from "../components/navigation/NavigationMenu";
191
+ export { Pagination } from "../components/navigation/Pagination";
192
+ export type * from "../components/navigation/Pagination";
193
+ export { Sidebar, NavItem } from "../components/navigation/Sidebar";
194
+ export type * from "../components/navigation/Sidebar";
195
+ export { Steps } from "../components/navigation/Steps";
196
+ export type * from "../components/navigation/Steps";
197
+ export { Tabs, Tab } from "../components/navigation/Tabs";
198
+ export type * from "../components/navigation/Tabs";
199
+ export { Toolbar } from "../components/navigation/Toolbar";
200
+ export type * from "../components/navigation/Toolbar";
201
+ export { AlertDialog } from "../components/overlays/AlertDialog";
202
+ export type * from "../components/overlays/AlertDialog";
203
+ export { ContextMenu } from "../components/overlays/ContextMenu";
204
+ export type * from "../components/overlays/ContextMenu";
205
+ export { Drawer } from "../components/overlays/Drawer";
206
+ export type * from "../components/overlays/Drawer";
207
+ export { HoverCard } from "../components/overlays/HoverCard";
208
+ export type * from "../components/overlays/HoverCard";
209
+ export { Popconfirm } from "../components/overlays/Popconfirm";
210
+ export type * from "../components/overlays/Popconfirm";
211
+ export { Popover } from "../components/overlays/Popover";
212
+ export type * from "../components/overlays/Popover";
213
+ export { Tour } from "../components/overlays/Tour";
214
+ export type * from "../components/overlays/Tour";
215
+ export { TextField } from "../components/textfield/TextField";
216
+ export type * from "../components/textfield/TextField";
package/_esm/react.mjs ADDED
@@ -0,0 +1,114 @@
1
+ // CyberSkill Design System — bundler-native React entry (GENERATED).
2
+ // Re-exports every public component from source. React / react-dom are
3
+ // peerDependencies (external) — do not use this entry without a bundler
4
+ // that can transpile JSX (Next transpilePackages, Vite, etc.).
5
+ // Browser / no-build consumers: import from `@cyberskill/design/legacy`
6
+ // (`_esm/cs.mjs`) instead. Styles are NOT injected — link styles.css.
7
+ // Regenerate: node scripts/generate-react-entry.mjs
8
+
9
+ export { AIDisclosureBadge } from "../components/ai/AIDisclosureBadge.jsx";
10
+ export { ChatMessage } from "../components/ai/ChatMessage.jsx";
11
+ export { CitationList } from "../components/ai/CitationList.jsx";
12
+ export { ConfidenceMeter } from "../components/ai/ConfidenceMeter.jsx";
13
+ export { HumanReviewGate } from "../components/ai/HumanReviewGate.jsx";
14
+ export { PromptInput } from "../components/ai/PromptInput.jsx";
15
+ export { PromptSuggestions } from "../components/ai/PromptSuggestions.jsx";
16
+ export { TypingIndicator } from "../components/ai/TypingIndicator.jsx";
17
+ export { LumiAvatar } from "../components/brand/LumiAvatar.jsx";
18
+ export { Button } from "../components/button/Button.jsx";
19
+ export { ButtonGroup } from "../components/button/ButtonGroup.jsx";
20
+ export { FloatingActionButton } from "../components/button/FloatingActionButton.jsx";
21
+ export { Accordion } from "../components/data/Accordion.jsx";
22
+ export { AspectRatio } from "../components/data/AspectRatio.jsx";
23
+ export { Avatar, AvatarGroup } from "../components/data/Avatar.jsx";
24
+ export { Card, CardHeader, CardBody, CardFooter } from "../components/data/Card.jsx";
25
+ export { Carousel } from "../components/data/Carousel.jsx";
26
+ export { Chart } from "../components/data/Chart.jsx";
27
+ export { CodeBlock } from "../components/data/CodeBlock.jsx";
28
+ export { Collapsible } from "../components/data/Collapsible.jsx";
29
+ export { Comment } from "../components/data/Comment.jsx";
30
+ export { DescriptionList } from "../components/data/DescriptionList.jsx";
31
+ export { Divider } from "../components/data/Divider.jsx";
32
+ export { Image } from "../components/data/Image.jsx";
33
+ export { Item } from "../components/data/Item.jsx";
34
+ export { Kbd } from "../components/data/Kbd.jsx";
35
+ export { List, ListItem } from "../components/data/List.jsx";
36
+ export { Masonry } from "../components/data/Masonry.jsx";
37
+ export { QRCode } from "../components/data/QRCode.jsx";
38
+ export { ScrollArea } from "../components/data/ScrollArea.jsx";
39
+ export { Sortable } from "../components/data/Sortable.jsx";
40
+ export { Splitter } from "../components/data/Splitter.jsx";
41
+ export { Stat } from "../components/data/Stat.jsx";
42
+ export { Terminal } from "../components/data/Terminal.jsx";
43
+ export { Timeline } from "../components/data/Timeline.jsx";
44
+ export { Tooltip } from "../components/data/Tooltip.jsx";
45
+ export { Tree } from "../components/data/Tree.jsx";
46
+ export { Watermark } from "../components/data/Watermark.jsx";
47
+ export { DataGrid } from "../components/datatable/DataGrid.jsx";
48
+ export { DataTable } from "../components/datatable/DataTable.jsx";
49
+ export { TreeTable } from "../components/datatable/TreeTable.jsx";
50
+ export { Dialog } from "../components/dialog/Dialog.jsx";
51
+ export { Alert } from "../components/feedback/Alert.jsx";
52
+ export { Badge } from "../components/feedback/Badge.jsx";
53
+ export { EmptyState } from "../components/feedback/EmptyState.jsx";
54
+ export { ProgressBar } from "../components/feedback/ProgressBar.jsx";
55
+ export { Result } from "../components/feedback/Result.jsx";
56
+ export { Skeleton } from "../components/feedback/Skeleton.jsx";
57
+ export { Spinner } from "../components/feedback/Spinner.jsx";
58
+ export { StatusIndicator } from "../components/feedback/StatusIndicator.jsx";
59
+ export { Tag } from "../components/feedback/Tag.jsx";
60
+ export { ToastStack, Toast } from "../components/feedback/Toast.jsx";
61
+ export { Calendar } from "../components/forms/Calendar.jsx";
62
+ export { Cascader } from "../components/forms/Cascader.jsx";
63
+ export { Checkbox } from "../components/forms/Checkbox.jsx";
64
+ export { ColorPicker } from "../components/forms/ColorPicker.jsx";
65
+ export { Combobox } from "../components/forms/Combobox.jsx";
66
+ export { DatePicker } from "../components/forms/DatePicker.jsx";
67
+ export { Editor } from "../components/forms/Editor.jsx";
68
+ export { FileUpload } from "../components/forms/FileUpload.jsx";
69
+ export { Form, FormField, FormFieldArray, FormWizard } from "../components/forms/Form.jsx";
70
+ export { InlineEdit } from "../components/forms/InlineEdit.jsx";
71
+ export { InputGroup } from "../components/forms/InputGroup.jsx";
72
+ export { InputOTP } from "../components/forms/InputOTP.jsx";
73
+ export { Mentions } from "../components/forms/Mentions.jsx";
74
+ export { NativeSelect } from "../components/forms/NativeSelect.jsx";
75
+ export { NumberField } from "../components/forms/NumberField.jsx";
76
+ export { Radio, RadioGroup } from "../components/forms/RadioGroup.jsx";
77
+ export { Rating } from "../components/forms/Rating.jsx";
78
+ export { SearchField } from "../components/forms/SearchField.jsx";
79
+ export { SegmentedControl } from "../components/forms/SegmentedControl.jsx";
80
+ export { Select } from "../components/forms/Select.jsx";
81
+ export { Slider } from "../components/forms/Slider.jsx";
82
+ export { Switch } from "../components/forms/Switch.jsx";
83
+ export { TagInput } from "../components/forms/TagInput.jsx";
84
+ export { Textarea } from "../components/forms/Textarea.jsx";
85
+ export { TimePicker } from "../components/forms/TimePicker.jsx";
86
+ export { Toggle } from "../components/forms/Toggle.jsx";
87
+ export { Transfer } from "../components/forms/Transfer.jsx";
88
+ export { TreeSelect } from "../components/forms/TreeSelect.jsx";
89
+ export { CS_ICONS, Icon } from "../components/icon/Icon.jsx";
90
+ export { Logo } from "../components/logo/Logo.jsx";
91
+ export { CS_LOGO_VIEWBOX, CS_LOGO_MARK_INNER } from "../components/logo/logo-data.js";
92
+ export { Anchor } from "../components/navigation/Anchor.jsx";
93
+ export { BackTop } from "../components/navigation/BackTop.jsx";
94
+ export { Breadcrumb } from "../components/navigation/Breadcrumb.jsx";
95
+ export { CommandPalette } from "../components/navigation/CommandPalette.jsx";
96
+ export { Dock } from "../components/navigation/Dock.jsx";
97
+ export { HotKeys } from "../components/navigation/HotKeys.jsx";
98
+ export { Link } from "../components/navigation/Link.jsx";
99
+ export { Menu, MenuItem } from "../components/navigation/Menu.jsx";
100
+ export { Menubar } from "../components/navigation/Menubar.jsx";
101
+ export { NavigationMenu } from "../components/navigation/NavigationMenu.jsx";
102
+ export { Pagination } from "../components/navigation/Pagination.jsx";
103
+ export { Sidebar, NavItem } from "../components/navigation/Sidebar.jsx";
104
+ export { Steps } from "../components/navigation/Steps.jsx";
105
+ export { Tabs, Tab } from "../components/navigation/Tabs.jsx";
106
+ export { Toolbar } from "../components/navigation/Toolbar.jsx";
107
+ export { AlertDialog } from "../components/overlays/AlertDialog.jsx";
108
+ export { ContextMenu } from "../components/overlays/ContextMenu.jsx";
109
+ export { Drawer } from "../components/overlays/Drawer.jsx";
110
+ export { HoverCard } from "../components/overlays/HoverCard.jsx";
111
+ export { Popconfirm } from "../components/overlays/Popconfirm.jsx";
112
+ export { Popover } from "../components/overlays/Popover.jsx";
113
+ export { Tour } from "../components/overlays/Tour.jsx";
114
+ export { TextField } from "../components/textfield/TextField.jsx";
@@ -11,6 +11,26 @@
11
11
  .cs-list__sub { font-size: var(--cs-font-size-xs); color: var(--cs-color-text-muted); }
12
12
  .cs-list__trail { flex: none; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); }
13
13
 
14
+ /* Item — settings / nav / list row chrome (sibling of ListItem, first-class) */
15
+ .cs-item {
16
+ display: flex; align-items: center; gap: 14px;
17
+ padding: 12px 14px; border-radius: var(--cs-radius-md);
18
+ color: var(--cs-color-text-primary); text-align: start;
19
+ text-decoration: none; border: 1px solid transparent;
20
+ background: var(--cs-color-surface-panel);
21
+ }
22
+ .cs-item--interactive { cursor: pointer; font: inherit; inline-size: 100%; }
23
+ button.cs-item--interactive { border: 1px solid transparent; background: var(--cs-color-surface-panel); }
24
+ .cs-item--interactive:hover { background: var(--cs-color-surface-raised); border-color: var(--cs-color-border-default); }
25
+ .cs-item--interactive:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; }
26
+ .cs-item.is-selected { border-color: var(--cs-color-brand-ochre); background: var(--cs-accent-tint, var(--cs-color-surface-raised)); }
27
+ .cs-item.is-disabled, .cs-item[aria-disabled="true"] { opacity: 0.55; cursor: not-allowed; pointer-events: none; }
28
+ .cs-item__leading { flex: none; display: grid; place-items: center; color: var(--cs-color-text-accent); }
29
+ .cs-item__main { flex: 1; min-inline-size: 0; display: grid; gap: 2px; }
30
+ .cs-item__title { font-weight: 600; font-size: var(--cs-font-size-sm); line-height: 1.35; }
31
+ .cs-item__description { font-size: var(--cs-font-size-xs); color: var(--cs-color-text-muted); line-height: 1.4; }
32
+ .cs-item__trailing { flex: none; display: grid; place-items: center; color: var(--cs-color-text-muted); }
33
+
14
34
  /* DescriptionList */
15
35
  .cs-dl { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 14px 24px; margin: 0; }
16
36
  .cs-dl dt { font-size: var(--cs-font-size-xs); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-muted); }
@@ -36,6 +56,17 @@
36
56
  .cs-accordion__trigger[aria-expanded="true"] .cs-accordion__chevron { transform: rotate(180deg); }
37
57
  .cs-accordion__panel { padding: 0 18px 16px; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); line-height: var(--cs-font-lineHeight-body); }
38
58
 
59
+ /* Collapsible — light single-panel expand (no Accordion chrome) */
60
+ .cs-collapsible { border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); background: var(--cs-color-surface-panel); overflow: hidden; }
61
+ .cs-collapsible__trigger { inline-size: 100%; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; border: 0; background: transparent; font: inherit; font-family: var(--cs-font-family-ui); font-weight: 600; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); cursor: pointer; text-align: start; }
62
+ .cs-collapsible__trigger:hover { background: var(--cs-color-surface-raised); }
63
+ .cs-collapsible__label { flex: 1; min-inline-size: 0; }
64
+ .cs-collapsible__chevron { flex: none; color: var(--cs-color-text-muted); transition: transform var(--cs-duration-fast) var(--cs-ease-standard); }
65
+ .cs-collapsible__trigger[aria-expanded="true"] .cs-collapsible__chevron { transform: rotate(180deg); }
66
+ .cs-collapsible__panel { padding: 0 16px 14px; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); line-height: var(--cs-font-lineHeight-body); }
67
+ .cs-collapsible__panel > :first-child { margin-block-start: 0; }
68
+ .cs-collapsible__panel > :last-child { margin-block-end: 0; }
69
+
39
70
  /* CodeBlock */
40
71
  .cs-code { position: relative; background: #2b1e14; color: #f5ead9; border-radius: var(--cs-radius-lg); overflow: hidden; border: 1px solid #4a3a2c; }
41
72
  .cs-code__bar { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; border-block-end: 1px solid #4a3a2c; font-family: var(--cs-font-family-mono); font-size: var(--cs-font-size-xs); color: #c9b7a3; }
@@ -153,6 +153,9 @@
153
153
  .cs-dialog__actions { justify-content: flex-end; }
154
154
  .cs-dialog__title { font-size: 1.25rem; line-height: 1.35; margin: 0; }
155
155
  .cs-dialog__body { margin-block: 1rem; }
156
+ /* AlertDialog — confirm/destructive modal (shares dialog layer; tighter panel) */
157
+ .cs-alert-dialog { max-inline-size: min(28rem, calc(100vw - 2rem)); }
158
+ .cs-alert-dialog--destructive .cs-dialog__title { color: var(--cs-color-semantic-danger, #b42318); }
156
159
  @media (max-width: 640px) {
157
160
  .cs-dialog { max-inline-size: calc(100vw - 1rem); top: 4vh; padding: var(--cs-space-4, 16px); }
158
161
  .cs-dialog__actions .cs-button, .cs-review-gate__actions .cs-button { flex: 1 1 auto; }
package/base/data.css CHANGED
@@ -46,3 +46,36 @@
46
46
  .cs-divider--label { display: flex; align-items: center; gap: 12px; background: none; block-size: auto; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); }
47
47
  .cs-divider--label::before, .cs-divider--label::after { content: ""; flex: 1; block-size: 1px; background: var(--cs-color-border-default); }
48
48
  .cs-divider--vertical { inline-size: 1px; block-size: auto; align-self: stretch; margin-inline: var(--cs-space-4); margin-block: 0; }
49
+
50
+ /* ScrollArea — focusable overflow for dense panels */
51
+ .cs-scroll-area {
52
+ overflow: auto;
53
+ overscroll-behavior: contain;
54
+ outline: none;
55
+ border-radius: var(--cs-radius-md);
56
+ scrollbar-color: color-mix(in oklab, var(--cs-color-brand-umber) 35%, transparent) transparent;
57
+ scrollbar-width: thin;
58
+ }
59
+ .cs-scroll-area:focus-visible {
60
+ box-shadow: 0 0 0 3px var(--cs-color-brand-ochre);
61
+ }
62
+
63
+ /* AspectRatio — CSS aspect-ratio lock for media */
64
+ .cs-aspect-ratio {
65
+ position: relative;
66
+ display: block;
67
+ inline-size: 100%;
68
+ overflow: hidden;
69
+ border-radius: var(--cs-radius-md);
70
+ }
71
+ .cs-aspect-ratio > * {
72
+ position: absolute;
73
+ inset: 0;
74
+ inline-size: 100%;
75
+ block-size: 100%;
76
+ }
77
+ .cs-aspect-ratio > img,
78
+ .cs-aspect-ratio > video {
79
+ object-fit: cover;
80
+ display: block;
81
+ }
package/base/forms.css CHANGED
@@ -7,6 +7,14 @@
7
7
  .cs-select__chevron { position: absolute; inset-inline-end: 12px; inset-block-start: 50%; transform: translateY(-50%); pointer-events: none; color: var(--cs-color-text-muted); display: grid; place-items: center; }
8
8
  .cs-select select.cs-field__control:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; border-color: var(--cs-color-brand-ochre); }
9
9
 
10
+ /* NativeSelect — lean progressive-enhancement companion beside Select */
11
+ .cs-native-select { position: relative; display: block; }
12
+ .cs-native-select select.cs-field__control { appearance: none; -webkit-appearance: none; width: 100%; padding-inline-end: 38px; cursor: pointer; background: var(--cs-color-surface-panel); }
13
+ .cs-native-select__chevron { position: absolute; inset-inline-end: 12px; inset-block-start: 50%; transform: translateY(-50%); pointer-events: none; color: var(--cs-color-text-muted); display: grid; place-items: center; }
14
+ .cs-native-select select.cs-field__control:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; border-color: var(--cs-color-brand-ochre); }
15
+ .cs-native-select--sm select.cs-field__control { min-block-size: 36px; padding-block: 6px; font-size: var(--cs-font-size-sm); }
16
+ .cs-native-select--md select.cs-field__control { min-block-size: 44px; }
17
+
10
18
  /* Checkbox + Radio — native, brand accent */
11
19
  .cs-check, .cs-radio { display: inline-flex; align-items: flex-start; gap: 10px; cursor: pointer; color: var(--cs-color-text-primary); font-family: var(--cs-font-family-ui); line-height: 1.4; }
12
20
  .cs-check input, .cs-radio input { inline-size: 20px; block-size: 20px; margin: 0; flex: none; accent-color: var(--cs-color-brand-umber); cursor: pointer; }
@@ -26,6 +26,7 @@
26
26
  .cs-button:focus-visible,
27
27
  .cs-field__control:focus-visible,
28
28
  .cs-select select.cs-field__control:focus-visible,
29
+ .cs-native-select select.cs-field__control:focus-visible,
29
30
  .cs-search:focus-within,
30
31
  .cs-ai-disclosure__badge:focus-visible,
31
32
  .cs-switch input:focus-visible + .cs-switch__track {
@@ -12,3 +12,9 @@
12
12
  .cs-caption { font-family: var(--cs-font-family-ui); font-size: var(--cs-text-caption); line-height: var(--cs-font-lineHeight-body); color: var(--cs-color-text-muted); }
13
13
  .cs-eyebrow { font-family: var(--cs-font-family-ui); font-size: var(--cs-text-eyebrow); font-weight: var(--cs-font-weight-bold); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-accent); }
14
14
  .cs-mono { font-family: var(--cs-font-family-mono); }
15
+ /* Opt in to the display face for a subtree — retargets --cs-heading-family so
16
+ * .cs-display/.cs-h1…h4 and bare headings follow, body copy stays on the UI
17
+ * face. Space Grotesk tops out at 700, so --cs-heading-weight-strong (800)
18
+ * clamps to 700 within that family (CSS does not hop to Be Vietnam Pro for a
19
+ * missing weight). Sanctioned path for cyberskill.world / Lumi headline face. */
20
+ .cs-display-face { --cs-heading-family: var(--cs-font-family-display); }
@@ -25,8 +25,8 @@ export const strings = {
25
25
  vi: { placeholder: "Tìm kiếm…", clear: "Xóa tìm kiếm" },
26
26
  },
27
27
  NumberField: {
28
- en: { decrease: "Decrease", increase: "Increase" },
29
- vi: { decrease: "Giảm", increase: "Tăng" },
28
+ en: { decrease: "Decrease", increase: "Increase", value: "Value" },
29
+ vi: { decrease: "Giảm", increase: "Tăng", value: "Giá trị" },
30
30
  },
31
31
  FileUpload: {
32
32
  en: { title: "Drop files here or browse", hint: "PNG, JPG, or PDF up to 10MB" },
@@ -36,6 +36,10 @@ export const strings = {
36
36
  en: { close: "Close", confirm: "Confirm", cancel: "Cancel" },
37
37
  vi: { close: "Đóng", confirm: "Xác nhận", cancel: "Hủy" },
38
38
  },
39
+ AlertDialog: {
40
+ en: { confirm: "Confirm", cancel: "Cancel" },
41
+ vi: { confirm: "Xác nhận", cancel: "Hủy" },
42
+ },
39
43
  Drawer: {
40
44
  en: { close: "Close", panel: "Panel" },
41
45
  vi: { close: "Đóng", panel: "Bảng" },
@@ -161,8 +165,8 @@ export const strings = {
161
165
  vi: { placeholder: "Chọn hoặc nhập…", empty: "Không có kết quả phù hợp" },
162
166
  },
163
167
  InputGroup: {
164
- en: { clear: "Clear", show: "Show password", hide: "Hide password" },
165
- vi: { clear: "Xóa", show: "Hiện mật khẩu", hide: "Ẩn mật khẩu" },
168
+ en: { clear: "Clear", show: "Show password", hide: "Hide password", input: "Input" },
169
+ vi: { clear: "Xóa", show: "Hiện mật khẩu", hide: "Ẩn mật khẩu", input: "Ô nhập" },
166
170
  },
167
171
  TagInput: {
168
172
  en: { placeholder: "Add a tag…", remove: "Remove" },
@@ -10,8 +10,8 @@
10
10
  .grid { display: grid; grid-template-columns: 1.2fr 1fr; gap: 24px; max-width: 660px; align-items: start; }
11
11
  .lbl { font: 600 11px/1 var(--cs-font-family-ui); text-transform: uppercase; letter-spacing: .09em; color: var(--cs-color-text-muted); margin-bottom: 10px; }
12
12
  </style>
13
- <script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
14
- <script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
13
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react.development.js" integrity="sha384-r22tQd8qRIHDPIkmdXZcVtvPi1Tj2x1QaW2tmFQHEvHscATUnHQ5siTyxWw5PMUs" crossorigin="anonymous"></script>
14
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react-dom.development.js" integrity="sha384-gJZYmumEmwqVmX3JVsLZq+4QrxoPGh/BW47Rk7SqNPCPFpTGnRtvmeRPJ7//ZDPk" crossorigin="anonymous"></script>
15
15
  <script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
16
16
  <script src="../../_ds_bundle.js"></script>
17
17
  </head>
@@ -9,8 +9,8 @@
9
9
  .lbl { font: 600 11px/1 var(--cs-font-family-ui); text-transform: uppercase; letter-spacing: .09em; color: var(--cs-color-text-muted); margin-bottom: 10px; }
10
10
  .blk { margin-bottom: 20px; }
11
11
  </style>
12
- <script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
13
- <script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
12
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react.development.js" integrity="sha384-r22tQd8qRIHDPIkmdXZcVtvPi1Tj2x1QaW2tmFQHEvHscATUnHQ5siTyxWw5PMUs" crossorigin="anonymous"></script>
13
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react-dom.development.js" integrity="sha384-gJZYmumEmwqVmX3JVsLZq+4QrxoPGh/BW47Rk7SqNPCPFpTGnRtvmeRPJ7//ZDPk" crossorigin="anonymous"></script>
14
14
  <script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
15
15
  <script src="../../_ds_bundle.js"></script>
16
16
  </head>
@@ -10,8 +10,8 @@
10
10
  .stack { display: grid; gap: 18px; max-width: 560px; }
11
11
  .lbl { font: 600 11px/1 var(--cs-font-family-ui); text-transform: uppercase; letter-spacing: .09em; color: var(--cs-color-text-muted); margin-bottom: 8px; }
12
12
  </style>
13
- <script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
14
- <script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
13
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react.development.js" integrity="sha384-r22tQd8qRIHDPIkmdXZcVtvPi1Tj2x1QaW2tmFQHEvHscATUnHQ5siTyxWw5PMUs" crossorigin="anonymous"></script>
14
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react-dom.development.js" integrity="sha384-gJZYmumEmwqVmX3JVsLZq+4QrxoPGh/BW47Rk7SqNPCPFpTGnRtvmeRPJ7//ZDPk" crossorigin="anonymous"></script>
15
15
  <script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
16
16
  <script src="../../_ds_bundle.js"></script>
17
17
  </head>
@@ -9,8 +9,8 @@
9
9
  .row { display: flex; align-items: center; gap: 24px; }
10
10
  .cap { font: 500 12px/1.4 var(--cs-font-family-ui); color: var(--cs-color-text-muted); margin-top: 8px; }
11
11
  </style>
12
- <script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
13
- <script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
12
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react.development.js" integrity="sha384-r22tQd8qRIHDPIkmdXZcVtvPi1Tj2x1QaW2tmFQHEvHscATUnHQ5siTyxWw5PMUs" crossorigin="anonymous"></script>
13
+ <script src="https://unpkg.com/umd-react@19.2.8/dist/react-dom.development.js" integrity="sha384-gJZYmumEmwqVmX3JVsLZq+4QrxoPGh/BW47Rk7SqNPCPFpTGnRtvmeRPJ7//ZDPk" crossorigin="anonymous"></script>
14
14
  <script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
15
15
  <script src="../../_ds_bundle.js"></script>
16
16
  </head>