@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
package/llm/preset.md CHANGED
@@ -1,383 +1,383 @@
1
- # Global Component Configuration with Presets
2
-
3
- ## Overview
4
-
5
- Presets in @svelte-atoms/core allow you to configure component styling, props, and behavior **globally** across your application. Instead of repeating the same classes or props on every component, define them once at the top level and have all components inherit those configurations automatically.
6
-
7
- Presets can be:
8
-
9
- - Declared at the **app root** for global configuration
10
- - Overridden at the **route level** for section-specific styling
11
- - Overridden at the **component level** for local customization
12
-
13
- ## How Presets Work
14
-
15
- Each component has a `preset` prop that references a key in the preset configuration:
16
-
17
- ```svelte
18
- <HtmlAtom preset="button" class={['default-button-classes', '$preset', klass]} />
19
- ```
20
-
21
- The `$preset` placeholder gets replaced with classes/props from the preset configuration at that context level.
22
-
23
- ## Setting Up Presets
24
-
25
- ### 1. Global Preset (App Root)
26
-
27
- Set presets at the app root to apply them everywhere:
28
-
29
- ```svelte
30
- <!-- +layout.svelte or App.svelte -->
31
- <script lang="ts">
32
- import { setPreset, type Preset } from '@svelte-atoms/core/context';
33
- import { Root } from '@svelte-atoms/core/components/root';
34
-
35
- const globalPreset: Partial<Preset> = {
36
- button: () => ({
37
- class: 'rounded-lg px-4 py-2 font-semibold transition-colors'
38
- }),
39
- card: () => ({
40
- class: 'rounded-xl border border-gray-200 shadow-sm'
41
- }),
42
- 'card.title': () => ({
43
- class: 'text-xl font-bold text-gray-900'
44
- }),
45
- dialog: () => ({
46
- class: 'max-w-2xl rounded-2xl'
47
- })
48
- };
49
-
50
- setPreset(globalPreset);
51
- </script>
52
-
53
- <Root>
54
- <slot />
55
- </Root>
56
- ```
57
-
58
- Now all `Button`, `Card`, and `Dialog` components automatically inherit these styles.
59
-
60
- ### 2. Route-Level Override
61
-
62
- Override presets for specific routes:
63
-
64
- ```svelte
65
- <!-- routes/dashboard/+layout.svelte -->
66
- <script lang="ts">
67
- import { setPreset } from '@svelte-atoms/core/context';
68
-
69
- const dashboardPreset = {
70
- button: () => ({
71
- class: 'rounded-md px-3 py-1.5 text-sm' // Smaller buttons for dashboard
72
- }),
73
- card: () => ({
74
- class: 'bg-slate-50 border-slate-200' // Different card style
75
- })
76
- };
77
-
78
- setPreset(dashboardPreset);
79
- </script>
80
-
81
- <div>
82
- <slot />
83
- </div>
84
- ```
85
-
86
- Components in `/dashboard/*` routes now use the dashboard preset, **merging** with the global preset.
87
-
88
- ### 3. Component-Level Override
89
-
90
- Override presets in a parent component for its children:
91
-
92
- ```svelte
93
- <!-- components/SettingsPanel.svelte -->
94
- <script lang="ts">
95
- import { setPreset } from '@svelte-atoms/core/context';
96
- import { Card } from '@svelte-atoms/core/components/card';
97
-
98
- const settingsPreset = {
99
- 'card.title': () => ({
100
- class: 'text-lg text-purple-600' // Purple titles in settings
101
- })
102
- };
103
-
104
- setPreset(settingsPreset);
105
- </script>
106
-
107
- <Card.Root>
108
- <Card.Header>
109
- <Card.Title>Settings</Card.Title>
110
- <!-- Purple text -->
111
- </Card.Header>
112
- <Card.Content>
113
- <!-- Content here -->
114
- </Card.Content>
115
- </Card.Root>
116
- ```
117
-
118
- ## Preset Structure
119
-
120
- ### Basic Preset Entry
121
-
122
- Return an object with `class`, `as`, or other props:
123
-
124
- ```typescript
125
- const preset: Partial<Preset> = {
126
- button: () => ({
127
- class: 'px-4 py-2 rounded-lg',
128
- type: 'button'
129
- }),
130
-
131
- accordion: () => ({
132
- as: 'ul', // Change element type
133
- class: 'space-y-2'
134
- })
135
- };
136
- ```
137
-
138
- ### Dynamic Preset with Bond State
139
-
140
- Access component state via bond to create reactive presets:
141
-
142
- ```typescript
143
- const preset: Partial<Preset> = {
144
- 'accordion.item.header': (bond) => {
145
- // Access bond.state to make preset reactive
146
- return {
147
- class: bond?.state?.isActive ? 'text-foreground bg-accent' : 'text-muted-foreground'
148
- };
149
- }
150
- };
151
- ```
152
-
153
- ### Using defineState for Reactive Props
154
-
155
- For more complex reactive logic, use `defineState` and `defineProperty`:
156
-
157
- ```typescript
158
- import { defineState, defineProperty } from '@svelte-atoms/core/utils';
159
-
160
- const preset: Partial<Preset> = {
161
- 'collapsible.header': (bond) => {
162
- return defineState([
163
- defineProperty('class', () => [
164
- 'px-4 py-2 cursor-pointer transition-colors',
165
- bond?.state?.isOpen ? 'bg-blue-50' : 'hover:bg-gray-50'
166
- ]),
167
- defineProperty('aria-expanded', () => bond?.state?.isOpen)
168
- ]);
169
- }
170
- };
171
- ```
172
-
173
- ## Preset Merging
174
-
175
- Presets **merge** across context levels using deep merge:
176
-
177
- ```svelte
178
- <!-- App root -->
179
- <script>
180
- setPreset({
181
- button: () => ({
182
- class: 'px-4 py-2 rounded-lg font-semibold'
183
- })
184
- });
185
- </script>
186
-
187
- <!-- Route level -->
188
- <script>
189
- setPreset({
190
- button: () => ({
191
- class: 'text-sm' // Merges with root
192
- })
193
- });
194
- </script>
195
-
196
- <!-- Result: Button has both classes -->
197
- <!-- class="px-4 py-2 rounded-lg font-semibold text-sm" -->
198
- ```
199
-
200
- ## Available Preset Keys
201
-
202
- Components use dot notation for sub-components:
203
-
204
- ```typescript
205
- type PresetModuleName =
206
- | 'button'
207
- | 'card'
208
- | 'card.title'
209
- | 'card.content'
210
- | 'card.header'
211
- | 'card.footer'
212
- | 'accordion'
213
- | 'accordion.item'
214
- | 'accordion.item.header'
215
- | 'accordion.item.body'
216
- | 'dialog'
217
- | 'dialog.content'
218
- | 'dialog.title'
219
- | 'popover.content'
220
- | 'popover.trigger'
221
- | 'datagrid'
222
- | 'datagrid.th'
223
- | 'datagrid.td';
224
- // ... and many more
225
- ```
226
-
227
- Check `src/lib/context/preset.svelte.ts` for the complete list.
228
-
229
- ## Real-World Examples
230
-
231
- ### Example 1: Global Theme Setup
232
-
233
- ```svelte
234
- <!-- +layout.svelte -->
235
- <script lang="ts">
236
- import { setPreset } from '@svelte-atoms/core/context';
237
-
238
- const theme = {
239
- // Base components
240
- button: () => ({
241
- class: 'rounded-lg px-4 py-2 font-medium transition-all duration-200'
242
- }),
243
- input: () => ({
244
- class: 'rounded-md border border-gray-300 px-3 py-2 focus:border-blue-500'
245
- }),
246
-
247
- // Card system
248
- card: () => ({
249
- class: 'rounded-xl border border-gray-200 bg-white shadow-sm'
250
- }),
251
- 'card.title': () => ({
252
- class: 'text-lg font-semibold text-gray-900'
253
- }),
254
- 'card.content': () => ({
255
- class: 'p-6'
256
- }),
257
-
258
- // Dialog system
259
- dialog: () => ({
260
- class: 'max-w-lg rounded-2xl'
261
- }),
262
- 'dialog.content': () => ({
263
- class: 'p-6'
264
- }),
265
- 'dialog.title': () => ({
266
- class: 'text-xl font-bold'
267
- })
268
- };
269
-
270
- setPreset(theme);
271
- </script>
272
- ```
273
-
274
- ### Example 2: Dashboard Route Override
275
-
276
- ```svelte
277
- <!-- routes/dashboard/+layout.svelte -->
278
- <script lang="ts">
279
- import { setPreset } from '@svelte-atoms/core/context';
280
-
281
- // Override for compact dashboard UI
282
- const dashboardTheme = {
283
- button: () => ({
284
- class: 'rounded-md px-3 py-1.5 text-sm'
285
- }),
286
- card: () => ({
287
- class: 'rounded-lg bg-slate-50'
288
- }),
289
- 'datagrid.th': () => ({
290
- class: 'text-xs uppercase text-slate-500'
291
- })
292
- };
293
-
294
- setPreset(dashboardTheme);
295
- </script>
296
- ```
297
-
298
- ### Example 3: Component-Specific Styling
299
-
300
- ```svelte
301
- <!-- components/PricingCards.svelte -->
302
- <script lang="ts">
303
- import { setPreset } from '@svelte-atoms/core/context';
304
- import { Card } from '@svelte-atoms/core/components/card';
305
-
306
- // Custom styling just for pricing cards
307
- setPreset({
308
- card: () => ({
309
- class: 'rounded-2xl border-2 border-purple-200 hover:border-purple-400 transition-all'
310
- }),
311
- 'card.title': () => ({
312
- class: 'text-2xl font-bold text-purple-900'
313
- })
314
- });
315
- </script>
316
-
317
- <div class="grid grid-cols-3 gap-4">
318
- <Card.Root>
319
- <Card.Header>
320
- <Card.Title>Basic</Card.Title>
321
- </Card.Header>
322
- <Card.Content>$9/month</Card.Content>
323
- </Card.Root>
324
-
325
- <!-- More pricing cards... -->
326
- </div>
327
- ```
328
-
329
- ### Example 4: Reactive State-Based Styling
330
-
331
- ```svelte
332
- <script lang="ts">
333
- import { setPreset } from '@svelte-atoms/core/context';
334
- import { defineState, defineProperty } from '@svelte-atoms/core/utils';
335
-
336
- setPreset({
337
- 'accordion.item.header': (bond) => {
338
- return defineState([
339
- defineProperty('class', () => [
340
- 'px-4 py-3 cursor-pointer transition-all duration-200',
341
- bond?.state?.isOpen
342
- ? 'bg-blue-50 text-blue-900 font-semibold'
343
- : 'hover:bg-gray-50 text-gray-700'
344
- ])
345
- ]);
346
- },
347
-
348
- 'collapsible.indicator': (bond) => ({
349
- class: bond?.state?.isOpen
350
- ? 'rotate-180 transition-transform duration-200'
351
- : 'transition-transform duration-200'
352
- })
353
- });
354
- </script>
355
- ```
356
-
357
- ## Best Practices
358
-
359
- 1. **Set global presets at app root** - Define your base theme in `+layout.svelte` or `App.svelte`
360
-
361
- 2. **Override at route level** - Use route layouts (`+layout.svelte`) to customize sections
362
-
363
- 3. **Use component-level overrides sparingly** - Only when a specific component tree needs unique styling
364
-
365
- 4. **Use dot notation for specificity** - `'card.title'` is more specific than `'card'`
366
-
367
- 5. **Access bond state for reactivity** - Use bond parameter in preset functions to create dynamic styles
368
-
369
- 6. **Merge, don't replace** - Presets merge across contexts, so you can build up configurations gradually
370
-
371
- 7. **Keep presets simple** - Presets are for common patterns; use component props for one-off customizations
372
-
373
- ## Summary
374
-
375
- Presets provide a powerful way to configure components globally:
376
-
377
- - **Global**: Set at app root for consistent styling across your app
378
- - **Route-level**: Override in route layouts for section-specific themes
379
- - **Component-level**: Override in parent components for localized styling
380
- - **Reactive**: Access bond state to create dynamic, state-based configurations
381
- - **Merging**: Presets deep-merge across contexts, allowing gradual customization
382
-
383
- Instead of repeating classes on every component, define them once in presets and let components inherit the configuration automatically.
1
+ # Global Component Configuration with Presets
2
+
3
+ ## Overview
4
+
5
+ Presets in @svelte-atoms/core allow you to configure component styling, props, and behavior **globally** across your application. Instead of repeating the same classes or props on every component, define them once at the top level and have all components inherit those configurations automatically.
6
+
7
+ Presets can be:
8
+
9
+ - Declared at the **app root** for global configuration
10
+ - Overridden at the **route level** for section-specific styling
11
+ - Overridden at the **component level** for local customization
12
+
13
+ ## How Presets Work
14
+
15
+ Each component has a `preset` prop that references a key in the preset configuration:
16
+
17
+ ```svelte
18
+ <HtmlAtom preset="button" class={['default-button-classes', '$preset', klass]} />
19
+ ```
20
+
21
+ The `$preset` placeholder gets replaced with classes/props from the preset configuration at that context level.
22
+
23
+ ## Setting Up Presets
24
+
25
+ ### 1. Global Preset (App Root)
26
+
27
+ Set presets at the app root to apply them everywhere:
28
+
29
+ ```svelte
30
+ <!-- +layout.svelte or App.svelte -->
31
+ <script lang="ts">
32
+ import { setPreset, type Preset } from '@svelte-atoms/core/context';
33
+ import { Root } from '@svelte-atoms/core/components/root';
34
+
35
+ const globalPreset: Partial<Preset> = {
36
+ button: () => ({
37
+ class: 'rounded-lg px-4 py-2 font-semibold transition-colors'
38
+ }),
39
+ card: () => ({
40
+ class: 'rounded-xl border border-gray-200 shadow-sm'
41
+ }),
42
+ 'card.title': () => ({
43
+ class: 'text-xl font-bold text-gray-900'
44
+ }),
45
+ dialog: () => ({
46
+ class: 'max-w-2xl rounded-2xl'
47
+ })
48
+ };
49
+
50
+ setPreset(globalPreset);
51
+ </script>
52
+
53
+ <Root>
54
+ <slot />
55
+ </Root>
56
+ ```
57
+
58
+ Now all `Button`, `Card`, and `Dialog` components automatically inherit these styles.
59
+
60
+ ### 2. Route-Level Override
61
+
62
+ Override presets for specific routes:
63
+
64
+ ```svelte
65
+ <!-- routes/dashboard/+layout.svelte -->
66
+ <script lang="ts">
67
+ import { setPreset } from '@svelte-atoms/core/context';
68
+
69
+ const dashboardPreset = {
70
+ button: () => ({
71
+ class: 'rounded-md px-3 py-1.5 text-sm' // Smaller buttons for dashboard
72
+ }),
73
+ card: () => ({
74
+ class: 'bg-slate-50 border-slate-200' // Different card style
75
+ })
76
+ };
77
+
78
+ setPreset(dashboardPreset);
79
+ </script>
80
+
81
+ <div>
82
+ <slot />
83
+ </div>
84
+ ```
85
+
86
+ Components in `/dashboard/*` routes now use the dashboard preset, **merging** with the global preset.
87
+
88
+ ### 3. Component-Level Override
89
+
90
+ Override presets in a parent component for its children:
91
+
92
+ ```svelte
93
+ <!-- components/SettingsPanel.svelte -->
94
+ <script lang="ts">
95
+ import { setPreset } from '@svelte-atoms/core/context';
96
+ import { Card } from '@svelte-atoms/core/components/card';
97
+
98
+ const settingsPreset = {
99
+ 'card.title': () => ({
100
+ class: 'text-lg text-purple-600' // Purple titles in settings
101
+ })
102
+ };
103
+
104
+ setPreset(settingsPreset);
105
+ </script>
106
+
107
+ <Card.Root>
108
+ <Card.Header>
109
+ <Card.Title>Settings</Card.Title>
110
+ <!-- Purple text -->
111
+ </Card.Header>
112
+ <Card.Content>
113
+ <!-- Content here -->
114
+ </Card.Content>
115
+ </Card.Root>
116
+ ```
117
+
118
+ ## Preset Structure
119
+
120
+ ### Basic Preset Entry
121
+
122
+ Return an object with `class`, `as`, or other props:
123
+
124
+ ```typescript
125
+ const preset: Partial<Preset> = {
126
+ button: () => ({
127
+ class: 'px-4 py-2 rounded-lg',
128
+ type: 'button'
129
+ }),
130
+
131
+ accordion: () => ({
132
+ as: 'ul', // Change element type
133
+ class: 'space-y-2'
134
+ })
135
+ };
136
+ ```
137
+
138
+ ### Dynamic Preset with Bond State
139
+
140
+ Access component state via bond to create reactive presets:
141
+
142
+ ```typescript
143
+ const preset: Partial<Preset> = {
144
+ 'accordion.item.header': (bond) => {
145
+ // Access bond.state to make preset reactive
146
+ return {
147
+ class: bond?.state?.isActive ? 'text-foreground bg-accent' : 'text-muted-foreground'
148
+ };
149
+ }
150
+ };
151
+ ```
152
+
153
+ ### Using defineState for Reactive Props
154
+
155
+ For more complex reactive logic, use `defineState` and `defineProperty`:
156
+
157
+ ```typescript
158
+ import { defineState, defineProperty } from '@svelte-atoms/core/utils';
159
+
160
+ const preset: Partial<Preset> = {
161
+ 'collapsible.header': (bond) => {
162
+ return defineState([
163
+ defineProperty('class', () => [
164
+ 'px-4 py-2 cursor-pointer transition-colors',
165
+ bond?.state?.isOpen ? 'bg-blue-50' : 'hover:bg-gray-50'
166
+ ]),
167
+ defineProperty('aria-expanded', () => bond?.state?.isOpen)
168
+ ]);
169
+ }
170
+ };
171
+ ```
172
+
173
+ ## Preset Merging
174
+
175
+ Presets **merge** across context levels using deep merge:
176
+
177
+ ```svelte
178
+ <!-- App root -->
179
+ <script>
180
+ setPreset({
181
+ button: () => ({
182
+ class: 'px-4 py-2 rounded-lg font-semibold'
183
+ })
184
+ });
185
+ </script>
186
+
187
+ <!-- Route level -->
188
+ <script>
189
+ setPreset({
190
+ button: () => ({
191
+ class: 'text-sm' // Merges with root
192
+ })
193
+ });
194
+ </script>
195
+
196
+ <!-- Result: Button has both classes -->
197
+ <!-- class="px-4 py-2 rounded-lg font-semibold text-sm" -->
198
+ ```
199
+
200
+ ## Available Preset Keys
201
+
202
+ Components use dot notation for sub-components:
203
+
204
+ ```typescript
205
+ type PresetModuleName =
206
+ | 'button'
207
+ | 'card'
208
+ | 'card.title'
209
+ | 'card.content'
210
+ | 'card.header'
211
+ | 'card.footer'
212
+ | 'accordion'
213
+ | 'accordion.item'
214
+ | 'accordion.item.header'
215
+ | 'accordion.item.body'
216
+ | 'dialog'
217
+ | 'dialog.content'
218
+ | 'dialog.title'
219
+ | 'popover.content'
220
+ | 'popover.trigger'
221
+ | 'datagrid'
222
+ | 'datagrid.th'
223
+ | 'datagrid.td';
224
+ // ... and many more
225
+ ```
226
+
227
+ Check `src/lib/context/preset.svelte.ts` for the complete list.
228
+
229
+ ## Real-World Examples
230
+
231
+ ### Example 1: Global Theme Setup
232
+
233
+ ```svelte
234
+ <!-- +layout.svelte -->
235
+ <script lang="ts">
236
+ import { setPreset } from '@svelte-atoms/core/context';
237
+
238
+ const theme = {
239
+ // Base components
240
+ button: () => ({
241
+ class: 'rounded-lg px-4 py-2 font-medium transition-all duration-200'
242
+ }),
243
+ input: () => ({
244
+ class: 'rounded-md border border-gray-300 px-3 py-2 focus:border-blue-500'
245
+ }),
246
+
247
+ // Card system
248
+ card: () => ({
249
+ class: 'rounded-xl border border-gray-200 bg-white shadow-sm'
250
+ }),
251
+ 'card.title': () => ({
252
+ class: 'text-lg font-semibold text-gray-900'
253
+ }),
254
+ 'card.content': () => ({
255
+ class: 'p-6'
256
+ }),
257
+
258
+ // Dialog system
259
+ dialog: () => ({
260
+ class: 'max-w-lg rounded-2xl'
261
+ }),
262
+ 'dialog.content': () => ({
263
+ class: 'p-6'
264
+ }),
265
+ 'dialog.title': () => ({
266
+ class: 'text-xl font-bold'
267
+ })
268
+ };
269
+
270
+ setPreset(theme);
271
+ </script>
272
+ ```
273
+
274
+ ### Example 2: Dashboard Route Override
275
+
276
+ ```svelte
277
+ <!-- routes/dashboard/+layout.svelte -->
278
+ <script lang="ts">
279
+ import { setPreset } from '@svelte-atoms/core/context';
280
+
281
+ // Override for compact dashboard UI
282
+ const dashboardTheme = {
283
+ button: () => ({
284
+ class: 'rounded-md px-3 py-1.5 text-sm'
285
+ }),
286
+ card: () => ({
287
+ class: 'rounded-lg bg-slate-50'
288
+ }),
289
+ 'datagrid.th': () => ({
290
+ class: 'text-xs uppercase text-slate-500'
291
+ })
292
+ };
293
+
294
+ setPreset(dashboardTheme);
295
+ </script>
296
+ ```
297
+
298
+ ### Example 3: Component-Specific Styling
299
+
300
+ ```svelte
301
+ <!-- components/PricingCards.svelte -->
302
+ <script lang="ts">
303
+ import { setPreset } from '@svelte-atoms/core/context';
304
+ import { Card } from '@svelte-atoms/core/components/card';
305
+
306
+ // Custom styling just for pricing cards
307
+ setPreset({
308
+ card: () => ({
309
+ class: 'rounded-2xl border-2 border-purple-200 hover:border-purple-400 transition-all'
310
+ }),
311
+ 'card.title': () => ({
312
+ class: 'text-2xl font-bold text-purple-900'
313
+ })
314
+ });
315
+ </script>
316
+
317
+ <div class="grid grid-cols-3 gap-4">
318
+ <Card.Root>
319
+ <Card.Header>
320
+ <Card.Title>Basic</Card.Title>
321
+ </Card.Header>
322
+ <Card.Content>$9/month</Card.Content>
323
+ </Card.Root>
324
+
325
+ <!-- More pricing cards... -->
326
+ </div>
327
+ ```
328
+
329
+ ### Example 4: Reactive State-Based Styling
330
+
331
+ ```svelte
332
+ <script lang="ts">
333
+ import { setPreset } from '@svelte-atoms/core/context';
334
+ import { defineState, defineProperty } from '@svelte-atoms/core/utils';
335
+
336
+ setPreset({
337
+ 'accordion.item.header': (bond) => {
338
+ return defineState([
339
+ defineProperty('class', () => [
340
+ 'px-4 py-3 cursor-pointer transition-all duration-200',
341
+ bond?.state?.isOpen
342
+ ? 'bg-blue-50 text-blue-900 font-semibold'
343
+ : 'hover:bg-gray-50 text-gray-700'
344
+ ])
345
+ ]);
346
+ },
347
+
348
+ 'collapsible.indicator': (bond) => ({
349
+ class: bond?.state?.isOpen
350
+ ? 'rotate-180 transition-transform duration-200'
351
+ : 'transition-transform duration-200'
352
+ })
353
+ });
354
+ </script>
355
+ ```
356
+
357
+ ## Best Practices
358
+
359
+ 1. **Set global presets at app root** - Define your base theme in `+layout.svelte` or `App.svelte`
360
+
361
+ 2. **Override at route level** - Use route layouts (`+layout.svelte`) to customize sections
362
+
363
+ 3. **Use component-level overrides sparingly** - Only when a specific component tree needs unique styling
364
+
365
+ 4. **Use dot notation for specificity** - `'card.title'` is more specific than `'card'`
366
+
367
+ 5. **Access bond state for reactivity** - Use bond parameter in preset functions to create dynamic styles
368
+
369
+ 6. **Merge, don't replace** - Presets merge across contexts, so you can build up configurations gradually
370
+
371
+ 7. **Keep presets simple** - Presets are for common patterns; use component props for one-off customizations
372
+
373
+ ## Summary
374
+
375
+ Presets provide a powerful way to configure components globally:
376
+
377
+ - **Global**: Set at app root for consistent styling across your app
378
+ - **Route-level**: Override in route layouts for section-specific themes
379
+ - **Component-level**: Override in parent components for localized styling
380
+ - **Reactive**: Access bond state to create dynamic, state-based configurations
381
+ - **Merging**: Presets deep-merge across contexts, allowing gradual customization
382
+
383
+ Instead of repeating classes on every component, define them once in presets and let components inherit the configuration automatically.