@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, ScreenService } from '@furystack/shades'
3
+ import { sleepAsync, usingAsync } from '@furystack/utils'
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
5
+ import { LayoutService } from '../../services/layout-service.js'
6
+ import { Drawer, type DrawerProps } from './index.js'
7
+
8
+ /**
9
+ * Creates a mock element for LayoutService
10
+ */
11
+ const createMockElement = () =>
12
+ ({
13
+ style: {
14
+ setProperty: vi.fn(),
15
+ },
16
+ }) as unknown as HTMLElement
17
+
18
+ describe('Drawer component', () => {
19
+ beforeEach(() => {
20
+ document.body.innerHTML = '<div id="root"></div>'
21
+ })
22
+
23
+ afterEach(() => {
24
+ document.body.innerHTML = ''
25
+ })
26
+
27
+ type RenderOptions = Omit<DrawerProps, 'position' | 'variant'> & {
28
+ position?: 'left' | 'right'
29
+ variant?: 'permanent' | 'collapsible' | 'temporary'
30
+ children?: JSX.Element
31
+ }
32
+
33
+ const renderDrawer = async (options: RenderOptions = {}) => {
34
+ const { position = 'left', variant = 'collapsible', children = <div>Drawer Content</div>, ...restProps } = options
35
+
36
+ const injector = new Injector()
37
+ const layoutService = new LayoutService(createMockElement())
38
+ injector.setExplicitInstance(layoutService, LayoutService)
39
+ const rootElement = document.getElementById('root') as HTMLDivElement
40
+
41
+ initializeShadeRoot({
42
+ injector,
43
+ rootElement,
44
+ jsxElement: (
45
+ <Drawer position={position} variant={variant} {...restProps}>
46
+ {children}
47
+ </Drawer>
48
+ ),
49
+ })
50
+
51
+ await sleepAsync(50)
52
+
53
+ const drawer = document.querySelector('shade-drawer') as HTMLElement
54
+
55
+ return {
56
+ injector,
57
+ drawer,
58
+ layoutService,
59
+ screenService: injector.getInstance(ScreenService),
60
+ [Symbol.asyncDispose]: () => injector[Symbol.asyncDispose](),
61
+ }
62
+ }
63
+
64
+ describe('rendering', () => {
65
+ it('should render the shade-drawer custom element', async () => {
66
+ await usingAsync(await renderDrawer(), async ({ drawer }) => {
67
+ expect(drawer).not.toBeNull()
68
+ expect(drawer.tagName.toLowerCase()).toBe('shade-drawer')
69
+ })
70
+ })
71
+
72
+ it('should render children in drawer content', async () => {
73
+ await usingAsync(new Injector(), async (injector) => {
74
+ const layoutService = new LayoutService(createMockElement())
75
+ injector.setExplicitInstance(layoutService, LayoutService)
76
+ const rootElement = document.getElementById('root') as HTMLDivElement
77
+
78
+ initializeShadeRoot({
79
+ injector,
80
+ rootElement,
81
+ jsxElement: (
82
+ <Drawer position="left" variant="collapsible">
83
+ <div id="test-content">Test Content</div>
84
+ </Drawer>
85
+ ),
86
+ })
87
+
88
+ await sleepAsync(50)
89
+ expect(document.body.innerHTML).toContain('test-content')
90
+ })
91
+ })
92
+
93
+ it('should render left drawer with correct positioning class', async () => {
94
+ await usingAsync(new Injector(), async (injector) => {
95
+ const layoutService = new LayoutService(createMockElement())
96
+ injector.setExplicitInstance(layoutService, LayoutService)
97
+ const rootElement = document.getElementById('root') as HTMLDivElement
98
+
99
+ initializeShadeRoot({
100
+ injector,
101
+ rootElement,
102
+ jsxElement: (
103
+ <Drawer position="left" variant="permanent">
104
+ <div>Left Drawer</div>
105
+ </Drawer>
106
+ ),
107
+ })
108
+
109
+ await sleepAsync(50)
110
+ const container = document.querySelector('.drawer-left')
111
+ expect(container).not.toBeNull()
112
+ })
113
+ })
114
+
115
+ it('should render right drawer with correct positioning class', async () => {
116
+ await usingAsync(new Injector(), async (injector) => {
117
+ const layoutService = new LayoutService(createMockElement())
118
+ injector.setExplicitInstance(layoutService, LayoutService)
119
+ const rootElement = document.getElementById('root') as HTMLDivElement
120
+
121
+ initializeShadeRoot({
122
+ injector,
123
+ rootElement,
124
+ jsxElement: (
125
+ <Drawer position="right" variant="permanent">
126
+ <div>Right Drawer</div>
127
+ </Drawer>
128
+ ),
129
+ })
130
+
131
+ await sleepAsync(50)
132
+ const container = document.querySelector('.drawer-right')
133
+ expect(container).not.toBeNull()
134
+ })
135
+ })
136
+ })
137
+
138
+ describe('permanent variant', () => {
139
+ it('should initialize as open', async () => {
140
+ await usingAsync(
141
+ await renderDrawer({
142
+ position: 'left',
143
+ variant: 'permanent',
144
+ }),
145
+ async ({ layoutService }) => {
146
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
147
+ },
148
+ )
149
+ })
150
+
151
+ it('should not have closed class when open', async () => {
152
+ await usingAsync(new Injector(), async (injector) => {
153
+ const layoutService = new LayoutService(createMockElement())
154
+ injector.setExplicitInstance(layoutService, LayoutService)
155
+ const rootElement = document.getElementById('root') as HTMLDivElement
156
+
157
+ initializeShadeRoot({
158
+ injector,
159
+ rootElement,
160
+ jsxElement: (
161
+ <Drawer position="left" variant="permanent">
162
+ <div>Permanent Drawer</div>
163
+ </Drawer>
164
+ ),
165
+ })
166
+
167
+ await sleepAsync(50)
168
+ const container = document.querySelector('.drawer-container')
169
+ expect(container?.classList.contains('closed')).toBe(false)
170
+ })
171
+ })
172
+
173
+ it('should set data-variant attribute to permanent', async () => {
174
+ await usingAsync(new Injector(), async (injector) => {
175
+ const layoutService = new LayoutService(createMockElement())
176
+ injector.setExplicitInstance(layoutService, LayoutService)
177
+ const rootElement = document.getElementById('root') as HTMLDivElement
178
+
179
+ initializeShadeRoot({
180
+ injector,
181
+ rootElement,
182
+ jsxElement: (
183
+ <Drawer position="left" variant="permanent">
184
+ <div>Permanent Drawer</div>
185
+ </Drawer>
186
+ ),
187
+ })
188
+
189
+ await sleepAsync(50)
190
+ const container = document.querySelector('.drawer-container')
191
+ expect(container?.getAttribute('data-variant')).toBe('permanent')
192
+ })
193
+ })
194
+ })
195
+
196
+ describe('collapsible variant', () => {
197
+ it('should initialize as open by default', async () => {
198
+ await usingAsync(
199
+ await renderDrawer({
200
+ position: 'left',
201
+ variant: 'collapsible',
202
+ }),
203
+ async ({ layoutService }) => {
204
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
205
+ },
206
+ )
207
+ })
208
+
209
+ it('should initialize as closed when defaultOpen is false', async () => {
210
+ await usingAsync(
211
+ await renderDrawer({
212
+ position: 'left',
213
+ variant: 'collapsible',
214
+ defaultOpen: false,
215
+ }),
216
+ async ({ layoutService }) => {
217
+ expect(layoutService.drawerState.getValue().left?.open).toBe(false)
218
+ },
219
+ )
220
+ })
221
+
222
+ it('should add closed class when drawer is closed', async () => {
223
+ await usingAsync(new Injector(), async (injector) => {
224
+ const layoutService = new LayoutService(createMockElement())
225
+ injector.setExplicitInstance(layoutService, LayoutService)
226
+ const rootElement = document.getElementById('root') as HTMLDivElement
227
+
228
+ initializeShadeRoot({
229
+ injector,
230
+ rootElement,
231
+ jsxElement: (
232
+ <Drawer position="left" variant="collapsible" defaultOpen={false}>
233
+ <div>Collapsible Drawer</div>
234
+ </Drawer>
235
+ ),
236
+ })
237
+
238
+ await sleepAsync(50)
239
+ const container = document.querySelector('.drawer-container')
240
+ expect(container?.classList.contains('closed')).toBe(true)
241
+ })
242
+ })
243
+
244
+ it('should respond to LayoutService toggle', async () => {
245
+ await usingAsync(new Injector(), async (injector) => {
246
+ const layoutService = new LayoutService(createMockElement())
247
+ injector.setExplicitInstance(layoutService, LayoutService)
248
+ const rootElement = document.getElementById('root') as HTMLDivElement
249
+
250
+ initializeShadeRoot({
251
+ injector,
252
+ rootElement,
253
+ jsxElement: (
254
+ <Drawer position="left" variant="collapsible">
255
+ <div>Collapsible Drawer</div>
256
+ </Drawer>
257
+ ),
258
+ })
259
+
260
+ await sleepAsync(50)
261
+
262
+ // Initially open
263
+ let container = document.querySelector('.drawer-container')
264
+ expect(container?.classList.contains('closed')).toBe(false)
265
+
266
+ // Close via LayoutService
267
+ layoutService.setDrawerOpen('left', false)
268
+ await sleepAsync(50)
269
+
270
+ container = document.querySelector('.drawer-container')
271
+ expect(container?.classList.contains('closed')).toBe(true)
272
+ })
273
+ })
274
+ })
275
+
276
+ describe('temporary variant', () => {
277
+ it('should initialize as closed by default', async () => {
278
+ await usingAsync(
279
+ await renderDrawer({
280
+ position: 'left',
281
+ variant: 'temporary',
282
+ }),
283
+ async ({ layoutService }) => {
284
+ expect(layoutService.drawerState.getValue().left?.open).toBe(false)
285
+ },
286
+ )
287
+ })
288
+
289
+ it('should initialize as open when defaultOpen is true', async () => {
290
+ await usingAsync(
291
+ await renderDrawer({
292
+ position: 'left',
293
+ variant: 'temporary',
294
+ defaultOpen: true,
295
+ }),
296
+ async ({ layoutService }) => {
297
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
298
+ },
299
+ )
300
+ })
301
+
302
+ it('should render backdrop', async () => {
303
+ await usingAsync(new Injector(), async (injector) => {
304
+ const layoutService = new LayoutService(createMockElement())
305
+ injector.setExplicitInstance(layoutService, LayoutService)
306
+ const rootElement = document.getElementById('root') as HTMLDivElement
307
+
308
+ initializeShadeRoot({
309
+ injector,
310
+ rootElement,
311
+ jsxElement: (
312
+ <Drawer position="left" variant="temporary">
313
+ <div>Temporary Drawer</div>
314
+ </Drawer>
315
+ ),
316
+ })
317
+
318
+ await sleepAsync(50)
319
+ expect(document.body.innerHTML).toContain('drawer-backdrop')
320
+ })
321
+ })
322
+
323
+ it('should show backdrop when drawer is open', async () => {
324
+ await usingAsync(new Injector(), async (injector) => {
325
+ const layoutService = new LayoutService(createMockElement())
326
+ injector.setExplicitInstance(layoutService, LayoutService)
327
+ const rootElement = document.getElementById('root') as HTMLDivElement
328
+
329
+ initializeShadeRoot({
330
+ injector,
331
+ rootElement,
332
+ jsxElement: (
333
+ <Drawer position="left" variant="temporary">
334
+ <div>Temporary Drawer</div>
335
+ </Drawer>
336
+ ),
337
+ })
338
+
339
+ await sleepAsync(50)
340
+ layoutService.setDrawerOpen('left', true)
341
+ await sleepAsync(50)
342
+
343
+ const backdrop = document.querySelector('.drawer-backdrop')
344
+ expect(backdrop?.classList.contains('visible')).toBe(true)
345
+ })
346
+ })
347
+
348
+ it('should close drawer when backdrop is clicked', async () => {
349
+ await usingAsync(new Injector(), async (injector) => {
350
+ const layoutService = new LayoutService(createMockElement())
351
+ injector.setExplicitInstance(layoutService, LayoutService)
352
+ const rootElement = document.getElementById('root') as HTMLDivElement
353
+
354
+ initializeShadeRoot({
355
+ injector,
356
+ rootElement,
357
+ jsxElement: (
358
+ <Drawer position="left" variant="temporary">
359
+ <div>Temporary Drawer</div>
360
+ </Drawer>
361
+ ),
362
+ })
363
+
364
+ await sleepAsync(50)
365
+ layoutService.setDrawerOpen('left', true)
366
+ await sleepAsync(50)
367
+
368
+ const backdrop = document.querySelector('.drawer-backdrop') as HTMLElement
369
+ backdrop.click()
370
+ await sleepAsync(50)
371
+
372
+ expect(layoutService.drawerState.getValue().left?.open).toBe(false)
373
+ })
374
+ })
375
+
376
+ it('should use transform for temporary drawer animation', async () => {
377
+ await usingAsync(new Injector(), async (injector) => {
378
+ const layoutService = new LayoutService(createMockElement())
379
+ injector.setExplicitInstance(layoutService, LayoutService)
380
+ const rootElement = document.getElementById('root') as HTMLDivElement
381
+
382
+ initializeShadeRoot({
383
+ injector,
384
+ rootElement,
385
+ jsxElement: (
386
+ <Drawer position="left" variant="temporary" width="300px">
387
+ <div>Temporary Drawer</div>
388
+ </Drawer>
389
+ ),
390
+ })
391
+
392
+ await sleepAsync(50)
393
+
394
+ // When closed, left drawer should be translated off-screen
395
+ let container = document.querySelector('.drawer-container') as HTMLElement
396
+ expect(container.style.transform).toContain('translateX')
397
+ expect(container.style.width).toBe('300px')
398
+
399
+ // When opened
400
+ layoutService.setDrawerOpen('left', true)
401
+ await sleepAsync(50)
402
+
403
+ container = document.querySelector('.drawer-container') as HTMLElement
404
+ expect(container.style.transform).toBe('translateX(0)')
405
+ })
406
+ })
407
+ })
408
+
409
+ describe('width configuration', () => {
410
+ it('should use custom width', async () => {
411
+ await usingAsync(
412
+ await renderDrawer({
413
+ position: 'left',
414
+ variant: 'permanent',
415
+ width: '300px',
416
+ }),
417
+ async ({ layoutService }) => {
418
+ expect(layoutService.drawerState.getValue().left?.width).toBe('300px')
419
+ },
420
+ )
421
+ })
422
+
423
+ it('should use default width of 240px when not specified', async () => {
424
+ await usingAsync(
425
+ await renderDrawer({
426
+ position: 'left',
427
+ variant: 'permanent',
428
+ }),
429
+ async ({ layoutService }) => {
430
+ expect(layoutService.drawerState.getValue().left?.width).toBe('240px')
431
+ },
432
+ )
433
+ })
434
+
435
+ it('should update width in LayoutService when changed', async () => {
436
+ await usingAsync(new Injector(), async (injector) => {
437
+ const layoutService = new LayoutService(createMockElement())
438
+ injector.setExplicitInstance(layoutService, LayoutService)
439
+ const rootElement = document.getElementById('root') as HTMLDivElement
440
+
441
+ // First render with width
442
+ layoutService.initDrawer('left', { open: true, width: '200px', variant: 'collapsible' })
443
+
444
+ initializeShadeRoot({
445
+ injector,
446
+ rootElement,
447
+ jsxElement: (
448
+ <Drawer position="left" variant="permanent" width="300px">
449
+ <div>Drawer</div>
450
+ </Drawer>
451
+ ),
452
+ })
453
+
454
+ await sleepAsync(50)
455
+
456
+ // Width should be updated to 300px
457
+ expect(layoutService.drawerState.getValue().left?.width).toBe('300px')
458
+ })
459
+ })
460
+ })
461
+
462
+ describe('right drawer', () => {
463
+ it('should initialize right drawer state correctly', async () => {
464
+ await usingAsync(
465
+ await renderDrawer({
466
+ position: 'right',
467
+ variant: 'collapsible',
468
+ width: '200px',
469
+ }),
470
+ async ({ layoutService }) => {
471
+ expect(layoutService.drawerState.getValue().right).toEqual({
472
+ open: true,
473
+ width: '200px',
474
+ variant: 'collapsible',
475
+ })
476
+ },
477
+ )
478
+ })
479
+
480
+ it('should render right drawer backdrop for temporary variant', async () => {
481
+ await usingAsync(new Injector(), async (injector) => {
482
+ const layoutService = new LayoutService(createMockElement())
483
+ injector.setExplicitInstance(layoutService, LayoutService)
484
+ const rootElement = document.getElementById('root') as HTMLDivElement
485
+
486
+ initializeShadeRoot({
487
+ injector,
488
+ rootElement,
489
+ jsxElement: (
490
+ <Drawer position="right" variant="temporary">
491
+ <div>Temporary Right Drawer</div>
492
+ </Drawer>
493
+ ),
494
+ })
495
+
496
+ await sleepAsync(50)
497
+ layoutService.setDrawerOpen('right', true)
498
+ await sleepAsync(50)
499
+
500
+ const backdrop = document.querySelector('[data-testid="drawer-backdrop-right"]')
501
+ expect(backdrop).not.toBeNull()
502
+ })
503
+ })
504
+ })
505
+
506
+ describe('responsive breakpoint', () => {
507
+ it('should close collapsible drawer when screen becomes smaller than breakpoint', async () => {
508
+ await usingAsync(new Injector(), async (injector) => {
509
+ const layoutService = new LayoutService(createMockElement())
510
+ injector.setExplicitInstance(layoutService, LayoutService)
511
+ const rootElement = document.getElementById('root') as HTMLDivElement
512
+ const screenService = injector.getInstance(ScreenService)
513
+
514
+ // Start with large screen
515
+ screenService.screenSize.atLeast.md.setValue(true)
516
+
517
+ initializeShadeRoot({
518
+ injector,
519
+ rootElement,
520
+ jsxElement: (
521
+ <Drawer position="left" variant="collapsible" collapseOnBreakpoint="md">
522
+ <div>Responsive Drawer</div>
523
+ </Drawer>
524
+ ),
525
+ })
526
+
527
+ await sleepAsync(50)
528
+
529
+ // Drawer should be open on large screen
530
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
531
+
532
+ // Simulate screen becoming smaller
533
+ screenService.screenSize.atLeast.md.setValue(false)
534
+ await sleepAsync(50)
535
+
536
+ // Drawer should now be closed
537
+ expect(layoutService.drawerState.getValue().left?.open).toBe(false)
538
+ })
539
+ })
540
+
541
+ it('should open collapsible drawer when screen becomes larger than breakpoint', async () => {
542
+ await usingAsync(new Injector(), async (injector) => {
543
+ const layoutService = new LayoutService(createMockElement())
544
+ injector.setExplicitInstance(layoutService, LayoutService)
545
+ const rootElement = document.getElementById('root') as HTMLDivElement
546
+ const screenService = injector.getInstance(ScreenService)
547
+
548
+ // Start with large screen
549
+ screenService.screenSize.atLeast.md.setValue(true)
550
+
551
+ initializeShadeRoot({
552
+ injector,
553
+ rootElement,
554
+ jsxElement: (
555
+ <Drawer position="left" variant="collapsible" collapseOnBreakpoint="md">
556
+ <div>Responsive Drawer</div>
557
+ </Drawer>
558
+ ),
559
+ })
560
+
561
+ await sleepAsync(50)
562
+
563
+ // Drawer should be open on large screen
564
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
565
+
566
+ // Simulate screen becoming smaller
567
+ screenService.screenSize.atLeast.md.setValue(false)
568
+ await sleepAsync(50)
569
+
570
+ // Drawer should now be closed
571
+ expect(layoutService.drawerState.getValue().left?.open).toBe(false)
572
+
573
+ // Simulate screen becoming larger again
574
+ screenService.screenSize.atLeast.md.setValue(true)
575
+ await sleepAsync(50)
576
+
577
+ // Drawer should now be open again
578
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
579
+ })
580
+ })
581
+
582
+ it('should close temporary drawer when screen becomes larger than breakpoint', async () => {
583
+ await usingAsync(new Injector(), async (injector) => {
584
+ const layoutService = new LayoutService(createMockElement())
585
+ injector.setExplicitInstance(layoutService, LayoutService)
586
+ const rootElement = document.getElementById('root') as HTMLDivElement
587
+ const screenService = injector.getInstance(ScreenService)
588
+
589
+ // Start with small screen and drawer open
590
+ screenService.screenSize.atLeast.md.setValue(false)
591
+
592
+ initializeShadeRoot({
593
+ injector,
594
+ rootElement,
595
+ jsxElement: (
596
+ <Drawer position="left" variant="temporary" collapseOnBreakpoint="md" defaultOpen={true}>
597
+ <div>Temporary Mobile Drawer</div>
598
+ </Drawer>
599
+ ),
600
+ })
601
+
602
+ await sleepAsync(50)
603
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
604
+
605
+ // Simulate screen becoming larger
606
+ screenService.screenSize.atLeast.md.setValue(true)
607
+ await sleepAsync(50)
608
+
609
+ // Temporary drawer should close when screen is large (switch to desktop layout)
610
+ expect(layoutService.drawerState.getValue().left?.open).toBe(false)
611
+ })
612
+ })
613
+
614
+ it('should not affect permanent drawers with collapseOnBreakpoint', async () => {
615
+ await usingAsync(new Injector(), async (injector) => {
616
+ const layoutService = new LayoutService(createMockElement())
617
+ injector.setExplicitInstance(layoutService, LayoutService)
618
+ const rootElement = document.getElementById('root') as HTMLDivElement
619
+ const screenService = injector.getInstance(ScreenService)
620
+
621
+ // Start with large screen
622
+ screenService.screenSize.atLeast.md.setValue(true)
623
+
624
+ initializeShadeRoot({
625
+ injector,
626
+ rootElement,
627
+ jsxElement: (
628
+ <Drawer position="left" variant="permanent" collapseOnBreakpoint="md">
629
+ <div>Permanent Drawer</div>
630
+ </Drawer>
631
+ ),
632
+ })
633
+
634
+ await sleepAsync(50)
635
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
636
+
637
+ // Simulate screen becoming smaller
638
+ screenService.screenSize.atLeast.md.setValue(false)
639
+ await sleepAsync(50)
640
+
641
+ // Permanent drawer should remain open
642
+ expect(layoutService.drawerState.getValue().left?.open).toBe(true)
643
+ })
644
+ })
645
+ })
646
+
647
+ describe('data attributes', () => {
648
+ it('should set data-variant attribute', async () => {
649
+ await usingAsync(new Injector(), async (injector) => {
650
+ const layoutService = new LayoutService(createMockElement())
651
+ injector.setExplicitInstance(layoutService, LayoutService)
652
+ const rootElement = document.getElementById('root') as HTMLDivElement
653
+
654
+ initializeShadeRoot({
655
+ injector,
656
+ rootElement,
657
+ jsxElement: (
658
+ <Drawer position="left" variant="collapsible">
659
+ <div>Drawer</div>
660
+ </Drawer>
661
+ ),
662
+ })
663
+
664
+ await sleepAsync(50)
665
+ const container = document.querySelector('.drawer-container')
666
+ expect(container?.getAttribute('data-variant')).toBe('collapsible')
667
+ })
668
+ })
669
+
670
+ it('should set data-open attribute', async () => {
671
+ await usingAsync(new Injector(), async (injector) => {
672
+ const layoutService = new LayoutService(createMockElement())
673
+ injector.setExplicitInstance(layoutService, LayoutService)
674
+ const rootElement = document.getElementById('root') as HTMLDivElement
675
+
676
+ initializeShadeRoot({
677
+ injector,
678
+ rootElement,
679
+ jsxElement: (
680
+ <Drawer position="left" variant="collapsible">
681
+ <div>Drawer</div>
682
+ </Drawer>
683
+ ),
684
+ })
685
+
686
+ await sleepAsync(50)
687
+ let container = document.querySelector('.drawer-container')
688
+ expect(container?.getAttribute('data-open')).toBe('true')
689
+
690
+ layoutService.setDrawerOpen('left', false)
691
+ await sleepAsync(50)
692
+
693
+ container = document.querySelector('.drawer-container')
694
+ expect(container?.getAttribute('data-open')).toBe('false')
695
+ })
696
+ })
697
+
698
+ it('should set data-testid attribute', async () => {
699
+ await usingAsync(new Injector(), async (injector) => {
700
+ const layoutService = new LayoutService(createMockElement())
701
+ injector.setExplicitInstance(layoutService, LayoutService)
702
+ const rootElement = document.getElementById('root') as HTMLDivElement
703
+
704
+ initializeShadeRoot({
705
+ injector,
706
+ rootElement,
707
+ jsxElement: (
708
+ <Drawer position="left" variant="collapsible">
709
+ <div>Drawer</div>
710
+ </Drawer>
711
+ ),
712
+ })
713
+
714
+ await sleepAsync(50)
715
+ const container = document.querySelector('[data-testid="drawer-left"]')
716
+ expect(container).not.toBeNull()
717
+ })
718
+ })
719
+ })
720
+
721
+ describe('preserving user interactions', () => {
722
+ it('should not reset drawer state if already initialized', async () => {
723
+ await usingAsync(new Injector(), async (injector) => {
724
+ const layoutService = new LayoutService(createMockElement())
725
+ injector.setExplicitInstance(layoutService, LayoutService)
726
+ const rootElement = document.getElementById('root') as HTMLDivElement
727
+
728
+ // Pre-initialize drawer as closed
729
+ layoutService.initDrawer('left', { open: false, width: '240px', variant: 'collapsible' })
730
+
731
+ initializeShadeRoot({
732
+ injector,
733
+ rootElement,
734
+ jsxElement: (
735
+ <Drawer position="left" variant="collapsible" defaultOpen={true}>
736
+ <div>Drawer</div>
737
+ </Drawer>
738
+ ),
739
+ })
740
+
741
+ await sleepAsync(50)
742
+
743
+ // Should preserve the closed state, not reset to defaultOpen
744
+ expect(layoutService.drawerState.getValue().left?.open).toBe(false)
745
+ })
746
+ })
747
+ })
748
+ })