@furystack/shades-common-components 12.6.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/README.md +218 -4
  3. package/esm/components/accordion/accordion-item.d.ts +1 -1
  4. package/esm/components/accordion/accordion-item.d.ts.map +1 -1
  5. package/esm/components/accordion/accordion-item.js +6 -11
  6. package/esm/components/accordion/accordion-item.js.map +1 -1
  7. package/esm/components/accordion/accordion.d.ts.map +1 -1
  8. package/esm/components/accordion/accordion.js +1 -0
  9. package/esm/components/accordion/accordion.js.map +1 -1
  10. package/esm/components/app-bar-link.d.ts.map +1 -1
  11. package/esm/components/app-bar-link.js +1 -0
  12. package/esm/components/app-bar-link.js.map +1 -1
  13. package/esm/components/app-bar.d.ts.map +1 -1
  14. package/esm/components/app-bar.js +2 -0
  15. package/esm/components/app-bar.js.map +1 -1
  16. package/esm/components/app-bar.spec.js +3 -3
  17. package/esm/components/app-bar.spec.js.map +1 -1
  18. package/esm/components/avatar.d.ts.map +1 -1
  19. package/esm/components/avatar.js +1 -0
  20. package/esm/components/avatar.js.map +1 -1
  21. package/esm/components/badge.d.ts.map +1 -1
  22. package/esm/components/badge.js +2 -1
  23. package/esm/components/badge.js.map +1 -1
  24. package/esm/components/breadcrumb.d.ts.map +1 -1
  25. package/esm/components/breadcrumb.js +1 -0
  26. package/esm/components/breadcrumb.js.map +1 -1
  27. package/esm/components/button-group.d.ts.map +1 -1
  28. package/esm/components/button-group.js +57 -60
  29. package/esm/components/button-group.js.map +1 -1
  30. package/esm/components/button-group.spec.js +7 -6
  31. package/esm/components/button-group.spec.js.map +1 -1
  32. package/esm/components/button.d.ts.map +1 -1
  33. package/esm/components/button.js +1 -0
  34. package/esm/components/button.js.map +1 -1
  35. package/esm/components/cache-view.d.ts.map +1 -1
  36. package/esm/components/cache-view.js +4 -0
  37. package/esm/components/cache-view.js.map +1 -1
  38. package/esm/components/cache-view.spec.js +4 -1
  39. package/esm/components/cache-view.spec.js.map +1 -1
  40. package/esm/components/card.d.ts.map +1 -1
  41. package/esm/components/card.js +3 -1
  42. package/esm/components/card.js.map +1 -1
  43. package/esm/components/circular-progress.d.ts.map +1 -1
  44. package/esm/components/circular-progress.js +1 -0
  45. package/esm/components/circular-progress.js.map +1 -1
  46. package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
  47. package/esm/components/command-palette/command-palette-input.js +1 -0
  48. package/esm/components/command-palette/command-palette-input.js.map +1 -1
  49. package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
  50. package/esm/components/command-palette/command-palette-suggestion-list.js +3 -1
  51. package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  52. package/esm/components/command-palette/index.d.ts.map +1 -1
  53. package/esm/components/command-palette/index.js +2 -0
  54. package/esm/components/command-palette/index.js.map +1 -1
  55. package/esm/components/context-menu/context-menu-item.d.ts.map +1 -1
  56. package/esm/components/context-menu/context-menu-item.js +1 -0
  57. package/esm/components/context-menu/context-menu-item.js.map +1 -1
  58. package/esm/components/context-menu/context-menu.d.ts.map +1 -1
  59. package/esm/components/context-menu/context-menu.js +1 -0
  60. package/esm/components/context-menu/context-menu.js.map +1 -1
  61. package/esm/components/data-grid/body.d.ts.map +1 -1
  62. package/esm/components/data-grid/body.js +2 -0
  63. package/esm/components/data-grid/body.js.map +1 -1
  64. package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
  65. package/esm/components/data-grid/data-grid-row.js +1 -0
  66. package/esm/components/data-grid/data-grid-row.js.map +1 -1
  67. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  68. package/esm/components/data-grid/data-grid.js +1 -0
  69. package/esm/components/data-grid/data-grid.js.map +1 -1
  70. package/esm/components/data-grid/filters/boolean-filter.d.ts.map +1 -1
  71. package/esm/components/data-grid/filters/boolean-filter.js +2 -0
  72. package/esm/components/data-grid/filters/boolean-filter.js.map +1 -1
  73. package/esm/components/data-grid/filters/date-filter.d.ts.map +1 -1
  74. package/esm/components/data-grid/filters/date-filter.js +2 -0
  75. package/esm/components/data-grid/filters/date-filter.js.map +1 -1
  76. package/esm/components/data-grid/filters/enum-filter.d.ts.map +1 -1
  77. package/esm/components/data-grid/filters/enum-filter.js +2 -0
  78. package/esm/components/data-grid/filters/enum-filter.js.map +1 -1
  79. package/esm/components/data-grid/filters/filter-dropdown.d.ts.map +1 -1
  80. package/esm/components/data-grid/filters/filter-dropdown.js +1 -0
  81. package/esm/components/data-grid/filters/filter-dropdown.js.map +1 -1
  82. package/esm/components/data-grid/filters/number-filter.d.ts.map +1 -1
  83. package/esm/components/data-grid/filters/number-filter.js +2 -0
  84. package/esm/components/data-grid/filters/number-filter.js.map +1 -1
  85. package/esm/components/data-grid/filters/string-filter.d.ts.map +1 -1
  86. package/esm/components/data-grid/filters/string-filter.js +2 -0
  87. package/esm/components/data-grid/filters/string-filter.js.map +1 -1
  88. package/esm/components/data-grid/footer.d.ts.map +1 -1
  89. package/esm/components/data-grid/footer.js +1 -0
  90. package/esm/components/data-grid/footer.js.map +1 -1
  91. package/esm/components/data-grid/header.d.ts.map +1 -1
  92. package/esm/components/data-grid/header.js +2 -0
  93. package/esm/components/data-grid/header.js.map +1 -1
  94. package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
  95. package/esm/components/data-grid/selection-cell.js +1 -0
  96. package/esm/components/data-grid/selection-cell.js.map +1 -1
  97. package/esm/components/dialog.d.ts.map +1 -1
  98. package/esm/components/dialog.js +8 -12
  99. package/esm/components/dialog.js.map +1 -1
  100. package/esm/components/divider.d.ts.map +1 -1
  101. package/esm/components/divider.js +1 -0
  102. package/esm/components/divider.js.map +1 -1
  103. package/esm/components/drawer/drawer-toggle-button.d.ts +1 -1
  104. package/esm/components/drawer/drawer-toggle-button.d.ts.map +1 -1
  105. package/esm/components/drawer/drawer-toggle-button.js +2 -1
  106. package/esm/components/drawer/drawer-toggle-button.js.map +1 -1
  107. package/esm/components/drawer/index.d.ts.map +1 -1
  108. package/esm/components/drawer/index.js +1 -0
  109. package/esm/components/drawer/index.js.map +1 -1
  110. package/esm/components/dropdown.d.ts.map +1 -1
  111. package/esm/components/dropdown.js +1 -0
  112. package/esm/components/dropdown.js.map +1 -1
  113. package/esm/components/fab.d.ts.map +1 -1
  114. package/esm/components/fab.js +1 -0
  115. package/esm/components/fab.js.map +1 -1
  116. package/esm/components/form.d.ts.map +1 -1
  117. package/esm/components/form.js +2 -0
  118. package/esm/components/form.js.map +1 -1
  119. package/esm/components/grid.d.ts.map +1 -1
  120. package/esm/components/grid.js +3 -1
  121. package/esm/components/grid.js.map +1 -1
  122. package/esm/components/icons/icon.d.ts.map +1 -1
  123. package/esm/components/icons/icon.js +2 -0
  124. package/esm/components/icons/icon.js.map +1 -1
  125. package/esm/components/image.d.ts.map +1 -1
  126. package/esm/components/image.js +1 -0
  127. package/esm/components/image.js.map +1 -1
  128. package/esm/components/inputs/autocomplete.d.ts.map +1 -1
  129. package/esm/components/inputs/autocomplete.js +2 -0
  130. package/esm/components/inputs/autocomplete.js.map +1 -1
  131. package/esm/components/inputs/checkbox.d.ts.map +1 -1
  132. package/esm/components/inputs/checkbox.js +2 -1
  133. package/esm/components/inputs/checkbox.js.map +1 -1
  134. package/esm/components/inputs/input-number.d.ts.map +1 -1
  135. package/esm/components/inputs/input-number.js +1 -0
  136. package/esm/components/inputs/input-number.js.map +1 -1
  137. package/esm/components/inputs/input.d.ts.map +1 -1
  138. package/esm/components/inputs/input.js +1 -0
  139. package/esm/components/inputs/input.js.map +1 -1
  140. package/esm/components/inputs/radio-group.d.ts.map +1 -1
  141. package/esm/components/inputs/radio-group.js +1 -0
  142. package/esm/components/inputs/radio-group.js.map +1 -1
  143. package/esm/components/inputs/radio.d.ts.map +1 -1
  144. package/esm/components/inputs/radio.js +1 -0
  145. package/esm/components/inputs/radio.js.map +1 -1
  146. package/esm/components/inputs/select.d.ts.map +1 -1
  147. package/esm/components/inputs/select.js +14 -16
  148. package/esm/components/inputs/select.js.map +1 -1
  149. package/esm/components/inputs/select.spec.js +3 -6
  150. package/esm/components/inputs/select.spec.js.map +1 -1
  151. package/esm/components/inputs/slider.d.ts.map +1 -1
  152. package/esm/components/inputs/slider.js +5 -31
  153. package/esm/components/inputs/slider.js.map +1 -1
  154. package/esm/components/inputs/switch.d.ts.map +1 -1
  155. package/esm/components/inputs/switch.js +2 -1
  156. package/esm/components/inputs/switch.js.map +1 -1
  157. package/esm/components/inputs/text-area.d.ts.map +1 -1
  158. package/esm/components/inputs/text-area.js +1 -0
  159. package/esm/components/inputs/text-area.js.map +1 -1
  160. package/esm/components/linear-progress.d.ts.map +1 -1
  161. package/esm/components/linear-progress.js +1 -0
  162. package/esm/components/linear-progress.js.map +1 -1
  163. package/esm/components/list/list-item.d.ts.map +1 -1
  164. package/esm/components/list/list-item.js +1 -0
  165. package/esm/components/list/list-item.js.map +1 -1
  166. package/esm/components/list/list.d.ts.map +1 -1
  167. package/esm/components/list/list.js +2 -0
  168. package/esm/components/list/list.js.map +1 -1
  169. package/esm/components/loader.d.ts.map +1 -1
  170. package/esm/components/loader.js +1 -0
  171. package/esm/components/loader.js.map +1 -1
  172. package/esm/components/markdown/markdown-display.js +1 -1
  173. package/esm/components/markdown/markdown-display.js.map +1 -1
  174. package/esm/components/markdown/markdown-display.spec.js +2 -2
  175. package/esm/components/markdown/markdown-display.spec.js.map +1 -1
  176. package/esm/components/markdown/markdown-editor.d.ts +16 -2
  177. package/esm/components/markdown/markdown-editor.d.ts.map +1 -1
  178. package/esm/components/markdown/markdown-editor.js +43 -8
  179. package/esm/components/markdown/markdown-editor.js.map +1 -1
  180. package/esm/components/markdown/markdown-editor.spec.js +191 -1
  181. package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
  182. package/esm/components/markdown/markdown-input.d.ts +2 -0
  183. package/esm/components/markdown/markdown-input.d.ts.map +1 -1
  184. package/esm/components/markdown/markdown-input.js +5 -9
  185. package/esm/components/markdown/markdown-input.js.map +1 -1
  186. package/esm/components/markdown/markdown-input.spec.js +43 -0
  187. package/esm/components/markdown/markdown-input.spec.js.map +1 -1
  188. package/esm/components/markdown/markdown-validation.d.ts +25 -0
  189. package/esm/components/markdown/markdown-validation.d.ts.map +1 -0
  190. package/esm/components/markdown/markdown-validation.js +15 -0
  191. package/esm/components/markdown/markdown-validation.js.map +1 -0
  192. package/esm/components/modal.d.ts.map +1 -1
  193. package/esm/components/modal.js +2 -0
  194. package/esm/components/modal.js.map +1 -1
  195. package/esm/components/noty-list.d.ts.map +1 -1
  196. package/esm/components/noty-list.js +4 -2
  197. package/esm/components/noty-list.js.map +1 -1
  198. package/esm/components/noty-list.spec.js +1 -1
  199. package/esm/components/noty-list.spec.js.map +1 -1
  200. package/esm/components/page-container/index.d.ts +1 -1
  201. package/esm/components/page-container/index.d.ts.map +1 -1
  202. package/esm/components/page-container/index.js +2 -1
  203. package/esm/components/page-container/index.js.map +1 -1
  204. package/esm/components/page-container/page-header.d.ts.map +1 -1
  205. package/esm/components/page-container/page-header.js +10 -12
  206. package/esm/components/page-container/page-header.js.map +1 -1
  207. package/esm/components/page-container/page-header.spec.js +6 -4
  208. package/esm/components/page-container/page-header.spec.js.map +1 -1
  209. package/esm/components/page-layout/index.d.ts.map +1 -1
  210. package/esm/components/page-layout/index.js +2 -0
  211. package/esm/components/page-layout/index.js.map +1 -1
  212. package/esm/components/paper.d.ts.map +1 -1
  213. package/esm/components/paper.js +6 -1
  214. package/esm/components/paper.js.map +1 -1
  215. package/esm/components/rating.d.ts.map +1 -1
  216. package/esm/components/rating.js +1 -0
  217. package/esm/components/rating.js.map +1 -1
  218. package/esm/components/result.d.ts.map +1 -1
  219. package/esm/components/result.js +3 -14
  220. package/esm/components/result.js.map +1 -1
  221. package/esm/components/result.spec.js +3 -3
  222. package/esm/components/result.spec.js.map +1 -1
  223. package/esm/components/suggest/index.d.ts.map +1 -1
  224. package/esm/components/suggest/index.js +2 -0
  225. package/esm/components/suggest/index.js.map +1 -1
  226. package/esm/components/suggest/suggest-input.d.ts.map +1 -1
  227. package/esm/components/suggest/suggest-input.js +1 -0
  228. package/esm/components/suggest/suggest-input.js.map +1 -1
  229. package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
  230. package/esm/components/suggest/suggestion-list.js +3 -1
  231. package/esm/components/suggest/suggestion-list.js.map +1 -1
  232. package/esm/components/tabs.d.ts.map +1 -1
  233. package/esm/components/tabs.js +1 -0
  234. package/esm/components/tabs.js.map +1 -1
  235. package/esm/components/timeline.d.ts.map +1 -1
  236. package/esm/components/timeline.js +58 -51
  237. package/esm/components/timeline.js.map +1 -1
  238. package/esm/components/timeline.spec.js +0 -66
  239. package/esm/components/timeline.spec.js.map +1 -1
  240. package/esm/components/tooltip.d.ts.map +1 -1
  241. package/esm/components/tooltip.js +1 -0
  242. package/esm/components/tooltip.js.map +1 -1
  243. package/esm/components/tree/tree-item.d.ts.map +1 -1
  244. package/esm/components/tree/tree-item.js +1 -0
  245. package/esm/components/tree/tree-item.js.map +1 -1
  246. package/esm/components/tree/tree.d.ts.map +1 -1
  247. package/esm/components/tree/tree.js +2 -0
  248. package/esm/components/tree/tree.js.map +1 -1
  249. package/esm/components/typography.d.ts +2 -19
  250. package/esm/components/typography.d.ts.map +1 -1
  251. package/esm/components/typography.js +104 -94
  252. package/esm/components/typography.js.map +1 -1
  253. package/esm/components/typography.spec.js +16 -16
  254. package/esm/components/typography.spec.js.map +1 -1
  255. package/esm/components/wizard/index.d.ts.map +1 -1
  256. package/esm/components/wizard/index.js +1 -0
  257. package/esm/components/wizard/index.js.map +1 -1
  258. package/esm/services/css-variable-theme.d.ts +4 -0
  259. package/esm/services/css-variable-theme.d.ts.map +1 -1
  260. package/esm/services/css-variable-theme.js +29 -6
  261. package/esm/services/css-variable-theme.js.map +1 -1
  262. package/esm/services/css-variable-theme.spec.js +93 -1
  263. package/esm/services/css-variable-theme.spec.js.map +1 -1
  264. package/esm/services/get-rgb-from-color-string.d.ts +10 -0
  265. package/esm/services/get-rgb-from-color-string.d.ts.map +1 -0
  266. package/esm/services/get-rgb-from-color-string.js +86 -0
  267. package/esm/services/get-rgb-from-color-string.js.map +1 -0
  268. package/esm/services/get-rgb-from-color-string.spec.d.ts +2 -0
  269. package/esm/services/get-rgb-from-color-string.spec.d.ts.map +1 -0
  270. package/esm/services/get-rgb-from-color-string.spec.js +107 -0
  271. package/esm/services/get-rgb-from-color-string.spec.js.map +1 -0
  272. package/esm/services/get-text-color.d.ts +10 -0
  273. package/esm/services/get-text-color.d.ts.map +1 -0
  274. package/esm/services/get-text-color.js +15 -0
  275. package/esm/services/get-text-color.js.map +1 -0
  276. package/esm/services/get-text-color.spec.d.ts +2 -0
  277. package/esm/services/get-text-color.spec.d.ts.map +1 -0
  278. package/esm/services/get-text-color.spec.js +21 -0
  279. package/esm/services/get-text-color.spec.js.map +1 -0
  280. package/esm/services/index.d.ts +7 -4
  281. package/esm/services/index.d.ts.map +1 -1
  282. package/esm/services/index.js +7 -4
  283. package/esm/services/index.js.map +1 -1
  284. package/esm/services/rgb-color.d.ts +13 -0
  285. package/esm/services/rgb-color.d.ts.map +1 -0
  286. package/esm/services/rgb-color.js +23 -0
  287. package/esm/services/rgb-color.js.map +1 -0
  288. package/esm/services/rgb-color.spec.d.ts +2 -0
  289. package/esm/services/rgb-color.spec.d.ts.map +1 -0
  290. package/esm/services/rgb-color.spec.js +69 -0
  291. package/esm/services/rgb-color.spec.js.map +1 -0
  292. package/esm/services/theme-provider-service.d.ts +9 -23
  293. package/esm/services/theme-provider-service.d.ts.map +1 -1
  294. package/esm/services/theme-provider-service.js +1 -63
  295. package/esm/services/theme-provider-service.js.map +1 -1
  296. package/esm/services/theme-provider-service.spec.js +12 -159
  297. package/esm/services/theme-provider-service.spec.js.map +1 -1
  298. package/esm/themes/architect-palette.d.ts +8 -0
  299. package/esm/themes/architect-palette.d.ts.map +1 -0
  300. package/esm/themes/architect-palette.js +56 -0
  301. package/esm/themes/architect-palette.js.map +1 -0
  302. package/esm/themes/architect-theme.d.ts +120 -0
  303. package/esm/themes/architect-theme.d.ts.map +1 -0
  304. package/esm/themes/architect-theme.js +122 -0
  305. package/esm/themes/architect-theme.js.map +1 -0
  306. package/esm/themes/auditore-palette.d.ts +8 -0
  307. package/esm/themes/auditore-palette.d.ts.map +1 -0
  308. package/esm/themes/auditore-palette.js +56 -0
  309. package/esm/themes/auditore-palette.js.map +1 -0
  310. package/esm/themes/auditore-theme.d.ts +120 -0
  311. package/esm/themes/auditore-theme.d.ts.map +1 -0
  312. package/esm/themes/auditore-theme.js +122 -0
  313. package/esm/themes/auditore-theme.js.map +1 -0
  314. package/esm/themes/black-mesa-palette.d.ts +8 -0
  315. package/esm/themes/black-mesa-palette.d.ts.map +1 -0
  316. package/esm/themes/black-mesa-palette.js +56 -0
  317. package/esm/themes/black-mesa-palette.js.map +1 -0
  318. package/esm/themes/black-mesa-theme.d.ts +120 -0
  319. package/esm/themes/black-mesa-theme.d.ts.map +1 -0
  320. package/esm/themes/black-mesa-theme.js +122 -0
  321. package/esm/themes/black-mesa-theme.js.map +1 -0
  322. package/esm/themes/chieftain-palette.d.ts +8 -0
  323. package/esm/themes/chieftain-palette.d.ts.map +1 -0
  324. package/esm/themes/chieftain-palette.js +56 -0
  325. package/esm/themes/chieftain-palette.js.map +1 -0
  326. package/esm/themes/chieftain-theme.d.ts +121 -0
  327. package/esm/themes/chieftain-theme.d.ts.map +1 -0
  328. package/esm/themes/chieftain-theme.js +123 -0
  329. package/esm/themes/chieftain-theme.js.map +1 -0
  330. package/esm/themes/default-dark-palette.d.ts +8 -0
  331. package/esm/themes/default-dark-palette.d.ts.map +1 -0
  332. package/esm/{services → themes}/default-dark-palette.js +1 -1
  333. package/esm/themes/default-dark-palette.js.map +1 -0
  334. package/esm/{services → themes}/default-dark-theme.d.ts +7 -1
  335. package/esm/themes/default-dark-theme.d.ts.map +1 -0
  336. package/esm/{services → themes}/default-dark-theme.js +6 -0
  337. package/esm/themes/default-dark-theme.js.map +1 -0
  338. package/esm/{services → themes}/default-light-theme.d.ts +7 -1
  339. package/esm/themes/default-light-theme.d.ts.map +1 -0
  340. package/esm/{services → themes}/default-light-theme.js +6 -0
  341. package/esm/themes/default-light-theme.js.map +1 -0
  342. package/esm/{services → themes}/default-palette.d.ts +1 -1
  343. package/esm/themes/default-palette.d.ts.map +1 -0
  344. package/esm/themes/default-palette.js.map +1 -0
  345. package/esm/themes/dragonborn-palette.d.ts +8 -0
  346. package/esm/themes/dragonborn-palette.d.ts.map +1 -0
  347. package/esm/themes/dragonborn-palette.js +56 -0
  348. package/esm/themes/dragonborn-palette.js.map +1 -0
  349. package/esm/themes/dragonborn-theme.d.ts +120 -0
  350. package/esm/themes/dragonborn-theme.d.ts.map +1 -0
  351. package/esm/themes/dragonborn-theme.js +122 -0
  352. package/esm/themes/dragonborn-theme.js.map +1 -0
  353. package/esm/themes/hawkins-palette.d.ts +8 -0
  354. package/esm/themes/hawkins-palette.d.ts.map +1 -0
  355. package/esm/themes/hawkins-palette.js +56 -0
  356. package/esm/themes/hawkins-palette.js.map +1 -0
  357. package/esm/themes/hawkins-theme.d.ts +120 -0
  358. package/esm/themes/hawkins-theme.d.ts.map +1 -0
  359. package/esm/themes/hawkins-theme.js +122 -0
  360. package/esm/themes/hawkins-theme.js.map +1 -0
  361. package/esm/themes/jedi-palette.d.ts +8 -0
  362. package/esm/themes/jedi-palette.d.ts.map +1 -0
  363. package/esm/themes/jedi-palette.js +56 -0
  364. package/esm/themes/jedi-palette.js.map +1 -0
  365. package/esm/themes/jedi-theme.d.ts +120 -0
  366. package/esm/themes/jedi-theme.d.ts.map +1 -0
  367. package/esm/themes/jedi-theme.js +122 -0
  368. package/esm/themes/jedi-theme.js.map +1 -0
  369. package/esm/themes/neon-runner-palette.d.ts +8 -0
  370. package/esm/themes/neon-runner-palette.d.ts.map +1 -0
  371. package/esm/themes/neon-runner-palette.js +56 -0
  372. package/esm/themes/neon-runner-palette.js.map +1 -0
  373. package/esm/themes/neon-runner-theme.d.ts +119 -0
  374. package/esm/themes/neon-runner-theme.d.ts.map +1 -0
  375. package/esm/themes/neon-runner-theme.js +120 -0
  376. package/esm/themes/neon-runner-theme.js.map +1 -0
  377. package/esm/themes/paladin-palette.d.ts +8 -0
  378. package/esm/themes/paladin-palette.d.ts.map +1 -0
  379. package/esm/themes/paladin-palette.js +56 -0
  380. package/esm/themes/paladin-palette.js.map +1 -0
  381. package/esm/themes/paladin-theme.d.ts +121 -0
  382. package/esm/themes/paladin-theme.d.ts.map +1 -0
  383. package/esm/themes/paladin-theme.js +123 -0
  384. package/esm/themes/paladin-theme.js.map +1 -0
  385. package/esm/themes/plumber-palette.d.ts +8 -0
  386. package/esm/themes/plumber-palette.d.ts.map +1 -0
  387. package/esm/themes/plumber-palette.js +56 -0
  388. package/esm/themes/plumber-palette.js.map +1 -0
  389. package/esm/themes/plumber-theme.d.ts +120 -0
  390. package/esm/themes/plumber-theme.d.ts.map +1 -0
  391. package/esm/themes/plumber-theme.js +121 -0
  392. package/esm/themes/plumber-theme.js.map +1 -0
  393. package/esm/themes/replicant-palette.d.ts +8 -0
  394. package/esm/themes/replicant-palette.d.ts.map +1 -0
  395. package/esm/themes/replicant-palette.js +56 -0
  396. package/esm/themes/replicant-palette.js.map +1 -0
  397. package/esm/themes/replicant-theme.d.ts +120 -0
  398. package/esm/themes/replicant-theme.d.ts.map +1 -0
  399. package/esm/themes/replicant-theme.js +122 -0
  400. package/esm/themes/replicant-theme.js.map +1 -0
  401. package/esm/themes/sandworm-palette.d.ts +8 -0
  402. package/esm/themes/sandworm-palette.d.ts.map +1 -0
  403. package/esm/themes/sandworm-palette.js +56 -0
  404. package/esm/themes/sandworm-palette.js.map +1 -0
  405. package/esm/themes/sandworm-theme.d.ts +120 -0
  406. package/esm/themes/sandworm-theme.d.ts.map +1 -0
  407. package/esm/themes/sandworm-theme.js +122 -0
  408. package/esm/themes/sandworm-theme.js.map +1 -0
  409. package/esm/themes/shadow-broker-palette.d.ts +8 -0
  410. package/esm/themes/shadow-broker-palette.d.ts.map +1 -0
  411. package/esm/themes/shadow-broker-palette.js +56 -0
  412. package/esm/{services/default-dark-palette.js.map → themes/shadow-broker-palette.js.map} +1 -1
  413. package/esm/themes/shadow-broker-theme.d.ts +120 -0
  414. package/esm/themes/shadow-broker-theme.d.ts.map +1 -0
  415. package/esm/themes/shadow-broker-theme.js +121 -0
  416. package/esm/themes/shadow-broker-theme.js.map +1 -0
  417. package/esm/themes/sith-palette.d.ts +8 -0
  418. package/esm/themes/sith-palette.d.ts.map +1 -0
  419. package/esm/themes/sith-palette.js +56 -0
  420. package/esm/themes/sith-palette.js.map +1 -0
  421. package/esm/themes/sith-theme.d.ts +120 -0
  422. package/esm/themes/sith-theme.d.ts.map +1 -0
  423. package/esm/themes/sith-theme.js +122 -0
  424. package/esm/themes/sith-theme.js.map +1 -0
  425. package/esm/themes/vault-dweller-palette.d.ts +8 -0
  426. package/esm/themes/vault-dweller-palette.d.ts.map +1 -0
  427. package/esm/themes/vault-dweller-palette.js +56 -0
  428. package/esm/themes/vault-dweller-palette.js.map +1 -0
  429. package/esm/themes/vault-dweller-theme.d.ts +120 -0
  430. package/esm/themes/vault-dweller-theme.d.ts.map +1 -0
  431. package/esm/themes/vault-dweller-theme.js +122 -0
  432. package/esm/themes/vault-dweller-theme.js.map +1 -0
  433. package/esm/themes/wild-hunt-palette.d.ts +8 -0
  434. package/esm/themes/wild-hunt-palette.d.ts.map +1 -0
  435. package/esm/themes/wild-hunt-palette.js +56 -0
  436. package/esm/themes/wild-hunt-palette.js.map +1 -0
  437. package/esm/themes/wild-hunt-theme.d.ts +120 -0
  438. package/esm/themes/wild-hunt-theme.d.ts.map +1 -0
  439. package/esm/themes/wild-hunt-theme.js +122 -0
  440. package/esm/themes/wild-hunt-theme.js.map +1 -0
  441. package/esm/themes/xenomorph-palette.d.ts +8 -0
  442. package/esm/themes/xenomorph-palette.d.ts.map +1 -0
  443. package/esm/themes/xenomorph-palette.js +56 -0
  444. package/esm/themes/xenomorph-palette.js.map +1 -0
  445. package/esm/themes/xenomorph-theme.d.ts +120 -0
  446. package/esm/themes/xenomorph-theme.d.ts.map +1 -0
  447. package/esm/themes/xenomorph-theme.js +121 -0
  448. package/esm/themes/xenomorph-theme.js.map +1 -0
  449. package/package.json +7 -3
  450. package/src/components/accordion/accordion-item.tsx +16 -23
  451. package/src/components/accordion/accordion.tsx +1 -0
  452. package/src/components/app-bar-link.tsx +1 -0
  453. package/src/components/app-bar.spec.tsx +3 -3
  454. package/src/components/app-bar.tsx +2 -0
  455. package/src/components/avatar.tsx +1 -0
  456. package/src/components/badge.tsx +2 -1
  457. package/src/components/breadcrumb.tsx +1 -0
  458. package/src/components/button-group.spec.tsx +7 -6
  459. package/src/components/button-group.tsx +72 -70
  460. package/src/components/button.tsx +1 -0
  461. package/src/components/cache-view.spec.tsx +4 -1
  462. package/src/components/cache-view.tsx +4 -0
  463. package/src/components/card.tsx +3 -1
  464. package/src/components/circular-progress.tsx +1 -0
  465. package/src/components/command-palette/command-palette-input.tsx +1 -0
  466. package/src/components/command-palette/command-palette-suggestion-list.tsx +3 -1
  467. package/src/components/command-palette/index.tsx +2 -0
  468. package/src/components/context-menu/context-menu-item.tsx +1 -0
  469. package/src/components/context-menu/context-menu.tsx +1 -0
  470. package/src/components/data-grid/body.tsx +2 -0
  471. package/src/components/data-grid/data-grid-row.tsx +1 -0
  472. package/src/components/data-grid/data-grid.tsx +1 -0
  473. package/src/components/data-grid/filters/boolean-filter.tsx +2 -0
  474. package/src/components/data-grid/filters/date-filter.tsx +2 -0
  475. package/src/components/data-grid/filters/enum-filter.tsx +2 -0
  476. package/src/components/data-grid/filters/filter-dropdown.tsx +1 -0
  477. package/src/components/data-grid/filters/number-filter.tsx +2 -0
  478. package/src/components/data-grid/filters/string-filter.tsx +2 -0
  479. package/src/components/data-grid/footer.tsx +1 -0
  480. package/src/components/data-grid/header.tsx +2 -0
  481. package/src/components/data-grid/selection-cell.tsx +1 -0
  482. package/src/components/dialog.tsx +15 -15
  483. package/src/components/divider.tsx +1 -0
  484. package/src/components/drawer/drawer-toggle-button.tsx +2 -1
  485. package/src/components/drawer/index.tsx +1 -0
  486. package/src/components/dropdown.tsx +1 -0
  487. package/src/components/fab.tsx +1 -0
  488. package/src/components/form.tsx +2 -0
  489. package/src/components/grid.tsx +3 -1
  490. package/src/components/icons/icon.tsx +2 -0
  491. package/src/components/image.tsx +1 -0
  492. package/src/components/inputs/autocomplete.tsx +2 -0
  493. package/src/components/inputs/checkbox.tsx +2 -1
  494. package/src/components/inputs/input-number.tsx +1 -0
  495. package/src/components/inputs/input.tsx +1 -0
  496. package/src/components/inputs/radio-group.tsx +1 -0
  497. package/src/components/inputs/radio.tsx +1 -0
  498. package/src/components/inputs/select.spec.tsx +3 -6
  499. package/src/components/inputs/select.tsx +13 -15
  500. package/src/components/inputs/slider.tsx +27 -36
  501. package/src/components/inputs/switch.tsx +2 -1
  502. package/src/components/inputs/text-area.tsx +1 -0
  503. package/src/components/linear-progress.tsx +1 -0
  504. package/src/components/list/list-item.tsx +1 -0
  505. package/src/components/list/list.tsx +2 -0
  506. package/src/components/loader.tsx +1 -0
  507. package/src/components/markdown/markdown-display.spec.tsx +2 -2
  508. package/src/components/markdown/markdown-display.tsx +1 -1
  509. package/src/components/markdown/markdown-editor.spec.tsx +262 -1
  510. package/src/components/markdown/markdown-editor.tsx +64 -10
  511. package/src/components/markdown/markdown-input.spec.tsx +63 -0
  512. package/src/components/markdown/markdown-input.tsx +7 -11
  513. package/src/components/markdown/markdown-validation.ts +33 -0
  514. package/src/components/modal.tsx +2 -0
  515. package/src/components/noty-list.spec.tsx +1 -1
  516. package/src/components/noty-list.tsx +4 -2
  517. package/src/components/page-container/index.tsx +2 -1
  518. package/src/components/page-container/page-header.spec.tsx +6 -4
  519. package/src/components/page-container/page-header.tsx +23 -15
  520. package/src/components/page-layout/index.tsx +2 -0
  521. package/src/components/paper.tsx +6 -1
  522. package/src/components/rating.tsx +1 -0
  523. package/src/components/result.spec.tsx +3 -3
  524. package/src/components/result.tsx +9 -15
  525. package/src/components/suggest/index.tsx +2 -0
  526. package/src/components/suggest/suggest-input.tsx +1 -0
  527. package/src/components/suggest/suggestion-list.tsx +3 -1
  528. package/src/components/tabs.tsx +1 -0
  529. package/src/components/timeline.spec.tsx +0 -95
  530. package/src/components/timeline.tsx +63 -54
  531. package/src/components/tooltip.tsx +1 -0
  532. package/src/components/tree/tree-item.tsx +1 -0
  533. package/src/components/tree/tree.tsx +2 -0
  534. package/src/components/typography.spec.tsx +16 -16
  535. package/src/components/typography.tsx +121 -110
  536. package/src/components/wizard/index.tsx +1 -0
  537. package/src/services/css-variable-theme.spec.ts +108 -0
  538. package/src/services/css-variable-theme.ts +30 -7
  539. package/src/services/get-rgb-from-color-string.spec.ts +122 -0
  540. package/src/services/get-rgb-from-color-string.ts +96 -0
  541. package/src/services/get-text-color.spec.ts +25 -0
  542. package/src/services/get-text-color.ts +15 -0
  543. package/src/services/index.ts +7 -4
  544. package/src/services/rgb-color.spec.ts +79 -0
  545. package/src/services/rgb-color.ts +20 -0
  546. package/src/services/theme-provider-service.spec.ts +12 -185
  547. package/src/services/theme-provider-service.ts +8 -72
  548. package/src/themes/architect-palette.ts +57 -0
  549. package/src/themes/architect-theme.ts +124 -0
  550. package/src/themes/auditore-palette.ts +57 -0
  551. package/src/themes/auditore-theme.ts +124 -0
  552. package/src/themes/black-mesa-palette.ts +57 -0
  553. package/src/themes/black-mesa-theme.ts +124 -0
  554. package/src/themes/chieftain-palette.ts +57 -0
  555. package/src/themes/chieftain-theme.ts +125 -0
  556. package/src/{services → themes}/default-dark-palette.ts +2 -2
  557. package/src/{services → themes}/default-dark-theme.ts +7 -1
  558. package/src/{services → themes}/default-light-theme.ts +7 -1
  559. package/src/{services → themes}/default-palette.ts +1 -1
  560. package/src/themes/dragonborn-palette.ts +57 -0
  561. package/src/themes/dragonborn-theme.ts +124 -0
  562. package/src/themes/hawkins-palette.ts +57 -0
  563. package/src/themes/hawkins-theme.ts +124 -0
  564. package/src/themes/jedi-palette.ts +57 -0
  565. package/src/themes/jedi-theme.ts +124 -0
  566. package/src/themes/neon-runner-palette.ts +57 -0
  567. package/src/themes/neon-runner-theme.ts +121 -0
  568. package/src/themes/paladin-palette.ts +57 -0
  569. package/src/themes/paladin-theme.ts +125 -0
  570. package/src/themes/plumber-palette.ts +57 -0
  571. package/src/themes/plumber-theme.ts +122 -0
  572. package/src/themes/replicant-palette.ts +57 -0
  573. package/src/themes/replicant-theme.ts +124 -0
  574. package/src/themes/sandworm-palette.ts +57 -0
  575. package/src/themes/sandworm-theme.ts +124 -0
  576. package/src/themes/shadow-broker-palette.ts +57 -0
  577. package/src/themes/shadow-broker-theme.ts +122 -0
  578. package/src/themes/sith-palette.ts +57 -0
  579. package/src/themes/sith-theme.ts +124 -0
  580. package/src/themes/vault-dweller-palette.ts +57 -0
  581. package/src/themes/vault-dweller-theme.ts +124 -0
  582. package/src/themes/wild-hunt-palette.ts +57 -0
  583. package/src/themes/wild-hunt-theme.ts +124 -0
  584. package/src/themes/xenomorph-palette.ts +57 -0
  585. package/src/themes/xenomorph-theme.ts +122 -0
  586. package/esm/services/default-dark-palette.d.ts +0 -8
  587. package/esm/services/default-dark-palette.d.ts.map +0 -1
  588. package/esm/services/default-dark-theme.d.ts.map +0 -1
  589. package/esm/services/default-dark-theme.js.map +0 -1
  590. package/esm/services/default-light-theme.d.ts.map +0 -1
  591. package/esm/services/default-light-theme.js.map +0 -1
  592. package/esm/services/default-palette.d.ts.map +0 -1
  593. package/esm/services/default-palette.js.map +0 -1
  594. /package/esm/{services → themes}/default-palette.js +0 -0
@@ -0,0 +1,96 @@
1
+ import { getCssVariable } from './css-variable-theme.js'
2
+ import { RgbColor } from './rgb-color.js'
3
+
4
+ const NAMED_COLORS: Record<string, [r: number, g: number, b: number]> = {
5
+ aqua: [0, 255, 255],
6
+ black: [0, 0, 0],
7
+ blue: [0, 0, 255],
8
+ brown: [165, 42, 42],
9
+ coral: [255, 127, 80],
10
+ crimson: [220, 20, 60],
11
+ cyan: [0, 255, 255],
12
+ darkblue: [0, 0, 139],
13
+ darkgray: [169, 169, 169],
14
+ darkgreen: [0, 100, 0],
15
+ darkgrey: [169, 169, 169],
16
+ darkred: [139, 0, 0],
17
+ deeppink: [255, 20, 147],
18
+ dodgerblue: [30, 144, 255],
19
+ fuchsia: [255, 0, 255],
20
+ gold: [255, 215, 0],
21
+ gray: [128, 128, 128],
22
+ green: [0, 128, 0],
23
+ grey: [128, 128, 128],
24
+ hotpink: [255, 105, 180],
25
+ indigo: [75, 0, 130],
26
+ ivory: [255, 255, 240],
27
+ khaki: [240, 230, 140],
28
+ lavender: [230, 230, 250],
29
+ lime: [0, 255, 0],
30
+ limegreen: [50, 205, 50],
31
+ magenta: [255, 0, 255],
32
+ maroon: [128, 0, 0],
33
+ navy: [0, 0, 128],
34
+ olive: [128, 128, 0],
35
+ orange: [255, 165, 0],
36
+ orangered: [255, 69, 0],
37
+ pink: [255, 192, 203],
38
+ purple: [128, 0, 128],
39
+ red: [255, 0, 0],
40
+ royalblue: [65, 105, 225],
41
+ salmon: [250, 128, 114],
42
+ silver: [192, 192, 192],
43
+ skyblue: [135, 206, 235],
44
+ steelblue: [70, 130, 180],
45
+ teal: [0, 128, 128],
46
+ tomato: [255, 99, 71],
47
+ turquoise: [64, 224, 208],
48
+ violet: [238, 130, 238],
49
+ white: [255, 255, 255],
50
+ yellow: [255, 255, 0],
51
+ }
52
+
53
+ /**
54
+ * Parses a CSS color string and returns its RGBA representation.
55
+ * Supports hex (#rgb, #rrggbb), rgb(), rgba(), CSS variables (var(--…)),
56
+ * and common named colors.
57
+ * @param color The color string to parse
58
+ * @returns The parsed RGBA values
59
+ */
60
+ export const getRgbFromColorString = (color: string): RgbColor => {
61
+ if (color.startsWith('var(--')) {
62
+ return getRgbFromColorString(getCssVariable(color))
63
+ }
64
+
65
+ if (color.startsWith('#')) {
66
+ if (color.length === 7) {
67
+ const r = parseInt(color.substring(1, 3), 16)
68
+ const g = parseInt(color.substring(3, 5), 16)
69
+ const b = parseInt(color.substring(5, 7), 16)
70
+ return new RgbColor(r, g, b)
71
+ }
72
+ if (color.length === 4) {
73
+ const r = parseInt(color[1] + color[1], 16)
74
+ const g = parseInt(color[2] + color[2], 16)
75
+ const b = parseInt(color[3] + color[3], 16)
76
+ return new RgbColor(r, g, b)
77
+ }
78
+ }
79
+
80
+ const rgbaMatch = /^rgba?\(\s*(?<red>\d+),\s*(?<green>\d+),\s*(?<blue>\d+)(?:,\s*(?<alpha>[\d.]+))?\s*\)$/.exec(color)
81
+ if (rgbaMatch?.groups) {
82
+ return new RgbColor(
83
+ parseInt(rgbaMatch.groups.red, 10),
84
+ parseInt(rgbaMatch.groups.green, 10),
85
+ parseInt(rgbaMatch.groups.blue, 10),
86
+ rgbaMatch.groups.alpha !== undefined ? parseFloat(rgbaMatch.groups.alpha) : 1,
87
+ )
88
+ }
89
+
90
+ const named = NAMED_COLORS[color.toLowerCase()]
91
+ if (named) {
92
+ return new RgbColor(named[0], named[1], named[2])
93
+ }
94
+
95
+ throw Error(`Color format '${color}' is not supported.`)
96
+ }
@@ -0,0 +1,25 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { getTextColor } from './get-text-color.js'
3
+
4
+ describe('getTextColor', () => {
5
+ it('should return dark text for light background', () => {
6
+ expect(getTextColor('#ffffff')).toBe('#000000')
7
+ })
8
+
9
+ it('should return light text for dark background', () => {
10
+ expect(getTextColor('#000000')).toBe('#FFFFFF')
11
+ })
12
+
13
+ it('should return custom bright color for light background', () => {
14
+ expect(getTextColor('#ffffff', '#333333', '#eeeeee')).toBe('#333333')
15
+ })
16
+
17
+ it('should return custom dark color for dark background', () => {
18
+ expect(getTextColor('#000000', '#333333', '#eeeeee')).toBe('#eeeeee')
19
+ })
20
+
21
+ it('should work with named colors', () => {
22
+ expect(getTextColor('white')).toBe('#000000')
23
+ expect(getTextColor('black')).toBe('#FFFFFF')
24
+ })
25
+ })
@@ -0,0 +1,15 @@
1
+ import { getRgbFromColorString } from './get-rgb-from-color-string.js'
2
+
3
+ /**
4
+ * Returns a contrasting text color (bright or dark) for a given background color.
5
+ * Uses the YIQ luminance formula to determine whether the background is light or dark.
6
+ * @param color The background color string
7
+ * @param bright The color to return for light backgrounds (defaults to '#000000')
8
+ * @param dark The color to return for dark backgrounds (defaults to '#FFFFFF')
9
+ * @returns The bright or dark color that best contrasts the background
10
+ */
11
+ export const getTextColor = (color: string, bright = '#000000', dark = '#FFFFFF'): string => {
12
+ const { r, g, b } = getRgbFromColorString(color)
13
+ const yiq = (r * 299 + g * 587 + b * 114) / 1000
14
+ return yiq >= 128 ? bright : dark
15
+ }
@@ -1,13 +1,16 @@
1
1
  export * from './click-away-service.js'
2
2
  export * from './collection-service.js'
3
3
  export * from './css-variable-theme.js'
4
- export * from './default-dark-palette.js'
5
- export * from './default-dark-theme.js'
6
- export * from './default-light-theme.js'
7
- export * from './default-palette.js'
4
+ export * from '../themes/default-dark-palette.js'
5
+ export * from '../themes/default-dark-theme.js'
6
+ export * from '../themes/default-light-theme.js'
7
+ export * from '../themes/default-palette.js'
8
+ export * from './get-rgb-from-color-string.js'
9
+ export * from './get-text-color.js'
8
10
  export * from './layout-service.js'
9
11
  export * from './list-service.js'
10
12
  export * from './noty-service.js'
11
13
  export * from './palette-css-vars.js'
14
+ export * from './rgb-color.js'
12
15
  export * from './theme-provider-service.js'
13
16
  export * from './tree-service.js'
@@ -0,0 +1,79 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { RgbColor } from './rgb-color.js'
3
+
4
+ describe('RgbColor', () => {
5
+ describe('constructor', () => {
6
+ it('should create RgbColor with r, g, b values', () => {
7
+ const color = new RgbColor(255, 128, 64)
8
+ expect(color.r).toBe(255)
9
+ expect(color.g).toBe(128)
10
+ expect(color.b).toBe(64)
11
+ expect(color.a).toBe(1)
12
+ })
13
+
14
+ it('should create RgbColor with alpha value', () => {
15
+ const color = new RgbColor(255, 128, 64, 0.5)
16
+ expect(color.r).toBe(255)
17
+ expect(color.g).toBe(128)
18
+ expect(color.b).toBe(64)
19
+ expect(color.a).toBe(0.5)
20
+ })
21
+
22
+ it('should default alpha to 1', () => {
23
+ const color = new RgbColor(100, 100, 100)
24
+ expect(color.a).toBe(1)
25
+ })
26
+ })
27
+
28
+ describe('update', () => {
29
+ it('should update r value and return self', () => {
30
+ const color = new RgbColor(100, 100, 100)
31
+ const result = color.update('r', 200)
32
+ expect(result).toBe(color)
33
+ expect(color.r).toBe(200)
34
+ })
35
+
36
+ it('should update g value', () => {
37
+ const color = new RgbColor(100, 100, 100)
38
+ color.update('g', 150)
39
+ expect(color.g).toBe(150)
40
+ })
41
+
42
+ it('should update b value', () => {
43
+ const color = new RgbColor(100, 100, 100)
44
+ color.update('b', 50)
45
+ expect(color.b).toBe(50)
46
+ })
47
+
48
+ it('should update a value', () => {
49
+ const color = new RgbColor(100, 100, 100, 1)
50
+ color.update('a', 0.7)
51
+ expect(color.a).toBe(0.7)
52
+ })
53
+
54
+ it('should allow chained updates', () => {
55
+ const color = new RgbColor(0, 0, 0)
56
+ color.update('r', 255).update('g', 128).update('b', 64)
57
+ expect(color.r).toBe(255)
58
+ expect(color.g).toBe(128)
59
+ expect(color.b).toBe(64)
60
+ })
61
+ })
62
+
63
+ describe('toString', () => {
64
+ it('should return rgba format string', () => {
65
+ const color = new RgbColor(255, 128, 64, 0.5)
66
+ expect(color.toString()).toBe('rgba(255,128,64,0.5)')
67
+ })
68
+
69
+ it('should handle full opacity', () => {
70
+ const color = new RgbColor(0, 0, 0, 1)
71
+ expect(color.toString()).toBe('rgba(0,0,0,1)')
72
+ })
73
+
74
+ it('should handle zero alpha', () => {
75
+ const color = new RgbColor(255, 255, 255, 0)
76
+ expect(color.toString()).toBe('rgba(255,255,255,0)')
77
+ })
78
+ })
79
+ })
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Represents an RGBA color with mutable channels.
3
+ */
4
+ export class RgbColor {
5
+ constructor(
6
+ public r: number,
7
+ public g: number,
8
+ public b: number,
9
+ public a: number = 1,
10
+ ) {}
11
+
12
+ public update(key: 'r' | 'g' | 'b' | 'a', value: number): RgbColor {
13
+ this[key] = value
14
+ return this
15
+ }
16
+
17
+ public toString(): string {
18
+ return `rgba(${this.r},${this.g},${this.b},${this.a})`
19
+ }
20
+ }
@@ -1,195 +1,22 @@
1
1
  import { beforeEach, describe, expect, it } from 'vitest'
2
- import { RgbColor, ThemeProviderService } from './theme-provider-service.js'
2
+ import { ThemeProviderService } from './theme-provider-service.js'
3
3
 
4
- describe('theme-provider-service', () => {
5
- describe('RgbColor', () => {
6
- describe('constructor', () => {
7
- it('should create RgbColor with r, g, b values', () => {
8
- const color = new RgbColor(255, 128, 64)
9
- expect(color.r).toBe(255)
10
- expect(color.g).toBe(128)
11
- expect(color.b).toBe(64)
12
- expect(color.a).toBe(1)
13
- })
4
+ describe('ThemeProviderService', () => {
5
+ let service: ThemeProviderService
14
6
 
15
- it('should create RgbColor with alpha value', () => {
16
- const color = new RgbColor(255, 128, 64, 0.5)
17
- expect(color.r).toBe(255)
18
- expect(color.g).toBe(128)
19
- expect(color.b).toBe(64)
20
- expect(color.a).toBe(0.5)
21
- })
22
-
23
- it('should default alpha to 1', () => {
24
- const color = new RgbColor(100, 100, 100)
25
- expect(color.a).toBe(1)
26
- })
27
- })
28
-
29
- describe('update', () => {
30
- it('should update r value and return self', () => {
31
- const color = new RgbColor(100, 100, 100)
32
- const result = color.update('r', 200)
33
- expect(result).toBe(color)
34
- expect(color.r).toBe(200)
35
- })
36
-
37
- it('should update g value', () => {
38
- const color = new RgbColor(100, 100, 100)
39
- color.update('g', 150)
40
- expect(color.g).toBe(150)
41
- })
42
-
43
- it('should update b value', () => {
44
- const color = new RgbColor(100, 100, 100)
45
- color.update('b', 50)
46
- expect(color.b).toBe(50)
47
- })
48
-
49
- it('should update a value', () => {
50
- const color = new RgbColor(100, 100, 100, 1)
51
- color.update('a', 0.7)
52
- expect(color.a).toBe(0.7)
53
- })
54
-
55
- it('should allow chained updates', () => {
56
- const color = new RgbColor(0, 0, 0)
57
- color.update('r', 255).update('g', 128).update('b', 64)
58
- expect(color.r).toBe(255)
59
- expect(color.g).toBe(128)
60
- expect(color.b).toBe(64)
61
- })
62
- })
63
-
64
- describe('toString', () => {
65
- it('should return rgba format string', () => {
66
- const color = new RgbColor(255, 128, 64, 0.5)
67
- expect(color.toString()).toBe('rgba(255,128,64,0.5)')
68
- })
69
-
70
- it('should handle full opacity', () => {
71
- const color = new RgbColor(0, 0, 0, 1)
72
- expect(color.toString()).toBe('rgba(0,0,0,1)')
73
- })
74
-
75
- it('should handle zero alpha', () => {
76
- const color = new RgbColor(255, 255, 255, 0)
77
- expect(color.toString()).toBe('rgba(255,255,255,0)')
78
- })
79
- })
7
+ beforeEach(() => {
8
+ service = new ThemeProviderService()
80
9
  })
81
10
 
82
- describe('ThemeProviderService', () => {
83
- let service: ThemeProviderService
84
-
85
- beforeEach(() => {
86
- service = new ThemeProviderService()
11
+ describe('theme management', () => {
12
+ it('should have initial theme assigned', () => {
13
+ expect(service.getAssignedTheme()).toBeDefined()
14
+ expect(service.getAssignedTheme().name).toBe('css-variable-theme')
87
15
  })
88
16
 
89
- describe('getRgbFromColorString', () => {
90
- it('should parse 6-digit hex color', () => {
91
- const result = service.getRgbFromColorString('#ff8040')
92
- expect(result.r).toBe(255)
93
- expect(result.g).toBe(128)
94
- expect(result.b).toBe(64)
95
- })
96
-
97
- it('should parse 6-digit hex color with lowercase', () => {
98
- const result = service.getRgbFromColorString('#3f51b5')
99
- expect(result.r).toBe(63)
100
- expect(result.g).toBe(81)
101
- expect(result.b).toBe(181)
102
- })
103
-
104
- it('should parse 6-digit hex color with uppercase', () => {
105
- const result = service.getRgbFromColorString('#FF0000')
106
- expect(result.r).toBe(255)
107
- expect(result.g).toBe(0)
108
- expect(result.b).toBe(0)
109
- })
110
-
111
- it('should parse 3-digit hex color', () => {
112
- const result = service.getRgbFromColorString('#f80')
113
- expect(result.r).toBe(255)
114
- expect(result.g).toBe(136)
115
- expect(result.b).toBe(0)
116
- })
117
-
118
- it('should parse 3-digit hex white', () => {
119
- const result = service.getRgbFromColorString('#fff')
120
- expect(result.r).toBe(255)
121
- expect(result.g).toBe(255)
122
- expect(result.b).toBe(255)
123
- })
124
-
125
- it('should parse 3-digit hex black', () => {
126
- const result = service.getRgbFromColorString('#000')
127
- expect(result.r).toBe(0)
128
- expect(result.g).toBe(0)
129
- expect(result.b).toBe(0)
130
- })
131
-
132
- it('should parse rgba color', () => {
133
- const result = service.getRgbFromColorString('rgba(255,128,64,0.5)')
134
- expect(result.r).toBe(255)
135
- expect(result.g).toBe(128)
136
- expect(result.b).toBe(64)
137
- expect(result.a).toBe(0)
138
- })
139
-
140
- it('should parse rgba color with spaces', () => {
141
- const result = service.getRgbFromColorString('rgba(100, 150, 200, 1)')
142
- expect(result.r).toBe(100)
143
- expect(result.g).toBe(150)
144
- expect(result.b).toBe(200)
145
- expect(result.a).toBe(1)
146
- })
147
-
148
- it('should throw error for unsupported color format', () => {
149
- expect(() => service.getRgbFromColorString('red')).toThrow("Color format 'red' is not supported.'")
150
- })
151
-
152
- it('should throw error for rgb format without alpha', () => {
153
- expect(() => service.getRgbFromColorString('rgb(255, 0, 0)')).toThrow()
154
- })
155
-
156
- it('should throw error for invalid hex length', () => {
157
- expect(() => service.getRgbFromColorString('#12345')).toThrow()
158
- })
159
- })
160
-
161
- describe('getTextColor', () => {
162
- it('should return dark text for light background', () => {
163
- const result = service.getTextColor('#ffffff')
164
- expect(result).toBe('#000000')
165
- })
166
-
167
- it('should return light text for dark background', () => {
168
- const result = service.getTextColor('#000000')
169
- expect(result).toBe('#FFFFFF')
170
- })
171
-
172
- it('should return custom bright color for light background', () => {
173
- const result = service.getTextColor('#ffffff', '#333333', '#eeeeee')
174
- expect(result).toBe('#333333')
175
- })
176
-
177
- it('should return custom dark color for dark background', () => {
178
- const result = service.getTextColor('#000000', '#333333', '#eeeeee')
179
- expect(result).toBe('#eeeeee')
180
- })
181
- })
182
-
183
- describe('theme management', () => {
184
- it('should have initial theme assigned', () => {
185
- expect(service.getAssignedTheme()).toBeDefined()
186
- expect(service.getAssignedTheme().name).toBe('css-variable-theme')
187
- })
188
-
189
- it('should expose cssVariableTheme as theme property', () => {
190
- expect(service.theme).toBeDefined()
191
- expect(service.theme.name).toBe('css-variable-theme')
192
- })
17
+ it('should expose cssVariableTheme as theme property', () => {
18
+ expect(service.theme).toBeDefined()
19
+ expect(service.theme.name).toBe('css-variable-theme')
193
20
  })
194
21
  })
195
22
  })
@@ -1,6 +1,7 @@
1
1
  import { Injectable } from '@furystack/inject'
2
2
  import { EventHub, type DeepPartial } from '@furystack/utils'
3
- import { cssVariableTheme, getCssVariable, useThemeCssVariables } from './css-variable-theme.js'
3
+
4
+ import { cssVariableTheme, useThemeCssVariables } from './css-variable-theme.js'
4
5
 
5
6
  /**
6
7
  * Represents a CSS color value.
@@ -84,6 +85,8 @@ export interface Background {
84
85
  default: Color
85
86
  /** Elevated surface background (cards, dialogs, etc.) */
86
87
  paper: Color
88
+ /** Optional CSS background-image for paper surfaces (e.g. a tiled texture) */
89
+ paperImage?: string
87
90
  }
88
91
 
89
92
  /**
@@ -128,6 +131,8 @@ export type BorderRadiusScale = {
128
131
  export type Shape = {
129
132
  /** Border radius scale */
130
133
  borderRadius: BorderRadiusScale
134
+ /** Border width for surface components (paper, card, etc.). Defaults to 0. */
135
+ borderWidth?: string
131
136
  }
132
137
 
133
138
  /**
@@ -226,6 +231,8 @@ export type ThemeTypography = {
226
231
  lineHeight: LineHeightScale
227
232
  /** Letter spacing scale */
228
233
  letterSpacing?: LetterSpacingScale
234
+ /** CSS text-shadow value applied globally to text */
235
+ textShadow?: string
229
236
  }
230
237
 
231
238
  /**
@@ -356,82 +363,11 @@ export interface Theme {
356
363
  effects?: Effects
357
364
  }
358
365
 
359
- export class RgbColor {
360
- constructor(
361
- public r: number,
362
- public g: number,
363
- public b: number,
364
- public a: number = 1,
365
- ) {}
366
-
367
- public update(key: 'r' | 'g' | 'b' | 'a', value: number): RgbColor {
368
- this[key] = value
369
- return this
370
- }
371
-
372
- public toString(): string {
373
- return `rgba(${this.r},${this.g},${this.b},${this.a})`
374
- }
375
- }
376
-
377
366
  /**
378
367
  * Service class for theme-related operations
379
368
  */
380
369
  @Injectable({ lifetime: 'singleton' })
381
370
  export class ThemeProviderService extends EventHub<{ themeChanged: DeepPartial<Theme> }> {
382
- /**
383
- * @deprecated does not respect CSS vars
384
- * @param color The background color
385
- * @param bright The Bright color
386
- * @param dark The Dark color
387
- * @returns The bright or dark color variant that fits the background color
388
- */
389
- public getTextColor(color: string, bright = '#000000', dark = '#FFFFFF') {
390
- const { r, g, b } = this.getRgbFromColorString(color)
391
- const yiq = (r * 299 + g * 587 + b * 114) / 1000
392
- return yiq >= 128 ? bright : dark
393
- }
394
-
395
- /**
396
- * Parses a color string and returns RGB values
397
- * @param color The color string
398
- * @returns The parsed R,G,B, A values
399
- */
400
- public getRgbFromColorString(color: string): RgbColor {
401
- if (color.startsWith('var(--')) {
402
- return this.getRgbFromColorString(getCssVariable(color))
403
- }
404
-
405
- if (color.startsWith('#')) {
406
- if (color.length === 7) {
407
- const r = parseInt(color.substr(1, 2), 16)
408
- const g = parseInt(color.substr(3, 2), 16)
409
- const b = parseInt(color.substr(5, 2), 16)
410
- return new RgbColor(r, g, b)
411
- }
412
- if (color.length === 4) {
413
- const r = parseInt(color.substr(1, 1) + color.substr(1, 1), 16)
414
- const g = parseInt(color.substr(2, 1) + color.substr(2, 1), 16)
415
- const b = parseInt(color.substr(3, 1) + color.substr(3, 1), 16)
416
- return new RgbColor(r, g, b)
417
- }
418
- }
419
- if (color.startsWith('rgba(')) {
420
- const result = new RegExp(
421
- /^rgba[(](?<red>[\d]+)[,][\s]?(?<green>[\d]+)[,][\s]?(?<blue>[\d]+)[,][\s]?(?<alpha>[\d|.]+)[)]/gm,
422
- ).exec(color)
423
- if (result && result.groups) {
424
- return new RgbColor(
425
- parseInt(result.groups.red, 10),
426
- parseInt(result.groups.green, 10),
427
- parseInt(result.groups.blue, 10),
428
- parseInt(result.groups.alpha, 10),
429
- )
430
- }
431
- }
432
- throw Error(`Color format '${color}' is not supported.'`)
433
- }
434
-
435
371
  public readonly theme = cssVariableTheme
436
372
 
437
373
  private _assignedTheme: DeepPartial<Theme> = cssVariableTheme
@@ -0,0 +1,57 @@
1
+ import type { Palette } from '../services/theme-provider-service.js'
2
+
3
+ /**
4
+ * Color palette inspired by The Matrix.
5
+ * Digital green primary, white secondary,
6
+ * with monochrome-green tones for semantic colors.
7
+ */
8
+ export const architectPalette: Palette = {
9
+ primary: {
10
+ light: '#50ff70',
11
+ lightContrast: '#000000',
12
+ main: '#00ff41',
13
+ mainContrast: '#000000',
14
+ dark: '#00c430',
15
+ darkContrast: '#000000',
16
+ },
17
+ secondary: {
18
+ light: '#e0e0e0',
19
+ lightContrast: '#000000',
20
+ main: '#c0c0c0',
21
+ mainContrast: '#000000',
22
+ dark: '#909090',
23
+ darkContrast: '#000000',
24
+ },
25
+ error: {
26
+ light: '#ff5050',
27
+ lightContrast: '#000000',
28
+ main: '#e02020',
29
+ mainContrast: '#000000',
30
+ dark: '#a81818',
31
+ darkContrast: '#ffffff',
32
+ },
33
+ warning: {
34
+ light: '#e0c040',
35
+ lightContrast: '#000000',
36
+ main: '#c4a020',
37
+ mainContrast: '#000000',
38
+ dark: '#948018',
39
+ darkContrast: '#ffffff',
40
+ },
41
+ success: {
42
+ light: '#40e060',
43
+ lightContrast: '#000000',
44
+ main: '#20c040',
45
+ mainContrast: '#000000',
46
+ dark: '#109028',
47
+ darkContrast: '#ffffff',
48
+ },
49
+ info: {
50
+ light: '#40c0e0',
51
+ lightContrast: '#000000',
52
+ main: '#20a0c0',
53
+ mainContrast: '#000000',
54
+ dark: '#108090',
55
+ darkContrast: '#ffffff',
56
+ },
57
+ }