@furystack/shades-common-components 11.0.0 → 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 (765) hide show
  1. package/CHANGELOG.md +430 -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 +332 -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 +454 -429
  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/css-variable-theme.d.ts +167 -1
  547. package/esm/services/css-variable-theme.d.ts.map +1 -1
  548. package/esm/services/css-variable-theme.js +102 -0
  549. package/esm/services/css-variable-theme.js.map +1 -1
  550. package/esm/services/css-variable-theme.spec.js +131 -1
  551. package/esm/services/css-variable-theme.spec.js.map +1 -1
  552. package/esm/services/default-dark-theme.d.ts +107 -2
  553. package/esm/services/default-dark-theme.d.ts.map +1 -1
  554. package/esm/services/default-dark-theme.js +87 -1
  555. package/esm/services/default-dark-theme.js.map +1 -1
  556. package/esm/services/default-light-theme.d.ts +107 -2
  557. package/esm/services/default-light-theme.d.ts.map +1 -1
  558. package/esm/services/default-light-theme.js +86 -0
  559. package/esm/services/default-light-theme.js.map +1 -1
  560. package/esm/services/index.d.ts +6 -2
  561. package/esm/services/index.d.ts.map +1 -1
  562. package/esm/services/index.js +6 -2
  563. package/esm/services/index.js.map +1 -1
  564. package/esm/services/layout-service.d.ts +217 -0
  565. package/esm/services/layout-service.d.ts.map +1 -0
  566. package/esm/services/layout-service.js +331 -0
  567. package/esm/services/layout-service.js.map +1 -0
  568. package/esm/services/layout-service.spec.d.ts +2 -0
  569. package/esm/services/layout-service.spec.d.ts.map +1 -0
  570. package/esm/services/layout-service.spec.js +425 -0
  571. package/esm/services/layout-service.spec.js.map +1 -0
  572. package/esm/services/list-service.d.ts +31 -0
  573. package/esm/services/list-service.d.ts.map +1 -0
  574. package/esm/services/list-service.js +149 -0
  575. package/esm/services/list-service.js.map +1 -0
  576. package/esm/services/list-service.spec.d.ts +2 -0
  577. package/esm/services/list-service.spec.d.ts.map +1 -0
  578. package/esm/services/list-service.spec.js +254 -0
  579. package/esm/services/list-service.spec.js.map +1 -0
  580. package/esm/services/palette-css-vars.d.ts +12 -0
  581. package/esm/services/palette-css-vars.d.ts.map +1 -0
  582. package/esm/services/palette-css-vars.js +44 -0
  583. package/esm/services/palette-css-vars.js.map +1 -0
  584. package/esm/services/theme-provider-service.d.ts +387 -2
  585. package/esm/services/theme-provider-service.d.ts.map +1 -1
  586. package/esm/services/theme-provider-service.js.map +1 -1
  587. package/esm/services/tree-service.d.ts +61 -0
  588. package/esm/services/tree-service.d.ts.map +1 -0
  589. package/esm/services/tree-service.js +149 -0
  590. package/esm/services/tree-service.js.map +1 -0
  591. package/esm/services/tree-service.spec.d.ts +2 -0
  592. package/esm/services/tree-service.spec.d.ts.map +1 -0
  593. package/esm/services/tree-service.spec.js +307 -0
  594. package/esm/services/tree-service.spec.js.map +1 -0
  595. package/esm/utils/promisify-animation.d.ts.map +1 -1
  596. package/esm/utils/promisify-animation.js +6 -1
  597. package/esm/utils/promisify-animation.js.map +1 -1
  598. package/package.json +4 -4
  599. package/src/components/accordion/accordion-item.tsx +197 -0
  600. package/src/components/accordion/accordion.spec.tsx +418 -0
  601. package/src/components/accordion/accordion.tsx +50 -0
  602. package/src/components/accordion/index.ts +2 -0
  603. package/src/components/alert.spec.tsx +256 -0
  604. package/src/components/alert.tsx +186 -0
  605. package/src/components/app-bar-link.spec.tsx +22 -19
  606. package/src/components/app-bar-link.tsx +29 -10
  607. package/src/components/app-bar.spec.tsx +73 -58
  608. package/src/components/app-bar.tsx +19 -12
  609. package/src/components/avatar.tsx +46 -47
  610. package/src/components/badge.spec.tsx +228 -0
  611. package/src/components/badge.tsx +104 -0
  612. package/src/components/breadcrumb.spec.tsx +396 -0
  613. package/src/components/breadcrumb.tsx +188 -0
  614. package/src/components/button-group.spec.tsx +611 -0
  615. package/src/components/button-group.tsx +423 -0
  616. package/src/components/button.spec.tsx +257 -67
  617. package/src/components/button.tsx +130 -80
  618. package/src/components/card.spec.tsx +389 -0
  619. package/src/components/card.tsx +261 -0
  620. package/src/components/carousel.spec.tsx +894 -0
  621. package/src/components/carousel.tsx +376 -0
  622. package/src/components/chip.spec.tsx +200 -0
  623. package/src/components/chip.tsx +188 -0
  624. package/src/components/circular-progress.spec.tsx +289 -0
  625. package/src/components/circular-progress.tsx +145 -0
  626. package/src/components/command-palette/command-palette-input.spec.tsx +209 -198
  627. package/src/components/command-palette/command-palette-input.tsx +25 -9
  628. package/src/components/command-palette/command-palette-manager.spec.ts +132 -117
  629. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +348 -330
  630. package/src/components/command-palette/command-palette-suggestion-list.tsx +22 -20
  631. package/src/components/command-palette/index.spec.tsx +12 -12
  632. package/src/components/command-palette/index.tsx +25 -102
  633. package/src/components/context-menu/context-menu-item.tsx +85 -0
  634. package/src/components/context-menu/context-menu-manager.spec.ts +478 -0
  635. package/src/components/context-menu/context-menu-manager.ts +148 -0
  636. package/src/components/context-menu/context-menu.spec.tsx +352 -0
  637. package/src/components/context-menu/context-menu.tsx +116 -0
  638. package/src/components/context-menu/index.ts +3 -0
  639. package/src/components/data-grid/body.spec.tsx +292 -278
  640. package/src/components/data-grid/data-grid-row.spec.tsx +165 -140
  641. package/src/components/data-grid/data-grid-row.tsx +72 -55
  642. package/src/components/data-grid/data-grid.spec.tsx +743 -718
  643. package/src/components/data-grid/data-grid.tsx +19 -15
  644. package/src/components/data-grid/footer.spec.tsx +249 -237
  645. package/src/components/data-grid/header.spec.tsx +374 -351
  646. package/src/components/data-grid/header.tsx +58 -39
  647. package/src/components/data-grid/selection-cell.spec.tsx +46 -45
  648. package/src/components/data-grid/selection-cell.tsx +2 -6
  649. package/src/components/dialog.spec.tsx +135 -0
  650. package/src/components/dialog.tsx +277 -0
  651. package/src/components/divider.spec.tsx +197 -0
  652. package/src/components/divider.tsx +147 -0
  653. package/src/components/drawer/drawer-toggle-button.spec.tsx +374 -0
  654. package/src/components/drawer/drawer-toggle-button.tsx +124 -0
  655. package/src/components/drawer/index.spec.tsx +748 -0
  656. package/src/components/drawer/index.tsx +227 -0
  657. package/src/components/dropdown.spec.tsx +445 -0
  658. package/src/components/dropdown.tsx +343 -0
  659. package/src/components/fab.spec.tsx +51 -40
  660. package/src/components/fab.tsx +32 -9
  661. package/src/components/form.spec.tsx +303 -293
  662. package/src/components/form.tsx +10 -7
  663. package/src/components/grid.spec.tsx +276 -183
  664. package/src/components/grid.tsx +10 -10
  665. package/src/components/icons/icon-definitions.spec.ts +68 -0
  666. package/src/components/icons/icon-definitions.ts +509 -0
  667. package/src/components/icons/icon-types.ts +48 -0
  668. package/src/components/icons/icon.spec.tsx +314 -0
  669. package/src/components/icons/icon.tsx +111 -0
  670. package/src/components/icons/index.ts +4 -0
  671. package/src/components/image.spec.tsx +748 -0
  672. package/src/components/image.tsx +520 -0
  673. package/src/components/index.ts +32 -4
  674. package/src/components/inputs/autocomplete.spec.tsx +10 -1
  675. package/src/components/inputs/autocomplete.tsx +13 -7
  676. package/src/components/inputs/checkbox.spec.tsx +377 -0
  677. package/src/components/inputs/checkbox.tsx +198 -0
  678. package/src/components/inputs/index.ts +7 -0
  679. package/src/components/inputs/input-number.spec.tsx +686 -0
  680. package/src/components/inputs/input-number.tsx +387 -0
  681. package/src/components/inputs/input.spec.tsx +544 -508
  682. package/src/components/inputs/input.tsx +91 -132
  683. package/src/components/inputs/radio-group.spec.tsx +281 -0
  684. package/src/components/inputs/radio-group.tsx +108 -0
  685. package/src/components/inputs/radio.spec.tsx +273 -0
  686. package/src/components/inputs/radio.tsx +199 -0
  687. package/src/components/inputs/select.spec.tsx +1237 -0
  688. package/src/components/inputs/select.tsx +775 -0
  689. package/src/components/inputs/slider.spec.tsx +1020 -0
  690. package/src/components/inputs/slider.tsx +696 -0
  691. package/src/components/inputs/switch.spec.tsx +410 -0
  692. package/src/components/inputs/switch.tsx +218 -0
  693. package/src/components/inputs/text-area.spec.tsx +186 -171
  694. package/src/components/inputs/text-area.tsx +13 -19
  695. package/src/components/linear-progress.spec.tsx +320 -0
  696. package/src/components/linear-progress.tsx +127 -0
  697. package/src/components/list/index.ts +2 -0
  698. package/src/components/list/list-item.tsx +106 -0
  699. package/src/components/list/list.spec.tsx +817 -0
  700. package/src/components/list/list.tsx +92 -0
  701. package/src/components/loader.spec.tsx +220 -204
  702. package/src/components/loader.tsx +17 -9
  703. package/src/components/menu/index.ts +2 -0
  704. package/src/components/menu/menu-types.spec.ts +122 -0
  705. package/src/components/menu/menu-types.ts +43 -0
  706. package/src/components/menu/menu.spec.tsx +483 -0
  707. package/src/components/menu/menu.tsx +326 -0
  708. package/src/components/modal.spec.tsx +65 -55
  709. package/src/components/modal.tsx +9 -6
  710. package/src/components/noty-list.spec.tsx +78 -75
  711. package/src/components/noty-list.tsx +76 -68
  712. package/src/components/page-container/index.spec.tsx +274 -0
  713. package/src/components/page-container/index.tsx +82 -0
  714. package/src/components/page-container/page-header.spec.tsx +308 -0
  715. package/src/components/page-container/page-header.tsx +127 -0
  716. package/src/components/page-layout/index.spec.tsx +882 -0
  717. package/src/components/page-layout/index.tsx +392 -0
  718. package/src/components/pagination.spec.tsx +275 -0
  719. package/src/components/pagination.tsx +249 -0
  720. package/src/components/paper.spec.tsx +26 -18
  721. package/src/components/paper.tsx +12 -10
  722. package/src/components/rating.spec.tsx +866 -0
  723. package/src/components/rating.tsx +286 -0
  724. package/src/components/result.spec.tsx +221 -0
  725. package/src/components/result.tsx +155 -0
  726. package/src/components/searchable-input-styles.ts +81 -0
  727. package/src/components/skeleton.spec.tsx +126 -118
  728. package/src/components/skeleton.tsx +23 -6
  729. package/src/components/styles.spec.ts +27 -28
  730. package/src/components/styles.tsx +15 -13
  731. package/src/components/suggest/index.spec.tsx +611 -587
  732. package/src/components/suggest/index.tsx +28 -95
  733. package/src/components/suggest/suggest-input.spec.tsx +95 -81
  734. package/src/components/suggest/suggest-input.tsx +9 -7
  735. package/src/components/suggest/suggest-manager.spec.ts +103 -93
  736. package/src/components/suggest/suggestion-list.spec.tsx +194 -173
  737. package/src/components/suggest/suggestion-list.tsx +23 -22
  738. package/src/components/tabs.spec.tsx +369 -7
  739. package/src/components/tabs.tsx +221 -18
  740. package/src/components/timeline.spec.tsx +294 -0
  741. package/src/components/timeline.tsx +221 -0
  742. package/src/components/tooltip.spec.tsx +223 -0
  743. package/src/components/tooltip.tsx +155 -0
  744. package/src/components/tree/index.ts +2 -0
  745. package/src/components/tree/tree-item.tsx +161 -0
  746. package/src/components/tree/tree.spec.tsx +677 -0
  747. package/src/components/tree/tree.tsx +111 -0
  748. package/src/components/typography.spec.tsx +235 -0
  749. package/src/components/typography.tsx +292 -0
  750. package/src/components/wizard/index.spec.tsx +77 -68
  751. package/src/services/click-away-service.ts +9 -3
  752. package/src/services/css-variable-theme.spec.ts +169 -1
  753. package/src/services/css-variable-theme.ts +107 -2
  754. package/src/services/default-dark-theme.ts +89 -3
  755. package/src/services/default-light-theme.ts +88 -2
  756. package/src/services/index.ts +6 -2
  757. package/src/services/layout-service.spec.ts +535 -0
  758. package/src/services/layout-service.ts +391 -0
  759. package/src/services/list-service.spec.ts +364 -0
  760. package/src/services/list-service.ts +169 -0
  761. package/src/services/palette-css-vars.ts +46 -0
  762. package/src/services/theme-provider-service.ts +246 -1
  763. package/src/services/tree-service.spec.ts +428 -0
  764. package/src/services/tree-service.ts +179 -0
  765. package/src/utils/promisify-animation.ts +7 -1
@@ -0,0 +1,748 @@
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 } from 'vitest'
5
+ import { Image, ImageGroup } from './image.js'
6
+
7
+ describe('Image component', () => {
8
+ beforeEach(() => {
9
+ document.body.innerHTML = '<div id="root"></div>'
10
+ })
11
+
12
+ afterEach(() => {
13
+ document.body.innerHTML = ''
14
+ })
15
+
16
+ it('should render an image with the provided src and alt', async () => {
17
+ await usingAsync(new Injector(), async (injector) => {
18
+ const rootElement = document.getElementById('root') as HTMLDivElement
19
+ const testSrc = 'https://example.com/photo.jpg'
20
+ const testAlt = 'Test photo'
21
+
22
+ initializeShadeRoot({
23
+ injector,
24
+ rootElement,
25
+ jsxElement: <Image src={testSrc} alt={testAlt} />,
26
+ })
27
+
28
+ await sleepAsync(50)
29
+
30
+ const imageComponent = document.querySelector('shade-image')
31
+ expect(imageComponent).not.toBeNull()
32
+
33
+ const img = imageComponent?.querySelector('img')
34
+ expect(img).not.toBeNull()
35
+ expect(img?.src).toBe(testSrc)
36
+ expect(img?.alt).toBe(testAlt)
37
+ })
38
+ })
39
+
40
+ it('should render with default alt when not provided', async () => {
41
+ await usingAsync(new Injector(), async (injector) => {
42
+ const rootElement = document.getElementById('root') as HTMLDivElement
43
+
44
+ initializeShadeRoot({
45
+ injector,
46
+ rootElement,
47
+ jsxElement: <Image src="https://example.com/photo.jpg" />,
48
+ })
49
+
50
+ await sleepAsync(50)
51
+
52
+ const img = document.querySelector('shade-image img')
53
+ expect(img).not.toBeNull()
54
+ expect((img as HTMLImageElement)?.alt).toBe('')
55
+ })
56
+ })
57
+
58
+ it('should apply width and height props', async () => {
59
+ await usingAsync(new Injector(), async (injector) => {
60
+ const rootElement = document.getElementById('root') as HTMLDivElement
61
+
62
+ initializeShadeRoot({
63
+ injector,
64
+ rootElement,
65
+ jsxElement: <Image src="https://example.com/photo.jpg" width="300px" height="200px" />,
66
+ })
67
+
68
+ await sleepAsync(50)
69
+
70
+ const img = document.querySelector('shade-image img') as HTMLImageElement
71
+ expect(img).not.toBeNull()
72
+ expect(img.style.width).toBe('300px')
73
+ expect(img.style.height).toBe('200px')
74
+ })
75
+ })
76
+
77
+ it('should apply objectFit prop', async () => {
78
+ await usingAsync(new Injector(), async (injector) => {
79
+ const rootElement = document.getElementById('root') as HTMLDivElement
80
+
81
+ initializeShadeRoot({
82
+ injector,
83
+ rootElement,
84
+ jsxElement: <Image src="https://example.com/photo.jpg" objectFit="contain" />,
85
+ })
86
+
87
+ await sleepAsync(50)
88
+
89
+ const img = document.querySelector('shade-image img') as HTMLImageElement
90
+ expect(img).not.toBeNull()
91
+ expect(img.style.objectFit).toBe('contain')
92
+ })
93
+ })
94
+
95
+ it('should set loading="lazy" when lazy prop is true', async () => {
96
+ await usingAsync(new Injector(), async (injector) => {
97
+ const rootElement = document.getElementById('root') as HTMLDivElement
98
+
99
+ initializeShadeRoot({
100
+ injector,
101
+ rootElement,
102
+ jsxElement: <Image src="https://example.com/photo.jpg" lazy />,
103
+ })
104
+
105
+ await sleepAsync(50)
106
+
107
+ const img = document.querySelector('shade-image img') as HTMLImageElement
108
+ expect(img).not.toBeNull()
109
+ expect(img.loading).toBe('lazy')
110
+ })
111
+ })
112
+
113
+ it('should not set loading="lazy" by default', async () => {
114
+ await usingAsync(new Injector(), async (injector) => {
115
+ const rootElement = document.getElementById('root') as HTMLDivElement
116
+
117
+ initializeShadeRoot({
118
+ injector,
119
+ rootElement,
120
+ jsxElement: <Image src="https://example.com/photo.jpg" />,
121
+ })
122
+
123
+ await sleepAsync(50)
124
+
125
+ const img = document.querySelector('shade-image img') as HTMLImageElement
126
+ expect(img).not.toBeNull()
127
+ expect(img.loading).not.toBe('lazy')
128
+ })
129
+ })
130
+
131
+ it('should show default fallback when image fails to load', async () => {
132
+ await usingAsync(new Injector(), async (injector) => {
133
+ const rootElement = document.getElementById('root') as HTMLDivElement
134
+
135
+ initializeShadeRoot({
136
+ injector,
137
+ rootElement,
138
+ jsxElement: <Image src="invalid-url" />,
139
+ })
140
+
141
+ await sleepAsync(50)
142
+
143
+ const imageComponent = document.querySelector('shade-image')
144
+ expect(imageComponent).not.toBeNull()
145
+
146
+ const img = imageComponent?.querySelector('img') as HTMLImageElement
147
+ expect(img).not.toBeNull()
148
+
149
+ const errorEvent = new Event('error')
150
+ img.dispatchEvent(errorEvent)
151
+
152
+ await sleepAsync(50)
153
+
154
+ expect(img.style.display).toBe('none')
155
+
156
+ const fallback = imageComponent?.querySelector('.image-fallback') as HTMLElement
157
+ expect(fallback).not.toBeNull()
158
+ expect(fallback.style.display).toBe('flex')
159
+ expect(fallback.querySelector('shade-icon')).not.toBeNull()
160
+ })
161
+ })
162
+
163
+ it('should show custom fallback when image fails to load', async () => {
164
+ await usingAsync(new Injector(), async (injector) => {
165
+ const rootElement = document.getElementById('root') as HTMLDivElement
166
+
167
+ initializeShadeRoot({
168
+ injector,
169
+ rootElement,
170
+ jsxElement: <Image src="invalid-url" fallback={<span data-testid="custom-fallback">Image not found</span>} />,
171
+ })
172
+
173
+ await sleepAsync(50)
174
+
175
+ const imageComponent = document.querySelector('shade-image')
176
+ const img = imageComponent?.querySelector('img') as HTMLImageElement
177
+
178
+ const errorEvent = new Event('error')
179
+ img.dispatchEvent(errorEvent)
180
+
181
+ await sleepAsync(50)
182
+
183
+ const customFallback = imageComponent?.querySelector('[data-testid="custom-fallback"]')
184
+ expect(customFallback).not.toBeNull()
185
+ expect(customFallback?.textContent).toBe('Image not found')
186
+ })
187
+ })
188
+
189
+ it('should set data-preview attribute when preview is enabled', async () => {
190
+ await usingAsync(new Injector(), async (injector) => {
191
+ const rootElement = document.getElementById('root') as HTMLDivElement
192
+
193
+ initializeShadeRoot({
194
+ injector,
195
+ rootElement,
196
+ jsxElement: <Image src="https://example.com/photo.jpg" preview />,
197
+ })
198
+
199
+ await sleepAsync(50)
200
+
201
+ const imageComponent = document.querySelector('shade-image') as HTMLElement
202
+ expect(imageComponent).not.toBeNull()
203
+ expect(imageComponent.hasAttribute('data-preview')).toBe(true)
204
+
205
+ const previewIcon = imageComponent.querySelector('.image-preview-icon')
206
+ expect(previewIcon).not.toBeNull()
207
+ })
208
+ })
209
+
210
+ it('should not show preview icon when preview is disabled', async () => {
211
+ await usingAsync(new Injector(), async (injector) => {
212
+ const rootElement = document.getElementById('root') as HTMLDivElement
213
+
214
+ initializeShadeRoot({
215
+ injector,
216
+ rootElement,
217
+ jsxElement: <Image src="https://example.com/photo.jpg" />,
218
+ })
219
+
220
+ await sleepAsync(50)
221
+
222
+ const imageComponent = document.querySelector('shade-image') as HTMLElement
223
+ expect(imageComponent.hasAttribute('data-preview')).toBe(false)
224
+
225
+ const previewIcon = imageComponent.querySelector('.image-preview-icon')
226
+ expect(previewIcon).toBeNull()
227
+ })
228
+ })
229
+
230
+ it('should open lightbox when clicking a preview-enabled image', async () => {
231
+ await usingAsync(new Injector(), async (injector) => {
232
+ const rootElement = document.getElementById('root') as HTMLDivElement
233
+
234
+ initializeShadeRoot({
235
+ injector,
236
+ rootElement,
237
+ jsxElement: <Image src="https://example.com/photo.jpg" alt="My photo" preview />,
238
+ })
239
+
240
+ await sleepAsync(50)
241
+
242
+ const img = document.querySelector('shade-image img') as HTMLImageElement
243
+ img.click()
244
+
245
+ await sleepAsync(50)
246
+
247
+ const lightbox = document.querySelector('.lightbox-backdrop')
248
+ expect(lightbox).not.toBeNull()
249
+
250
+ const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
251
+ expect(lightboxImg).not.toBeNull()
252
+ expect(lightboxImg.src).toBe('https://example.com/photo.jpg')
253
+ expect(lightboxImg.alt).toBe('My photo')
254
+
255
+ // Toolbar should be present
256
+ const toolbar = lightbox?.querySelector('.lightbox-toolbar')
257
+ expect(toolbar).not.toBeNull()
258
+
259
+ // Clean up lightbox
260
+ lightbox?.remove()
261
+ })
262
+ })
263
+
264
+ it('should not open lightbox when clicking a non-preview image', async () => {
265
+ await usingAsync(new Injector(), async (injector) => {
266
+ const rootElement = document.getElementById('root') as HTMLDivElement
267
+
268
+ initializeShadeRoot({
269
+ injector,
270
+ rootElement,
271
+ jsxElement: <Image src="https://example.com/photo.jpg" />,
272
+ })
273
+
274
+ await sleepAsync(50)
275
+
276
+ const img = document.querySelector('shade-image img') as HTMLImageElement
277
+ img.click()
278
+
279
+ await sleepAsync(50)
280
+
281
+ const lightbox = document.querySelector('.lightbox-backdrop')
282
+ expect(lightbox).toBeNull()
283
+ })
284
+ })
285
+
286
+ it('should close lightbox when pressing Escape', async () => {
287
+ await usingAsync(new Injector(), async (injector) => {
288
+ const rootElement = document.getElementById('root') as HTMLDivElement
289
+
290
+ initializeShadeRoot({
291
+ injector,
292
+ rootElement,
293
+ jsxElement: <Image src="https://example.com/photo.jpg" preview />,
294
+ })
295
+
296
+ await sleepAsync(50)
297
+
298
+ const img = document.querySelector('shade-image img') as HTMLImageElement
299
+ img.click()
300
+
301
+ await sleepAsync(50)
302
+
303
+ let lightbox = document.querySelector('.lightbox-backdrop')
304
+ expect(lightbox).not.toBeNull()
305
+
306
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }))
307
+
308
+ await sleepAsync(200)
309
+
310
+ lightbox = document.querySelector('.lightbox-backdrop')
311
+ expect(lightbox).toBeNull()
312
+ })
313
+ })
314
+
315
+ it('should have zoom controls in the lightbox', async () => {
316
+ await usingAsync(new Injector(), async (injector) => {
317
+ const rootElement = document.getElementById('root') as HTMLDivElement
318
+
319
+ initializeShadeRoot({
320
+ injector,
321
+ rootElement,
322
+ jsxElement: <Image src="https://example.com/photo.jpg" preview />,
323
+ })
324
+
325
+ await sleepAsync(50)
326
+
327
+ const img = document.querySelector('shade-image img') as HTMLImageElement
328
+ img.click()
329
+
330
+ await sleepAsync(50)
331
+
332
+ const lightbox = document.querySelector('.lightbox-backdrop')
333
+ expect(lightbox).not.toBeNull()
334
+
335
+ const zoomIn = lightbox?.querySelector('.lightbox-zoom-in')
336
+ const zoomOut = lightbox?.querySelector('.lightbox-zoom-out')
337
+ const rotate = lightbox?.querySelector('.lightbox-rotate')
338
+ expect(zoomIn).not.toBeNull()
339
+ expect(zoomOut).not.toBeNull()
340
+ expect(rotate).not.toBeNull()
341
+
342
+ // Clean up
343
+ lightbox?.remove()
344
+ })
345
+ })
346
+
347
+ it('should store src and alt as data attributes', async () => {
348
+ await usingAsync(new Injector(), async (injector) => {
349
+ const rootElement = document.getElementById('root') as HTMLDivElement
350
+
351
+ initializeShadeRoot({
352
+ injector,
353
+ rootElement,
354
+ jsxElement: <Image src="https://example.com/photo.jpg" alt="Test" />,
355
+ })
356
+
357
+ await sleepAsync(50)
358
+
359
+ const imageComponent = document.querySelector('shade-image') as HTMLElement
360
+ expect(imageComponent.getAttribute('data-src')).toBe('https://example.com/photo.jpg')
361
+ expect(imageComponent.getAttribute('data-alt')).toBe('Test')
362
+ })
363
+ })
364
+ })
365
+
366
+ describe('ImageGroup component', () => {
367
+ beforeEach(() => {
368
+ document.body.innerHTML = '<div id="root"></div>'
369
+ })
370
+
371
+ afterEach(() => {
372
+ document.body.innerHTML = ''
373
+ })
374
+
375
+ it('should render children images', async () => {
376
+ await usingAsync(new Injector(), async (injector) => {
377
+ const rootElement = document.getElementById('root') as HTMLDivElement
378
+
379
+ initializeShadeRoot({
380
+ injector,
381
+ rootElement,
382
+ jsxElement: (
383
+ <ImageGroup>
384
+ <Image src="https://example.com/1.jpg" alt="Image 1" preview />
385
+ <Image src="https://example.com/2.jpg" alt="Image 2" preview />
386
+ <Image src="https://example.com/3.jpg" alt="Image 3" preview />
387
+ </ImageGroup>
388
+ ),
389
+ })
390
+
391
+ await sleepAsync(50)
392
+
393
+ const group = document.querySelector('shade-image-group')
394
+ expect(group).not.toBeNull()
395
+
396
+ const images = group?.querySelectorAll('shade-image')
397
+ expect(images?.length).toBe(3)
398
+ })
399
+ })
400
+
401
+ it('should apply gap prop', async () => {
402
+ await usingAsync(new Injector(), async (injector) => {
403
+ const rootElement = document.getElementById('root') as HTMLDivElement
404
+
405
+ initializeShadeRoot({
406
+ injector,
407
+ rootElement,
408
+ jsxElement: (
409
+ <ImageGroup gap="16px">
410
+ <Image src="https://example.com/1.jpg" preview />
411
+ <Image src="https://example.com/2.jpg" preview />
412
+ </ImageGroup>
413
+ ),
414
+ })
415
+
416
+ await sleepAsync(50)
417
+
418
+ const group = document.querySelector('shade-image-group') as HTMLElement
419
+ expect(group).not.toBeNull()
420
+ expect(group.style.gap).toBe('16px')
421
+ })
422
+ })
423
+
424
+ it('should open lightbox with navigation when clicking an image in a group', async () => {
425
+ await usingAsync(new Injector(), async (injector) => {
426
+ const rootElement = document.getElementById('root') as HTMLDivElement
427
+
428
+ initializeShadeRoot({
429
+ injector,
430
+ rootElement,
431
+ jsxElement: (
432
+ <ImageGroup>
433
+ <Image src="https://example.com/1.jpg" alt="Image 1" preview />
434
+ <Image src="https://example.com/2.jpg" alt="Image 2" preview />
435
+ <Image src="https://example.com/3.jpg" alt="Image 3" preview />
436
+ </ImageGroup>
437
+ ),
438
+ })
439
+
440
+ await sleepAsync(50)
441
+
442
+ const images = document.querySelectorAll('shade-image img')
443
+ expect(images.length).toBe(3)
444
+
445
+ // Click the second image
446
+ ;(images[1] as HTMLImageElement).click()
447
+
448
+ await sleepAsync(50)
449
+
450
+ const lightbox = document.querySelector('.lightbox-backdrop')
451
+ expect(lightbox).not.toBeNull()
452
+
453
+ // Should have navigation arrows
454
+ const prevBtn = lightbox?.querySelector('.lightbox-prev')
455
+ const nextBtn = lightbox?.querySelector('.lightbox-next')
456
+ expect(prevBtn).not.toBeNull()
457
+ expect(nextBtn).not.toBeNull()
458
+
459
+ // Should show the counter
460
+ const counter = lightbox?.querySelector('.lightbox-counter')
461
+ expect(counter).not.toBeNull()
462
+ expect(counter?.textContent).toContain('2 / 3')
463
+
464
+ // Clean up
465
+ lightbox?.remove()
466
+ })
467
+ })
468
+
469
+ it('should navigate to next image in group lightbox', 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: (
477
+ <ImageGroup>
478
+ <Image src="https://example.com/1.jpg" alt="Image 1" preview />
479
+ <Image src="https://example.com/2.jpg" alt="Image 2" preview />
480
+ <Image src="https://example.com/3.jpg" alt="Image 3" preview />
481
+ </ImageGroup>
482
+ ),
483
+ })
484
+
485
+ await sleepAsync(50)
486
+
487
+ const images = document.querySelectorAll('shade-image img')
488
+ ;(images[0] as HTMLImageElement).click()
489
+
490
+ await sleepAsync(50)
491
+
492
+ const lightbox = document.querySelector('.lightbox-backdrop')
493
+ expect(lightbox).not.toBeNull()
494
+
495
+ const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
496
+ expect(lightboxImg.src).toBe('https://example.com/1.jpg')
497
+
498
+ // Click next
499
+ const nextBtn = lightbox?.querySelector('.lightbox-next') as HTMLButtonElement
500
+ nextBtn.click()
501
+
502
+ await sleepAsync(50)
503
+
504
+ expect(lightboxImg.src).toBe('https://example.com/2.jpg')
505
+
506
+ const counter = lightbox?.querySelector('.lightbox-counter')
507
+ expect(counter?.textContent).toContain('2 / 3')
508
+
509
+ // Clean up
510
+ lightbox?.remove()
511
+ })
512
+ })
513
+
514
+ it('should navigate to previous image in group lightbox', async () => {
515
+ await usingAsync(new Injector(), async (injector) => {
516
+ const rootElement = document.getElementById('root') as HTMLDivElement
517
+
518
+ initializeShadeRoot({
519
+ injector,
520
+ rootElement,
521
+ jsxElement: (
522
+ <ImageGroup>
523
+ <Image src="https://example.com/1.jpg" alt="Image 1" preview />
524
+ <Image src="https://example.com/2.jpg" alt="Image 2" preview />
525
+ <Image src="https://example.com/3.jpg" alt="Image 3" preview />
526
+ </ImageGroup>
527
+ ),
528
+ })
529
+
530
+ await sleepAsync(50)
531
+
532
+ const images = document.querySelectorAll('shade-image img')
533
+ ;(images[0] as HTMLImageElement).click()
534
+
535
+ await sleepAsync(50)
536
+
537
+ const lightbox = document.querySelector('.lightbox-backdrop')
538
+ const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
539
+
540
+ // Click prev should wrap to last image
541
+ const prevBtn = lightbox?.querySelector('.lightbox-prev') as HTMLButtonElement
542
+ prevBtn.click()
543
+
544
+ await sleepAsync(50)
545
+
546
+ expect(lightboxImg.src).toBe('https://example.com/3.jpg')
547
+
548
+ const counter = lightbox?.querySelector('.lightbox-counter')
549
+ expect(counter?.textContent).toContain('3 / 3')
550
+
551
+ // Clean up
552
+ lightbox?.remove()
553
+ })
554
+ })
555
+
556
+ it('should navigate with keyboard arrows in group lightbox', async () => {
557
+ await usingAsync(new Injector(), async (injector) => {
558
+ const rootElement = document.getElementById('root') as HTMLDivElement
559
+
560
+ initializeShadeRoot({
561
+ injector,
562
+ rootElement,
563
+ jsxElement: (
564
+ <ImageGroup>
565
+ <Image src="https://example.com/1.jpg" alt="Image 1" preview />
566
+ <Image src="https://example.com/2.jpg" alt="Image 2" preview />
567
+ </ImageGroup>
568
+ ),
569
+ })
570
+
571
+ await sleepAsync(50)
572
+
573
+ const images = document.querySelectorAll('shade-image img')
574
+ ;(images[0] as HTMLImageElement).click()
575
+
576
+ await sleepAsync(50)
577
+
578
+ const lightbox = document.querySelector('.lightbox-backdrop')
579
+ expect(lightbox).not.toBeNull()
580
+
581
+ const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
582
+ expect(lightboxImg.src).toBe('https://example.com/1.jpg')
583
+
584
+ // Navigate with ArrowRight
585
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight' }))
586
+ await sleepAsync(50)
587
+
588
+ expect(lightboxImg.src).toBe('https://example.com/2.jpg')
589
+
590
+ // Navigate with ArrowLeft
591
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft' }))
592
+ await sleepAsync(50)
593
+
594
+ expect(lightboxImg.src).toBe('https://example.com/1.jpg')
595
+
596
+ // Clean up
597
+ lightbox?.remove()
598
+ })
599
+ })
600
+
601
+ it('should zoom in and out in the lightbox', async () => {
602
+ await usingAsync(new Injector(), async (injector) => {
603
+ const rootElement = document.getElementById('root') as HTMLDivElement
604
+
605
+ initializeShadeRoot({
606
+ injector,
607
+ rootElement,
608
+ jsxElement: <Image src="https://example.com/photo.jpg" preview />,
609
+ })
610
+
611
+ await sleepAsync(50)
612
+
613
+ const img = document.querySelector('shade-image img') as HTMLImageElement
614
+ img.click()
615
+
616
+ await sleepAsync(50)
617
+
618
+ const lightbox = document.querySelector('.lightbox-backdrop')
619
+ expect(lightbox).not.toBeNull()
620
+
621
+ const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
622
+
623
+ // Zoom in
624
+ const zoomInBtn = lightbox?.querySelector('.lightbox-zoom-in') as HTMLButtonElement
625
+ zoomInBtn.click()
626
+ await sleepAsync(50)
627
+
628
+ expect(lightboxImg.style.transform).toContain('scale(1.25)')
629
+
630
+ // Zoom out
631
+ const zoomOutBtn = lightbox?.querySelector('.lightbox-zoom-out') as HTMLButtonElement
632
+ zoomOutBtn.click()
633
+ await sleepAsync(50)
634
+
635
+ expect(lightboxImg.style.transform).toContain('scale(1)')
636
+
637
+ // Clean up
638
+ lightbox?.remove()
639
+ })
640
+ })
641
+
642
+ it('should rotate in the lightbox', async () => {
643
+ await usingAsync(new Injector(), async (injector) => {
644
+ const rootElement = document.getElementById('root') as HTMLDivElement
645
+
646
+ initializeShadeRoot({
647
+ injector,
648
+ rootElement,
649
+ jsxElement: <Image src="https://example.com/photo.jpg" preview />,
650
+ })
651
+
652
+ await sleepAsync(50)
653
+
654
+ const img = document.querySelector('shade-image img') as HTMLImageElement
655
+ img.click()
656
+
657
+ await sleepAsync(50)
658
+
659
+ const lightbox = document.querySelector('.lightbox-backdrop')
660
+ const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
661
+
662
+ const rotateBtn = lightbox?.querySelector('.lightbox-rotate') as HTMLButtonElement
663
+ rotateBtn.click()
664
+ await sleepAsync(50)
665
+
666
+ expect(lightboxImg.style.transform).toContain('rotate(90deg)')
667
+
668
+ // Clean up
669
+ lightbox?.remove()
670
+ })
671
+ })
672
+
673
+ it('should close lightbox when clicking the close button', async () => {
674
+ await usingAsync(new Injector(), async (injector) => {
675
+ const rootElement = document.getElementById('root') as HTMLDivElement
676
+
677
+ initializeShadeRoot({
678
+ injector,
679
+ rootElement,
680
+ jsxElement: <Image src="https://example.com/photo.jpg" preview />,
681
+ })
682
+
683
+ await sleepAsync(50)
684
+
685
+ const img = document.querySelector('shade-image img') as HTMLImageElement
686
+ img.click()
687
+
688
+ await sleepAsync(50)
689
+
690
+ let lightbox = document.querySelector('.lightbox-backdrop')
691
+ expect(lightbox).not.toBeNull()
692
+
693
+ const closeBtn = lightbox?.querySelector('.lightbox-close') as HTMLButtonElement
694
+ closeBtn.click()
695
+
696
+ await sleepAsync(200)
697
+
698
+ lightbox = document.querySelector('.lightbox-backdrop')
699
+ expect(lightbox).toBeNull()
700
+ })
701
+ })
702
+
703
+ it('should close lightbox when clicking the backdrop', async () => {
704
+ await usingAsync(new Injector(), async (injector) => {
705
+ const rootElement = document.getElementById('root') as HTMLDivElement
706
+
707
+ initializeShadeRoot({
708
+ injector,
709
+ rootElement,
710
+ jsxElement: <Image src="https://example.com/photo.jpg" preview />,
711
+ })
712
+
713
+ await sleepAsync(50)
714
+
715
+ const img = document.querySelector('shade-image img') as HTMLImageElement
716
+ img.click()
717
+
718
+ await sleepAsync(50)
719
+
720
+ const lightbox = document.querySelector('.lightbox-backdrop') as HTMLElement
721
+ expect(lightbox).not.toBeNull()
722
+
723
+ // Click on the backdrop itself (not child elements)
724
+ lightbox.dispatchEvent(new MouseEvent('click', { bubbles: true }))
725
+
726
+ await sleepAsync(200)
727
+
728
+ expect(document.querySelector('.lightbox-backdrop')).toBeNull()
729
+ })
730
+ })
731
+
732
+ it('should apply style overrides', async () => {
733
+ await usingAsync(new Injector(), async (injector) => {
734
+ const rootElement = document.getElementById('root') as HTMLDivElement
735
+
736
+ initializeShadeRoot({
737
+ injector,
738
+ rootElement,
739
+ jsxElement: <Image src="https://example.com/photo.jpg" style={{ margin: '10px' }} />,
740
+ })
741
+
742
+ await sleepAsync(50)
743
+
744
+ const imageComponent = document.querySelector('shade-image') as HTMLElement
745
+ expect(imageComponent.style.margin).toBe('10px')
746
+ })
747
+ })
748
+ })