@skdx/docs-kit 0.35.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 (505) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -0
  3. package/dist/component-aliases.json +12 -0
  4. package/dist/data/THIRD-PARTY-NOTICES.md +21 -0
  5. package/dist/data/angular-inputs.json +1 -0
  6. package/dist/data/api-manifest.json +1 -0
  7. package/dist/data/exports-by-framework.json +1 -0
  8. package/dist/data/honoured-slots.json +1 -0
  9. package/dist/data/styling-hooks-manifest.json +10331 -0
  10. package/dist/frameworks.mjs +64 -0
  11. package/dist/shared/contracts/accordion.d.ts +3 -0
  12. package/dist/shared/contracts/accordion.js +1 -0
  13. package/dist/shared/contracts/alert.d.ts +3 -0
  14. package/dist/shared/contracts/alert.js +1 -0
  15. package/dist/shared/contracts/angle-slider.d.ts +3 -0
  16. package/dist/shared/contracts/angle-slider.js +1 -0
  17. package/dist/shared/contracts/aspect-ratio.d.ts +3 -0
  18. package/dist/shared/contracts/aspect-ratio.js +1 -0
  19. package/dist/shared/contracts/autocomplete.d.ts +3 -0
  20. package/dist/shared/contracts/autocomplete.js +1 -0
  21. package/dist/shared/contracts/avatar.d.ts +3 -0
  22. package/dist/shared/contracts/avatar.js +1 -0
  23. package/dist/shared/contracts/badge.d.ts +3 -0
  24. package/dist/shared/contracts/badge.js +1 -0
  25. package/dist/shared/contracts/box.d.ts +3 -0
  26. package/dist/shared/contracts/box.js +1 -0
  27. package/dist/shared/contracts/breadcrumb.d.ts +3 -0
  28. package/dist/shared/contracts/breadcrumb.js +1 -0
  29. package/dist/shared/contracts/button.d.ts +3 -0
  30. package/dist/shared/contracts/button.js +1 -0
  31. package/dist/shared/contracts/calendar.d.ts +5 -0
  32. package/dist/shared/contracts/calendar.js +1 -0
  33. package/dist/shared/contracts/card.d.ts +3 -0
  34. package/dist/shared/contracts/card.js +1 -0
  35. package/dist/shared/contracts/carousel.d.ts +3 -0
  36. package/dist/shared/contracts/carousel.js +1 -0
  37. package/dist/shared/contracts/change-reason.d.ts +29 -0
  38. package/dist/shared/contracts/change-reason.js +1 -0
  39. package/dist/shared/contracts/chat-composer.d.ts +3 -0
  40. package/dist/shared/contracts/chat-composer.js +1 -0
  41. package/dist/shared/contracts/chat-message.d.ts +3 -0
  42. package/dist/shared/contracts/chat-message.js +1 -0
  43. package/dist/shared/contracts/checkbox-card.d.ts +3 -0
  44. package/dist/shared/contracts/checkbox-card.js +1 -0
  45. package/dist/shared/contracts/checkbox-group.d.ts +3 -0
  46. package/dist/shared/contracts/checkbox-group.js +1 -0
  47. package/dist/shared/contracts/checkbox.d.ts +3 -0
  48. package/dist/shared/contracts/checkbox.js +1 -0
  49. package/dist/shared/contracts/clipboard.d.ts +3 -0
  50. package/dist/shared/contracts/clipboard.js +1 -0
  51. package/dist/shared/contracts/collapsible.d.ts +3 -0
  52. package/dist/shared/contracts/collapsible.js +1 -0
  53. package/dist/shared/contracts/color-picker.d.ts +3 -0
  54. package/dist/shared/contracts/color-picker.js +1 -0
  55. package/dist/shared/contracts/combobox.d.ts +3 -0
  56. package/dist/shared/contracts/combobox.js +1 -0
  57. package/dist/shared/contracts/command.d.ts +3 -0
  58. package/dist/shared/contracts/command.js +1 -0
  59. package/dist/shared/contracts/comment-thread.d.ts +3 -0
  60. package/dist/shared/contracts/comment-thread.js +1 -0
  61. package/dist/shared/contracts/comment.d.ts +3 -0
  62. package/dist/shared/contracts/comment.js +1 -0
  63. package/dist/shared/contracts/confirm-dialog.d.ts +3 -0
  64. package/dist/shared/contracts/confirm-dialog.js +1 -0
  65. package/dist/shared/contracts/conversation-list.d.ts +3 -0
  66. package/dist/shared/contracts/conversation-list.js +1 -0
  67. package/dist/shared/contracts/dashboard-layout.d.ts +3 -0
  68. package/dist/shared/contracts/dashboard-layout.js +1 -0
  69. package/dist/shared/contracts/date-field.d.ts +3 -0
  70. package/dist/shared/contracts/date-field.js +1 -0
  71. package/dist/shared/contracts/date-picker.d.ts +3 -0
  72. package/dist/shared/contracts/date-picker.js +1 -0
  73. package/dist/shared/contracts/date-value.d.ts +11 -0
  74. package/dist/shared/contracts/date-value.js +1 -0
  75. package/dist/shared/contracts/dialog.d.ts +3 -0
  76. package/dist/shared/contracts/dialog.js +1 -0
  77. package/dist/shared/contracts/divider.d.ts +5 -0
  78. package/dist/shared/contracts/divider.js +1 -0
  79. package/dist/shared/contracts/drawer.d.ts +3 -0
  80. package/dist/shared/contracts/drawer.js +1 -0
  81. package/dist/shared/contracts/editable.d.ts +3 -0
  82. package/dist/shared/contracts/editable.js +1 -0
  83. package/dist/shared/contracts/empty-state.d.ts +3 -0
  84. package/dist/shared/contracts/empty-state.js +1 -0
  85. package/dist/shared/contracts/field.d.ts +3 -0
  86. package/dist/shared/contracts/field.js +1 -0
  87. package/dist/shared/contracts/file-upload.d.ts +3 -0
  88. package/dist/shared/contracts/file-upload.js +1 -0
  89. package/dist/shared/contracts/filter-bar.d.ts +3 -0
  90. package/dist/shared/contracts/filter-bar.js +1 -0
  91. package/dist/shared/contracts/floating-panel.d.ts +3 -0
  92. package/dist/shared/contracts/floating-panel.js +1 -0
  93. package/dist/shared/contracts/forgot-password-page.d.ts +3 -0
  94. package/dist/shared/contracts/forgot-password-page.js +1 -0
  95. package/dist/shared/contracts/form-property.d.ts +3 -0
  96. package/dist/shared/contracts/form-property.js +1 -0
  97. package/dist/shared/contracts/form-section.d.ts +3 -0
  98. package/dist/shared/contracts/form-section.js +1 -0
  99. package/dist/shared/contracts/form-validity.d.ts +7 -0
  100. package/dist/shared/contracts/form-validity.js +1 -0
  101. package/dist/shared/contracts/form.d.ts +3 -0
  102. package/dist/shared/contracts/form.js +1 -0
  103. package/dist/shared/contracts/heading.d.ts +3 -0
  104. package/dist/shared/contracts/heading.js +1 -0
  105. package/dist/shared/contracts/image.d.ts +3 -0
  106. package/dist/shared/contracts/image.js +1 -0
  107. package/dist/shared/contracts/index.d.ts +8 -0
  108. package/dist/shared/contracts/index.js +1 -0
  109. package/dist/shared/contracts/kbd.d.ts +3 -0
  110. package/dist/shared/contracts/kbd.js +1 -0
  111. package/dist/shared/contracts/label.d.ts +3 -0
  112. package/dist/shared/contracts/label.js +1 -0
  113. package/dist/shared/contracts/link.d.ts +3 -0
  114. package/dist/shared/contracts/link.js +1 -0
  115. package/dist/shared/contracts/list.d.ts +3 -0
  116. package/dist/shared/contracts/list.js +1 -0
  117. package/dist/shared/contracts/listbox.d.ts +3 -0
  118. package/dist/shared/contracts/listbox.js +1 -0
  119. package/dist/shared/contracts/loading-overlay.d.ts +3 -0
  120. package/dist/shared/contracts/loading-overlay.js +1 -0
  121. package/dist/shared/contracts/member-id.d.ts +18 -0
  122. package/dist/shared/contracts/member-id.js +1 -0
  123. package/dist/shared/contracts/mentions.d.ts +3 -0
  124. package/dist/shared/contracts/mentions.js +1 -0
  125. package/dist/shared/contracts/menu.d.ts +3 -0
  126. package/dist/shared/contracts/menu.js +1 -0
  127. package/dist/shared/contracts/menubar.d.ts +3 -0
  128. package/dist/shared/contracts/menubar.js +1 -0
  129. package/dist/shared/contracts/navigation-menu.d.ts +6 -0
  130. package/dist/shared/contracts/navigation-menu.js +1 -0
  131. package/dist/shared/contracts/notification-center.d.ts +3 -0
  132. package/dist/shared/contracts/notification-center.js +1 -0
  133. package/dist/shared/contracts/number-field.d.ts +5 -0
  134. package/dist/shared/contracts/number-field.js +1 -0
  135. package/dist/shared/contracts/onboarding-checklist.d.ts +3 -0
  136. package/dist/shared/contracts/onboarding-checklist.js +1 -0
  137. package/dist/shared/contracts/overlay-parts.d.ts +73 -0
  138. package/dist/shared/contracts/overlay-parts.js +1 -0
  139. package/dist/shared/contracts/page-container.d.ts +3 -0
  140. package/dist/shared/contracts/page-container.js +1 -0
  141. package/dist/shared/contracts/pagination.d.ts +5 -0
  142. package/dist/shared/contracts/pagination.js +1 -0
  143. package/dist/shared/contracts/password-input.d.ts +6 -0
  144. package/dist/shared/contracts/password-input.js +1 -0
  145. package/dist/shared/contracts/pin-input.d.ts +6 -0
  146. package/dist/shared/contracts/pin-input.js +1 -0
  147. package/dist/shared/contracts/polymorphic.d.ts +6 -0
  148. package/dist/shared/contracts/polymorphic.js +1 -0
  149. package/dist/shared/contracts/popover.d.ts +7 -0
  150. package/dist/shared/contracts/popover.js +1 -0
  151. package/dist/shared/contracts/progress.d.ts +6 -0
  152. package/dist/shared/contracts/progress.js +1 -0
  153. package/dist/shared/contracts/qr-code.d.ts +5 -0
  154. package/dist/shared/contracts/qr-code.js +1 -0
  155. package/dist/shared/contracts/radio-card.d.ts +6 -0
  156. package/dist/shared/contracts/radio-card.js +1 -0
  157. package/dist/shared/contracts/radio-group.d.ts +6 -0
  158. package/dist/shared/contracts/radio-group.js +1 -0
  159. package/dist/shared/contracts/rating.d.ts +6 -0
  160. package/dist/shared/contracts/rating.js +1 -0
  161. package/dist/shared/contracts/reset-password-page.d.ts +3 -0
  162. package/dist/shared/contracts/reset-password-page.js +1 -0
  163. package/dist/shared/contracts/resizable.d.ts +7 -0
  164. package/dist/shared/contracts/resizable.js +1 -0
  165. package/dist/shared/contracts/rules.d.ts +11 -0
  166. package/dist/shared/contracts/rules.js +1 -0
  167. package/dist/shared/contracts/scroll-area.d.ts +6 -0
  168. package/dist/shared/contracts/scroll-area.js +1 -0
  169. package/dist/shared/contracts/select.d.ts +5 -0
  170. package/dist/shared/contracts/select.js +1 -0
  171. package/dist/shared/contracts/selection-value.d.ts +20 -0
  172. package/dist/shared/contracts/selection-value.js +1 -0
  173. package/dist/shared/contracts/sign-in-page.d.ts +3 -0
  174. package/dist/shared/contracts/sign-in-page.js +1 -0
  175. package/dist/shared/contracts/sign-up-page.d.ts +3 -0
  176. package/dist/shared/contracts/sign-up-page.js +1 -0
  177. package/dist/shared/contracts/skeleton.d.ts +5 -0
  178. package/dist/shared/contracts/skeleton.js +1 -0
  179. package/dist/shared/contracts/slider.d.ts +7 -0
  180. package/dist/shared/contracts/slider.js +1 -0
  181. package/dist/shared/contracts/speed-dial.d.ts +6 -0
  182. package/dist/shared/contracts/speed-dial.js +1 -0
  183. package/dist/shared/contracts/spinner.d.ts +6 -0
  184. package/dist/shared/contracts/spinner.js +1 -0
  185. package/dist/shared/contracts/split-button.d.ts +6 -0
  186. package/dist/shared/contracts/split-button.js +1 -0
  187. package/dist/shared/contracts/stat-card.d.ts +3 -0
  188. package/dist/shared/contracts/stat-card.js +1 -0
  189. package/dist/shared/contracts/stepper.d.ts +6 -0
  190. package/dist/shared/contracts/stepper.js +1 -0
  191. package/dist/shared/contracts/styling-hooks.d.ts +8 -0
  192. package/dist/shared/contracts/styling-hooks.js +1 -0
  193. package/dist/shared/contracts/switch.d.ts +6 -0
  194. package/dist/shared/contracts/switch.js +1 -0
  195. package/dist/shared/contracts/table.d.ts +7 -0
  196. package/dist/shared/contracts/table.js +1 -0
  197. package/dist/shared/contracts/tabs.d.ts +5 -0
  198. package/dist/shared/contracts/tabs.js +1 -0
  199. package/dist/shared/contracts/tag-group.d.ts +7 -0
  200. package/dist/shared/contracts/tag-group.js +1 -0
  201. package/dist/shared/contracts/tags-input.d.ts +8 -0
  202. package/dist/shared/contracts/tags-input.js +1 -0
  203. package/dist/shared/contracts/text-field.d.ts +6 -0
  204. package/dist/shared/contracts/text-field.js +1 -0
  205. package/dist/shared/contracts/text.d.ts +6 -0
  206. package/dist/shared/contracts/text.js +1 -0
  207. package/dist/shared/contracts/textarea.d.ts +5 -0
  208. package/dist/shared/contracts/textarea.js +1 -0
  209. package/dist/shared/contracts/time-field.d.ts +5 -0
  210. package/dist/shared/contracts/time-field.js +1 -0
  211. package/dist/shared/contracts/time.d.ts +6 -0
  212. package/dist/shared/contracts/time.js +1 -0
  213. package/dist/shared/contracts/timeline.d.ts +5 -0
  214. package/dist/shared/contracts/timeline.js +1 -0
  215. package/dist/shared/contracts/toast.d.ts +6 -0
  216. package/dist/shared/contracts/toast.js +1 -0
  217. package/dist/shared/contracts/toggle-group.d.ts +6 -0
  218. package/dist/shared/contracts/toggle-group.js +1 -0
  219. package/dist/shared/contracts/toggle.d.ts +5 -0
  220. package/dist/shared/contracts/toggle.js +1 -0
  221. package/dist/shared/contracts/toolbar.d.ts +3 -0
  222. package/dist/shared/contracts/toolbar.js +1 -0
  223. package/dist/shared/contracts/tour.d.ts +5 -0
  224. package/dist/shared/contracts/tour.js +1 -0
  225. package/dist/shared/contracts/transfer.d.ts +6 -0
  226. package/dist/shared/contracts/transfer.js +1 -0
  227. package/dist/shared/contracts/tree-select.d.ts +6 -0
  228. package/dist/shared/contracts/tree-select.js +1 -0
  229. package/dist/shared/contracts/tree.d.ts +6 -0
  230. package/dist/shared/contracts/tree.js +1 -0
  231. package/dist/shared/contracts/types.d.ts +230 -0
  232. package/dist/shared/contracts/types.js +1 -0
  233. package/dist/shared/contracts/usage-card.d.ts +3 -0
  234. package/dist/shared/contracts/usage-card.js +1 -0
  235. package/dist/shared/contracts/user-menu.d.ts +3 -0
  236. package/dist/shared/contracts/user-menu.js +1 -0
  237. package/dist/shared/contracts/verification-page.d.ts +3 -0
  238. package/dist/shared/contracts/verification-page.js +1 -0
  239. package/dist/shared/contracts/workspace-switcher.d.ts +3 -0
  240. package/dist/shared/contracts/workspace-switcher.js +1 -0
  241. package/dist/shared/core/announcer.d.ts +17 -0
  242. package/dist/shared/core/announcer.js +1 -0
  243. package/dist/shared/core/appearance.d.ts +14 -0
  244. package/dist/shared/core/appearance.js +1 -0
  245. package/dist/shared/core/arrow-keys.d.ts +7 -0
  246. package/dist/shared/core/arrow-keys.js +1 -0
  247. package/dist/shared/core/calendar-locale.d.ts +35 -0
  248. package/dist/shared/core/calendar-locale.js +1 -0
  249. package/dist/shared/core/color.d.ts +80 -0
  250. package/dist/shared/core/color.js +1 -0
  251. package/dist/shared/core/controllable.d.ts +42 -0
  252. package/dist/shared/core/controllable.js +1 -0
  253. package/dist/shared/core/csv.d.ts +43 -0
  254. package/dist/shared/core/csv.js +2 -0
  255. package/dist/shared/core/date-segments.d.ts +223 -0
  256. package/dist/shared/core/date-segments.js +1 -0
  257. package/dist/shared/core/date-value.d.ts +57 -0
  258. package/dist/shared/core/date-value.js +1 -0
  259. package/dist/shared/core/dev-mode.d.ts +12 -0
  260. package/dist/shared/core/dev-mode.js +1 -0
  261. package/dist/shared/core/dialogs.d.ts +96 -0
  262. package/dist/shared/core/dialogs.js +1 -0
  263. package/dist/shared/core/dismissal.d.ts +56 -0
  264. package/dist/shared/core/dismissal.js +1 -0
  265. package/dist/shared/core/field-core.d.ts +250 -0
  266. package/dist/shared/core/field-core.js +1 -0
  267. package/dist/shared/core/focus-targets.d.ts +77 -0
  268. package/dist/shared/core/focus-targets.js +1 -0
  269. package/dist/shared/core/format-file-size.d.ts +9 -0
  270. package/dist/shared/core/format-file-size.js +1 -0
  271. package/dist/shared/core/glyph-data.d.ts +13 -0
  272. package/dist/shared/core/glyph-data.js +1 -0
  273. package/dist/shared/core/measure-auto-resize.d.ts +5 -0
  274. package/dist/shared/core/measure-auto-resize.js +1 -0
  275. package/dist/shared/core/media-query.d.ts +7 -0
  276. package/dist/shared/core/media-query.js +1 -0
  277. package/dist/shared/core/mentions.d.ts +116 -0
  278. package/dist/shared/core/mentions.js +2 -0
  279. package/dist/shared/core/pin-chars.d.ts +13 -0
  280. package/dist/shared/core/pin-chars.js +1 -0
  281. package/dist/shared/core/placement.d.ts +102 -0
  282. package/dist/shared/core/placement.js +1 -0
  283. package/dist/shared/core/qr-encoder.d.ts +33 -0
  284. package/dist/shared/core/qr-encoder.js +1 -0
  285. package/dist/shared/core/roving-tab-stop.d.ts +37 -0
  286. package/dist/shared/core/roving-tab-stop.js +1 -0
  287. package/dist/shared/core/select-keyboard.d.ts +80 -0
  288. package/dist/shared/core/select-keyboard.js +1 -0
  289. package/dist/shared/core/selection.d.ts +58 -0
  290. package/dist/shared/core/selection.js +1 -0
  291. package/dist/shared/core/tabbable.d.ts +8 -0
  292. package/dist/shared/core/tabbable.js +1 -0
  293. package/dist/shared/core/timer.d.ts +82 -0
  294. package/dist/shared/core/timer.js +1 -0
  295. package/dist/shared/core/tree-columns.d.ts +48 -0
  296. package/dist/shared/core/tree-columns.js +1 -0
  297. package/dist/shared/core/typeahead.d.ts +27 -0
  298. package/dist/shared/core/typeahead.js +1 -0
  299. package/dist/shared/index.d.ts +113 -0
  300. package/dist/shared/index.js +1 -0
  301. package/dist/skins-src/_foundation-fallback.css +124 -0
  302. package/dist/skins-src/base.css +328 -0
  303. package/dist/skins-src/components/_actuator.css +203 -0
  304. package/dist/skins-src/components/_arrow.css +20 -0
  305. package/dist/skins-src/components/_card-control.css +27 -0
  306. package/dist/skins-src/components/_collection.css +281 -0
  307. package/dist/skins-src/components/_hit-target.css +28 -0
  308. package/dist/skins-src/components/_overlay.css +214 -0
  309. package/dist/skins-src/components/_status.css +38 -0
  310. package/dist/skins-src/components/_trigger.css +85 -0
  311. package/dist/skins-src/components/accordion.css +85 -0
  312. package/dist/skins-src/components/alert.css +118 -0
  313. package/dist/skins-src/components/angle-slider.css +110 -0
  314. package/dist/skins-src/components/aspect-ratio.css +26 -0
  315. package/dist/skins-src/components/autocomplete.css +112 -0
  316. package/dist/skins-src/components/avatar.css +87 -0
  317. package/dist/skins-src/components/badge.css +164 -0
  318. package/dist/skins-src/components/box.css +9 -0
  319. package/dist/skins-src/components/breadcrumb.css +78 -0
  320. package/dist/skins-src/components/button.css +304 -0
  321. package/dist/skins-src/components/calendar.css +269 -0
  322. package/dist/skins-src/components/card.css +116 -0
  323. package/dist/skins-src/components/carousel.css +192 -0
  324. package/dist/skins-src/components/chat-composer.css +89 -0
  325. package/dist/skins-src/components/chat-message.css +98 -0
  326. package/dist/skins-src/components/checkbox-card.css +153 -0
  327. package/dist/skins-src/components/checkbox-group.css +72 -0
  328. package/dist/skins-src/components/checkbox.css +141 -0
  329. package/dist/skins-src/components/clipboard.css +126 -0
  330. package/dist/skins-src/components/collapsible.css +64 -0
  331. package/dist/skins-src/components/color-picker.css +304 -0
  332. package/dist/skins-src/components/combobox.css +111 -0
  333. package/dist/skins-src/components/command.css +73 -0
  334. package/dist/skins-src/components/comment-thread.css +56 -0
  335. package/dist/skins-src/components/comment.css +59 -0
  336. package/dist/skins-src/components/confirm-dialog.css +43 -0
  337. package/dist/skins-src/components/conversation-list.css +142 -0
  338. package/dist/skins-src/components/dashboard-layout.css +106 -0
  339. package/dist/skins-src/components/date-field.css +95 -0
  340. package/dist/skins-src/components/date-picker.css +79 -0
  341. package/dist/skins-src/components/dialog.css +161 -0
  342. package/dist/skins-src/components/divider.css +64 -0
  343. package/dist/skins-src/components/drawer.css +166 -0
  344. package/dist/skins-src/components/editable.css +121 -0
  345. package/dist/skins-src/components/empty-state.css +85 -0
  346. package/dist/skins-src/components/field.css +104 -0
  347. package/dist/skins-src/components/file-upload.css +164 -0
  348. package/dist/skins-src/components/filter-bar.css +48 -0
  349. package/dist/skins-src/components/floating-panel.css +168 -0
  350. package/dist/skins-src/components/forgot-password-page.css +45 -0
  351. package/dist/skins-src/components/form-section.css +75 -0
  352. package/dist/skins-src/components/form.css +115 -0
  353. package/dist/skins-src/components/heading.css +38 -0
  354. package/dist/skins-src/components/image.css +43 -0
  355. package/dist/skins-src/components/kbd.css +76 -0
  356. package/dist/skins-src/components/label.css +45 -0
  357. package/dist/skins-src/components/link.css +72 -0
  358. package/dist/skins-src/components/list.css +104 -0
  359. package/dist/skins-src/components/listbox.css +90 -0
  360. package/dist/skins-src/components/loading-overlay.css +89 -0
  361. package/dist/skins-src/components/mentions.css +79 -0
  362. package/dist/skins-src/components/menu.css +102 -0
  363. package/dist/skins-src/components/menubar.css +130 -0
  364. package/dist/skins-src/components/navigation-menu.css +145 -0
  365. package/dist/skins-src/components/notification-center.css +139 -0
  366. package/dist/skins-src/components/number-field.css +95 -0
  367. package/dist/skins-src/components/onboarding-checklist.css +156 -0
  368. package/dist/skins-src/components/page-container.css +29 -0
  369. package/dist/skins-src/components/pagination.css +147 -0
  370. package/dist/skins-src/components/password-input.css +116 -0
  371. package/dist/skins-src/components/pin-input.css +115 -0
  372. package/dist/skins-src/components/popover.css +108 -0
  373. package/dist/skins-src/components/progress.css +207 -0
  374. package/dist/skins-src/components/qr-code.css +62 -0
  375. package/dist/skins-src/components/radio-card.css +158 -0
  376. package/dist/skins-src/components/radio-group.css +148 -0
  377. package/dist/skins-src/components/rating.css +150 -0
  378. package/dist/skins-src/components/reset-password-page.css +51 -0
  379. package/dist/skins-src/components/resizable.css +131 -0
  380. package/dist/skins-src/components/scroll-area.css +101 -0
  381. package/dist/skins-src/components/select.css +239 -0
  382. package/dist/skins-src/components/sign-in-page.css +47 -0
  383. package/dist/skins-src/components/sign-up-page.css +55 -0
  384. package/dist/skins-src/components/skeleton.css +55 -0
  385. package/dist/skins-src/components/skip-link.css +51 -0
  386. package/dist/skins-src/components/slider.css +164 -0
  387. package/dist/skins-src/components/speed-dial.css +162 -0
  388. package/dist/skins-src/components/spinner.css +59 -0
  389. package/dist/skins-src/components/split-button.css +167 -0
  390. package/dist/skins-src/components/stat-card.css +117 -0
  391. package/dist/skins-src/components/stepper.css +153 -0
  392. package/dist/skins-src/components/switch.css +155 -0
  393. package/dist/skins-src/components/table.css +336 -0
  394. package/dist/skins-src/components/tabs.css +116 -0
  395. package/dist/skins-src/components/tag-group.css +72 -0
  396. package/dist/skins-src/components/tags-input.css +176 -0
  397. package/dist/skins-src/components/text-field.css +182 -0
  398. package/dist/skins-src/components/text.css +83 -0
  399. package/dist/skins-src/components/textarea.css +118 -0
  400. package/dist/skins-src/components/time-field.css +43 -0
  401. package/dist/skins-src/components/time.css +13 -0
  402. package/dist/skins-src/components/timeline.css +206 -0
  403. package/dist/skins-src/components/toast.css +133 -0
  404. package/dist/skins-src/components/toggle-group.css +185 -0
  405. package/dist/skins-src/components/toggle.css +89 -0
  406. package/dist/skins-src/components/toolbar.css +84 -0
  407. package/dist/skins-src/components/tour.css +67 -0
  408. package/dist/skins-src/components/transfer.css +112 -0
  409. package/dist/skins-src/components/tree-select.css +124 -0
  410. package/dist/skins-src/components/tree.css +110 -0
  411. package/dist/skins-src/components/usage-card.css +129 -0
  412. package/dist/skins-src/components/user-menu.css +83 -0
  413. package/dist/skins-src/components/verification-page.css +64 -0
  414. package/dist/skins-src/components/workspace-switcher.css +133 -0
  415. package/dist/skins-src/utilities.css +130 -0
  416. package/dist/skins-src/web-components.css +64 -0
  417. package/dist/strip-paint.d.mts +7 -0
  418. package/dist/strip-paint.mjs +131 -0
  419. package/dist/themes/AntDark.md +14 -0
  420. package/dist/themes/AntDark.ts +47 -0
  421. package/dist/themes/AntLight.md +21 -0
  422. package/dist/themes/AntLight.ts +95 -0
  423. package/dist/themes/CatppuccinLatte.md +20 -0
  424. package/dist/themes/CatppuccinLatte.ts +93 -0
  425. package/dist/themes/CatppuccinMocha.md +15 -0
  426. package/dist/themes/CatppuccinMocha.ts +93 -0
  427. package/dist/themes/ChakraDark.md +8 -0
  428. package/dist/themes/ChakraDark.ts +47 -0
  429. package/dist/themes/ChakraLight.md +14 -0
  430. package/dist/themes/ChakraLight.ts +93 -0
  431. package/dist/themes/Contrast.test.ts +80 -0
  432. package/dist/themes/CupcakeDark.md +8 -0
  433. package/dist/themes/CupcakeDark.ts +39 -0
  434. package/dist/themes/CupcakeLight.md +31 -0
  435. package/dist/themes/CupcakeLight.ts +93 -0
  436. package/dist/themes/DefaultTheme.md +8 -0
  437. package/dist/themes/DefaultTheme.test.ts +96 -0
  438. package/dist/themes/DefaultTheme.ts +137 -0
  439. package/dist/themes/DraculaDark.md +14 -0
  440. package/dist/themes/DraculaDark.ts +93 -0
  441. package/dist/themes/DraculaLight.md +8 -0
  442. package/dist/themes/DraculaLight.ts +55 -0
  443. package/dist/themes/EmeraldDark.md +8 -0
  444. package/dist/themes/EmeraldDark.ts +35 -0
  445. package/dist/themes/EmeraldLight.md +8 -0
  446. package/dist/themes/EmeraldLight.ts +93 -0
  447. package/dist/themes/EverforestDark.md +26 -0
  448. package/dist/themes/EverforestDark.ts +99 -0
  449. package/dist/themes/EverforestLight.md +31 -0
  450. package/dist/themes/EverforestLight.ts +51 -0
  451. package/dist/themes/FluentDark.md +8 -0
  452. package/dist/themes/FluentDark.ts +47 -0
  453. package/dist/themes/FluentLight.md +8 -0
  454. package/dist/themes/FluentLight.ts +100 -0
  455. package/dist/themes/GraphiteDark.md +8 -0
  456. package/dist/themes/GraphiteDark.ts +35 -0
  457. package/dist/themes/GraphiteLight.md +14 -0
  458. package/dist/themes/GraphiteLight.ts +93 -0
  459. package/dist/themes/GruvboxDark.md +14 -0
  460. package/dist/themes/GruvboxDark.ts +93 -0
  461. package/dist/themes/GruvboxLight.md +27 -0
  462. package/dist/themes/GruvboxLight.ts +49 -0
  463. package/dist/themes/MaterialDark.md +8 -0
  464. package/dist/themes/MaterialDark.ts +47 -0
  465. package/dist/themes/MaterialLight.md +8 -0
  466. package/dist/themes/MaterialLight.ts +104 -0
  467. package/dist/themes/MidnightDark.md +8 -0
  468. package/dist/themes/MidnightDark.ts +19 -0
  469. package/dist/themes/MidnightLight.md +8 -0
  470. package/dist/themes/MidnightLight.ts +23 -0
  471. package/dist/themes/NordDark.md +28 -0
  472. package/dist/themes/NordDark.ts +93 -0
  473. package/dist/themes/NordLight.md +20 -0
  474. package/dist/themes/NordLight.ts +50 -0
  475. package/dist/themes/OneDark.md +26 -0
  476. package/dist/themes/OneDark.ts +93 -0
  477. package/dist/themes/OneLight.md +20 -0
  478. package/dist/themes/OneLight.ts +51 -0
  479. package/dist/themes/PrimerDark.md +26 -0
  480. package/dist/themes/PrimerDark.ts +99 -0
  481. package/dist/themes/PrimerLight.md +14 -0
  482. package/dist/themes/PrimerLight.ts +93 -0
  483. package/dist/themes/RosePine.md +23 -0
  484. package/dist/themes/RosePine.ts +93 -0
  485. package/dist/themes/RosePineDawn.md +20 -0
  486. package/dist/themes/RosePineDawn.ts +51 -0
  487. package/dist/themes/SkandaDark.md +8 -0
  488. package/dist/themes/SkandaDark.ts +57 -0
  489. package/dist/themes/SkandaLight.md +8 -0
  490. package/dist/themes/SkandaLight.ts +96 -0
  491. package/dist/themes/SolarizedDark.md +8 -0
  492. package/dist/themes/SolarizedDark.ts +93 -0
  493. package/dist/themes/SolarizedLight.md +32 -0
  494. package/dist/themes/SolarizedLight.ts +93 -0
  495. package/dist/themes/SynthwaveDark.md +8 -0
  496. package/dist/themes/SynthwaveDark.ts +93 -0
  497. package/dist/themes/SynthwaveLight.md +20 -0
  498. package/dist/themes/SynthwaveLight.ts +48 -0
  499. package/dist/themes/Themes.test.ts +110 -0
  500. package/dist/themes/brands.test.ts +63 -0
  501. package/dist/themes/brands.ts +121 -0
  502. package/dist/themes/createBrandTheme.test.ts +223 -0
  503. package/dist/themes/createBrandTheme.ts +298 -0
  504. package/dist/themes/index.ts +54 -0
  505. package/package.json +73 -0
@@ -0,0 +1,207 @@
1
+ /*
2
+ * Copyright (c) 2026 SkandaDX
3
+ * This file is part of the SkandaDX organization.
4
+ * Licensed under the MIT License. See LICENSE in the repository root.
5
+ */
6
+
7
+ @import '../base.css';
8
+
9
+ /* The fill is driven by --skdx-progress, a custom property the headless component already sets, so one source of truth drives both the ARIA value and the paint.
10
+ Under role="meter" the same bar reports a measurement instead of a task: it never animates, has no indeterminate state, and paints the band data-range resolves to. */
11
+ @layer skdx-components {
12
+ :where(.skdx-progress) {
13
+ position: relative;
14
+ display: block;
15
+ --skdx-focus-ring-offset: var(--skdx-focus-ring-offset-inset);
16
+ }
17
+
18
+ /* Scoped away from a .skdx-progress__circle child, so the circular variant (same root class) isn't clipped to this box's fixed track height. */
19
+ :where(.skdx-progress):not(:has(.skdx-progress__circle)) {
20
+ overflow: hidden;
21
+
22
+ inline-size: 100%;
23
+ block-size: var(--skdx-space-2);
24
+
25
+ background-color: var(--skdx-color-track);
26
+ /* Border, not fill, is the boundary: the dark-mode track alias equals background exactly in several themes (WCAG 2.2 1.4.11). */
27
+ border: var(--skdx-border-width-thin) solid var(--skdx-color-border-strong);
28
+ border-radius: var(--skdx-radius-full);
29
+ }
30
+
31
+ :where(.skdx-progress):has(.skdx-progress__circle) {
32
+ overflow: visible;
33
+ inline-size: auto;
34
+ block-size: auto;
35
+ }
36
+
37
+ :where(.skdx-progress__indicator) {
38
+ /* Rendered as a span; without an explicit display it stays inline and block-size is ignored. */
39
+ display: block;
40
+ block-size: 100%;
41
+ inline-size: var(--skdx-progress, 0%);
42
+
43
+ background-color: var(--skdx-color-track-fill);
44
+ border-radius: inherit;
45
+
46
+ transition: inline-size var(--skdx-motion-duration-normal) var(--skdx-motion-easing);
47
+ }
48
+
49
+ :where(.skdx-progress)[data-state='indeterminate'] :where(.skdx-progress__indicator) {
50
+ inline-size: 25%;
51
+ transition: none;
52
+ animation: skdx-indeterminate var(--skdx-motion-duration-slow) var(--skdx-motion-easing-steady)
53
+ infinite;
54
+ }
55
+
56
+ /* Reduced motion clamps the shuttle to a static 25%-wide fill, which would misread as "a quarter done" — filling the track and dimming it instead keeps it legible as "busy, not a number". */
57
+ @media (prefers-reduced-motion: reduce) {
58
+ :where(.skdx-progress)[data-state='indeterminate'] :where(.skdx-progress__indicator) {
59
+ inline-size: 100%;
60
+ opacity: 0.5;
61
+ }
62
+ }
63
+
64
+ /* Absolutely positioned so it resolves against the root (the track), not the fill it hangs off; both properties fall back to 0% until the component sets them. */
65
+ :where(.skdx-progress__indicator)::after {
66
+ content: '';
67
+ position: absolute;
68
+ inset-block: 0;
69
+ inset-inline-start: var(--skdx-progress, 0%);
70
+ inline-size: calc(var(--skdx-progress-buffer, 0%) - var(--skdx-progress, 0%));
71
+ background-color: var(--skdx-color-track-fill);
72
+ opacity: 0.35;
73
+ border-radius: inherit;
74
+ }
75
+
76
+ :where(.skdx-progress__label),
77
+ :where(.skdx-progress__value) {
78
+ font-size: var(--skdx-font-size-xs);
79
+ color: var(--skdx-color-text-muted);
80
+ font-variant-numeric: tabular-nums;
81
+ }
82
+
83
+ /* Bands, under role="meter": data-range carries the resolved region, so the fill
84
+ is painted without this sheet re-deriving it from low/high/optimum. */
85
+ :where(.skdx-progress)[data-range='optimum'] :where(.skdx-progress__indicator) {
86
+ background-color: var(--skdx-color-status-success-icon);
87
+ }
88
+
89
+ :where(.skdx-progress)[data-range='suboptimal'] :where(.skdx-progress__indicator) {
90
+ background-color: var(--skdx-color-status-warning-icon);
91
+ }
92
+
93
+ :where(.skdx-progress)[data-range='poor'] :where(.skdx-progress__indicator) {
94
+ background-color: var(--skdx-color-status-danger-icon);
95
+ }
96
+
97
+ /* A mounted Label or Value turns the root into the container and ::before into the
98
+ track, since the root cannot be both the track and their container at once. */
99
+ :where(.skdx-progress):has(.skdx-progress__label, .skdx-progress__value) {
100
+ display: grid;
101
+ grid-template-columns: 1fr auto;
102
+ align-items: center;
103
+ gap: var(--skdx-space-1);
104
+ block-size: auto;
105
+ overflow: visible;
106
+ background-color: transparent;
107
+ border-color: transparent;
108
+ }
109
+
110
+ :where(.skdx-progress):has(.skdx-progress__label, .skdx-progress__value)::before {
111
+ content: '';
112
+ grid-row: 2;
113
+ grid-column: 1 / -1;
114
+ block-size: var(--skdx-space-2);
115
+ background-color: var(--skdx-color-track);
116
+ border: var(--skdx-border-width-thin) solid var(--skdx-color-border-strong);
117
+ border-radius: var(--skdx-radius-full);
118
+ }
119
+
120
+ /* The track's own cell, later in paint order, so the fill sits on top of it. */
121
+ :where(.skdx-progress):has(.skdx-progress__label, .skdx-progress__value)
122
+ :where(.skdx-progress__indicator) {
123
+ grid-row: 2;
124
+ grid-column: 1 / -1;
125
+ block-size: var(--skdx-space-2);
126
+ }
127
+
128
+ /* The buffer resolves against the root, which is now the whole container, so it is
129
+ pinned back to the track row rather than stretched over the label. */
130
+ :where(.skdx-progress):has(.skdx-progress__label, .skdx-progress__value)
131
+ :where(.skdx-progress__indicator)::after {
132
+ inset-block: auto 0;
133
+ block-size: var(--skdx-space-2);
134
+ }
135
+
136
+ /* Placed explicitly: auto-placement puts a Value authored after the indicator
137
+ on a third row instead of beside the label. */
138
+ :where(.skdx-progress):has(.skdx-progress__label, .skdx-progress__value)
139
+ :where(.skdx-progress__label) {
140
+ grid-row: 1;
141
+ grid-column: 1;
142
+ }
143
+
144
+ :where(.skdx-progress):has(.skdx-progress__label, .skdx-progress__value)
145
+ :where(.skdx-progress__value) {
146
+ grid-row: 1;
147
+ grid-column: 2;
148
+ }
149
+
150
+ @media (forced-colors: active) {
151
+ :where(.skdx-progress),
152
+ :where(.skdx-progress):has(.skdx-progress__label, .skdx-progress__value)::before {
153
+ border: var(--skdx-border-width-thin) solid CanvasText;
154
+ }
155
+
156
+ :where(.skdx-progress__indicator) {
157
+ background-color: Highlight;
158
+ }
159
+ }
160
+
161
+ /* This box is also the track, a ring cut out with mask-image: the bare-div variant paints its arc into it, and an SVG arc strokes exactly this band. */
162
+ :where(.skdx-progress__circle) {
163
+ position: relative;
164
+ display: block;
165
+ inline-size: calc(var(--skdx-progress-circle-size, 48) * 1px);
166
+ block-size: calc(var(--skdx-progress-circle-size, 48) * 1px);
167
+ background-color: var(--skdx-color-track);
168
+ border-radius: var(--skdx-radius-full);
169
+ mask-image: radial-gradient(
170
+ farthest-side,
171
+ transparent calc(100% - var(--skdx-progress-circle-thickness, 4) * 1px),
172
+ currentColor calc(100% - var(--skdx-progress-circle-thickness, 4) * 1px)
173
+ );
174
+ }
175
+
176
+ /* Rotates the nested SVG, not the host: rotating the host would also spin the bare-div ring below, which needs no correction. */
177
+ :where(.skdx-progress__circle) > svg {
178
+ display: block;
179
+ inline-size: 100%;
180
+ block-size: 100%;
181
+ rotate: -90deg;
182
+ }
183
+
184
+ :where(circle.skdx-progress__circle-indicator) {
185
+ fill: none;
186
+ stroke: var(--skdx-color-track-fill);
187
+ stroke-width: var(--skdx-border-width-thicker);
188
+ stroke-linecap: round;
189
+ transition: stroke-dashoffset var(--skdx-motion-duration-normal) var(--skdx-motion-easing);
190
+ }
191
+
192
+ /* --skdx-progress drives this arc as a conic-gradient, the same value that drives the linear fill's width.
193
+ Matched by position (direct-child), not tag name: Angular and Web Components render a custom element tag
194
+ here instead of a div. Excludes an indicator that wraps an <svg>: Web Components hosts the generated SVG
195
+ arc inside its own custom-element wrapper, which would otherwise paint this conic arc behind its stroke. */
196
+ :where(.skdx-progress__circle) > :where(.skdx-progress__circle-indicator):not(:has(> svg)) {
197
+ position: absolute;
198
+ inset: 0;
199
+ border-radius: inherit;
200
+ background: conic-gradient(
201
+ var(--skdx-color-track-fill, transparent) var(--skdx-progress, 0%),
202
+ transparent 0%
203
+ );
204
+ mask-image: inherit;
205
+ transition: background var(--skdx-motion-duration-normal) var(--skdx-motion-easing);
206
+ }
207
+ }
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Copyright (c) 2026 SkandaDX
3
+ * This file is part of the SkandaDX organization.
4
+ * Licensed under the MIT License. See LICENSE in the repository root.
5
+ */
6
+
7
+ @import '../base.css';
8
+
9
+ /**
10
+ * QrCode — a rendered QR matrix. Contrast is functional: matrix and quiet zone
11
+ * come from the neutral ramp's extremes, not the surface tokens, so the code
12
+ * stays scannable under a theme whose surface is mid-grey.
13
+ */
14
+ @layer skdx-components {
15
+ :where(.skdx-qr-code) {
16
+ position: relative;
17
+ display: inline-block;
18
+ /* The mandatory quiet zone. */
19
+ padding: var(--skdx-space-2);
20
+ background-color: var(--skdx-color-neutral-50);
21
+ border-radius: var(--skdx-radius-sm);
22
+ }
23
+
24
+ :where(.skdx-qr-code__pattern) {
25
+ display: block;
26
+ inline-size: 100%;
27
+ block-size: auto;
28
+ fill: var(--skdx-color-neutral-950);
29
+ /* The custom element's <path> uses fill="currentColor", so `color` must carry the same ink. */
30
+ color: var(--skdx-color-neutral-950);
31
+ }
32
+
33
+ /* `QrCodeOverlay` renders an SVG `<g>`, which has no CSS box — only inherited
34
+ `color` applies, giving `fill="currentColor"` content the quiet-zone neutral. */
35
+ :where(.skdx-qr-code__overlay) {
36
+ color: var(--skdx-color-neutral-50);
37
+ }
38
+
39
+ /* Forced colours would repaint the matrix and break scanning, so the code
40
+ opts out — one of the few legitimate uses of this property. */
41
+ @media (forced-colors: active) {
42
+ :where(.skdx-qr-code) {
43
+ forced-color-adjust: none;
44
+ }
45
+ }
46
+
47
+ /* A quiet zone in the page's own colour. A QR matrix flush against arbitrary
48
+ content is one a camera cannot lock onto.
49
+ `QrCodeFrame` *is* the `<svg>` — "the element itself carries no width or
50
+ height; size it from CSS" is its own doc comment. Nothing here did, so the
51
+ viewBox had a 0×0 viewport to scale into and the whole matrix vanished.
52
+ Four pixels per module, the same ratio `QrCode`'s own doc example uses for
53
+ `--skdx-qr-code-size`. */
54
+ :where(.skdx-qr-code__frame) {
55
+ display: block;
56
+ inline-size: calc(var(--skdx-qr-code-size, 21) * 4px);
57
+ block-size: calc(var(--skdx-qr-code-size, 21) * 4px);
58
+ padding: var(--skdx-space-3);
59
+ background-color: var(--skdx-color-neutral-50);
60
+ border-radius: var(--skdx-radius-md);
61
+ }
62
+ }
@@ -0,0 +1,158 @@
1
+ /*
2
+ * Copyright (c) 2026 SkandaDX
3
+ * This file is part of the SkandaDX organization.
4
+ * Licensed under the MIT License. See LICENSE in the repository root.
5
+ */
6
+
7
+ @import '_card-control.css';
8
+ @import 'radio-group.css';
9
+
10
+ /** RadioCard — a radio presented as a selectable panel. */
11
+ @layer skdx-components {
12
+ :where(.skdx-radio-card) {
13
+ display: flex;
14
+ align-items: flex-start;
15
+ gap: var(--skdx-space-3);
16
+
17
+ padding: var(--skdx-space-3);
18
+
19
+ background-color: var(--skdx-color-surface-raised);
20
+ border: var(--skdx-border-width-thin) solid var(--skdx-color-border-default);
21
+ border-radius: var(--skdx-radius-md);
22
+ cursor: pointer;
23
+
24
+ transition:
25
+ border-color var(--skdx-motion-duration-fast) var(--skdx-motion-easing),
26
+ background-color var(--skdx-motion-duration-fast) var(--skdx-motion-easing);
27
+ }
28
+
29
+ :where(.skdx-radio-card):hover:not([data-disabled]) {
30
+ border-color: var(--skdx-color-border-strong);
31
+ }
32
+
33
+ :where(.skdx-radio-card)[data-state='checked'] {
34
+ border-color: var(--skdx-color-border-accent);
35
+ background-color: var(--skdx-color-surface-selected);
36
+ }
37
+
38
+ :where(.skdx-radio-card)[data-disabled] {
39
+ background-color: var(--skdx-color-surface-disabled);
40
+ border-color: var(--skdx-color-border-disabled);
41
+ cursor: not-allowed;
42
+ }
43
+
44
+ /* Read-only cards are available, only not selectable: ordinary paint, no
45
+ click-promising cursor. The flag lives on the group root, not the card. */
46
+ :where(.skdx-radio-group)[data-readonly] :where(.skdx-radio-card) {
47
+ cursor: default;
48
+ }
49
+
50
+ :where(.skdx-radio-group)[data-readonly] :where(.skdx-radio-card):hover {
51
+ border-color: var(--skdx-color-border-default);
52
+ }
53
+
54
+ /* An invalid group paints its cards: RadioCard has no `invalid` prop, because
55
+ validity is a statement about the set and lives on the group root. */
56
+ :where(.skdx-radio-group)[data-invalid] :where(.skdx-radio-card) {
57
+ border-color: var(--skdx-color-border-danger);
58
+ }
59
+
60
+ :where(.skdx-radio-card__label) {
61
+ font-size: var(--skdx-font-size-sm);
62
+ font-weight: var(--skdx-font-weight-medium);
63
+ }
64
+
65
+ :where(.skdx-radio-card__description) {
66
+ font-size: var(--skdx-font-size-xs);
67
+ color: var(--skdx-color-text-muted);
68
+ }
69
+
70
+ @media (forced-colors: active) {
71
+ :where(.skdx-radio-card)[data-state='checked'] {
72
+ border-color: Highlight;
73
+ border-width: var(--skdx-border-width-thick);
74
+ }
75
+ }
76
+
77
+ /* The visible ring and dot. Not drawn on `control`: that is the real `<input>`, and
78
+ the VisuallyHidden wrapper's inline 1×1/clip styles outrank any layered rule on it.
79
+ The dot is a pseudo-element so it scales with the ring at any `data-size`. */
80
+ :where(.skdx-radio-card__indicator) {
81
+ position: relative;
82
+ display: inline-flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ flex: none;
86
+
87
+ inline-size: var(--skdx-indicator-size-md);
88
+ block-size: var(--skdx-indicator-size-md);
89
+
90
+ background-color: var(--skdx-color-field-bg);
91
+ border: var(--skdx-border-width-thin) solid var(--skdx-color-field-border);
92
+ /* The one control in the system that is always fully round. */
93
+ border-radius: var(--skdx-radius-full);
94
+ }
95
+
96
+ :where(.skdx-radio-card__indicator):empty::after {
97
+ content: '';
98
+ inline-size: 50%;
99
+ block-size: 50%;
100
+ border-radius: var(--skdx-radius-full);
101
+ /* Drawn but uninked until chosen, so the ring never resizes on selection. */
102
+ background-color: transparent;
103
+ }
104
+
105
+ :where(.skdx-radio-card)[data-state='checked'] :where(.skdx-radio-card__indicator) {
106
+ border-color: var(--skdx-color-selection-bg);
107
+ border-width: var(--skdx-border-width-thicker);
108
+ }
109
+
110
+ :where(.skdx-radio-card)[data-state='checked'] :where(.skdx-radio-card__indicator):empty::after {
111
+ background-color: var(--skdx-color-selection-bg);
112
+ }
113
+
114
+ :where(.skdx-radio-card)[data-disabled] :where(.skdx-radio-card__indicator) {
115
+ background-color: var(--skdx-color-field-bg-disabled);
116
+ border-color: var(--skdx-color-border-disabled);
117
+ }
118
+
119
+ :where(.skdx-radio-card)[data-disabled] :where(.skdx-radio-card__indicator):empty::after {
120
+ background-color: var(--skdx-color-text-disabled);
121
+ }
122
+
123
+ @media (forced-colors: active) {
124
+ :where(.skdx-radio-card__indicator) {
125
+ border-color: CanvasText;
126
+ }
127
+
128
+ :where(.skdx-radio-card)[data-state='checked']
129
+ :where(.skdx-radio-card__indicator):empty::after {
130
+ background-color: Highlight;
131
+ }
132
+ }
133
+
134
+ /* On a card `data-size` means padding and type scale, not the box size radio-group.css's
135
+ metrics adjust. Duplicated in checkbox-card.css; the values must stay identical. */
136
+ :where(.skdx-radio-card)[data-size='sm'] {
137
+ padding: var(--skdx-space-2);
138
+ gap: var(--skdx-space-2);
139
+ }
140
+
141
+ :where(.skdx-radio-card)[data-size='sm'] :where(.skdx-radio-card__label) {
142
+ font-size: var(--skdx-font-size-xs);
143
+ }
144
+
145
+ :where(.skdx-radio-card)[data-size='md'] {
146
+ padding: var(--skdx-space-3);
147
+ gap: var(--skdx-space-3);
148
+ }
149
+
150
+ :where(.skdx-radio-card)[data-size='lg'] {
151
+ padding: var(--skdx-space-4);
152
+ gap: var(--skdx-space-4);
153
+ }
154
+
155
+ :where(.skdx-radio-card)[data-size='lg'] :where(.skdx-radio-card__label) {
156
+ font-size: var(--skdx-font-size-md);
157
+ }
158
+ }
@@ -0,0 +1,148 @@
1
+ /*
2
+ * Copyright (c) 2026 SkandaDX
3
+ * This file is part of the SkandaDX organization.
4
+ * Licensed under the MIT License. See LICENSE in the repository root.
5
+ */
6
+
7
+ @import '../base.css';
8
+
9
+ /**
10
+ * RadioGroup — a set of mutually exclusive options. The ring is drawn on the
11
+ * item's `::before`, so its size never depends on what the item lays out beside it.
12
+ */
13
+ @layer skdx-components {
14
+ :where(.skdx-radio-group) {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--skdx-space-3);
18
+ }
19
+
20
+ /* both and vertical share a rule: both is about which arrow keys respond, not the axis the boxes sit on. */
21
+ :where(.skdx-radio-group)[data-orientation='vertical'],
22
+ :where(.skdx-radio-group)[data-orientation='both'] {
23
+ flex-direction: column;
24
+ flex-wrap: nowrap;
25
+ gap: var(--skdx-space-3);
26
+ }
27
+
28
+ :where(.skdx-radio-group)[data-orientation='horizontal'] {
29
+ flex-direction: row;
30
+ flex-wrap: wrap;
31
+ gap: var(--skdx-space-4);
32
+ }
33
+
34
+ /* Read-only is not disabled: available, only not editable. See checkbox.css. */
35
+ :where(.skdx-radio-group)[data-readonly] :where(.skdx-radio-group__item) {
36
+ cursor: default;
37
+ }
38
+
39
+ /* The ring is a pseudo-element on ::before, not the item's own box, so its size never depends on label text laid out beside it. */
40
+ :where(.skdx-radio-group__item) {
41
+ cursor: pointer;
42
+ display: inline-flex;
43
+ align-items: center;
44
+ gap: var(--skdx-space-2);
45
+ position: relative;
46
+ flex: none;
47
+
48
+ /* Native <button> UA padding counts toward the flex item's automatic min-width. */
49
+ padding: 0;
50
+ min-inline-size: 0;
51
+
52
+ background: none;
53
+ border: none;
54
+ /* Matches the ring's radius so the shared focus outline stays round unlabeled and pill-shaped around the whole row when labeled. */
55
+ border-radius: var(--skdx-radius-full);
56
+ }
57
+
58
+ :where(.skdx-radio-group__item)::before {
59
+ content: '';
60
+ flex: none;
61
+
62
+ inline-size: var(--skdx-indicator-size-md);
63
+ block-size: var(--skdx-indicator-size-md);
64
+
65
+ background-color: var(--skdx-color-field-bg);
66
+ border: var(--skdx-border-width-thin) solid var(--skdx-color-field-border);
67
+ border-radius: var(--skdx-radius-full);
68
+
69
+ transition:
70
+ background-color var(--skdx-motion-duration-fast) var(--skdx-motion-easing),
71
+ border-color var(--skdx-motion-duration-fast) var(--skdx-motion-easing);
72
+ }
73
+
74
+ /* transparent, not an omission: overrides base.css's generic :hover fill, since the item itself carries no visible box, only ::before does. */
75
+ :where(.skdx-radio-group__item):hover {
76
+ background-color: transparent;
77
+ }
78
+
79
+ :where(.skdx-radio-group__item):hover::before {
80
+ border-color: var(--skdx-color-field-border-hover);
81
+ background-color: var(--skdx-color-field-bg-hover);
82
+ }
83
+
84
+ /* A halo outside the box, since a selected radio's border/fill are already accented and neither can signal hover by changing colour. box-shadow, not outline, so it can't be confused with the focus ring. */
85
+ :where(.skdx-radio-group__item)[data-state='checked']:hover::before {
86
+ box-shadow: 0 0 0 var(--skdx-border-width-thick) var(--skdx-color-border-accent);
87
+ }
88
+
89
+ :where(.skdx-radio-group__item)[data-state='checked']::before {
90
+ border-color: var(--skdx-color-selection-bg);
91
+ border-width: var(--skdx-border-width-thicker);
92
+ background-color: var(--skdx-color-field-bg);
93
+ }
94
+
95
+ :where(.skdx-radio-group__indicator) {
96
+ position: absolute;
97
+ inset-inline-start: calc(var(--skdx-indicator-size-md) * 0.25);
98
+ inset-block-start: 50%;
99
+ translate: 0 -50%;
100
+
101
+ inline-size: calc(var(--skdx-indicator-size-md) * 0.5);
102
+ block-size: calc(var(--skdx-indicator-size-md) * 0.5);
103
+ border-radius: var(--skdx-radius-full);
104
+ background-color: var(--skdx-color-selection-bg);
105
+ }
106
+
107
+ :where(.skdx-radio-group__item)[data-disabled] {
108
+ cursor: not-allowed;
109
+ }
110
+
111
+ :where(.skdx-radio-group__item)[data-disabled]::before {
112
+ background-color: var(--skdx-color-field-bg-disabled);
113
+ border-color: var(--skdx-color-border-disabled);
114
+ }
115
+
116
+ :where(.skdx-radio-group__item)[data-disabled] :where(.skdx-radio-group__indicator) {
117
+ background-color: var(--skdx-color-text-disabled);
118
+ }
119
+
120
+ /* data-invalid lives on the group root, not the item — no package emits it there, so this is a descendant selector from the root. */
121
+ :where(.skdx-radio-group)[data-invalid] :where(.skdx-radio-group__item)::before {
122
+ border-color: var(--skdx-color-field-border-invalid);
123
+ }
124
+
125
+ @media (forced-colors: active) {
126
+ :where(.skdx-radio-group__item)::before {
127
+ border-color: CanvasText;
128
+ }
129
+
130
+ :where(.skdx-radio-group__indicator) {
131
+ background-color: Highlight;
132
+ }
133
+
134
+ :where(.skdx-radio-group__item)[data-disabled]::before {
135
+ border-color: GrayText;
136
+ }
137
+ }
138
+
139
+ /* label is a consumer-composed slot, not a part any package emits — the caption is the consumer's own <label for>. */
140
+ :where(.skdx-radio-group__label) {
141
+ font-size: var(--skdx-font-size-sm);
142
+ color: var(--skdx-color-text-default);
143
+ }
144
+
145
+ :where(.skdx-radio-group__item)[data-disabled] :where(.skdx-radio-group__label) {
146
+ color: var(--skdx-color-text-disabled);
147
+ }
148
+ }