@svelte-atoms/core 1.0.0-alpha.41 → 1.0.0-alpha.44

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 (628) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +67 -197
  3. package/dist/attachments/clickout.svelte.d.ts +4 -1
  4. package/dist/attachments/clickout.svelte.js +2 -1
  5. package/dist/components/accordion/accordion-root.svelte +61 -66
  6. package/dist/components/accordion/accordion-root.svelte.d.ts +2 -2
  7. package/dist/components/accordion/bond.svelte.d.ts +11 -10
  8. package/dist/components/accordion/bond.svelte.js +26 -16
  9. package/dist/components/accordion/item/accordion-item-body.svelte +3 -1
  10. package/dist/components/accordion/item/accordion-item-header.svelte +1 -1
  11. package/dist/components/accordion/item/accordion-item-indicator.svelte +1 -1
  12. package/dist/components/accordion/item/accordion-item-root.svelte +3 -2
  13. package/dist/components/accordion/item/bond.svelte.d.ts +32 -18
  14. package/dist/components/accordion/item/bond.svelte.js +88 -64
  15. package/dist/components/accordion/item/types.d.ts +4 -24
  16. package/dist/components/accordion/types.d.ts +5 -9
  17. package/dist/components/alert/alert-root.svelte +68 -68
  18. package/dist/components/alert/types.d.ts +12 -46
  19. package/dist/components/atom/html-atom.svelte +84 -95
  20. package/dist/components/atom/html-atom.svelte.d.ts +1 -2
  21. package/dist/components/atom/index.d.ts +1 -0
  22. package/dist/components/atom/index.js +1 -0
  23. package/dist/components/atom/types.d.ts +52 -10
  24. package/dist/components/atom/types.js +1 -1
  25. package/dist/components/atom/utils.d.ts +10 -3
  26. package/dist/components/atom/utils.js +112 -45
  27. package/dist/components/avatar/types.d.ts +1 -6
  28. package/dist/components/badge/index.d.ts +1 -0
  29. package/dist/components/badge/types.d.ts +4 -7
  30. package/dist/components/button/button.svelte +31 -31
  31. package/dist/components/button/types.d.ts +9 -6
  32. package/dist/components/calendar/calendar-body.svelte +0 -1
  33. package/dist/components/calendar/calendar-day.svelte +99 -99
  34. package/dist/components/calendar/calendar-header.svelte +1 -1
  35. package/dist/components/calendar/calendar-root.svelte +206 -206
  36. package/dist/components/calendar/calendar-root.svelte.d.ts +1 -1
  37. package/dist/components/calendar/calendar-week-day.svelte +33 -33
  38. package/dist/components/calendar/types.d.ts +7 -10
  39. package/dist/components/card/card-root.svelte +92 -92
  40. package/dist/components/card/types.d.ts +12 -51
  41. package/dist/components/checkbox/checkbox.svelte +65 -55
  42. package/dist/components/checkbox/checkbox.svelte.d.ts +1 -3
  43. package/dist/components/checkbox/index.d.ts +2 -0
  44. package/dist/components/checkbox/index.js +1 -0
  45. package/dist/components/checkbox/motion.d.ts +17 -0
  46. package/dist/components/checkbox/motion.js +34 -0
  47. package/dist/components/checkbox/types.d.ts +14 -7
  48. package/dist/components/chip/chip-close-button.svelte +33 -0
  49. package/dist/components/chip/chip-close-button.svelte.d.ts +4 -0
  50. package/dist/components/chip/chip.svelte +34 -41
  51. package/dist/components/chip/chip.svelte.d.ts +1 -3
  52. package/dist/components/chip/index.d.ts +2 -0
  53. package/dist/components/chip/index.js +2 -0
  54. package/dist/components/chip/types.d.ts +15 -8
  55. package/dist/components/collapsible/bond.svelte.d.ts +34 -24
  56. package/dist/components/collapsible/bond.svelte.js +73 -60
  57. package/dist/components/collapsible/collapsible-body.svelte +1 -1
  58. package/dist/components/collapsible/collapsible-header.svelte +1 -1
  59. package/dist/components/collapsible/collapsible-indicator.svelte +1 -1
  60. package/dist/components/collapsible/collapsible-root.svelte +67 -67
  61. package/dist/components/collapsible/types.d.ts +10 -22
  62. package/dist/components/combobox/bond.svelte.d.ts +13 -8
  63. package/dist/components/combobox/bond.svelte.js +30 -20
  64. package/dist/components/combobox/combobox-control.svelte +66 -66
  65. package/dist/components/combobox/combobox-item.svelte +62 -62
  66. package/dist/components/combobox/combobox-root.svelte +65 -65
  67. package/dist/components/combobox/combobox-root.svelte.d.ts +2 -2
  68. package/dist/components/combobox/combobox-selections.svelte +17 -17
  69. package/dist/components/combobox/combobox-trigger.svelte +34 -34
  70. package/dist/components/combobox/types.d.ts +6 -10
  71. package/dist/components/container/index.d.ts +1 -0
  72. package/dist/components/container/types.d.ts +6 -12
  73. package/dist/components/context-menu/atoms.d.ts +4 -0
  74. package/dist/components/context-menu/atoms.js +4 -0
  75. package/dist/components/context-menu/context-menu-content.svelte +52 -0
  76. package/dist/components/context-menu/context-menu-content.svelte.d.ts +27 -0
  77. package/dist/components/context-menu/context-menu-root.svelte +8 -0
  78. package/dist/components/context-menu/context-menu-root.svelte.d.ts +4 -0
  79. package/dist/components/context-menu/context-menu-trigger.svelte +59 -0
  80. package/dist/components/context-menu/context-menu-trigger.svelte.d.ts +27 -0
  81. package/dist/components/context-menu/index.d.ts +2 -0
  82. package/dist/components/context-menu/index.js +2 -0
  83. package/dist/components/{contextmenu → context-menu}/types.d.ts +1 -6
  84. package/dist/components/datagrid/atoms.d.ts +11 -5
  85. package/dist/components/datagrid/atoms.js +11 -5
  86. package/dist/components/datagrid/bond.svelte.d.ts +29 -14
  87. package/dist/components/datagrid/bond.svelte.js +45 -33
  88. package/dist/components/datagrid/cell/bond.svelte.d.ts +29 -0
  89. package/dist/components/datagrid/cell/bond.svelte.js +42 -0
  90. package/dist/components/datagrid/cell/datagrid-cell.svelte +49 -0
  91. package/dist/components/datagrid/cell/datagrid-cell.svelte.d.ts +26 -0
  92. package/dist/components/datagrid/cell/index.d.ts +4 -0
  93. package/dist/components/datagrid/cell/index.js +4 -0
  94. package/dist/components/datagrid/col/index.d.ts +4 -0
  95. package/dist/components/datagrid/col/index.js +4 -0
  96. package/dist/components/datagrid/column/bond.svelte.d.ts +45 -0
  97. package/dist/components/datagrid/column/bond.svelte.js +76 -0
  98. package/dist/components/datagrid/{th/datagrid-th-sort-icon.svelte → column/datagrid-column-sort-icon.svelte} +3 -3
  99. package/dist/components/datagrid/{th/datagrid-th-sort-icon.svelte.d.ts → column/datagrid-column-sort-icon.svelte.d.ts} +3 -3
  100. package/dist/components/datagrid/{th/datagrid-th.svelte → column/datagrid-column.svelte} +27 -36
  101. package/dist/components/datagrid/column/datagrid-column.svelte.d.ts +26 -0
  102. package/dist/components/datagrid/column/index.d.ts +4 -0
  103. package/dist/components/datagrid/column/index.js +4 -0
  104. package/dist/components/datagrid/context.d.ts +2 -29
  105. package/dist/components/datagrid/context.js +4 -18
  106. package/dist/components/datagrid/datagrid-body.svelte +7 -20
  107. package/dist/components/datagrid/datagrid-body.svelte.d.ts +8 -15
  108. package/dist/components/datagrid/datagrid-checkbox.svelte +60 -63
  109. package/dist/components/datagrid/datagrid-checkbox.svelte.d.ts +1 -3
  110. package/dist/components/datagrid/datagrid-footer.svelte +27 -34
  111. package/dist/components/datagrid/datagrid-footer.svelte.d.ts +12 -12
  112. package/dist/components/datagrid/datagrid-header.svelte +10 -17
  113. package/dist/components/datagrid/datagrid-header.svelte.d.ts +12 -12
  114. package/dist/components/datagrid/datagrid-root.svelte +49 -59
  115. package/dist/components/datagrid/datagrid-root.svelte.d.ts +15 -14
  116. package/dist/components/datagrid/row/bond.svelte.d.ts +42 -0
  117. package/dist/components/datagrid/row/bond.svelte.js +72 -0
  118. package/dist/components/datagrid/{tr/datagrid-tr.css → row/datagrid-row.css} +1 -1
  119. package/dist/components/datagrid/row/datagrid-row.svelte +64 -0
  120. package/dist/components/datagrid/row/datagrid-row.svelte.d.ts +27 -0
  121. package/dist/components/datagrid/row/index.d.ts +4 -0
  122. package/dist/components/datagrid/row/index.js +4 -0
  123. package/dist/components/datagrid/types.d.ts +56 -116
  124. package/dist/components/date-picker/bond.svelte.d.ts +0 -12
  125. package/dist/components/date-picker/date-picker-calendar.svelte +58 -58
  126. package/dist/components/date-picker/date-picker-months.svelte +1 -1
  127. package/dist/components/date-picker/date-picker-root.svelte +96 -96
  128. package/dist/components/date-picker/date-picker-root.svelte.d.ts +1 -1
  129. package/dist/components/date-picker/date-picker-years.svelte +1 -1
  130. package/dist/components/date-picker/types.d.ts +6 -3
  131. package/dist/components/dialog/atoms.d.ts +1 -1
  132. package/dist/components/dialog/atoms.js +1 -1
  133. package/dist/components/dialog/bond.svelte.d.ts +66 -28
  134. package/dist/components/dialog/bond.svelte.js +136 -117
  135. package/dist/components/dialog/dialog-body.svelte +1 -1
  136. package/dist/components/dialog/dialog-close.svelte +58 -0
  137. package/dist/components/dialog/dialog-close.svelte.d.ts +26 -0
  138. package/dist/components/dialog/dialog-content.svelte +2 -2
  139. package/dist/components/dialog/dialog-description.svelte +1 -1
  140. package/dist/components/dialog/dialog-footer.svelte +1 -1
  141. package/dist/components/dialog/dialog-header.svelte +1 -1
  142. package/dist/components/dialog/dialog-root.svelte +102 -82
  143. package/dist/components/dialog/dialog-title.svelte +1 -1
  144. package/dist/components/dialog/motion.svelte.js +68 -26
  145. package/dist/components/dialog/types.d.ts +16 -51
  146. package/dist/components/divider/types.d.ts +1 -6
  147. package/dist/components/drawer/bond.svelte.d.ts +61 -36
  148. package/dist/components/drawer/bond.svelte.js +149 -121
  149. package/dist/components/drawer/drawer-backdrop.svelte +2 -1
  150. package/dist/components/drawer/drawer-body.svelte +1 -1
  151. package/dist/components/drawer/drawer-content.svelte +5 -5
  152. package/dist/components/drawer/drawer-content.svelte.d.ts +4 -1
  153. package/dist/components/drawer/drawer-description.svelte +1 -1
  154. package/dist/components/drawer/drawer-footer.svelte +1 -1
  155. package/dist/components/drawer/drawer-header.svelte +1 -1
  156. package/dist/components/drawer/drawer-root.svelte +96 -87
  157. package/dist/components/drawer/drawer-title.svelte +1 -1
  158. package/dist/components/drawer/motion.d.ts +59 -5
  159. package/dist/components/drawer/motion.js +133 -15
  160. package/dist/components/drawer/types.d.ts +15 -24
  161. package/dist/components/dropdown/atoms.d.ts +4 -8
  162. package/dist/components/dropdown/atoms.js +4 -9
  163. package/dist/components/dropdown/bond.svelte.d.ts +4 -53
  164. package/dist/components/dropdown/bond.svelte.js +4 -89
  165. package/dist/components/dropdown/dropdown-query.svelte +43 -43
  166. package/dist/components/dropdown/dropdown-root.svelte +79 -79
  167. package/dist/components/dropdown/dropdown-root.svelte.d.ts +4 -4
  168. package/dist/components/dropdown/dropdown-selection.svelte +55 -55
  169. package/dist/components/dropdown/dropdown-selections.svelte +70 -70
  170. package/dist/components/dropdown/dropdown-trigger.svelte +30 -30
  171. package/dist/components/dropdown/index.d.ts +43 -7
  172. package/dist/components/dropdown/index.js +34 -6
  173. package/dist/components/dropdown/item/bond.svelte.d.ts +36 -0
  174. package/dist/components/dropdown/item/bond.svelte.js +85 -0
  175. package/dist/components/dropdown/item/controller.svelte.d.ts +1 -1
  176. package/dist/components/dropdown/item/dropdown-item.svelte +81 -107
  177. package/dist/components/dropdown/item/index.d.ts +11 -3
  178. package/dist/components/dropdown/item/index.js +10 -3
  179. package/dist/components/dropdown/types.d.ts +2 -67
  180. package/dist/components/dropdown-menu/atoms.d.ts +9 -0
  181. package/dist/components/dropdown-menu/atoms.js +9 -0
  182. package/dist/components/dropdown-menu/attachments.svelte.d.ts +2 -0
  183. package/dist/components/dropdown-menu/attachments.svelte.js +5 -0
  184. package/dist/components/dropdown-menu/bond.svelte.d.ts +72 -0
  185. package/dist/components/dropdown-menu/bond.svelte.js +173 -0
  186. package/dist/components/dropdown-menu/dropdown-menu-content.svelte +40 -0
  187. package/dist/components/dropdown-menu/dropdown-menu-content.svelte.d.ts +37 -0
  188. package/dist/components/dropdown-menu/dropdown-menu-root.svelte +14 -0
  189. package/dist/components/dropdown-menu/dropdown-menu-root.svelte.d.ts +4 -0
  190. package/dist/components/dropdown-menu/index.d.ts +7 -0
  191. package/dist/components/dropdown-menu/index.js +6 -0
  192. package/dist/components/dropdown-menu/item/bond.svelte.d.ts +26 -0
  193. package/dist/components/dropdown-menu/item/bond.svelte.js +54 -0
  194. package/dist/components/dropdown-menu/item/controller.svelte.d.ts +39 -0
  195. package/dist/components/dropdown-menu/item/controller.svelte.js +73 -0
  196. package/dist/components/dropdown-menu/item/dropdown-menu-item.svelte +75 -0
  197. package/dist/components/dropdown-menu/item/dropdown-menu-item.svelte.d.ts +32 -0
  198. package/dist/components/dropdown-menu/item/index.d.ts +3 -0
  199. package/dist/components/dropdown-menu/item/index.js +3 -0
  200. package/dist/components/dropdown-menu/item/types.d.ts +57 -0
  201. package/dist/components/dropdown-menu/item/types.js +1 -0
  202. package/dist/components/dropdown-menu/types.d.ts +3 -0
  203. package/dist/components/dropdown-menu/types.js +1 -0
  204. package/dist/components/element/html-element.svelte +114 -85
  205. package/dist/components/element/html-element.svelte.d.ts +1 -1
  206. package/dist/components/element/svg-element.svelte +88 -88
  207. package/dist/components/element/types.d.ts +32 -20
  208. package/dist/components/form/field/atoms.d.ts +1 -1
  209. package/dist/components/form/field/atoms.js +1 -1
  210. package/dist/components/form/field/bond.svelte.js +0 -6
  211. package/dist/components/form/field/field-control.svelte +30 -9
  212. package/dist/components/form/field/field-control.svelte.d.ts +12 -22
  213. package/dist/components/form/field/field-helper-text.svelte +23 -0
  214. package/dist/components/form/field/field-helper-text.svelte.d.ts +26 -0
  215. package/dist/components/form/field/field-label.svelte +5 -7
  216. package/dist/components/form/field/field-label.svelte.d.ts +2 -2
  217. package/dist/components/form/field/field-root.svelte +17 -8
  218. package/dist/components/form/form-root.svelte +66 -66
  219. package/dist/components/form/types.d.ts +34 -58
  220. package/dist/components/icon/icon.svelte +40 -40
  221. package/dist/components/icon/types.d.ts +4 -7
  222. package/dist/components/image/index.d.ts +2 -0
  223. package/dist/components/image/index.js +2 -1
  224. package/dist/components/index.d.ts +11 -0
  225. package/dist/components/index.js +11 -0
  226. package/dist/components/input/atoms.d.ts +19 -1
  227. package/dist/components/input/atoms.js +19 -1
  228. package/dist/components/input/color/color-control.svelte +197 -0
  229. package/dist/components/input/color/color-control.svelte.d.ts +4 -0
  230. package/dist/components/input/color/index.d.ts +5 -0
  231. package/dist/components/input/color/index.js +5 -0
  232. package/dist/components/input/color/segment.svelte +240 -0
  233. package/dist/components/input/color/segment.svelte.d.ts +6 -0
  234. package/dist/components/input/color/shared.d.ts +23 -0
  235. package/dist/components/input/color/shared.js +349 -0
  236. package/dist/components/input/color/swatch.svelte +23 -0
  237. package/dist/components/input/color/swatch.svelte.d.ts +8 -0
  238. package/dist/components/input/color/types.d.ts +56 -0
  239. package/dist/components/input/color/types.js +2 -0
  240. package/dist/components/input/index.d.ts +1 -0
  241. package/dist/components/input/index.js +1 -0
  242. package/dist/components/input/input-control.svelte +3 -1
  243. package/dist/components/input/input-currency-control.svelte +189 -0
  244. package/dist/components/input/input-currency-control.svelte.d.ts +4 -0
  245. package/dist/components/input/input-email-control.svelte +128 -0
  246. package/dist/components/input/input-email-control.svelte.d.ts +4 -0
  247. package/dist/components/input/input-file-control.svelte +127 -0
  248. package/dist/components/input/input-file-control.svelte.d.ts +4 -0
  249. package/dist/components/input/input-icon.svelte.d.ts +1 -1
  250. package/dist/components/input/input-location.svelte +335 -0
  251. package/dist/components/input/input-location.svelte.d.ts +4 -0
  252. package/dist/components/input/input-number-control.svelte +114 -0
  253. package/dist/components/input/input-number-control.svelte.d.ts +6 -0
  254. package/dist/components/input/input-otp-control.svelte +206 -0
  255. package/dist/components/input/input-otp-control.svelte.d.ts +4 -0
  256. package/dist/components/input/input-password-control.svelte +91 -0
  257. package/dist/components/input/input-password-control.svelte.d.ts +3 -0
  258. package/dist/components/input/input-phone-control.svelte +394 -0
  259. package/dist/components/input/input-phone-control.svelte.d.ts +4 -0
  260. package/dist/components/input/input-placeholder.svelte.d.ts +1 -1
  261. package/dist/components/input/input-root.svelte +74 -74
  262. package/dist/components/input/input-text-control.svelte +59 -0
  263. package/dist/components/input/input-text-control.svelte.d.ts +4 -0
  264. package/dist/components/input/input-url-control.svelte +218 -0
  265. package/dist/components/input/input-url-control.svelte.d.ts +4 -0
  266. package/dist/components/input/time/datetime-control.svelte +281 -0
  267. package/dist/components/input/time/datetime-control.svelte.d.ts +5 -0
  268. package/dist/components/input/time/index.d.ts +6 -0
  269. package/dist/components/input/time/index.js +6 -0
  270. package/dist/components/input/time/segment.svelte +143 -0
  271. package/dist/components/input/time/segment.svelte.d.ts +6 -0
  272. package/dist/components/input/time/shared.d.ts +29 -0
  273. package/dist/components/input/time/shared.js +150 -0
  274. package/dist/components/input/time/time-control.svelte +237 -0
  275. package/dist/components/input/time/time-control.svelte.d.ts +3 -0
  276. package/dist/components/input/time/types.d.ts +34 -0
  277. package/dist/components/input/time/types.js +4 -0
  278. package/dist/components/input/types.d.ts +355 -17
  279. package/dist/components/label/types.d.ts +4 -7
  280. package/dist/components/layer/bond.svelte.d.ts +2 -2
  281. package/dist/components/layer/bond.svelte.js +1 -1
  282. package/dist/components/layer/index.d.ts +1 -0
  283. package/dist/components/layer/layer-inner.svelte.d.ts +1 -1
  284. package/dist/components/layer/layer-root.svelte +65 -65
  285. package/dist/components/layer/layer-root.svelte.d.ts +1 -1
  286. package/dist/components/layer/types.d.ts +6 -6
  287. package/dist/components/lazy/index.d.ts +1 -0
  288. package/dist/components/lazy/lazy.svelte +29 -29
  289. package/dist/components/lazy/types.d.ts +4 -4
  290. package/dist/components/link/index.d.ts +1 -0
  291. package/dist/components/link/types.d.ts +5 -6
  292. package/dist/components/list/index.d.ts +1 -0
  293. package/dist/components/list/types.d.ts +5 -6
  294. package/dist/components/menu/atoms.d.ts +2 -7
  295. package/dist/components/menu/atoms.js +2 -7
  296. package/dist/components/menu/bond.svelte.d.ts +9 -23
  297. package/dist/components/menu/bond.svelte.js +6 -0
  298. package/dist/components/menu/index.d.ts +40 -4
  299. package/dist/components/menu/index.js +26 -3
  300. package/dist/components/menu/item/bond.svelte.d.ts +27 -0
  301. package/dist/components/menu/item/bond.svelte.js +54 -0
  302. package/dist/components/menu/item/controller.svelte.d.ts +1 -1
  303. package/dist/components/menu/item/index.d.ts +5 -2
  304. package/dist/components/menu/item/index.js +4 -2
  305. package/dist/components/menu/item/menu-item.svelte +87 -103
  306. package/dist/components/menu/item/menu-item.svelte.d.ts +15 -14
  307. package/dist/components/menu/item/types.d.ts +5 -12
  308. package/dist/components/menu/menu-content.svelte +40 -40
  309. package/dist/components/menu/menu-root.svelte +15 -15
  310. package/dist/components/menu/menu-root.svelte.d.ts +1 -1
  311. package/dist/components/menu/types.d.ts +2 -6
  312. package/dist/components/popover/bond.svelte.d.ts +67 -39
  313. package/dist/components/popover/bond.svelte.js +159 -197
  314. package/dist/components/popover/index.d.ts +3 -1
  315. package/dist/components/popover/index.js +3 -1
  316. package/dist/components/popover/motion.d.ts +29 -1
  317. package/dist/components/popover/motion.js +128 -50
  318. package/dist/components/popover/popover-arrow.svelte +97 -110
  319. package/dist/components/popover/popover-arrow.svelte.d.ts +1 -2
  320. package/dist/components/popover/popover-content.svelte +159 -123
  321. package/dist/components/popover/popover-engine.svelte +118 -0
  322. package/dist/components/popover/popover-engine.svelte.d.ts +3 -0
  323. package/dist/components/popover/popover-indicator.svelte +2 -13
  324. package/dist/components/popover/popover-indicator.svelte.d.ts +0 -6
  325. package/dist/components/popover/popover-root.svelte +87 -49
  326. package/dist/components/popover/popover-root.svelte.d.ts +2 -1
  327. package/dist/components/popover/popover-trigger.svelte +35 -35
  328. package/dist/components/popover/strategies/floating.svelte +109 -0
  329. package/dist/components/popover/strategies/floating.svelte.d.ts +3 -0
  330. package/dist/components/popover/strategies/index.d.ts +1 -0
  331. package/dist/components/popover/strategies/index.js +1 -0
  332. package/dist/components/popover/strategy-types.d.ts +40 -0
  333. package/dist/components/popover/strategy-types.js +1 -0
  334. package/dist/components/popover/types.d.ts +10 -36
  335. package/dist/components/portal/active-portal.svelte +5 -4
  336. package/dist/components/portal/bond.svelte.d.ts +12 -8
  337. package/dist/components/portal/bond.svelte.js +25 -27
  338. package/dist/components/portal/index.d.ts +1 -0
  339. package/dist/components/portal/index.js +1 -0
  340. package/dist/components/portal/portal-inner.svelte +1 -1
  341. package/dist/components/portal/portal-inner.svelte.d.ts +1 -1
  342. package/dist/components/portal/portal-root.svelte +76 -76
  343. package/dist/components/portal/portal-root.svelte.d.ts +1 -1
  344. package/dist/components/portal/portals/bond.svelte.d.ts +2 -2
  345. package/dist/components/portal/portals/bond.svelte.js +2 -2
  346. package/dist/components/portal/teleport.svelte +47 -49
  347. package/dist/components/portal/teleport.svelte.d.ts +1 -2
  348. package/dist/components/portal/types.d.ts +7 -25
  349. package/dist/components/portal/utils.js +3 -3
  350. package/dist/components/portal/zlayer.svelte.d.ts +16 -0
  351. package/dist/components/portal/zlayer.svelte.js +25 -0
  352. package/dist/components/radio/index.d.ts +2 -0
  353. package/dist/components/radio/index.js +1 -0
  354. package/dist/components/radio/motion.d.ts +24 -0
  355. package/dist/components/radio/motion.js +59 -0
  356. package/dist/components/radio/radio.svelte +22 -12
  357. package/dist/components/radio/types.d.ts +5 -14
  358. package/dist/components/root/bond.svelte.d.ts +2 -2
  359. package/dist/components/root/bond.svelte.js +1 -1
  360. package/dist/components/root/root.svelte +82 -92
  361. package/dist/components/root/root.svelte.d.ts +2 -2
  362. package/dist/components/root/types.d.ts +4 -15
  363. package/dist/components/scrollable/atoms.d.ts +1 -0
  364. package/dist/components/scrollable/atoms.js +1 -0
  365. package/dist/components/scrollable/bond.svelte.d.ts +73 -189
  366. package/dist/components/scrollable/bond.svelte.js +195 -371
  367. package/dist/components/scrollable/scrollable-container.css +22 -22
  368. package/dist/components/scrollable/scrollable-container.svelte +66 -61
  369. package/dist/components/scrollable/scrollable-container.svelte.d.ts +12 -12
  370. package/dist/components/scrollable/scrollable-content.svelte +22 -17
  371. package/dist/components/scrollable/scrollable-content.svelte.d.ts +12 -12
  372. package/dist/components/scrollable/scrollable-root.svelte +106 -101
  373. package/dist/components/scrollable/scrollable-root.svelte.d.ts +12 -12
  374. package/dist/components/scrollable/scrollable-thumb.svelte +21 -45
  375. package/dist/components/scrollable/scrollable-thumb.svelte.d.ts +12 -12
  376. package/dist/components/scrollable/scrollable-track.svelte +21 -22
  377. package/dist/components/scrollable/scrollable-track.svelte.d.ts +12 -12
  378. package/dist/components/scrollable/types.d.ts +15 -38
  379. package/dist/components/select/atoms.d.ts +8 -0
  380. package/dist/components/select/atoms.js +8 -0
  381. package/dist/components/select/attachments.svelte.d.ts +2 -0
  382. package/dist/components/select/attachments.svelte.js +5 -0
  383. package/dist/components/select/bond.svelte.d.ts +56 -0
  384. package/dist/components/select/bond.svelte.js +112 -0
  385. package/dist/components/select/index.d.ts +11 -0
  386. package/dist/components/select/index.js +10 -0
  387. package/dist/components/select/item/attachments.svelte.d.ts +3 -0
  388. package/dist/components/select/item/attachments.svelte.js +6 -0
  389. package/dist/components/select/item/bond.svelte.d.ts +33 -0
  390. package/dist/components/select/item/bond.svelte.js +77 -0
  391. package/dist/components/select/item/controller.svelte.d.ts +39 -0
  392. package/dist/components/select/item/controller.svelte.js +105 -0
  393. package/dist/components/select/item/index.d.ts +5 -0
  394. package/dist/components/select/item/index.js +5 -0
  395. package/dist/components/select/item/select-item.svelte +81 -0
  396. package/dist/components/select/item/select-item.svelte.d.ts +25 -0
  397. package/dist/components/select/item/types.d.ts +29 -0
  398. package/dist/components/select/item/types.js +1 -0
  399. package/dist/components/select/runes.svelte.d.ts +10 -0
  400. package/dist/components/select/runes.svelte.js +15 -0
  401. package/dist/components/select/select-placeholder.svelte +40 -0
  402. package/dist/components/select/select-placeholder.svelte.d.ts +34 -0
  403. package/dist/components/select/select-root.svelte +80 -0
  404. package/dist/components/select/select-root.svelte.d.ts +30 -0
  405. package/dist/components/select/select-selection.svelte +55 -0
  406. package/dist/components/select/select-selection.svelte.d.ts +26 -0
  407. package/dist/components/select/select-selections.svelte +70 -0
  408. package/dist/components/select/select-selections.svelte.d.ts +5 -0
  409. package/dist/components/select/select-trigger.svelte +30 -0
  410. package/dist/components/select/select-trigger.svelte.d.ts +26 -0
  411. package/dist/components/select/types.d.ts +61 -0
  412. package/dist/components/select/types.js +1 -0
  413. package/dist/components/sidebar/bond.svelte.d.ts +10 -7
  414. package/dist/components/sidebar/bond.svelte.js +20 -15
  415. package/dist/components/sidebar/sidebar-content.svelte +1 -1
  416. package/dist/components/sidebar/sidebar-root.svelte +50 -41
  417. package/dist/components/sidebar/types.d.ts +10 -15
  418. package/dist/components/slider/index.d.ts +2 -0
  419. package/dist/components/slider/index.js +2 -0
  420. package/dist/components/slider/slider.svelte +164 -0
  421. package/dist/components/slider/slider.svelte.d.ts +6 -0
  422. package/dist/components/slider/types.d.ts +78 -0
  423. package/dist/components/slider/types.js +1 -0
  424. package/dist/components/stack/bond.svelte.d.ts +50 -0
  425. package/dist/components/stack/bond.svelte.js +174 -0
  426. package/dist/components/stack/index.d.ts +2 -0
  427. package/dist/components/stack/index.js +2 -0
  428. package/dist/components/stack/stack-item.svelte +40 -4
  429. package/dist/components/stack/stack-item.svelte.d.ts +6 -5
  430. package/dist/components/stack/stack-root.svelte +33 -4
  431. package/dist/components/stack/stack-root.svelte.d.ts +14 -5
  432. package/dist/components/stack/types.d.ts +11 -10
  433. package/dist/components/stepper/bond.svelte.d.ts +8 -7
  434. package/dist/components/stepper/bond.svelte.js +14 -11
  435. package/dist/components/stepper/step/README.md +97 -97
  436. package/dist/components/stepper/step/bond.svelte.d.ts +74 -63
  437. package/dist/components/stepper/step/bond.svelte.js +105 -69
  438. package/dist/components/stepper/step/step-body.svelte +39 -39
  439. package/dist/components/stepper/step/step-description.svelte +33 -33
  440. package/dist/components/stepper/step/step-header.svelte +34 -34
  441. package/dist/components/stepper/step/step-indicator.svelte +62 -62
  442. package/dist/components/stepper/step/step-root.svelte +42 -42
  443. package/dist/components/stepper/step/step-separator.svelte +48 -48
  444. package/dist/components/stepper/step/step-title.svelte +33 -33
  445. package/dist/components/stepper/step/types.d.ts +13 -57
  446. package/dist/components/stepper/stepper-body.svelte +31 -43
  447. package/dist/components/stepper/stepper-content.svelte +45 -45
  448. package/dist/components/stepper/stepper-footer.svelte +31 -31
  449. package/dist/components/stepper/stepper-header.svelte +27 -39
  450. package/dist/components/stepper/stepper-root.svelte +55 -61
  451. package/dist/components/stepper/types.d.ts +10 -36
  452. package/dist/components/swatch/index.d.ts +1 -0
  453. package/dist/components/swatch/index.js +1 -0
  454. package/dist/components/swatch/swatch.svelte +57 -0
  455. package/dist/components/swatch/swatch.svelte.d.ts +9 -0
  456. package/dist/components/switch/index.d.ts +2 -0
  457. package/dist/components/switch/index.js +2 -0
  458. package/dist/components/switch/switch.svelte +76 -0
  459. package/dist/components/switch/switch.svelte.d.ts +6 -0
  460. package/dist/components/switch/types.d.ts +43 -0
  461. package/dist/components/switch/types.js +1 -0
  462. package/dist/components/tabs/bond.svelte.d.ts +38 -19
  463. package/dist/components/tabs/bond.svelte.js +53 -46
  464. package/dist/components/tabs/tab/attachments.svelte.d.ts +5 -2
  465. package/dist/components/tabs/tab/attachments.svelte.js +4 -3
  466. package/dist/components/tabs/tab/bond.svelte.d.ts +35 -23
  467. package/dist/components/tabs/tab/bond.svelte.js +81 -56
  468. package/dist/components/tabs/tab/tab-body.svelte +61 -43
  469. package/dist/components/tabs/tab/tab-description.svelte +33 -33
  470. package/dist/components/tabs/tab/tab-header.svelte +61 -61
  471. package/dist/components/tabs/tab/tab-root.svelte +49 -50
  472. package/dist/components/tabs/tab/tab-root.svelte.d.ts +13 -35
  473. package/dist/components/tabs/tabs-body.svelte +39 -35
  474. package/dist/components/tabs/tabs-body.svelte.d.ts +1 -1
  475. package/dist/components/tabs/tabs-content.svelte +32 -51
  476. package/dist/components/tabs/tabs-header.svelte +32 -32
  477. package/dist/components/tabs/tabs-root.svelte +56 -56
  478. package/dist/components/tabs/types.d.ts +20 -37
  479. package/dist/components/textarea/types.d.ts +6 -12
  480. package/dist/components/toast/atoms.d.ts +1 -0
  481. package/dist/components/toast/atoms.js +1 -0
  482. package/dist/components/toast/index.d.ts +1 -0
  483. package/dist/components/toast/index.js +1 -0
  484. package/dist/components/toast/manager.svelte.d.ts +38 -0
  485. package/dist/components/toast/manager.svelte.js +82 -0
  486. package/dist/components/toast/toast-description.svelte.d.ts +1 -1
  487. package/dist/components/toast/toast-root-managed.svelte +64 -0
  488. package/dist/components/toast/toast-root-managed.svelte.d.ts +7 -0
  489. package/dist/components/toast/toast-root.svelte.d.ts +1 -1
  490. package/dist/components/toast/toast-title.svelte.d.ts +1 -1
  491. package/dist/components/toast/toast-toaster.svelte +42 -0
  492. package/dist/components/toast/toast-toaster.svelte.d.ts +4 -0
  493. package/dist/components/toast/types.d.ts +22 -31
  494. package/dist/components/tooltip/index.d.ts +1 -0
  495. package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
  496. package/dist/components/tooltip/types.d.ts +5 -8
  497. package/dist/components/tree/bond.svelte.d.ts +28 -19
  498. package/dist/components/tree/bond.svelte.js +62 -53
  499. package/dist/components/tree/tree-body.svelte +1 -1
  500. package/dist/components/tree/tree-header.svelte +1 -1
  501. package/dist/components/tree/tree-header.svelte.d.ts +1 -1
  502. package/dist/components/tree/tree-indicator.svelte +1 -1
  503. package/dist/components/tree/tree-root.svelte +66 -66
  504. package/dist/components/tree/types.d.ts +4 -28
  505. package/dist/components/virtual/index.d.ts +2 -0
  506. package/dist/components/virtual/index.js +2 -0
  507. package/dist/components/virtual/types.d.ts +1 -6
  508. package/dist/constants/motion.d.ts +9 -0
  509. package/dist/constants/motion.js +9 -0
  510. package/dist/context/index.d.ts +1 -1
  511. package/dist/context/preset.svelte.d.ts +169 -2
  512. package/dist/runes/color-scheme.svelte.js +17 -5
  513. package/dist/shared/bond.svelte.d.ts +29 -3
  514. package/dist/shared/bond.svelte.js +126 -4
  515. package/dist/shared/index.d.ts +1 -1
  516. package/dist/shared/index.js +1 -1
  517. package/dist/shared/motion.d.ts +1 -0
  518. package/dist/shared/motion.js +2 -8
  519. package/dist/types/index.d.ts +4 -0
  520. package/dist/utils/index.d.ts +1 -1
  521. package/dist/utils/index.js +1 -1
  522. package/dist/utils/promise.svelte.d.ts +5 -0
  523. package/dist/utils/promise.svelte.js +17 -0
  524. package/dist/utils/variant.d.ts +10 -1
  525. package/dist/utils/variant.js +11 -1
  526. package/package.json +171 -48
  527. package/dist/components/accordion/accordion.stories.svelte +0 -70
  528. package/dist/components/accordion/accordion.stories.svelte.d.ts +0 -18
  529. package/dist/components/alert/alert.stories.svelte +0 -400
  530. package/dist/components/alert/alert.stories.svelte.d.ts +0 -3
  531. package/dist/components/avatar/avatar.stories.svelte +0 -22
  532. package/dist/components/avatar/avatar.stories.svelte.d.ts +0 -26
  533. package/dist/components/badge/badge.stories.svelte +0 -12
  534. package/dist/components/badge/badge.stories.svelte.d.ts +0 -26
  535. package/dist/components/breadcrumb/breadcrumb.stories.svelte +0 -16
  536. package/dist/components/breadcrumb/breadcrumb.stories.svelte.d.ts +0 -26
  537. package/dist/components/button/button.stories.svelte +0 -27
  538. package/dist/components/button/button.stories.svelte.d.ts +0 -18
  539. package/dist/components/calendar/calendar.stories.svelte +0 -26
  540. package/dist/components/calendar/calendar.stories.svelte.d.ts +0 -26
  541. package/dist/components/card/card.stories.svelte +0 -133
  542. package/dist/components/card/card.stories.svelte.d.ts +0 -19
  543. package/dist/components/checkbox/checkbox.stories.svelte +0 -22
  544. package/dist/components/checkbox/checkbox.stories.svelte.d.ts +0 -6
  545. package/dist/components/collapsible/collapsible.stories.svelte +0 -172
  546. package/dist/components/collapsible/collapsible.stories.svelte.d.ts +0 -18
  547. package/dist/components/combobox/combobox.stories.svelte +0 -63
  548. package/dist/components/combobox/combobox.stories.svelte.d.ts +0 -3
  549. package/dist/components/container/container.stories.svelte +0 -20
  550. package/dist/components/container/container.stories.svelte.d.ts +0 -26
  551. package/dist/components/contextmenu/atoms.d.ts +0 -0
  552. package/dist/components/contextmenu/atoms.js +0 -1
  553. package/dist/components/contextmenu/contextmenu-trigger.svelte +0 -0
  554. package/dist/components/contextmenu/contextmenu-trigger.svelte.d.ts +0 -26
  555. package/dist/components/contextmenu/indext.d.ts +0 -0
  556. package/dist/components/contextmenu/indext.js +0 -1
  557. package/dist/components/datagrid/datagrid.stories.svelte +0 -72
  558. package/dist/components/datagrid/datagrid.stories.svelte.d.ts +0 -6
  559. package/dist/components/datagrid/td/bond.svelte.d.ts +0 -28
  560. package/dist/components/datagrid/td/bond.svelte.js +0 -40
  561. package/dist/components/datagrid/td/datagrid-td.svelte +0 -66
  562. package/dist/components/datagrid/td/datagrid-td.svelte.d.ts +0 -30
  563. package/dist/components/datagrid/td/index.d.ts +0 -2
  564. package/dist/components/datagrid/td/index.js +0 -2
  565. package/dist/components/datagrid/th/bond.svelte.d.ts +0 -38
  566. package/dist/components/datagrid/th/bond.svelte.js +0 -66
  567. package/dist/components/datagrid/th/datagrid-th.svelte.d.ts +0 -26
  568. package/dist/components/datagrid/th/index.d.ts +0 -2
  569. package/dist/components/datagrid/th/index.js +0 -2
  570. package/dist/components/datagrid/tr/bond.svelte.d.ts +0 -37
  571. package/dist/components/datagrid/tr/bond.svelte.js +0 -72
  572. package/dist/components/datagrid/tr/datagrid-tr.svelte +0 -90
  573. package/dist/components/datagrid/tr/datagrid-tr.svelte.d.ts +0 -28
  574. package/dist/components/datagrid/tr/index.d.ts +0 -2
  575. package/dist/components/datagrid/tr/index.js +0 -2
  576. package/dist/components/date-picker/date-picker.stories.svelte +0 -35
  577. package/dist/components/date-picker/date-picker.stories.svelte.d.ts +0 -3
  578. package/dist/components/dialog/dialog.stories.svelte +0 -64
  579. package/dist/components/dialog/dialog.stories.svelte.d.ts +0 -3
  580. package/dist/components/drawer/drawer.stories.svelte +0 -141
  581. package/dist/components/drawer/drawer.stories.svelte.d.ts +0 -3
  582. package/dist/components/dropdown/dropdown.stories.svelte +0 -127
  583. package/dist/components/dropdown/dropdown.stories.svelte.d.ts +0 -3
  584. package/dist/components/element/element.stories.svelte +0 -37
  585. package/dist/components/element/element.stories.svelte.d.ts +0 -3
  586. package/dist/components/form/field/field-errors.svelte +0 -9
  587. package/dist/components/form/field/field-errors.svelte.d.ts +0 -11
  588. package/dist/components/form/form.stories.svelte +0 -96
  589. package/dist/components/form/form.stories.svelte.d.ts +0 -18
  590. package/dist/components/image/image.stories.svelte +0 -20
  591. package/dist/components/image/image.stories.svelte.d.ts +0 -26
  592. package/dist/components/input/input.stories.svelte +0 -35
  593. package/dist/components/input/input.stories.svelte.d.ts +0 -18
  594. package/dist/components/label/label.stories.svelte +0 -15
  595. package/dist/components/label/label.stories.svelte.d.ts +0 -26
  596. package/dist/components/lazy/lazy.stories.svelte +0 -28
  597. package/dist/components/lazy/lazy.stories.svelte.d.ts +0 -19
  598. package/dist/components/link/link.stories.svelte +0 -15
  599. package/dist/components/link/link.stories.svelte.d.ts +0 -26
  600. package/dist/components/menu/menu.stories.svelte +0 -33
  601. package/dist/components/menu/menu.stories.svelte.d.ts +0 -3
  602. package/dist/components/popover/popover.stories.svelte +0 -37
  603. package/dist/components/popover/popover.stories.svelte.d.ts +0 -3
  604. package/dist/components/qr-code/qr-code.stories.svelte +0 -18
  605. package/dist/components/qr-code/qr-code.stories.svelte.d.ts +0 -26
  606. package/dist/components/radio/radio-group.stories.svelte +0 -41
  607. package/dist/components/radio/radio-group.stories.svelte.d.ts +0 -6
  608. package/dist/components/radio/radio.stories.svelte +0 -17
  609. package/dist/components/radio/radio.stories.svelte.d.ts +0 -6
  610. package/dist/components/root/l0-portal.svelte +0 -8
  611. package/dist/components/root/l0-portal.svelte.d.ts +0 -26
  612. package/dist/components/root/l1-portal.svelte +0 -7
  613. package/dist/components/root/l1-portal.svelte.d.ts +0 -26
  614. package/dist/components/root/toasts-portal.svelte +0 -7
  615. package/dist/components/root/toasts-portal.svelte.d.ts +0 -26
  616. package/dist/components/scrollable/scrollable.stories.svelte +0 -116
  617. package/dist/components/scrollable/scrollable.stories.svelte.d.ts +0 -26
  618. package/dist/components/sidebar/sidebar.stories.svelte +0 -43
  619. package/dist/components/sidebar/sidebar.stories.svelte.d.ts +0 -3
  620. package/dist/components/stepper/stepper.stories.svelte +0 -264
  621. package/dist/components/stepper/stepper.stories.svelte.d.ts +0 -4
  622. package/dist/components/tabs/tabs.stories.svelte +0 -70
  623. package/dist/components/tabs/tabs.stories.svelte.d.ts +0 -3
  624. package/dist/components/tooltip/tooltip.stories.svelte +0 -32
  625. package/dist/components/tooltip/tooltip.stories.svelte.d.ts +0 -3
  626. package/dist/components/tree/tree.stories.svelte +0 -142
  627. package/dist/components/tree/tree.stories.svelte.d.ts +0 -3
  628. /package/dist/components/{contextmenu → context-menu}/types.js +0 -0
@@ -1,369 +1,159 @@
1
+ import { getContext, setContext, untrack } from 'svelte';
1
2
  import { createAttachmentKey } from 'svelte/attachments';
2
- import { getContext, setContext } from 'svelte';
3
- import { Bond, BondState } from '../../shared/bond.svelte';
3
+ import { Bond, BondState, BondAtom } from '../../shared/bond.svelte';
4
+ // ============================================================================
5
+ // BondAtom Classes
6
+ // ============================================================================
4
7
  /**
5
- * Main bond class that manages scrollable state and DOM element interactions
6
- * Extends the base Bond class with scrollable-specific functionality
8
+ * Root atom for the scrollable component
7
9
  */
8
- export class ScrollableBond extends Bond {
9
- /** Unique key for identifying this bond type in the context system */
10
- static CONTEXT_KEY = '@atoms/context/scrollable';
11
- /** Reference to parent scrollable bond (for nested scrollable areas) */
12
- #parent;
13
- /**
14
- * Creates a new scrollable bond instance
15
- * @param state - The scrollable state instance to manage
16
- */
17
- constructor(state) {
18
- super(state);
19
- // Capture any existing scrollable context as parent
20
- this.#parent = ScrollableBond.get();
21
- }
22
- /**
23
- * Gets the parent scrollable bond if this is a nested scrollable
24
- * @returns The parent bond or undefined if this is the root scrollable
25
- */
26
- get parent() {
27
- return this.#parent;
28
- }
29
- /**
30
- * Shares this bond instance through the context system
31
- * Makes this bond available to child components
32
- * @returns This bond instance for chaining
33
- */
34
- share() {
35
- ScrollableBond.set(this);
36
- return this;
37
- }
38
- /**
39
- * Retrieves the current scrollable bond from context
40
- * @returns The active scrollable bond or undefined if none exists
41
- */
42
- static get() {
43
- return getContext(ScrollableBond.CONTEXT_KEY);
44
- }
45
- /**
46
- * Sets the scrollable bond in context for child components
47
- * @param bond - The bond instance to set in context
48
- * @returns The bond that was set
49
- */
50
- static set(bond) {
51
- return setContext(ScrollableBond.CONTEXT_KEY, bond);
10
+ export class ScrollableRootAtom extends BondAtom {
11
+ constructor(bond) {
12
+ super(bond, 'root');
52
13
  }
53
- /**
54
- * Creates props for the root element with hidden overflow
55
- * The root element contains the entire scrollable interface but doesn't scroll itself
56
- * @param props - Additional props to merge with the generated props
57
- * @returns Object containing all necessary props for the root element
58
- */
59
- root(props = {}) {
14
+ get attrs() {
15
+ const props = untrack(() => this.bond.state.props);
60
16
  return {
61
- 'data-atom': this.id ?? '',
62
- 'data-kind': 'scrollable-root',
63
- 'data-disabled': this.state.props.disabled,
64
- 'data-open': this.state.props.open,
65
- ...props,
66
- // Attach the root DOM element
67
- [createAttachmentKey()]: (node) => {
68
- this.elements.root = node;
69
- }
17
+ ...super.attrs,
18
+ 'data-disabled': props.disabled,
19
+ 'data-open': props.open
70
20
  };
71
21
  }
72
- /**
73
- * Creates props for the scrollable container element
74
- * This element is the actual scrollable area that handles scroll events
75
- * @param props - Additional props to merge with the generated props
76
- * @returns Object containing all necessary props for the container element
77
- */
78
- container(props = {}) {
22
+ }
23
+ /**
24
+ * Container atom for the scrollable area
25
+ */
26
+ export class ScrollableContainerAtom extends BondAtom {
27
+ constructor(bond) {
28
+ super(bond, 'container');
29
+ }
30
+ get handlers() {
79
31
  return {
80
- 'data-atom': this.id ?? '',
81
- 'data-kind': 'scrollable-container',
82
- // Handle scroll events and update internal state
83
32
  onscroll: (e) => {
84
- this.updateScrollState();
85
- if ('onscroll' in props && typeof props.onscroll === 'function') {
86
- props.onscroll(e);
87
- }
88
- },
89
- ...props,
90
- // Attach the container DOM element and initialize scroll state
91
- [createAttachmentKey()]: (node) => {
92
- this.elements.container = node;
93
- this.updateScrollState();
33
+ this.bond.updateScrollState();
94
34
  }
95
35
  };
96
36
  }
97
- /**
98
- * Creates props for the scrollable content wrapper element
99
- * This element defines the boundaries and size of the scrollable content
100
- * @param props - Additional props to merge with the generated props
101
- * @returns Object containing all necessary props for the content element
102
- */
103
- content(props = {}) {
104
- return {
105
- 'data-atom': this.id ?? '',
106
- 'data-kind': 'scrollable-content',
107
- ...props,
108
- // Attach the content DOM element for measurement and interaction
109
- [createAttachmentKey()]: (node) => {
110
- this.elements.content = node;
111
- }
112
- };
37
+ onmount(node) {
38
+ this.bond.updateScrollState();
113
39
  }
114
- /**
115
- * Creates props for the horizontal scrollbar track element
116
- * Provides click-to-scroll functionality for horizontal navigation
117
- * @param props - Additional props to merge with the generated props
118
- * @returns Object containing all necessary props for the horizontal track element
119
- */
120
- trackX(props = {}) {
40
+ }
41
+ /**
42
+ * Content atom for the scrollable content wrapper
43
+ */
44
+ export class ScrollableContentAtom extends BondAtom {
45
+ constructor(bond) {
46
+ super(bond, 'content');
47
+ }
48
+ }
49
+ /**
50
+ * Track atom for scrollbar tracks (horizontal or vertical)
51
+ */
52
+ export class ScrollableTrackAtom extends BondAtom {
53
+ #axis;
54
+ constructor(bond, axis) {
55
+ super(bond, axis === 'x' ? 'trackX' : 'trackY');
56
+ this.#axis = axis;
57
+ }
58
+ get attrs() {
59
+ const canScroll = this.#axis === 'x' ? this.bond.canScrollX : this.bond.canScrollY;
121
60
  return {
122
- 'data-atom': this.id ?? '',
123
- 'data-kind': 'scrollable-track-x',
124
- 'data-visible': this.canScrollX,
125
- ...props,
126
- // Handle click-to-scroll on the horizontal track
127
- onclick: (e) => {
128
- this.handleTrackClick(e, 'x');
129
- if ('onclick' in props && typeof props.onclick === 'function') {
130
- props.onclick(e);
131
- }
132
- },
133
- // Attach the horizontal track DOM element
134
- [createAttachmentKey()]: (node) => {
135
- this.elements.trackX = node;
136
- }
61
+ ...super.attrs,
62
+ 'data-visible': canScroll,
63
+ 'data-direction': this.#axis === 'x' ? 'horizontal' : 'vertical'
137
64
  };
138
65
  }
139
- /**
140
- * Creates props for the vertical scrollbar track element
141
- * Provides click-to-scroll functionality for vertical navigation
142
- * @param props - Additional props to merge with the generated props
143
- * @returns Object containing all necessary props for the vertical track element
144
- */
145
- trackY(props = {}) {
66
+ get handlers() {
146
67
  return {
147
- 'data-atom': this.id ?? '',
148
- 'data-kind': 'scrollable-track-y',
149
- 'data-visible': this.canScrollY,
150
- ...props,
151
- // Handle click-to-scroll on the vertical track
152
68
  onclick: (e) => {
153
- this.handleTrackClick(e, 'y');
154
- if ('onclick' in props && typeof props.onclick === 'function') {
155
- props.onclick(e);
156
- }
157
- },
158
- // Attach the vertical track DOM element
159
- [createAttachmentKey()]: (node) => {
160
- this.elements.trackY = node;
69
+ this.bond.handleTrackClick(e, this.#axis);
161
70
  }
162
71
  };
163
72
  }
164
- /**
165
- * Creates props for the horizontal scrollbar thumb element
166
- * Provides drag-to-scroll functionality and automatic positioning/sizing
167
- * @param props - Additional props to merge with the generated props
168
- * @returns Object containing all necessary props for the horizontal thumb element
169
- */
170
- thumbX(props = {}) {
73
+ }
74
+ /**
75
+ * Thumb atom for scrollbar thumbs (horizontal or vertical)
76
+ */
77
+ export class ScrollableThumbAtom extends BondAtom {
78
+ #axis;
79
+ constructor(bond, axis) {
80
+ super(bond, axis === 'x' ? 'thumbX' : 'thumbY');
81
+ this.#axis = axis;
82
+ }
83
+ get attrs() {
84
+ const position = this.#axis === 'x' ? this.bond.getThumbXPosition() : this.bond.getThumbYPosition();
85
+ const size = this.#axis === 'x' ? this.bond.getThumbXSize() : this.bond.getThumbYSize();
86
+ const styleProperty = this.#axis === 'x' ? 'left' : 'top';
87
+ const sizeProperty = this.#axis === 'x' ? 'width' : 'height';
171
88
  return {
172
- 'data-atom': this.id ?? '',
173
- 'data-kind': 'scrollable-thumb-x',
174
- ...props,
175
- // Dynamically position and size the thumb based on scroll state
176
- style: `left: ${this.getThumbXPosition()}%; width: ${this.getThumbXSize()}%;`,
177
- // Handle drag-to-scroll interaction
178
- onmousedown: (e) => {
179
- this.handleThumbDrag(e, 'x');
180
- if ('onmousedown' in props && typeof props.onmousedown === 'function') {
181
- props.onmousedown(e);
182
- }
183
- },
184
- // Attach the horizontal thumb DOM element
185
- [createAttachmentKey()]: (node) => {
186
- this.elements.thumbX = node;
187
- }
89
+ ...super.attrs,
90
+ 'data-direction': this.#axis === 'x' ? 'horizontal' : 'vertical',
91
+ style: `${styleProperty}: ${position}%; ${sizeProperty}: ${size}%;`
188
92
  };
189
93
  }
190
- /**
191
- * Creates props for the vertical scrollbar thumb element
192
- * Provides drag-to-scroll functionality and automatic positioning/sizing
193
- * @param props - Additional props to merge with the generated props
194
- * @returns Object containing all necessary props for the vertical thumb element
195
- */
196
- thumbY(props = {}) {
94
+ get handlers() {
197
95
  return {
198
- 'data-atom': this.id ?? '',
199
- 'data-kind': 'scrollable-thumb-y',
200
- ...props,
201
- // Dynamically position and size the thumb based on scroll state
202
- style: `top: ${this.getThumbYPosition()}%; height: ${this.getThumbYSize()}%;`,
203
- // Handle drag-to-scroll interaction
204
96
  onmousedown: (e) => {
205
- this.handleThumbDrag(e, 'y');
206
- if ('onmousedown' in props && typeof props.onmousedown === 'function') {
207
- props.onmousedown(e);
208
- }
209
- },
210
- // Attach the vertical thumb DOM element
211
- [createAttachmentKey()]: (node) => {
212
- this.elements.thumbY = node;
97
+ this.bond.handleThumbDrag(e, this.#axis);
213
98
  }
214
99
  };
215
100
  }
216
- /**
217
- * Creates props for a unified track element that can be oriented horizontally or vertically
218
- * This method provides a single interface for both horizontal and vertical tracks
219
- * @param orientation - The track orientation ('horizontal' or 'vertical')
220
- * @param props - Additional props to merge with the generated props
221
- * @returns Object containing all necessary props for the track element
222
- */
223
- track(orientation, props = {}) {
224
- const isHorizontal = orientation === 'horizontal';
225
- return {
226
- 'data-atom': this.id ?? '',
227
- 'data-kind': `scrollable-track-${isHorizontal ? 'x' : 'y'}`,
228
- 'data-direction': orientation,
229
- 'data-visible': isHorizontal ? this.canScrollX : this.canScrollY,
230
- ...props,
231
- // Handle click-to-scroll based on orientation
232
- onclick: (e) => {
233
- this.handleTrackClick(e, isHorizontal ? 'x' : 'y');
234
- if ('onclick' in props && typeof props.onclick === 'function') {
235
- props.onclick(e);
236
- }
237
- },
238
- [createAttachmentKey()]: (node) => {
239
- // Set both the unified track reference and the specific axis reference
240
- if (isHorizontal) {
241
- this.elements.trackX = node;
242
- }
243
- else {
244
- this.elements.trackY = node;
245
- }
246
- }
247
- };
101
+ }
102
+ // ============================================================================
103
+ // ScrollableBond Class
104
+ // ============================================================================
105
+ /**
106
+ * Main bond class that manages scrollable state and DOM element interactions
107
+ */
108
+ export class ScrollableBond extends Bond {
109
+ static CONTEXT_KEY = '@atoms/context/scrollable';
110
+ #parent;
111
+ constructor(state) {
112
+ super(state);
113
+ this.#parent = ScrollableBond.get();
248
114
  }
249
- /**
250
- * Creates props for a unified thumb element that can be oriented horizontally or vertically
251
- * This method provides a single interface for both horizontal and vertical thumbs
252
- * @param orientation - The thumb orientation ('horizontal' or 'vertical')
253
- * @param props - Additional props to merge with the generated props
254
- * @returns Object containing all necessary props for the thumb element
255
- */
256
- thumb(orientation, props = {}) {
257
- const isHorizontal = orientation === 'horizontal';
258
- // Calculate position and size based on orientation
259
- // const position = isHorizontal ? this.getThumbXPosition() : this.getThumbYPosition();
260
- // const size = isHorizontal ? this.getThumbXSize() : this.getThumbYSize();
261
- // const styleProperty = isHorizontal ? 'left' : 'top';
262
- // const sizeProperty = isHorizontal ? 'width' : 'height';
263
- return {
264
- 'data-atom': this.id ?? '',
265
- 'data-kind': `scrollable-thumb-${isHorizontal ? 'x' : 'y'}`,
266
- 'data-direction': orientation,
267
- ...props,
268
- // Handle drag-to-scroll based on orientation
269
- onmousedown: (e) => {
270
- this.handleThumbDrag(e, isHorizontal ? 'x' : 'y');
271
- if ('onmousedown' in props && typeof props.onmousedown === 'function') {
272
- props.onmousedown(e);
273
- }
274
- },
275
- [createAttachmentKey()]: (node) => {
276
- // Set both the unified thumb reference and the specific axis reference
277
- if (isHorizontal) {
278
- this.elements.thumbX = node;
279
- }
280
- else {
281
- this.elements.thumbY = node;
282
- }
283
- }
284
- };
115
+ get parent() {
116
+ return this.#parent;
285
117
  }
286
- /**
287
- * Handles click events on scrollbar tracks for jump-to-position scrolling
288
- * Calculates the click position as a percentage and scrolls to that position
289
- * @param e - The mouse event from the track click
290
- * @param axis - The scroll axis ('x' for horizontal, 'y' for vertical)
291
- */
292
- handleTrackClick(e, axis) {
293
- const container = this.elements.container;
294
- const track = axis === 'x' ? this.elements.trackX : this.elements.trackY;
295
- if (!container || !track)
296
- return;
297
- // Calculate click position relative to track boundaries
298
- const rect = track.getBoundingClientRect();
299
- const clickPosition = axis === 'x' ? e.clientX - rect.left : e.clientY - rect.top;
300
- const trackSize = axis === 'x' ? rect.width : rect.height;
301
- const percentage = clickPosition / trackSize;
302
- // Apply scroll based on calculated percentage
303
- if (axis === 'x') {
304
- const maxScrollX = container.scrollWidth - container.clientWidth;
305
- container.scrollLeft = percentage * maxScrollX;
306
- }
307
- else {
308
- const maxScrollY = container.scrollHeight - container.clientHeight;
309
- container.scrollTop = percentage * maxScrollY;
310
- }
118
+ share() {
119
+ ScrollableBond.set(this);
120
+ return this;
311
121
  }
312
- /**
313
- * Handles mouse drag events on scrollbar thumbs for precise scrolling control
314
- * Sets up mouse event listeners for drag-to-scroll functionality
315
- * @param e - The initial mousedown event on the thumb
316
- * @param axis - The scroll axis ('x' for horizontal, 'y' for vertical)
317
- */
318
- handleThumbDrag(e, axis) {
319
- e.preventDefault();
320
- // Set scrolling state to true
321
- this.state.props.isScrolling = true;
322
- const container = this.elements.container;
323
- const track = axis === 'x' ? this.elements.trackX : this.elements.trackY;
324
- if (!container || !track)
325
- return;
326
- // Capture initial state for drag calculations
327
- const trackRect = track.getBoundingClientRect();
328
- const startPos = axis === 'x' ? e.clientX : e.clientY;
329
- const startScroll = axis === 'x' ? container.scrollLeft : container.scrollTop;
330
- /**
331
- * Handles mouse movement during thumb drag
332
- * Calculates scroll position based on cursor movement relative to track size
333
- */
334
- const onMouseMove = (moveE) => {
335
- const currentPos = axis === 'x' ? moveE.clientX : moveE.clientY;
336
- const delta = currentPos - startPos;
337
- const trackSize = axis === 'x' ? trackRect.width : trackRect.height;
338
- // Apply proportional scrolling based on thumb movement
339
- if (axis === 'x') {
340
- const maxScrollX = container.scrollWidth - container.clientWidth;
341
- const scrollDelta = (delta / trackSize) * maxScrollX;
342
- container.scrollLeft = Math.max(0, Math.min(maxScrollX, startScroll + scrollDelta));
343
- }
344
- else {
345
- const maxScrollY = container.scrollHeight - container.clientHeight;
346
- const scrollDelta = (delta / trackSize) * maxScrollY;
347
- container.scrollTop = Math.max(0, Math.min(maxScrollY, startScroll + scrollDelta));
348
- }
349
- };
350
- /**
351
- * Cleans up mouse event listeners when drag ends
352
- */
353
- const onMouseUp = () => {
354
- // Set scrolling state to true
355
- this.state.props.isScrolling = false;
356
- document.removeEventListener('mousemove', onMouseMove);
357
- document.removeEventListener('mouseup', onMouseUp);
358
- };
359
- // Set up global mouse event listeners for drag interaction
360
- document.addEventListener('mousemove', onMouseMove);
361
- document.addEventListener('mouseup', onMouseUp);
122
+ static get() {
123
+ return getContext(ScrollableBond.CONTEXT_KEY);
124
+ }
125
+ static set(bond) {
126
+ return setContext(ScrollableBond.CONTEXT_KEY, bond);
127
+ }
128
+ // ============================================================================
129
+ // Atom Helpers
130
+ // ============================================================================
131
+ root() {
132
+ return this.atom('root', () => new ScrollableRootAtom(this));
133
+ }
134
+ container() {
135
+ return this.atom('container', () => new ScrollableContainerAtom(this));
136
+ }
137
+ content() {
138
+ return this.atom('content', () => new ScrollableContentAtom(this));
139
+ }
140
+ trackX() {
141
+ return this.atom('trackX', () => new ScrollableTrackAtom(this, 'x'));
142
+ }
143
+ trackY() {
144
+ return this.atom('trackY', () => new ScrollableTrackAtom(this, 'y'));
362
145
  }
146
+ thumbX() {
147
+ return this.atom('thumbX', () => new ScrollableThumbAtom(this, 'x'));
148
+ }
149
+ thumbY() {
150
+ return this.atom('thumbY', () => new ScrollableThumbAtom(this, 'y'));
151
+ }
152
+ // ============================================================================
153
+ // Public API Methods
154
+ // ============================================================================
363
155
  /**
364
- * Scrolls to an absolute position in the scrollable area
365
- * @param x - The horizontal scroll position in pixels
366
- * @param y - The vertical scroll position in pixels
156
+ * Scrolls to an absolute position
367
157
  */
368
158
  scrollTo(x, y) {
369
159
  const container = this.elements.container;
@@ -372,9 +162,7 @@ export class ScrollableBond extends Bond {
372
162
  }
373
163
  }
374
164
  /**
375
- * Scrolls by a relative amount from the current position
376
- * @param x - The horizontal scroll delta in pixels
377
- * @param y - The vertical scroll delta in pixels
165
+ * Scrolls by a relative amount
378
166
  */
379
167
  scrollBy(x, y) {
380
168
  const container = this.elements.container;
@@ -383,9 +171,7 @@ export class ScrollableBond extends Bond {
383
171
  }
384
172
  }
385
173
  /**
386
- * Scrolls an element into view within the scrollable area
387
- * @param element - The element to scroll into view
388
- * @param options - Optional scroll behavior configuration
174
+ * Scrolls an element into view
389
175
  */
390
176
  scrollIntoView(element, options) {
391
177
  const container = this.elements.container;
@@ -395,8 +181,6 @@ export class ScrollableBond extends Bond {
395
181
  }
396
182
  /**
397
183
  * Updates the internal scroll state based on current DOM measurements
398
- * This method should be called when the scroll position or content size changes
399
- * TODO: Implement reactive binding updates for scroll properties
400
184
  */
401
185
  updateScrollState() {
402
186
  const container = this.elements.container;
@@ -409,72 +193,112 @@ export class ScrollableBond extends Bond {
409
193
  this.state.props.clientWidth = container.clientWidth;
410
194
  this.state.props.clientHeight = container.clientHeight;
411
195
  }
412
- /**
413
- * Calculates the horizontal thumb position as a percentage
414
- * @returns The left position of the horizontal thumb (0-100%)
415
- */
196
+ // ============================================================================
197
+ // Scroll Calculations
198
+ // ============================================================================
416
199
  getThumbXPosition() {
417
200
  const { scrollX, clientWidth, scrollWidth } = this.state.props;
418
201
  if (scrollWidth <= clientWidth)
419
202
  return 0;
420
- return (scrollX / (scrollWidth - clientWidth)) * 100;
203
+ const thumbSize = this.getThumbXSize();
204
+ const maxPosition = 100 - thumbSize;
205
+ const scrollPercentage = scrollX / (scrollWidth - clientWidth);
206
+ return scrollPercentage * maxPosition;
421
207
  }
422
- /**
423
- * Calculates the vertical thumb position as a percentage
424
- * @returns The top position of the vertical thumb (0-100%)
425
- */
426
208
  getThumbYPosition() {
427
209
  const { scrollY, clientHeight, scrollHeight } = this.state.props;
428
210
  if (scrollHeight <= clientHeight)
429
211
  return 0;
430
- return (scrollY / (scrollHeight - clientHeight)) * 100;
212
+ const thumbSize = this.getThumbYSize();
213
+ const maxPosition = 100 - thumbSize;
214
+ const scrollPercentage = scrollY / (scrollHeight - clientHeight);
215
+ return scrollPercentage * maxPosition;
431
216
  }
432
- /**
433
- * Calculates the horizontal thumb size as a percentage
434
- * @returns The width of the horizontal thumb (0-100%)
435
- */
436
217
  getThumbXSize() {
437
218
  const { clientWidth, scrollWidth } = this.state.props;
438
219
  if (scrollWidth <= clientWidth)
439
220
  return 100;
440
221
  return (clientWidth / scrollWidth) * 100;
441
222
  }
442
- /**
443
- * Calculates the vertical thumb size as a percentage
444
- * @returns The height of the vertical thumb (0-100%)
445
- */
446
223
  getThumbYSize() {
447
224
  const { clientHeight, scrollHeight } = this.state.props;
448
225
  if (scrollHeight <= clientHeight)
449
226
  return 100;
450
227
  return (clientHeight / scrollHeight) * 100;
451
228
  }
452
- /**
453
- * Determines if horizontal scrolling is possible
454
- * @returns True if content width exceeds visible area width
455
- */
456
229
  get canScrollX() {
457
230
  const { scrollWidth, clientWidth } = this.state.props;
458
231
  return scrollWidth > clientWidth;
459
232
  }
460
- /**
461
- * Determines if vertical scrolling is possible
462
- * @returns True if content height exceeds visible area height
463
- */
464
233
  get canScrollY() {
465
234
  const { scrollHeight, clientHeight } = this.state.props;
466
235
  return scrollHeight > clientHeight;
467
236
  }
237
+ // ============================================================================
238
+ // Event Handlers
239
+ // ============================================================================
240
+ /**
241
+ * Handles click events on scrollbar tracks
242
+ */
243
+ handleTrackClick(e, axis) {
244
+ const container = this.elements.container;
245
+ const track = axis === 'x' ? this.elements.trackX : this.elements.trackY;
246
+ if (!container || !track)
247
+ return;
248
+ const rect = track.getBoundingClientRect();
249
+ const clickPosition = axis === 'x' ? e.clientX - rect.left : e.clientY - rect.top;
250
+ const trackSize = axis === 'x' ? rect.width : rect.height;
251
+ const percentage = clickPosition / trackSize;
252
+ if (axis === 'x') {
253
+ const maxScrollX = container.scrollWidth - container.clientWidth;
254
+ container.scrollLeft = percentage * maxScrollX;
255
+ }
256
+ else {
257
+ const maxScrollY = container.scrollHeight - container.clientHeight;
258
+ container.scrollTop = percentage * maxScrollY;
259
+ }
260
+ }
261
+ /**
262
+ * Handles mouse drag events on scrollbar thumbs
263
+ */
264
+ handleThumbDrag(e, axis) {
265
+ e.preventDefault();
266
+ this.state.props.isScrolling = true;
267
+ const container = this.elements.container;
268
+ const track = axis === 'x' ? this.elements.trackX : this.elements.trackY;
269
+ if (!container || !track)
270
+ return;
271
+ const trackRect = track.getBoundingClientRect();
272
+ const startPos = axis === 'x' ? e.clientX : e.clientY;
273
+ const startScroll = axis === 'x' ? container.scrollLeft : container.scrollTop;
274
+ const onMouseMove = (moveE) => {
275
+ const currentPos = axis === 'x' ? moveE.clientX : moveE.clientY;
276
+ const delta = currentPos - startPos;
277
+ const trackSize = axis === 'x' ? trackRect.width : trackRect.height;
278
+ if (axis === 'x') {
279
+ const maxScrollX = container.scrollWidth - container.clientWidth;
280
+ const scrollDelta = (delta / trackSize) * maxScrollX;
281
+ container.scrollLeft = Math.max(0, Math.min(maxScrollX, startScroll + scrollDelta));
282
+ }
283
+ else {
284
+ const maxScrollY = container.scrollHeight - container.clientHeight;
285
+ const scrollDelta = (delta / trackSize) * maxScrollY;
286
+ container.scrollTop = Math.max(0, Math.min(maxScrollY, startScroll + scrollDelta));
287
+ }
288
+ };
289
+ const onMouseUp = () => {
290
+ this.state.props.isScrolling = false;
291
+ document.removeEventListener('mousemove', onMouseMove);
292
+ document.removeEventListener('mouseup', onMouseUp);
293
+ };
294
+ document.addEventListener('mousemove', onMouseMove);
295
+ document.addEventListener('mouseup', onMouseUp);
296
+ }
468
297
  }
469
298
  /**
470
299
  * Reactive state container for scrollable component properties
471
- * Extends BondState to provide typed access to scroll-related data
472
300
  */
473
301
  export class ScrollableState extends BondState {
474
- /**
475
- * Creates a new scrollable state instance
476
- * @param props - Function that returns the current state properties
477
- */
478
302
  constructor(props) {
479
303
  super(props);
480
304
  }