solid-tom-ui 1.0.8 → 1.0.10

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 (502) hide show
  1. package/dist/README.md +246 -0
  2. package/dist/components/avatar/index.d.ts +3 -0
  3. package/{components → dist/components}/avatar/index.d.ts.map +1 -1
  4. package/dist/components/button/index.d.ts +3 -0
  5. package/{components → dist/components}/button/index.d.ts.map +1 -1
  6. package/dist/components/collapse/index.d.ts +3 -0
  7. package/{components → dist/components}/collapse/index.d.ts.map +1 -1
  8. package/dist/components/float-button/index.d.ts +3 -0
  9. package/{components → dist/components}/float-button/index.d.ts.map +1 -1
  10. package/dist/components/input/index.d.ts +3 -0
  11. package/dist/components/input/index.d.ts.map +1 -0
  12. package/dist/components/menu/index.d.ts +4 -0
  13. package/{components → dist/components}/menu/index.d.ts.map +1 -1
  14. package/{components → dist/components}/menu/menu.types.d.ts +7 -7
  15. package/{components → dist/components}/menu/menu.types.d.ts.map +1 -1
  16. package/dist/components/rating/index.d.ts +3 -0
  17. package/{components → dist/components}/rating/index.d.ts.map +1 -1
  18. package/dist/components/slider/index.d.ts +3 -0
  19. package/{components → dist/components}/slider/index.d.ts.map +1 -1
  20. package/{components → dist/components}/tour/tour.d.ts.map +1 -1
  21. package/{components → dist/components}/tour/tour.js +1 -1
  22. package/{components → dist/components}/tour/tour.js.map +1 -1
  23. package/{components → dist/components}/z-index/z-index.types.js.map +1 -1
  24. package/dist/package.json +45 -0
  25. package/dist/skill/avatar.skill.md.txt +255 -0
  26. package/dist/skill/badge.skill.md.txt +223 -0
  27. package/dist/skill/blank.skill.md.txt +0 -0
  28. package/dist/skill/breadcrumb.skill.md.txt +177 -0
  29. package/dist/skill/button.skill.md.txt +198 -0
  30. package/dist/skill/carousel.skill.md.txt +406 -0
  31. package/dist/skill/chat-bubble.skill.md.txt +342 -0
  32. package/dist/skill/checkbox.skill.md.txt +326 -0
  33. package/dist/skill/code-preview.skill.md.txt +240 -0
  34. package/dist/skill/collapse.skill.md.txt +329 -0
  35. package/dist/skill/context-menu.skill.md.txt +233 -0
  36. package/dist/skill/diff.skill.md.txt +244 -0
  37. package/dist/skill/divider.skill.md.txt +151 -0
  38. package/dist/skill/doc.skill.md.txt +191 -0
  39. package/dist/skill/drawer.skill.md.txt +157 -0
  40. package/dist/skill/dropdown.skill.md.txt +198 -0
  41. package/dist/skill/float-button.skill.md.txt +315 -0
  42. package/dist/skill/hover-3d-image.skill.md.txt +120 -0
  43. package/dist/skill/iframe.skill.md.txt +114 -0
  44. package/dist/skill/image-preview.skill.md.txt +162 -0
  45. package/dist/skill/indicator.skill.md.txt +60 -0
  46. package/dist/skill/input.skill.md.txt +489 -0
  47. package/dist/skill/loading.skill.md.txt +127 -0
  48. package/dist/skill/mansory.skill.md.txt +0 -0
  49. package/dist/skill/menu.skill.md.txt +476 -0
  50. package/dist/skill/modal.skill.md.txt +359 -0
  51. package/dist/skill/pagination.skill.md.txt +405 -0
  52. package/dist/skill/progress-bar.skill.md.txt +207 -0
  53. package/dist/skill/qr-code.skill.md.txt +136 -0
  54. package/dist/skill/rating.skill.md.txt +167 -0
  55. package/dist/skill/select-zone.skill.md.txt +93 -0
  56. package/dist/skill/select.skill.md.txt +663 -0
  57. package/dist/skill/skeleton.skill.md.txt +192 -0
  58. package/dist/skill/slider.skill.md.txt +404 -0
  59. package/dist/skill/splitter.skill.md.txt +411 -0
  60. package/dist/skill/steps.skill.md.txt +264 -0
  61. package/dist/skill/swap.skill.md.txt +139 -0
  62. package/dist/skill/switch.skill.md.txt +191 -0
  63. package/dist/skill/tab.skill.md.txt +484 -0
  64. package/dist/skill/table.example.header.md.txt +667 -0
  65. package/dist/skill/table.skill.md.txt +1407 -0
  66. package/dist/skill/text-rotate.skill.md.txt +186 -0
  67. package/dist/skill/timeline.skill.md.txt +247 -0
  68. package/dist/skill/toast.skill.md.txt +531 -0
  69. package/dist/skill/tooltip.skill.md.txt +222 -0
  70. package/dist/skill/tour.skill.md.txt +156 -0
  71. package/dist/skill/upload.skill.md.txt +358 -0
  72. package/dist/skill/z-index.skill.md.txt +0 -0
  73. package/{solid-ui.css → dist/solid-ui.css} +2 -2
  74. package/package.json +97 -9
  75. package/components/avatar/index.d.ts +0 -2
  76. package/components/button/index.d.ts +0 -2
  77. package/components/collapse/index.d.ts +0 -2
  78. package/components/float-button/index.d.ts +0 -2
  79. package/components/input/index.d.ts +0 -2
  80. package/components/input/index.d.ts.map +0 -1
  81. package/components/menu/index.d.ts +0 -4
  82. package/components/rating/index.d.ts +0 -2
  83. package/components/slider/index.d.ts +0 -2
  84. package/macos.code-workspace +0 -8
  85. /package/{components → dist/components}/avatar/avatar.d.ts +0 -0
  86. /package/{components → dist/components}/avatar/avatar.d.ts.map +0 -0
  87. /package/{components → dist/components}/avatar/avatar.js +0 -0
  88. /package/{components → dist/components}/avatar/avatar.js.map +0 -0
  89. /package/{components → dist/components}/avatar/avatar.types.d.ts +0 -0
  90. /package/{components → dist/components}/avatar/avatar.types.d.ts.map +0 -0
  91. /package/{components → dist/components}/badge/badge.d.ts +0 -0
  92. /package/{components → dist/components}/badge/badge.d.ts.map +0 -0
  93. /package/{components → dist/components}/badge/badge.js +0 -0
  94. /package/{components → dist/components}/badge/badge.js.map +0 -0
  95. /package/{components → dist/components}/badge/badge.types.d.ts +0 -0
  96. /package/{components → dist/components}/badge/badge.types.d.ts.map +0 -0
  97. /package/{components → dist/components}/badge/index.d.ts +0 -0
  98. /package/{components → dist/components}/badge/index.d.ts.map +0 -0
  99. /package/{components → dist/components}/blank/blank.d.ts +0 -0
  100. /package/{components → dist/components}/blank/blank.d.ts.map +0 -0
  101. /package/{components → dist/components}/blank/index.d.ts +0 -0
  102. /package/{components → dist/components}/blank/index.d.ts.map +0 -0
  103. /package/{components → dist/components}/breadcrumb/breadcrumb.d.ts +0 -0
  104. /package/{components → dist/components}/breadcrumb/breadcrumb.d.ts.map +0 -0
  105. /package/{components → dist/components}/breadcrumb/breadcrumb.js +0 -0
  106. /package/{components → dist/components}/breadcrumb/breadcrumb.js.map +0 -0
  107. /package/{components → dist/components}/breadcrumb/index.d.ts +0 -0
  108. /package/{components → dist/components}/breadcrumb/index.d.ts.map +0 -0
  109. /package/{components → dist/components}/button/button.d.ts +0 -0
  110. /package/{components → dist/components}/button/button.d.ts.map +0 -0
  111. /package/{components → dist/components}/button/button.js +0 -0
  112. /package/{components → dist/components}/button/button.js.map +0 -0
  113. /package/{components → dist/components}/button/button.types.d.ts +0 -0
  114. /package/{components → dist/components}/button/button.types.d.ts.map +0 -0
  115. /package/{components → dist/components}/carousel/carousel.d.ts +0 -0
  116. /package/{components → dist/components}/carousel/carousel.d.ts.map +0 -0
  117. /package/{components → dist/components}/carousel/carousel.js +0 -0
  118. /package/{components → dist/components}/carousel/carousel.js.map +0 -0
  119. /package/{components → dist/components}/carousel/carousel.types.d.ts +0 -0
  120. /package/{components → dist/components}/carousel/carousel.types.d.ts.map +0 -0
  121. /package/{components → dist/components}/carousel/index.d.ts +0 -0
  122. /package/{components → dist/components}/carousel/index.d.ts.map +0 -0
  123. /package/{components → dist/components}/chat-bubble/chatBubble.d.ts +0 -0
  124. /package/{components → dist/components}/chat-bubble/chatBubble.d.ts.map +0 -0
  125. /package/{components → dist/components}/chat-bubble/chatBubble.js +0 -0
  126. /package/{components → dist/components}/chat-bubble/chatBubble.js.map +0 -0
  127. /package/{components → dist/components}/chat-bubble/chatBubble.type.d.ts +0 -0
  128. /package/{components → dist/components}/chat-bubble/chatBubble.type.d.ts.map +0 -0
  129. /package/{components → dist/components}/chat-bubble/index.d.ts +0 -0
  130. /package/{components → dist/components}/chat-bubble/index.d.ts.map +0 -0
  131. /package/{components → dist/components}/checkbox/checkbox.d.ts +0 -0
  132. /package/{components → dist/components}/checkbox/checkbox.d.ts.map +0 -0
  133. /package/{components → dist/components}/checkbox/checkbox.js +0 -0
  134. /package/{components → dist/components}/checkbox/checkbox.js.map +0 -0
  135. /package/{components → dist/components}/checkbox/index.d.ts +0 -0
  136. /package/{components → dist/components}/checkbox/index.d.ts.map +0 -0
  137. /package/{components → dist/components}/collapse/collapse.d.ts +0 -0
  138. /package/{components → dist/components}/collapse/collapse.d.ts.map +0 -0
  139. /package/{components → dist/components}/collapse/collapse.js +0 -0
  140. /package/{components → dist/components}/collapse/collapse.js.map +0 -0
  141. /package/{components → dist/components}/collapse/collapse.types.d.ts +0 -0
  142. /package/{components → dist/components}/collapse/collapse.types.d.ts.map +0 -0
  143. /package/{components → dist/components}/context-menu/context-menu.d.ts +0 -0
  144. /package/{components → dist/components}/context-menu/context-menu.d.ts.map +0 -0
  145. /package/{components → dist/components}/context-menu/context-menu.js +0 -0
  146. /package/{components → dist/components}/context-menu/context-menu.js.map +0 -0
  147. /package/{components → dist/components}/context-menu/context-menu.store.d.ts +0 -0
  148. /package/{components → dist/components}/context-menu/context-menu.store.d.ts.map +0 -0
  149. /package/{components → dist/components}/context-menu/context-menu.store.js +0 -0
  150. /package/{components → dist/components}/context-menu/context-menu.store.js.map +0 -0
  151. /package/{components → dist/components}/context-menu/context-menu.types.d.ts +0 -0
  152. /package/{components → dist/components}/context-menu/context-menu.types.d.ts.map +0 -0
  153. /package/{components → dist/components}/context-menu/index.d.ts +0 -0
  154. /package/{components → dist/components}/context-menu/index.d.ts.map +0 -0
  155. /package/{components → dist/components}/diff/diff.d.ts +0 -0
  156. /package/{components → dist/components}/diff/diff.d.ts.map +0 -0
  157. /package/{components → dist/components}/diff/diff.js +0 -0
  158. /package/{components → dist/components}/diff/diff.js.map +0 -0
  159. /package/{components → dist/components}/diff/index.d.ts +0 -0
  160. /package/{components → dist/components}/diff/index.d.ts.map +0 -0
  161. /package/{components → dist/components}/divider/divider.d.ts +0 -0
  162. /package/{components → dist/components}/divider/divider.d.ts.map +0 -0
  163. /package/{components → dist/components}/divider/divider.js +0 -0
  164. /package/{components → dist/components}/divider/divider.js.map +0 -0
  165. /package/{components → dist/components}/divider/divider.types.d.ts +0 -0
  166. /package/{components → dist/components}/divider/divider.types.d.ts.map +0 -0
  167. /package/{components → dist/components}/divider/index.d.ts +0 -0
  168. /package/{components → dist/components}/divider/index.d.ts.map +0 -0
  169. /package/{components → dist/components}/drawer/drawer.d.ts +0 -0
  170. /package/{components → dist/components}/drawer/drawer.d.ts.map +0 -0
  171. /package/{components → dist/components}/drawer/drawer.js +0 -0
  172. /package/{components → dist/components}/drawer/drawer.js.map +0 -0
  173. /package/{components → dist/components}/drawer/drawer.types.d.ts +0 -0
  174. /package/{components → dist/components}/drawer/drawer.types.d.ts.map +0 -0
  175. /package/{components → dist/components}/drawer/index.d.ts +0 -0
  176. /package/{components → dist/components}/drawer/index.d.ts.map +0 -0
  177. /package/{components → dist/components}/dropdown/dropdown.d.ts +0 -0
  178. /package/{components → dist/components}/dropdown/dropdown.d.ts.map +0 -0
  179. /package/{components → dist/components}/dropdown/dropdown.js +0 -0
  180. /package/{components → dist/components}/dropdown/dropdown.js.map +0 -0
  181. /package/{components → dist/components}/dropdown/dropdown.store.d.ts +0 -0
  182. /package/{components → dist/components}/dropdown/dropdown.store.d.ts.map +0 -0
  183. /package/{components → dist/components}/dropdown/dropdown.store.js +0 -0
  184. /package/{components → dist/components}/dropdown/dropdown.store.js.map +0 -0
  185. /package/{components → dist/components}/dropdown/dropdown.types.d.ts +0 -0
  186. /package/{components → dist/components}/dropdown/dropdown.types.d.ts.map +0 -0
  187. /package/{components → dist/components}/dropdown/index.d.ts +0 -0
  188. /package/{components → dist/components}/dropdown/index.d.ts.map +0 -0
  189. /package/{components → dist/components}/float-button/float-button.d.ts +0 -0
  190. /package/{components → dist/components}/float-button/float-button.d.ts.map +0 -0
  191. /package/{components → dist/components}/float-button/float-button.js +0 -0
  192. /package/{components → dist/components}/float-button/float-button.js.map +0 -0
  193. /package/{components → dist/components}/float-button/float-button.types.d.ts +0 -0
  194. /package/{components → dist/components}/float-button/float-button.types.d.ts.map +0 -0
  195. /package/{components → dist/components}/hover-3d-image/hover-3d-example.d.ts +0 -0
  196. /package/{components → dist/components}/hover-3d-image/hover-3d-example.d.ts.map +0 -0
  197. /package/{components → dist/components}/hover-3d-image/hover-3d-image.d.ts +0 -0
  198. /package/{components → dist/components}/hover-3d-image/hover-3d-image.d.ts.map +0 -0
  199. /package/{components → dist/components}/hover-3d-image/hover-3d-image.js +0 -0
  200. /package/{components → dist/components}/hover-3d-image/hover-3d-image.js.map +0 -0
  201. /package/{components → dist/components}/hover-3d-image/index.d.ts +0 -0
  202. /package/{components → dist/components}/hover-3d-image/index.d.ts.map +0 -0
  203. /package/{components → dist/components}/image-preview/image-preview.d.ts +0 -0
  204. /package/{components → dist/components}/image-preview/image-preview.d.ts.map +0 -0
  205. /package/{components → dist/components}/image-preview/image-preview.js +0 -0
  206. /package/{components → dist/components}/image-preview/image-preview.js.map +0 -0
  207. /package/{components → dist/components}/image-preview/index.d.ts +0 -0
  208. /package/{components → dist/components}/image-preview/index.d.ts.map +0 -0
  209. /package/{components → dist/components}/indicator/index.d.ts +0 -0
  210. /package/{components → dist/components}/indicator/index.d.ts.map +0 -0
  211. /package/{components → dist/components}/indicator/indicator.d.ts +0 -0
  212. /package/{components → dist/components}/indicator/indicator.d.ts.map +0 -0
  213. /package/{components → dist/components}/indicator/indicator.js +0 -0
  214. /package/{components → dist/components}/indicator/indicator.js.map +0 -0
  215. /package/{components → dist/components}/indicator/indicator.types.d.ts +0 -0
  216. /package/{components → dist/components}/indicator/indicator.types.d.ts.map +0 -0
  217. /package/{components → dist/components}/input/input.d.ts +0 -0
  218. /package/{components → dist/components}/input/input.d.ts.map +0 -0
  219. /package/{components → dist/components}/input/input.js +0 -0
  220. /package/{components → dist/components}/input/input.js.map +0 -0
  221. /package/{components → dist/components}/input/input.types.d.ts +0 -0
  222. /package/{components → dist/components}/input/input.types.d.ts.map +0 -0
  223. /package/{components → dist/components}/input/input.utils.d.ts +0 -0
  224. /package/{components → dist/components}/input/input.utils.d.ts.map +0 -0
  225. /package/{components → dist/components}/input/input.utils.js +0 -0
  226. /package/{components → dist/components}/input/input.utils.js.map +0 -0
  227. /package/{components → dist/components}/input/variants/input-color.d.ts +0 -0
  228. /package/{components → dist/components}/input/variants/input-color.d.ts.map +0 -0
  229. /package/{components → dist/components}/input/variants/input-color.js +0 -0
  230. /package/{components → dist/components}/input/variants/input-color.js.map +0 -0
  231. /package/{components → dist/components}/input/variants/input-date.d.ts +0 -0
  232. /package/{components → dist/components}/input/variants/input-date.d.ts.map +0 -0
  233. /package/{components → dist/components}/input/variants/input-date.js +0 -0
  234. /package/{components → dist/components}/input/variants/input-date.js.map +0 -0
  235. /package/{components → dist/components}/input/variants/input-number.d.ts +0 -0
  236. /package/{components → dist/components}/input/variants/input-number.d.ts.map +0 -0
  237. /package/{components → dist/components}/input/variants/input-number.js +0 -0
  238. /package/{components → dist/components}/input/variants/input-number.js.map +0 -0
  239. /package/{components → dist/components}/input/variants/input-otp.d.ts +0 -0
  240. /package/{components → dist/components}/input/variants/input-otp.d.ts.map +0 -0
  241. /package/{components → dist/components}/input/variants/input-otp.js +0 -0
  242. /package/{components → dist/components}/input/variants/input-otp.js.map +0 -0
  243. /package/{components → dist/components}/input/variants/input-password.d.ts +0 -0
  244. /package/{components → dist/components}/input/variants/input-password.d.ts.map +0 -0
  245. /package/{components → dist/components}/input/variants/input-password.js +0 -0
  246. /package/{components → dist/components}/input/variants/input-password.js.map +0 -0
  247. /package/{components → dist/components}/input/variants/input-radio.d.ts +0 -0
  248. /package/{components → dist/components}/input/variants/input-radio.d.ts.map +0 -0
  249. /package/{components → dist/components}/input/variants/input-radio.js +0 -0
  250. /package/{components → dist/components}/input/variants/input-radio.js.map +0 -0
  251. /package/{components → dist/components}/input/variants/input-range.d.ts +0 -0
  252. /package/{components → dist/components}/input/variants/input-range.d.ts.map +0 -0
  253. /package/{components → dist/components}/input/variants/input-range.js +0 -0
  254. /package/{components → dist/components}/input/variants/input-range.js.map +0 -0
  255. /package/{components → dist/components}/input/variants/input-text.d.ts +0 -0
  256. /package/{components → dist/components}/input/variants/input-text.d.ts.map +0 -0
  257. /package/{components → dist/components}/input/variants/input-text.js +0 -0
  258. /package/{components → dist/components}/input/variants/input-text.js.map +0 -0
  259. /package/{components → dist/components}/input/variants/input-textarea.d.ts +0 -0
  260. /package/{components → dist/components}/input/variants/input-textarea.d.ts.map +0 -0
  261. /package/{components → dist/components}/input/variants/input-textarea.js +0 -0
  262. /package/{components → dist/components}/input/variants/input-textarea.js.map +0 -0
  263. /package/{components → dist/components}/loading/index.d.ts +0 -0
  264. /package/{components → dist/components}/loading/index.d.ts.map +0 -0
  265. /package/{components → dist/components}/loading/loading.d.ts +0 -0
  266. /package/{components → dist/components}/loading/loading.d.ts.map +0 -0
  267. /package/{components → dist/components}/loading/loading.js +0 -0
  268. /package/{components → dist/components}/loading/loading.js.map +0 -0
  269. /package/{components → dist/components}/mansory/index.d.ts +0 -0
  270. /package/{components → dist/components}/mansory/index.d.ts.map +0 -0
  271. /package/{components → dist/components}/mansory/mansory.d.ts +0 -0
  272. /package/{components → dist/components}/mansory/mansory.d.ts.map +0 -0
  273. /package/{components → dist/components}/mansory/mansory.js +0 -0
  274. /package/{components → dist/components}/mansory/mansory.js.map +0 -0
  275. /package/{components → dist/components}/mansory/mansory.types.d.ts +0 -0
  276. /package/{components → dist/components}/mansory/mansory.types.d.ts.map +0 -0
  277. /package/{components → dist/components}/menu/menu.d.ts +0 -0
  278. /package/{components → dist/components}/menu/menu.d.ts.map +0 -0
  279. /package/{components → dist/components}/menu/menu.data-example.d.ts +0 -0
  280. /package/{components → dist/components}/menu/menu.data-example.d.ts.map +0 -0
  281. /package/{components → dist/components}/menu/menu.js +0 -0
  282. /package/{components → dist/components}/menu/menu.js.map +0 -0
  283. /package/{components → dist/components}/modal/index.d.ts +0 -0
  284. /package/{components → dist/components}/modal/index.d.ts.map +0 -0
  285. /package/{components → dist/components}/modal/modal.d.ts +0 -0
  286. /package/{components → dist/components}/modal/modal.d.ts.map +0 -0
  287. /package/{components → dist/components}/modal/modal.js +0 -0
  288. /package/{components → dist/components}/modal/modal.js.map +0 -0
  289. /package/{components → dist/components}/modal/modalContext.d.ts +0 -0
  290. /package/{components → dist/components}/modal/modalContext.d.ts.map +0 -0
  291. /package/{components → dist/components}/modal/modalContext.js +0 -0
  292. /package/{components → dist/components}/modal/modalContext.js.map +0 -0
  293. /package/{components → dist/components}/pagination/index.d.ts +0 -0
  294. /package/{components → dist/components}/pagination/index.d.ts.map +0 -0
  295. /package/{components → dist/components}/pagination/pagination.d.ts +0 -0
  296. /package/{components → dist/components}/pagination/pagination.d.ts.map +0 -0
  297. /package/{components → dist/components}/pagination/pagination.js +0 -0
  298. /package/{components → dist/components}/pagination/pagination.js.map +0 -0
  299. /package/{components → dist/components}/pagination/pagination.types.d.ts +0 -0
  300. /package/{components → dist/components}/pagination/pagination.types.d.ts.map +0 -0
  301. /package/{components → dist/components}/progress-bar/index.d.ts +0 -0
  302. /package/{components → dist/components}/progress-bar/index.d.ts.map +0 -0
  303. /package/{components → dist/components}/progress-bar/progress-bar.d.ts +0 -0
  304. /package/{components → dist/components}/progress-bar/progress-bar.d.ts.map +0 -0
  305. /package/{components → dist/components}/progress-bar/progress-bar.js +0 -0
  306. /package/{components → dist/components}/progress-bar/progress-bar.js.map +0 -0
  307. /package/{components → dist/components}/progress-bar/progress-bar.types.d.ts +0 -0
  308. /package/{components → dist/components}/progress-bar/progress-bar.types.d.ts.map +0 -0
  309. /package/{components → dist/components}/qr-code/index.d.ts +0 -0
  310. /package/{components → dist/components}/qr-code/index.d.ts.map +0 -0
  311. /package/{components → dist/components}/qr-code/qr-code.d.ts +0 -0
  312. /package/{components → dist/components}/qr-code/qr-code.d.ts.map +0 -0
  313. /package/{components → dist/components}/qr-code/qr-code.js +0 -0
  314. /package/{components → dist/components}/qr-code/qr-code.js.map +0 -0
  315. /package/{components → dist/components}/qr-code/qr-code.types.d.ts +0 -0
  316. /package/{components → dist/components}/qr-code/qr-code.types.d.ts.map +0 -0
  317. /package/{components → dist/components}/rating/rating.d.ts +0 -0
  318. /package/{components → dist/components}/rating/rating.d.ts.map +0 -0
  319. /package/{components → dist/components}/rating/rating.js +0 -0
  320. /package/{components → dist/components}/rating/rating.js.map +0 -0
  321. /package/{components → dist/components}/rating/rating.types.d.ts +0 -0
  322. /package/{components → dist/components}/rating/rating.types.d.ts.map +0 -0
  323. /package/{components → dist/components}/select/index.d.ts +0 -0
  324. /package/{components → dist/components}/select/index.d.ts.map +0 -0
  325. /package/{components → dist/components}/select/select.d.ts +0 -0
  326. /package/{components → dist/components}/select/select.d.ts.map +0 -0
  327. /package/{components → dist/components}/select/select.js +0 -0
  328. /package/{components → dist/components}/select/select.js.map +0 -0
  329. /package/{components → dist/components}/select/select.types.d.ts +0 -0
  330. /package/{components → dist/components}/select/select.types.d.ts.map +0 -0
  331. /package/{components → dist/components}/select-zone/index.d.ts +0 -0
  332. /package/{components → dist/components}/select-zone/index.d.ts.map +0 -0
  333. /package/{components → dist/components}/select-zone/select-zone.d.ts +0 -0
  334. /package/{components → dist/components}/select-zone/select-zone.d.ts.map +0 -0
  335. /package/{components → dist/components}/select-zone/select-zone.js +0 -0
  336. /package/{components → dist/components}/select-zone/select-zone.js.map +0 -0
  337. /package/{components → dist/components}/select-zone/select-zone.types.d.ts +0 -0
  338. /package/{components → dist/components}/select-zone/select-zone.types.d.ts.map +0 -0
  339. /package/{components → dist/components}/skeleton/index.d.ts +0 -0
  340. /package/{components → dist/components}/skeleton/index.d.ts.map +0 -0
  341. /package/{components → dist/components}/skeleton/skeleton.d.ts +0 -0
  342. /package/{components → dist/components}/skeleton/skeleton.d.ts.map +0 -0
  343. /package/{components → dist/components}/skeleton/skeleton.js +0 -0
  344. /package/{components → dist/components}/skeleton/skeleton.js.map +0 -0
  345. /package/{components → dist/components}/slider/slider.d.ts +0 -0
  346. /package/{components → dist/components}/slider/slider.d.ts.map +0 -0
  347. /package/{components → dist/components}/slider/slider.js +0 -0
  348. /package/{components → dist/components}/slider/slider.js.map +0 -0
  349. /package/{components → dist/components}/slider/slider.types.d.ts +0 -0
  350. /package/{components → dist/components}/slider/slider.types.d.ts.map +0 -0
  351. /package/{components → dist/components}/splitter/index.d.ts +0 -0
  352. /package/{components → dist/components}/splitter/index.d.ts.map +0 -0
  353. /package/{components → dist/components}/splitter/splitter.d.ts +0 -0
  354. /package/{components → dist/components}/splitter/splitter.d.ts.map +0 -0
  355. /package/{components → dist/components}/splitter/splitter.js +0 -0
  356. /package/{components → dist/components}/splitter/splitter.js.map +0 -0
  357. /package/{components → dist/components}/splitter/splitter.types.d.ts +0 -0
  358. /package/{components → dist/components}/splitter/splitter.types.d.ts.map +0 -0
  359. /package/{components → dist/components}/steps/index.d.ts +0 -0
  360. /package/{components → dist/components}/steps/index.d.ts.map +0 -0
  361. /package/{components → dist/components}/steps/steps.d.ts +0 -0
  362. /package/{components → dist/components}/steps/steps.d.ts.map +0 -0
  363. /package/{components → dist/components}/steps/steps.js +0 -0
  364. /package/{components → dist/components}/steps/steps.js.map +0 -0
  365. /package/{components → dist/components}/swap/index.d.ts +0 -0
  366. /package/{components → dist/components}/swap/index.d.ts.map +0 -0
  367. /package/{components → dist/components}/swap/swap.d.ts +0 -0
  368. /package/{components → dist/components}/swap/swap.d.ts.map +0 -0
  369. /package/{components → dist/components}/swap/swap.js +0 -0
  370. /package/{components → dist/components}/swap/swap.js.map +0 -0
  371. /package/{components → dist/components}/switch/index.d.ts +0 -0
  372. /package/{components → dist/components}/switch/index.d.ts.map +0 -0
  373. /package/{components → dist/components}/switch/switch.d.ts +0 -0
  374. /package/{components → dist/components}/switch/switch.d.ts.map +0 -0
  375. /package/{components → dist/components}/switch/switch.js +0 -0
  376. /package/{components → dist/components}/switch/switch.js.map +0 -0
  377. /package/{components → dist/components}/switch/switch.types.d.ts +0 -0
  378. /package/{components → dist/components}/switch/switch.types.d.ts.map +0 -0
  379. /package/{components → dist/components}/tab/index.d.ts +0 -0
  380. /package/{components → dist/components}/tab/index.d.ts.map +0 -0
  381. /package/{components → dist/components}/tab/tab.d.ts +0 -0
  382. /package/{components → dist/components}/tab/tab.d.ts.map +0 -0
  383. /package/{components → dist/components}/tab/tab.js +0 -0
  384. /package/{components → dist/components}/tab/tab.js.map +0 -0
  385. /package/{components → dist/components}/tab/tab.types.d.ts +0 -0
  386. /package/{components → dist/components}/tab/tab.types.d.ts.map +0 -0
  387. /package/{components → dist/components}/table/index.d.ts +0 -0
  388. /package/{components → dist/components}/table/index.d.ts.map +0 -0
  389. /package/{components → dist/components}/table/index.js +0 -0
  390. /package/{components → dist/components}/table/table.d.ts +0 -0
  391. /package/{components → dist/components}/table/table.d.ts.map +0 -0
  392. /package/{components → dist/components}/table/table.js +0 -0
  393. /package/{components → dist/components}/table/table.js.map +0 -0
  394. /package/{components → dist/components}/table/table.types.d.ts +0 -0
  395. /package/{components → dist/components}/table/table.types.d.ts.map +0 -0
  396. /package/{components → dist/components}/text-rotate/index.d.ts +0 -0
  397. /package/{components → dist/components}/text-rotate/index.d.ts.map +0 -0
  398. /package/{components → dist/components}/text-rotate/text-rotate.d.ts +0 -0
  399. /package/{components → dist/components}/text-rotate/text-rotate.d.ts.map +0 -0
  400. /package/{components → dist/components}/text-rotate/text-rotate.js +0 -0
  401. /package/{components → dist/components}/text-rotate/text-rotate.js.map +0 -0
  402. /package/{components → dist/components}/timeline/index.d.ts +0 -0
  403. /package/{components → dist/components}/timeline/index.d.ts.map +0 -0
  404. /package/{components → dist/components}/timeline/timeline.d.ts +0 -0
  405. /package/{components → dist/components}/timeline/timeline.d.ts.map +0 -0
  406. /package/{components → dist/components}/timeline/timeline.js +0 -0
  407. /package/{components → dist/components}/timeline/timeline.js.map +0 -0
  408. /package/{components → dist/components}/timeline/timeline.types.d.ts +0 -0
  409. /package/{components → dist/components}/timeline/timeline.types.d.ts.map +0 -0
  410. /package/{components → dist/components}/toast/icons/ErrorIcon.d.ts +0 -0
  411. /package/{components → dist/components}/toast/icons/ErrorIcon.d.ts.map +0 -0
  412. /package/{components → dist/components}/toast/icons/ErrorIcon.js +0 -0
  413. /package/{components → dist/components}/toast/icons/ErrorIcon.js.map +0 -0
  414. /package/{components → dist/components}/toast/icons/IconCircle.d.ts +0 -0
  415. /package/{components → dist/components}/toast/icons/IconCircle.d.ts.map +0 -0
  416. /package/{components → dist/components}/toast/icons/IconCircle.js +0 -0
  417. /package/{components → dist/components}/toast/icons/IconCircle.js.map +0 -0
  418. /package/{components → dist/components}/toast/icons/InfoIcon.d.ts +0 -0
  419. /package/{components → dist/components}/toast/icons/InfoIcon.d.ts.map +0 -0
  420. /package/{components → dist/components}/toast/icons/InfoIcon.js +0 -0
  421. /package/{components → dist/components}/toast/icons/InfoIcon.js.map +0 -0
  422. /package/{components → dist/components}/toast/icons/LoaderIcon.d.ts +0 -0
  423. /package/{components → dist/components}/toast/icons/LoaderIcon.d.ts.map +0 -0
  424. /package/{components → dist/components}/toast/icons/LoaderIcon.js +0 -0
  425. /package/{components → dist/components}/toast/icons/LoaderIcon.js.map +0 -0
  426. /package/{components → dist/components}/toast/icons/SuccessIcon.d.ts +0 -0
  427. /package/{components → dist/components}/toast/icons/SuccessIcon.d.ts.map +0 -0
  428. /package/{components → dist/components}/toast/icons/SuccessIcon.js +0 -0
  429. /package/{components → dist/components}/toast/icons/SuccessIcon.js.map +0 -0
  430. /package/{components → dist/components}/toast/icons/WarningIcon.d.ts +0 -0
  431. /package/{components → dist/components}/toast/icons/WarningIcon.d.ts.map +0 -0
  432. /package/{components → dist/components}/toast/icons/WarningIcon.js +0 -0
  433. /package/{components → dist/components}/toast/icons/WarningIcon.js.map +0 -0
  434. /package/{components → dist/components}/toast/icons/index.d.ts +0 -0
  435. /package/{components → dist/components}/toast/icons/index.d.ts.map +0 -0
  436. /package/{components → dist/components}/toast/index.d.ts +0 -0
  437. /package/{components → dist/components}/toast/index.d.ts.map +0 -0
  438. /package/{components → dist/components}/toast/toast.d.ts +0 -0
  439. /package/{components → dist/components}/toast/toast.d.ts.map +0 -0
  440. /package/{components → dist/components}/toast/toast.js +0 -0
  441. /package/{components → dist/components}/toast/toast.js.map +0 -0
  442. /package/{components → dist/components}/toast/toast.store.d.ts +0 -0
  443. /package/{components → dist/components}/toast/toast.store.d.ts.map +0 -0
  444. /package/{components → dist/components}/toast/toast.store.js +0 -0
  445. /package/{components → dist/components}/toast/toast.store.js.map +0 -0
  446. /package/{components → dist/components}/toast/toast.type.d.ts +0 -0
  447. /package/{components → dist/components}/toast/toast.type.d.ts.map +0 -0
  448. /package/{components → dist/components}/tooltip/index.d.ts +0 -0
  449. /package/{components → dist/components}/tooltip/index.d.ts.map +0 -0
  450. /package/{components → dist/components}/tooltip/tooltip.d.ts +0 -0
  451. /package/{components → dist/components}/tooltip/tooltip.d.ts.map +0 -0
  452. /package/{components → dist/components}/tooltip/tooltip.js +0 -0
  453. /package/{components → dist/components}/tooltip/tooltip.js.map +0 -0
  454. /package/{components → dist/components}/tooltip/tooltip.types.d.ts +0 -0
  455. /package/{components → dist/components}/tooltip/tooltip.types.d.ts.map +0 -0
  456. /package/{components → dist/components}/tour/index.d.ts +0 -0
  457. /package/{components → dist/components}/tour/index.d.ts.map +0 -0
  458. /package/{components → dist/components}/tour/tour.d.ts +0 -0
  459. /package/{components → dist/components}/tour/tour.types.d.ts +0 -0
  460. /package/{components → dist/components}/tour/tour.types.d.ts.map +0 -0
  461. /package/{components → dist/components}/upload/index.d.ts +0 -0
  462. /package/{components → dist/components}/upload/index.d.ts.map +0 -0
  463. /package/{components → dist/components}/upload/upload.d.ts +0 -0
  464. /package/{components → dist/components}/upload/upload.d.ts.map +0 -0
  465. /package/{components → dist/components}/upload/upload.js +0 -0
  466. /package/{components → dist/components}/upload/upload.js.map +0 -0
  467. /package/{components → dist/components}/upload/upload.types.d.ts +0 -0
  468. /package/{components → dist/components}/upload/upload.types.d.ts.map +0 -0
  469. /package/{components → dist/components}/z-index/index.d.ts +0 -0
  470. /package/{components → dist/components}/z-index/index.d.ts.map +0 -0
  471. /package/{components → dist/components}/z-index/z-index.context.d.ts +0 -0
  472. /package/{components → dist/components}/z-index/z-index.context.d.ts.map +0 -0
  473. /package/{components → dist/components}/z-index/z-index.context.js +0 -0
  474. /package/{components → dist/components}/z-index/z-index.context.js.map +0 -0
  475. /package/{components → dist/components}/z-index/z-index.d.ts +0 -0
  476. /package/{components → dist/components}/z-index/z-index.d.ts.map +0 -0
  477. /package/{components → dist/components}/z-index/z-index.js +0 -0
  478. /package/{components → dist/components}/z-index/z-index.js.map +0 -0
  479. /package/{components → dist/components}/z-index/z-index.store.d.ts +0 -0
  480. /package/{components → dist/components}/z-index/z-index.store.d.ts.map +0 -0
  481. /package/{components → dist/components}/z-index/z-index.store.js +0 -0
  482. /package/{components → dist/components}/z-index/z-index.store.js.map +0 -0
  483. /package/{components → dist/components}/z-index/z-index.types.d.ts +0 -0
  484. /package/{components → dist/components}/z-index/z-index.types.d.ts.map +0 -0
  485. /package/{components → dist/components}/z-index/z-index.types.js +0 -0
  486. /package/{lib.d.ts → dist/lib.d.ts} +0 -0
  487. /package/{lib.d.ts.map → dist/lib.d.ts.map} +0 -0
  488. /package/{lib.js → dist/lib.js} +0 -0
  489. /package/{type.d.ts → dist/type.d.ts} +0 -0
  490. /package/{type.d.ts.map → dist/type.d.ts.map} +0 -0
  491. /package/{utils → dist/utils}/cn.d.ts +0 -0
  492. /package/{utils → dist/utils}/cn.d.ts.map +0 -0
  493. /package/{utils → dist/utils}/cn.js +0 -0
  494. /package/{utils → dist/utils}/cn.js.map +0 -0
  495. /package/{utils → dist/utils}/element-tracker.js +0 -0
  496. /package/{utils → dist/utils}/element-tracker.js.map +0 -0
  497. /package/{utils → dist/utils}/helper.d.ts +0 -0
  498. /package/{utils → dist/utils}/helper.d.ts.map +0 -0
  499. /package/{utils → dist/utils}/helper.js +0 -0
  500. /package/{utils → dist/utils}/helper.js.map +0 -0
  501. /package/{utils → dist/utils}/hoc.js +0 -0
  502. /package/{utils → dist/utils}/hoc.js.map +0 -0
@@ -0,0 +1,233 @@
1
+ ## COMPONENT IDENTITY
2
+ - **Import**: `import { ContextMenu, createContextMenuHandle } from 'solid-tom-ui';`
3
+ - **Exports**: `ContextMenu` (renderer), `createContextMenuHandle` (factory)
4
+ - **Framework**: SolidJS
5
+ - **Purpose**: Context-aware right-click menu with a registry pattern. Each UI zone registers its own items independently; the menu builds the visible list from the current context at trigger time. No coupling between zones — each feature owns its items.
6
+
7
+ ## TYPE SIGNATURES
8
+
9
+ ### createContextMenuHandle
10
+ ```typescript
11
+ import { createContextMenuHandle } from 'solid-tom-ui';
12
+
13
+ function createContextMenuHandle<TContext extends Record<string, unknown>>(): ContextMenuHandle<TContext>;
14
+
15
+ type ContextMenuHandle<TContext> = {
16
+ register: (item: RegistryItem<TContext>) => void;
17
+ unregister: (key: string) => void;
18
+ trigger: (e: MouseEvent, ctx: TContext) => void;
19
+ };
20
+ ```
21
+
22
+ ### ContextMenu
23
+ ```typescript
24
+ import { ContextMenu } from 'solid-tom-ui';
25
+
26
+ type ContextMenuProps<TContext> = {
27
+ handle: ContextMenuHandle<TContext>; // REQUIRED: handle from createContextMenuHandle()
28
+ class?: Partial<Record<
29
+ 'content' | 'item' | 'separator' | 'submenu',
30
+ string
31
+ >>; // CSS slot overrides
32
+ };
33
+ ```
34
+
35
+ ### RegistryItem (discriminated union)
36
+ ```typescript
37
+ // Shared base fields
38
+ type BaseRegistryItem<TContext> = {
39
+ key: string; // REQUIRED: unique ID for dedup / unregister
40
+ label: string; // REQUIRED: display text
41
+ when?: (ctx: TContext) => boolean; // visibility predicate — omit = always visible
42
+ disabled?: (ctx: TContext) => boolean; // disable predicate — omit = always enabled
43
+ shortcut?: string; // display-only hint (e.g. "Ctrl+C"), not bound
44
+ prefixIcon?: JSXElement; // icon element rendered to the left of label
45
+ order?: number; // sort order, lower = higher up (default: 100)
46
+ group?: string; // items in the same group are visually grouped;
47
+ // separators are auto-inserted between groups
48
+ };
49
+
50
+ // Action item
51
+ type ActionRegistryItem<TContext> = BaseRegistryItem<TContext> & {
52
+ type: 'item';
53
+ onClick: (ctx: TContext) => void; // REQUIRED for 'item'
54
+ };
55
+
56
+ // Submenu item
57
+ type SubmenuRegistryItem<TContext> = BaseRegistryItem<TContext> & {
58
+ type: 'submenu';
59
+ items: RegistryItem<TContext>[]; // REQUIRED for 'submenu'; one level deep
60
+ };
61
+
62
+ type RegistryItem<TContext> = ActionRegistryItem<TContext> | SubmenuRegistryItem<TContext>;
63
+ ```
64
+
65
+ ## KEY RULES
66
+ - `createContextMenuHandle<TContext>()` is generic — define your own context type that describes UI state at the moment of right-click
67
+ - Only **one** context menu may be open at a time (shared singleton open/close state) — multiple handles still share this state
68
+ - `<ContextMenu>` **must** be rendered in the JSX tree, typically near the app root to avoid z-index conflicts
69
+ - `prefixIcon` accepts a `JSXElement` (rendered JSX), not a function component
70
+ - Submenus are **one level deep** only — nested `items` arrays inside a submenu are not supported
71
+ - `shortcut` is display-only and does **not** bind keyboard events — wire those separately
72
+
73
+ ## MINIMAL SETUP
74
+
75
+ ```tsx
76
+ import { createContextMenuHandle, ContextMenu } from 'solid-tom-ui';
77
+
78
+ // 1. Define context shape
79
+ type MyCtx = { zone: 'editor' | 'sidebar'; hasSelection: boolean };
80
+
81
+ // 2. Create handle (component level or module scope)
82
+ const handle = createContextMenuHandle<MyCtx>();
83
+
84
+ // 3. Register items
85
+ handle.register({
86
+ key: 'copy',
87
+ type: 'item',
88
+ label: 'Copy',
89
+ when: ctx => ctx.hasSelection,
90
+ onClick: ctx => console.log('copy in', ctx.zone),
91
+ });
92
+
93
+ // 4. Render once near app root
94
+ <ContextMenu handle={handle} />
95
+
96
+ // 5. Trigger on right-click
97
+ <div onContextMenu={e => handle.trigger(e, { zone: 'editor', hasSelection: true })}>
98
+ Right-click here
99
+ </div>
100
+ ```
101
+
102
+ ## USAGE PATTERNS
103
+
104
+ ### Module-scoped handle (shared across components)
105
+ ```ts
106
+ // context-menu.handle.ts
107
+ export type AppCtx = { zone: string; isFile: boolean };
108
+ export const appMenuHandle = createContextMenuHandle<AppCtx>();
109
+
110
+ // FileExplorer.tsx — registers its own items
111
+ appMenuHandle.register({ key: 'rename', type: 'item', label: 'Rename', when: ctx => ctx.isFile, onClick: ctx => rename(ctx) });
112
+
113
+ // Editor.tsx — registers independent items
114
+ appMenuHandle.register({ key: 'copy', type: 'item', label: 'Copy', when: ctx => ctx.zone === 'editor', onClick: () => copy() });
115
+
116
+ // App.tsx — render once
117
+ <ContextMenu handle={appMenuHandle} />
118
+ ```
119
+
120
+ ### Dynamic registration / unregistration
121
+ ```ts
122
+ handle.register({ key: 'admin-delete', type: 'item', label: 'Delete', onClick: () => deleteItem() });
123
+
124
+ // Later (e.g. user logs out):
125
+ handle.unregister('admin-delete');
126
+ ```
127
+
128
+ ### Grouped items with separators
129
+ ```ts
130
+ handle.register({ key: 'cut', type: 'item', label: 'Cut', group: 'clipboard', order: 10, onClick: () => cut() });
131
+ handle.register({ key: 'copy', type: 'item', label: 'Copy', group: 'clipboard', order: 11, onClick: () => copy() });
132
+ handle.register({ key: 'paste', type: 'item', label: 'Paste', group: 'clipboard', order: 12, onClick: () => paste() });
133
+ handle.register({ key: 'delete', type: 'item', label: 'Delete', group: 'danger', order: 20, onClick: () => del() });
134
+ // Separator is auto-inserted between 'clipboard' and 'danger' groups
135
+ ```
136
+
137
+ ### Submenu
138
+ ```ts
139
+ handle.register({
140
+ key: 'export',
141
+ type: 'submenu',
142
+ label: 'Export as',
143
+ items: [
144
+ { key: 'export-png', type: 'item', label: 'PNG', onClick: () => exportPng() },
145
+ { key: 'export-svg', type: 'item', label: 'SVG', onClick: () => exportSvg() },
146
+ { key: 'export-pdf', type: 'item', label: 'PDF', onClick: () => exportPdf() },
147
+ ],
148
+ });
149
+ ```
150
+
151
+ ### Icon and keyboard shortcut hints
152
+ ```ts
153
+ import Copy from 'lucide-solid/icons/copy';
154
+
155
+ handle.register({
156
+ key: 'copy',
157
+ type: 'item',
158
+ label: 'Copy',
159
+ prefixIcon: <Copy size={14} />,
160
+ shortcut: 'Ctrl+C',
161
+ onClick: () => copy(),
162
+ });
163
+ ```
164
+
165
+ ### Multiple independent menus (separate context types)
166
+ ```ts
167
+ const editorMenu = createContextMenuHandle<EditorCtx>();
168
+ const tableMenu = createContextMenuHandle<TableCtx>();
169
+
170
+ <ContextMenu handle={editorMenu} />
171
+ <ContextMenu handle={tableMenu} />
172
+ ```
173
+
174
+ ### CSS slot override
175
+ ```tsx
176
+ <ContextMenu
177
+ handle={handle}
178
+ class={{
179
+ content: 'rounded-xl shadow-2xl',
180
+ item: 'text-sm',
181
+ separator: 'my-1 opacity-30',
182
+ submenu: 'font-medium',
183
+ }}
184
+ />
185
+ ```
186
+
187
+ ## DECISION RULES
188
+
189
+ **Single handle vs multiple handles:**
190
+ - One shared context type across the entire app → single module-scoped handle
191
+ - Completely separate feature areas with different context shapes → separate handles per area
192
+
193
+ **`when` vs `disabled`:**
194
+ - Item doesn't belong to this context at all → use `when` (hides the item)
195
+ - Item belongs but action is not available right now → use `disabled` (shows grayed-out)
196
+
197
+ **`order` and `group`:**
198
+ - Use `group` to visually separate categories (separators are automatic)
199
+ - Use `order` to control position within a group (lower number = higher position)
200
+ - If order is not specified, items are rendered in registration order (default: 100)
201
+
202
+ **`prefixIcon`:**
203
+ - Pass a rendered JSX element: `prefixIcon={<Copy size={14} />}`
204
+ - Import icons by direct path to avoid bundling the entire lucide library
205
+
206
+ ## ANTI-PATTERNS
207
+ ```tsx
208
+ // ❌ Rendering ContextMenu deep in a child component — may cause z-index issues
209
+ <Modal>
210
+ <ContextMenu handle={handle} /> // wrong — render near app root instead
211
+ </Modal>
212
+
213
+ // ❌ Passing a function component as prefixIcon (it won't render)
214
+ prefixIcon={Copy} // wrong
215
+ prefixIcon={<Copy size={14} />} // ✅ pass JSX element
216
+
217
+ // ❌ Nesting submenus more than one level deep (not supported)
218
+ {
219
+ type: 'submenu',
220
+ items: [{ type: 'submenu', items: [...] }] // second level ignored
221
+ }
222
+
223
+ // ❌ Expecting shortcut to bind a keyboard event
224
+ shortcut: 'Ctrl+Z' // display only — wire onKeyDown separately
225
+ ```
226
+
227
+ ---
228
+
229
+ ## Component Conventions
230
+
231
+ > **CSS encoding**: internal CSS classes use short encoded names (e.g. `cm01`, `cm02`) per project convention.
232
+
233
+ > **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.
@@ -0,0 +1,244 @@
1
+ ## COMPONENT IDENTITY
2
+ - **Import**: `import { Diff } from 'solid-tom-ui';`
3
+ - **Export**: `Diff` (named export)
4
+ - **Framework**: SolidJS
5
+ - **Purpose**: Interactive image/content comparison slider — user drags a resizer to reveal left vs right panels; NOT a `ParentComponent`, content passed via `images` prop array
6
+
7
+ ---
8
+
9
+ ## TYPE SIGNATURE
10
+
11
+ ```ts
12
+ type DiffProps = {
13
+ images: SolidComponent[]; // REQUIRED — must be exactly 2 elements
14
+ class?: string; // extra classes on root <figure>
15
+ };
16
+ ```
17
+
18
+ ## CLASS SLOTS
19
+
20
+ `Diff` is a single-element component — the `class` prop targets the root `<figure>` only. There are no named slots.
21
+
22
+ > **CSS encoding**: internal CSS classes follow the project convention using short encoded names (e.g. `df01`, `df02`). Do not reference DaisyUI's `diff-item-1` / `diff-item-2` class names directly in your own styles — use the `class` prop or wrap with your own container.
23
+
24
+ ---
25
+
26
+ ## PROP REFERENCE
27
+
28
+ | Prop | Type | Required | Description |
29
+ | -------- | ------------------ | -------- | ------------------------------------------------------------------------------------- |
30
+ | `images` | `SolidComponent[]` | ✅ YES | Array of **exactly 2** JSX elements — index `0` = left panel, index `1` = right panel |
31
+ | `class` | `string` | ❌ NO | Extra Tailwind classes appended to the root `<figure>` element |
32
+
33
+ ---
34
+
35
+ ## HARD CONSTRAINT: `images` must have exactly 2 elements
36
+
37
+ - Passing fewer or more than 2 elements → component returns `<></>` (renders nothing) and fires `console.warn('You need to provide exactly 2 images')`
38
+ - There is no partial rendering fallback — the entire component is suppressed
39
+
40
+ ```ts
41
+ // ✅ Valid
42
+ images={[<img src="a.webp" />, <img src="b.webp" />]}
43
+
44
+ // ❌ Invalid — renders nothing
45
+ images={[<img src="a.webp" />]}
46
+ images={[<img src="a.webp" />, <img src="b.webp" />, <img src="c.webp" />]}
47
+ ```
48
+
49
+ ---
50
+
51
+ ## INTERNAL DOM STRUCTURE
52
+
53
+ ```
54
+ <figure class="diff aspect-video [class]" tabindex="0">
55
+
56
+ ├── <div class="diff-item-1" role="img" tabindex="0">
57
+ │ {images[0]} ← LEFT panel (revealed by dragging resizer right)
58
+ │ </div>
59
+
60
+ ├── <div class="diff-item-2" role="img">
61
+ │ {images[1]} ← RIGHT panel (base/background layer)
62
+ │ </div>
63
+
64
+ └── <div class="diff-resizer"></div> ← invisible drag handle
65
+ ```
66
+
67
+ ### Layer rendering order
68
+
69
+ - `diff-item-2` (right/background) renders behind — visible in full by default
70
+ - `diff-item-1` (left/foreground) renders on top with `z-index: 1`, clipped by the resizer position
71
+ - Dragging resizer RIGHT → reveals more of `images[0]` (left panel)
72
+ - Dragging resizer LEFT → reveals more of `images[1]` (right panel)
73
+
74
+ ---
75
+
76
+ ## INTERACTION MECHANISM — CSS-only, no JS state
77
+
78
+ The slider is driven entirely by CSS using a native `resize: horizontal` invisible div (`.diff-resizer`):
79
+
80
+ - Default resizer position: `width: 50cqi` → panels shown 50/50
81
+ - Resizer `min-width: 1rem`, `max-width: calc(100cqi - 1rem)` — cannot be dragged beyond edges
82
+ - **Keyboard accessible**: `<figure tabindex="0">` and `<div class="diff-item-1" tabindex="0">` both focusable
83
+ - Focus on `<figure>` → resizer snaps to `min-width: 95cqi` (left panel nearly full)
84
+ - Focus on `diff-item-1` → resizer snaps to `min-width: 5cqi` (right panel nearly full)
85
+ - Snap transitions animated with `transition: min-width 0.3s ease-out`
86
+
87
+ Agents do NOT manage any open/close or drag state — it is fully CSS-driven.
88
+
89
+ ---
90
+
91
+ ## CONTENT RULES FOR `images[0]` AND `images[1]`
92
+
93
+ Both slots accept **any JSX element**, not just `<img>`. Internal CSS applies to all direct children:
94
+
95
+ ```css
96
+ /* Applied to direct children of both diff-item-1 and diff-item-2 */
97
+ position: absolute;
98
+ top: 0;
99
+ bottom: 0;
100
+ left: 0;
101
+ height: 100%;
102
+ width: 100cqi;
103
+ object-fit: cover;
104
+ object-position: center;
105
+ pointer-events: none;
106
+ ```
107
+
108
+ ### What this means for agents:
109
+
110
+ - **`<img>`**: works perfectly — `object-fit: cover` is applied automatically
111
+ - **`<div>`**: also works — div fills the full panel area. Use `grid place-content-center` or flex for internal layout
112
+ - **Interactive elements inside panels**: will NOT work — `pointer-events: none` is applied to all children. Do NOT put buttons, links, or inputs inside `images`
113
+ - **Do NOT add layout wrappers** around the img/div — children are positioned absolutely with `width: 100cqi`
114
+
115
+ ---
116
+
117
+ ## ASPECT RATIO
118
+
119
+ - Root `<figure>` always has class `aspect-video` (16:9 ratio) applied by default
120
+ - To change aspect ratio, override via `class` prop:
121
+
122
+ ```tsx
123
+ // Square
124
+ <Diff images={[...]} class="aspect-square" />
125
+
126
+ // Custom ratio
127
+ <Diff images={[...]} class="aspect-4/3" />
128
+
129
+ // Fixed height
130
+ <Diff images={[...]} class="h-100" />
131
+ ```
132
+
133
+ ---
134
+
135
+ ## USAGE PATTERNS
136
+
137
+ ### Pattern 1 — Image vs image (most common)
138
+
139
+ ```tsx
140
+ <Diff
141
+ images={[
142
+ <img alt="before" src="/images/before.webp" />,
143
+ <img alt="after" src="/images/after.webp" />,
144
+ ]}
145
+ />
146
+ ```
147
+
148
+ ### Pattern 2 — Image vs custom div content
149
+
150
+ ```tsx
151
+ <Diff
152
+ images={[
153
+ <img alt="photo" src="/images/photo.webp" />,
154
+ <div class="bg-base-200 text-base-content grid place-content-center text-6xl font-black">
155
+ BEFORE
156
+ </div>,
157
+ ]}
158
+ />
159
+ ```
160
+
161
+ ### Pattern 3 — Custom aspect ratio
162
+
163
+ ```tsx
164
+ <Diff
165
+ class="aspect-square w-100"
166
+ images={[
167
+ <img alt="original" src="/images/original.webp" />,
168
+ <img alt="filtered" src="/images/filtered.webp" />,
169
+ ]}
170
+ />
171
+ ```
172
+
173
+ ### Pattern 4 — Two styled div panels
174
+
175
+ ```tsx
176
+ <Diff
177
+ images={[
178
+ <div class="bg-primary text-primary-content grid place-content-center text-4xl font-bold">
179
+ Dark Mode
180
+ </div>,
181
+ <div class="bg-base-100 text-base-content grid place-content-center text-4xl font-bold">
182
+ Light Mode
183
+ </div>,
184
+ ]}
185
+ />
186
+ ```
187
+
188
+ ---
189
+
190
+ ## BEHAVIOR NOTES FOR AGENTS
191
+
192
+ 1. **`images[0]` = left (foreground), `images[1]` = right (background)** — the order determines which panel is clipped by the drag handle. Left panel sits on top and is revealed by dragging right.
193
+
194
+ 2. **Component is a `<figure>` element** — semantically appropriate for media comparison. Root is not a `<div>`.
195
+
196
+ 3. **`pointer-events: none` on all panel children** — nothing inside `images[0]` or `images[1]` can be clicked, hovered, or interacted with. Only the resizer handle is interactive.
197
+
198
+ 4. **No JS drag state** — the drag interaction is entirely driven by the native browser `resize: horizontal` CSS property on `.diff-resizer`. No SolidJS signals or event handlers involved.
199
+
200
+ 5. **`class` prop targets the root `<figure>` only** — cannot target internal `.diff-item-1`, `.diff-item-2`, or `.diff-resizer` via this prop.
201
+
202
+ 6. **Width fills container** — root `<figure>` has `width: 100%`. Wrap in a sized container or use `class="w-[500px]"` to constrain.
203
+
204
+ ---
205
+
206
+ ## COMMON MISTAKES TO AVOID
207
+
208
+ | Mistake | Correct approach |
209
+ | ------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
210
+ | Passing 1 or 3+ items in `images` | Always pass exactly 2 elements — no more, no less |
211
+ | Putting interactive elements (buttons, links) inside `images` | `pointer-events: none` blocks all interactions inside panels |
212
+ | Wrapping `<img>` in an extra `<div>` | Pass `<img>` directly — children are already positioned absolutely to fill the panel |
213
+ | Expecting `class` to style inner panels | `class` only applies to the root `<figure>` |
214
+ | Assuming left panel is `images[1]` | `images[0]` = left/foreground (clipped), `images[1]` = right/background |
215
+ | Using without a sized container | Add `w-full`, `w-[Npx]` or similar to control width |
216
+
217
+ ---
218
+
219
+ ## FULL EXAMPLE
220
+
221
+ ```tsx
222
+ import { Diff } from 'solid-tom-ui';
223
+
224
+ // Image comparison
225
+ <Diff
226
+ images={[
227
+ <img alt="sharp" src="/images/sharp.webp" />,
228
+ <img alt="blurred" src="/images/blurred.webp" />,
229
+ ]}
230
+ />
231
+
232
+ // Image vs label panel, square aspect
233
+ <Diff
234
+ class="aspect-square w-full max-w-lg"
235
+ images={[
236
+ <img alt="photo" src="/images/photo.webp" />,
237
+ <div class="bg-neutral text-neutral-content grid place-content-center text-5xl font-black">
238
+ Solid UI
239
+ </div>,
240
+ ]}
241
+ />
242
+ ```
243
+
244
+ > **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.
@@ -0,0 +1,151 @@
1
+ ## COMPONENT IDENTITY
2
+ - **Import**: `import { Divider } from 'solid-tom-ui';`
3
+ - **Export**: `Divider` (named export)
4
+ - **Framework**: SolidJS
5
+ - **Purpose**: Flexible visual separator — renders a plain line or a line with centered content (text, icons, badges); supports horizontal and vertical orientations
6
+
7
+ ## Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ | ------------- | --------------------------------------------- | -------------- | --------------------------------------------------------------------------- |
11
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Direction of the dividing line |
12
+ | `variant` | `'solid' \| 'dashed' \| 'dotted'` | `'solid'` | Border style of the line |
13
+ | `align` | `'start' \| 'center' \| 'end'` | `'center'` | Position of children content along the line (only applies when children is present) |
14
+ | `thickness` | `1 \| 2 \| 3 \| 4` | `1` | Line thickness in pixels |
15
+ | `color` | `BaseColorProps` | — | Màu hệ thống cho đường kẻ và text content — dùng `--color` CSS variable |
16
+ | `class` | `Partial<Record<'root' \| 'line' \| 'content', string>>` | — | Override classes for individual slots (see Class Slots below) |
17
+ | `children` | `JSX.Element` | — | Content rendered between the two line segments |
18
+
19
+ ## Class Slots
20
+
21
+ `Divider` exposes a unified `class` prop with three named slots:
22
+
23
+ | Slot | Element | When available |
24
+ | --------- | -------------------------------------------- | ------------------ |
25
+ | `root` | `<hr>` (plain) or `<div>` (with children) | Always |
26
+ | `line` | Both leading and trailing line segments | Only with children |
27
+ | `content` | `<span>` wrapping children content | Only with children |
28
+
29
+ > **CSS encoding**: internal CSS classes use short encoded names (e.g. `dv01`, `dv02`) per project convention.
30
+
31
+ ## Render Behavior
32
+
33
+ The component has two distinct render paths:
34
+
35
+ - **No children** → renders a single `<hr>` element (plain line, zero markup overhead).
36
+ - **With children** → renders a `<div>` containing a leading line, a content `<span>`, and a trailing line. The `align` prop controls how flex space is distributed between the two segments.
37
+
38
+ ## Basic Usage
39
+
40
+ ```tsx
41
+ // Plain horizontal line
42
+ <Divider />
43
+
44
+ // Dashed / dotted
45
+ <Divider variant="dashed" />
46
+ <Divider variant="dotted" />
47
+
48
+ // With label
49
+ <Divider>OR</Divider>
50
+ <Divider>Section Title</Divider>
51
+ ```
52
+
53
+ ## Alignment
54
+
55
+ ```tsx
56
+ <Divider align="start">Left-aligned label</Divider>
57
+ <Divider align="center">Center (default)</Divider>
58
+ <Divider align="end">Right-aligned label</Divider>
59
+ ```
60
+
61
+ ## Thickness
62
+
63
+ ```tsx
64
+ <Divider thickness={1}>1px (default)</Divider>
65
+ <Divider thickness={2}>2px</Divider>
66
+ <Divider thickness={3}>3px</Divider>
67
+ <Divider thickness={4}>4px</Divider>
68
+ ```
69
+
70
+ ## Custom Line Color
71
+
72
+ Use `class={{ line: '...' }}` to override the line color. This class is applied to **both** line segments.
73
+
74
+ ```tsx
75
+ <Divider class={{ line: 'border-primary/50' }}>Primary</Divider>
76
+ <Divider class={{ line: 'border-error/60' }} variant="dotted">Error</Divider>
77
+ <Divider class={{ line: 'border-amber-400/60' }} thickness={2}>Amber</Divider>
78
+ ```
79
+
80
+ ## Custom Children (Icons, Badges)
81
+
82
+ Any JSX can be passed as children:
83
+
84
+ ```tsx
85
+ // Badge
86
+ <Divider class={{ line: 'border-primary/40' }}>
87
+ <span class="bg-primary/10 text-primary rounded-full px-3 py-0.5 text-xs font-semibold">
88
+ New Section
89
+ </span>
90
+ </Divider>
91
+
92
+ // Icon + text
93
+ <Divider class={{ line: 'border-success/40' }} variant="dashed">
94
+ <span class="text-success flex items-center gap-1.5 text-sm font-medium">
95
+ <CheckIcon class="h-3.5 w-3.5" />
96
+ Completed
97
+ </span>
98
+ </Divider>
99
+ ```
100
+
101
+ ## Vertical Divider
102
+
103
+ Use `orientation="vertical"` to create a vertical separator inside a flex row. The parent **must** use `items-stretch` (or set an explicit height) for the line to fill the available space.
104
+
105
+ ```tsx
106
+ // Plain vertical line between items
107
+ <div class="flex items-stretch gap-4">
108
+ <span>Left</span>
109
+ <Divider orientation="vertical" />
110
+ <span>Right</span>
111
+ </div>
112
+
113
+ // Vertical with label (parent needs an explicit height)
114
+ <div class="flex h-32 items-stretch gap-4">
115
+ <span class="flex items-center">Panel A</span>
116
+ <Divider orientation="vertical" variant="dashed">OR</Divider>
117
+ <span class="flex items-center">Panel B</span>
118
+ </div>
119
+
120
+ // Colored vertical line
121
+ <Divider orientation="vertical" class={{ line: 'border-primary/40' }} />
122
+ ```
123
+
124
+ ## Real-world Example — Login Form
125
+
126
+ ```tsx
127
+ <div class="space-y-4">
128
+ <button class="btn btn-primary w-full">Continue with Google</button>
129
+ <button class="btn btn-neutral btn-outline w-full">Continue with GitHub</button>
130
+ <Divider>OR</Divider>
131
+ <input class="input input-bordered w-full" placeholder="Email address" />
132
+ <button class="btn btn-primary w-full">Sign in</button>
133
+ </div>
134
+ ```
135
+
136
+ ## Accessibility
137
+
138
+ - Both render paths emit `role="separator"` and `aria-orientation` matching the `orientation` prop.
139
+ - Content inside `children` is wrapped in a `<span>` with `select-none` to prevent accidental text selection of decorative labels.
140
+
141
+ ## Common Mistakes
142
+
143
+ | Mistake | Fix |
144
+ | --- | --- |
145
+ | Using `class="border-primary"` as string | `class` is now a slot object — use `class={{ root: '...' }}` |
146
+ | Coloring lines without effect | Use `class={{ line: 'border-primary/50' }}`, not `class={{ root: '...' }}` |
147
+ | Vertical divider not visible | Ensure parent has `items-stretch` or a fixed height |
148
+ | `align` has no effect | `align` only works when `children` is provided |
149
+ | `line` / `content` slots not applying | These slots only apply when `children` is present |
150
+
151
+ > **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.