@furystack/shades-common-components 12.7.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 (584) hide show
  1. package/CHANGELOG.md +152 -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.map +1 -1
  177. package/esm/components/markdown/markdown-editor.js +1 -0
  178. package/esm/components/markdown/markdown-editor.js.map +1 -1
  179. package/esm/components/markdown/markdown-editor.spec.js +1 -1
  180. package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
  181. package/esm/components/markdown/markdown-input.d.ts.map +1 -1
  182. package/esm/components/markdown/markdown-input.js +1 -0
  183. package/esm/components/markdown/markdown-input.js.map +1 -1
  184. package/esm/components/modal.d.ts.map +1 -1
  185. package/esm/components/modal.js +2 -0
  186. package/esm/components/modal.js.map +1 -1
  187. package/esm/components/noty-list.d.ts.map +1 -1
  188. package/esm/components/noty-list.js +4 -2
  189. package/esm/components/noty-list.js.map +1 -1
  190. package/esm/components/noty-list.spec.js +1 -1
  191. package/esm/components/noty-list.spec.js.map +1 -1
  192. package/esm/components/page-container/index.d.ts +1 -1
  193. package/esm/components/page-container/index.d.ts.map +1 -1
  194. package/esm/components/page-container/index.js +2 -1
  195. package/esm/components/page-container/index.js.map +1 -1
  196. package/esm/components/page-container/page-header.d.ts.map +1 -1
  197. package/esm/components/page-container/page-header.js +10 -12
  198. package/esm/components/page-container/page-header.js.map +1 -1
  199. package/esm/components/page-container/page-header.spec.js +6 -4
  200. package/esm/components/page-container/page-header.spec.js.map +1 -1
  201. package/esm/components/page-layout/index.d.ts.map +1 -1
  202. package/esm/components/page-layout/index.js +2 -0
  203. package/esm/components/page-layout/index.js.map +1 -1
  204. package/esm/components/paper.d.ts.map +1 -1
  205. package/esm/components/paper.js +6 -1
  206. package/esm/components/paper.js.map +1 -1
  207. package/esm/components/rating.d.ts.map +1 -1
  208. package/esm/components/rating.js +1 -0
  209. package/esm/components/rating.js.map +1 -1
  210. package/esm/components/result.d.ts.map +1 -1
  211. package/esm/components/result.js +3 -14
  212. package/esm/components/result.js.map +1 -1
  213. package/esm/components/result.spec.js +3 -3
  214. package/esm/components/result.spec.js.map +1 -1
  215. package/esm/components/suggest/index.d.ts.map +1 -1
  216. package/esm/components/suggest/index.js +2 -0
  217. package/esm/components/suggest/index.js.map +1 -1
  218. package/esm/components/suggest/suggest-input.d.ts.map +1 -1
  219. package/esm/components/suggest/suggest-input.js +1 -0
  220. package/esm/components/suggest/suggest-input.js.map +1 -1
  221. package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
  222. package/esm/components/suggest/suggestion-list.js +3 -1
  223. package/esm/components/suggest/suggestion-list.js.map +1 -1
  224. package/esm/components/tabs.d.ts.map +1 -1
  225. package/esm/components/tabs.js +1 -0
  226. package/esm/components/tabs.js.map +1 -1
  227. package/esm/components/timeline.d.ts.map +1 -1
  228. package/esm/components/timeline.js +58 -51
  229. package/esm/components/timeline.js.map +1 -1
  230. package/esm/components/timeline.spec.js +0 -66
  231. package/esm/components/timeline.spec.js.map +1 -1
  232. package/esm/components/tooltip.d.ts.map +1 -1
  233. package/esm/components/tooltip.js +1 -0
  234. package/esm/components/tooltip.js.map +1 -1
  235. package/esm/components/tree/tree-item.d.ts.map +1 -1
  236. package/esm/components/tree/tree-item.js +1 -0
  237. package/esm/components/tree/tree-item.js.map +1 -1
  238. package/esm/components/tree/tree.d.ts.map +1 -1
  239. package/esm/components/tree/tree.js +2 -0
  240. package/esm/components/tree/tree.js.map +1 -1
  241. package/esm/components/typography.d.ts +2 -19
  242. package/esm/components/typography.d.ts.map +1 -1
  243. package/esm/components/typography.js +104 -94
  244. package/esm/components/typography.js.map +1 -1
  245. package/esm/components/typography.spec.js +16 -16
  246. package/esm/components/typography.spec.js.map +1 -1
  247. package/esm/components/wizard/index.d.ts.map +1 -1
  248. package/esm/components/wizard/index.js +1 -0
  249. package/esm/components/wizard/index.js.map +1 -1
  250. package/esm/services/css-variable-theme.d.ts +4 -0
  251. package/esm/services/css-variable-theme.d.ts.map +1 -1
  252. package/esm/services/css-variable-theme.js +29 -6
  253. package/esm/services/css-variable-theme.js.map +1 -1
  254. package/esm/services/css-variable-theme.spec.js +93 -1
  255. package/esm/services/css-variable-theme.spec.js.map +1 -1
  256. package/esm/services/get-rgb-from-color-string.d.ts +10 -0
  257. package/esm/services/get-rgb-from-color-string.d.ts.map +1 -0
  258. package/esm/services/get-rgb-from-color-string.js +86 -0
  259. package/esm/services/get-rgb-from-color-string.js.map +1 -0
  260. package/esm/services/get-rgb-from-color-string.spec.d.ts +2 -0
  261. package/esm/services/get-rgb-from-color-string.spec.d.ts.map +1 -0
  262. package/esm/services/get-rgb-from-color-string.spec.js +107 -0
  263. package/esm/services/get-rgb-from-color-string.spec.js.map +1 -0
  264. package/esm/services/get-text-color.d.ts +10 -0
  265. package/esm/services/get-text-color.d.ts.map +1 -0
  266. package/esm/services/get-text-color.js +15 -0
  267. package/esm/services/get-text-color.js.map +1 -0
  268. package/esm/services/get-text-color.spec.d.ts +2 -0
  269. package/esm/services/get-text-color.spec.d.ts.map +1 -0
  270. package/esm/services/get-text-color.spec.js +21 -0
  271. package/esm/services/get-text-color.spec.js.map +1 -0
  272. package/esm/services/index.d.ts +7 -4
  273. package/esm/services/index.d.ts.map +1 -1
  274. package/esm/services/index.js +7 -4
  275. package/esm/services/index.js.map +1 -1
  276. package/esm/services/rgb-color.d.ts +13 -0
  277. package/esm/services/rgb-color.d.ts.map +1 -0
  278. package/esm/services/rgb-color.js +23 -0
  279. package/esm/services/rgb-color.js.map +1 -0
  280. package/esm/services/rgb-color.spec.d.ts +2 -0
  281. package/esm/services/rgb-color.spec.d.ts.map +1 -0
  282. package/esm/services/rgb-color.spec.js +69 -0
  283. package/esm/services/rgb-color.spec.js.map +1 -0
  284. package/esm/services/theme-provider-service.d.ts +9 -23
  285. package/esm/services/theme-provider-service.d.ts.map +1 -1
  286. package/esm/services/theme-provider-service.js +1 -63
  287. package/esm/services/theme-provider-service.js.map +1 -1
  288. package/esm/services/theme-provider-service.spec.js +12 -159
  289. package/esm/services/theme-provider-service.spec.js.map +1 -1
  290. package/esm/themes/architect-palette.d.ts +8 -0
  291. package/esm/themes/architect-palette.d.ts.map +1 -0
  292. package/esm/themes/architect-palette.js +56 -0
  293. package/esm/themes/architect-palette.js.map +1 -0
  294. package/esm/themes/architect-theme.d.ts +120 -0
  295. package/esm/themes/architect-theme.d.ts.map +1 -0
  296. package/esm/themes/architect-theme.js +122 -0
  297. package/esm/themes/architect-theme.js.map +1 -0
  298. package/esm/themes/auditore-palette.d.ts +8 -0
  299. package/esm/themes/auditore-palette.d.ts.map +1 -0
  300. package/esm/themes/auditore-palette.js +56 -0
  301. package/esm/themes/auditore-palette.js.map +1 -0
  302. package/esm/themes/auditore-theme.d.ts +120 -0
  303. package/esm/themes/auditore-theme.d.ts.map +1 -0
  304. package/esm/themes/auditore-theme.js +122 -0
  305. package/esm/themes/auditore-theme.js.map +1 -0
  306. package/esm/themes/black-mesa-palette.d.ts +8 -0
  307. package/esm/themes/black-mesa-palette.d.ts.map +1 -0
  308. package/esm/themes/black-mesa-palette.js +56 -0
  309. package/esm/themes/black-mesa-palette.js.map +1 -0
  310. package/esm/themes/black-mesa-theme.d.ts +120 -0
  311. package/esm/themes/black-mesa-theme.d.ts.map +1 -0
  312. package/esm/themes/black-mesa-theme.js +122 -0
  313. package/esm/themes/black-mesa-theme.js.map +1 -0
  314. package/esm/themes/chieftain-palette.d.ts +8 -0
  315. package/esm/themes/chieftain-palette.d.ts.map +1 -0
  316. package/esm/themes/chieftain-palette.js +56 -0
  317. package/esm/themes/chieftain-palette.js.map +1 -0
  318. package/esm/themes/chieftain-theme.d.ts +121 -0
  319. package/esm/themes/chieftain-theme.d.ts.map +1 -0
  320. package/esm/themes/chieftain-theme.js +123 -0
  321. package/esm/themes/chieftain-theme.js.map +1 -0
  322. package/esm/themes/default-dark-palette.d.ts +8 -0
  323. package/esm/themes/default-dark-palette.d.ts.map +1 -0
  324. package/esm/{services → themes}/default-dark-palette.js +1 -1
  325. package/esm/themes/default-dark-palette.js.map +1 -0
  326. package/esm/{services → themes}/default-dark-theme.d.ts +7 -1
  327. package/esm/themes/default-dark-theme.d.ts.map +1 -0
  328. package/esm/{services → themes}/default-dark-theme.js +6 -0
  329. package/esm/themes/default-dark-theme.js.map +1 -0
  330. package/esm/{services → themes}/default-light-theme.d.ts +7 -1
  331. package/esm/themes/default-light-theme.d.ts.map +1 -0
  332. package/esm/{services → themes}/default-light-theme.js +6 -0
  333. package/esm/themes/default-light-theme.js.map +1 -0
  334. package/esm/{services → themes}/default-palette.d.ts +1 -1
  335. package/esm/themes/default-palette.d.ts.map +1 -0
  336. package/esm/themes/default-palette.js.map +1 -0
  337. package/esm/themes/dragonborn-palette.d.ts +8 -0
  338. package/esm/themes/dragonborn-palette.d.ts.map +1 -0
  339. package/esm/themes/dragonborn-palette.js +56 -0
  340. package/esm/themes/dragonborn-palette.js.map +1 -0
  341. package/esm/themes/dragonborn-theme.d.ts +120 -0
  342. package/esm/themes/dragonborn-theme.d.ts.map +1 -0
  343. package/esm/themes/dragonborn-theme.js +122 -0
  344. package/esm/themes/dragonborn-theme.js.map +1 -0
  345. package/esm/themes/hawkins-palette.d.ts +8 -0
  346. package/esm/themes/hawkins-palette.d.ts.map +1 -0
  347. package/esm/themes/hawkins-palette.js +56 -0
  348. package/esm/themes/hawkins-palette.js.map +1 -0
  349. package/esm/themes/hawkins-theme.d.ts +120 -0
  350. package/esm/themes/hawkins-theme.d.ts.map +1 -0
  351. package/esm/themes/hawkins-theme.js +122 -0
  352. package/esm/themes/hawkins-theme.js.map +1 -0
  353. package/esm/themes/jedi-palette.d.ts +8 -0
  354. package/esm/themes/jedi-palette.d.ts.map +1 -0
  355. package/esm/themes/jedi-palette.js +56 -0
  356. package/esm/themes/jedi-palette.js.map +1 -0
  357. package/esm/themes/jedi-theme.d.ts +120 -0
  358. package/esm/themes/jedi-theme.d.ts.map +1 -0
  359. package/esm/themes/jedi-theme.js +122 -0
  360. package/esm/themes/jedi-theme.js.map +1 -0
  361. package/esm/themes/neon-runner-palette.d.ts +8 -0
  362. package/esm/themes/neon-runner-palette.d.ts.map +1 -0
  363. package/esm/themes/neon-runner-palette.js +56 -0
  364. package/esm/themes/neon-runner-palette.js.map +1 -0
  365. package/esm/themes/neon-runner-theme.d.ts +119 -0
  366. package/esm/themes/neon-runner-theme.d.ts.map +1 -0
  367. package/esm/themes/neon-runner-theme.js +120 -0
  368. package/esm/themes/neon-runner-theme.js.map +1 -0
  369. package/esm/themes/paladin-palette.d.ts +8 -0
  370. package/esm/themes/paladin-palette.d.ts.map +1 -0
  371. package/esm/themes/paladin-palette.js +56 -0
  372. package/esm/themes/paladin-palette.js.map +1 -0
  373. package/esm/themes/paladin-theme.d.ts +121 -0
  374. package/esm/themes/paladin-theme.d.ts.map +1 -0
  375. package/esm/themes/paladin-theme.js +123 -0
  376. package/esm/themes/paladin-theme.js.map +1 -0
  377. package/esm/themes/plumber-palette.d.ts +8 -0
  378. package/esm/themes/plumber-palette.d.ts.map +1 -0
  379. package/esm/themes/plumber-palette.js +56 -0
  380. package/esm/themes/plumber-palette.js.map +1 -0
  381. package/esm/themes/plumber-theme.d.ts +120 -0
  382. package/esm/themes/plumber-theme.d.ts.map +1 -0
  383. package/esm/themes/plumber-theme.js +121 -0
  384. package/esm/themes/plumber-theme.js.map +1 -0
  385. package/esm/themes/replicant-palette.d.ts +8 -0
  386. package/esm/themes/replicant-palette.d.ts.map +1 -0
  387. package/esm/themes/replicant-palette.js +56 -0
  388. package/esm/themes/replicant-palette.js.map +1 -0
  389. package/esm/themes/replicant-theme.d.ts +120 -0
  390. package/esm/themes/replicant-theme.d.ts.map +1 -0
  391. package/esm/themes/replicant-theme.js +122 -0
  392. package/esm/themes/replicant-theme.js.map +1 -0
  393. package/esm/themes/sandworm-palette.d.ts +8 -0
  394. package/esm/themes/sandworm-palette.d.ts.map +1 -0
  395. package/esm/themes/sandworm-palette.js +56 -0
  396. package/esm/themes/sandworm-palette.js.map +1 -0
  397. package/esm/themes/sandworm-theme.d.ts +120 -0
  398. package/esm/themes/sandworm-theme.d.ts.map +1 -0
  399. package/esm/themes/sandworm-theme.js +122 -0
  400. package/esm/themes/sandworm-theme.js.map +1 -0
  401. package/esm/themes/shadow-broker-palette.d.ts +8 -0
  402. package/esm/themes/shadow-broker-palette.d.ts.map +1 -0
  403. package/esm/themes/shadow-broker-palette.js +56 -0
  404. package/esm/{services/default-dark-palette.js.map → themes/shadow-broker-palette.js.map} +1 -1
  405. package/esm/themes/shadow-broker-theme.d.ts +120 -0
  406. package/esm/themes/shadow-broker-theme.d.ts.map +1 -0
  407. package/esm/themes/shadow-broker-theme.js +121 -0
  408. package/esm/themes/shadow-broker-theme.js.map +1 -0
  409. package/esm/themes/sith-palette.d.ts +8 -0
  410. package/esm/themes/sith-palette.d.ts.map +1 -0
  411. package/esm/themes/sith-palette.js +56 -0
  412. package/esm/themes/sith-palette.js.map +1 -0
  413. package/esm/themes/sith-theme.d.ts +120 -0
  414. package/esm/themes/sith-theme.d.ts.map +1 -0
  415. package/esm/themes/sith-theme.js +122 -0
  416. package/esm/themes/sith-theme.js.map +1 -0
  417. package/esm/themes/vault-dweller-palette.d.ts +8 -0
  418. package/esm/themes/vault-dweller-palette.d.ts.map +1 -0
  419. package/esm/themes/vault-dweller-palette.js +56 -0
  420. package/esm/themes/vault-dweller-palette.js.map +1 -0
  421. package/esm/themes/vault-dweller-theme.d.ts +120 -0
  422. package/esm/themes/vault-dweller-theme.d.ts.map +1 -0
  423. package/esm/themes/vault-dweller-theme.js +122 -0
  424. package/esm/themes/vault-dweller-theme.js.map +1 -0
  425. package/esm/themes/wild-hunt-palette.d.ts +8 -0
  426. package/esm/themes/wild-hunt-palette.d.ts.map +1 -0
  427. package/esm/themes/wild-hunt-palette.js +56 -0
  428. package/esm/themes/wild-hunt-palette.js.map +1 -0
  429. package/esm/themes/wild-hunt-theme.d.ts +120 -0
  430. package/esm/themes/wild-hunt-theme.d.ts.map +1 -0
  431. package/esm/themes/wild-hunt-theme.js +122 -0
  432. package/esm/themes/wild-hunt-theme.js.map +1 -0
  433. package/esm/themes/xenomorph-palette.d.ts +8 -0
  434. package/esm/themes/xenomorph-palette.d.ts.map +1 -0
  435. package/esm/themes/xenomorph-palette.js +56 -0
  436. package/esm/themes/xenomorph-palette.js.map +1 -0
  437. package/esm/themes/xenomorph-theme.d.ts +120 -0
  438. package/esm/themes/xenomorph-theme.d.ts.map +1 -0
  439. package/esm/themes/xenomorph-theme.js +121 -0
  440. package/esm/themes/xenomorph-theme.js.map +1 -0
  441. package/package.json +7 -3
  442. package/src/components/accordion/accordion-item.tsx +16 -23
  443. package/src/components/accordion/accordion.tsx +1 -0
  444. package/src/components/app-bar-link.tsx +1 -0
  445. package/src/components/app-bar.spec.tsx +3 -3
  446. package/src/components/app-bar.tsx +2 -0
  447. package/src/components/avatar.tsx +1 -0
  448. package/src/components/badge.tsx +2 -1
  449. package/src/components/breadcrumb.tsx +1 -0
  450. package/src/components/button-group.spec.tsx +7 -6
  451. package/src/components/button-group.tsx +72 -70
  452. package/src/components/button.tsx +1 -0
  453. package/src/components/cache-view.spec.tsx +4 -1
  454. package/src/components/cache-view.tsx +4 -0
  455. package/src/components/card.tsx +3 -1
  456. package/src/components/circular-progress.tsx +1 -0
  457. package/src/components/command-palette/command-palette-input.tsx +1 -0
  458. package/src/components/command-palette/command-palette-suggestion-list.tsx +3 -1
  459. package/src/components/command-palette/index.tsx +2 -0
  460. package/src/components/context-menu/context-menu-item.tsx +1 -0
  461. package/src/components/context-menu/context-menu.tsx +1 -0
  462. package/src/components/data-grid/body.tsx +2 -0
  463. package/src/components/data-grid/data-grid-row.tsx +1 -0
  464. package/src/components/data-grid/data-grid.tsx +1 -0
  465. package/src/components/data-grid/filters/boolean-filter.tsx +2 -0
  466. package/src/components/data-grid/filters/date-filter.tsx +2 -0
  467. package/src/components/data-grid/filters/enum-filter.tsx +2 -0
  468. package/src/components/data-grid/filters/filter-dropdown.tsx +1 -0
  469. package/src/components/data-grid/filters/number-filter.tsx +2 -0
  470. package/src/components/data-grid/filters/string-filter.tsx +2 -0
  471. package/src/components/data-grid/footer.tsx +1 -0
  472. package/src/components/data-grid/header.tsx +2 -0
  473. package/src/components/data-grid/selection-cell.tsx +1 -0
  474. package/src/components/dialog.tsx +15 -15
  475. package/src/components/divider.tsx +1 -0
  476. package/src/components/drawer/drawer-toggle-button.tsx +2 -1
  477. package/src/components/drawer/index.tsx +1 -0
  478. package/src/components/dropdown.tsx +1 -0
  479. package/src/components/fab.tsx +1 -0
  480. package/src/components/form.tsx +2 -0
  481. package/src/components/grid.tsx +3 -1
  482. package/src/components/icons/icon.tsx +2 -0
  483. package/src/components/image.tsx +1 -0
  484. package/src/components/inputs/autocomplete.tsx +2 -0
  485. package/src/components/inputs/checkbox.tsx +2 -1
  486. package/src/components/inputs/input-number.tsx +1 -0
  487. package/src/components/inputs/input.tsx +1 -0
  488. package/src/components/inputs/radio-group.tsx +1 -0
  489. package/src/components/inputs/radio.tsx +1 -0
  490. package/src/components/inputs/select.spec.tsx +3 -6
  491. package/src/components/inputs/select.tsx +13 -15
  492. package/src/components/inputs/slider.tsx +27 -36
  493. package/src/components/inputs/switch.tsx +2 -1
  494. package/src/components/inputs/text-area.tsx +1 -0
  495. package/src/components/linear-progress.tsx +1 -0
  496. package/src/components/list/list-item.tsx +1 -0
  497. package/src/components/list/list.tsx +2 -0
  498. package/src/components/loader.tsx +1 -0
  499. package/src/components/markdown/markdown-display.spec.tsx +2 -2
  500. package/src/components/markdown/markdown-display.tsx +1 -1
  501. package/src/components/markdown/markdown-editor.spec.tsx +1 -1
  502. package/src/components/markdown/markdown-editor.tsx +1 -0
  503. package/src/components/markdown/markdown-input.tsx +1 -0
  504. package/src/components/modal.tsx +2 -0
  505. package/src/components/noty-list.spec.tsx +1 -1
  506. package/src/components/noty-list.tsx +4 -2
  507. package/src/components/page-container/index.tsx +2 -1
  508. package/src/components/page-container/page-header.spec.tsx +6 -4
  509. package/src/components/page-container/page-header.tsx +23 -15
  510. package/src/components/page-layout/index.tsx +2 -0
  511. package/src/components/paper.tsx +6 -1
  512. package/src/components/rating.tsx +1 -0
  513. package/src/components/result.spec.tsx +3 -3
  514. package/src/components/result.tsx +9 -15
  515. package/src/components/suggest/index.tsx +2 -0
  516. package/src/components/suggest/suggest-input.tsx +1 -0
  517. package/src/components/suggest/suggestion-list.tsx +3 -1
  518. package/src/components/tabs.tsx +1 -0
  519. package/src/components/timeline.spec.tsx +0 -95
  520. package/src/components/timeline.tsx +63 -54
  521. package/src/components/tooltip.tsx +1 -0
  522. package/src/components/tree/tree-item.tsx +1 -0
  523. package/src/components/tree/tree.tsx +2 -0
  524. package/src/components/typography.spec.tsx +16 -16
  525. package/src/components/typography.tsx +121 -110
  526. package/src/components/wizard/index.tsx +1 -0
  527. package/src/services/css-variable-theme.spec.ts +108 -0
  528. package/src/services/css-variable-theme.ts +30 -7
  529. package/src/services/get-rgb-from-color-string.spec.ts +122 -0
  530. package/src/services/get-rgb-from-color-string.ts +96 -0
  531. package/src/services/get-text-color.spec.ts +25 -0
  532. package/src/services/get-text-color.ts +15 -0
  533. package/src/services/index.ts +7 -4
  534. package/src/services/rgb-color.spec.ts +79 -0
  535. package/src/services/rgb-color.ts +20 -0
  536. package/src/services/theme-provider-service.spec.ts +12 -185
  537. package/src/services/theme-provider-service.ts +8 -72
  538. package/src/themes/architect-palette.ts +57 -0
  539. package/src/themes/architect-theme.ts +124 -0
  540. package/src/themes/auditore-palette.ts +57 -0
  541. package/src/themes/auditore-theme.ts +124 -0
  542. package/src/themes/black-mesa-palette.ts +57 -0
  543. package/src/themes/black-mesa-theme.ts +124 -0
  544. package/src/themes/chieftain-palette.ts +57 -0
  545. package/src/themes/chieftain-theme.ts +125 -0
  546. package/src/{services → themes}/default-dark-palette.ts +2 -2
  547. package/src/{services → themes}/default-dark-theme.ts +7 -1
  548. package/src/{services → themes}/default-light-theme.ts +7 -1
  549. package/src/{services → themes}/default-palette.ts +1 -1
  550. package/src/themes/dragonborn-palette.ts +57 -0
  551. package/src/themes/dragonborn-theme.ts +124 -0
  552. package/src/themes/hawkins-palette.ts +57 -0
  553. package/src/themes/hawkins-theme.ts +124 -0
  554. package/src/themes/jedi-palette.ts +57 -0
  555. package/src/themes/jedi-theme.ts +124 -0
  556. package/src/themes/neon-runner-palette.ts +57 -0
  557. package/src/themes/neon-runner-theme.ts +121 -0
  558. package/src/themes/paladin-palette.ts +57 -0
  559. package/src/themes/paladin-theme.ts +125 -0
  560. package/src/themes/plumber-palette.ts +57 -0
  561. package/src/themes/plumber-theme.ts +122 -0
  562. package/src/themes/replicant-palette.ts +57 -0
  563. package/src/themes/replicant-theme.ts +124 -0
  564. package/src/themes/sandworm-palette.ts +57 -0
  565. package/src/themes/sandworm-theme.ts +124 -0
  566. package/src/themes/shadow-broker-palette.ts +57 -0
  567. package/src/themes/shadow-broker-theme.ts +122 -0
  568. package/src/themes/sith-palette.ts +57 -0
  569. package/src/themes/sith-theme.ts +124 -0
  570. package/src/themes/vault-dweller-palette.ts +57 -0
  571. package/src/themes/vault-dweller-theme.ts +124 -0
  572. package/src/themes/wild-hunt-palette.ts +57 -0
  573. package/src/themes/wild-hunt-theme.ts +124 -0
  574. package/src/themes/xenomorph-palette.ts +57 -0
  575. package/src/themes/xenomorph-theme.ts +122 -0
  576. package/esm/services/default-dark-palette.d.ts +0 -8
  577. package/esm/services/default-dark-palette.d.ts.map +0 -1
  578. package/esm/services/default-dark-theme.d.ts.map +0 -1
  579. package/esm/services/default-dark-theme.js.map +0 -1
  580. package/esm/services/default-light-theme.d.ts.map +0 -1
  581. package/esm/services/default-light-theme.js.map +0 -1
  582. package/esm/services/default-palette.d.ts.map +0 -1
  583. package/esm/services/default-palette.js.map +0 -1
  584. /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
+ }