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,667 @@
1
+ ```tsx
2
+ import { createColumnHelper } from '@tanstack/solid-table';
3
+ import { Table } from '../table';
4
+
5
+ type SalesReport = {
6
+ id: number;
7
+ region: string;
8
+ product: string;
9
+ q1Revenue: number;
10
+ q1Units: number;
11
+ q2Revenue: number;
12
+ q2Units: number;
13
+ q3Revenue: number;
14
+ q3Units: number;
15
+ q4Revenue: number;
16
+ q4Units: number;
17
+ };
18
+
19
+ const salesData: SalesReport[] = [
20
+ {
21
+ id: 1,
22
+ region: 'North',
23
+ product: 'Widget A',
24
+ q1Revenue: 120_000,
25
+ q1Units: 340,
26
+ q2Revenue: 135_000,
27
+ q2Units: 390,
28
+ q3Revenue: 98_000,
29
+ q3Units: 280,
30
+ q4Revenue: 210_000,
31
+ q4Units: 600,
32
+ },
33
+ {
34
+ id: 2,
35
+ region: 'South',
36
+ product: 'Widget B',
37
+ q2Revenue: 87_000,
38
+ q2Units: 210,
39
+ q1Revenue: 92_000,
40
+ q1Units: 270,
41
+ q3Revenue: 115_000,
42
+ q3Units: 320,
43
+ q4Revenue: 178_000,
44
+ q4Units: 510,
45
+ },
46
+ {
47
+ id: 3,
48
+ region: 'East',
49
+ product: 'Widget A',
50
+ q1Revenue: 75_000,
51
+ q1Units: 215,
52
+ q2Revenue: 81_000,
53
+ q2Units: 230,
54
+ q3Revenue: 93_000,
55
+ q3Units: 265,
56
+ q4Revenue: 142_000,
57
+ q4Units: 405,
58
+ },
59
+ {
60
+ id: 4,
61
+ region: 'West',
62
+ product: 'Widget C',
63
+ q1Revenue: 204_000,
64
+ q1Units: 580,
65
+ q2Revenue: 198_000,
66
+ q2Units: 560,
67
+ q3Revenue: 221_000,
68
+ q3Units: 630,
69
+ q4Revenue: 315_000,
70
+ q4Units: 895,
71
+ },
72
+ {
73
+ id: 5,
74
+ region: 'Central',
75
+ product: 'Widget B',
76
+ q1Revenue: 56_000,
77
+ q1Units: 160,
78
+ q2Revenue: 63_000,
79
+ q2Units: 180,
80
+ q3Revenue: 71_000,
81
+ q3Units: 200,
82
+ q4Revenue: 95_000,
83
+ q4Units: 270,
84
+ },
85
+ ];
86
+
87
+ const salesCol = createColumnHelper<SalesReport>();
88
+
89
+ const fmt = (n: number) => `$${n.toLocaleString()}`;
90
+
91
+ const salesGroupedColumns = [
92
+ salesCol.group({
93
+ id: 'info',
94
+ header: 'Region / Product',
95
+ meta: { align: 'center' },
96
+ columns: [
97
+ salesCol.accessor('region', {
98
+ header: 'Region',
99
+ size: 100,
100
+ enableSorting: false,
101
+ meta: { align: 'center' },
102
+ }),
103
+ salesCol.accessor('product', {
104
+ header: 'Product',
105
+ size: 110,
106
+ enableSorting: false,
107
+ meta: { align: 'center' },
108
+ }),
109
+ ],
110
+ }),
111
+ salesCol.group({
112
+ id: 'q1',
113
+ header: 'Q1',
114
+ meta: { align: 'center' },
115
+ columns: [
116
+ salesCol.accessor('q1Revenue', {
117
+ header: 'Revenue',
118
+ size: 110,
119
+ cell: info => fmt(info.getValue()),
120
+ meta: { align: 'center' },
121
+ }),
122
+ salesCol.accessor('q1Units', {
123
+ header: 'Units',
124
+ size: 80,
125
+ meta: { align: 'center' },
126
+ }),
127
+ ],
128
+ }),
129
+ salesCol.group({
130
+ id: 'q2',
131
+ header: 'Q2',
132
+ meta: { align: 'center' },
133
+ columns: [
134
+ salesCol.accessor('q2Revenue', {
135
+ header: 'Revenue',
136
+ size: 110,
137
+ cell: info => fmt(info.getValue()),
138
+ meta: { align: 'center' },
139
+ }),
140
+ salesCol.accessor('q2Units', {
141
+ header: 'Units',
142
+ size: 80,
143
+ meta: { align: 'center' },
144
+ }),
145
+ ],
146
+ }),
147
+ salesCol.group({
148
+ id: 'q3',
149
+ header: 'Q3',
150
+ meta: { align: 'center' },
151
+ columns: [
152
+ salesCol.accessor('q3Revenue', {
153
+ header: 'Revenue',
154
+ size: 110,
155
+ cell: info => fmt(info.getValue()),
156
+ meta: { align: 'center' },
157
+ }),
158
+ salesCol.accessor('q3Units', {
159
+ header: 'Units',
160
+ size: 80,
161
+ meta: { align: 'center' },
162
+ }),
163
+ ],
164
+ }),
165
+ salesCol.group({
166
+ id: 'q4',
167
+ header: 'Q4',
168
+ meta: { align: 'center' },
169
+ columns: [
170
+ salesCol.accessor('q4Revenue', {
171
+ header: 'Revenue',
172
+ size: 110,
173
+ cell: info => fmt(info.getValue()),
174
+ meta: { align: 'center' },
175
+ }),
176
+ salesCol.accessor('q4Units', {
177
+ header: 'Units',
178
+ size: 80,
179
+ meta: { align: 'center' },
180
+ }),
181
+ ],
182
+ }),
183
+ ];
184
+
185
+ export function TableGroupingHeader() {
186
+ return (
187
+ <div class="space-y-3 p-6">
188
+ <h2 class="text-lg font-semibold">1. Grouping Table Head (thead 2 rows)</h2>
189
+ <p class="text-sm opacity-60">
190
+ Dùng <code class="bg-base-200 rounded px-1">col.group()</code> để nhóm cột. TanStack Table
191
+ tự sinh 2 header rows trong <code class="bg-base-200 rounded px-1">{'<thead>'}</code>: row 1
192
+ là group headers với <code class="bg-base-200 rounded px-1">colSpan=2</code>, row 2 là leaf
193
+ headers. Divider giữa 2 rows xuất hiện nhờ{' '}
194
+ <code class="bg-base-200 rounded px-1">border.horizontal = true</code>.
195
+ </p>
196
+ <Table
197
+ columns={salesGroupedColumns}
198
+ data={salesData}
199
+ border={{ outer: true, horizontal: true, vertical: true }}
200
+ getRowId={row => String(row.id)}
201
+ />
202
+ </div>
203
+ );
204
+ }
205
+
206
+ const TOTAL_SALES_COLS = 10;
207
+
208
+ const salesColumns = [
209
+ salesCol.accessor('region', {
210
+ header: 'Region',
211
+ size: 100,
212
+ enableSorting: false,
213
+ meta: { align: 'center' },
214
+ }),
215
+ salesCol.accessor('product', {
216
+ header: 'Product',
217
+ size: 110,
218
+ enableSorting: false,
219
+ meta: { align: 'center' },
220
+ }),
221
+ salesCol.group({
222
+ id: 'q1',
223
+ header: 'Q1',
224
+ meta: { align: 'center' },
225
+ columns: [
226
+ salesCol.accessor('q1Revenue', {
227
+ header: 'Revenue',
228
+ size: 110,
229
+ cell: info => fmt(info.getValue()),
230
+ meta: { align: 'center' },
231
+ }),
232
+ salesCol.accessor('q1Units', {
233
+ header: 'Units',
234
+ size: 80,
235
+ meta: { align: 'center' },
236
+ }),
237
+ ],
238
+ }),
239
+ salesCol.group({
240
+ id: 'q2',
241
+ header: 'Q2',
242
+ meta: { align: 'center' },
243
+ columns: [
244
+ salesCol.accessor('q2Revenue', {
245
+ header: 'Revenue',
246
+ size: 110,
247
+ cell: info => fmt(info.getValue()),
248
+ meta: { align: 'center' },
249
+ }),
250
+ salesCol.accessor('q2Units', {
251
+ header: 'Units',
252
+ size: 80,
253
+ meta: { align: 'center' },
254
+ }),
255
+ ],
256
+ }),
257
+ salesCol.group({
258
+ id: 'q3',
259
+ header: 'Q3',
260
+ meta: { align: 'center' },
261
+ columns: [
262
+ salesCol.accessor('q3Revenue', {
263
+ header: 'Revenue',
264
+ size: 110,
265
+ cell: info => fmt(info.getValue()),
266
+ meta: { align: 'center' },
267
+ }),
268
+ salesCol.accessor('q3Units', {
269
+ header: 'Units',
270
+ size: 80,
271
+ meta: { align: 'center' },
272
+ }),
273
+ ],
274
+ }),
275
+ salesCol.group({
276
+ id: 'q4',
277
+ header: 'Q4',
278
+ meta: { align: 'center' },
279
+ columns: [
280
+ salesCol.accessor('q4Revenue', {
281
+ header: 'Revenue',
282
+ size: 110,
283
+ cell: info => fmt(info.getValue()),
284
+ meta: { align: 'center' },
285
+ }),
286
+ salesCol.accessor('q4Units', {
287
+ header: 'Units',
288
+ size: 80,
289
+ meta: { align: 'center' },
290
+ }),
291
+ ],
292
+ }),
293
+ ];
294
+
295
+ const cellColSpanOnCell = (
296
+ cell: import('@tanstack/solid-table').Cell<SalesReport, unknown>,
297
+ rowIndex: number,
298
+ ) => {
299
+ const row = salesData[rowIndex];
300
+ if (!row) return {};
301
+
302
+ if (row.product === 'Widget B') {
303
+ if (cell.column.id === 'product') return { colSpan: TOTAL_SALES_COLS - 1 };
304
+
305
+ const hiddenIds = [
306
+ 'q1Revenue',
307
+ 'q1Units',
308
+ 'q2Revenue',
309
+ 'q2Units',
310
+ 'q3Revenue',
311
+ 'q3Units',
312
+ 'q4Revenue',
313
+ 'q4Units',
314
+ ];
315
+ if (hiddenIds.includes(cell.column.id)) return { colSpan: 0 };
316
+ }
317
+ return {};
318
+ };
319
+
320
+ export function TableCellColSpan() {
321
+ return (
322
+ <div class="space-y-3 p-6">
323
+ <h2 class="text-lg font-semibold">
324
+ 2. Body Cell colSpan — hàng "Widget B" chiếm toàn dòng + thead rowSpan
325
+ </h2>
326
+ <p class="text-sm opacity-60">
327
+ Prop <code class="bg-base-200 rounded px-1">onCell</code> trả về{' '}
328
+ <code class="bg-base-200 rounded px-1">{'{ colSpan: N }'}</code> cho cell cần mở rộng, và{' '}
329
+ <code class="bg-base-200 rounded px-1">{'{ colSpan: 0 }'}</code> cho các cell bị che để ẩn
330
+ chúng khỏi DOM. Đây là colSpan trên <code class="bg-base-200 rounded px-1">{'<td>'}</code>{' '}
331
+ trong <code class="bg-base-200 rounded px-1">{'<tbody>'}</code>. Ngoài ra, vì{' '}
332
+ <code class="bg-base-200 rounded px-1">region</code> và{' '}
333
+ <code class="bg-base-200 rounded px-1">product</code> là flat columns nằm cùng cấp với các
334
+ group Q1..Q4, TanStack tự tính <code class="bg-base-200 rounded px-1">rowSpan=2</code> —
335
+ chúng chiếm 2 dòng trong thead và căn giữa theo cả chiều dọc lẫn chiều ngang.
336
+ </p>
337
+ <Table
338
+ columns={salesColumns}
339
+ data={salesData}
340
+ border={{ outer: true, horizontal: true, vertical: true }}
341
+ getRowId={row => String(row.id)}
342
+ onCell={cellColSpanOnCell}
343
+ />
344
+ </div>
345
+ );
346
+ }
347
+
348
+ const cellRowSpanOnCell = (
349
+ cell: import('@tanstack/solid-table').Cell<SalesReport, unknown>,
350
+ rowIndex: number,
351
+ ) => {
352
+ if (cell.column.id === 'q2Revenue') {
353
+ if (rowIndex === 3) return { rowSpan: 2 };
354
+ if (rowIndex === 4) return { rowSpan: 0 };
355
+ }
356
+ return {};
357
+ };
358
+
359
+ export function TableCellRowSpan() {
360
+ return (
361
+ <div class="space-y-3 p-6">
362
+ <h2 class="text-lg font-semibold">
363
+ 3. Body Cell rowSpan — "$198,000" (West · Q2 Revenue) chiếm 2 dòng
364
+ </h2>
365
+ <p class="text-sm opacity-60">
366
+ Trả về <code class="bg-base-200 rounded px-1">{'{ rowSpan: 2 }'}</code> cho cell dòng 4 và{' '}
367
+ <code class="bg-base-200 rounded px-1">{'{ rowSpan: 0 }'}</code> cho cell dòng 5 cùng cột để
368
+ ẩn nó (bị che bởi cell phía trên). Đây là rowSpan trên{' '}
369
+ <code class="bg-base-200 rounded px-1">{'<td>'}</code> trong{' '}
370
+ <code class="bg-base-200 rounded px-1">{'<tbody>'}</code>, khác với grouping header.
371
+ </p>
372
+ <Table
373
+ columns={salesColumns}
374
+ data={salesData}
375
+ border={{ outer: true, horizontal: true, vertical: true }}
376
+ getRowId={row => String(row.id)}
377
+ onCell={cellRowSpanOnCell}
378
+ />
379
+ </div>
380
+ );
381
+ }
382
+
383
+ const salesColumnsPerColOnCell = [
384
+ salesCol.accessor('region', {
385
+ header: 'Region',
386
+ size: 100,
387
+ enableSorting: false,
388
+ meta: { align: 'center' },
389
+ }),
390
+ salesCol.accessor('product', {
391
+ header: 'Product',
392
+ size: 110,
393
+ enableSorting: false,
394
+ meta: {
395
+ align: 'center',
396
+
397
+ onCell: (cell, rowIndex) => {
398
+ const row = salesData[rowIndex];
399
+ if (row?.product === 'Widget B') return { colSpan: TOTAL_SALES_COLS - 1 };
400
+ return {};
401
+ },
402
+ },
403
+ }),
404
+ salesCol.group({
405
+ id: 'q1',
406
+ header: 'Q1',
407
+ meta: { align: 'center' },
408
+ columns: [
409
+ salesCol.accessor('q1Revenue', {
410
+ header: 'Revenue',
411
+ size: 110,
412
+ cell: info => fmt(info.getValue()),
413
+ meta: {
414
+ align: 'center',
415
+ onCell: (_, rowIndex) => {
416
+ const row = salesData[rowIndex];
417
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
418
+ },
419
+ },
420
+ }),
421
+ salesCol.accessor('q1Units', {
422
+ header: 'Units',
423
+ size: 80,
424
+ meta: {
425
+ align: 'center',
426
+ onCell: (_, rowIndex) => {
427
+ const row = salesData[rowIndex];
428
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
429
+ },
430
+ },
431
+ }),
432
+ ],
433
+ }),
434
+ salesCol.group({
435
+ id: 'q2',
436
+ header: 'Q2',
437
+ meta: { align: 'center' },
438
+ columns: [
439
+ salesCol.accessor('q2Revenue', {
440
+ header: 'Revenue',
441
+ size: 110,
442
+ cell: info => fmt(info.getValue()),
443
+ meta: {
444
+ align: 'center',
445
+ onCell: (_, rowIndex) => {
446
+ const row = salesData[rowIndex];
447
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
448
+ },
449
+ },
450
+ }),
451
+ salesCol.accessor('q2Units', {
452
+ header: 'Units',
453
+ size: 80,
454
+ meta: {
455
+ align: 'center',
456
+ onCell: (_, rowIndex) => {
457
+ const row = salesData[rowIndex];
458
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
459
+ },
460
+ },
461
+ }),
462
+ ],
463
+ }),
464
+ salesCol.group({
465
+ id: 'q3',
466
+ header: 'Q3',
467
+ meta: { align: 'center' },
468
+ columns: [
469
+ salesCol.accessor('q3Revenue', {
470
+ header: 'Revenue',
471
+ size: 110,
472
+ cell: info => fmt(info.getValue()),
473
+ meta: {
474
+ align: 'center',
475
+ onCell: (_, rowIndex) => {
476
+ const row = salesData[rowIndex];
477
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
478
+ },
479
+ },
480
+ }),
481
+ salesCol.accessor('q3Units', {
482
+ header: 'Units',
483
+ size: 80,
484
+ meta: {
485
+ align: 'center',
486
+ onCell: (_, rowIndex) => {
487
+ const row = salesData[rowIndex];
488
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
489
+ },
490
+ },
491
+ }),
492
+ ],
493
+ }),
494
+ salesCol.group({
495
+ id: 'q4',
496
+ header: 'Q4',
497
+ meta: { align: 'center' },
498
+ columns: [
499
+ salesCol.accessor('q4Revenue', {
500
+ header: 'Revenue',
501
+ size: 110,
502
+ cell: info => fmt(info.getValue()),
503
+ meta: {
504
+ align: 'center',
505
+ onCell: (_, rowIndex) => {
506
+ const row = salesData[rowIndex];
507
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
508
+ },
509
+ },
510
+ }),
511
+ salesCol.accessor('q4Units', {
512
+ header: 'Units',
513
+ size: 80,
514
+ meta: {
515
+ align: 'center',
516
+ onCell: (_, rowIndex) => {
517
+ const row = salesData[rowIndex];
518
+ return row?.product === 'Widget B' ? { colSpan: 0 } : {};
519
+ },
520
+ },
521
+ }),
522
+ ],
523
+ }),
524
+ ];
525
+
526
+ export function TablePerColumnOnCell() {
527
+ return (
528
+ <div class="space-y-3 p-6">
529
+ <h2 class="text-lg font-semibold">
530
+ 4. Per-column <code class="bg-base-200 rounded px-1">meta.onCell</code> — kết quả giống
531
+ Example 2
532
+ </h2>
533
+ <p class="text-sm opacity-60">
534
+ Thay vì dùng prop <code class="bg-base-200 rounded px-1">onCell</code> ở cấp{' '}
535
+ <code class="bg-base-200 rounded px-1">{'<Table>'}</code> và kiểm tra{' '}
536
+ <code class="bg-base-200 rounded px-1">cell.column.id</code> bên ngoài, mỗi column tự khai
537
+ báo callback trong <code class="bg-base-200 rounded px-1">meta.onCell</code>. Kết quả render
538
+ giống hệt Example 2 — hàng "Widget B" chiếm toàn dòng — nhưng logic span nằm ngay cạnh
539
+ column definition, gọn hơn và dễ bảo trì hơn.
540
+ </p>
541
+ <Table
542
+ columns={salesColumnsPerColOnCell}
543
+ data={salesData}
544
+ border={{ outer: true, horizontal: true, vertical: true }}
545
+ getRowId={row => String(row.id)}
546
+ />
547
+ </div>
548
+ );
549
+ }
550
+
551
+ const salesColumnsHeaderCell = [
552
+ salesCol.accessor('region', {
553
+ header: () => <span class="block w-full text-center">Region / Product</span>,
554
+ size: 210,
555
+ enableSorting: false,
556
+ meta: {
557
+ align: 'center',
558
+ onHeaderCell: () => ({ colSpan: 2, rowSpan: 2 }),
559
+ },
560
+ }),
561
+ salesCol.accessor('product', {
562
+ header: 'Product',
563
+ size: 110,
564
+ enableSorting: false,
565
+ meta: {
566
+ align: 'center',
567
+ onHeaderCell: () => ({ colSpan: 0 }),
568
+ },
569
+ }),
570
+ salesCol.group({
571
+ id: 'q1',
572
+ header: 'Q1',
573
+ meta: { align: 'center' },
574
+ columns: [
575
+ salesCol.accessor('q1Revenue', {
576
+ header: 'Revenue',
577
+ size: 110,
578
+ cell: info => fmt(info.getValue()),
579
+ meta: { align: 'center' },
580
+ }),
581
+ salesCol.accessor('q1Units', { header: 'Units', size: 80, meta: { align: 'center' } }),
582
+ ],
583
+ }),
584
+ salesCol.group({
585
+ id: 'q2',
586
+ header: 'Q2',
587
+ meta: { align: 'center' },
588
+ columns: [
589
+ salesCol.accessor('q2Revenue', {
590
+ header: 'Revenue',
591
+ size: 110,
592
+ cell: info => fmt(info.getValue()),
593
+ meta: { align: 'center' },
594
+ }),
595
+ salesCol.accessor('q2Units', { header: 'Units', size: 80, meta: { align: 'center' } }),
596
+ ],
597
+ }),
598
+ salesCol.group({
599
+ id: 'q3',
600
+ header: 'Q3',
601
+ meta: { align: 'center' },
602
+ columns: [
603
+ salesCol.accessor('q3Revenue', {
604
+ header: 'Revenue',
605
+ size: 110,
606
+ cell: info => fmt(info.getValue()),
607
+ meta: { align: 'center' },
608
+ }),
609
+ salesCol.accessor('q3Units', { header: 'Units', size: 80, meta: { align: 'center' } }),
610
+ ],
611
+ }),
612
+ salesCol.group({
613
+ id: 'q4',
614
+ header: 'Q4',
615
+ meta: { align: 'center' },
616
+ columns: [
617
+ salesCol.accessor('q4Revenue', {
618
+ header: 'Revenue',
619
+ size: 110,
620
+ cell: info => fmt(info.getValue()),
621
+ meta: { align: 'center' },
622
+ }),
623
+ salesCol.accessor('q4Units', { header: 'Units', size: 80, meta: { align: 'center' } }),
624
+ ],
625
+ }),
626
+ ];
627
+
628
+ export function TablePerColumnOnHeaderCell() {
629
+ return (
630
+ <div class="space-y-3 p-6">
631
+ <h2 class="text-lg font-semibold">
632
+ 5. Per-column <code class="bg-base-200 rounded px-1">meta.onHeaderCell</code> — gộp 2 header
633
+ cell thành 1
634
+ </h2>
635
+ <p class="text-sm opacity-60">
636
+ <code class="bg-base-200 rounded px-1">meta.onHeaderCell</code> cho phép ghi đè{' '}
637
+ <code class="bg-base-200 rounded px-1">colSpan</code> /{' '}
638
+ <code class="bg-base-200 rounded px-1">rowSpan</code> của{' '}
639
+ <code class="bg-base-200 rounded px-1">{'<th>'}</code> do TanStack tính tự động. Ở đây{' '}
640
+ <code class="bg-base-200 rounded px-1">region</code> nhận{' '}
641
+ <code class="bg-base-200 rounded px-1">{'{ colSpan: 2 }'}</code> để chiếm cả 2 cột, còn{' '}
642
+ <code class="bg-base-200 rounded px-1">product</code> nhận{' '}
643
+ <code class="bg-base-200 rounded px-1">{'{ colSpan: 0 }'}</code> để ẩn header cell đó khỏi
644
+ DOM.
645
+ </p>
646
+ <Table
647
+ columns={salesColumnsHeaderCell}
648
+ data={salesData}
649
+ border={{ outer: true, horizontal: true, vertical: true }}
650
+ getRowId={row => String(row.id)}
651
+ />
652
+ </div>
653
+ );
654
+ }
655
+
656
+ export function TableHeaderExample() {
657
+ return (
658
+ <div class="divide-base-300 divide-y">
659
+ <TableGroupingHeader />
660
+ <TableCellColSpan />
661
+ <TableCellRowSpan />
662
+ <TablePerColumnOnCell />
663
+ <TablePerColumnOnHeaderCell />
664
+ </div>
665
+ );
666
+ }
667
+ ```