@cyberskill/design 1.0.0 → 1.1.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 (264) 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 +13 -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/index.html +45 -0
  103. package/docs/status/roadmap.html +4 -0
  104. package/docs/status/status-legacy.html +121 -0
  105. package/docs/storybook.md +5 -4
  106. package/docs/sync.md +3 -2
  107. package/docs/tasks/BACKLOG.md +25 -0
  108. package/docs/tasks/release/TASK-REL-001-launch-1-1-0/spec.md +55 -0
  109. package/docs/template-schema-v2.md +15 -3
  110. package/docs/vi/benchmark-rubric.md +46 -0
  111. package/docs/vi/ci-cd.md +17 -11
  112. package/docs/vi/consumer-grant.md +37 -0
  113. package/docs/vi/consuming.md +45 -16
  114. package/docs/vi/contrast-report.md +94 -106
  115. package/docs/vi/conventions.md +12 -9
  116. package/docs/vi/decisions.md +33 -10
  117. package/docs/vi/deploy.md +1 -1
  118. package/docs/vi/design-styles.md +26 -8
  119. package/docs/vi/figma.md +3 -3
  120. package/docs/vi/live-hub.md +5 -3
  121. package/docs/vi/products.md +13 -11
  122. package/docs/vi/quality-gates.md +35 -21
  123. package/docs/vi/release-notes.md +18 -8
  124. package/docs/vi/storybook.md +5 -4
  125. package/docs/vi/sync.md +3 -2
  126. package/docs/vi/template-schema-v2.md +15 -3
  127. package/docs/viewer.html +2 -2
  128. package/fonts/spacegrotesk-var-latin-ext.woff2 +0 -0
  129. package/fonts/spacegrotesk-var-latin.woff2 +0 -0
  130. package/fonts/spacegrotesk-var-vietnamese.woff2 +0 -0
  131. package/guidelines/atomic-view.html +40 -27
  132. package/guidelines/elements-geometry.html +69 -0
  133. package/guidelines/elements-variants.html +17 -17
  134. package/guidelines/type-families.html +16 -10
  135. package/llms.txt +17 -11
  136. package/package.json +38 -16
  137. package/styles.css +1 -0
  138. package/templates/ai-cluster-demo.html +29 -14
  139. package/templates/app-shell/support.js +4 -4
  140. package/templates/article/content-schema.json +6 -0
  141. package/templates/article/support.js +4 -4
  142. package/templates/auth/support.js +4 -4
  143. package/templates/bod-deck/support.js +4 -4
  144. package/templates/bod-investor-update/support.js +4 -4
  145. package/templates/bod-memo/support.js +4 -4
  146. package/templates/bod-minutes/content-schema.json +12 -0
  147. package/templates/bod-minutes/support.js +4 -4
  148. package/templates/bod-report/support.js +4 -4
  149. package/templates/bod-resolution/support.js +4 -4
  150. package/templates/culture-event-invite/support.js +4 -4
  151. package/templates/dashboard/support.js +4 -4
  152. package/templates/delivery-change-note/support.js +4 -4
  153. package/templates/delivery-kickoff/support.js +4 -4
  154. package/templates/delivery-qbr-deck/support.js +4 -4
  155. package/templates/delivery-runbook/content-schema.json +6 -0
  156. package/templates/delivery-runbook/support.js +4 -4
  157. package/templates/delivery-status-email/support.js +4 -4
  158. package/templates/doc-style-guide/DocStyleGuide.dc.html +2 -2
  159. package/templates/doc-style-guide/support.js +4 -4
  160. package/templates/doc-suite-index/support.js +4 -4
  161. package/templates/doc-templates/DocTemplates.dc.html +1 -1
  162. package/templates/doc-templates/support.js +4 -4
  163. package/templates/email/support.js +4 -4
  164. package/templates/email-safe/README.md +17 -4
  165. package/templates/email-safe/email-launch.html +3 -3
  166. package/templates/email-safe/email-newsletter.html +1 -1
  167. package/templates/finance-dunning-email/support.js +4 -4
  168. package/templates/finance-expense-report/support.js +4 -4
  169. package/templates/finance-invoice/support.js +4 -4
  170. package/templates/finance-quote/support.js +4 -4
  171. package/templates/hr-announcement/support.js +4 -4
  172. package/templates/hr-interview-kit/content-schema.json +12 -0
  173. package/templates/hr-interview-kit/support.js +4 -4
  174. package/templates/hr-offboarding/content-schema.json +12 -0
  175. package/templates/hr-offboarding/support.js +4 -4
  176. package/templates/hr-performance-review/content-schema.json +12 -0
  177. package/templates/hr-performance-review/support.js +4 -4
  178. package/templates/hr-pip/content-schema.json +12 -0
  179. package/templates/hr-pip/support.js +4 -4
  180. package/templates/legal-msa/content-schema.json +16 -0
  181. package/templates/legal-msa/support.js +4 -4
  182. package/templates/legal-sow/support.js +4 -4
  183. package/templates/marketing-campaign-brief/support.js +4 -4
  184. package/templates/marketing-case-study/support.js +4 -4
  185. package/templates/marketing-launch/support.js +4 -4
  186. package/templates/marketing-newsletter/support.js +4 -4
  187. package/templates/marketing-page/content-schema.json +0 -1
  188. package/templates/marketing-page/support.js +4 -4
  189. package/templates/marketing-press-release/support.js +4 -4
  190. package/templates/marketing-social-kit/support.js +4 -4
  191. package/templates/playground.html +8 -4
  192. package/templates/sales-one-pager/support.js +4 -4
  193. package/templates/sales-proposal-deck/support.js +4 -4
  194. package/templates/settings/Settings.dc.html +26 -14
  195. package/templates/settings/content-schema.json +36 -0
  196. package/templates/settings/support.js +4 -4
  197. package/templates/slide-deck/support.js +4 -4
  198. package/templates/team-meeting-agenda/content-schema.json +16 -0
  199. package/templates/team-meeting-agenda/support.js +4 -4
  200. package/templates/tech-incident-report/support.js +4 -4
  201. package/templates/tech-release-notes/support.js +4 -4
  202. package/templates/tech-retro/content-schema.json +12 -0
  203. package/templates/tech-retro/support.js +4 -4
  204. package/templates/tech-rfc/content-schema.json +6 -0
  205. package/templates/tech-rfc/support.js +4 -4
  206. package/templates/vn-appointment-transfer/support.js +4 -4
  207. package/templates/vn-certificate-of-employment/support.js +4 -4
  208. package/templates/vn-code-of-conduct/support.js +4 -4
  209. package/templates/vn-compensation-regulation/support.js +4 -4
  210. package/templates/vn-contract-amendment/support.js +4 -4
  211. package/templates/vn-contractor-agreement/support.js +4 -4
  212. package/templates/vn-data-protection-policy/support.js +4 -4
  213. package/templates/vn-disciplinary-case-file/support.js +4 -4
  214. package/templates/vn-disciplinary-schedule/content-schema.json +15 -0
  215. package/templates/vn-disciplinary-schedule/support.js +4 -4
  216. package/templates/vn-employee-request/support.js +4 -4
  217. package/templates/vn-exit-handover/support.js +4 -4
  218. package/templates/vn-foreign-employee-pack/support.js +4 -4
  219. package/templates/vn-grassroots-democracy/support.js +4 -4
  220. package/templates/vn-infosec-policy/support.js +4 -4
  221. package/templates/vn-internal-labor-regulations/support.js +4 -4
  222. package/templates/vn-internship-agreement/support.js +4 -4
  223. package/templates/vn-job-description/support.js +4 -4
  224. package/templates/vn-labor-contract/support.js +4 -4
  225. package/templates/vn-labour-management-book/content-schema.json +15 -0
  226. package/templates/vn-labour-management-book/support.js +4 -4
  227. package/templates/vn-mutual-nda/support.js +4 -4
  228. package/templates/vn-ndnca-ip/support.js +4 -4
  229. package/templates/vn-offer-letter/support.js +4 -4
  230. package/templates/vn-onboarding-checklist/support.js +4 -4
  231. package/templates/vn-pdpl-consent/support.js +4 -4
  232. package/templates/vn-performance-evaluation-regulation/support.js +4 -4
  233. package/templates/vn-performance-review-form/support.js +4 -4
  234. package/templates/vn-phantom-stock/support.js +4 -4
  235. package/templates/vn-probation-contract/support.js +4 -4
  236. package/templates/vn-receipt-acknowledgement/content-schema.json +15 -0
  237. package/templates/vn-receipt-acknowledgement/support.js +4 -4
  238. package/templates/vn-remote-work-policy/support.js +4 -4
  239. package/templates/vn-resignation-letter/support.js +4 -4
  240. package/templates/vn-salary-scale/content-schema.json +15 -0
  241. package/templates/vn-salary-scale/support.js +4 -4
  242. package/templates/vn-sow-appendix/support.js +4 -4
  243. package/templates/vn-termination-decision/support.js +4 -4
  244. package/templates/vn-total-rewards-appendix/support.js +4 -4
  245. package/templates/vn-training-commitment/support.js +4 -4
  246. package/templates/vn-travel-expense-policy/support.js +4 -4
  247. package/tokens/element-seeds.json +112 -0
  248. package/tokens/elements.css +274 -187
  249. package/tokens/fonts.css +12 -3
  250. package/tokens/native/CSTokens.kt +84 -68
  251. package/tokens/native/CSTokens.swift +84 -68
  252. package/tokens/native/cs_tokens.dart +84 -68
  253. package/tokens/provenance.json +9 -9
  254. package/tokens/styles.css +15 -0
  255. package/tokens/tokens.dtcg.json +258 -233
  256. package/tokens/tokens.js +168 -167
  257. package/tokens/tokens.json +167 -166
  258. package/tokens/typography.css +9 -1
  259. package/ui_kits/status-hub/README.md +1 -2
  260. package/ui_kits/status-hub/index.html +2 -2
  261. package/ui_kits/status-hub/settings.html +6 -3
  262. package/ui_kits/website/chat.html +2 -2
  263. package/ui_kits/website/index.html +2 -2
  264. package/ui_kits/status-hub/identity-lab.html +0 -134
@@ -7,7 +7,7 @@
7
7
  </head>
8
8
  <body>
9
9
  <x-dc>
10
- <!-- @template name="Settings" description="CyberSkill settings page — Tabs, form fields, switches, and a danger zone. Bilingual (English · Tiếng Việt)." -->
10
+ <!-- @template name="Settings" description="CyberSkill settings page — Tabs, form fields, NativeSelect, Item rows, ScrollArea, Collapsible, AlertDialog danger zone. Bilingual (English · Tiếng Việt)." -->
11
11
  <helmet>
12
12
  <script src="./ds-base.js"></script>
13
13
  </helmet>
@@ -26,7 +26,7 @@
26
26
  <x-import component-from-global-scope="CyberSkillDS.TextField" label="{{ nameL }}" default-value="Nguyễn Hoàng An" hint-size="100%,74px"></x-import>
27
27
  <x-import component-from-global-scope="CyberSkillDS.TextField" label="{{ emailL }}" type="email" default-value="an@cyberskill.world" hint-size="100%,74px"></x-import>
28
28
  <x-import component-from-global-scope="CyberSkillDS.Select" label="{{ squadL }}" options="{{ squads }}" hint-size="100%,74px"></x-import>
29
- <x-import component-from-global-scope="CyberSkillDS.Select" label="{{ ifaceL }}" options="{{ langs }}" hint-size="100%,74px"></x-import>
29
+ <x-import component-from-global-scope="CyberSkillDS.NativeSelect" label="{{ ifaceL }}" options="{{ langs }}" size="md" hint-size="100%,74px"></x-import>
30
30
  </div>
31
31
  </section>
32
32
  </sc-if>
@@ -34,21 +34,29 @@
34
34
  <sc-if value="{{ isNotifications }}">
35
35
  <section style="background:var(--cs-color-surface-panel);border:1px solid var(--cs-color-border-default);border-radius:var(--cs-radius-lg);padding:24px;margin-top:22px;display:grid;gap:16px">
36
36
  <div><h3 style="margin:0 0 4px;font-size:18px">{{ notifH }}</h3><p style="margin:0;color:var(--cs-color-text-muted);font-size:14px">{{ notifP }}</p></div>
37
- <div style="display:flex;align-items:center;justify-content:space-between;gap:16px;border-top:1px solid var(--cs-color-border-default);padding-top:14px">
38
- <div><div style="font-weight:600">{{ n1t }}</div><div style="color:var(--cs-color-text-muted);font-size:13.5px">{{ n1d }}</div></div>
39
- <x-import component-from-global-scope="CyberSkillDS.Switch" hint-size="46px,26px"></x-import>
40
- </div>
41
- <div style="display:flex;align-items:center;justify-content:space-between;gap:16px;border-top:1px solid var(--cs-color-border-default);padding-top:14px">
42
- <div><div style="font-weight:600">{{ n2t }}</div><div style="color:var(--cs-color-text-muted);font-size:13.5px">{{ n2d }}</div></div>
43
- <x-import component-from-global-scope="CyberSkillDS.Switch" hint-size="46px,26px"></x-import>
44
- </div>
37
+ <x-import component-from-global-scope="CyberSkillDS.ScrollArea" max-height="180" aria-label="{{ notifH }}" hint-size="100%,180px">
38
+ <div style="display:grid;gap:8px;padding:2px 4px 8px 0">
39
+ <x-import component-from-global-scope="CyberSkillDS.Item" title="{{ n3t }}" description="{{ n3d }}" hint-size="100%,56px"></x-import>
40
+ <x-import component-from-global-scope="CyberSkillDS.Item" title="{{ n4t }}" description="{{ n4d }}" hint-size="100%,56px"></x-import>
41
+ </div>
42
+ </x-import>
43
+ <x-import component-from-global-scope="CyberSkillDS.Item" title="{{ n1t }}" description="{{ n1d }}" hint-size="100%,56px">
44
+ <x-import component-from-global-scope="CyberSkillDS.Switch" aria-label="{{ n1t }}" hint-size="46px,26px"></x-import>
45
+ </x-import>
46
+ <x-import component-from-global-scope="CyberSkillDS.Item" title="{{ n2t }}" description="{{ n2d }}" hint-size="100%,56px">
47
+ <x-import component-from-global-scope="CyberSkillDS.Switch" aria-label="{{ n2t }}" hint-size="46px,26px"></x-import>
48
+ </x-import>
49
+ <x-import component-from-global-scope="CyberSkillDS.Collapsible" title="{{ advT }}" hint-size="100%,48px">
50
+ <p style="margin:0">{{ advD }}</p>
51
+ </x-import>
45
52
  </section>
46
53
  </sc-if>
47
54
 
48
55
  <section style="border:1px solid var(--cs-color-semantic-danger);border-radius:var(--cs-radius-lg);padding:18px 20px;margin-top:22px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;background:color-mix(in oklab,var(--cs-color-semantic-danger) 5%,var(--cs-color-surface-panel))">
49
56
  <div><div style="font-weight:700">{{ dangerT }}</div><div style="color:var(--cs-color-text-muted);font-size:13.5px">{{ dangerD }}</div></div>
50
- <x-import component-from-global-scope="CyberSkillDS.Button" variant="danger-ghost" hint-size="150px,44px">{{ dangerBtn }}</x-import>
57
+ <x-import component-from-global-scope="CyberSkillDS.Button" variant="danger-ghost" on-click="{{ openDanger }}" hint-size="150px,44px">{{ dangerBtn }}</x-import>
51
58
  </section>
59
+ <x-import component-from-global-scope="CyberSkillDS.AlertDialog" open="{{ dangerOpen }}" on-open-change="{{ setDangerOpen }}" title="{{ dangerT }}" description="{{ dangerD }}" tone="destructive" confirm-label="{{ dangerBtn }}" on-confirm="{{ closeDanger }}" hint-size="0,0"></x-import>
52
60
 
53
61
  <div style="display:flex;gap:10px;justify-content:flex-end;margin-top:22px">
54
62
  <x-import component-from-global-scope="CyberSkillDS.Button" variant="ghost" hint-size="90px,44px">{{ cancelBtn }}</x-import>
@@ -64,19 +72,23 @@
64
72
  &quot;defaultTab&quot;: {&quot;editor&quot;:&quot;enum&quot;,&quot;options&quot;:[&quot;profile&quot;,&quot;notifications&quot;],&quot;default&quot;:&quot;profile&quot;,&quot;tsType&quot;:&quot;string&quot;,&quot;section&quot;:&quot;Behavior&quot;}
65
73
  }">
66
74
  class Component extends DCLogic {
67
- state = { tab: null };
75
+ state = { tab: null, dangerOpen: false };
68
76
  get tab() { return this.state.tab ?? (this.props.defaultTab || "profile"); }
69
77
  renderVals() {
70
78
  const EL = {"Thổ · studio":["tho",""],"Thổ · clay":["tho","clay"],"Thổ · sand":["tho","sand"],"Hỏa · ember":["hoa",""],"Hỏa · lava":["hoa","lava"],"Hỏa · plasma":["hoa","plasma"],"Thủy · river":["thuy",""],"Thủy · ocean":["thuy","ocean"],"Thủy · mist":["thuy","mist"],"Mộc · leaf":["moc",""],"Mộc · bamboo":["moc","bamboo"],"Mộc · forest":["moc","forest"],"Kim · champagne":["kim",""],"Kim · steel":["kim","steel"],"Kim · titanium":["kim","titanium"]};
71
79
  const [elAttr, vaAttr] = EL[this.props.element] || EL["Thổ · studio"];
72
80
  const tab = this.tab;
73
81
  const vn = this.props.language === "Tiếng Việt";
74
- const en = { title:"Settings", sub:"Workspace & preferences · an@cyberskill.world", pfL:"Profile", ntL:"Notifications", profileH:"Profile", profileP:"This is how you appear across the workspace.", nameL:"Full name", emailL:"Work email", squadL:"Squad", ifaceL:"Interface language", notifH:"Notifications", notifP:"We keep it quiet — only what you ask for.", n1t:"Release notes", n1d:"A summary each time a project ships. Bilingual.", n2t:"Blocked-project alerts", n2d:"Get pinged when a project is blocked.", dangerT:"Delete workspace", dangerD:"Removes every project and release. This cannot be undone.", dangerBtn:"Delete workspace", cancelBtn:"Cancel", saveBtn:"Save changes" };
75
- const vi = { title:"Cài đặt", sub:"Không gian làm việc & tuỳ chọn · an@cyberskill.world", pfL:"Hồ sơ", ntL:"Thông báo", profileH:"Hồ sơ", profileP:"Đây là cách bạn hiển thị trong không gian làm việc.", nameL:"Họ và tên", emailL:"Email công việc", squadL:"Nhóm", ifaceL:"Ngôn ngữ giao diện", notifH:"Thông báo", notifP:"Chúng tôi giữ yên tĩnh — chỉ gửi thứ bạn yêu cầu.", n1t:"Ghi chú phát hành", n1d:"Bản tóm tắt mỗi khi một dự án ra mắt. Song ngữ.", n2t:"Cảnh báo dự án bị chặn", n2d:"Được báo khi một dự án bị chặn.", dangerT:"Xoá không gian làm việc", dangerD:"Xoá mọi dự án và bản phát hành. Không thể hoàn tác.", dangerBtn:"Xoá không gian làm việc", cancelBtn:"Huỷ", saveBtn:"Lưu thay đổi" };
82
+ const en = { title:"Settings", sub:"Workspace & preferences · an@cyberskill.world", pfL:"Profile", ntL:"Notifications", profileH:"Profile", profileP:"This is how you appear across the workspace.", nameL:"Full name", emailL:"Work email", squadL:"Squad", ifaceL:"Interface language", notifH:"Notifications", notifP:"We keep it quiet — only what you ask for.", n1t:"Release notes", n1d:"A summary each time a project ships. Bilingual.", n2t:"Blocked-project alerts", n2d:"Get pinged when a project is blocked.", n3t:"Weekly velocity digest", n3d:"Tasks shipped per week, every Monday morning.", n4t:"Quiet hours", n4d:"No pings between 22:00 and 07:00 local time.", advT:"Advanced preferences", advD:"Digest timing and quiet hours stay here — expand only when you need them.", dangerT:"Delete workspace", dangerD:"Removes every project and release. This cannot be undone.", dangerBtn:"Delete workspace", cancelBtn:"Cancel", saveBtn:"Save changes" };
83
+ const vi = { title:"Cài đặt", sub:"Không gian làm việc & tuỳ chọn · an@cyberskill.world", pfL:"Hồ sơ", ntL:"Thông báo", profileH:"Hồ sơ", profileP:"Đây là cách bạn hiển thị trong không gian làm việc.", nameL:"Họ và tên", emailL:"Email công việc", squadL:"Nhóm", ifaceL:"Ngôn ngữ giao diện", notifH:"Thông báo", notifP:"Chúng tôi giữ yên tĩnh — chỉ gửi thứ bạn yêu cầu.", n1t:"Ghi chú phát hành", n1d:"Bản tóm tắt mỗi khi một dự án ra mắt. Song ngữ.", n2t:"Cảnh báo dự án bị chặn", n2d:"Được báo khi một dự án bị chặn.", n3t:"Tóm tắt tốc độ tuần", n3d:"Số task giao mỗi tuần, sáng thứ Hai.", n4t:"Giờ yên tĩnh", n4d:"Không ping từ 22:00 đến 07:00 theo giờ địa phương.", advT:"Tuỳ chọn nâng cao", advD:"Thời gian tóm tắt và giờ yên tĩnh nằm ở đây — chỉ mở khi bạn cần.", dangerT:"Xoá không gian làm việc", dangerD:"Xoá mọi dự án và bản phát hành. Không thể hoàn tác.", dangerBtn:"Xoá không gian làm việc", cancelBtn:"Huỷ", saveBtn:"Lưu thay đổi" };
76
84
  const t = vn ? vi : en;
77
85
  return Object.assign({ langAttr: (this.props.language ?? "English") === "Tiếng Việt" ? "vi" : "en", elAttr, vaAttr, rootTheme: this.props.theme === "dark" ? "dark" : "", tab, isProfile: tab === "profile", isNotifications: tab === "notifications",
78
86
  tabs: [{ value: "profile", label: t.pfL }, { value: "notifications", label: t.ntL }],
79
87
  setTab: (v) => this.setState({ tab: v }),
88
+ dangerOpen: this.state.dangerOpen,
89
+ openDanger: () => this.setState({ dangerOpen: true }),
90
+ setDangerOpen: (v) => this.setState({ dangerOpen: !!v }),
91
+ closeDanger: () => this.setState({ dangerOpen: false }),
80
92
  squads: [{ value: "platform", label: "Platform" }, { value: "ai", label: "AI" }, { value: "growth", label: "Growth" }],
81
93
  langs: [{ value: "en", label: "English" }, { value: "vi", label: "Tiếng Việt" }]}, t);
82
94
  }
@@ -97,6 +97,42 @@
97
97
  "label": "Notification 2 description",
98
98
  "maxLength": 80
99
99
  },
100
+ {
101
+ "id": "n3t",
102
+ "type": "text",
103
+ "label": "Notification 3 title",
104
+ "maxLength": 30
105
+ },
106
+ {
107
+ "id": "n3d",
108
+ "type": "text",
109
+ "label": "Notification 3 description",
110
+ "maxLength": 80
111
+ },
112
+ {
113
+ "id": "n4t",
114
+ "type": "text",
115
+ "label": "Notification 4 title",
116
+ "maxLength": 30
117
+ },
118
+ {
119
+ "id": "n4d",
120
+ "type": "text",
121
+ "label": "Notification 4 description",
122
+ "maxLength": 80
123
+ },
124
+ {
125
+ "id": "advT",
126
+ "type": "text",
127
+ "label": "Advanced preferences collapsible title",
128
+ "maxLength": 40
129
+ },
130
+ {
131
+ "id": "advD",
132
+ "type": "text",
133
+ "label": "Advanced preferences collapsible body",
134
+ "maxLength": 100
135
+ },
100
136
  {
101
137
  "id": "dangerT",
102
138
  "type": "text",
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schemaVersion": "2.0",
3
+ "template": "team-meeting-agenda",
4
+ "slots": [
5
+ {
6
+ "id": "hdrLabel",
7
+ "type": "text",
8
+ "label": "Header agenda label",
9
+ "maxLength": 28,
10
+ "i18n": {
11
+ "en": "Header agenda label",
12
+ "vi": "Nhãn chương trình họp phần đầu"
13
+ }
14
+ }
15
+ ]
16
+ }
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schemaVersion": "2.0",
3
+ "template": "tech-retro",
4
+ "slots": [
5
+ {
6
+ "id": "hdrLabel",
7
+ "type": "text",
8
+ "label": "Header retrospective label",
9
+ "maxLength": 28
10
+ }
11
+ ]
12
+ }
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -70,6 +70,12 @@
70
70
  "label": "Proposal heading",
71
71
  "maxLength": 20
72
72
  },
73
+ {
74
+ "id": "code",
75
+ "type": "text",
76
+ "label": "Proposal code / pipeline sample",
77
+ "maxLength": 400
78
+ },
73
79
  {
74
80
  "id": "toH",
75
81
  "type": "text",
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schemaVersion": "2.0",
3
+ "template": "vn-disciplinary-schedule",
4
+ "slots": [
5
+ {
6
+ "id": "rows",
7
+ "type": "list",
8
+ "label": "Disciplinary schedule rows",
9
+ "i18n": {
10
+ "en": "Ordered schedule entries (columns per template table)",
11
+ "vi": "Các dòng lịch kỷ luật (theo cột bảng mẫu)"
12
+ }
13
+ }
14
+ ]
15
+ }
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {
@@ -1070,10 +1070,10 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/react@18.3.1/umd/react.production.min.js";
1074
- var REACT_SRI = "sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z";
1075
- var REACT_DOM_URL = "https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1";
1073
+ var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
+ var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
+ var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
+ var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
1077
  var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
1078
  var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
1079
  function cdnScriptFor(url, sri) {