@furystack/shades-common-components 10.0.35 → 12.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 (862) hide show
  1. package/CHANGELOG.md +496 -0
  2. package/esm/components/accordion/accordion-item.d.ts +31 -0
  3. package/esm/components/accordion/accordion-item.d.ts.map +1 -0
  4. package/esm/components/accordion/accordion-item.js +147 -0
  5. package/esm/components/accordion/accordion-item.js.map +1 -0
  6. package/esm/components/accordion/accordion.d.ts +27 -0
  7. package/esm/components/accordion/accordion.d.ts.map +1 -0
  8. package/esm/components/accordion/accordion.js +39 -0
  9. package/esm/components/accordion/accordion.js.map +1 -0
  10. package/esm/components/accordion/accordion.spec.d.ts +2 -0
  11. package/esm/components/accordion/accordion.spec.d.ts.map +1 -0
  12. package/esm/components/accordion/accordion.spec.js +284 -0
  13. package/esm/components/accordion/accordion.spec.js.map +1 -0
  14. package/esm/components/accordion/index.d.ts +3 -0
  15. package/esm/components/accordion/index.d.ts.map +1 -0
  16. package/esm/components/accordion/index.js +3 -0
  17. package/esm/components/accordion/index.js.map +1 -0
  18. package/esm/components/alert.d.ts +21 -0
  19. package/esm/components/alert.d.ts.map +1 -0
  20. package/esm/components/alert.js +131 -0
  21. package/esm/components/alert.js.map +1 -0
  22. package/esm/components/alert.spec.d.ts +2 -0
  23. package/esm/components/alert.spec.d.ts.map +1 -0
  24. package/esm/components/alert.spec.js +177 -0
  25. package/esm/components/alert.spec.js.map +1 -0
  26. package/esm/components/animations.spec.d.ts +2 -0
  27. package/esm/components/animations.spec.d.ts.map +1 -0
  28. package/esm/components/animations.spec.js +201 -0
  29. package/esm/components/animations.spec.js.map +1 -0
  30. package/esm/components/app-bar-link.d.ts +22 -2
  31. package/esm/components/app-bar-link.d.ts.map +1 -1
  32. package/esm/components/app-bar-link.js +36 -22
  33. package/esm/components/app-bar-link.js.map +1 -1
  34. package/esm/components/app-bar-link.spec.d.ts +2 -0
  35. package/esm/components/app-bar-link.spec.d.ts.map +1 -0
  36. package/esm/components/app-bar-link.spec.js +255 -0
  37. package/esm/components/app-bar-link.spec.js.map +1 -0
  38. package/esm/components/app-bar.d.ts +2 -0
  39. package/esm/components/app-bar.d.ts.map +1 -1
  40. package/esm/components/app-bar.js +28 -23
  41. package/esm/components/app-bar.js.map +1 -1
  42. package/esm/components/app-bar.spec.d.ts +2 -0
  43. package/esm/components/app-bar.spec.d.ts.map +1 -0
  44. package/esm/components/app-bar.spec.js +132 -0
  45. package/esm/components/app-bar.spec.js.map +1 -0
  46. package/esm/components/avatar.d.ts +2 -0
  47. package/esm/components/avatar.d.ts.map +1 -1
  48. package/esm/components/avatar.js +50 -51
  49. package/esm/components/avatar.js.map +1 -1
  50. package/esm/components/avatar.spec.d.ts +2 -0
  51. package/esm/components/avatar.spec.d.ts.map +1 -0
  52. package/esm/components/avatar.spec.js +114 -0
  53. package/esm/components/avatar.spec.js.map +1 -0
  54. package/esm/components/badge.d.ts +35 -0
  55. package/esm/components/badge.d.ts.map +1 -0
  56. package/esm/components/badge.js +68 -0
  57. package/esm/components/badge.js.map +1 -0
  58. package/esm/components/badge.spec.d.ts +2 -0
  59. package/esm/components/badge.spec.d.ts.map +1 -0
  60. package/esm/components/badge.spec.js +157 -0
  61. package/esm/components/badge.spec.js.map +1 -0
  62. package/esm/components/breadcrumb.d.ts +103 -0
  63. package/esm/components/breadcrumb.d.ts.map +1 -0
  64. package/esm/components/breadcrumb.js +121 -0
  65. package/esm/components/breadcrumb.js.map +1 -0
  66. package/esm/components/breadcrumb.spec.d.ts +2 -0
  67. package/esm/components/breadcrumb.spec.d.ts.map +1 -0
  68. package/esm/components/breadcrumb.spec.js +251 -0
  69. package/esm/components/breadcrumb.spec.js.map +1 -0
  70. package/esm/components/button-group.d.ts +85 -0
  71. package/esm/components/button-group.d.ts.map +1 -0
  72. package/esm/components/button-group.js +290 -0
  73. package/esm/components/button-group.js.map +1 -0
  74. package/esm/components/button-group.spec.d.ts +2 -0
  75. package/esm/components/button-group.spec.d.ts.map +1 -0
  76. package/esm/components/button-group.spec.js +502 -0
  77. package/esm/components/button-group.spec.js.map +1 -0
  78. package/esm/components/button.d.ts +44 -2
  79. package/esm/components/button.d.ts.map +1 -1
  80. package/esm/components/button.js +151 -153
  81. package/esm/components/button.js.map +1 -1
  82. package/esm/components/button.spec.d.ts +2 -0
  83. package/esm/components/button.spec.d.ts.map +1 -0
  84. package/esm/components/button.spec.js +310 -0
  85. package/esm/components/button.spec.js.map +1 -0
  86. package/esm/components/card.d.ts +117 -0
  87. package/esm/components/card.d.ts.map +1 -0
  88. package/esm/components/card.js +181 -0
  89. package/esm/components/card.js.map +1 -0
  90. package/esm/components/card.spec.d.ts +2 -0
  91. package/esm/components/card.spec.d.ts.map +1 -0
  92. package/esm/components/card.spec.js +278 -0
  93. package/esm/components/card.spec.js.map +1 -0
  94. package/esm/components/carousel.d.ts +50 -0
  95. package/esm/components/carousel.d.ts.map +1 -0
  96. package/esm/components/carousel.js +263 -0
  97. package/esm/components/carousel.js.map +1 -0
  98. package/esm/components/carousel.spec.d.ts +2 -0
  99. package/esm/components/carousel.spec.d.ts.map +1 -0
  100. package/esm/components/carousel.spec.js +677 -0
  101. package/esm/components/carousel.spec.js.map +1 -0
  102. package/esm/components/chip.d.ts +23 -0
  103. package/esm/components/chip.d.ts.map +1 -0
  104. package/esm/components/chip.js +139 -0
  105. package/esm/components/chip.js.map +1 -0
  106. package/esm/components/chip.spec.d.ts +2 -0
  107. package/esm/components/chip.spec.d.ts.map +1 -0
  108. package/esm/components/chip.spec.js +142 -0
  109. package/esm/components/chip.spec.js.map +1 -0
  110. package/esm/components/circular-progress.d.ts +37 -0
  111. package/esm/components/circular-progress.d.ts.map +1 -0
  112. package/esm/components/circular-progress.js +84 -0
  113. package/esm/components/circular-progress.js.map +1 -0
  114. package/esm/components/circular-progress.spec.d.ts +2 -0
  115. package/esm/components/circular-progress.spec.d.ts.map +1 -0
  116. package/esm/components/circular-progress.spec.js +228 -0
  117. package/esm/components/circular-progress.spec.js.map +1 -0
  118. package/esm/components/command-palette/command-palette-input.d.ts +3 -0
  119. package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
  120. package/esm/components/command-palette/command-palette-input.js +33 -23
  121. package/esm/components/command-palette/command-palette-input.js.map +1 -1
  122. package/esm/components/command-palette/command-palette-input.spec.d.ts +2 -0
  123. package/esm/components/command-palette/command-palette-input.spec.d.ts.map +1 -0
  124. package/esm/components/command-palette/command-palette-input.spec.js +244 -0
  125. package/esm/components/command-palette/command-palette-input.spec.js.map +1 -0
  126. package/esm/components/command-palette/command-palette-manager.spec.d.ts +2 -0
  127. package/esm/components/command-palette/command-palette-manager.spec.d.ts.map +1 -0
  128. package/esm/components/command-palette/command-palette-manager.spec.js +378 -0
  129. package/esm/components/command-palette/command-palette-manager.spec.js.map +1 -0
  130. package/esm/components/command-palette/command-palette-suggestion-list.d.ts +2 -0
  131. package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
  132. package/esm/components/command-palette/command-palette-suggestion-list.js +53 -57
  133. package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  134. package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts +2 -0
  135. package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts.map +1 -0
  136. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +394 -0
  137. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -0
  138. package/esm/components/command-palette/index.d.ts +2 -0
  139. package/esm/components/command-palette/index.d.ts.map +1 -1
  140. package/esm/components/command-palette/index.js +41 -120
  141. package/esm/components/command-palette/index.js.map +1 -1
  142. package/esm/components/command-palette/index.spec.d.ts +2 -0
  143. package/esm/components/command-palette/index.spec.d.ts.map +1 -0
  144. package/esm/components/command-palette/index.spec.js +509 -0
  145. package/esm/components/command-palette/index.spec.js.map +1 -0
  146. package/esm/components/context-menu/context-menu-item.d.ts +9 -0
  147. package/esm/components/context-menu/context-menu-item.d.ts.map +1 -0
  148. package/esm/components/context-menu/context-menu-item.js +56 -0
  149. package/esm/components/context-menu/context-menu-item.js.map +1 -0
  150. package/esm/components/context-menu/context-menu-manager.d.ts +52 -0
  151. package/esm/components/context-menu/context-menu-manager.d.ts.map +1 -0
  152. package/esm/components/context-menu/context-menu-manager.js +128 -0
  153. package/esm/components/context-menu/context-menu-manager.js.map +1 -0
  154. package/esm/components/context-menu/context-menu-manager.spec.d.ts +2 -0
  155. package/esm/components/context-menu/context-menu-manager.spec.d.ts.map +1 -0
  156. package/esm/components/context-menu/context-menu-manager.spec.js +332 -0
  157. package/esm/components/context-menu/context-menu-manager.spec.js.map +1 -0
  158. package/esm/components/context-menu/context-menu.d.ts +8 -0
  159. package/esm/components/context-menu/context-menu.d.ts.map +1 -0
  160. package/esm/components/context-menu/context-menu.js +79 -0
  161. package/esm/components/context-menu/context-menu.js.map +1 -0
  162. package/esm/components/context-menu/context-menu.spec.d.ts +2 -0
  163. package/esm/components/context-menu/context-menu.spec.d.ts.map +1 -0
  164. package/esm/components/context-menu/context-menu.spec.js +282 -0
  165. package/esm/components/context-menu/context-menu.spec.js.map +1 -0
  166. package/esm/components/context-menu/index.d.ts +4 -0
  167. package/esm/components/context-menu/index.d.ts.map +1 -0
  168. package/esm/components/context-menu/index.js +4 -0
  169. package/esm/components/context-menu/index.js.map +1 -0
  170. package/esm/components/data-grid/body.js +1 -1
  171. package/esm/components/data-grid/body.js.map +1 -1
  172. package/esm/components/data-grid/body.spec.d.ts +2 -0
  173. package/esm/components/data-grid/body.spec.d.ts.map +1 -0
  174. package/esm/components/data-grid/body.spec.js +238 -0
  175. package/esm/components/data-grid/body.spec.js.map +1 -0
  176. package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
  177. package/esm/components/data-grid/data-grid-row.js +84 -96
  178. package/esm/components/data-grid/data-grid-row.js.map +1 -1
  179. package/esm/components/data-grid/data-grid-row.spec.d.ts +2 -0
  180. package/esm/components/data-grid/data-grid-row.spec.d.ts.map +1 -0
  181. package/esm/components/data-grid/data-grid-row.spec.js +328 -0
  182. package/esm/components/data-grid/data-grid-row.spec.js.map +1 -0
  183. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  184. package/esm/components/data-grid/data-grid.js +39 -31
  185. package/esm/components/data-grid/data-grid.js.map +1 -1
  186. package/esm/components/data-grid/data-grid.spec.d.ts +2 -0
  187. package/esm/components/data-grid/data-grid.spec.d.ts.map +1 -0
  188. package/esm/components/data-grid/data-grid.spec.js +569 -0
  189. package/esm/components/data-grid/data-grid.spec.js.map +1 -0
  190. package/esm/components/data-grid/footer.js +21 -15
  191. package/esm/components/data-grid/footer.js.map +1 -1
  192. package/esm/components/data-grid/footer.spec.d.ts +2 -0
  193. package/esm/components/data-grid/footer.spec.d.ts.map +1 -0
  194. package/esm/components/data-grid/footer.spec.js +276 -0
  195. package/esm/components/data-grid/footer.spec.js.map +1 -0
  196. package/esm/components/data-grid/header.d.ts +3 -1
  197. package/esm/components/data-grid/header.d.ts.map +1 -1
  198. package/esm/components/data-grid/header.js +94 -60
  199. package/esm/components/data-grid/header.js.map +1 -1
  200. package/esm/components/data-grid/header.spec.d.ts +2 -0
  201. package/esm/components/data-grid/header.spec.d.ts.map +1 -0
  202. package/esm/components/data-grid/header.spec.js +444 -0
  203. package/esm/components/data-grid/header.spec.js.map +1 -0
  204. package/esm/components/data-grid/selection-cell.d.ts +2 -0
  205. package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
  206. package/esm/components/data-grid/selection-cell.js +15 -13
  207. package/esm/components/data-grid/selection-cell.js.map +1 -1
  208. package/esm/components/data-grid/selection-cell.spec.d.ts +2 -0
  209. package/esm/components/data-grid/selection-cell.spec.d.ts.map +1 -0
  210. package/esm/components/data-grid/selection-cell.spec.js +127 -0
  211. package/esm/components/data-grid/selection-cell.spec.js.map +1 -0
  212. package/esm/components/dialog.d.ts +46 -0
  213. package/esm/components/dialog.d.ts.map +1 -0
  214. package/esm/components/dialog.js +178 -0
  215. package/esm/components/dialog.js.map +1 -0
  216. package/esm/components/dialog.spec.d.ts +2 -0
  217. package/esm/components/dialog.spec.d.ts.map +1 -0
  218. package/esm/components/dialog.spec.js +113 -0
  219. package/esm/components/dialog.spec.js.map +1 -0
  220. package/esm/components/divider.d.ts +22 -0
  221. package/esm/components/divider.d.ts.map +1 -0
  222. package/esm/components/divider.js +113 -0
  223. package/esm/components/divider.js.map +1 -0
  224. package/esm/components/divider.spec.d.ts +2 -0
  225. package/esm/components/divider.spec.d.ts.map +1 -0
  226. package/esm/components/divider.spec.js +136 -0
  227. package/esm/components/divider.spec.js.map +1 -0
  228. package/esm/components/drawer/drawer-toggle-button.d.ts +36 -0
  229. package/esm/components/drawer/drawer-toggle-button.d.ts.map +1 -0
  230. package/esm/components/drawer/drawer-toggle-button.js +94 -0
  231. package/esm/components/drawer/drawer-toggle-button.js.map +1 -0
  232. package/esm/components/drawer/drawer-toggle-button.spec.d.ts +2 -0
  233. package/esm/components/drawer/drawer-toggle-button.spec.d.ts.map +1 -0
  234. package/esm/components/drawer/drawer-toggle-button.spec.js +306 -0
  235. package/esm/components/drawer/drawer-toggle-button.spec.js.map +1 -0
  236. package/esm/components/drawer/index.d.ts +56 -0
  237. package/esm/components/drawer/index.d.ts.map +1 -0
  238. package/esm/components/drawer/index.js +172 -0
  239. package/esm/components/drawer/index.js.map +1 -0
  240. package/esm/components/drawer/index.spec.d.ts +2 -0
  241. package/esm/components/drawer/index.spec.d.ts.map +1 -0
  242. package/esm/components/drawer/index.spec.js +538 -0
  243. package/esm/components/drawer/index.spec.js.map +1 -0
  244. package/esm/components/dropdown.d.ts +15 -0
  245. package/esm/components/dropdown.d.ts.map +1 -0
  246. package/esm/components/dropdown.js +262 -0
  247. package/esm/components/dropdown.js.map +1 -0
  248. package/esm/components/dropdown.spec.d.ts +2 -0
  249. package/esm/components/dropdown.spec.d.ts.map +1 -0
  250. package/esm/components/dropdown.spec.js +372 -0
  251. package/esm/components/dropdown.spec.js.map +1 -0
  252. package/esm/components/fab.d.ts +10 -1
  253. package/esm/components/fab.d.ts.map +1 -1
  254. package/esm/components/fab.js +32 -7
  255. package/esm/components/fab.js.map +1 -1
  256. package/esm/components/fab.spec.d.ts +2 -0
  257. package/esm/components/fab.spec.d.ts.map +1 -0
  258. package/esm/components/fab.spec.js +106 -0
  259. package/esm/components/fab.spec.js.map +1 -0
  260. package/esm/components/form.d.ts.map +1 -1
  261. package/esm/components/form.js +9 -7
  262. package/esm/components/form.js.map +1 -1
  263. package/esm/components/form.spec.d.ts +2 -0
  264. package/esm/components/form.spec.d.ts.map +1 -0
  265. package/esm/components/form.spec.js +324 -0
  266. package/esm/components/form.spec.js.map +1 -0
  267. package/esm/components/grid.d.ts.map +1 -1
  268. package/esm/components/grid.js +43 -40
  269. package/esm/components/grid.js.map +1 -1
  270. package/esm/components/grid.spec.d.ts +2 -0
  271. package/esm/components/grid.spec.d.ts.map +1 -0
  272. package/esm/components/grid.spec.js +340 -0
  273. package/esm/components/grid.spec.js.map +1 -0
  274. package/esm/components/icons/icon-definitions.d.ts +140 -0
  275. package/esm/components/icons/icon-definitions.d.ts.map +1 -0
  276. package/esm/components/icons/icon-definitions.js +432 -0
  277. package/esm/components/icons/icon-definitions.js.map +1 -0
  278. package/esm/components/icons/icon-definitions.spec.d.ts +2 -0
  279. package/esm/components/icons/icon-definitions.spec.d.ts.map +1 -0
  280. package/esm/components/icons/icon-definitions.spec.js +59 -0
  281. package/esm/components/icons/icon-definitions.spec.js.map +1 -0
  282. package/esm/components/icons/icon-types.d.ts +48 -0
  283. package/esm/components/icons/icon-types.d.ts.map +1 -0
  284. package/esm/components/icons/icon-types.js +2 -0
  285. package/esm/components/icons/icon-types.js.map +1 -0
  286. package/esm/components/icons/icon.d.ts +56 -0
  287. package/esm/components/icons/icon.d.ts.map +1 -0
  288. package/esm/components/icons/icon.js +61 -0
  289. package/esm/components/icons/icon.js.map +1 -0
  290. package/esm/components/icons/icon.spec.d.ts +2 -0
  291. package/esm/components/icons/icon.spec.d.ts.map +1 -0
  292. package/esm/components/icons/icon.spec.js +224 -0
  293. package/esm/components/icons/icon.spec.js.map +1 -0
  294. package/esm/components/icons/index.d.ts +5 -0
  295. package/esm/components/icons/index.d.ts.map +1 -0
  296. package/esm/components/icons/index.js +3 -0
  297. package/esm/components/icons/index.js.map +1 -0
  298. package/esm/components/image.d.ts +62 -0
  299. package/esm/components/image.d.ts.map +1 -0
  300. package/esm/components/image.js +348 -0
  301. package/esm/components/image.js.map +1 -0
  302. package/esm/components/image.spec.d.ts +2 -0
  303. package/esm/components/image.spec.d.ts.map +1 -0
  304. package/esm/components/image.spec.js +542 -0
  305. package/esm/components/image.spec.js.map +1 -0
  306. package/esm/components/index.d.ts +32 -4
  307. package/esm/components/index.d.ts.map +1 -1
  308. package/esm/components/index.js +32 -4
  309. package/esm/components/index.js.map +1 -1
  310. package/esm/components/inputs/autocomplete.d.ts +2 -0
  311. package/esm/components/inputs/autocomplete.d.ts.map +1 -1
  312. package/esm/components/inputs/autocomplete.js +10 -6
  313. package/esm/components/inputs/autocomplete.js.map +1 -1
  314. package/esm/components/inputs/autocomplete.spec.d.ts +2 -0
  315. package/esm/components/inputs/autocomplete.spec.d.ts.map +1 -0
  316. package/esm/components/inputs/autocomplete.spec.js +203 -0
  317. package/esm/components/inputs/autocomplete.spec.js.map +1 -0
  318. package/esm/components/inputs/checkbox.d.ts +50 -0
  319. package/esm/components/inputs/checkbox.d.ts.map +1 -0
  320. package/esm/components/inputs/checkbox.js +126 -0
  321. package/esm/components/inputs/checkbox.js.map +1 -0
  322. package/esm/components/inputs/checkbox.spec.d.ts +2 -0
  323. package/esm/components/inputs/checkbox.spec.d.ts.map +1 -0
  324. package/esm/components/inputs/checkbox.spec.js +287 -0
  325. package/esm/components/inputs/checkbox.spec.js.map +1 -0
  326. package/esm/components/inputs/index.d.ts +7 -0
  327. package/esm/components/inputs/index.d.ts.map +1 -1
  328. package/esm/components/inputs/index.js +7 -0
  329. package/esm/components/inputs/index.js.map +1 -1
  330. package/esm/components/inputs/input-number.d.ts +79 -0
  331. package/esm/components/inputs/input-number.d.ts.map +1 -0
  332. package/esm/components/inputs/input-number.js +232 -0
  333. package/esm/components/inputs/input-number.js.map +1 -0
  334. package/esm/components/inputs/input-number.spec.d.ts +2 -0
  335. package/esm/components/inputs/input-number.spec.d.ts.map +1 -0
  336. package/esm/components/inputs/input-number.spec.js +516 -0
  337. package/esm/components/inputs/input-number.spec.js.map +1 -0
  338. package/esm/components/inputs/input.d.ts +2 -1
  339. package/esm/components/inputs/input.d.ts.map +1 -1
  340. package/esm/components/inputs/input.js +179 -177
  341. package/esm/components/inputs/input.js.map +1 -1
  342. package/esm/components/inputs/input.spec.d.ts +2 -0
  343. package/esm/components/inputs/input.spec.d.ts.map +1 -0
  344. package/esm/components/inputs/input.spec.js +611 -0
  345. package/esm/components/inputs/input.spec.js.map +1 -0
  346. package/esm/components/inputs/radio-group.d.ts +38 -0
  347. package/esm/components/inputs/radio-group.d.ts.map +1 -0
  348. package/esm/components/inputs/radio-group.js +58 -0
  349. package/esm/components/inputs/radio-group.js.map +1 -0
  350. package/esm/components/inputs/radio-group.spec.d.ts +2 -0
  351. package/esm/components/inputs/radio-group.spec.d.ts.map +1 -0
  352. package/esm/components/inputs/radio-group.spec.js +201 -0
  353. package/esm/components/inputs/radio-group.spec.js.map +1 -0
  354. package/esm/components/inputs/radio.d.ts +42 -0
  355. package/esm/components/inputs/radio.d.ts.map +1 -0
  356. package/esm/components/inputs/radio.js +134 -0
  357. package/esm/components/inputs/radio.js.map +1 -0
  358. package/esm/components/inputs/radio.spec.d.ts +2 -0
  359. package/esm/components/inputs/radio.spec.d.ts.map +1 -0
  360. package/esm/components/inputs/radio.spec.js +211 -0
  361. package/esm/components/inputs/radio.spec.js.map +1 -0
  362. package/esm/components/inputs/select.d.ts +67 -0
  363. package/esm/components/inputs/select.d.ts.map +1 -0
  364. package/esm/components/inputs/select.js +581 -0
  365. package/esm/components/inputs/select.js.map +1 -0
  366. package/esm/components/inputs/select.spec.d.ts +2 -0
  367. package/esm/components/inputs/select.spec.d.ts.map +1 -0
  368. package/esm/components/inputs/select.spec.js +1009 -0
  369. package/esm/components/inputs/select.spec.js.map +1 -0
  370. package/esm/components/inputs/slider.d.ts +66 -0
  371. package/esm/components/inputs/slider.d.ts.map +1 -0
  372. package/esm/components/inputs/slider.js +526 -0
  373. package/esm/components/inputs/slider.js.map +1 -0
  374. package/esm/components/inputs/slider.spec.d.ts +2 -0
  375. package/esm/components/inputs/slider.spec.d.ts.map +1 -0
  376. package/esm/components/inputs/slider.spec.js +812 -0
  377. package/esm/components/inputs/slider.spec.js.map +1 -0
  378. package/esm/components/inputs/switch.d.ts +50 -0
  379. package/esm/components/inputs/switch.d.ts.map +1 -0
  380. package/esm/components/inputs/switch.js +138 -0
  381. package/esm/components/inputs/switch.js.map +1 -0
  382. package/esm/components/inputs/switch.spec.d.ts +2 -0
  383. package/esm/components/inputs/switch.spec.d.ts.map +1 -0
  384. package/esm/components/inputs/switch.spec.js +313 -0
  385. package/esm/components/inputs/switch.spec.js.map +1 -0
  386. package/esm/components/inputs/text-area.d.ts +2 -0
  387. package/esm/components/inputs/text-area.d.ts.map +1 -1
  388. package/esm/components/inputs/text-area.js +46 -58
  389. package/esm/components/inputs/text-area.js.map +1 -1
  390. package/esm/components/inputs/text-area.spec.d.ts +2 -0
  391. package/esm/components/inputs/text-area.spec.d.ts.map +1 -0
  392. package/esm/components/inputs/text-area.spec.js +229 -0
  393. package/esm/components/inputs/text-area.spec.js.map +1 -0
  394. package/esm/components/linear-progress.d.ts +32 -0
  395. package/esm/components/linear-progress.d.ts.map +1 -0
  396. package/esm/components/linear-progress.js +79 -0
  397. package/esm/components/linear-progress.js.map +1 -0
  398. package/esm/components/linear-progress.spec.d.ts +2 -0
  399. package/esm/components/linear-progress.spec.d.ts.map +1 -0
  400. package/esm/components/linear-progress.spec.js +251 -0
  401. package/esm/components/linear-progress.spec.js.map +1 -0
  402. package/esm/components/list/index.d.ts +3 -0
  403. package/esm/components/list/index.d.ts.map +1 -0
  404. package/esm/components/list/index.js +3 -0
  405. package/esm/components/list/index.js.map +1 -0
  406. package/esm/components/list/list-item.d.ts +13 -0
  407. package/esm/components/list/list-item.d.ts.map +1 -0
  408. package/esm/components/list/list-item.js +81 -0
  409. package/esm/components/list/list-item.js.map +1 -0
  410. package/esm/components/list/list.d.ts +18 -0
  411. package/esm/components/list/list.d.ts.map +1 -0
  412. package/esm/components/list/list.js +42 -0
  413. package/esm/components/list/list.js.map +1 -0
  414. package/esm/components/list/list.spec.d.ts +2 -0
  415. package/esm/components/list/list.spec.d.ts.map +1 -0
  416. package/esm/components/list/list.spec.js +540 -0
  417. package/esm/components/list/list.spec.js.map +1 -0
  418. package/esm/components/loader.d.ts +2 -0
  419. package/esm/components/loader.d.ts.map +1 -1
  420. package/esm/components/loader.js +19 -11
  421. package/esm/components/loader.js.map +1 -1
  422. package/esm/components/loader.spec.d.ts +2 -0
  423. package/esm/components/loader.spec.d.ts.map +1 -0
  424. package/esm/components/loader.spec.js +267 -0
  425. package/esm/components/loader.spec.js.map +1 -0
  426. package/esm/components/menu/index.d.ts +3 -0
  427. package/esm/components/menu/index.d.ts.map +1 -0
  428. package/esm/components/menu/index.js +3 -0
  429. package/esm/components/menu/index.js.map +1 -0
  430. package/esm/components/menu/menu-types.d.ts +27 -0
  431. package/esm/components/menu/menu-types.d.ts.map +1 -0
  432. package/esm/components/menu/menu-types.js +22 -0
  433. package/esm/components/menu/menu-types.js.map +1 -0
  434. package/esm/components/menu/menu-types.spec.d.ts +2 -0
  435. package/esm/components/menu/menu-types.spec.d.ts.map +1 -0
  436. package/esm/components/menu/menu-types.spec.js +103 -0
  437. package/esm/components/menu/menu-types.spec.js.map +1 -0
  438. package/esm/components/menu/menu.d.ts +17 -0
  439. package/esm/components/menu/menu.d.ts.map +1 -0
  440. package/esm/components/menu/menu.js +240 -0
  441. package/esm/components/menu/menu.js.map +1 -0
  442. package/esm/components/menu/menu.spec.d.ts +2 -0
  443. package/esm/components/menu/menu.spec.d.ts.map +1 -0
  444. package/esm/components/menu/menu.spec.js +427 -0
  445. package/esm/components/menu/menu.spec.js.map +1 -0
  446. package/esm/components/modal.d.ts +3 -2
  447. package/esm/components/modal.d.ts.map +1 -1
  448. package/esm/components/modal.js +19 -14
  449. package/esm/components/modal.js.map +1 -1
  450. package/esm/components/modal.spec.d.ts +2 -0
  451. package/esm/components/modal.spec.d.ts.map +1 -0
  452. package/esm/components/modal.spec.js +234 -0
  453. package/esm/components/modal.spec.js.map +1 -0
  454. package/esm/components/noty-list.d.ts +4 -0
  455. package/esm/components/noty-list.d.ts.map +1 -1
  456. package/esm/components/noty-list.js +87 -76
  457. package/esm/components/noty-list.js.map +1 -1
  458. package/esm/components/noty-list.spec.d.ts +2 -0
  459. package/esm/components/noty-list.spec.d.ts.map +1 -0
  460. package/esm/components/noty-list.spec.js +489 -0
  461. package/esm/components/noty-list.spec.js.map +1 -0
  462. package/esm/components/page-container/index.d.ts +54 -0
  463. package/esm/components/page-container/index.d.ts.map +1 -0
  464. package/esm/components/page-container/index.js +63 -0
  465. package/esm/components/page-container/index.js.map +1 -0
  466. package/esm/components/page-container/index.spec.d.ts +2 -0
  467. package/esm/components/page-container/index.spec.d.ts.map +1 -0
  468. package/esm/components/page-container/index.spec.js +217 -0
  469. package/esm/components/page-container/index.spec.js.map +1 -0
  470. package/esm/components/page-container/page-header.d.ts +57 -0
  471. package/esm/components/page-container/page-header.d.ts.map +1 -0
  472. package/esm/components/page-container/page-header.js +93 -0
  473. package/esm/components/page-container/page-header.js.map +1 -0
  474. package/esm/components/page-container/page-header.spec.d.ts +2 -0
  475. package/esm/components/page-container/page-header.spec.d.ts.map +1 -0
  476. package/esm/components/page-container/page-header.spec.js +230 -0
  477. package/esm/components/page-container/page-header.spec.js.map +1 -0
  478. package/esm/components/page-layout/index.d.ts +83 -0
  479. package/esm/components/page-layout/index.d.ts.map +1 -0
  480. package/esm/components/page-layout/index.js +288 -0
  481. package/esm/components/page-layout/index.js.map +1 -0
  482. package/esm/components/page-layout/index.spec.d.ts +2 -0
  483. package/esm/components/page-layout/index.spec.d.ts.map +1 -0
  484. package/esm/components/page-layout/index.spec.js +637 -0
  485. package/esm/components/page-layout/index.spec.js.map +1 -0
  486. package/esm/components/pagination.d.ts +43 -0
  487. package/esm/components/pagination.d.ts.map +1 -0
  488. package/esm/components/pagination.js +165 -0
  489. package/esm/components/pagination.js.map +1 -0
  490. package/esm/components/pagination.spec.d.ts +2 -0
  491. package/esm/components/pagination.spec.d.ts.map +1 -0
  492. package/esm/components/pagination.spec.js +195 -0
  493. package/esm/components/pagination.spec.js.map +1 -0
  494. package/esm/components/paper.d.ts +3 -1
  495. package/esm/components/paper.d.ts.map +1 -1
  496. package/esm/components/paper.js +20 -15
  497. package/esm/components/paper.js.map +1 -1
  498. package/esm/components/paper.spec.d.ts +2 -0
  499. package/esm/components/paper.spec.d.ts.map +1 -0
  500. package/esm/components/paper.spec.js +71 -0
  501. package/esm/components/paper.spec.js.map +1 -0
  502. package/esm/components/rating.d.ts +62 -0
  503. package/esm/components/rating.d.ts.map +1 -0
  504. package/esm/components/rating.js +201 -0
  505. package/esm/components/rating.js.map +1 -0
  506. package/esm/components/rating.spec.d.ts +2 -0
  507. package/esm/components/rating.spec.d.ts.map +1 -0
  508. package/esm/components/rating.spec.js +663 -0
  509. package/esm/components/rating.spec.js.map +1 -0
  510. package/esm/components/result.d.ts +37 -0
  511. package/esm/components/result.d.ts.map +1 -0
  512. package/esm/components/result.js +109 -0
  513. package/esm/components/result.js.map +1 -0
  514. package/esm/components/result.spec.d.ts +2 -0
  515. package/esm/components/result.spec.d.ts.map +1 -0
  516. package/esm/components/result.spec.js +159 -0
  517. package/esm/components/result.spec.js.map +1 -0
  518. package/esm/components/searchable-input-styles.d.ts +8 -0
  519. package/esm/components/searchable-input-styles.d.ts.map +1 -0
  520. package/esm/components/searchable-input-styles.js +71 -0
  521. package/esm/components/searchable-input-styles.js.map +1 -0
  522. package/esm/components/skeleton.d.ts +2 -0
  523. package/esm/components/skeleton.d.ts.map +1 -1
  524. package/esm/components/skeleton.js +20 -7
  525. package/esm/components/skeleton.js.map +1 -1
  526. package/esm/components/skeleton.spec.d.ts +2 -0
  527. package/esm/components/skeleton.spec.d.ts.map +1 -0
  528. package/esm/components/skeleton.spec.js +167 -0
  529. package/esm/components/skeleton.spec.js.map +1 -0
  530. package/esm/components/styles.d.ts.map +1 -1
  531. package/esm/components/styles.js +14 -13
  532. package/esm/components/styles.js.map +1 -1
  533. package/esm/components/styles.spec.d.ts +2 -0
  534. package/esm/components/styles.spec.d.ts.map +1 -0
  535. package/esm/components/styles.spec.js +57 -0
  536. package/esm/components/styles.spec.js.map +1 -0
  537. package/esm/components/suggest/index.d.ts.map +1 -1
  538. package/esm/components/suggest/index.js +32 -102
  539. package/esm/components/suggest/index.js.map +1 -1
  540. package/esm/components/suggest/index.spec.d.ts +2 -0
  541. package/esm/components/suggest/index.spec.d.ts.map +1 -0
  542. package/esm/components/suggest/index.spec.js +539 -0
  543. package/esm/components/suggest/index.spec.js.map +1 -0
  544. package/esm/components/suggest/suggest-input.d.ts +2 -0
  545. package/esm/components/suggest/suggest-input.d.ts.map +1 -1
  546. package/esm/components/suggest/suggest-input.js +24 -23
  547. package/esm/components/suggest/suggest-input.js.map +1 -1
  548. package/esm/components/suggest/suggest-input.spec.d.ts +2 -0
  549. package/esm/components/suggest/suggest-input.spec.d.ts.map +1 -0
  550. package/esm/components/suggest/suggest-input.spec.js +150 -0
  551. package/esm/components/suggest/suggest-input.spec.js.map +1 -0
  552. package/esm/components/suggest/suggest-manager.spec.d.ts +2 -0
  553. package/esm/components/suggest/suggest-manager.spec.d.ts.map +1 -0
  554. package/esm/components/suggest/suggest-manager.spec.js +318 -0
  555. package/esm/components/suggest/suggest-manager.spec.js.map +1 -0
  556. package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
  557. package/esm/components/suggest/suggestion-list.js +52 -58
  558. package/esm/components/suggest/suggestion-list.js.map +1 -1
  559. package/esm/components/suggest/suggestion-list.spec.d.ts +2 -0
  560. package/esm/components/suggest/suggestion-list.spec.d.ts.map +1 -0
  561. package/esm/components/suggest/suggestion-list.spec.js +271 -0
  562. package/esm/components/suggest/suggestion-list.spec.js.map +1 -0
  563. package/esm/components/tabs.d.ts +18 -2
  564. package/esm/components/tabs.d.ts.map +1 -1
  565. package/esm/components/tabs.js +173 -19
  566. package/esm/components/tabs.js.map +1 -1
  567. package/esm/components/tabs.spec.d.ts +2 -0
  568. package/esm/components/tabs.spec.d.ts.map +1 -0
  569. package/esm/components/tabs.spec.js +475 -0
  570. package/esm/components/tabs.spec.js.map +1 -0
  571. package/esm/components/timeline.d.ts +53 -0
  572. package/esm/components/timeline.d.ts.map +1 -0
  573. package/esm/components/timeline.js +162 -0
  574. package/esm/components/timeline.js.map +1 -0
  575. package/esm/components/timeline.spec.d.ts +2 -0
  576. package/esm/components/timeline.spec.d.ts.map +1 -0
  577. package/esm/components/timeline.spec.js +209 -0
  578. package/esm/components/timeline.spec.js.map +1 -0
  579. package/esm/components/tooltip.d.ts +25 -0
  580. package/esm/components/tooltip.d.ts.map +1 -0
  581. package/esm/components/tooltip.js +113 -0
  582. package/esm/components/tooltip.js.map +1 -0
  583. package/esm/components/tooltip.spec.d.ts +2 -0
  584. package/esm/components/tooltip.spec.d.ts.map +1 -0
  585. package/esm/components/tooltip.spec.js +152 -0
  586. package/esm/components/tooltip.spec.js.map +1 -0
  587. package/esm/components/tree/index.d.ts +3 -0
  588. package/esm/components/tree/index.d.ts.map +1 -0
  589. package/esm/components/tree/index.js +3 -0
  590. package/esm/components/tree/index.js.map +1 -0
  591. package/esm/components/tree/tree-item.d.ts +14 -0
  592. package/esm/components/tree/tree-item.d.ts.map +1 -0
  593. package/esm/components/tree/tree-item.js +118 -0
  594. package/esm/components/tree/tree-item.js.map +1 -0
  595. package/esm/components/tree/tree.d.ts +20 -0
  596. package/esm/components/tree/tree.d.ts.map +1 -0
  597. package/esm/components/tree/tree.js +66 -0
  598. package/esm/components/tree/tree.js.map +1 -0
  599. package/esm/components/tree/tree.spec.d.ts +2 -0
  600. package/esm/components/tree/tree.spec.d.ts.map +1 -0
  601. package/esm/components/tree/tree.spec.js +427 -0
  602. package/esm/components/tree/tree.spec.js.map +1 -0
  603. package/esm/components/typography.d.ts +48 -0
  604. package/esm/components/typography.d.ts.map +1 -0
  605. package/esm/components/typography.js +223 -0
  606. package/esm/components/typography.js.map +1 -0
  607. package/esm/components/typography.spec.d.ts +2 -0
  608. package/esm/components/typography.spec.d.ts.map +1 -0
  609. package/esm/components/typography.spec.js +199 -0
  610. package/esm/components/typography.spec.js.map +1 -0
  611. package/esm/components/wizard/index.d.ts +2 -0
  612. package/esm/components/wizard/index.d.ts.map +1 -1
  613. package/esm/components/wizard/index.js +10 -7
  614. package/esm/components/wizard/index.js.map +1 -1
  615. package/esm/components/wizard/index.spec.d.ts +2 -0
  616. package/esm/components/wizard/index.spec.d.ts.map +1 -0
  617. package/esm/components/wizard/index.spec.js +185 -0
  618. package/esm/components/wizard/index.spec.js.map +1 -0
  619. package/esm/services/click-away-service.d.ts +5 -2
  620. package/esm/services/click-away-service.d.ts.map +1 -1
  621. package/esm/services/click-away-service.js +7 -1
  622. package/esm/services/click-away-service.js.map +1 -1
  623. package/esm/services/collection-service.spec.js +391 -2
  624. package/esm/services/collection-service.spec.js.map +1 -1
  625. package/esm/services/css-variable-theme.d.ts +167 -1
  626. package/esm/services/css-variable-theme.d.ts.map +1 -1
  627. package/esm/services/css-variable-theme.js +123 -1
  628. package/esm/services/css-variable-theme.js.map +1 -1
  629. package/esm/services/css-variable-theme.spec.d.ts +2 -0
  630. package/esm/services/css-variable-theme.spec.d.ts.map +1 -0
  631. package/esm/services/css-variable-theme.spec.js +299 -0
  632. package/esm/services/css-variable-theme.spec.js.map +1 -0
  633. package/esm/services/default-dark-theme.d.ts +107 -2
  634. package/esm/services/default-dark-theme.d.ts.map +1 -1
  635. package/esm/services/default-dark-theme.js +87 -1
  636. package/esm/services/default-dark-theme.js.map +1 -1
  637. package/esm/services/default-light-theme.d.ts +107 -2
  638. package/esm/services/default-light-theme.d.ts.map +1 -1
  639. package/esm/services/default-light-theme.js +86 -0
  640. package/esm/services/default-light-theme.js.map +1 -1
  641. package/esm/services/default-palette.d.ts +4 -0
  642. package/esm/services/default-palette.d.ts.map +1 -1
  643. package/esm/services/default-palette.js +22 -0
  644. package/esm/services/default-palette.js.map +1 -1
  645. package/esm/services/index.d.ts +6 -2
  646. package/esm/services/index.d.ts.map +1 -1
  647. package/esm/services/index.js +6 -2
  648. package/esm/services/index.js.map +1 -1
  649. package/esm/services/layout-service.d.ts +217 -0
  650. package/esm/services/layout-service.d.ts.map +1 -0
  651. package/esm/services/layout-service.js +331 -0
  652. package/esm/services/layout-service.js.map +1 -0
  653. package/esm/services/layout-service.spec.d.ts +2 -0
  654. package/esm/services/layout-service.spec.d.ts.map +1 -0
  655. package/esm/services/layout-service.spec.js +425 -0
  656. package/esm/services/layout-service.spec.js.map +1 -0
  657. package/esm/services/list-service.d.ts +31 -0
  658. package/esm/services/list-service.d.ts.map +1 -0
  659. package/esm/services/list-service.js +149 -0
  660. package/esm/services/list-service.js.map +1 -0
  661. package/esm/services/list-service.spec.d.ts +2 -0
  662. package/esm/services/list-service.spec.d.ts.map +1 -0
  663. package/esm/services/list-service.spec.js +254 -0
  664. package/esm/services/list-service.spec.js.map +1 -0
  665. package/esm/services/palette-css-vars.d.ts +12 -0
  666. package/esm/services/palette-css-vars.d.ts.map +1 -0
  667. package/esm/services/palette-css-vars.js +44 -0
  668. package/esm/services/palette-css-vars.js.map +1 -0
  669. package/esm/services/theme-provider-service.d.ts +445 -2
  670. package/esm/services/theme-provider-service.d.ts.map +1 -1
  671. package/esm/services/theme-provider-service.js.map +1 -1
  672. package/esm/services/theme-provider-service.spec.d.ts +2 -0
  673. package/esm/services/theme-provider-service.spec.d.ts.map +1 -0
  674. package/esm/services/theme-provider-service.spec.js +166 -0
  675. package/esm/services/theme-provider-service.spec.js.map +1 -0
  676. package/esm/services/tree-service.d.ts +61 -0
  677. package/esm/services/tree-service.d.ts.map +1 -0
  678. package/esm/services/tree-service.js +149 -0
  679. package/esm/services/tree-service.js.map +1 -0
  680. package/esm/services/tree-service.spec.d.ts +2 -0
  681. package/esm/services/tree-service.spec.d.ts.map +1 -0
  682. package/esm/services/tree-service.spec.js +307 -0
  683. package/esm/services/tree-service.spec.js.map +1 -0
  684. package/esm/utils/promisify-animation.d.ts.map +1 -1
  685. package/esm/utils/promisify-animation.js +6 -1
  686. package/esm/utils/promisify-animation.js.map +1 -1
  687. package/package.json +4 -4
  688. package/src/components/accordion/accordion-item.tsx +197 -0
  689. package/src/components/accordion/accordion.spec.tsx +418 -0
  690. package/src/components/accordion/accordion.tsx +50 -0
  691. package/src/components/accordion/index.ts +2 -0
  692. package/src/components/alert.spec.tsx +256 -0
  693. package/src/components/alert.tsx +186 -0
  694. package/src/components/animations.spec.ts +299 -0
  695. package/src/components/app-bar-link.spec.tsx +344 -0
  696. package/src/components/app-bar-link.tsx +44 -25
  697. package/src/components/app-bar.spec.tsx +157 -0
  698. package/src/components/app-bar.tsx +31 -24
  699. package/src/components/avatar.spec.tsx +146 -0
  700. package/src/components/avatar.tsx +56 -60
  701. package/src/components/badge.spec.tsx +228 -0
  702. package/src/components/badge.tsx +104 -0
  703. package/src/components/breadcrumb.spec.tsx +396 -0
  704. package/src/components/breadcrumb.tsx +188 -0
  705. package/src/components/button-group.spec.tsx +611 -0
  706. package/src/components/button-group.tsx +423 -0
  707. package/src/components/button.spec.tsx +383 -0
  708. package/src/components/button.tsx +211 -196
  709. package/src/components/card.spec.tsx +389 -0
  710. package/src/components/card.tsx +261 -0
  711. package/src/components/carousel.spec.tsx +894 -0
  712. package/src/components/carousel.tsx +376 -0
  713. package/src/components/chip.spec.tsx +200 -0
  714. package/src/components/chip.tsx +188 -0
  715. package/src/components/circular-progress.spec.tsx +289 -0
  716. package/src/components/circular-progress.tsx +145 -0
  717. package/src/components/command-palette/command-palette-input.spec.tsx +331 -0
  718. package/src/components/command-palette/command-palette-input.tsx +40 -27
  719. package/src/components/command-palette/command-palette-manager.spec.ts +485 -0
  720. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +517 -0
  721. package/src/components/command-palette/command-palette-suggestion-list.tsx +55 -57
  722. package/src/components/command-palette/index.spec.tsx +684 -0
  723. package/src/components/command-palette/index.tsx +42 -148
  724. package/src/components/context-menu/context-menu-item.tsx +85 -0
  725. package/src/components/context-menu/context-menu-manager.spec.ts +478 -0
  726. package/src/components/context-menu/context-menu-manager.ts +148 -0
  727. package/src/components/context-menu/context-menu.spec.tsx +352 -0
  728. package/src/components/context-menu/context-menu.tsx +116 -0
  729. package/src/components/context-menu/index.ts +3 -0
  730. package/src/components/data-grid/body.spec.tsx +354 -0
  731. package/src/components/data-grid/body.tsx +1 -1
  732. package/src/components/data-grid/data-grid-row.spec.tsx +407 -0
  733. package/src/components/data-grid/data-grid-row.tsx +87 -102
  734. package/src/components/data-grid/data-grid.spec.tsx +964 -0
  735. package/src/components/data-grid/data-grid.tsx +45 -38
  736. package/src/components/data-grid/footer.spec.tsx +356 -0
  737. package/src/components/data-grid/footer.tsx +19 -19
  738. package/src/components/data-grid/header.spec.tsx +586 -0
  739. package/src/components/data-grid/header.tsx +104 -76
  740. package/src/components/data-grid/selection-cell.spec.tsx +151 -0
  741. package/src/components/data-grid/selection-cell.tsx +14 -12
  742. package/src/components/dialog.spec.tsx +135 -0
  743. package/src/components/dialog.tsx +277 -0
  744. package/src/components/divider.spec.tsx +197 -0
  745. package/src/components/divider.tsx +147 -0
  746. package/src/components/drawer/drawer-toggle-button.spec.tsx +374 -0
  747. package/src/components/drawer/drawer-toggle-button.tsx +124 -0
  748. package/src/components/drawer/index.spec.tsx +748 -0
  749. package/src/components/drawer/index.tsx +227 -0
  750. package/src/components/dropdown.spec.tsx +445 -0
  751. package/src/components/dropdown.tsx +343 -0
  752. package/src/components/fab.spec.tsx +119 -0
  753. package/src/components/fab.tsx +40 -8
  754. package/src/components/form.spec.tsx +491 -0
  755. package/src/components/form.tsx +10 -7
  756. package/src/components/grid.spec.tsx +427 -0
  757. package/src/components/grid.tsx +60 -66
  758. package/src/components/icons/icon-definitions.spec.ts +68 -0
  759. package/src/components/icons/icon-definitions.ts +509 -0
  760. package/src/components/icons/icon-types.ts +48 -0
  761. package/src/components/icons/icon.spec.tsx +314 -0
  762. package/src/components/icons/icon.tsx +111 -0
  763. package/src/components/icons/index.ts +4 -0
  764. package/src/components/image.spec.tsx +748 -0
  765. package/src/components/image.tsx +520 -0
  766. package/src/components/index.ts +32 -4
  767. package/src/components/inputs/autocomplete.spec.tsx +267 -0
  768. package/src/components/inputs/autocomplete.tsx +13 -7
  769. package/src/components/inputs/checkbox.spec.tsx +377 -0
  770. package/src/components/inputs/checkbox.tsx +198 -0
  771. package/src/components/inputs/index.ts +7 -0
  772. package/src/components/inputs/input-number.spec.tsx +686 -0
  773. package/src/components/inputs/input-number.tsx +387 -0
  774. package/src/components/inputs/input.spec.tsx +844 -0
  775. package/src/components/inputs/input.tsx +191 -218
  776. package/src/components/inputs/radio-group.spec.tsx +281 -0
  777. package/src/components/inputs/radio-group.tsx +108 -0
  778. package/src/components/inputs/radio.spec.tsx +273 -0
  779. package/src/components/inputs/radio.tsx +199 -0
  780. package/src/components/inputs/select.spec.tsx +1237 -0
  781. package/src/components/inputs/select.tsx +775 -0
  782. package/src/components/inputs/slider.spec.tsx +1020 -0
  783. package/src/components/inputs/slider.tsx +696 -0
  784. package/src/components/inputs/switch.spec.tsx +410 -0
  785. package/src/components/inputs/switch.tsx +218 -0
  786. package/src/components/inputs/text-area.spec.tsx +300 -0
  787. package/src/components/inputs/text-area.tsx +47 -79
  788. package/src/components/linear-progress.spec.tsx +320 -0
  789. package/src/components/linear-progress.tsx +127 -0
  790. package/src/components/list/index.ts +2 -0
  791. package/src/components/list/list-item.tsx +106 -0
  792. package/src/components/list/list.spec.tsx +817 -0
  793. package/src/components/list/list.tsx +92 -0
  794. package/src/components/loader.spec.tsx +362 -0
  795. package/src/components/loader.tsx +18 -10
  796. package/src/components/menu/index.ts +2 -0
  797. package/src/components/menu/menu-types.spec.ts +122 -0
  798. package/src/components/menu/menu-types.ts +43 -0
  799. package/src/components/menu/menu.spec.tsx +483 -0
  800. package/src/components/menu/menu.tsx +326 -0
  801. package/src/components/modal.spec.tsx +314 -0
  802. package/src/components/modal.tsx +20 -15
  803. package/src/components/noty-list.spec.tsx +634 -0
  804. package/src/components/noty-list.tsx +98 -101
  805. package/src/components/page-container/index.spec.tsx +274 -0
  806. package/src/components/page-container/index.tsx +82 -0
  807. package/src/components/page-container/page-header.spec.tsx +308 -0
  808. package/src/components/page-container/page-header.tsx +127 -0
  809. package/src/components/page-layout/index.spec.tsx +882 -0
  810. package/src/components/page-layout/index.tsx +392 -0
  811. package/src/components/pagination.spec.tsx +275 -0
  812. package/src/components/pagination.tsx +249 -0
  813. package/src/components/paper.spec.tsx +80 -0
  814. package/src/components/paper.tsx +21 -17
  815. package/src/components/rating.spec.tsx +866 -0
  816. package/src/components/rating.tsx +286 -0
  817. package/src/components/result.spec.tsx +221 -0
  818. package/src/components/result.tsx +155 -0
  819. package/src/components/searchable-input-styles.ts +81 -0
  820. package/src/components/skeleton.spec.tsx +227 -0
  821. package/src/components/skeleton.tsx +24 -7
  822. package/src/components/styles.spec.ts +69 -0
  823. package/src/components/styles.tsx +15 -13
  824. package/src/components/suggest/index.spec.tsx +885 -0
  825. package/src/components/suggest/index.tsx +36 -130
  826. package/src/components/suggest/suggest-input.spec.tsx +195 -0
  827. package/src/components/suggest/suggest-input.tsx +23 -29
  828. package/src/components/suggest/suggest-manager.spec.ts +419 -0
  829. package/src/components/suggest/suggestion-list.spec.tsx +355 -0
  830. package/src/components/suggest/suggestion-list.tsx +54 -58
  831. package/src/components/tabs.spec.tsx +598 -0
  832. package/src/components/tabs.tsx +241 -26
  833. package/src/components/timeline.spec.tsx +294 -0
  834. package/src/components/timeline.tsx +221 -0
  835. package/src/components/tooltip.spec.tsx +223 -0
  836. package/src/components/tooltip.tsx +155 -0
  837. package/src/components/tree/index.ts +2 -0
  838. package/src/components/tree/tree-item.tsx +161 -0
  839. package/src/components/tree/tree.spec.tsx +677 -0
  840. package/src/components/tree/tree.tsx +111 -0
  841. package/src/components/typography.spec.tsx +235 -0
  842. package/src/components/typography.tsx +292 -0
  843. package/src/components/wizard/index.spec.tsx +233 -0
  844. package/src/components/wizard/index.tsx +10 -9
  845. package/src/services/click-away-service.ts +9 -3
  846. package/src/services/collection-service.spec.ts +492 -3
  847. package/src/services/css-variable-theme.spec.ts +372 -0
  848. package/src/services/css-variable-theme.ts +128 -3
  849. package/src/services/default-dark-theme.ts +89 -3
  850. package/src/services/default-light-theme.ts +88 -2
  851. package/src/services/default-palette.ts +22 -0
  852. package/src/services/index.ts +6 -2
  853. package/src/services/layout-service.spec.ts +535 -0
  854. package/src/services/layout-service.ts +391 -0
  855. package/src/services/list-service.spec.ts +364 -0
  856. package/src/services/list-service.ts +169 -0
  857. package/src/services/palette-css-vars.ts +46 -0
  858. package/src/services/theme-provider-service.spec.ts +195 -0
  859. package/src/services/theme-provider-service.ts +305 -2
  860. package/src/services/tree-service.spec.ts +428 -0
  861. package/src/services/tree-service.ts +179 -0
  862. package/src/utils/promisify-animation.ts +7 -1
@@ -0,0 +1,844 @@
1
+ import { Injector } from '@furystack/inject'
2
+ import { createComponent, initializeShadeRoot } from '@furystack/shades'
3
+ import { sleepAsync, usingAsync } from '@furystack/utils'
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
5
+ import { ThemeProviderService } from '../../services/theme-provider-service.js'
6
+ import { Form, FormService } from '../form.js'
7
+ import { Input } from './input.js'
8
+
9
+ describe('Input', () => {
10
+ beforeEach(() => {
11
+ document.body.innerHTML = '<div id="root"></div>'
12
+ })
13
+
14
+ afterEach(() => {
15
+ document.body.innerHTML = ''
16
+ vi.restoreAllMocks()
17
+ })
18
+
19
+ it('should render with shadow DOM', async () => {
20
+ await usingAsync(new Injector(), async (injector) => {
21
+ const rootElement = document.getElementById('root') as HTMLDivElement
22
+
23
+ initializeShadeRoot({
24
+ injector,
25
+ rootElement,
26
+ jsxElement: <Input />,
27
+ })
28
+
29
+ await sleepAsync(50)
30
+
31
+ const input = document.querySelector('shade-input')
32
+ expect(input).not.toBeNull()
33
+ })
34
+ })
35
+
36
+ it('should render the inner input element', async () => {
37
+ await usingAsync(new Injector(), async (injector) => {
38
+ const rootElement = document.getElementById('root') as HTMLDivElement
39
+
40
+ initializeShadeRoot({
41
+ injector,
42
+ rootElement,
43
+ jsxElement: <Input name="testField" />,
44
+ })
45
+
46
+ await sleepAsync(50)
47
+
48
+ const input = document.querySelector('shade-input input') as HTMLInputElement
49
+ expect(input).not.toBeNull()
50
+ expect(input.name).toBe('testField')
51
+ })
52
+ })
53
+
54
+ it('should render the label title', async () => {
55
+ await usingAsync(new Injector(), async (injector) => {
56
+ const rootElement = document.getElementById('root') as HTMLDivElement
57
+
58
+ initializeShadeRoot({
59
+ injector,
60
+ rootElement,
61
+ jsxElement: <Input labelTitle="Test Label" />,
62
+ })
63
+
64
+ await sleepAsync(50)
65
+
66
+ const label = document.querySelector('shade-input label') as HTMLLabelElement
67
+ expect(label).not.toBeNull()
68
+ expect(label.textContent).toContain('Test Label')
69
+ })
70
+ })
71
+
72
+ describe('variants', () => {
73
+ it('should set data-variant attribute for outlined variant', async () => {
74
+ await usingAsync(new Injector(), async (injector) => {
75
+ const rootElement = document.getElementById('root') as HTMLDivElement
76
+
77
+ initializeShadeRoot({
78
+ injector,
79
+ rootElement,
80
+ jsxElement: <Input variant="outlined" />,
81
+ })
82
+
83
+ await sleepAsync(50)
84
+
85
+ const input = document.querySelector('shade-input') as HTMLElement
86
+ expect(input).not.toBeNull()
87
+ expect(input.getAttribute('data-variant')).toBe('outlined')
88
+ })
89
+ })
90
+
91
+ it('should set data-variant attribute for contained variant', async () => {
92
+ await usingAsync(new Injector(), async (injector) => {
93
+ const rootElement = document.getElementById('root') as HTMLDivElement
94
+
95
+ initializeShadeRoot({
96
+ injector,
97
+ rootElement,
98
+ jsxElement: <Input variant="contained" />,
99
+ })
100
+
101
+ await sleepAsync(50)
102
+
103
+ const input = document.querySelector('shade-input') as HTMLElement
104
+ expect(input).not.toBeNull()
105
+ expect(input.getAttribute('data-variant')).toBe('contained')
106
+ })
107
+ })
108
+
109
+ it('should not have data-variant when variant is not specified', async () => {
110
+ await usingAsync(new Injector(), async (injector) => {
111
+ const rootElement = document.getElementById('root') as HTMLDivElement
112
+
113
+ initializeShadeRoot({
114
+ injector,
115
+ rootElement,
116
+ jsxElement: <Input />,
117
+ })
118
+
119
+ await sleepAsync(50)
120
+
121
+ const input = document.querySelector('shade-input') as HTMLElement
122
+ expect(input).not.toBeNull()
123
+ expect(input.hasAttribute('data-variant')).toBe(false)
124
+ })
125
+ })
126
+ })
127
+
128
+ describe('disabled state', () => {
129
+ it('should set data-disabled attribute when disabled', async () => {
130
+ await usingAsync(new Injector(), async (injector) => {
131
+ const rootElement = document.getElementById('root') as HTMLDivElement
132
+
133
+ initializeShadeRoot({
134
+ injector,
135
+ rootElement,
136
+ jsxElement: <Input disabled />,
137
+ })
138
+
139
+ await sleepAsync(50)
140
+
141
+ const input = document.querySelector('shade-input') as HTMLElement
142
+ expect(input).not.toBeNull()
143
+ expect(input.hasAttribute('data-disabled')).toBe(true)
144
+ })
145
+ })
146
+
147
+ it('should not have data-disabled attribute when not disabled', async () => {
148
+ await usingAsync(new Injector(), async (injector) => {
149
+ const rootElement = document.getElementById('root') as HTMLDivElement
150
+
151
+ initializeShadeRoot({
152
+ injector,
153
+ rootElement,
154
+ jsxElement: <Input disabled={false} />,
155
+ })
156
+
157
+ await sleepAsync(50)
158
+
159
+ const input = document.querySelector('shade-input') as HTMLElement
160
+ expect(input).not.toBeNull()
161
+ expect(input.hasAttribute('data-disabled')).toBe(false)
162
+ })
163
+ })
164
+ })
165
+
166
+ describe('validation', () => {
167
+ it('should call custom validation callback', async () => {
168
+ await usingAsync(new Injector(), async (injector) => {
169
+ const rootElement = document.getElementById('root') as HTMLDivElement
170
+ const getValidationResult = vi.fn().mockReturnValue({ isValid: true })
171
+
172
+ initializeShadeRoot({
173
+ injector,
174
+ rootElement,
175
+ jsxElement: <Input name="email" getValidationResult={getValidationResult} />,
176
+ })
177
+
178
+ await sleepAsync(50)
179
+
180
+ const input = document.querySelector('shade-input input') as HTMLInputElement
181
+ input.value = 'test@example.com'
182
+ input.dispatchEvent(new Event('change', { bubbles: true }))
183
+
184
+ await sleepAsync(50)
185
+
186
+ expect(getValidationResult).toHaveBeenCalled()
187
+ })
188
+ })
189
+
190
+ it('should set data-invalid when validation fails', async () => {
191
+ await usingAsync(new Injector(), async (injector) => {
192
+ const rootElement = document.getElementById('root') as HTMLDivElement
193
+
194
+ initializeShadeRoot({
195
+ injector,
196
+ rootElement,
197
+ jsxElement: (
198
+ <Input
199
+ name="email"
200
+ getValidationResult={() => ({ isValid: false, message: 'Invalid email' })}
201
+ value="invalid"
202
+ />
203
+ ),
204
+ })
205
+
206
+ await sleepAsync(50)
207
+
208
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
209
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
210
+ input.value = 'invalid'
211
+ input.dispatchEvent(new Event('change', { bubbles: true }))
212
+
213
+ await sleepAsync(50)
214
+
215
+ expect(inputWrapper.hasAttribute('data-invalid')).toBe(true)
216
+ })
217
+ })
218
+
219
+ it('should not have data-invalid when validation passes', async () => {
220
+ await usingAsync(new Injector(), async (injector) => {
221
+ const rootElement = document.getElementById('root') as HTMLDivElement
222
+
223
+ initializeShadeRoot({
224
+ injector,
225
+ rootElement,
226
+ jsxElement: <Input name="email" getValidationResult={() => ({ isValid: true })} value="valid@email.com" />,
227
+ })
228
+
229
+ await sleepAsync(50)
230
+
231
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
232
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
233
+ input.value = 'valid@email.com'
234
+ input.dispatchEvent(new Event('change', { bubbles: true }))
235
+
236
+ await sleepAsync(50)
237
+
238
+ expect(inputWrapper.hasAttribute('data-invalid')).toBe(false)
239
+ })
240
+ })
241
+
242
+ it('should display validation message in helper text when validation fails', async () => {
243
+ await usingAsync(new Injector(), async (injector) => {
244
+ const rootElement = document.getElementById('root') as HTMLDivElement
245
+
246
+ initializeShadeRoot({
247
+ injector,
248
+ rootElement,
249
+ jsxElement: (
250
+ <Input name="email" getValidationResult={() => ({ isValid: false, message: 'Email is required' })} />
251
+ ),
252
+ })
253
+
254
+ await sleepAsync(50)
255
+
256
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
257
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
258
+ input.value = ''
259
+ input.dispatchEvent(new Event('change', { bubbles: true }))
260
+
261
+ await sleepAsync(50)
262
+
263
+ const helperText = inputWrapper.querySelector('.helperText') as HTMLElement
264
+ expect(helperText.textContent).toBe('Email is required')
265
+ })
266
+ })
267
+
268
+ it('should show default validation message for required field', async () => {
269
+ await usingAsync(new Injector(), async (injector) => {
270
+ const rootElement = document.getElementById('root') as HTMLDivElement
271
+
272
+ initializeShadeRoot({
273
+ injector,
274
+ rootElement,
275
+ jsxElement: <Input name="field" required />,
276
+ })
277
+
278
+ await sleepAsync(50)
279
+
280
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
281
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
282
+
283
+ const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true })
284
+ input.dispatchEvent(invalidEvent)
285
+
286
+ await sleepAsync(50)
287
+
288
+ const helperText = inputWrapper.querySelector('.helperText') as HTMLElement
289
+ expect(helperText.textContent).toBe('Value is required')
290
+ })
291
+ })
292
+ })
293
+
294
+ describe('helper text', () => {
295
+ it('should render custom helper text', async () => {
296
+ await usingAsync(new Injector(), async (injector) => {
297
+ const rootElement = document.getElementById('root') as HTMLDivElement
298
+
299
+ initializeShadeRoot({
300
+ injector,
301
+ rootElement,
302
+ jsxElement: <Input name="email" getHelperText={() => 'Enter your email address'} />,
303
+ })
304
+
305
+ await sleepAsync(50)
306
+
307
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
308
+ const helperText = inputWrapper.querySelector('.helperText') as HTMLElement
309
+
310
+ expect(helperText.textContent).toBe('Enter your email address')
311
+ })
312
+ })
313
+
314
+ it('should call getHelperText with state and validation result when validation passes', async () => {
315
+ await usingAsync(new Injector(), async (injector) => {
316
+ const rootElement = document.getElementById('root') as HTMLDivElement
317
+ const getHelperText = vi.fn().mockReturnValue('Helper text')
318
+
319
+ initializeShadeRoot({
320
+ injector,
321
+ rootElement,
322
+ jsxElement: (
323
+ <Input name="email" getHelperText={getHelperText} getValidationResult={() => ({ isValid: true })} />
324
+ ),
325
+ })
326
+
327
+ await sleepAsync(50)
328
+
329
+ const input = document.querySelector('shade-input input') as HTMLInputElement
330
+ input.value = 'test'
331
+ input.dispatchEvent(new Event('change', { bubbles: true }))
332
+
333
+ await sleepAsync(50)
334
+
335
+ expect(getHelperText).toHaveBeenCalled()
336
+
337
+ const { calls } = getHelperText.mock
338
+ const callWithValidation = calls.find(
339
+ (call: Array<{ validationResult?: unknown }>) => call[0].validationResult !== undefined,
340
+ )
341
+ expect(callWithValidation).toBeDefined()
342
+ expect((callWithValidation as [{ validationResult: unknown; state: unknown }])[0].validationResult).toEqual({
343
+ isValid: true,
344
+ })
345
+ expect((callWithValidation as [{ validationResult: unknown; state: unknown }])[0].state).toBeDefined()
346
+ })
347
+ })
348
+
349
+ it('should use validation message instead of getHelperText when validation fails with message', async () => {
350
+ await usingAsync(new Injector(), async (injector) => {
351
+ const rootElement = document.getElementById('root') as HTMLDivElement
352
+ const getHelperText = vi.fn().mockReturnValue('Fallback helper')
353
+
354
+ initializeShadeRoot({
355
+ injector,
356
+ rootElement,
357
+ jsxElement: (
358
+ <Input
359
+ name="email"
360
+ getHelperText={getHelperText}
361
+ getValidationResult={() => ({ isValid: false, message: 'Validation error message' })}
362
+ />
363
+ ),
364
+ })
365
+
366
+ await sleepAsync(50)
367
+
368
+ const input = document.querySelector('shade-input input') as HTMLInputElement
369
+ input.value = 'test'
370
+ input.dispatchEvent(new Event('change', { bubbles: true }))
371
+
372
+ await sleepAsync(50)
373
+
374
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
375
+ const helperText = inputWrapper.querySelector('.helperText') as HTMLElement
376
+
377
+ expect(helperText.textContent).toBe('Validation error message')
378
+ })
379
+ })
380
+ })
381
+
382
+ describe('icons', () => {
383
+ it('should render start icon when getStartIcon is provided', async () => {
384
+ await usingAsync(new Injector(), async (injector) => {
385
+ const rootElement = document.getElementById('root') as HTMLDivElement
386
+
387
+ initializeShadeRoot({
388
+ injector,
389
+ rootElement,
390
+ jsxElement: <Input name="search" getStartIcon={() => '🔍'} />,
391
+ })
392
+
393
+ await sleepAsync(50)
394
+
395
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
396
+ const startIcon = inputWrapper.querySelector('.startIcon') as HTMLElement
397
+
398
+ expect(startIcon).not.toBeNull()
399
+ expect(startIcon.textContent).toBe('🔍')
400
+ })
401
+ })
402
+
403
+ it('should render end icon when getEndIcon is provided', async () => {
404
+ await usingAsync(new Injector(), async (injector) => {
405
+ const rootElement = document.getElementById('root') as HTMLDivElement
406
+
407
+ initializeShadeRoot({
408
+ injector,
409
+ rootElement,
410
+ jsxElement: <Input name="password" getEndIcon={() => '👁️'} />,
411
+ })
412
+
413
+ await sleepAsync(50)
414
+
415
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
416
+ const endIcon = inputWrapper.querySelector('.endIcon') as HTMLElement
417
+
418
+ expect(endIcon).not.toBeNull()
419
+ expect(endIcon.textContent).toBe('👁️')
420
+ })
421
+ })
422
+
423
+ it('should not render icon container when getStartIcon is not provided', async () => {
424
+ await usingAsync(new Injector(), async (injector) => {
425
+ const rootElement = document.getElementById('root') as HTMLDivElement
426
+
427
+ initializeShadeRoot({
428
+ injector,
429
+ rootElement,
430
+ jsxElement: <Input name="field" />,
431
+ })
432
+
433
+ await sleepAsync(50)
434
+
435
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
436
+ const startIcon = inputWrapper.querySelector('.startIcon')
437
+
438
+ expect(startIcon).toBeNull()
439
+ })
440
+ })
441
+
442
+ it('should update icons on state change', async () => {
443
+ await usingAsync(new Injector(), async (injector) => {
444
+ const rootElement = document.getElementById('root') as HTMLDivElement
445
+
446
+ initializeShadeRoot({
447
+ injector,
448
+ rootElement,
449
+ jsxElement: <Input name="field" getEndIcon={({ state }) => (state.focused ? '✓' : '○')} />,
450
+ })
451
+
452
+ await sleepAsync(50)
453
+
454
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
455
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
456
+ const endIcon = inputWrapper.querySelector('.endIcon') as HTMLElement
457
+
458
+ expect(endIcon.textContent).toBe('○')
459
+
460
+ input.dispatchEvent(new FocusEvent('focus'))
461
+ await sleepAsync(50)
462
+
463
+ expect(endIcon.textContent).toBe('✓')
464
+ })
465
+ })
466
+ })
467
+
468
+ describe('theme integration', () => {
469
+ it('should set CSS color variables from theme', async () => {
470
+ await usingAsync(new Injector(), async (injector) => {
471
+ const rootElement = document.getElementById('root') as HTMLDivElement
472
+
473
+ initializeShadeRoot({
474
+ injector,
475
+ rootElement,
476
+ jsxElement: <Input name="field" />,
477
+ })
478
+
479
+ await sleepAsync(50)
480
+
481
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
482
+
483
+ const themeService = injector.getInstance(ThemeProviderService)
484
+ expect(inputWrapper.style.getPropertyValue('--input-primary-color')).toBe(
485
+ themeService.theme.palette.primary.main,
486
+ )
487
+ expect(inputWrapper.style.getPropertyValue('--input-error-color')).toBe(themeService.theme.palette.error.main)
488
+ })
489
+ })
490
+
491
+ it('should use custom color from defaultColor prop', async () => {
492
+ await usingAsync(new Injector(), async (injector) => {
493
+ const rootElement = document.getElementById('root') as HTMLDivElement
494
+
495
+ initializeShadeRoot({
496
+ injector,
497
+ rootElement,
498
+ jsxElement: <Input name="field" defaultColor="secondary" />,
499
+ })
500
+
501
+ await sleepAsync(50)
502
+
503
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
504
+
505
+ const themeService = injector.getInstance(ThemeProviderService)
506
+ expect(inputWrapper.style.getPropertyValue('--input-primary-color')).toBe(
507
+ themeService.theme.palette.secondary.main,
508
+ )
509
+ })
510
+ })
511
+ })
512
+
513
+ describe('callbacks', () => {
514
+ it('should call onTextChange when input value changes', async () => {
515
+ await usingAsync(new Injector(), async (injector) => {
516
+ const rootElement = document.getElementById('root') as HTMLDivElement
517
+ const onTextChange = vi.fn()
518
+
519
+ initializeShadeRoot({
520
+ injector,
521
+ rootElement,
522
+ jsxElement: <Input name="field" onTextChange={onTextChange} />,
523
+ })
524
+
525
+ await sleepAsync(50)
526
+
527
+ const input = document.querySelector('shade-input input') as HTMLInputElement
528
+ input.value = 'new value'
529
+ input.dispatchEvent(new Event('change', { bubbles: true }))
530
+
531
+ await sleepAsync(50)
532
+
533
+ expect(onTextChange).toHaveBeenCalledWith('new value')
534
+ })
535
+ })
536
+
537
+ it('should call onchange when input value changes', async () => {
538
+ await usingAsync(new Injector(), async (injector) => {
539
+ const rootElement = document.getElementById('root') as HTMLDivElement
540
+ const onchange = vi.fn()
541
+
542
+ initializeShadeRoot({
543
+ injector,
544
+ rootElement,
545
+ jsxElement: <Input name="field" onchange={onchange} />,
546
+ })
547
+
548
+ await sleepAsync(50)
549
+
550
+ const input = document.querySelector('shade-input input') as HTMLInputElement
551
+ input.value = 'test'
552
+ input.dispatchEvent(new Event('change', { bubbles: true }))
553
+
554
+ await sleepAsync(50)
555
+
556
+ expect(onchange).toHaveBeenCalled()
557
+ })
558
+ })
559
+ })
560
+
561
+ describe('focus and blur', () => {
562
+ it('should update state on focus', async () => {
563
+ await usingAsync(new Injector(), async (injector) => {
564
+ const rootElement = document.getElementById('root') as HTMLDivElement
565
+ const getEndIcon = vi.fn().mockReturnValue('icon')
566
+
567
+ initializeShadeRoot({
568
+ injector,
569
+ rootElement,
570
+ jsxElement: <Input name="field" getEndIcon={getEndIcon} />,
571
+ })
572
+
573
+ await sleepAsync(50)
574
+
575
+ const input = document.querySelector('shade-input input') as HTMLInputElement
576
+ input.dispatchEvent(new FocusEvent('focus'))
577
+
578
+ await sleepAsync(50)
579
+
580
+ expect(getEndIcon).toHaveBeenLastCalledWith(
581
+ expect.objectContaining({
582
+ state: expect.objectContaining({
583
+ focused: true,
584
+ }) as unknown,
585
+ }),
586
+ )
587
+ })
588
+ })
589
+
590
+ it('should update state on blur', async () => {
591
+ await usingAsync(new Injector(), async (injector) => {
592
+ const rootElement = document.getElementById('root') as HTMLDivElement
593
+ const getEndIcon = vi.fn().mockReturnValue('icon')
594
+
595
+ initializeShadeRoot({
596
+ injector,
597
+ rootElement,
598
+ jsxElement: <Input name="field" getEndIcon={getEndIcon} />,
599
+ })
600
+
601
+ await sleepAsync(50)
602
+
603
+ const input = document.querySelector('shade-input input') as HTMLInputElement
604
+
605
+ input.dispatchEvent(new FocusEvent('focus'))
606
+ await sleepAsync(50)
607
+
608
+ input.dispatchEvent(new FocusEvent('blur'))
609
+ await sleepAsync(50)
610
+
611
+ expect(getEndIcon).toHaveBeenLastCalledWith(
612
+ expect.objectContaining({
613
+ state: expect.objectContaining({
614
+ focused: false,
615
+ }) as unknown,
616
+ }),
617
+ )
618
+ })
619
+ })
620
+ })
621
+
622
+ describe('autofocus', () => {
623
+ it('should set initial focused state based on autofocus prop', async () => {
624
+ await usingAsync(new Injector(), async (injector) => {
625
+ const rootElement = document.getElementById('root') as HTMLDivElement
626
+ const getEndIcon = vi.fn().mockReturnValue('icon')
627
+
628
+ initializeShadeRoot({
629
+ injector,
630
+ rootElement,
631
+ jsxElement: <Input name="field" autofocus getEndIcon={getEndIcon} />,
632
+ })
633
+
634
+ await sleepAsync(50)
635
+
636
+ expect(getEndIcon).toHaveBeenCalledWith(
637
+ expect.objectContaining({
638
+ state: expect.objectContaining({
639
+ focused: true,
640
+ }) as unknown,
641
+ }),
642
+ )
643
+ })
644
+ })
645
+ })
646
+
647
+ describe('FormService integration', () => {
648
+ it('should register input with FormService when inside a Form', async () => {
649
+ await usingAsync(new Injector(), async (injector) => {
650
+ const rootElement = document.getElementById('root') as HTMLDivElement
651
+
652
+ type TestFormData = { email: string }
653
+
654
+ initializeShadeRoot({
655
+ injector,
656
+ rootElement,
657
+ jsxElement: (
658
+ <Form<TestFormData> onSubmit={() => {}} validate={(_data): _data is TestFormData => true}>
659
+ <Input name="email" labelTitle="Email" />
660
+ </Form>
661
+ ),
662
+ })
663
+
664
+ await sleepAsync(50)
665
+
666
+ const form = document.querySelector('form[is="shade-form"]') as HTMLFormElement
667
+ const formInjector = (form as unknown as { injector: Injector }).injector
668
+ const formService = formInjector.getInstance(FormService)
669
+
670
+ expect(formService.inputs.size).toBe(1)
671
+ })
672
+ })
673
+
674
+ it('should update FormService field state on validation', async () => {
675
+ await usingAsync(new Injector(), async (injector) => {
676
+ const rootElement = document.getElementById('root') as HTMLDivElement
677
+
678
+ type TestFormData = { email: string }
679
+
680
+ initializeShadeRoot({
681
+ injector,
682
+ rootElement,
683
+ jsxElement: (
684
+ <Form<TestFormData> onSubmit={() => {}} validate={(_data): _data is TestFormData => true}>
685
+ <Input
686
+ name="email"
687
+ labelTitle="Email"
688
+ getValidationResult={({ state }) => {
689
+ if (state.value.includes('@')) {
690
+ return { isValid: true }
691
+ }
692
+ return { isValid: false, message: 'Invalid email format' }
693
+ }}
694
+ />
695
+ </Form>
696
+ ),
697
+ })
698
+
699
+ await sleepAsync(50)
700
+
701
+ const form = document.querySelector('form[is="shade-form"]') as HTMLFormElement
702
+ const inputWrapper = form.querySelector('shade-input') as HTMLElement
703
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
704
+
705
+ input.value = 'invalid'
706
+ input.dispatchEvent(new Event('change', { bubbles: true }))
707
+
708
+ await sleepAsync(50)
709
+
710
+ const formInjector = (form as unknown as { injector: Injector }).injector
711
+ const formService = formInjector.getInstance(FormService)
712
+ const fieldErrors = formService.fieldErrors.getValue()
713
+
714
+ expect(fieldErrors.email).toBeDefined()
715
+ expect(fieldErrors.email?.validationResult).toEqual({
716
+ isValid: false,
717
+ message: 'Invalid email format',
718
+ })
719
+ })
720
+ })
721
+
722
+ it('should unregister input from FormService on cleanup', async () => {
723
+ await usingAsync(new Injector(), async (injector) => {
724
+ const rootElement = document.getElementById('root') as HTMLDivElement
725
+
726
+ type TestFormData = { email: string }
727
+
728
+ initializeShadeRoot({
729
+ injector,
730
+ rootElement,
731
+ jsxElement: (
732
+ <Form<TestFormData> onSubmit={() => {}} validate={(_data): _data is TestFormData => true}>
733
+ <Input name="email" labelTitle="Email" />
734
+ </Form>
735
+ ),
736
+ })
737
+
738
+ await sleepAsync(50)
739
+
740
+ const form = document.querySelector('form[is="shade-form"]') as HTMLFormElement
741
+ const formInjector = (form as unknown as { injector: Injector }).injector
742
+ const formService = formInjector.getInstance(FormService)
743
+
744
+ expect(formService.inputs.size).toBe(1)
745
+
746
+ rootElement.innerHTML = ''
747
+
748
+ await sleepAsync(50)
749
+ })
750
+ })
751
+ })
752
+
753
+ describe('default validation messages', () => {
754
+ it('should show message for typeMismatch', async () => {
755
+ await usingAsync(new Injector(), async (injector) => {
756
+ const rootElement = document.getElementById('root') as HTMLDivElement
757
+
758
+ initializeShadeRoot({
759
+ injector,
760
+ rootElement,
761
+ jsxElement: <Input name="email" type="email" />,
762
+ })
763
+
764
+ await sleepAsync(50)
765
+
766
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
767
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
768
+
769
+ input.value = 'not-an-email'
770
+ const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true })
771
+ input.dispatchEvent(invalidEvent)
772
+
773
+ await sleepAsync(50)
774
+
775
+ const helperText = inputWrapper.querySelector('.helperText') as HTMLElement
776
+ expect(helperText.textContent).toBe('Value is not valid')
777
+ })
778
+ })
779
+
780
+ it('should handle pattern mismatch validation', async () => {
781
+ await usingAsync(new Injector(), async (injector) => {
782
+ const rootElement = document.getElementById('root') as HTMLDivElement
783
+
784
+ initializeShadeRoot({
785
+ injector,
786
+ rootElement,
787
+ jsxElement: <Input name="code" pattern="[A-Z]{3}" />,
788
+ })
789
+
790
+ await sleepAsync(50)
791
+
792
+ const inputWrapper = document.querySelector('shade-input') as HTMLElement
793
+ const input = inputWrapper.querySelector('input') as HTMLInputElement
794
+
795
+ input.value = '123'
796
+ const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true })
797
+ input.dispatchEvent(invalidEvent)
798
+
799
+ await sleepAsync(50)
800
+
801
+ const helperText = inputWrapper.querySelector('.helperText') as HTMLElement
802
+ expect(helperText.textContent).toBe('Value does not match the pattern')
803
+ })
804
+ })
805
+ })
806
+
807
+ describe('value handling', () => {
808
+ it('should use initial value prop', async () => {
809
+ await usingAsync(new Injector(), async (injector) => {
810
+ const rootElement = document.getElementById('root') as HTMLDivElement
811
+
812
+ initializeShadeRoot({
813
+ injector,
814
+ rootElement,
815
+ jsxElement: <Input name="field" value="initial value" />,
816
+ })
817
+
818
+ await sleepAsync(50)
819
+
820
+ const input = document.querySelector('shade-input input') as HTMLInputElement
821
+ expect(input.value).toBe('initial value')
822
+ })
823
+ })
824
+ })
825
+
826
+ describe('labelProps', () => {
827
+ it('should pass labelProps to the label element', async () => {
828
+ await usingAsync(new Injector(), async (injector) => {
829
+ const rootElement = document.getElementById('root') as HTMLDivElement
830
+
831
+ initializeShadeRoot({
832
+ injector,
833
+ rootElement,
834
+ jsxElement: <Input name="field" labelProps={{ className: 'custom-label' }} />,
835
+ })
836
+
837
+ await sleepAsync(50)
838
+
839
+ const label = document.querySelector('shade-input label') as HTMLLabelElement
840
+ expect(label.className).toContain('custom-label')
841
+ })
842
+ })
843
+ })
844
+ })