@furystack/shades-common-components 11.0.0 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (768) hide show
  1. package/CHANGELOG.md +443 -0
  2. package/esm/components/accordion/accordion-item.d.ts +31 -0
  3. package/esm/components/accordion/accordion-item.d.ts.map +1 -0
  4. package/esm/components/accordion/accordion-item.js +147 -0
  5. package/esm/components/accordion/accordion-item.js.map +1 -0
  6. package/esm/components/accordion/accordion.d.ts +27 -0
  7. package/esm/components/accordion/accordion.d.ts.map +1 -0
  8. package/esm/components/accordion/accordion.js +39 -0
  9. package/esm/components/accordion/accordion.js.map +1 -0
  10. package/esm/components/accordion/accordion.spec.d.ts +2 -0
  11. package/esm/components/accordion/accordion.spec.d.ts.map +1 -0
  12. package/esm/components/accordion/accordion.spec.js +284 -0
  13. package/esm/components/accordion/accordion.spec.js.map +1 -0
  14. package/esm/components/accordion/index.d.ts +3 -0
  15. package/esm/components/accordion/index.d.ts.map +1 -0
  16. package/esm/components/accordion/index.js +3 -0
  17. package/esm/components/accordion/index.js.map +1 -0
  18. package/esm/components/alert.d.ts +21 -0
  19. package/esm/components/alert.d.ts.map +1 -0
  20. package/esm/components/alert.js +131 -0
  21. package/esm/components/alert.js.map +1 -0
  22. package/esm/components/alert.spec.d.ts +2 -0
  23. package/esm/components/alert.spec.d.ts.map +1 -0
  24. package/esm/components/alert.spec.js +177 -0
  25. package/esm/components/alert.spec.js.map +1 -0
  26. package/esm/components/app-bar-link.d.ts +22 -2
  27. package/esm/components/app-bar-link.d.ts.map +1 -1
  28. package/esm/components/app-bar-link.js +20 -7
  29. package/esm/components/app-bar-link.js.map +1 -1
  30. package/esm/components/app-bar-link.spec.js +22 -19
  31. package/esm/components/app-bar-link.spec.js.map +1 -1
  32. package/esm/components/app-bar.d.ts +2 -0
  33. package/esm/components/app-bar.d.ts.map +1 -1
  34. package/esm/components/app-bar.js +16 -11
  35. package/esm/components/app-bar.js.map +1 -1
  36. package/esm/components/app-bar.spec.js +67 -52
  37. package/esm/components/app-bar.spec.js.map +1 -1
  38. package/esm/components/avatar.d.ts +2 -0
  39. package/esm/components/avatar.d.ts.map +1 -1
  40. package/esm/components/avatar.js +40 -37
  41. package/esm/components/avatar.js.map +1 -1
  42. package/esm/components/badge.d.ts +35 -0
  43. package/esm/components/badge.d.ts.map +1 -0
  44. package/esm/components/badge.js +68 -0
  45. package/esm/components/badge.js.map +1 -0
  46. package/esm/components/badge.spec.d.ts +2 -0
  47. package/esm/components/badge.spec.d.ts.map +1 -0
  48. package/esm/components/badge.spec.js +157 -0
  49. package/esm/components/badge.spec.js.map +1 -0
  50. package/esm/components/breadcrumb.d.ts +103 -0
  51. package/esm/components/breadcrumb.d.ts.map +1 -0
  52. package/esm/components/breadcrumb.js +121 -0
  53. package/esm/components/breadcrumb.js.map +1 -0
  54. package/esm/components/breadcrumb.spec.d.ts +2 -0
  55. package/esm/components/breadcrumb.spec.d.ts.map +1 -0
  56. package/esm/components/breadcrumb.spec.js +251 -0
  57. package/esm/components/breadcrumb.spec.js.map +1 -0
  58. package/esm/components/button-group.d.ts +85 -0
  59. package/esm/components/button-group.d.ts.map +1 -0
  60. package/esm/components/button-group.js +290 -0
  61. package/esm/components/button-group.js.map +1 -0
  62. package/esm/components/button-group.spec.d.ts +2 -0
  63. package/esm/components/button-group.spec.d.ts.map +1 -0
  64. package/esm/components/button-group.spec.js +502 -0
  65. package/esm/components/button-group.spec.js.map +1 -0
  66. package/esm/components/button.d.ts +44 -2
  67. package/esm/components/button.d.ts.map +1 -1
  68. package/esm/components/button.js +82 -73
  69. package/esm/components/button.js.map +1 -1
  70. package/esm/components/button.spec.js +205 -50
  71. package/esm/components/button.spec.js.map +1 -1
  72. package/esm/components/card.d.ts +117 -0
  73. package/esm/components/card.d.ts.map +1 -0
  74. package/esm/components/card.js +181 -0
  75. package/esm/components/card.js.map +1 -0
  76. package/esm/components/card.spec.d.ts +2 -0
  77. package/esm/components/card.spec.d.ts.map +1 -0
  78. package/esm/components/card.spec.js +278 -0
  79. package/esm/components/card.spec.js.map +1 -0
  80. package/esm/components/carousel.d.ts +50 -0
  81. package/esm/components/carousel.d.ts.map +1 -0
  82. package/esm/components/carousel.js +263 -0
  83. package/esm/components/carousel.js.map +1 -0
  84. package/esm/components/carousel.spec.d.ts +2 -0
  85. package/esm/components/carousel.spec.d.ts.map +1 -0
  86. package/esm/components/carousel.spec.js +677 -0
  87. package/esm/components/carousel.spec.js.map +1 -0
  88. package/esm/components/chip.d.ts +23 -0
  89. package/esm/components/chip.d.ts.map +1 -0
  90. package/esm/components/chip.js +139 -0
  91. package/esm/components/chip.js.map +1 -0
  92. package/esm/components/chip.spec.d.ts +2 -0
  93. package/esm/components/chip.spec.d.ts.map +1 -0
  94. package/esm/components/chip.spec.js +142 -0
  95. package/esm/components/chip.spec.js.map +1 -0
  96. package/esm/components/circular-progress.d.ts +37 -0
  97. package/esm/components/circular-progress.d.ts.map +1 -0
  98. package/esm/components/circular-progress.js +84 -0
  99. package/esm/components/circular-progress.js.map +1 -0
  100. package/esm/components/circular-progress.spec.d.ts +2 -0
  101. package/esm/components/circular-progress.spec.d.ts.map +1 -0
  102. package/esm/components/circular-progress.spec.js +228 -0
  103. package/esm/components/circular-progress.spec.js.map +1 -0
  104. package/esm/components/command-palette/command-palette-input.d.ts +3 -0
  105. package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
  106. package/esm/components/command-palette/command-palette-input.js +17 -9
  107. package/esm/components/command-palette/command-palette-input.js.map +1 -1
  108. package/esm/components/command-palette/command-palette-input.spec.js +172 -161
  109. package/esm/components/command-palette/command-palette-input.spec.js.map +1 -1
  110. package/esm/components/command-palette/command-palette-manager.spec.js +130 -114
  111. package/esm/components/command-palette/command-palette-manager.spec.js.map +1 -1
  112. package/esm/components/command-palette/command-palette-suggestion-list.d.ts +2 -0
  113. package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
  114. package/esm/components/command-palette/command-palette-suggestion-list.js +20 -20
  115. package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  116. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +296 -278
  117. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
  118. package/esm/components/command-palette/index.d.ts +2 -0
  119. package/esm/components/command-palette/index.d.ts.map +1 -1
  120. package/esm/components/command-palette/index.js +25 -94
  121. package/esm/components/command-palette/index.js.map +1 -1
  122. package/esm/components/command-palette/index.spec.js +12 -12
  123. package/esm/components/command-palette/index.spec.js.map +1 -1
  124. package/esm/components/context-menu/context-menu-item.d.ts +9 -0
  125. package/esm/components/context-menu/context-menu-item.d.ts.map +1 -0
  126. package/esm/components/context-menu/context-menu-item.js +56 -0
  127. package/esm/components/context-menu/context-menu-item.js.map +1 -0
  128. package/esm/components/context-menu/context-menu-manager.d.ts +52 -0
  129. package/esm/components/context-menu/context-menu-manager.d.ts.map +1 -0
  130. package/esm/components/context-menu/context-menu-manager.js +128 -0
  131. package/esm/components/context-menu/context-menu-manager.js.map +1 -0
  132. package/esm/components/context-menu/context-menu-manager.spec.d.ts +2 -0
  133. package/esm/components/context-menu/context-menu-manager.spec.d.ts.map +1 -0
  134. package/esm/components/context-menu/context-menu-manager.spec.js +326 -0
  135. package/esm/components/context-menu/context-menu-manager.spec.js.map +1 -0
  136. package/esm/components/context-menu/context-menu.d.ts +8 -0
  137. package/esm/components/context-menu/context-menu.d.ts.map +1 -0
  138. package/esm/components/context-menu/context-menu.js +79 -0
  139. package/esm/components/context-menu/context-menu.js.map +1 -0
  140. package/esm/components/context-menu/context-menu.spec.d.ts +2 -0
  141. package/esm/components/context-menu/context-menu.spec.d.ts.map +1 -0
  142. package/esm/components/context-menu/context-menu.spec.js +282 -0
  143. package/esm/components/context-menu/context-menu.spec.js.map +1 -0
  144. package/esm/components/context-menu/index.d.ts +4 -0
  145. package/esm/components/context-menu/index.d.ts.map +1 -0
  146. package/esm/components/context-menu/index.js +4 -0
  147. package/esm/components/context-menu/index.js.map +1 -0
  148. package/esm/components/data-grid/body.spec.js +194 -184
  149. package/esm/components/data-grid/body.spec.js.map +1 -1
  150. package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
  151. package/esm/components/data-grid/data-grid-row.js +66 -54
  152. package/esm/components/data-grid/data-grid-row.js.map +1 -1
  153. package/esm/components/data-grid/data-grid-row.spec.js +127 -95
  154. package/esm/components/data-grid/data-grid-row.spec.js.map +1 -1
  155. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  156. package/esm/components/data-grid/data-grid.js +17 -16
  157. package/esm/components/data-grid/data-grid.js.map +1 -1
  158. package/esm/components/data-grid/data-grid.spec.js +364 -430
  159. package/esm/components/data-grid/data-grid.spec.js.map +1 -1
  160. package/esm/components/data-grid/footer.spec.js +215 -203
  161. package/esm/components/data-grid/footer.spec.js.map +1 -1
  162. package/esm/components/data-grid/header.d.ts +3 -1
  163. package/esm/components/data-grid/header.d.ts.map +1 -1
  164. package/esm/components/data-grid/header.js +42 -30
  165. package/esm/components/data-grid/header.js.map +1 -1
  166. package/esm/components/data-grid/header.spec.js +330 -307
  167. package/esm/components/data-grid/header.spec.js.map +1 -1
  168. package/esm/components/data-grid/selection-cell.d.ts +2 -0
  169. package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
  170. package/esm/components/data-grid/selection-cell.js +2 -7
  171. package/esm/components/data-grid/selection-cell.js.map +1 -1
  172. package/esm/components/data-grid/selection-cell.spec.js +45 -36
  173. package/esm/components/data-grid/selection-cell.spec.js.map +1 -1
  174. package/esm/components/dialog.d.ts +46 -0
  175. package/esm/components/dialog.d.ts.map +1 -0
  176. package/esm/components/dialog.js +178 -0
  177. package/esm/components/dialog.js.map +1 -0
  178. package/esm/components/dialog.spec.d.ts +2 -0
  179. package/esm/components/dialog.spec.d.ts.map +1 -0
  180. package/esm/components/dialog.spec.js +113 -0
  181. package/esm/components/dialog.spec.js.map +1 -0
  182. package/esm/components/divider.d.ts +22 -0
  183. package/esm/components/divider.d.ts.map +1 -0
  184. package/esm/components/divider.js +113 -0
  185. package/esm/components/divider.js.map +1 -0
  186. package/esm/components/divider.spec.d.ts +2 -0
  187. package/esm/components/divider.spec.d.ts.map +1 -0
  188. package/esm/components/divider.spec.js +136 -0
  189. package/esm/components/divider.spec.js.map +1 -0
  190. package/esm/components/drawer/drawer-toggle-button.d.ts +36 -0
  191. package/esm/components/drawer/drawer-toggle-button.d.ts.map +1 -0
  192. package/esm/components/drawer/drawer-toggle-button.js +94 -0
  193. package/esm/components/drawer/drawer-toggle-button.js.map +1 -0
  194. package/esm/components/drawer/drawer-toggle-button.spec.d.ts +2 -0
  195. package/esm/components/drawer/drawer-toggle-button.spec.d.ts.map +1 -0
  196. package/esm/components/drawer/drawer-toggle-button.spec.js +306 -0
  197. package/esm/components/drawer/drawer-toggle-button.spec.js.map +1 -0
  198. package/esm/components/drawer/index.d.ts +56 -0
  199. package/esm/components/drawer/index.d.ts.map +1 -0
  200. package/esm/components/drawer/index.js +172 -0
  201. package/esm/components/drawer/index.js.map +1 -0
  202. package/esm/components/drawer/index.spec.d.ts +2 -0
  203. package/esm/components/drawer/index.spec.d.ts.map +1 -0
  204. package/esm/components/drawer/index.spec.js +538 -0
  205. package/esm/components/drawer/index.spec.js.map +1 -0
  206. package/esm/components/dropdown.d.ts +15 -0
  207. package/esm/components/dropdown.d.ts.map +1 -0
  208. package/esm/components/dropdown.js +262 -0
  209. package/esm/components/dropdown.js.map +1 -0
  210. package/esm/components/dropdown.spec.d.ts +2 -0
  211. package/esm/components/dropdown.spec.d.ts.map +1 -0
  212. package/esm/components/dropdown.spec.js +372 -0
  213. package/esm/components/dropdown.spec.js.map +1 -0
  214. package/esm/components/fab.d.ts +10 -1
  215. package/esm/components/fab.d.ts.map +1 -1
  216. package/esm/components/fab.js +24 -8
  217. package/esm/components/fab.js.map +1 -1
  218. package/esm/components/fab.spec.js +50 -39
  219. package/esm/components/fab.spec.js.map +1 -1
  220. package/esm/components/form.d.ts.map +1 -1
  221. package/esm/components/form.js +9 -7
  222. package/esm/components/form.js.map +1 -1
  223. package/esm/components/form.spec.js +209 -199
  224. package/esm/components/form.spec.js.map +1 -1
  225. package/esm/components/grid.js +10 -10
  226. package/esm/components/grid.js.map +1 -1
  227. package/esm/components/grid.spec.js +109 -85
  228. package/esm/components/grid.spec.js.map +1 -1
  229. package/esm/components/icons/icon-definitions.d.ts +140 -0
  230. package/esm/components/icons/icon-definitions.d.ts.map +1 -0
  231. package/esm/components/icons/icon-definitions.js +432 -0
  232. package/esm/components/icons/icon-definitions.js.map +1 -0
  233. package/esm/components/icons/icon-definitions.spec.d.ts +2 -0
  234. package/esm/components/icons/icon-definitions.spec.d.ts.map +1 -0
  235. package/esm/components/icons/icon-definitions.spec.js +59 -0
  236. package/esm/components/icons/icon-definitions.spec.js.map +1 -0
  237. package/esm/components/icons/icon-types.d.ts +48 -0
  238. package/esm/components/icons/icon-types.d.ts.map +1 -0
  239. package/esm/components/icons/icon-types.js +2 -0
  240. package/esm/components/icons/icon-types.js.map +1 -0
  241. package/esm/components/icons/icon.d.ts +56 -0
  242. package/esm/components/icons/icon.d.ts.map +1 -0
  243. package/esm/components/icons/icon.js +61 -0
  244. package/esm/components/icons/icon.js.map +1 -0
  245. package/esm/components/icons/icon.spec.d.ts +2 -0
  246. package/esm/components/icons/icon.spec.d.ts.map +1 -0
  247. package/esm/components/icons/icon.spec.js +224 -0
  248. package/esm/components/icons/icon.spec.js.map +1 -0
  249. package/esm/components/icons/index.d.ts +5 -0
  250. package/esm/components/icons/index.d.ts.map +1 -0
  251. package/esm/components/icons/index.js +3 -0
  252. package/esm/components/icons/index.js.map +1 -0
  253. package/esm/components/image.d.ts +62 -0
  254. package/esm/components/image.d.ts.map +1 -0
  255. package/esm/components/image.js +348 -0
  256. package/esm/components/image.js.map +1 -0
  257. package/esm/components/image.spec.d.ts +2 -0
  258. package/esm/components/image.spec.d.ts.map +1 -0
  259. package/esm/components/image.spec.js +542 -0
  260. package/esm/components/image.spec.js.map +1 -0
  261. package/esm/components/index.d.ts +32 -4
  262. package/esm/components/index.d.ts.map +1 -1
  263. package/esm/components/index.js +32 -4
  264. package/esm/components/index.js.map +1 -1
  265. package/esm/components/inputs/autocomplete.d.ts +2 -0
  266. package/esm/components/inputs/autocomplete.d.ts.map +1 -1
  267. package/esm/components/inputs/autocomplete.js +10 -6
  268. package/esm/components/inputs/autocomplete.js.map +1 -1
  269. package/esm/components/inputs/autocomplete.spec.js +10 -1
  270. package/esm/components/inputs/autocomplete.spec.js.map +1 -1
  271. package/esm/components/inputs/checkbox.d.ts +50 -0
  272. package/esm/components/inputs/checkbox.d.ts.map +1 -0
  273. package/esm/components/inputs/checkbox.js +126 -0
  274. package/esm/components/inputs/checkbox.js.map +1 -0
  275. package/esm/components/inputs/checkbox.spec.d.ts +2 -0
  276. package/esm/components/inputs/checkbox.spec.d.ts.map +1 -0
  277. package/esm/components/inputs/checkbox.spec.js +287 -0
  278. package/esm/components/inputs/checkbox.spec.js.map +1 -0
  279. package/esm/components/inputs/index.d.ts +7 -0
  280. package/esm/components/inputs/index.d.ts.map +1 -1
  281. package/esm/components/inputs/index.js +7 -0
  282. package/esm/components/inputs/index.js.map +1 -1
  283. package/esm/components/inputs/input-number.d.ts +79 -0
  284. package/esm/components/inputs/input-number.d.ts.map +1 -0
  285. package/esm/components/inputs/input-number.js +232 -0
  286. package/esm/components/inputs/input-number.js.map +1 -0
  287. package/esm/components/inputs/input-number.spec.d.ts +2 -0
  288. package/esm/components/inputs/input-number.spec.d.ts.map +1 -0
  289. package/esm/components/inputs/input-number.spec.js +516 -0
  290. package/esm/components/inputs/input-number.spec.js.map +1 -0
  291. package/esm/components/inputs/input.d.ts +2 -1
  292. package/esm/components/inputs/input.d.ts.map +1 -1
  293. package/esm/components/inputs/input.js +86 -116
  294. package/esm/components/inputs/input.js.map +1 -1
  295. package/esm/components/inputs/input.spec.js +461 -427
  296. package/esm/components/inputs/input.spec.js.map +1 -1
  297. package/esm/components/inputs/radio-group.d.ts +38 -0
  298. package/esm/components/inputs/radio-group.d.ts.map +1 -0
  299. package/esm/components/inputs/radio-group.js +58 -0
  300. package/esm/components/inputs/radio-group.js.map +1 -0
  301. package/esm/components/inputs/radio-group.spec.d.ts +2 -0
  302. package/esm/components/inputs/radio-group.spec.d.ts.map +1 -0
  303. package/esm/components/inputs/radio-group.spec.js +201 -0
  304. package/esm/components/inputs/radio-group.spec.js.map +1 -0
  305. package/esm/components/inputs/radio.d.ts +42 -0
  306. package/esm/components/inputs/radio.d.ts.map +1 -0
  307. package/esm/components/inputs/radio.js +134 -0
  308. package/esm/components/inputs/radio.js.map +1 -0
  309. package/esm/components/inputs/radio.spec.d.ts +2 -0
  310. package/esm/components/inputs/radio.spec.d.ts.map +1 -0
  311. package/esm/components/inputs/radio.spec.js +211 -0
  312. package/esm/components/inputs/radio.spec.js.map +1 -0
  313. package/esm/components/inputs/select.d.ts +67 -0
  314. package/esm/components/inputs/select.d.ts.map +1 -0
  315. package/esm/components/inputs/select.js +581 -0
  316. package/esm/components/inputs/select.js.map +1 -0
  317. package/esm/components/inputs/select.spec.d.ts +2 -0
  318. package/esm/components/inputs/select.spec.d.ts.map +1 -0
  319. package/esm/components/inputs/select.spec.js +1009 -0
  320. package/esm/components/inputs/select.spec.js.map +1 -0
  321. package/esm/components/inputs/slider.d.ts +66 -0
  322. package/esm/components/inputs/slider.d.ts.map +1 -0
  323. package/esm/components/inputs/slider.js +526 -0
  324. package/esm/components/inputs/slider.js.map +1 -0
  325. package/esm/components/inputs/slider.spec.d.ts +2 -0
  326. package/esm/components/inputs/slider.spec.d.ts.map +1 -0
  327. package/esm/components/inputs/slider.spec.js +812 -0
  328. package/esm/components/inputs/slider.spec.js.map +1 -0
  329. package/esm/components/inputs/switch.d.ts +50 -0
  330. package/esm/components/inputs/switch.d.ts.map +1 -0
  331. package/esm/components/inputs/switch.js +138 -0
  332. package/esm/components/inputs/switch.js.map +1 -0
  333. package/esm/components/inputs/switch.spec.d.ts +2 -0
  334. package/esm/components/inputs/switch.spec.d.ts.map +1 -0
  335. package/esm/components/inputs/switch.spec.js +313 -0
  336. package/esm/components/inputs/switch.spec.js.map +1 -0
  337. package/esm/components/inputs/text-area.d.ts +2 -0
  338. package/esm/components/inputs/text-area.d.ts.map +1 -1
  339. package/esm/components/inputs/text-area.js +13 -21
  340. package/esm/components/inputs/text-area.js.map +1 -1
  341. package/esm/components/inputs/text-area.spec.js +171 -156
  342. package/esm/components/inputs/text-area.spec.js.map +1 -1
  343. package/esm/components/linear-progress.d.ts +32 -0
  344. package/esm/components/linear-progress.d.ts.map +1 -0
  345. package/esm/components/linear-progress.js +79 -0
  346. package/esm/components/linear-progress.js.map +1 -0
  347. package/esm/components/linear-progress.spec.d.ts +2 -0
  348. package/esm/components/linear-progress.spec.d.ts.map +1 -0
  349. package/esm/components/linear-progress.spec.js +251 -0
  350. package/esm/components/linear-progress.spec.js.map +1 -0
  351. package/esm/components/list/index.d.ts +3 -0
  352. package/esm/components/list/index.d.ts.map +1 -0
  353. package/esm/components/list/index.js +3 -0
  354. package/esm/components/list/index.js.map +1 -0
  355. package/esm/components/list/list-item.d.ts +13 -0
  356. package/esm/components/list/list-item.d.ts.map +1 -0
  357. package/esm/components/list/list-item.js +81 -0
  358. package/esm/components/list/list-item.js.map +1 -0
  359. package/esm/components/list/list.d.ts +18 -0
  360. package/esm/components/list/list.d.ts.map +1 -0
  361. package/esm/components/list/list.js +42 -0
  362. package/esm/components/list/list.js.map +1 -0
  363. package/esm/components/list/list.spec.d.ts +2 -0
  364. package/esm/components/list/list.spec.d.ts.map +1 -0
  365. package/esm/components/list/list.spec.js +540 -0
  366. package/esm/components/list/list.spec.js.map +1 -0
  367. package/esm/components/loader.d.ts +2 -0
  368. package/esm/components/loader.d.ts.map +1 -1
  369. package/esm/components/loader.js +18 -10
  370. package/esm/components/loader.js.map +1 -1
  371. package/esm/components/loader.spec.js +191 -175
  372. package/esm/components/loader.spec.js.map +1 -1
  373. package/esm/components/menu/index.d.ts +3 -0
  374. package/esm/components/menu/index.d.ts.map +1 -0
  375. package/esm/components/menu/index.js +3 -0
  376. package/esm/components/menu/index.js.map +1 -0
  377. package/esm/components/menu/menu-types.d.ts +27 -0
  378. package/esm/components/menu/menu-types.d.ts.map +1 -0
  379. package/esm/components/menu/menu-types.js +22 -0
  380. package/esm/components/menu/menu-types.js.map +1 -0
  381. package/esm/components/menu/menu-types.spec.d.ts +2 -0
  382. package/esm/components/menu/menu-types.spec.d.ts.map +1 -0
  383. package/esm/components/menu/menu-types.spec.js +103 -0
  384. package/esm/components/menu/menu-types.spec.js.map +1 -0
  385. package/esm/components/menu/menu.d.ts +17 -0
  386. package/esm/components/menu/menu.d.ts.map +1 -0
  387. package/esm/components/menu/menu.js +240 -0
  388. package/esm/components/menu/menu.js.map +1 -0
  389. package/esm/components/menu/menu.spec.d.ts +2 -0
  390. package/esm/components/menu/menu.spec.d.ts.map +1 -0
  391. package/esm/components/menu/menu.spec.js +427 -0
  392. package/esm/components/menu/menu.spec.js.map +1 -0
  393. package/esm/components/modal.d.ts +3 -2
  394. package/esm/components/modal.d.ts.map +1 -1
  395. package/esm/components/modal.js +8 -5
  396. package/esm/components/modal.js.map +1 -1
  397. package/esm/components/modal.spec.js +50 -43
  398. package/esm/components/modal.spec.js.map +1 -1
  399. package/esm/components/noty-list.d.ts +4 -0
  400. package/esm/components/noty-list.d.ts.map +1 -1
  401. package/esm/components/noty-list.js +65 -53
  402. package/esm/components/noty-list.js.map +1 -1
  403. package/esm/components/noty-list.spec.js +71 -68
  404. package/esm/components/noty-list.spec.js.map +1 -1
  405. package/esm/components/page-container/index.d.ts +54 -0
  406. package/esm/components/page-container/index.d.ts.map +1 -0
  407. package/esm/components/page-container/index.js +63 -0
  408. package/esm/components/page-container/index.js.map +1 -0
  409. package/esm/components/page-container/index.spec.d.ts +2 -0
  410. package/esm/components/page-container/index.spec.d.ts.map +1 -0
  411. package/esm/components/page-container/index.spec.js +217 -0
  412. package/esm/components/page-container/index.spec.js.map +1 -0
  413. package/esm/components/page-container/page-header.d.ts +57 -0
  414. package/esm/components/page-container/page-header.d.ts.map +1 -0
  415. package/esm/components/page-container/page-header.js +93 -0
  416. package/esm/components/page-container/page-header.js.map +1 -0
  417. package/esm/components/page-container/page-header.spec.d.ts +2 -0
  418. package/esm/components/page-container/page-header.spec.d.ts.map +1 -0
  419. package/esm/components/page-container/page-header.spec.js +230 -0
  420. package/esm/components/page-container/page-header.spec.js.map +1 -0
  421. package/esm/components/page-layout/index.d.ts +83 -0
  422. package/esm/components/page-layout/index.d.ts.map +1 -0
  423. package/esm/components/page-layout/index.js +288 -0
  424. package/esm/components/page-layout/index.js.map +1 -0
  425. package/esm/components/page-layout/index.spec.d.ts +2 -0
  426. package/esm/components/page-layout/index.spec.d.ts.map +1 -0
  427. package/esm/components/page-layout/index.spec.js +637 -0
  428. package/esm/components/page-layout/index.spec.js.map +1 -0
  429. package/esm/components/pagination.d.ts +43 -0
  430. package/esm/components/pagination.d.ts.map +1 -0
  431. package/esm/components/pagination.js +165 -0
  432. package/esm/components/pagination.js.map +1 -0
  433. package/esm/components/pagination.spec.d.ts +2 -0
  434. package/esm/components/pagination.spec.d.ts.map +1 -0
  435. package/esm/components/pagination.spec.js +195 -0
  436. package/esm/components/pagination.spec.js.map +1 -0
  437. package/esm/components/paper.d.ts +3 -1
  438. package/esm/components/paper.d.ts.map +1 -1
  439. package/esm/components/paper.js +11 -9
  440. package/esm/components/paper.js.map +1 -1
  441. package/esm/components/paper.spec.js +26 -18
  442. package/esm/components/paper.spec.js.map +1 -1
  443. package/esm/components/rating.d.ts +62 -0
  444. package/esm/components/rating.d.ts.map +1 -0
  445. package/esm/components/rating.js +201 -0
  446. package/esm/components/rating.js.map +1 -0
  447. package/esm/components/rating.spec.d.ts +2 -0
  448. package/esm/components/rating.spec.d.ts.map +1 -0
  449. package/esm/components/rating.spec.js +663 -0
  450. package/esm/components/rating.spec.js.map +1 -0
  451. package/esm/components/result.d.ts +37 -0
  452. package/esm/components/result.d.ts.map +1 -0
  453. package/esm/components/result.js +109 -0
  454. package/esm/components/result.js.map +1 -0
  455. package/esm/components/result.spec.d.ts +2 -0
  456. package/esm/components/result.spec.d.ts.map +1 -0
  457. package/esm/components/result.spec.js +159 -0
  458. package/esm/components/result.spec.js.map +1 -0
  459. package/esm/components/searchable-input-styles.d.ts +8 -0
  460. package/esm/components/searchable-input-styles.d.ts.map +1 -0
  461. package/esm/components/searchable-input-styles.js +71 -0
  462. package/esm/components/searchable-input-styles.js.map +1 -0
  463. package/esm/components/skeleton.d.ts +2 -0
  464. package/esm/components/skeleton.d.ts.map +1 -1
  465. package/esm/components/skeleton.js +19 -6
  466. package/esm/components/skeleton.js.map +1 -1
  467. package/esm/components/skeleton.spec.js +103 -95
  468. package/esm/components/skeleton.spec.js.map +1 -1
  469. package/esm/components/styles.d.ts.map +1 -1
  470. package/esm/components/styles.js +14 -13
  471. package/esm/components/styles.js.map +1 -1
  472. package/esm/components/styles.spec.js +27 -26
  473. package/esm/components/styles.spec.js.map +1 -1
  474. package/esm/components/suggest/index.d.ts.map +1 -1
  475. package/esm/components/suggest/index.js +24 -85
  476. package/esm/components/suggest/index.js.map +1 -1
  477. package/esm/components/suggest/index.spec.js +402 -378
  478. package/esm/components/suggest/index.spec.js.map +1 -1
  479. package/esm/components/suggest/suggest-input.d.ts +2 -0
  480. package/esm/components/suggest/suggest-input.d.ts.map +1 -1
  481. package/esm/components/suggest/suggest-input.js +10 -8
  482. package/esm/components/suggest/suggest-input.js.map +1 -1
  483. package/esm/components/suggest/suggest-input.spec.js +83 -71
  484. package/esm/components/suggest/suggest-input.spec.js.map +1 -1
  485. package/esm/components/suggest/suggest-manager.spec.js +102 -92
  486. package/esm/components/suggest/suggest-manager.spec.js.map +1 -1
  487. package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
  488. package/esm/components/suggest/suggestion-list.js +21 -22
  489. package/esm/components/suggest/suggestion-list.js.map +1 -1
  490. package/esm/components/suggest/suggestion-list.spec.js +165 -146
  491. package/esm/components/suggest/suggestion-list.spec.js.map +1 -1
  492. package/esm/components/tabs.d.ts +18 -2
  493. package/esm/components/tabs.d.ts.map +1 -1
  494. package/esm/components/tabs.js +154 -14
  495. package/esm/components/tabs.js.map +1 -1
  496. package/esm/components/tabs.spec.js +295 -7
  497. package/esm/components/tabs.spec.js.map +1 -1
  498. package/esm/components/timeline.d.ts +53 -0
  499. package/esm/components/timeline.d.ts.map +1 -0
  500. package/esm/components/timeline.js +162 -0
  501. package/esm/components/timeline.js.map +1 -0
  502. package/esm/components/timeline.spec.d.ts +2 -0
  503. package/esm/components/timeline.spec.d.ts.map +1 -0
  504. package/esm/components/timeline.spec.js +209 -0
  505. package/esm/components/timeline.spec.js.map +1 -0
  506. package/esm/components/tooltip.d.ts +25 -0
  507. package/esm/components/tooltip.d.ts.map +1 -0
  508. package/esm/components/tooltip.js +113 -0
  509. package/esm/components/tooltip.js.map +1 -0
  510. package/esm/components/tooltip.spec.d.ts +2 -0
  511. package/esm/components/tooltip.spec.d.ts.map +1 -0
  512. package/esm/components/tooltip.spec.js +152 -0
  513. package/esm/components/tooltip.spec.js.map +1 -0
  514. package/esm/components/tree/index.d.ts +3 -0
  515. package/esm/components/tree/index.d.ts.map +1 -0
  516. package/esm/components/tree/index.js +3 -0
  517. package/esm/components/tree/index.js.map +1 -0
  518. package/esm/components/tree/tree-item.d.ts +14 -0
  519. package/esm/components/tree/tree-item.d.ts.map +1 -0
  520. package/esm/components/tree/tree-item.js +118 -0
  521. package/esm/components/tree/tree-item.js.map +1 -0
  522. package/esm/components/tree/tree.d.ts +20 -0
  523. package/esm/components/tree/tree.d.ts.map +1 -0
  524. package/esm/components/tree/tree.js +66 -0
  525. package/esm/components/tree/tree.js.map +1 -0
  526. package/esm/components/tree/tree.spec.d.ts +2 -0
  527. package/esm/components/tree/tree.spec.d.ts.map +1 -0
  528. package/esm/components/tree/tree.spec.js +427 -0
  529. package/esm/components/tree/tree.spec.js.map +1 -0
  530. package/esm/components/typography.d.ts +48 -0
  531. package/esm/components/typography.d.ts.map +1 -0
  532. package/esm/components/typography.js +223 -0
  533. package/esm/components/typography.js.map +1 -0
  534. package/esm/components/typography.spec.d.ts +2 -0
  535. package/esm/components/typography.spec.d.ts.map +1 -0
  536. package/esm/components/typography.spec.js +199 -0
  537. package/esm/components/typography.spec.js.map +1 -0
  538. package/esm/components/wizard/index.d.ts +2 -0
  539. package/esm/components/wizard/index.d.ts.map +1 -1
  540. package/esm/components/wizard/index.spec.js +70 -56
  541. package/esm/components/wizard/index.spec.js.map +1 -1
  542. package/esm/services/click-away-service.d.ts +5 -2
  543. package/esm/services/click-away-service.d.ts.map +1 -1
  544. package/esm/services/click-away-service.js +7 -1
  545. package/esm/services/click-away-service.js.map +1 -1
  546. package/esm/services/click-away-service.spec.js +14 -12
  547. package/esm/services/click-away-service.spec.js.map +1 -1
  548. package/esm/services/css-variable-theme.d.ts +167 -1
  549. package/esm/services/css-variable-theme.d.ts.map +1 -1
  550. package/esm/services/css-variable-theme.js +102 -0
  551. package/esm/services/css-variable-theme.js.map +1 -1
  552. package/esm/services/css-variable-theme.spec.js +131 -1
  553. package/esm/services/css-variable-theme.spec.js.map +1 -1
  554. package/esm/services/default-dark-theme.d.ts +107 -2
  555. package/esm/services/default-dark-theme.d.ts.map +1 -1
  556. package/esm/services/default-dark-theme.js +87 -1
  557. package/esm/services/default-dark-theme.js.map +1 -1
  558. package/esm/services/default-light-theme.d.ts +107 -2
  559. package/esm/services/default-light-theme.d.ts.map +1 -1
  560. package/esm/services/default-light-theme.js +86 -0
  561. package/esm/services/default-light-theme.js.map +1 -1
  562. package/esm/services/index.d.ts +6 -2
  563. package/esm/services/index.d.ts.map +1 -1
  564. package/esm/services/index.js +6 -2
  565. package/esm/services/index.js.map +1 -1
  566. package/esm/services/layout-service.d.ts +217 -0
  567. package/esm/services/layout-service.d.ts.map +1 -0
  568. package/esm/services/layout-service.js +331 -0
  569. package/esm/services/layout-service.js.map +1 -0
  570. package/esm/services/layout-service.spec.d.ts +2 -0
  571. package/esm/services/layout-service.spec.d.ts.map +1 -0
  572. package/esm/services/layout-service.spec.js +425 -0
  573. package/esm/services/layout-service.spec.js.map +1 -0
  574. package/esm/services/list-service.d.ts +31 -0
  575. package/esm/services/list-service.d.ts.map +1 -0
  576. package/esm/services/list-service.js +149 -0
  577. package/esm/services/list-service.js.map +1 -0
  578. package/esm/services/list-service.spec.d.ts +2 -0
  579. package/esm/services/list-service.spec.d.ts.map +1 -0
  580. package/esm/services/list-service.spec.js +283 -0
  581. package/esm/services/list-service.spec.js.map +1 -0
  582. package/esm/services/palette-css-vars.d.ts +12 -0
  583. package/esm/services/palette-css-vars.d.ts.map +1 -0
  584. package/esm/services/palette-css-vars.js +44 -0
  585. package/esm/services/palette-css-vars.js.map +1 -0
  586. package/esm/services/theme-provider-service.d.ts +387 -2
  587. package/esm/services/theme-provider-service.d.ts.map +1 -1
  588. package/esm/services/theme-provider-service.js.map +1 -1
  589. package/esm/services/tree-service.d.ts +61 -0
  590. package/esm/services/tree-service.d.ts.map +1 -0
  591. package/esm/services/tree-service.js +149 -0
  592. package/esm/services/tree-service.js.map +1 -0
  593. package/esm/services/tree-service.spec.d.ts +2 -0
  594. package/esm/services/tree-service.spec.d.ts.map +1 -0
  595. package/esm/services/tree-service.spec.js +338 -0
  596. package/esm/services/tree-service.spec.js.map +1 -0
  597. package/esm/utils/promisify-animation.d.ts.map +1 -1
  598. package/esm/utils/promisify-animation.js +6 -1
  599. package/esm/utils/promisify-animation.js.map +1 -1
  600. package/package.json +7 -8
  601. package/src/components/accordion/accordion-item.tsx +197 -0
  602. package/src/components/accordion/accordion.spec.tsx +418 -0
  603. package/src/components/accordion/accordion.tsx +50 -0
  604. package/src/components/accordion/index.ts +2 -0
  605. package/src/components/alert.spec.tsx +256 -0
  606. package/src/components/alert.tsx +186 -0
  607. package/src/components/app-bar-link.spec.tsx +22 -19
  608. package/src/components/app-bar-link.tsx +29 -10
  609. package/src/components/app-bar.spec.tsx +73 -58
  610. package/src/components/app-bar.tsx +19 -12
  611. package/src/components/avatar.tsx +46 -47
  612. package/src/components/badge.spec.tsx +228 -0
  613. package/src/components/badge.tsx +104 -0
  614. package/src/components/breadcrumb.spec.tsx +396 -0
  615. package/src/components/breadcrumb.tsx +188 -0
  616. package/src/components/button-group.spec.tsx +611 -0
  617. package/src/components/button-group.tsx +423 -0
  618. package/src/components/button.spec.tsx +257 -67
  619. package/src/components/button.tsx +130 -80
  620. package/src/components/card.spec.tsx +389 -0
  621. package/src/components/card.tsx +261 -0
  622. package/src/components/carousel.spec.tsx +894 -0
  623. package/src/components/carousel.tsx +376 -0
  624. package/src/components/chip.spec.tsx +200 -0
  625. package/src/components/chip.tsx +188 -0
  626. package/src/components/circular-progress.spec.tsx +289 -0
  627. package/src/components/circular-progress.tsx +145 -0
  628. package/src/components/command-palette/command-palette-input.spec.tsx +219 -219
  629. package/src/components/command-palette/command-palette-input.tsx +25 -9
  630. package/src/components/command-palette/command-palette-manager.spec.ts +132 -117
  631. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +358 -358
  632. package/src/components/command-palette/command-palette-suggestion-list.tsx +22 -20
  633. package/src/components/command-palette/index.spec.tsx +12 -12
  634. package/src/components/command-palette/index.tsx +25 -102
  635. package/src/components/context-menu/context-menu-item.tsx +85 -0
  636. package/src/components/context-menu/context-menu-manager.spec.ts +433 -0
  637. package/src/components/context-menu/context-menu-manager.ts +148 -0
  638. package/src/components/context-menu/context-menu.spec.tsx +352 -0
  639. package/src/components/context-menu/context-menu.tsx +116 -0
  640. package/src/components/context-menu/index.ts +3 -0
  641. package/src/components/data-grid/body.spec.tsx +287 -283
  642. package/src/components/data-grid/data-grid-row.spec.tsx +165 -140
  643. package/src/components/data-grid/data-grid-row.tsx +72 -55
  644. package/src/components/data-grid/data-grid.spec.tsx +659 -729
  645. package/src/components/data-grid/data-grid.tsx +19 -15
  646. package/src/components/data-grid/footer.spec.tsx +249 -237
  647. package/src/components/data-grid/header.spec.tsx +374 -351
  648. package/src/components/data-grid/header.tsx +58 -39
  649. package/src/components/data-grid/selection-cell.spec.tsx +46 -45
  650. package/src/components/data-grid/selection-cell.tsx +2 -6
  651. package/src/components/dialog.spec.tsx +135 -0
  652. package/src/components/dialog.tsx +277 -0
  653. package/src/components/divider.spec.tsx +197 -0
  654. package/src/components/divider.tsx +147 -0
  655. package/src/components/drawer/drawer-toggle-button.spec.tsx +374 -0
  656. package/src/components/drawer/drawer-toggle-button.tsx +124 -0
  657. package/src/components/drawer/index.spec.tsx +748 -0
  658. package/src/components/drawer/index.tsx +227 -0
  659. package/src/components/dropdown.spec.tsx +445 -0
  660. package/src/components/dropdown.tsx +343 -0
  661. package/src/components/fab.spec.tsx +51 -40
  662. package/src/components/fab.tsx +32 -9
  663. package/src/components/form.spec.tsx +303 -293
  664. package/src/components/form.tsx +10 -7
  665. package/src/components/grid.spec.tsx +276 -183
  666. package/src/components/grid.tsx +10 -10
  667. package/src/components/icons/icon-definitions.spec.ts +68 -0
  668. package/src/components/icons/icon-definitions.ts +509 -0
  669. package/src/components/icons/icon-types.ts +48 -0
  670. package/src/components/icons/icon.spec.tsx +314 -0
  671. package/src/components/icons/icon.tsx +111 -0
  672. package/src/components/icons/index.ts +4 -0
  673. package/src/components/image.spec.tsx +748 -0
  674. package/src/components/image.tsx +520 -0
  675. package/src/components/index.ts +32 -4
  676. package/src/components/inputs/autocomplete.spec.tsx +10 -1
  677. package/src/components/inputs/autocomplete.tsx +13 -7
  678. package/src/components/inputs/checkbox.spec.tsx +377 -0
  679. package/src/components/inputs/checkbox.tsx +198 -0
  680. package/src/components/inputs/index.ts +7 -0
  681. package/src/components/inputs/input-number.spec.tsx +686 -0
  682. package/src/components/inputs/input-number.tsx +387 -0
  683. package/src/components/inputs/input.spec.tsx +544 -508
  684. package/src/components/inputs/input.tsx +91 -132
  685. package/src/components/inputs/radio-group.spec.tsx +281 -0
  686. package/src/components/inputs/radio-group.tsx +108 -0
  687. package/src/components/inputs/radio.spec.tsx +273 -0
  688. package/src/components/inputs/radio.tsx +199 -0
  689. package/src/components/inputs/select.spec.tsx +1237 -0
  690. package/src/components/inputs/select.tsx +775 -0
  691. package/src/components/inputs/slider.spec.tsx +1020 -0
  692. package/src/components/inputs/slider.tsx +696 -0
  693. package/src/components/inputs/switch.spec.tsx +410 -0
  694. package/src/components/inputs/switch.tsx +218 -0
  695. package/src/components/inputs/text-area.spec.tsx +186 -171
  696. package/src/components/inputs/text-area.tsx +13 -19
  697. package/src/components/linear-progress.spec.tsx +320 -0
  698. package/src/components/linear-progress.tsx +127 -0
  699. package/src/components/list/index.ts +2 -0
  700. package/src/components/list/list-item.tsx +106 -0
  701. package/src/components/list/list.spec.tsx +817 -0
  702. package/src/components/list/list.tsx +92 -0
  703. package/src/components/loader.spec.tsx +220 -204
  704. package/src/components/loader.tsx +17 -9
  705. package/src/components/menu/index.ts +2 -0
  706. package/src/components/menu/menu-types.spec.ts +122 -0
  707. package/src/components/menu/menu-types.ts +43 -0
  708. package/src/components/menu/menu.spec.tsx +483 -0
  709. package/src/components/menu/menu.tsx +326 -0
  710. package/src/components/modal.spec.tsx +65 -55
  711. package/src/components/modal.tsx +9 -6
  712. package/src/components/noty-list.spec.tsx +78 -75
  713. package/src/components/noty-list.tsx +76 -68
  714. package/src/components/page-container/index.spec.tsx +274 -0
  715. package/src/components/page-container/index.tsx +82 -0
  716. package/src/components/page-container/page-header.spec.tsx +308 -0
  717. package/src/components/page-container/page-header.tsx +127 -0
  718. package/src/components/page-layout/index.spec.tsx +882 -0
  719. package/src/components/page-layout/index.tsx +392 -0
  720. package/src/components/pagination.spec.tsx +275 -0
  721. package/src/components/pagination.tsx +249 -0
  722. package/src/components/paper.spec.tsx +26 -18
  723. package/src/components/paper.tsx +12 -10
  724. package/src/components/rating.spec.tsx +866 -0
  725. package/src/components/rating.tsx +286 -0
  726. package/src/components/result.spec.tsx +221 -0
  727. package/src/components/result.tsx +155 -0
  728. package/src/components/searchable-input-styles.ts +81 -0
  729. package/src/components/skeleton.spec.tsx +126 -118
  730. package/src/components/skeleton.tsx +23 -6
  731. package/src/components/styles.spec.ts +27 -28
  732. package/src/components/styles.tsx +15 -13
  733. package/src/components/suggest/index.spec.tsx +611 -587
  734. package/src/components/suggest/index.tsx +28 -95
  735. package/src/components/suggest/suggest-input.spec.tsx +95 -81
  736. package/src/components/suggest/suggest-input.tsx +9 -7
  737. package/src/components/suggest/suggest-manager.spec.ts +103 -93
  738. package/src/components/suggest/suggestion-list.spec.tsx +194 -173
  739. package/src/components/suggest/suggestion-list.tsx +23 -22
  740. package/src/components/tabs.spec.tsx +369 -7
  741. package/src/components/tabs.tsx +221 -18
  742. package/src/components/timeline.spec.tsx +294 -0
  743. package/src/components/timeline.tsx +221 -0
  744. package/src/components/tooltip.spec.tsx +223 -0
  745. package/src/components/tooltip.tsx +155 -0
  746. package/src/components/tree/index.ts +2 -0
  747. package/src/components/tree/tree-item.tsx +161 -0
  748. package/src/components/tree/tree.spec.tsx +677 -0
  749. package/src/components/tree/tree.tsx +111 -0
  750. package/src/components/typography.spec.tsx +235 -0
  751. package/src/components/typography.tsx +292 -0
  752. package/src/components/wizard/index.spec.tsx +77 -68
  753. package/src/services/click-away-service.spec.ts +14 -16
  754. package/src/services/click-away-service.ts +9 -3
  755. package/src/services/css-variable-theme.spec.ts +169 -1
  756. package/src/services/css-variable-theme.ts +107 -2
  757. package/src/services/default-dark-theme.ts +89 -3
  758. package/src/services/default-light-theme.ts +88 -2
  759. package/src/services/index.ts +6 -2
  760. package/src/services/layout-service.spec.ts +535 -0
  761. package/src/services/layout-service.ts +391 -0
  762. package/src/services/list-service.spec.ts +362 -0
  763. package/src/services/list-service.ts +169 -0
  764. package/src/services/palette-css-vars.ts +46 -0
  765. package/src/services/theme-provider-service.ts +246 -1
  766. package/src/services/tree-service.spec.ts +412 -0
  767. package/src/services/tree-service.ts +179 -0
  768. package/src/utils/promisify-animation.ts +7 -1
@@ -0,0 +1,812 @@
1
+ import { Injector } from '@furystack/inject';
2
+ import { createComponent, initializeShadeRoot } from '@furystack/shades';
3
+ import { sleepAsync, usingAsync } from '@furystack/utils';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { ThemeProviderService } from '../../services/theme-provider-service.js';
6
+ import { Slider } from './slider.js';
7
+ describe('Slider', () => {
8
+ beforeEach(() => {
9
+ document.body.innerHTML = '<div id="root"></div>';
10
+ });
11
+ afterEach(() => {
12
+ document.body.innerHTML = '';
13
+ vi.restoreAllMocks();
14
+ });
15
+ const renderSlider = async (props = {}) => {
16
+ const injector = new Injector();
17
+ const root = document.getElementById('root');
18
+ initializeShadeRoot({
19
+ injector,
20
+ rootElement: root,
21
+ jsxElement: createComponent(Slider, { ...props }),
22
+ });
23
+ await sleepAsync(100);
24
+ return {
25
+ injector,
26
+ slider: document.querySelector('shade-slider'),
27
+ [Symbol.asyncDispose]: () => injector[Symbol.asyncDispose](),
28
+ };
29
+ };
30
+ describe('rendering', () => {
31
+ it('should render as custom element', async () => {
32
+ await usingAsync(await renderSlider(), async ({ slider }) => {
33
+ expect(slider).not.toBeNull();
34
+ });
35
+ });
36
+ it('should render the rail, track, and thumb', async () => {
37
+ await usingAsync(await renderSlider(), async ({ slider }) => {
38
+ expect(slider.querySelector('.slider-rail')).not.toBeNull();
39
+ expect(slider.querySelector('.slider-track')).not.toBeNull();
40
+ expect(slider.querySelector('.slider-thumb')).not.toBeNull();
41
+ });
42
+ });
43
+ it('should render a single thumb for non-range slider', async () => {
44
+ await usingAsync(await renderSlider({ value: 50 }), async ({ slider }) => {
45
+ const thumbs = slider.querySelectorAll('.slider-thumb');
46
+ expect(thumbs.length).toBe(1);
47
+ });
48
+ });
49
+ it('should render two thumbs for range slider', async () => {
50
+ await usingAsync(await renderSlider({ value: [20, 80] }), async ({ slider }) => {
51
+ const thumbs = slider.querySelectorAll('.slider-thumb');
52
+ expect(thumbs.length).toBe(2);
53
+ });
54
+ });
55
+ });
56
+ describe('value positioning', () => {
57
+ it('should position thumb at 0% when value equals min', async () => {
58
+ await usingAsync(await renderSlider({ value: 0, min: 0, max: 100 }), async ({ slider }) => {
59
+ const thumb = slider.querySelector('.slider-thumb');
60
+ expect(thumb.style.left).toBe('0%');
61
+ });
62
+ });
63
+ it('should position thumb at 50% when value is midpoint', async () => {
64
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100 }), async ({ slider }) => {
65
+ const thumb = slider.querySelector('.slider-thumb');
66
+ expect(thumb.style.left).toBe('50%');
67
+ });
68
+ });
69
+ it('should position thumb at 100% when value equals max', async () => {
70
+ await usingAsync(await renderSlider({ value: 100, min: 0, max: 100 }), async ({ slider }) => {
71
+ const thumb = slider.querySelector('.slider-thumb');
72
+ expect(thumb.style.left).toBe('100%');
73
+ });
74
+ });
75
+ it('should set correct track width for single slider', async () => {
76
+ await usingAsync(await renderSlider({ value: 60, min: 0, max: 100 }), async ({ slider }) => {
77
+ const track = slider.querySelector('.slider-track');
78
+ expect(track.style.left).toBe('0%');
79
+ expect(track.style.width).toBe('60%');
80
+ });
81
+ });
82
+ it('should set correct track position for range slider', async () => {
83
+ await usingAsync(await renderSlider({ value: [20, 80], min: 0, max: 100 }), async ({ slider }) => {
84
+ const track = slider.querySelector('.slider-track');
85
+ expect(track.style.left).toBe('20%');
86
+ expect(track.style.width).toBe('60%');
87
+ });
88
+ });
89
+ it('should position range thumbs correctly', async () => {
90
+ await usingAsync(await renderSlider({ value: [25, 75], min: 0, max: 100 }), async ({ slider }) => {
91
+ const thumbs = slider.querySelectorAll('.slider-thumb');
92
+ expect(thumbs[0].style.left).toBe('25%');
93
+ expect(thumbs[1].style.left).toBe('75%');
94
+ });
95
+ });
96
+ });
97
+ describe('vertical mode', () => {
98
+ it('should set data-vertical attribute', async () => {
99
+ await usingAsync(await renderSlider({ vertical: true }), async ({ slider }) => {
100
+ expect(slider.hasAttribute('data-vertical')).toBe(true);
101
+ });
102
+ });
103
+ it('should not set data-vertical when horizontal', async () => {
104
+ await usingAsync(await renderSlider({ vertical: false }), async ({ slider }) => {
105
+ expect(slider.hasAttribute('data-vertical')).toBe(false);
106
+ });
107
+ });
108
+ it('should use bottom for positioning in vertical mode', async () => {
109
+ await usingAsync(await renderSlider({ value: 50, vertical: true }), async ({ slider }) => {
110
+ const thumb = slider.querySelector('.slider-thumb');
111
+ expect(thumb.style.bottom).toBe('50%');
112
+ });
113
+ });
114
+ it('should set vertical track via bottom/height', async () => {
115
+ await usingAsync(await renderSlider({ value: 60, vertical: true }), async ({ slider }) => {
116
+ const track = slider.querySelector('.slider-track');
117
+ expect(track.style.bottom).toBe('0%');
118
+ expect(track.style.height).toBe('60%');
119
+ });
120
+ });
121
+ });
122
+ describe('disabled state', () => {
123
+ it('should set data-disabled attribute when disabled', async () => {
124
+ await usingAsync(await renderSlider({ disabled: true }), async ({ slider }) => {
125
+ expect(slider.hasAttribute('data-disabled')).toBe(true);
126
+ });
127
+ });
128
+ it('should not set data-disabled when not disabled', async () => {
129
+ await usingAsync(await renderSlider({ disabled: false }), async ({ slider }) => {
130
+ expect(slider.hasAttribute('data-disabled')).toBe(false);
131
+ });
132
+ });
133
+ it('should set tabIndex to -1 on thumb when disabled', async () => {
134
+ await usingAsync(await renderSlider({ disabled: true }), async ({ slider }) => {
135
+ const thumb = slider.querySelector('.slider-thumb');
136
+ expect(thumb.tabIndex).toBe(-1);
137
+ });
138
+ });
139
+ it('should set tabIndex to 0 on thumb when not disabled', async () => {
140
+ await usingAsync(await renderSlider({ disabled: false }), async ({ slider }) => {
141
+ const thumb = slider.querySelector('.slider-thumb');
142
+ expect(thumb.tabIndex).toBe(0);
143
+ });
144
+ });
145
+ });
146
+ describe('ARIA attributes', () => {
147
+ it('should set role="slider" on thumb', async () => {
148
+ await usingAsync(await renderSlider({ value: 50 }), async ({ slider }) => {
149
+ const thumb = slider.querySelector('.slider-thumb');
150
+ expect(thumb.getAttribute('role')).toBe('slider');
151
+ });
152
+ });
153
+ it('should set aria-valuemin and aria-valuemax', async () => {
154
+ await usingAsync(await renderSlider({ value: 50, min: 10, max: 90 }), async ({ slider }) => {
155
+ const thumb = slider.querySelector('.slider-thumb');
156
+ expect(thumb.getAttribute('aria-valuemin')).toBe('10');
157
+ expect(thumb.getAttribute('aria-valuemax')).toBe('90');
158
+ });
159
+ });
160
+ it('should set aria-valuenow to current value', async () => {
161
+ await usingAsync(await renderSlider({ value: 42 }), async ({ slider }) => {
162
+ const thumb = slider.querySelector('.slider-thumb');
163
+ expect(thumb.getAttribute('aria-valuenow')).toBe('42');
164
+ });
165
+ });
166
+ it('should set aria-orientation to horizontal by default', async () => {
167
+ await usingAsync(await renderSlider(), async ({ slider }) => {
168
+ const thumb = slider.querySelector('.slider-thumb');
169
+ expect(thumb.getAttribute('aria-orientation')).toBe('horizontal');
170
+ });
171
+ });
172
+ it('should set aria-orientation to vertical when vertical', async () => {
173
+ await usingAsync(await renderSlider({ vertical: true }), async ({ slider }) => {
174
+ const thumb = slider.querySelector('.slider-thumb');
175
+ expect(thumb.getAttribute('aria-orientation')).toBe('vertical');
176
+ });
177
+ });
178
+ it('should set aria-disabled when disabled', async () => {
179
+ await usingAsync(await renderSlider({ disabled: true }), async ({ slider }) => {
180
+ const thumb = slider.querySelector('.slider-thumb');
181
+ expect(thumb.getAttribute('aria-disabled')).toBe('true');
182
+ });
183
+ });
184
+ it('should set separate aria-valuenow for range thumbs', async () => {
185
+ await usingAsync(await renderSlider({ value: [20, 80] }), async ({ slider }) => {
186
+ const thumbs = slider.querySelectorAll('.slider-thumb');
187
+ expect(thumbs[0].getAttribute('aria-valuenow')).toBe('20');
188
+ expect(thumbs[1].getAttribute('aria-valuenow')).toBe('80');
189
+ });
190
+ });
191
+ });
192
+ describe('marks', () => {
193
+ it('should render mark dots when marks is true', async () => {
194
+ await usingAsync(await renderSlider({ min: 0, max: 10, step: 5, marks: true }), async ({ slider }) => {
195
+ const dots = slider.querySelectorAll('.slider-mark-dot');
196
+ expect(dots.length).toBe(3); // 0, 5, 10
197
+ });
198
+ });
199
+ it('should render custom marks from an array', async () => {
200
+ const marks = [
201
+ { value: 0, label: 'Min' },
202
+ { value: 50, label: 'Mid' },
203
+ { value: 100, label: 'Max' },
204
+ ];
205
+ await usingAsync(await renderSlider({ marks }), async ({ slider }) => {
206
+ const dots = slider.querySelectorAll('.slider-mark-dot');
207
+ const labels = slider.querySelectorAll('.slider-mark-label');
208
+ expect(dots.length).toBe(3);
209
+ expect(labels.length).toBe(3);
210
+ expect(labels[0].textContent).toBe('Min');
211
+ expect(labels[1].textContent).toBe('Mid');
212
+ expect(labels[2].textContent).toBe('Max');
213
+ });
214
+ });
215
+ it('should mark active dots for single slider', async () => {
216
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, step: 50, marks: true }), async ({ slider }) => {
217
+ const dots = slider.querySelectorAll('.slider-mark-dot');
218
+ expect(dots[0].hasAttribute('data-active')).toBe(true); // 0 <= 50
219
+ expect(dots[1].hasAttribute('data-active')).toBe(true); // 50 <= 50
220
+ expect(dots[2].hasAttribute('data-active')).toBe(false); // 100 > 50
221
+ });
222
+ });
223
+ it('should mark active dots for range slider', async () => {
224
+ await usingAsync(await renderSlider({ value: [25, 75], min: 0, max: 100, step: 25, marks: true }), async ({ slider }) => {
225
+ const dots = slider.querySelectorAll('.slider-mark-dot');
226
+ expect(dots[0].hasAttribute('data-active')).toBe(false); // 0 < 25
227
+ expect(dots[1].hasAttribute('data-active')).toBe(true); // 25 >= 25 && 25 <= 75
228
+ expect(dots[2].hasAttribute('data-active')).toBe(true); // 50 >= 25 && 50 <= 75
229
+ expect(dots[3].hasAttribute('data-active')).toBe(true); // 75 >= 25 && 75 <= 75
230
+ expect(dots[4].hasAttribute('data-active')).toBe(false); // 100 > 75
231
+ });
232
+ });
233
+ it('should set data-has-labels when marks have labels', async () => {
234
+ const marks = [{ value: 50, label: 'Half' }];
235
+ await usingAsync(await renderSlider({ marks }), async ({ slider }) => {
236
+ expect(slider.hasAttribute('data-has-labels')).toBe(true);
237
+ });
238
+ });
239
+ it('should not set data-has-labels when marks have no labels', async () => {
240
+ await usingAsync(await renderSlider({ min: 0, max: 10, step: 5, marks: true }), async ({ slider }) => {
241
+ expect(slider.hasAttribute('data-has-labels')).toBe(false);
242
+ });
243
+ });
244
+ it('should not render marks when marks is false or undefined', async () => {
245
+ await usingAsync(await renderSlider({ marks: false }), async ({ slider }) => {
246
+ expect(slider.querySelectorAll('.slider-mark-dot').length).toBe(0);
247
+ });
248
+ });
249
+ });
250
+ describe('theme integration', () => {
251
+ it('should set CSS color variable from theme', async () => {
252
+ await usingAsync(await renderSlider(), async ({ slider, injector }) => {
253
+ const themeService = injector.getInstance(ThemeProviderService);
254
+ expect(slider.style.getPropertyValue('--slider-color')).toBe(themeService.theme.palette.primary.main);
255
+ });
256
+ });
257
+ it('should use custom color from color prop', async () => {
258
+ await usingAsync(await renderSlider({ color: 'secondary' }), async ({ slider, injector }) => {
259
+ const themeService = injector.getInstance(ThemeProviderService);
260
+ expect(slider.style.getPropertyValue('--slider-color')).toBe(themeService.theme.palette.secondary.main);
261
+ });
262
+ });
263
+ });
264
+ describe('keyboard navigation', () => {
265
+ it('should increment value on ArrowRight', async () => {
266
+ const onValueChange = vi.fn();
267
+ await usingAsync(await renderSlider({ value: 50, step: 10, onValueChange }), async ({ slider }) => {
268
+ const thumb = slider.querySelector('.slider-thumb');
269
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
270
+ expect(onValueChange).toHaveBeenCalledWith(60);
271
+ });
272
+ });
273
+ it('should decrement value on ArrowLeft', async () => {
274
+ const onValueChange = vi.fn();
275
+ await usingAsync(await renderSlider({ value: 50, step: 10, onValueChange }), async ({ slider }) => {
276
+ const thumb = slider.querySelector('.slider-thumb');
277
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }));
278
+ expect(onValueChange).toHaveBeenCalledWith(40);
279
+ });
280
+ });
281
+ it('should increment value on ArrowUp', async () => {
282
+ const onValueChange = vi.fn();
283
+ await usingAsync(await renderSlider({ value: 50, step: 5, onValueChange }), async ({ slider }) => {
284
+ const thumb = slider.querySelector('.slider-thumb');
285
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }));
286
+ expect(onValueChange).toHaveBeenCalledWith(55);
287
+ });
288
+ });
289
+ it('should decrement value on ArrowDown', async () => {
290
+ const onValueChange = vi.fn();
291
+ await usingAsync(await renderSlider({ value: 50, step: 5, onValueChange }), async ({ slider }) => {
292
+ const thumb = slider.querySelector('.slider-thumb');
293
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
294
+ expect(onValueChange).toHaveBeenCalledWith(45);
295
+ });
296
+ });
297
+ it('should jump to min on Home', async () => {
298
+ const onValueChange = vi.fn();
299
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, onValueChange }), async ({ slider }) => {
300
+ const thumb = slider.querySelector('.slider-thumb');
301
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'Home', bubbles: true }));
302
+ expect(onValueChange).toHaveBeenCalledWith(0);
303
+ });
304
+ });
305
+ it('should jump to max on End', async () => {
306
+ const onValueChange = vi.fn();
307
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, onValueChange }), async ({ slider }) => {
308
+ const thumb = slider.querySelector('.slider-thumb');
309
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'End', bubbles: true }));
310
+ expect(onValueChange).toHaveBeenCalledWith(100);
311
+ });
312
+ });
313
+ it('should large-step on PageUp', async () => {
314
+ const onValueChange = vi.fn();
315
+ await usingAsync(await renderSlider({ value: 50, step: 1, onValueChange }), async ({ slider }) => {
316
+ const thumb = slider.querySelector('.slider-thumb');
317
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'PageUp', bubbles: true }));
318
+ expect(onValueChange).toHaveBeenCalledWith(60);
319
+ });
320
+ });
321
+ it('should not exceed max on ArrowRight', async () => {
322
+ const onValueChange = vi.fn();
323
+ await usingAsync(await renderSlider({ value: 100, step: 10, min: 0, max: 100, onValueChange }), async ({ slider }) => {
324
+ const thumb = slider.querySelector('.slider-thumb');
325
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
326
+ expect(onValueChange).toHaveBeenCalledWith(100);
327
+ });
328
+ });
329
+ it('should not go below min on ArrowLeft', async () => {
330
+ const onValueChange = vi.fn();
331
+ await usingAsync(await renderSlider({ value: 0, step: 10, min: 0, max: 100, onValueChange }), async ({ slider }) => {
332
+ const thumb = slider.querySelector('.slider-thumb');
333
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }));
334
+ expect(onValueChange).toHaveBeenCalledWith(0);
335
+ });
336
+ });
337
+ it('should not fire change when disabled', async () => {
338
+ const onValueChange = vi.fn();
339
+ await usingAsync(await renderSlider({ value: 50, disabled: true, onValueChange }), async ({ slider }) => {
340
+ const thumb = slider.querySelector('.slider-thumb');
341
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
342
+ expect(onValueChange).not.toHaveBeenCalled();
343
+ });
344
+ });
345
+ });
346
+ describe('defaults', () => {
347
+ it('should use min=0, max=100, step=1 by default', async () => {
348
+ await usingAsync(await renderSlider(), async ({ slider }) => {
349
+ const thumb = slider.querySelector('.slider-thumb');
350
+ expect(thumb.getAttribute('aria-valuemin')).toBe('0');
351
+ expect(thumb.getAttribute('aria-valuemax')).toBe('100');
352
+ expect(thumb.getAttribute('aria-valuenow')).toBe('0');
353
+ });
354
+ });
355
+ it('should default value to min', async () => {
356
+ await usingAsync(await renderSlider({ min: 20, max: 80 }), async ({ slider }) => {
357
+ const thumb = slider.querySelector('.slider-thumb');
358
+ expect(thumb.style.left).toBe('0%');
359
+ });
360
+ });
361
+ });
362
+ describe('hidden input for form integration', () => {
363
+ it('should render a hidden input when name is provided', async () => {
364
+ await usingAsync(await renderSlider({ name: 'volume', value: 75 }), async ({ slider }) => {
365
+ const input = slider.querySelector('input[type="hidden"]');
366
+ expect(input).not.toBeNull();
367
+ expect(input.name).toBe('volume');
368
+ expect(input.value).toBe('75');
369
+ });
370
+ });
371
+ it('should not render a hidden input when name is not provided', async () => {
372
+ await usingAsync(await renderSlider({ value: 75 }), async ({ slider }) => {
373
+ const input = slider.querySelector('input[type="hidden"]');
374
+ expect(input).toBeNull();
375
+ });
376
+ });
377
+ });
378
+ describe('custom min/max/step', () => {
379
+ it('should respect custom min and max', async () => {
380
+ await usingAsync(await renderSlider({ value: 15, min: 10, max: 20 }), async ({ slider }) => {
381
+ const thumb = slider.querySelector('.slider-thumb');
382
+ expect(thumb.style.left).toBe('50%');
383
+ });
384
+ });
385
+ it('should handle step with decimals', async () => {
386
+ const onValueChange = vi.fn();
387
+ await usingAsync(await renderSlider({ value: 0.5, min: 0, max: 1, step: 0.1, onValueChange }), async ({ slider }) => {
388
+ const thumb = slider.querySelector('.slider-thumb');
389
+ expect(thumb.style.left).toBe('50%');
390
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
391
+ expect(onValueChange).toHaveBeenCalledWith(0.6);
392
+ });
393
+ });
394
+ it('should handle step=0 (continuous mode) with keyboard using effective step of 1', async () => {
395
+ const onValueChange = vi.fn();
396
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, step: 0, onValueChange }), async ({ slider }) => {
397
+ const thumb = slider.querySelector('.slider-thumb');
398
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
399
+ expect(onValueChange).toHaveBeenCalledWith(51);
400
+ });
401
+ });
402
+ });
403
+ describe('range keyboard navigation', () => {
404
+ it('should increment first thumb of range with ArrowRight', async () => {
405
+ const onValueChange = vi.fn();
406
+ await usingAsync(await renderSlider({ value: [20, 80], step: 5, onValueChange }), async ({ slider }) => {
407
+ const thumbs = slider.querySelectorAll('.slider-thumb');
408
+ thumbs[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
409
+ expect(onValueChange).toHaveBeenCalledWith([25, 80]);
410
+ });
411
+ });
412
+ it('should decrement second thumb of range with ArrowLeft', async () => {
413
+ const onValueChange = vi.fn();
414
+ await usingAsync(await renderSlider({ value: [20, 80], step: 5, onValueChange }), async ({ slider }) => {
415
+ const thumbs = slider.querySelectorAll('.slider-thumb');
416
+ thumbs[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }));
417
+ expect(onValueChange).toHaveBeenCalledWith([20, 75]);
418
+ });
419
+ });
420
+ it('should clamp range thumb 0 to not exceed thumb 1', async () => {
421
+ const onValueChange = vi.fn();
422
+ await usingAsync(await renderSlider({ value: [50, 50], step: 10, onValueChange }), async ({ slider }) => {
423
+ const thumbs = slider.querySelectorAll('.slider-thumb');
424
+ thumbs[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
425
+ expect(onValueChange).toHaveBeenCalledWith([50, 50]);
426
+ });
427
+ });
428
+ it('should clamp range thumb 1 to not go below thumb 0', async () => {
429
+ const onValueChange = vi.fn();
430
+ await usingAsync(await renderSlider({ value: [50, 50], step: 10, onValueChange }), async ({ slider }) => {
431
+ const thumbs = slider.querySelectorAll('.slider-thumb');
432
+ thumbs[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }));
433
+ expect(onValueChange).toHaveBeenCalledWith([50, 50]);
434
+ });
435
+ });
436
+ it('should jump range thumb to min on Home', async () => {
437
+ const onValueChange = vi.fn();
438
+ await usingAsync(await renderSlider({ value: [30, 70], min: 0, max: 100, onValueChange }), async ({ slider }) => {
439
+ const thumbs = slider.querySelectorAll('.slider-thumb');
440
+ thumbs[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'Home', bubbles: true }));
441
+ expect(onValueChange).toHaveBeenCalledWith([0, 70]);
442
+ });
443
+ });
444
+ it('should jump range thumb to max on End', async () => {
445
+ const onValueChange = vi.fn();
446
+ await usingAsync(await renderSlider({ value: [30, 70], min: 0, max: 100, onValueChange }), async ({ slider }) => {
447
+ const thumbs = slider.querySelectorAll('.slider-thumb');
448
+ thumbs[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'End', bubbles: true }));
449
+ expect(onValueChange).toHaveBeenCalledWith([30, 100]);
450
+ });
451
+ });
452
+ it('should use ArrowUp to increment value', async () => {
453
+ const onValueChange = vi.fn();
454
+ await usingAsync(await renderSlider({ value: [20, 80], step: 5, onValueChange }), async ({ slider }) => {
455
+ const thumbs = slider.querySelectorAll('.slider-thumb');
456
+ thumbs[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }));
457
+ expect(onValueChange).toHaveBeenCalledWith([25, 80]);
458
+ });
459
+ });
460
+ it('should use ArrowDown to decrement value', async () => {
461
+ const onValueChange = vi.fn();
462
+ await usingAsync(await renderSlider({ value: [20, 80], step: 5, onValueChange }), async ({ slider }) => {
463
+ const thumbs = slider.querySelectorAll('.slider-thumb');
464
+ thumbs[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
465
+ expect(onValueChange).toHaveBeenCalledWith([20, 75]);
466
+ });
467
+ });
468
+ });
469
+ describe('PageDown', () => {
470
+ it('should large-step down on PageDown', async () => {
471
+ const onValueChange = vi.fn();
472
+ await usingAsync(await renderSlider({ value: 50, step: 1, onValueChange }), async ({ slider }) => {
473
+ const thumb = slider.querySelector('.slider-thumb');
474
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'PageDown', bubbles: true }));
475
+ expect(onValueChange).toHaveBeenCalledWith(40);
476
+ });
477
+ });
478
+ });
479
+ describe('vertical range positioning', () => {
480
+ it('should use bottom for positioning range thumbs vertically', async () => {
481
+ await usingAsync(await renderSlider({ value: [20, 80], vertical: true }), async ({ slider }) => {
482
+ const thumbs = slider.querySelectorAll('.slider-thumb');
483
+ expect(thumbs[0].style.bottom).toBe('20%');
484
+ expect(thumbs[1].style.bottom).toBe('80%');
485
+ });
486
+ });
487
+ it('should use bottom/height for range track in vertical mode', async () => {
488
+ await usingAsync(await renderSlider({ value: [20, 80], vertical: true }), async ({ slider }) => {
489
+ const track = slider.querySelector('.slider-track');
490
+ expect(track.style.bottom).toBe('20%');
491
+ expect(track.style.height).toBe('60%');
492
+ });
493
+ });
494
+ });
495
+ describe('marks with step=0', () => {
496
+ it('should not generate auto marks when step is 0', async () => {
497
+ await usingAsync(await renderSlider({ min: 0, max: 100, step: 0, marks: true }), async ({ slider }) => {
498
+ const dots = slider.querySelectorAll('.slider-mark-dot');
499
+ expect(dots.length).toBe(0);
500
+ });
501
+ });
502
+ });
503
+ describe('non-keyboard events are ignored', () => {
504
+ it('should not fire change when non-slider-thumb receives keyboard event', async () => {
505
+ const onValueChange = vi.fn();
506
+ await usingAsync(await renderSlider({ value: 50, onValueChange }), async ({ slider }) => {
507
+ const rail = slider.querySelector('.slider-rail');
508
+ rail.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
509
+ expect(onValueChange).not.toHaveBeenCalled();
510
+ });
511
+ });
512
+ it('should ignore unrecognized keys', async () => {
513
+ const onValueChange = vi.fn();
514
+ await usingAsync(await renderSlider({ value: 50, onValueChange }), async ({ slider }) => {
515
+ const thumb = slider.querySelector('.slider-thumb');
516
+ thumb.dispatchEvent(new KeyboardEvent('keydown', { key: 'a', bubbles: true }));
517
+ expect(onValueChange).not.toHaveBeenCalled();
518
+ });
519
+ });
520
+ });
521
+ describe('marks positioning in vertical mode', () => {
522
+ it('should use bottom for marks in vertical mode', async () => {
523
+ const marks = [{ value: 50, label: 'Half' }];
524
+ await usingAsync(await renderSlider({ marks, vertical: true }), async ({ slider }) => {
525
+ const dot = slider.querySelector('.slider-mark-dot');
526
+ expect(dot.style.bottom).toBe('50%');
527
+ });
528
+ });
529
+ });
530
+ describe('mouse interaction', () => {
531
+ const mockSliderRoot = (slider, rect) => {
532
+ const root = slider.querySelector('.slider-root');
533
+ if (root) {
534
+ vi.spyOn(root, 'getBoundingClientRect').mockReturnValue({
535
+ top: 0,
536
+ left: 0,
537
+ width: 200,
538
+ height: 4,
539
+ right: 200,
540
+ bottom: 4,
541
+ x: 0,
542
+ y: 0,
543
+ toJSON: () => ({}),
544
+ ...rect,
545
+ });
546
+ }
547
+ };
548
+ it('should update slider on mousedown on track (single mode)', async () => {
549
+ const onValueChange = vi.fn();
550
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, step: 1, onValueChange }), async ({ slider }) => {
551
+ mockSliderRoot(slider, { left: 0, width: 200 });
552
+ const root = slider.querySelector('.slider-root');
553
+ root.dispatchEvent(new MouseEvent('mousedown', { clientX: 150, clientY: 2, bubbles: true }));
554
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
555
+ await sleepAsync(50);
556
+ expect(onValueChange).toHaveBeenCalled();
557
+ const calledWith = onValueChange.mock.calls[0][0];
558
+ expect(calledWith).toBe(75);
559
+ });
560
+ });
561
+ it('should not respond to mousedown when disabled', async () => {
562
+ const onValueChange = vi.fn();
563
+ await usingAsync(await renderSlider({ value: 50, disabled: true, onValueChange }), async ({ slider }) => {
564
+ mockSliderRoot(slider, { left: 0, width: 200 });
565
+ slider.dispatchEvent(new MouseEvent('mousedown', { clientX: 100, clientY: 2, bubbles: true }));
566
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
567
+ await sleepAsync(50);
568
+ expect(onValueChange).not.toHaveBeenCalled();
569
+ });
570
+ });
571
+ it('should set data-dragging during drag and remove after', async () => {
572
+ const onValueChange = vi.fn();
573
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, step: 1, onValueChange }), async ({ slider }) => {
574
+ mockSliderRoot(slider, { left: 0, width: 200 });
575
+ const root = slider.querySelector('.slider-root');
576
+ root.dispatchEvent(new MouseEvent('mousedown', { clientX: 100, clientY: 2, bubbles: true }));
577
+ expect(root.hasAttribute('data-dragging')).toBe(true);
578
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
579
+ await sleepAsync(50);
580
+ expect(root.hasAttribute('data-dragging')).toBe(false);
581
+ });
582
+ });
583
+ it('should update value on mousemove during drag', async () => {
584
+ const onValueChange = vi.fn();
585
+ await usingAsync(await renderSlider({ value: 0, min: 0, max: 100, step: 1, onValueChange }), async ({ slider }) => {
586
+ mockSliderRoot(slider, { left: 0, width: 200 });
587
+ const thumb = slider.querySelector('.slider-thumb');
588
+ thumb.dispatchEvent(new MouseEvent('mousedown', { clientX: 0, clientY: 2, bubbles: true }));
589
+ document.dispatchEvent(new MouseEvent('mousemove', { clientX: 100, clientY: 2, bubbles: true }));
590
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
591
+ await sleepAsync(50);
592
+ expect(onValueChange).toHaveBeenCalled();
593
+ const calledWith = onValueChange.mock.calls[0][0];
594
+ expect(calledWith).toBe(50);
595
+ });
596
+ });
597
+ it('should handle range slider mousedown - picks nearest thumb', async () => {
598
+ const onValueChange = vi.fn();
599
+ await usingAsync(await renderSlider({
600
+ value: [20, 80],
601
+ min: 0,
602
+ max: 100,
603
+ step: 1,
604
+ onValueChange,
605
+ }), async ({ slider }) => {
606
+ mockSliderRoot(slider, { left: 0, width: 200 });
607
+ const root = slider.querySelector('.slider-root');
608
+ // Click at 90% (180px) → closer to thumb at 80%
609
+ root.dispatchEvent(new MouseEvent('mousedown', { clientX: 180, clientY: 2, bubbles: true }));
610
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
611
+ await sleepAsync(50);
612
+ expect(onValueChange).toHaveBeenCalled();
613
+ const val = onValueChange.mock.calls[0][0];
614
+ expect(val[0]).toBe(20);
615
+ expect(val[1]).toBe(90);
616
+ });
617
+ });
618
+ it('should handle range slider mousedown - swaps if crossover', async () => {
619
+ const onValueChange = vi.fn();
620
+ await usingAsync(await renderSlider({
621
+ value: [40, 60],
622
+ min: 0,
623
+ max: 100,
624
+ step: 1,
625
+ onValueChange,
626
+ }), async ({ slider }) => {
627
+ mockSliderRoot(slider, { left: 0, width: 200 });
628
+ const root = slider.querySelector('.slider-root');
629
+ // Click at 20% (40px), closer to start thumb at 40%.
630
+ // New val for thumb[0]=20. 20 < 60, no swap.
631
+ root.dispatchEvent(new MouseEvent('mousedown', { clientX: 40, clientY: 2, bubbles: true }));
632
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
633
+ await sleepAsync(50);
634
+ expect(onValueChange).toHaveBeenCalled();
635
+ const val = onValueChange.mock.calls[0][0];
636
+ expect(val[0]).toBe(20);
637
+ expect(val[1]).toBe(60);
638
+ });
639
+ });
640
+ it('should handle mousemove with range values', async () => {
641
+ const onValueChange = vi.fn();
642
+ await usingAsync(await renderSlider({
643
+ value: [20, 80],
644
+ min: 0,
645
+ max: 100,
646
+ step: 1,
647
+ onValueChange,
648
+ }), async ({ slider }) => {
649
+ mockSliderRoot(slider, { left: 0, width: 200 });
650
+ const thumbs = slider.querySelectorAll('.slider-thumb');
651
+ thumbs[0].dispatchEvent(new MouseEvent('mousedown', { clientX: 40, clientY: 2, bubbles: true }));
652
+ // Move to 60px (30%)
653
+ document.dispatchEvent(new MouseEvent('mousemove', { clientX: 60, clientY: 2, bubbles: true }));
654
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
655
+ await sleepAsync(50);
656
+ expect(onValueChange).toHaveBeenCalled();
657
+ const val = onValueChange.mock.calls[0][0];
658
+ expect(val[0]).toBe(30);
659
+ expect(val[1]).toBe(80);
660
+ });
661
+ });
662
+ it('should handle vertical mode mousedown', async () => {
663
+ const onValueChange = vi.fn();
664
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, step: 1, vertical: true, onValueChange }), async ({ slider }) => {
665
+ mockSliderRoot(slider, { top: 0, height: 200, bottom: 200, left: 0, width: 4 });
666
+ const root = slider.querySelector('.slider-root');
667
+ // Click at bottom-50px (bottom=200, clientY=150 → (200-150)/200=25%)
668
+ root.dispatchEvent(new MouseEvent('mousedown', { clientX: 2, clientY: 150, bubbles: true }));
669
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
670
+ await sleepAsync(50);
671
+ expect(onValueChange).toHaveBeenCalled();
672
+ const calledWith = onValueChange.mock.calls[0][0];
673
+ expect(calledWith).toBe(25);
674
+ });
675
+ });
676
+ it('should clamp pointer values to 0-100 range', async () => {
677
+ const onValueChange = vi.fn();
678
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, step: 1, onValueChange }), async ({ slider }) => {
679
+ mockSliderRoot(slider, { left: 0, width: 200 });
680
+ const root = slider.querySelector('.slider-root');
681
+ // Click far to the right beyond the track
682
+ root.dispatchEvent(new MouseEvent('mousedown', { clientX: 400, clientY: 2, bubbles: true }));
683
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
684
+ await sleepAsync(50);
685
+ expect(onValueChange).toHaveBeenCalled();
686
+ const calledWith = onValueChange.mock.calls[0][0];
687
+ expect(calledWith).toBe(100);
688
+ });
689
+ });
690
+ });
691
+ describe('touch interaction', () => {
692
+ const mockSliderRoot = (slider, rect) => {
693
+ const root = slider.querySelector('.slider-root');
694
+ if (root) {
695
+ vi.spyOn(root, 'getBoundingClientRect').mockReturnValue({
696
+ top: 0,
697
+ left: 0,
698
+ width: 200,
699
+ height: 4,
700
+ right: 200,
701
+ bottom: 4,
702
+ x: 0,
703
+ y: 0,
704
+ toJSON: () => ({}),
705
+ ...rect,
706
+ });
707
+ }
708
+ };
709
+ it('should handle touchstart on track', async () => {
710
+ const onValueChange = vi.fn();
711
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, step: 1, onValueChange }), async ({ slider }) => {
712
+ mockSliderRoot(slider, { left: 0, width: 200 });
713
+ const root = slider.querySelector('.slider-root');
714
+ const touch = { clientX: 100, clientY: 2, identifier: 0, target: root };
715
+ root.dispatchEvent(new TouchEvent('touchstart', { touches: [touch] }));
716
+ document.dispatchEvent(new TouchEvent('touchend', { changedTouches: [touch] }));
717
+ await sleepAsync(50);
718
+ expect(onValueChange).toHaveBeenCalled();
719
+ const calledWith = onValueChange.mock.calls[0][0];
720
+ expect(calledWith).toBe(50);
721
+ });
722
+ });
723
+ it('should handle touchmove during drag', async () => {
724
+ const onValueChange = vi.fn();
725
+ await usingAsync(await renderSlider({ value: 0, min: 0, max: 100, step: 1, onValueChange }), async ({ slider }) => {
726
+ mockSliderRoot(slider, { left: 0, width: 200 });
727
+ const root = slider.querySelector('.slider-root');
728
+ const startTouch = { clientX: 0, clientY: 2, identifier: 0, target: root };
729
+ root.dispatchEvent(new TouchEvent('touchstart', { touches: [startTouch] }));
730
+ const moveTouch = { clientX: 150, clientY: 2, identifier: 0, target: slider };
731
+ document.dispatchEvent(new TouchEvent('touchmove', { touches: [moveTouch], cancelable: true }));
732
+ const endTouch = { clientX: 150, clientY: 2, identifier: 0, target: slider };
733
+ document.dispatchEvent(new TouchEvent('touchend', { changedTouches: [endTouch] }));
734
+ await sleepAsync(50);
735
+ expect(onValueChange).toHaveBeenCalled();
736
+ const calledWith = onValueChange.mock.calls[0][0];
737
+ expect(calledWith).toBe(75);
738
+ });
739
+ });
740
+ });
741
+ describe('syncVisuals for vertical range', () => {
742
+ it('should position range thumbs and track in vertical mode during drag', async () => {
743
+ const onValueChange = vi.fn();
744
+ await usingAsync(await renderSlider({
745
+ value: [20, 80],
746
+ min: 0,
747
+ max: 100,
748
+ step: 1,
749
+ vertical: true,
750
+ onValueChange,
751
+ }), async ({ slider }) => {
752
+ const root = slider.querySelector('.slider-root');
753
+ if (root) {
754
+ vi.spyOn(root, 'getBoundingClientRect').mockReturnValue({
755
+ top: 0,
756
+ left: 0,
757
+ width: 4,
758
+ height: 200,
759
+ right: 4,
760
+ bottom: 200,
761
+ x: 0,
762
+ y: 0,
763
+ toJSON: () => ({}),
764
+ });
765
+ }
766
+ const thumbs = slider.querySelectorAll('.slider-thumb');
767
+ thumbs[0].dispatchEvent(new MouseEvent('mousedown', { clientX: 2, clientY: 160, bubbles: true }));
768
+ // Move to 60% from bottom: clientY = 200 - 120 = 80
769
+ document.dispatchEvent(new MouseEvent('mousemove', { clientX: 2, clientY: 80, bubbles: true }));
770
+ // During drag, syncVisuals updates positions directly
771
+ expect(slider.querySelector('.slider-track')).not.toBeNull();
772
+ expect(root.hasAttribute('data-dragging')).toBe(true);
773
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
774
+ await sleepAsync(50);
775
+ expect(onValueChange).toHaveBeenCalled();
776
+ });
777
+ });
778
+ });
779
+ describe('edge cases', () => {
780
+ it('should return null from getValueFromPointer when root has zero dimensions', async () => {
781
+ const onValueChange = vi.fn();
782
+ await usingAsync(await renderSlider({ value: 50, min: 0, max: 100, onValueChange }), async ({ slider }) => {
783
+ const root = slider.querySelector('.slider-root');
784
+ if (root) {
785
+ vi.spyOn(root, 'getBoundingClientRect').mockReturnValue({
786
+ top: 0,
787
+ left: 0,
788
+ width: 0,
789
+ height: 0,
790
+ right: 0,
791
+ bottom: 0,
792
+ x: 0,
793
+ y: 0,
794
+ toJSON: () => ({}),
795
+ });
796
+ }
797
+ slider.dispatchEvent(new MouseEvent('mousedown', { clientX: 100, clientY: 2, bubbles: true }));
798
+ document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
799
+ await sleepAsync(50);
800
+ // Should not have fired because getValueFromPointer returned null
801
+ expect(onValueChange).not.toHaveBeenCalled();
802
+ });
803
+ });
804
+ it('should handle valueToPercent when max === min', async () => {
805
+ await usingAsync(await renderSlider({ value: 5, min: 5, max: 5 }), async ({ slider }) => {
806
+ const thumb = slider.querySelector('.slider-thumb');
807
+ expect(thumb.style.left).toBe('0%');
808
+ });
809
+ });
810
+ });
811
+ });
812
+ //# sourceMappingURL=slider.spec.js.map