@furystack/shades-common-components 11.0.0 → 12.0.1

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