@svelte-atoms/core 1.0.0-alpha.25 → 1.0.0-alpha.27

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 (354) hide show
  1. package/README.md +645 -645
  2. package/dist/components/accordion/accordion-root.svelte +61 -79
  3. package/dist/components/accordion/accordion-root.svelte.d.ts +2 -15
  4. package/dist/components/accordion/index.d.ts +2 -1
  5. package/dist/components/accordion/index.js +2 -1
  6. package/dist/components/accordion/item/accordion-item-body.svelte +42 -52
  7. package/dist/components/accordion/item/accordion-item-body.svelte.d.ts +2 -8
  8. package/dist/components/accordion/item/accordion-item-header.svelte +50 -56
  9. package/dist/components/accordion/item/accordion-item-header.svelte.d.ts +3 -20
  10. package/dist/components/accordion/item/accordion-item-indicator.svelte +50 -59
  11. package/dist/components/accordion/item/accordion-item-indicator.svelte.d.ts +2 -8
  12. package/dist/components/accordion/item/accordion-item-root.svelte +65 -79
  13. package/dist/components/accordion/item/accordion-item-root.svelte.d.ts +2 -12
  14. package/dist/components/accordion/item/index.d.ts +1 -0
  15. package/dist/components/accordion/item/types.d.ts +52 -0
  16. package/dist/components/accordion/item/types.js +1 -0
  17. package/dist/components/accordion/types.d.ts +21 -0
  18. package/dist/components/accordion/types.js +1 -0
  19. package/dist/components/alert/alert-actions.svelte +42 -52
  20. package/dist/components/alert/alert-actions.svelte.d.ts +3 -30
  21. package/dist/components/alert/alert-close-button.svelte +72 -79
  22. package/dist/components/alert/alert-close-button.svelte.d.ts +8 -35
  23. package/dist/components/alert/alert-content.svelte +42 -52
  24. package/dist/components/alert/alert-content.svelte.d.ts +3 -30
  25. package/dist/components/alert/alert-description.svelte +41 -51
  26. package/dist/components/alert/alert-description.svelte.d.ts +7 -10
  27. package/dist/components/alert/alert-icon.svelte +46 -56
  28. package/dist/components/alert/alert-icon.svelte.d.ts +2 -8
  29. package/dist/components/alert/alert-root.svelte +102 -118
  30. package/dist/components/alert/alert-root.svelte.d.ts +2 -13
  31. package/dist/components/alert/alert-title.svelte +41 -51
  32. package/dist/components/alert/alert-title.svelte.d.ts +2 -8
  33. package/dist/components/alert/index.d.ts +1 -0
  34. package/dist/components/alert/index.js +1 -0
  35. package/dist/components/alert/types.d.ts +85 -0
  36. package/dist/components/alert/types.js +1 -0
  37. package/dist/components/atom/html-atom.svelte +201 -217
  38. package/dist/components/atom/html-atom.svelte.d.ts +2 -22
  39. package/dist/components/atom/types.d.ts +7 -2
  40. package/dist/components/avatar/types.d.ts +7 -2
  41. package/dist/components/badge/badge.svelte +1 -1
  42. package/dist/components/badge/types.d.ts +7 -2
  43. package/dist/components/breadcrumb/breadcrumb-item.svelte +1 -1
  44. package/dist/components/breadcrumb/breadcrumb-root.svelte +1 -1
  45. package/dist/components/breadcrumb/breadcrumb-separator.svelte +1 -1
  46. package/dist/components/button/button.stories.svelte +57 -57
  47. package/dist/components/button/button.svelte +1 -1
  48. package/dist/components/button/button.svelte.d.ts +4 -1
  49. package/dist/components/button/index.d.ts +1 -0
  50. package/dist/components/button/index.js +1 -0
  51. package/dist/components/button/types.d.ts +8 -3
  52. package/dist/components/card/card-body.svelte +39 -45
  53. package/dist/components/card/card-body.svelte.d.ts +7 -4
  54. package/dist/components/card/card-description.svelte +41 -48
  55. package/dist/components/card/card-description.svelte.d.ts +7 -7
  56. package/dist/components/card/card-footer.svelte +41 -48
  57. package/dist/components/card/card-footer.svelte.d.ts +7 -4
  58. package/dist/components/card/card-header.svelte +41 -48
  59. package/dist/components/card/card-header.svelte.d.ts +7 -4
  60. package/dist/components/card/card-media.svelte +41 -48
  61. package/dist/components/card/card-media.svelte.d.ts +7 -4
  62. package/dist/components/card/card-root.svelte +91 -91
  63. package/dist/components/card/card-root.svelte.d.ts +1 -1
  64. package/dist/components/card/card-subtitle.svelte +41 -48
  65. package/dist/components/card/card-subtitle.svelte.d.ts +12 -9
  66. package/dist/components/card/card-title.svelte +45 -48
  67. package/dist/components/card/card-title.svelte.d.ts +12 -9
  68. package/dist/components/card/index.d.ts +1 -0
  69. package/dist/components/card/index.js +1 -0
  70. package/dist/components/card/types.d.ts +57 -2
  71. package/dist/components/checkbox/checkbox.svelte +39 -28
  72. package/dist/components/checkbox/types.d.ts +7 -2
  73. package/dist/components/collapsible/collapsible-body.svelte +39 -52
  74. package/dist/components/collapsible/collapsible-body.svelte.d.ts +2 -9
  75. package/dist/components/collapsible/collapsible-header.svelte +39 -52
  76. package/dist/components/collapsible/collapsible-header.svelte.d.ts +2 -9
  77. package/dist/components/collapsible/collapsible-indicator.svelte +50 -65
  78. package/dist/components/collapsible/collapsible-indicator.svelte.d.ts +3 -10
  79. package/dist/components/collapsible/collapsible-root.svelte +66 -85
  80. package/dist/components/collapsible/collapsible-root.svelte.d.ts +2 -14
  81. package/dist/components/collapsible/index.d.ts +1 -0
  82. package/dist/components/collapsible/index.js +1 -0
  83. package/dist/components/collapsible/types.d.ts +54 -0
  84. package/dist/components/collapsible/types.js +1 -0
  85. package/dist/components/combobox/atoms.d.ts +5 -1
  86. package/dist/components/combobox/atoms.js +5 -1
  87. package/dist/components/combobox/{combobox-input.svelte → combobox-control.svelte} +3 -3
  88. package/dist/components/combobox/{combobox-input.svelte.d.ts → combobox-control.svelte.d.ts} +3 -3
  89. package/dist/components/combobox/combobox-root.svelte +65 -68
  90. package/dist/components/combobox/combobox-root.svelte.d.ts +5 -18
  91. package/dist/components/combobox/combobox-trigger.svelte +1 -1
  92. package/dist/components/combobox/compobox-item.svelte +1 -1
  93. package/dist/components/combobox/index.d.ts +1 -0
  94. package/dist/components/combobox/index.js +1 -0
  95. package/dist/components/combobox/types.d.ts +25 -0
  96. package/dist/components/combobox/types.js +1 -0
  97. package/dist/components/container/container.svelte +1 -1
  98. package/dist/components/container/types.d.ts +7 -2
  99. package/dist/components/contextmenu/types.d.ts +8 -0
  100. package/dist/components/contextmenu/types.js +1 -0
  101. package/dist/components/datagrid/datagrid-body.svelte +37 -44
  102. package/dist/components/datagrid/datagrid-body.svelte.d.ts +17 -20
  103. package/dist/components/datagrid/datagrid-checkbox.svelte +101 -108
  104. package/dist/components/datagrid/datagrid-checkbox.svelte.d.ts +4 -6
  105. package/dist/components/datagrid/datagrid-footer.svelte +34 -34
  106. package/dist/components/datagrid/datagrid-footer.svelte.d.ts +1 -1
  107. package/dist/components/datagrid/datagrid-header.svelte +49 -49
  108. package/dist/components/datagrid/datagrid-header.svelte.d.ts +1 -1
  109. package/dist/components/datagrid/datagrid-root.svelte +59 -59
  110. package/dist/components/datagrid/datagrid-root.svelte.d.ts +1 -1
  111. package/dist/components/datagrid/datagrid.stories.svelte +75 -75
  112. package/dist/components/datagrid/td/datagrid-td.svelte +66 -80
  113. package/dist/components/datagrid/td/datagrid-td.svelte.d.ts +7 -16
  114. package/dist/components/datagrid/th/datagrid-th-sort-icon.svelte +1 -1
  115. package/dist/components/datagrid/th/datagrid-th.svelte +106 -127
  116. package/dist/components/datagrid/th/datagrid-th.svelte.d.ts +2 -20
  117. package/dist/components/datagrid/tr/bond.svelte.d.ts +3 -1
  118. package/dist/components/datagrid/tr/bond.svelte.js +4 -2
  119. package/dist/components/datagrid/tr/datagrid-tr.svelte +88 -103
  120. package/dist/components/datagrid/tr/datagrid-tr.svelte.d.ts +2 -18
  121. package/dist/components/datagrid/types.d.ts +85 -37
  122. package/dist/components/dialog/dialog-body.svelte +39 -45
  123. package/dist/components/dialog/dialog-body.svelte.d.ts +2 -2
  124. package/dist/components/dialog/dialog-close-button.svelte +58 -61
  125. package/dist/components/dialog/dialog-close-button.svelte.d.ts +7 -7
  126. package/dist/components/dialog/dialog-content.svelte +62 -71
  127. package/dist/components/dialog/dialog-content.svelte.d.ts +2 -2
  128. package/dist/components/dialog/dialog-description.svelte +40 -46
  129. package/dist/components/dialog/dialog-description.svelte.d.ts +2 -2
  130. package/dist/components/dialog/dialog-footer.svelte +39 -45
  131. package/dist/components/dialog/dialog-footer.svelte.d.ts +2 -2
  132. package/dist/components/dialog/dialog-header.svelte +39 -45
  133. package/dist/components/dialog/dialog-header.svelte.d.ts +2 -2
  134. package/dist/components/dialog/dialog-root.svelte +110 -120
  135. package/dist/components/dialog/dialog-root.svelte.d.ts +2 -10
  136. package/dist/components/dialog/dialog-title.svelte +41 -47
  137. package/dist/components/dialog/dialog-title.svelte.d.ts +7 -7
  138. package/dist/components/dialog/index.d.ts +1 -0
  139. package/dist/components/dialog/index.js +1 -0
  140. package/dist/components/dialog/types.d.ts +67 -0
  141. package/dist/components/dialog/types.js +1 -0
  142. package/dist/components/divider/types.d.ts +10 -0
  143. package/dist/components/divider/types.js +1 -0
  144. package/dist/components/drawer/drawer-backdrop.svelte +38 -47
  145. package/dist/components/drawer/drawer-backdrop.svelte.d.ts +3 -26
  146. package/dist/components/drawer/drawer-body.svelte +42 -56
  147. package/dist/components/drawer/drawer-body.svelte.d.ts +3 -16
  148. package/dist/components/drawer/drawer-content.svelte +42 -55
  149. package/dist/components/drawer/drawer-content.svelte.d.ts +3 -14
  150. package/dist/components/drawer/drawer-description.svelte +44 -57
  151. package/dist/components/drawer/drawer-description.svelte.d.ts +3 -14
  152. package/dist/components/drawer/drawer-footer.svelte +41 -54
  153. package/dist/components/drawer/drawer-footer.svelte.d.ts +3 -14
  154. package/dist/components/drawer/drawer-header.svelte +43 -56
  155. package/dist/components/drawer/drawer-header.svelte.d.ts +3 -14
  156. package/dist/components/drawer/drawer-root.svelte +93 -113
  157. package/dist/components/drawer/drawer-root.svelte.d.ts +3 -31
  158. package/dist/components/drawer/drawer-title.svelte +44 -57
  159. package/dist/components/drawer/drawer-title.svelte.d.ts +3 -14
  160. package/dist/components/drawer/index.d.ts +1 -0
  161. package/dist/components/drawer/index.js +1 -0
  162. package/dist/components/drawer/types.d.ts +86 -0
  163. package/dist/components/drawer/types.js +1 -0
  164. package/dist/components/dropdown/dropdown-placeholder.svelte +1 -1
  165. package/dist/components/dropdown/dropdown-query.svelte +54 -53
  166. package/dist/components/dropdown/dropdown-query.svelte.d.ts +11 -10
  167. package/dist/components/dropdown/dropdown-root.svelte +59 -59
  168. package/dist/components/dropdown/dropdown-trigger.svelte +41 -52
  169. package/dist/components/dropdown/dropdown-trigger.svelte.d.ts +1 -8
  170. package/dist/components/dropdown/dropdown-value.svelte +60 -62
  171. package/dist/components/dropdown/index.d.ts +1 -0
  172. package/dist/components/dropdown/index.js +1 -0
  173. package/dist/components/dropdown/item/bond.svelte.d.ts +4 -0
  174. package/dist/components/dropdown/item/bond.svelte.js +9 -0
  175. package/dist/components/dropdown/item/dropdown-item.svelte +10 -6
  176. package/dist/components/dropdown/types.d.ts +37 -0
  177. package/dist/components/dropdown/types.js +1 -0
  178. package/dist/components/element/html-element.svelte.d.ts +2 -14
  179. package/dist/components/element/svg-element.svelte.d.ts +2 -14
  180. package/dist/components/element/types.d.ts +14 -7
  181. package/dist/components/form/field/bond.svelte.d.ts +8 -0
  182. package/dist/components/form/field/bond.svelte.js +13 -1
  183. package/dist/components/form/field/field-control.svelte +48 -58
  184. package/dist/components/form/field/field-control.svelte.d.ts +5 -19
  185. package/dist/components/form/field/field-label.svelte +24 -31
  186. package/dist/components/form/field/field-label.svelte.d.ts +1 -2
  187. package/dist/components/form/field/field-root.svelte +59 -88
  188. package/dist/components/form/field/field-root.svelte.d.ts +5 -20
  189. package/dist/components/form/form.stories.svelte +3 -3
  190. package/dist/components/form/index.d.ts +1 -0
  191. package/dist/components/form/index.js +1 -0
  192. package/dist/components/form/types.d.ts +76 -0
  193. package/dist/components/form/types.js +1 -0
  194. package/dist/components/icon/icon.svelte +44 -55
  195. package/dist/components/icon/icon.svelte.d.ts +4 -29
  196. package/dist/components/icon/types.d.ts +11 -7
  197. package/dist/components/input/atoms.d.ts +5 -1
  198. package/dist/components/input/atoms.js +5 -1
  199. package/dist/components/input/index.d.ts +1 -0
  200. package/dist/components/input/index.js +1 -0
  201. package/dist/components/input/{input-value.svelte → input-control.svelte} +14 -24
  202. package/dist/components/input/input-control.svelte.d.ts +26 -0
  203. package/dist/components/input/input-icon.svelte +1 -1
  204. package/dist/components/input/input-icon.svelte.d.ts +1 -1
  205. package/dist/components/input/input-placeholder.svelte +54 -56
  206. package/dist/components/input/input-placeholder.svelte.d.ts +2 -19
  207. package/dist/components/input/input-root.svelte +5 -12
  208. package/dist/components/input/input-root.svelte.d.ts +3 -20
  209. package/dist/components/input/input.stories.svelte +2 -2
  210. package/dist/components/input/types.d.ts +33 -0
  211. package/dist/components/input/types.js +1 -0
  212. package/dist/components/label/index.d.ts +1 -0
  213. package/dist/components/label/index.js +1 -0
  214. package/dist/components/label/label.svelte +25 -41
  215. package/dist/components/label/label.svelte.d.ts +3 -27
  216. package/dist/components/label/types.d.ts +11 -0
  217. package/dist/components/label/types.js +1 -0
  218. package/dist/components/layer/layer-inner.svelte.d.ts +2 -19
  219. package/dist/components/layer/layer-root.svelte.d.ts +2 -19
  220. package/dist/components/layer/types.d.ts +11 -0
  221. package/dist/components/layer/types.js +1 -0
  222. package/dist/components/link/types.d.ts +8 -0
  223. package/dist/components/link/types.js +1 -0
  224. package/dist/components/list/list-group.svelte +1 -1
  225. package/dist/components/list/list-item.svelte +1 -1
  226. package/dist/components/list/list-root.svelte +6 -1
  227. package/dist/components/list/list-title.svelte +1 -1
  228. package/dist/components/list/types.d.ts +8 -0
  229. package/dist/components/list/types.js +1 -0
  230. package/dist/components/menu/index.d.ts +1 -0
  231. package/dist/components/menu/index.js +1 -0
  232. package/dist/components/menu/menu-list.svelte +1 -1
  233. package/dist/components/menu/types.d.ts +15 -0
  234. package/dist/components/menu/types.js +1 -0
  235. package/dist/components/popover/bond.svelte.d.ts +2 -0
  236. package/dist/components/popover/bond.svelte.js +1 -1
  237. package/dist/components/popover/index.d.ts +1 -0
  238. package/dist/components/popover/index.js +1 -0
  239. package/dist/components/popover/popover-arrow.svelte +111 -117
  240. package/dist/components/popover/popover-arrow.svelte.d.ts +3 -20
  241. package/dist/components/popover/popover-content.svelte +139 -147
  242. package/dist/components/popover/popover-content.svelte.d.ts +3 -17
  243. package/dist/components/popover/popover-indicator.svelte +1 -1
  244. package/dist/components/popover/popover-root.svelte +4 -18
  245. package/dist/components/popover/popover-root.svelte.d.ts +1 -15
  246. package/dist/components/popover/popover-trigger.svelte +3 -12
  247. package/dist/components/popover/popover-trigger.svelte.d.ts +2 -8
  248. package/dist/components/popover/types.d.ts +61 -0
  249. package/dist/components/popover/types.js +1 -0
  250. package/dist/components/portal/active-portal.svelte +8 -2
  251. package/dist/components/portal/active-portal.svelte.d.ts +2 -2
  252. package/dist/components/portal/index.d.ts +1 -0
  253. package/dist/components/portal/index.js +1 -0
  254. package/dist/components/portal/portal-inner.svelte +1 -1
  255. package/dist/components/portal/portal-inner.svelte.d.ts +2 -19
  256. package/dist/components/portal/portal-root.svelte +83 -88
  257. package/dist/components/portal/portal-root.svelte.d.ts +2 -22
  258. package/dist/components/portal/teleport.svelte +50 -49
  259. package/dist/components/portal/teleport.svelte.d.ts +5 -23
  260. package/dist/components/portal/types.d.ts +39 -0
  261. package/dist/components/portal/types.js +1 -0
  262. package/dist/components/radio/radio-group.stories.svelte +4 -4
  263. package/dist/components/radio/radio.svelte +109 -109
  264. package/dist/components/radio/radio.svelte.d.ts +14 -36
  265. package/dist/components/root/root.css +24 -66
  266. package/dist/components/root/root.svelte +121 -121
  267. package/dist/components/root/types.d.ts +8 -0
  268. package/dist/components/root/types.js +1 -0
  269. package/dist/components/scrollable/index.d.ts +1 -0
  270. package/dist/components/scrollable/index.js +1 -0
  271. package/dist/components/scrollable/scrollable-container.svelte +82 -89
  272. package/dist/components/scrollable/scrollable-container.svelte.d.ts +2 -6
  273. package/dist/components/scrollable/scrollable-content.svelte +41 -51
  274. package/dist/components/scrollable/scrollable-content.svelte.d.ts +1 -6
  275. package/dist/components/scrollable/scrollable-root.svelte +100 -120
  276. package/dist/components/scrollable/scrollable-root.svelte.d.ts +3 -19
  277. package/dist/components/scrollable/scrollable-thumb.svelte +75 -86
  278. package/dist/components/scrollable/scrollable-thumb.svelte.d.ts +1 -7
  279. package/dist/components/scrollable/scrollable-track.svelte +59 -70
  280. package/dist/components/scrollable/scrollable-track.svelte.d.ts +1 -7
  281. package/dist/components/scrollable/types.d.ts +62 -0
  282. package/dist/components/scrollable/types.js +1 -0
  283. package/dist/components/sidebar/index.d.ts +1 -0
  284. package/dist/components/sidebar/index.js +1 -0
  285. package/dist/components/sidebar/sidebar-content.svelte +2 -16
  286. package/dist/components/sidebar/sidebar-content.svelte.d.ts +2 -9
  287. package/dist/components/sidebar/sidebar-root.svelte +4 -23
  288. package/dist/components/sidebar/sidebar-root.svelte.d.ts +2 -13
  289. package/dist/components/sidebar/types.d.ts +30 -0
  290. package/dist/components/sidebar/types.js +1 -0
  291. package/dist/components/stack/stack-item.svelte +5 -1
  292. package/dist/components/stack/stack-root.svelte +5 -1
  293. package/dist/components/stack/stack-root.svelte.d.ts +2 -19
  294. package/dist/components/stack/types.d.ts +12 -0
  295. package/dist/components/stack/types.js +1 -0
  296. package/dist/components/tabs/index.d.ts +1 -0
  297. package/dist/components/tabs/index.js +1 -0
  298. package/dist/components/tabs/tab/tab-body.svelte +52 -61
  299. package/dist/components/tabs/tab/tab-body.svelte.d.ts +2 -8
  300. package/dist/components/tabs/tab/tab-description.svelte +41 -50
  301. package/dist/components/tabs/tab/tab-description.svelte.d.ts +2 -8
  302. package/dist/components/tabs/tab/tab-header.svelte +71 -81
  303. package/dist/components/tabs/tab/tab-header.svelte.d.ts +2 -11
  304. package/dist/components/tabs/tab/tab-root.svelte +86 -81
  305. package/dist/components/tabs/tabs-body.svelte +1 -1
  306. package/dist/components/tabs/tabs-header.svelte +1 -1
  307. package/dist/components/tabs/tabs-root.svelte +1 -1
  308. package/dist/components/tabs/types.d.ts +55 -0
  309. package/dist/components/tabs/types.js +1 -0
  310. package/dist/components/textarea/index.d.ts +1 -0
  311. package/dist/components/textarea/index.js +1 -0
  312. package/dist/components/textarea/textarea-input.svelte +2 -1
  313. package/dist/components/textarea/types.d.ts +28 -0
  314. package/dist/components/textarea/types.js +1 -0
  315. package/dist/components/toast/index.d.ts +1 -0
  316. package/dist/components/toast/index.js +1 -0
  317. package/dist/components/toast/toast-description.svelte +38 -44
  318. package/dist/components/toast/toast-description.svelte.d.ts +8 -34
  319. package/dist/components/toast/toast-root.svelte +61 -74
  320. package/dist/components/toast/toast-root.svelte.d.ts +4 -43
  321. package/dist/components/toast/toast-title.svelte +35 -43
  322. package/dist/components/toast/toast-title.svelte.d.ts +2 -34
  323. package/dist/components/toast/types.d.ts +40 -0
  324. package/dist/components/toast/types.js +1 -0
  325. package/dist/components/tooltip/types.d.ts +13 -0
  326. package/dist/components/tooltip/types.js +1 -0
  327. package/dist/components/tree/index.d.ts +1 -0
  328. package/dist/components/tree/index.js +1 -0
  329. package/dist/components/tree/tree-body.svelte +39 -50
  330. package/dist/components/tree/tree-body.svelte.d.ts +2 -10
  331. package/dist/components/tree/tree-header.svelte +54 -66
  332. package/dist/components/tree/tree-header.svelte.d.ts +3 -29
  333. package/dist/components/tree/tree-indicator.svelte +40 -50
  334. package/dist/components/tree/tree-indicator.svelte.d.ts +3 -9
  335. package/dist/components/tree/tree-root.svelte +65 -80
  336. package/dist/components/tree/tree-root.svelte.d.ts +2 -12
  337. package/dist/components/tree/types.d.ts +59 -0
  338. package/dist/components/tree/types.js +1 -0
  339. package/dist/components/virtual/types.d.ts +23 -0
  340. package/dist/components/virtual/types.js +1 -0
  341. package/dist/components/virtual/virtual-root.svelte +239 -258
  342. package/dist/components/virtual/virtual-root.svelte.d.ts +1 -18
  343. package/dist/context/preset.svelte.d.ts +1 -1
  344. package/llm/composition.md +395 -395
  345. package/llm/crafting.md +838 -838
  346. package/llm/motion.md +970 -970
  347. package/llm/philosophy.md +23 -23
  348. package/llm/preset-variant-integration.md +516 -516
  349. package/llm/preset.md +383 -383
  350. package/llm/styling.md +216 -216
  351. package/llm/usage.md +46 -46
  352. package/llm/variants.md +712 -712
  353. package/package.json +437 -437
  354. package/dist/components/input/input-value.svelte.d.ts +0 -19
@@ -1,26 +1,29 @@
1
- export type CardTitleProps<E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base> = HtmlAtomProps<E, B>;
2
- import { type HtmlAtomProps, type Base } from '../atom';
3
- declare function $$render<E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base>(): {
1
+ import { type Base } from '../atom';
2
+ declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
4
3
  props: CardTitleProps<E, B>;
5
- exports: {};
4
+ exports: {
5
+ CardTitleProps: typeof CardTitleProps;
6
+ };
6
7
  bindings: "";
7
8
  slots: {};
8
9
  events: {};
9
10
  };
10
- declare class __sveltets_Render<E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base> {
11
+ declare class __sveltets_Render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> {
11
12
  props(): ReturnType<typeof $$render<E, B>>['props'];
12
13
  events(): ReturnType<typeof $$render<E, B>>['events'];
13
14
  slots(): ReturnType<typeof $$render<E, B>>['slots'];
14
15
  bindings(): "";
15
- exports(): {};
16
+ exports(): {
17
+ CardTitleProps: typeof CardTitleProps;
18
+ };
16
19
  }
17
20
  interface $$IsomorphicComponent {
18
- new <E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<E, B>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<E, B>['props']>, ReturnType<__sveltets_Render<E, B>['events']>, ReturnType<__sveltets_Render<E, B>['slots']>> & {
21
+ new <E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<E, B>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<E, B>['props']>, ReturnType<__sveltets_Render<E, B>['events']>, ReturnType<__sveltets_Render<E, B>['slots']>> & {
19
22
  $$bindings?: ReturnType<__sveltets_Render<E, B>['bindings']>;
20
23
  } & ReturnType<__sveltets_Render<E, B>['exports']>;
21
- <E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base>(internal: unknown, props: ReturnType<__sveltets_Render<E, B>['props']> & {}): ReturnType<__sveltets_Render<E, B>['exports']>;
24
+ <E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(internal: unknown, props: ReturnType<__sveltets_Render<E, B>['props']> & {}): ReturnType<__sveltets_Render<E, B>['exports']>;
22
25
  z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
23
26
  }
24
27
  declare const CardTitle: $$IsomorphicComponent;
25
- type CardTitle<E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base> = InstanceType<typeof CardTitle<E, B>>;
28
+ type CardTitle<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = InstanceType<typeof CardTitle<E, B>>;
26
29
  export default CardTitle;
@@ -1 +1,2 @@
1
1
  export * as Card from './atoms';
2
+ export * from './types';
@@ -1 +1,2 @@
1
1
  export * as Card from './atoms';
2
+ export * from './types';
@@ -2,7 +2,47 @@ import type { Snippet } from 'svelte';
2
2
  import type { CardBond } from './bond.svelte';
3
3
  import type { HtmlAtomProps, Base } from '../atom';
4
4
  import type { Factory } from '../../types';
5
- export type CardRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = HtmlAtomProps<E, B> & {
5
+ /**
6
+ * Extend this interface to add custom card root properties in your application.
7
+ */
8
+ export interface CardExtendProps {
9
+ }
10
+ /**
11
+ * Extend this interface to add custom card header properties in your application.
12
+ */
13
+ export interface CardHeaderExtendProps {
14
+ }
15
+ /**
16
+ * Extend this interface to add custom card body/content properties in your application.
17
+ */
18
+ export interface CardBodyExtendProps {
19
+ }
20
+ /**
21
+ * Extend this interface to add custom card footer properties in your application.
22
+ */
23
+ export interface CardFooterExtendProps {
24
+ }
25
+ /**
26
+ * Extend this interface to add custom card title properties in your application.
27
+ */
28
+ export interface CardTitleExtendProps {
29
+ }
30
+ /**
31
+ * Extend this interface to add custom card subtitle properties in your application.
32
+ */
33
+ export interface CardSubtitleExtendProps {
34
+ }
35
+ /**
36
+ * Extend this interface to add custom card description properties in your application.
37
+ */
38
+ export interface CardDescriptionExtendProps {
39
+ }
40
+ /**
41
+ * Extend this interface to add custom card media properties in your application.
42
+ */
43
+ export interface CardMediaExtendProps {
44
+ }
45
+ export interface CardRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Omit<HtmlAtomProps<E, B>, 'children'>, CardExtendProps {
6
46
  disabled?: boolean;
7
47
  factory?: Factory<CardBond>;
8
48
  children?: Snippet<[{
@@ -10,4 +50,19 @@ export type CardRootProps<E extends keyof HTMLElementTagNameMap = 'div', B exten
10
50
  }]>;
11
51
  onclick?: (event: MouseEvent) => void;
12
52
  onkeydown?: (event: KeyboardEvent) => void;
13
- };
53
+ }
54
+ export interface CardHeaderProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, CardHeaderExtendProps {
55
+ }
56
+ export interface CardBodyProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, CardBodyExtendProps {
57
+ }
58
+ export interface CardFooterProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, CardFooterExtendProps {
59
+ }
60
+ export interface CardTitleProps<E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base> extends HtmlAtomProps<E, B>, CardTitleExtendProps {
61
+ }
62
+ export interface CardSubtitleProps<E extends keyof HTMLElementTagNameMap = 'p', B extends Base = Base> extends HtmlAtomProps<E, B>, CardSubtitleExtendProps {
63
+ }
64
+ export interface CardDescriptionProps<E extends keyof HTMLElementTagNameMap = 'p', B extends Base = Base> extends HtmlAtomProps<E, B>, CardDescriptionExtendProps {
65
+ }
66
+ export interface CardMediaProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, CardMediaExtendProps {
67
+ }
68
+ export type CardContentProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = CardBodyProps<E, B>;
@@ -1,21 +1,22 @@
1
1
  <script lang="ts">
2
+ import { circOut } from 'svelte/easing';
2
3
  import type { HTMLInputAttributes } from 'svelte/elements';
3
4
  import { scale } from 'svelte/transition';
4
- import type { CheckboxProps } from './types';
5
5
  import { Icon } from '../icon';
6
6
  import { HtmlAtom } from '../atom';
7
7
  import CheckmarkRegularIcon from '../../icons/icon-checkmark.svelte';
8
- import './checkbox.css';
9
8
  import { DURATION } from '../../shared';
10
- import { circOut } from 'svelte/easing';
9
+ import type { CheckboxProps } from './types';
10
+ import './checkbox.css';
11
11
 
12
12
  let {
13
13
  class: klass = '',
14
14
  checked = $bindable(false),
15
- indeterminate = $bindable(),
15
+ indeterminate = $bindable(false),
16
16
  value = $bindable(undefined),
17
17
  group = $bindable([]),
18
18
  id,
19
+ name,
19
20
  checkedContent,
20
21
  indeterminateContent,
21
22
  enter,
@@ -31,29 +32,25 @@
31
32
 
32
33
  let checkboxElement: HTMLInputElement | undefined = $state();
33
34
 
34
- function handleChange(ev: Event) {
35
- const checked = (ev.currentTarget as HTMLInputElement)?.checked ?? false;
35
+ // Computed state for visual representation
36
+ const isChecked = $derived(checked === true);
37
+ const isIndeterminate = $derived(indeterminate === true);
38
+ const showCheckmark = $derived(isChecked && !isIndeterminate);
36
39
 
40
+ function handleChange(ev: Event) {
37
41
  onchange?.(ev, {
38
- checked,
42
+ checked: checked,
39
43
  value: checked,
40
44
  type: 'boolean'
41
45
  });
42
46
  }
43
47
 
44
48
  function handleInput(ev: Event) {
45
- const currentTarget = ev.currentTarget as HTMLInputElement;
46
- const _checked = currentTarget?.checked ?? false;
47
-
48
49
  oninput?.(ev, {
49
- checked: _checked,
50
- value: _checked,
50
+ checked: checked,
51
+ value: checked,
51
52
  type: 'boolean'
52
53
  });
53
-
54
- if (ev.defaultPrevented) {
55
- return;
56
- }
57
54
  }
58
55
 
59
56
  function handleClick(ev: MouseEvent) {
@@ -63,7 +60,18 @@
63
60
  return;
64
61
  }
65
62
 
66
- checkboxElement?.click();
63
+ // Handle indeterminate → checked → unchecked cycle
64
+ if (indeterminate) {
65
+ // Indeterminate → checked
66
+ indeterminate = false;
67
+ checked = true;
68
+ } else {
69
+ // Toggle checked state
70
+ checked = !checked;
71
+ }
72
+
73
+ // Trigger input event manually if needed
74
+ handleInput(ev);
67
75
  }
68
76
  </script>
69
77
 
@@ -71,15 +79,16 @@
71
79
  <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
72
80
  <HtmlAtom
73
81
  preset="checkbox"
74
- as="button"
82
+ as="div"
75
83
  class={[
76
- 'checkbox-root border-border outline-primary bg-foreground/5 aspect-square h-5 w-fit cursor-pointer rounded-sm border outline-0 outline-offset-2 transition-colors duration-100',
77
- checked && 'bg-foreground',
78
- !checked && '',
84
+ 'checkbox-root border-border outline-primary bg-input text-foreground aspect-square h-5 w-fit cursor-pointer rounded-sm border outline-0 outline-offset-2 transition-colors duration-100',
85
+ isChecked && 'bg-foreground',
79
86
  '$preset',
80
87
  klass,
81
88
  'relative'
82
89
  ]}
90
+ role="checkbox"
91
+ aria-checked={isIndeterminate ? 'mixed' : isChecked}
83
92
  {enter}
84
93
  {exit}
85
94
  {initial}
@@ -87,6 +96,7 @@
87
96
  {...restProps}
88
97
  >
89
98
  <input
99
+ bind:this={checkboxElement}
90
100
  bind:checked
91
101
  bind:group
92
102
  bind:indeterminate
@@ -94,34 +104,35 @@
94
104
  class="checkbox-input pointer-events-none"
95
105
  {value}
96
106
  {id}
107
+ {name}
97
108
  onchange={handleChange}
98
109
  oninput={handleInput}
99
110
  {onblur}
100
111
  {onfocus}
101
112
  hidden
102
- {@attach (node) => {
103
- checkboxElement = node;
104
- }}
113
+ tabindex="-1"
105
114
  />
106
115
 
107
- {#if indeterminate}
116
+ {#if isIndeterminate}
108
117
  {#if indeterminateContent}
109
118
  <HtmlAtom
110
119
  preset="checkbox.indeterminate"
111
- class={['checkbox-indeterminate flex size-full items-center justify-center p-1']}
120
+ class={[
121
+ 'checkbox-indeterminate pointer-events-none flex size-full items-center justify-center p-1'
122
+ ]}
112
123
  base={indeterminateContent}
113
124
  />
114
125
  {:else}
115
126
  <HtmlAtom
116
127
  preset="checkbox.indeterminate"
117
128
  class={[
118
- 'checkbox-indeterminate text-foreground flex size-full items-center justify-center p-1'
129
+ 'checkbox-indeterminate text-foreground pointer-events-none flex size-full items-center justify-center p-1'
119
130
  ]}
120
131
  >
121
132
  <div class={['size-full rounded-xs bg-current']}></div>
122
133
  </HtmlAtom>
123
134
  {/if}
124
- {:else if checked === true}
135
+ {:else if showCheckmark}
125
136
  {#if checkedContent}
126
137
  <HtmlAtom
127
138
  preset="checkbox.checkmark"
@@ -1,6 +1,11 @@
1
1
  import { type Component, type Snippet } from 'svelte';
2
2
  import { type HtmlAtomProps } from '../atom';
3
- export type CheckboxProps = HtmlAtomProps<'button'> & {
3
+ /**
4
+ * Extend this interface to add custom checkbox properties in your application.
5
+ */
6
+ export interface CheckboxExtendProps {
7
+ }
8
+ export interface CheckboxProps extends HtmlAtomProps<'button'>, CheckboxExtendProps {
4
9
  value?: string;
5
10
  group?: string[];
6
11
  checked?: boolean;
@@ -12,4 +17,4 @@ export type CheckboxProps = HtmlAtomProps<'button'> & {
12
17
  onchange?: (ev?: Event, options?: {
13
18
  checked: boolean;
14
19
  }) => void;
15
- };
20
+ }
@@ -1,52 +1,39 @@
1
- <script module lang="ts">
2
- export type CollapsibleBodyProps<
3
- E extends keyof HTMLElementTagNameMap = 'div',
4
- B extends Base = Base
5
- > = Override<
6
- HtmlAtomProps<E, B>,
7
- {
8
- children?: Snippet<[{ collapsible?: CollapsibleBond }]>;
9
- }
10
- >;
11
- </script>
12
-
13
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
14
- import type { Snippet } from 'svelte';
15
- import { CollapsibleBond } from './bond.svelte';
16
- import type { Override } from '../../types';
17
- import { HtmlAtom, type HtmlAtomProps, type Base } from '../atom';
18
-
19
- const bond = CollapsibleBond.get();
20
-
21
- let {
22
- class: klass = '',
23
- children = undefined,
24
- onmount = undefined,
25
- ondestroy = undefined,
26
- animate = undefined,
27
- enter = undefined,
28
- exit = undefined,
29
- initial = undefined,
30
- ...restProps
31
- }: CollapsibleBodyProps<E, B> = $props();
32
-
33
- const bodyProps = $derived({
34
- ...bond?.body(),
35
- ...restProps
36
- });
37
- </script>
38
-
39
- <HtmlAtom
40
- {bond}
41
- preset="collapsible.body"
42
- class={['$preset', klass]}
43
- onmount={onmount?.bind(bond.state)}
44
- ondestroy={ondestroy?.bind(bond.state)}
45
- animate={animate?.bind(bond.state)}
46
- enter={enter?.bind(bond.state)}
47
- exit={exit?.bind(bond.state)}
48
- initial={initial?.bind(bond.state)}
49
- {...bodyProps}
50
- >
51
- {@render children?.({ collapsible: bond })}
52
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../atom';
3
+ import { CollapsibleBond } from './bond.svelte';
4
+ import type { CollapsibleBodyProps } from './types';
5
+
6
+ const bond = CollapsibleBond.get();
7
+
8
+ let {
9
+ class: klass = '',
10
+ children = undefined,
11
+ onmount = undefined,
12
+ ondestroy = undefined,
13
+ animate = undefined,
14
+ enter = undefined,
15
+ exit = undefined,
16
+ initial = undefined,
17
+ ...restProps
18
+ }: CollapsibleBodyProps<E, B> = $props();
19
+
20
+ const bodyProps = $derived({
21
+ ...bond?.body(),
22
+ ...restProps
23
+ });
24
+ </script>
25
+
26
+ <HtmlAtom
27
+ {bond}
28
+ preset="collapsible.body"
29
+ class={['border-border', '$preset', klass]}
30
+ onmount={onmount?.bind(bond.state)}
31
+ ondestroy={ondestroy?.bind(bond.state)}
32
+ animate={animate?.bind(bond.state)}
33
+ enter={enter?.bind(bond.state)}
34
+ exit={exit?.bind(bond.state)}
35
+ initial={initial?.bind(bond.state)}
36
+ {...bodyProps}
37
+ >
38
+ {@render children?.({ collapsible: bond })}
39
+ </HtmlAtom>
@@ -1,12 +1,5 @@
1
- export type CollapsibleBodyProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = Override<HtmlAtomProps<E, B>, {
2
- children?: Snippet<[{
3
- collapsible?: CollapsibleBond;
4
- }]>;
5
- }>;
6
- import type { Snippet } from 'svelte';
7
- import { CollapsibleBond } from './bond.svelte';
8
- import type { Override } from '../../types';
9
- import { type HtmlAtomProps, type Base } from '../atom';
1
+ import { type Base } from '../atom';
2
+ import type { CollapsibleBodyProps } from './types';
10
3
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
11
4
  props: CollapsibleBodyProps<E, B>;
12
5
  exports: {};
@@ -1,52 +1,39 @@
1
- <script module lang="ts">
2
- export type CollapsibleHeaderProps<
3
- E extends keyof HTMLElementTagNameMap = 'div',
4
- B extends Base = Base
5
- > = Override<
6
- HtmlAtomProps<E, B>,
7
- {
8
- children?: Snippet<[{ collapsible?: CollapsibleBond }]>;
9
- }
10
- >;
11
- </script>
12
-
13
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
14
- import type { Snippet } from 'svelte';
15
- import { CollapsibleBond } from './bond.svelte';
16
- import type { Override } from '../../types';
17
- import { HtmlAtom, type HtmlAtomProps, type Base } from '../atom';
18
-
19
- const bond = CollapsibleBond.get();
20
-
21
- let {
22
- class: klass = '',
23
- children = undefined,
24
- onmount = undefined,
25
- ondestroy = undefined,
26
- animate = undefined,
27
- enter = undefined,
28
- exit = undefined,
29
- initial = undefined,
30
- ...restProps
31
- }: CollapsibleHeaderProps<E, B> = $props();
32
-
33
- const collapsibleProps = $derived({
34
- ...bond?.header(),
35
- ...restProps
36
- });
37
- </script>
38
-
39
- <HtmlAtom
40
- {bond}
41
- preset="collapsible.header"
42
- class={['flex cursor-pointer items-center gap-2', '$preset', klass]}
43
- onmount={onmount?.bind(bond.state)}
44
- ondestroy={ondestroy?.bind(bond.state)}
45
- animate={animate?.bind(bond.state)}
46
- enter={enter?.bind(bond.state)}
47
- exit={exit?.bind(bond.state)}
48
- initial={initial?.bind(bond.state)}
49
- {...collapsibleProps}
50
- >
51
- {@render children?.({ collapsible: bond })}
52
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../atom';
3
+ import type { CollapsibleHeaderProps } from './types';
4
+ import { CollapsibleBond } from './bond.svelte';
5
+
6
+ const bond = CollapsibleBond.get();
7
+
8
+ let {
9
+ class: klass = '',
10
+ children = undefined,
11
+ onmount = undefined,
12
+ ondestroy = undefined,
13
+ animate = undefined,
14
+ enter = undefined,
15
+ exit = undefined,
16
+ initial = undefined,
17
+ ...restProps
18
+ }: CollapsibleHeaderProps<E, B> = $props();
19
+
20
+ const collapsibleProps = $derived({
21
+ ...bond?.header(),
22
+ ...restProps
23
+ });
24
+ </script>
25
+
26
+ <HtmlAtom
27
+ {bond}
28
+ preset="collapsible.header"
29
+ class={['border-border flex cursor-pointer items-center gap-2', '$preset', klass]}
30
+ onmount={onmount?.bind(bond.state)}
31
+ ondestroy={ondestroy?.bind(bond.state)}
32
+ animate={animate?.bind(bond.state)}
33
+ enter={enter?.bind(bond.state)}
34
+ exit={exit?.bind(bond.state)}
35
+ initial={initial?.bind(bond.state)}
36
+ {...collapsibleProps}
37
+ >
38
+ {@render children?.({ collapsible: bond })}
39
+ </HtmlAtom>
@@ -1,12 +1,5 @@
1
- export type CollapsibleHeaderProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = Override<HtmlAtomProps<E, B>, {
2
- children?: Snippet<[{
3
- collapsible?: CollapsibleBond;
4
- }]>;
5
- }>;
6
- import type { Snippet } from 'svelte';
7
- import { CollapsibleBond } from './bond.svelte';
8
- import type { Override } from '../../types';
9
- import { type HtmlAtomProps, type Base } from '../atom';
1
+ import { type Base } from '../atom';
2
+ import type { CollapsibleHeaderProps } from './types';
10
3
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
11
4
  props: CollapsibleHeaderProps<E, B>;
12
5
  exports: {};
@@ -1,65 +1,50 @@
1
- <script module lang="ts">
2
- export type CollapsibleHeaderProps<
3
- E extends keyof HTMLElementTagNameMap = 'div',
4
- B extends Base = Base
5
- > = Override<
6
- HtmlAtomProps<E, B>,
7
- {
8
- children?: Snippet<[{ collapsible?: CollapsibleBond }]>;
9
- }
10
- >;
11
- </script>
12
-
13
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
14
- import type { Snippet } from 'svelte';
15
- import { animate as motion } from 'motion';
16
- import { CollapsibleBond } from './bond.svelte';
17
- import { Icon } from '../icon';
18
-
19
- import type { Override } from '../../types';
20
- import { HtmlAtom, type HtmlAtomProps, type Base } from '../atom';
21
- import IconArrowDown from '../../icons/icon-arrow-down.svelte';
22
-
23
- const bond = CollapsibleBond.get();
24
- const isOpen = $derived(bond?.state.props.open ?? false);
25
-
26
- let {
27
- class: klass = '',
28
- children = undefined,
29
- onmount = undefined,
30
- ondestroy = undefined,
31
- animate = _animate,
32
- enter = undefined,
33
- exit = undefined,
34
- initial = undefined,
35
- ...restProps
36
- }: CollapsibleHeaderProps<E, B> = $props();
37
-
38
- const indicatorProps = $derived({
39
- ...bond?.indicator(),
40
- ...restProps
41
- });
42
-
43
- function _animate(node: HTMLElement) {
44
- motion(node, { rotate: 180 * +isOpen }, { duration: 0.3, ease: 'anticipate' });
45
- }
46
- </script>
47
-
48
- <HtmlAtom
49
- {bond}
50
- preset="collapsible.indicator"
51
- class={['flex size-4 items-center justify-center', '$preset', klass]}
52
- onmount={onmount?.bind(bond.state)}
53
- ondestroy={ondestroy?.bind(bond.state)}
54
- animate={animate?.bind(bond.state)}
55
- enter={enter?.bind(bond.state)}
56
- exit={exit?.bind(bond.state)}
57
- initial={initial?.bind(bond.state)}
58
- {...indicatorProps}
59
- >
60
- {#if children}
61
- {@render children?.({ collapsible: bond })}
62
- {:else}
63
- <Icon src={IconArrowDown} />
64
- {/if}
65
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { animate as motion } from 'motion';
3
+ import { Icon } from '../icon';
4
+ import { HtmlAtom, type Base } from '../atom';
5
+ import IconArrowDown from '../../icons/icon-arrow-down.svelte';
6
+ import { CollapsibleBond } from './bond.svelte';
7
+ import type { CollapsibleIndicatorProps } from './types';
8
+
9
+ const bond = CollapsibleBond.get();
10
+ const isOpen = $derived(bond?.state.props.open ?? false);
11
+
12
+ let {
13
+ class: klass = '',
14
+ children = undefined,
15
+ onmount = undefined,
16
+ ondestroy = undefined,
17
+ animate = _animate,
18
+ enter = undefined,
19
+ exit = undefined,
20
+ initial = undefined,
21
+ ...restProps
22
+ }: CollapsibleIndicatorProps<E, B> = $props();
23
+ const indicatorProps = $derived({
24
+ ...bond?.indicator(),
25
+ ...restProps
26
+ });
27
+
28
+ function _animate(node: HTMLElement) {
29
+ motion(node, { rotate: 180 * +isOpen }, { duration: 0.3, ease: 'anticipate' });
30
+ }
31
+ </script>
32
+
33
+ <HtmlAtom
34
+ {bond}
35
+ preset="collapsible.indicator"
36
+ class={['border-border flex size-4 items-center justify-center', '$preset', klass]}
37
+ onmount={onmount?.bind(bond.state)}
38
+ ondestroy={ondestroy?.bind(bond.state)}
39
+ animate={animate?.bind(bond.state)}
40
+ enter={enter?.bind(bond.state)}
41
+ exit={exit?.bind(bond.state)}
42
+ initial={initial?.bind(bond.state)}
43
+ {...indicatorProps}
44
+ >
45
+ {#if children}
46
+ {@render children?.({ collapsible: bond })}
47
+ {:else}
48
+ <Icon src={IconArrowDown} />
49
+ {/if}
50
+ </HtmlAtom>
@@ -1,14 +1,7 @@
1
- export type CollapsibleHeaderProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = Override<HtmlAtomProps<E, B>, {
2
- children?: Snippet<[{
3
- collapsible?: CollapsibleBond;
4
- }]>;
5
- }>;
6
- import type { Snippet } from 'svelte';
7
- import { CollapsibleBond } from './bond.svelte';
8
- import type { Override } from '../../types';
9
- import { type HtmlAtomProps, type Base } from '../atom';
1
+ import { type Base } from '../atom';
2
+ import type { CollapsibleIndicatorProps } from './types';
10
3
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
11
- props: CollapsibleHeaderProps<E, B>;
4
+ props: CollapsibleIndicatorProps<E, B>;
12
5
  exports: {};
13
6
  bindings: "";
14
7
  slots: {};