@spinjs/components 0.0.0-stage → 0.1.0-preview.2

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 (590) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -2
  3. package/dist/angle-slider/angle-slider.events.d.ts +30 -0
  4. package/dist/angle-slider/angle-slider.events.js +1 -0
  5. package/dist/angle-slider/angle-slider.machine.d.ts +9 -0
  6. package/dist/angle-slider/angle-slider.machine.js +56 -0
  7. package/dist/angle-slider/angle-slider.presentation.d.ts +194 -0
  8. package/dist/angle-slider/angle-slider.presentation.js +277 -0
  9. package/dist/angle-slider/angle-slider.state.d.ts +38 -0
  10. package/dist/angle-slider/angle-slider.state.js +71 -0
  11. package/dist/angle-slider/angle-slider.transitions.d.ts +11 -0
  12. package/dist/angle-slider/angle-slider.transitions.js +18 -0
  13. package/dist/angle-slider/examples/basic.html +42 -0
  14. package/dist/angle-slider/examples/knob.html +34 -0
  15. package/dist/angle-slider/examples/labeled.html +63 -0
  16. package/dist/angle-slider/examples/marks.html +42 -0
  17. package/dist/async-list/async-list.events.d.ts +23 -0
  18. package/dist/async-list/async-list.events.js +1 -0
  19. package/dist/async-list/async-list.machine.d.ts +5 -0
  20. package/dist/async-list/async-list.machine.js +96 -0
  21. package/dist/async-list/async-list.presentation.d.ts +294 -0
  22. package/dist/async-list/async-list.presentation.js +380 -0
  23. package/dist/async-list/async-list.state.d.ts +27 -0
  24. package/dist/async-list/async-list.state.js +31 -0
  25. package/dist/async-list/async-list.transitions.d.ts +16 -0
  26. package/dist/async-list/async-list.transitions.js +17 -0
  27. package/dist/async-list/examples/basic.html +88 -0
  28. package/dist/avatar/avatar.events.d.ts +18 -0
  29. package/dist/avatar/avatar.events.js +1 -0
  30. package/dist/avatar/avatar.machine.d.ts +5 -0
  31. package/dist/avatar/avatar.machine.js +47 -0
  32. package/dist/avatar/avatar.presentation.d.ts +75 -0
  33. package/dist/avatar/avatar.presentation.js +68 -0
  34. package/dist/avatar/avatar.state.d.ts +28 -0
  35. package/dist/avatar/avatar.state.js +20 -0
  36. package/dist/avatar/avatar.transitions.d.ts +7 -0
  37. package/dist/avatar/avatar.transitions.js +5 -0
  38. package/dist/avatar/examples/badge.html +24 -0
  39. package/dist/avatar/examples/badgeminimal.html +16 -0
  40. package/dist/avatar/examples/basic.html +24 -0
  41. package/dist/avatar/examples/count.html +29 -0
  42. package/dist/avatar/examples/fallback.html +24 -0
  43. package/dist/avatar/examples/group.html +28 -0
  44. package/dist/avatar/examples/icon.html +15 -0
  45. package/dist/avatar/examples/multiples.html +48 -0
  46. package/dist/avatar/examples/pills.html +58 -0
  47. package/dist/avatar/examples/pillsolid.html +21 -0
  48. package/dist/avatar/examples/rounded.html +13 -0
  49. package/dist/avatar/examples/status.html +24 -0
  50. package/dist/avatar/examples/statusminimal.html +16 -0
  51. package/dist/avatar/examples/trusted.html +33 -0
  52. package/dist/avatar/examples/verification.html +18 -0
  53. package/dist/carousel/carousel.events.d.ts +50 -0
  54. package/dist/carousel/carousel.events.js +1 -0
  55. package/dist/carousel/carousel.machine.d.ts +6 -0
  56. package/dist/carousel/carousel.machine.js +70 -0
  57. package/dist/carousel/carousel.presentation.d.ts +379 -0
  58. package/dist/carousel/carousel.presentation.js +554 -0
  59. package/dist/carousel/carousel.state.d.ts +61 -0
  60. package/dist/carousel/carousel.state.js +93 -0
  61. package/dist/carousel/carousel.transitions.d.ts +20 -0
  62. package/dist/carousel/carousel.transitions.js +49 -0
  63. package/dist/carousel/examples/autoplay.html +69 -0
  64. package/dist/carousel/examples/basic.html +56 -0
  65. package/dist/carousel/examples/cards.html +71 -0
  66. package/dist/carousel/examples/hero.html +54 -0
  67. package/dist/carousel/examples/infinite.html +68 -0
  68. package/dist/carousel/examples/minimal.html +47 -0
  69. package/dist/carousel/examples/testimonials.html +78 -0
  70. package/dist/carousel/examples/thumbnails.html +67 -0
  71. package/dist/carousel/examples/vertical.html +67 -0
  72. package/dist/cascade-select/cascade.events.d.ts +42 -0
  73. package/dist/cascade-select/cascade.events.js +1 -0
  74. package/dist/cascade-select/cascade.machine.d.ts +7 -0
  75. package/dist/cascade-select/cascade.machine.js +118 -0
  76. package/dist/cascade-select/cascade.presentation.d.ts +415 -0
  77. package/dist/cascade-select/cascade.presentation.js +771 -0
  78. package/dist/cascade-select/cascade.state.d.ts +58 -0
  79. package/dist/cascade-select/cascade.state.js +97 -0
  80. package/dist/cascade-select/cascade.transitions.d.ts +21 -0
  81. package/dist/cascade-select/cascade.transitions.js +54 -0
  82. package/dist/cascade-select/examples/basic.html +77 -0
  83. package/dist/color-picker/color-picker.events.d.ts +83 -0
  84. package/dist/color-picker/color-picker.events.js +1 -0
  85. package/dist/color-picker/color-picker.machine.d.ts +5 -0
  86. package/dist/color-picker/color-picker.machine.js +130 -0
  87. package/dist/color-picker/color-picker.presentation.d.ts +402 -0
  88. package/dist/color-picker/color-picker.presentation.js +761 -0
  89. package/dist/color-picker/color-picker.state.d.ts +41 -0
  90. package/dist/color-picker/color-picker.state.js +71 -0
  91. package/dist/color-picker/color-picker.transitions.d.ts +21 -0
  92. package/dist/color-picker/color-picker.transitions.js +99 -0
  93. package/dist/color-picker/examples/basic.html +106 -0
  94. package/dist/color-picker/examples/hue-wheel.html +57 -0
  95. package/dist/color-picker/examples/inline.html +61 -0
  96. package/dist/color-picker/examples/with-presets.html +49 -0
  97. package/dist/combobox/combobox.events.d.ts +61 -0
  98. package/dist/combobox/combobox.events.js +1 -0
  99. package/dist/combobox/combobox.machine.d.ts +7 -0
  100. package/dist/combobox/combobox.machine.js +234 -0
  101. package/dist/combobox/combobox.presentation.d.ts +433 -0
  102. package/dist/combobox/combobox.presentation.js +746 -0
  103. package/dist/combobox/combobox.state.d.ts +80 -0
  104. package/dist/combobox/combobox.state.js +71 -0
  105. package/dist/combobox/combobox.transitions.d.ts +28 -0
  106. package/dist/combobox/combobox.transitions.js +91 -0
  107. package/dist/combobox/examples/basic.html +61 -0
  108. package/dist/combobox/examples/directory.html +71 -0
  109. package/dist/combobox/examples/grouping.html +36 -0
  110. package/dist/combobox/examples/multiple.html +37 -0
  111. package/dist/controller.d.ts +52 -0
  112. package/dist/controller.js +90 -0
  113. package/dist/date-input/date-input.events.d.ts +37 -0
  114. package/dist/date-input/date-input.events.js +1 -0
  115. package/dist/date-input/date-input.machine.d.ts +6 -0
  116. package/dist/date-input/date-input.machine.js +61 -0
  117. package/dist/date-input/date-input.presentation.d.ts +133 -0
  118. package/dist/date-input/date-input.presentation.js +328 -0
  119. package/dist/date-input/date-input.state.d.ts +77 -0
  120. package/dist/date-input/date-input.state.js +260 -0
  121. package/dist/date-input/date-input.transitions.d.ts +22 -0
  122. package/dist/date-input/date-input.transitions.js +166 -0
  123. package/dist/date-input/examples/basic.html +18 -0
  124. package/dist/date-picker/date-picker.events.d.ts +42 -0
  125. package/dist/date-picker/date-picker.events.js +1 -0
  126. package/dist/date-picker/date-picker.machine.d.ts +6 -0
  127. package/dist/date-picker/date-picker.machine.js +102 -0
  128. package/dist/date-picker/date-picker.presentation.d.ts +256 -0
  129. package/dist/date-picker/date-picker.presentation.js +549 -0
  130. package/dist/date-picker/date-picker.state.d.ts +66 -0
  131. package/dist/date-picker/date-picker.state.js +177 -0
  132. package/dist/date-picker/date-picker.transitions.d.ts +23 -0
  133. package/dist/date-picker/date-picker.transitions.js +94 -0
  134. package/dist/date-picker/examples/appointment.html +49 -0
  135. package/dist/date-picker/examples/basic.html +6 -0
  136. package/dist/date-picker/examples/multiple.html +6 -0
  137. package/dist/date-picker/examples/pricing.html +6 -0
  138. package/dist/date-picker/examples/range.html +6 -0
  139. package/dist/date-picker/examples/unavailable.html +6 -0
  140. package/dist/editable/editable.events.d.ts +29 -0
  141. package/dist/editable/editable.events.js +1 -0
  142. package/dist/editable/editable.machine.d.ts +5 -0
  143. package/dist/editable/editable.machine.js +82 -0
  144. package/dist/editable/editable.presentation.d.ts +278 -0
  145. package/dist/editable/editable.presentation.js +388 -0
  146. package/dist/editable/editable.state.d.ts +54 -0
  147. package/dist/editable/editable.state.js +32 -0
  148. package/dist/editable/editable.transitions.d.ts +11 -0
  149. package/dist/editable/editable.transitions.js +9 -0
  150. package/dist/editable/examples/basic.html +43 -0
  151. package/dist/editable/examples/doubleclick.html +19 -0
  152. package/dist/editable/examples/inline-edit.html +13 -0
  153. package/dist/editable/examples/profile-field.html +20 -0
  154. package/dist/editable/examples/resize.html +19 -0
  155. package/dist/editable/examples/task-item.html +19 -0
  156. package/dist/editable/examples/title-editor.html +13 -0
  157. package/dist/editable/examples/with-controls.html +20 -0
  158. package/dist/file-upload/examples/avatar.html +34 -0
  159. package/dist/file-upload/examples/basic.html +34 -0
  160. package/dist/file-upload/examples/directory.html +34 -0
  161. package/dist/file-upload/examples/dragdrop.html +31 -0
  162. package/dist/file-upload/examples/files.html +39 -0
  163. package/dist/file-upload/examples/images.html +40 -0
  164. package/dist/file-upload/examples/paste.html +30 -0
  165. package/dist/file-upload/examples/table.html +39 -0
  166. package/dist/file-upload/file-upload.events.d.ts +27 -0
  167. package/dist/file-upload/file-upload.events.js +1 -0
  168. package/dist/file-upload/file-upload.machine.d.ts +6 -0
  169. package/dist/file-upload/file-upload.machine.js +59 -0
  170. package/dist/file-upload/file-upload.presentation.d.ts +182 -0
  171. package/dist/file-upload/file-upload.presentation.js +256 -0
  172. package/dist/file-upload/file-upload.state.d.ts +52 -0
  173. package/dist/file-upload/file-upload.state.js +72 -0
  174. package/dist/file-upload/file-upload.transitions.d.ts +11 -0
  175. package/dist/file-upload/file-upload.transitions.js +32 -0
  176. package/dist/floating-panel/examples/basic.html +42 -0
  177. package/dist/floating-panel/examples/calculator.html +56 -0
  178. package/dist/floating-panel/examples/chat.html +45 -0
  179. package/dist/floating-panel/examples/media-player.html +54 -0
  180. package/dist/floating-panel/examples/notes.html +60 -0
  181. package/dist/floating-panel/examples/settings.html +73 -0
  182. package/dist/floating-panel/examples/task.html +79 -0
  183. package/dist/floating-panel/examples/video-call.html +47 -0
  184. package/dist/floating-panel/floating-panel.events.d.ts +45 -0
  185. package/dist/floating-panel/floating-panel.events.js +1 -0
  186. package/dist/floating-panel/floating-panel.machine.d.ts +6 -0
  187. package/dist/floating-panel/floating-panel.machine.js +70 -0
  188. package/dist/floating-panel/floating-panel.presentation.d.ts +239 -0
  189. package/dist/floating-panel/floating-panel.presentation.js +271 -0
  190. package/dist/floating-panel/floating-panel.state.d.ts +67 -0
  191. package/dist/floating-panel/floating-panel.state.js +76 -0
  192. package/dist/floating-panel/floating-panel.transitions.d.ts +22 -0
  193. package/dist/floating-panel/floating-panel.transitions.js +114 -0
  194. package/dist/hover-card/examples/basic.html +19 -0
  195. package/dist/hover-card/examples/controlled.html +32 -0
  196. package/dist/hover-card/examples/custom-positioning.html +29 -0
  197. package/dist/hover-card/examples/link.html +10 -0
  198. package/dist/hover-card/examples/product.html +33 -0
  199. package/dist/hover-card/examples/user.html +38 -0
  200. package/dist/hover-card/examples/with-arrow.html +29 -0
  201. package/dist/hover-card/hover-card.controller-def.d.ts +50 -0
  202. package/dist/hover-card/hover-card.controller-def.js +134 -0
  203. package/dist/image-cropper/crop-geometry.d.ts +133 -0
  204. package/dist/image-cropper/crop-geometry.js +453 -0
  205. package/dist/image-cropper/examples/basic.html +44 -0
  206. package/dist/image-cropper/examples/circle.html +44 -0
  207. package/dist/image-cropper/image-cropper.events.d.ts +108 -0
  208. package/dist/image-cropper/image-cropper.events.js +1 -0
  209. package/dist/image-cropper/image-cropper.machine.d.ts +5 -0
  210. package/dist/image-cropper/image-cropper.machine.js +231 -0
  211. package/dist/image-cropper/image-cropper.presentation.d.ts +295 -0
  212. package/dist/image-cropper/image-cropper.presentation.js +536 -0
  213. package/dist/image-cropper/image-cropper.state.d.ts +94 -0
  214. package/dist/image-cropper/image-cropper.state.js +134 -0
  215. package/dist/image-cropper/image-cropper.transitions.d.ts +13 -0
  216. package/dist/image-cropper/image-cropper.transitions.js +11 -0
  217. package/dist/index.d.ts +66 -0
  218. package/dist/index.js +279 -0
  219. package/dist/listbox/examples/basic.html +50 -0
  220. package/dist/listbox/examples/controlled.html +54 -0
  221. package/dist/listbox/examples/countries.html +61 -0
  222. package/dist/listbox/examples/grouped.html +58 -0
  223. package/dist/listbox/examples/icons.html +56 -0
  224. package/dist/listbox/examples/multiple.html +56 -0
  225. package/dist/listbox/examples/priority.html +50 -0
  226. package/dist/listbox/examples/settings.html +64 -0
  227. package/dist/listbox/listbox.events.d.ts +42 -0
  228. package/dist/listbox/listbox.events.js +1 -0
  229. package/dist/listbox/listbox.machine.d.ts +6 -0
  230. package/dist/listbox/listbox.machine.js +51 -0
  231. package/dist/listbox/listbox.presentation.d.ts +294 -0
  232. package/dist/listbox/listbox.presentation.js +493 -0
  233. package/dist/listbox/listbox.state.d.ts +55 -0
  234. package/dist/listbox/listbox.state.js +59 -0
  235. package/dist/listbox/listbox.transitions.d.ts +20 -0
  236. package/dist/listbox/listbox.transitions.js +73 -0
  237. package/dist/menu/examples/basic.html +75 -0
  238. package/dist/menu/examples/context.html +74 -0
  239. package/dist/menu/examples/groups.html +88 -0
  240. package/dist/menu/examples/icons.html +80 -0
  241. package/dist/menu/examples/nested.html +83 -0
  242. package/dist/menu/examples/user.html +87 -0
  243. package/dist/menu/menu.events.d.ts +42 -0
  244. package/dist/menu/menu.events.js +1 -0
  245. package/dist/menu/menu.machine.d.ts +6 -0
  246. package/dist/menu/menu.machine.js +148 -0
  247. package/dist/menu/menu.presentation.d.ts +252 -0
  248. package/dist/menu/menu.presentation.js +709 -0
  249. package/dist/menu/menu.state.d.ts +54 -0
  250. package/dist/menu/menu.state.js +55 -0
  251. package/dist/mode-picker/examples/basic.html +17 -0
  252. package/dist/mode-picker/examples/minimal.html +17 -0
  253. package/dist/mode-picker/examples/pill.html +17 -0
  254. package/dist/mode-picker/mode-picker.events.d.ts +20 -0
  255. package/dist/mode-picker/mode-picker.events.js +1 -0
  256. package/dist/mode-picker/mode-picker.machine.d.ts +5 -0
  257. package/dist/mode-picker/mode-picker.machine.js +29 -0
  258. package/dist/mode-picker/mode-picker.presentation.d.ts +129 -0
  259. package/dist/mode-picker/mode-picker.presentation.js +175 -0
  260. package/dist/mode-picker/mode-picker.state.d.ts +27 -0
  261. package/dist/mode-picker/mode-picker.state.js +56 -0
  262. package/dist/mode-picker/mode-picker.transitions.d.ts +11 -0
  263. package/dist/mode-picker/mode-picker.transitions.js +32 -0
  264. package/dist/navigation-menu/examples/basic.html +72 -0
  265. package/dist/navigation-menu/examples/grouped.html +91 -0
  266. package/dist/navigation-menu/examples/minimal.html +49 -0
  267. package/dist/navigation-menu/navigation-menu.events.d.ts +20 -0
  268. package/dist/navigation-menu/navigation-menu.events.js +1 -0
  269. package/dist/navigation-menu/navigation-menu.machine.d.ts +6 -0
  270. package/dist/navigation-menu/navigation-menu.machine.js +51 -0
  271. package/dist/navigation-menu/navigation-menu.presentation.d.ts +132 -0
  272. package/dist/navigation-menu/navigation-menu.presentation.js +151 -0
  273. package/dist/navigation-menu/navigation-menu.state.d.ts +33 -0
  274. package/dist/navigation-menu/navigation-menu.state.js +49 -0
  275. package/dist/navigation-menu/navigation-menu.transitions.d.ts +11 -0
  276. package/dist/navigation-menu/navigation-menu.transitions.js +32 -0
  277. package/dist/number-input/examples/basic.html +49 -0
  278. package/dist/number-input/examples/currency.html +33 -0
  279. package/dist/number-input/examples/decimal.html +33 -0
  280. package/dist/number-input/examples/limits.html +42 -0
  281. package/dist/number-input/examples/percentage.html +38 -0
  282. package/dist/number-input/examples/quantity.html +35 -0
  283. package/dist/number-input/examples/scrubber.html +46 -0
  284. package/dist/number-input/examples/wheel.html +42 -0
  285. package/dist/number-input/number-input.events.d.ts +66 -0
  286. package/dist/number-input/number-input.events.js +1 -0
  287. package/dist/number-input/number-input.machine.d.ts +5 -0
  288. package/dist/number-input/number-input.machine.js +132 -0
  289. package/dist/number-input/number-input.presentation.d.ts +292 -0
  290. package/dist/number-input/number-input.presentation.js +449 -0
  291. package/dist/number-input/number-input.state.d.ts +71 -0
  292. package/dist/number-input/number-input.state.js +86 -0
  293. package/dist/number-input/number-input.transitions.d.ts +17 -0
  294. package/dist/number-input/number-input.transitions.js +40 -0
  295. package/dist/pagination/examples/basic.html +39 -0
  296. package/dist/pagination/examples/dropdown.html +37 -0
  297. package/dist/pagination/examples/info.html +41 -0
  298. package/dist/pagination/examples/jump.html +38 -0
  299. package/dist/pagination/examples/numbered.html +31 -0
  300. package/dist/pagination/examples/pagesize.html +46 -0
  301. package/dist/pagination/pagination.events.d.ts +36 -0
  302. package/dist/pagination/pagination.events.js +1 -0
  303. package/dist/pagination/pagination.machine.d.ts +6 -0
  304. package/dist/pagination/pagination.machine.js +45 -0
  305. package/dist/pagination/pagination.presentation.d.ts +161 -0
  306. package/dist/pagination/pagination.presentation.js +162 -0
  307. package/dist/pagination/pagination.state.d.ts +44 -0
  308. package/dist/pagination/pagination.state.js +115 -0
  309. package/dist/pagination/pagination.transitions.d.ts +17 -0
  310. package/dist/pagination/pagination.transitions.js +30 -0
  311. package/dist/pin-input/examples/basic.html +23 -0
  312. package/dist/pin-input/examples/field.html +25 -0
  313. package/dist/pin-input/examples/masked.html +23 -0
  314. package/dist/pin-input/examples/placeholder.html +24 -0
  315. package/dist/pin-input/examples/twofactor.html +25 -0
  316. package/dist/pin-input/examples/verification.html +32 -0
  317. package/dist/pin-input/pin-input.events.d.ts +48 -0
  318. package/dist/pin-input/pin-input.events.js +1 -0
  319. package/dist/pin-input/pin-input.machine.d.ts +5 -0
  320. package/dist/pin-input/pin-input.machine.js +99 -0
  321. package/dist/pin-input/pin-input.presentation.d.ts +204 -0
  322. package/dist/pin-input/pin-input.presentation.js +392 -0
  323. package/dist/pin-input/pin-input.state.d.ts +67 -0
  324. package/dist/pin-input/pin-input.state.js +63 -0
  325. package/dist/pin-input/pin-input.transitions.d.ts +10 -0
  326. package/dist/pin-input/pin-input.transitions.js +22 -0
  327. package/dist/popover/examples/basic.html +15 -0
  328. package/dist/popover/examples/feedback.html +17 -0
  329. package/dist/popover/examples/notifications.html +21 -0
  330. package/dist/popover/examples/settings.html +39 -0
  331. package/dist/popover/examples/share.html +18 -0
  332. package/dist/popover/examples/user.html +43 -0
  333. package/dist/popover/popover.controller-def.d.ts +39 -0
  334. package/dist/popover/popover.controller-def.js +74 -0
  335. package/dist/rating-group/examples/basic.html +39 -0
  336. package/dist/rating-group/examples/movie.html +45 -0
  337. package/dist/rating-group/examples/product-review.html +52 -0
  338. package/dist/rating-group/examples/service-evaluation.html +31 -0
  339. package/dist/rating-group/rating-group.events.d.ts +38 -0
  340. package/dist/rating-group/rating-group.events.js +1 -0
  341. package/dist/rating-group/rating-group.machine.d.ts +6 -0
  342. package/dist/rating-group/rating-group.machine.js +70 -0
  343. package/dist/rating-group/rating-group.presentation.d.ts +144 -0
  344. package/dist/rating-group/rating-group.presentation.js +208 -0
  345. package/dist/rating-group/rating-group.state.d.ts +36 -0
  346. package/dist/rating-group/rating-group.state.js +41 -0
  347. package/dist/rating-group/rating-group.transitions.d.ts +16 -0
  348. package/dist/rating-group/rating-group.transitions.js +15 -0
  349. package/dist/react/react.d.ts +29 -0
  350. package/dist/react/react.js +8 -0
  351. package/dist/select/examples/basic.html +72 -0
  352. package/dist/select/examples/category.html +67 -0
  353. package/dist/select/examples/country.html +65 -0
  354. package/dist/select/examples/language.html +19 -0
  355. package/dist/select/examples/multiple.html +20 -0
  356. package/dist/select/examples/profile.html +73 -0
  357. package/dist/select/examples/theme.html +11 -0
  358. package/dist/select/examples/with-overlapping-label.html +57 -0
  359. package/dist/select/select.events.d.ts +59 -0
  360. package/dist/select/select.events.js +1 -0
  361. package/dist/select/select.machine.d.ts +6 -0
  362. package/dist/select/select.machine.js +203 -0
  363. package/dist/select/select.presentation.d.ts +358 -0
  364. package/dist/select/select.presentation.js +509 -0
  365. package/dist/select/select.shared.d.ts +8 -0
  366. package/dist/select/select.shared.js +13 -0
  367. package/dist/select/select.state.d.ts +51 -0
  368. package/dist/select/select.state.js +69 -0
  369. package/dist/select/select.transitions.d.ts +15 -0
  370. package/dist/select/select.transitions.js +27 -0
  371. package/dist/shared/keyboard.d.ts +29 -0
  372. package/dist/shared/keyboard.js +13 -0
  373. package/dist/signature-pad/examples/basic.html +29 -0
  374. package/dist/signature-pad/examples/contract.html +36 -0
  375. package/dist/signature-pad/examples/receipt.html +40 -0
  376. package/dist/signature-pad/examples/with-preview.html +40 -0
  377. package/dist/signature-pad/signature-pad.events.d.ts +26 -0
  378. package/dist/signature-pad/signature-pad.events.js +1 -0
  379. package/dist/signature-pad/signature-pad.machine.d.ts +7 -0
  380. package/dist/signature-pad/signature-pad.machine.js +44 -0
  381. package/dist/signature-pad/signature-pad.presentation.d.ts +184 -0
  382. package/dist/signature-pad/signature-pad.presentation.js +236 -0
  383. package/dist/signature-pad/signature-pad.state.d.ts +40 -0
  384. package/dist/signature-pad/signature-pad.state.js +94 -0
  385. package/dist/signature-pad/signature-pad.transitions.d.ts +12 -0
  386. package/dist/signature-pad/signature-pad.transitions.js +40 -0
  387. package/dist/slider/examples/basic.html +32 -0
  388. package/dist/slider/examples/equalizer.html +119 -0
  389. package/dist/slider/examples/fractional.html +7 -0
  390. package/dist/slider/examples/marks.html +42 -0
  391. package/dist/slider/examples/range.html +31 -0
  392. package/dist/slider/examples/stepped.html +7 -0
  393. package/dist/slider/examples/ticks.html +72 -0
  394. package/dist/slider/examples/vertical.html +30 -0
  395. package/dist/slider/slider.events.d.ts +50 -0
  396. package/dist/slider/slider.events.js +1 -0
  397. package/dist/slider/slider.machine.d.ts +5 -0
  398. package/dist/slider/slider.machine.js +86 -0
  399. package/dist/slider/slider.presentation.d.ts +252 -0
  400. package/dist/slider/slider.presentation.js +322 -0
  401. package/dist/slider/slider.state.d.ts +72 -0
  402. package/dist/slider/slider.state.js +91 -0
  403. package/dist/slider/slider.transitions.d.ts +17 -0
  404. package/dist/slider/slider.transitions.js +62 -0
  405. package/dist/solid/solid.d.ts +36 -0
  406. package/dist/solid/solid.js +10 -0
  407. package/dist/spin-element.d.ts +13 -0
  408. package/dist/spin-element.js +38 -0
  409. package/dist/splitter/examples/basic.html +22 -0
  410. package/dist/splitter/examples/nested.html +41 -0
  411. package/dist/splitter/examples/threepanels.html +23 -0
  412. package/dist/splitter/examples/vertical.html +23 -0
  413. package/dist/splitter/splitter.events.d.ts +52 -0
  414. package/dist/splitter/splitter.events.js +1 -0
  415. package/dist/splitter/splitter.machine.d.ts +6 -0
  416. package/dist/splitter/splitter.machine.js +78 -0
  417. package/dist/splitter/splitter.presentation.d.ts +204 -0
  418. package/dist/splitter/splitter.presentation.js +443 -0
  419. package/dist/splitter/splitter.state.d.ts +48 -0
  420. package/dist/splitter/splitter.state.js +225 -0
  421. package/dist/splitter/splitter.transitions.d.ts +20 -0
  422. package/dist/splitter/splitter.transitions.js +132 -0
  423. package/dist/steps/examples/basic.html +57 -0
  424. package/dist/steps/examples/checkmarks.html +32 -0
  425. package/dist/steps/examples/content.html +45 -0
  426. package/dist/steps/examples/descriptions.html +26 -0
  427. package/dist/steps/examples/icons.html +26 -0
  428. package/dist/steps/examples/lines.html +26 -0
  429. package/dist/steps/examples/navigation.html +41 -0
  430. package/dist/steps/examples/onboarding.html +32 -0
  431. package/dist/steps/examples/progress.html +47 -0
  432. package/dist/steps/examples/segmented.html +40 -0
  433. package/dist/steps/examples/vertical.html +58 -0
  434. package/dist/steps/examples/verticallabels.html +27 -0
  435. package/dist/steps/examples/verticalnavigation.html +36 -0
  436. package/dist/steps/steps.events.d.ts +27 -0
  437. package/dist/steps/steps.events.js +1 -0
  438. package/dist/steps/steps.machine.d.ts +6 -0
  439. package/dist/steps/steps.machine.js +36 -0
  440. package/dist/steps/steps.presentation.d.ts +177 -0
  441. package/dist/steps/steps.presentation.js +248 -0
  442. package/dist/steps/steps.state.d.ts +39 -0
  443. package/dist/steps/steps.state.js +47 -0
  444. package/dist/steps/steps.transitions.d.ts +15 -0
  445. package/dist/steps/steps.transitions.js +39 -0
  446. package/dist/tabs/examples/basic.html +41 -0
  447. package/dist/tabs/examples/dashboard.html +116 -0
  448. package/dist/tabs/examples/ghost.html +28 -0
  449. package/dist/tabs/examples/icon-above.html +50 -0
  450. package/dist/tabs/examples/icon-only.html +37 -0
  451. package/dist/tabs/examples/outline-with-icons.html +50 -0
  452. package/dist/tabs/examples/outline.html +29 -0
  453. package/dist/tabs/examples/pills.html +40 -0
  454. package/dist/tabs/examples/project.html +87 -0
  455. package/dist/tabs/examples/settings.html +100 -0
  456. package/dist/tabs/examples/stack-with-icons.html +51 -0
  457. package/dist/tabs/examples/stack.html +28 -0
  458. package/dist/tabs/examples/underline.html +41 -0
  459. package/dist/tabs/examples/vertical-ghost.html +44 -0
  460. package/dist/tabs/examples/vertical-icons.html +44 -0
  461. package/dist/tabs/examples/vertical-underline.html +45 -0
  462. package/dist/tabs/examples/vertical-with-icons.html +53 -0
  463. package/dist/tabs/examples/vertical.html +42 -0
  464. package/dist/tabs/examples/with-badges.html +43 -0
  465. package/dist/tabs/examples/with-icons.html +42 -0
  466. package/dist/tabs/tabs.events.d.ts +19 -0
  467. package/dist/tabs/tabs.events.js +1 -0
  468. package/dist/tabs/tabs.machine.d.ts +5 -0
  469. package/dist/tabs/tabs.machine.js +54 -0
  470. package/dist/tabs/tabs.presentation.d.ts +83 -0
  471. package/dist/tabs/tabs.presentation.js +94 -0
  472. package/dist/tabs/tabs.state.d.ts +61 -0
  473. package/dist/tabs/tabs.state.js +53 -0
  474. package/dist/tabs/tabs.transitions.d.ts +8 -0
  475. package/dist/tabs/tabs.transitions.js +6 -0
  476. package/dist/tags-input/examples/basic.html +43 -0
  477. package/dist/tags-input/examples/with-combobox.html +64 -0
  478. package/dist/tags-input/tags.events.d.ts +77 -0
  479. package/dist/tags-input/tags.events.js +1 -0
  480. package/dist/tags-input/tags.machine.d.ts +6 -0
  481. package/dist/tags-input/tags.machine.js +311 -0
  482. package/dist/tags-input/tags.presentation.d.ts +376 -0
  483. package/dist/tags-input/tags.presentation.js +782 -0
  484. package/dist/tags-input/tags.state.d.ts +109 -0
  485. package/dist/tags-input/tags.state.js +111 -0
  486. package/dist/tags-input/tags.transitions.d.ts +23 -0
  487. package/dist/tags-input/tags.transitions.js +101 -0
  488. package/dist/theme-picker/examples/basic.html +52 -0
  489. package/dist/theme-picker/examples/cards.html +32 -0
  490. package/dist/theme-picker/examples/compact.html +42 -0
  491. package/dist/theme-picker/examples/swatches.html +31 -0
  492. package/dist/theme-picker/theme-picker.events.d.ts +32 -0
  493. package/dist/theme-picker/theme-picker.events.js +1 -0
  494. package/dist/theme-picker/theme-picker.machine.d.ts +5 -0
  495. package/dist/theme-picker/theme-picker.machine.js +65 -0
  496. package/dist/theme-picker/theme-picker.presentation.d.ts +198 -0
  497. package/dist/theme-picker/theme-picker.presentation.js +306 -0
  498. package/dist/theme-picker/theme-picker.state.d.ts +40 -0
  499. package/dist/theme-picker/theme-picker.state.js +108 -0
  500. package/dist/theme-picker/theme-picker.transitions.d.ts +17 -0
  501. package/dist/theme-picker/theme-picker.transitions.js +62 -0
  502. package/dist/timer/examples/basic.html +36 -0
  503. package/dist/timer/examples/card.html +45 -0
  504. package/dist/timer/examples/compact.html +32 -0
  505. package/dist/timer/examples/countdown.html +45 -0
  506. package/dist/timer/examples/labels.html +43 -0
  507. package/dist/timer/examples/large.html +38 -0
  508. package/dist/timer/examples/minimal.html +21 -0
  509. package/dist/timer/examples/pomodoro.html +45 -0
  510. package/dist/timer/examples/workout.html +47 -0
  511. package/dist/timer/timer.events.d.ts +18 -0
  512. package/dist/timer/timer.events.js +1 -0
  513. package/dist/timer/timer.machine.d.ts +5 -0
  514. package/dist/timer/timer.machine.js +50 -0
  515. package/dist/timer/timer.presentation.d.ts +248 -0
  516. package/dist/timer/timer.presentation.js +265 -0
  517. package/dist/timer/timer.state.d.ts +29 -0
  518. package/dist/timer/timer.state.js +64 -0
  519. package/dist/timer/timer.transitions.d.ts +11 -0
  520. package/dist/timer/timer.transitions.js +35 -0
  521. package/dist/toast/examples/action.html +40 -0
  522. package/dist/toast/examples/basic.html +37 -0
  523. package/dist/toast/examples/bottomcenter.html +37 -0
  524. package/dist/toast/examples/bottomleft.html +37 -0
  525. package/dist/toast/examples/bottomright.html +37 -0
  526. package/dist/toast/examples/duration.html +36 -0
  527. package/dist/toast/examples/promise.html +44 -0
  528. package/dist/toast/examples/topcenter.html +37 -0
  529. package/dist/toast/examples/topleft.html +37 -0
  530. package/dist/toast/examples/topright.html +37 -0
  531. package/dist/toast/examples/types.html +47 -0
  532. package/dist/toast/examples/updatable.html +8 -0
  533. package/dist/toast/toast.events.d.ts +60 -0
  534. package/dist/toast/toast.events.js +1 -0
  535. package/dist/toast/toast.machine.d.ts +6 -0
  536. package/dist/toast/toast.machine.js +97 -0
  537. package/dist/toast/toast.presentation.d.ts +284 -0
  538. package/dist/toast/toast.presentation.js +532 -0
  539. package/dist/toast/toast.state.d.ts +65 -0
  540. package/dist/toast/toast.state.js +88 -0
  541. package/dist/toast/toast.transitions.d.ts +24 -0
  542. package/dist/toast/toast.transitions.js +85 -0
  543. package/dist/toggle-group/examples/basic.html +25 -0
  544. package/dist/toggle-group/examples/ghost.html +22 -0
  545. package/dist/toggle-group/examples/icons.html +25 -0
  546. package/dist/toggle-group/examples/multiple.html +14 -0
  547. package/dist/toggle-group/examples/outline.html +25 -0
  548. package/dist/toggle-group/examples/toolbar.html +25 -0
  549. package/dist/toggle-group/toggle-group.events.d.ts +45 -0
  550. package/dist/toggle-group/toggle-group.events.js +1 -0
  551. package/dist/toggle-group/toggle-group.machine.d.ts +5 -0
  552. package/dist/toggle-group/toggle-group.machine.js +65 -0
  553. package/dist/toggle-group/toggle-group.presentation.d.ts +112 -0
  554. package/dist/toggle-group/toggle-group.presentation.js +217 -0
  555. package/dist/toggle-group/toggle-group.state.d.ts +45 -0
  556. package/dist/toggle-group/toggle-group.state.js +67 -0
  557. package/dist/toggle-group/toggle-group.transitions.d.ts +10 -0
  558. package/dist/toggle-group/toggle-group.transitions.js +9 -0
  559. package/dist/tooltip/examples/basic.html +13 -0
  560. package/dist/tooltip/examples/metrics.html +30 -0
  561. package/dist/tooltip/examples/positioning.html +26 -0
  562. package/dist/tooltip/examples/status.html +33 -0
  563. package/dist/tooltip/examples/video.html +22 -0
  564. package/dist/tooltip/examples/with-arrow.html +14 -0
  565. package/dist/tooltip/tooltip.controller-def.d.ts +42 -0
  566. package/dist/tooltip/tooltip.controller-def.js +110 -0
  567. package/dist/tour/examples/basic.html +67 -0
  568. package/dist/tour/tour.events.d.ts +32 -0
  569. package/dist/tour/tour.events.js +1 -0
  570. package/dist/tour/tour.machine.d.ts +5 -0
  571. package/dist/tour/tour.machine.js +77 -0
  572. package/dist/tour/tour.presentation.d.ts +260 -0
  573. package/dist/tour/tour.presentation.js +272 -0
  574. package/dist/tour/tour.state.d.ts +43 -0
  575. package/dist/tour/tour.state.js +60 -0
  576. package/dist/tour/tour.transitions.d.ts +16 -0
  577. package/dist/tour/tour.transitions.js +32 -0
  578. package/dist/tree-view/examples/basic.html +47 -0
  579. package/dist/tree-view/examples/loading.html +57 -0
  580. package/dist/tree-view/tree-view.events.d.ts +67 -0
  581. package/dist/tree-view/tree-view.events.js +1 -0
  582. package/dist/tree-view/tree-view.machine.d.ts +6 -0
  583. package/dist/tree-view/tree-view.machine.js +86 -0
  584. package/dist/tree-view/tree-view.presentation.d.ts +254 -0
  585. package/dist/tree-view/tree-view.presentation.js +515 -0
  586. package/dist/tree-view/tree-view.state.d.ts +54 -0
  587. package/dist/tree-view/tree-view.state.js +61 -0
  588. package/dist/tree-view/tree-view.transitions.d.ts +30 -0
  589. package/dist/tree-view/tree-view.transitions.js +107 -0
  590. package/package.json +245 -4
@@ -0,0 +1,93 @@
1
+ import { defaultTwin, isRecord } from "@spinjs/runtime";
2
+ // src/carousel/carousel.state.ts
3
+ const slidesOf = (raw) => {
4
+ if (!Array.isArray(raw)) return [];
5
+ const slides = [];
6
+ for (const entry of raw) {
7
+ if (!isRecord(entry)) continue;
8
+ const value = entry["value"];
9
+ if (typeof value !== "string") continue;
10
+ const label = entry["label"];
11
+ const content = entry["content"];
12
+ const image = entry["image"];
13
+ const avatar = entry["avatar"];
14
+ const tag = entry["tag"];
15
+ slides.push({
16
+ value,
17
+ label: typeof label === "string" ? label : "",
18
+ content: typeof content === "string" ? content : "",
19
+ ...typeof image === "string" ? { image } : {},
20
+ ...typeof avatar === "string" ? { avatar } : {},
21
+ ...typeof tag === "string" ? { tag } : {}
22
+ });
23
+ }
24
+ return slides;
25
+ };
26
+ const lastPage = (pageCount) => Math.max(0, pageCount - 1);
27
+ const clampIndex = (index, pageCount) => {
28
+ const last = lastPage(pageCount);
29
+ return index < 0 ? 0 : index > last ? last : Math.trunc(index);
30
+ };
31
+ const asInt = (value, fallback) => typeof value === "number" && Number.isFinite(value) ? Math.trunc(value) : fallback;
32
+ const slidesPerPageOf = (raw) => Math.max(1, asInt(raw, 1));
33
+ const slidesPerMoveOf = (raw, perPage) => {
34
+ const parsed = typeof raw === "string" ? Number.parseInt(raw, 10) : NaN;
35
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : perPage;
36
+ };
37
+ function initial(args, authored) {
38
+ const written = (field) => authored(field) || authored(defaultTwin(field)) || args[defaultTwin(field)] !== void 0;
39
+ const slidesPerPage = slidesPerPageOf(args.slidesPerPage);
40
+ const perMove = slidesPerMoveOf(args.slidesPerMove, slidesPerPage);
41
+ const autoSize = args.autoSize === true;
42
+ const slideCount = slidesOf(args.items).length;
43
+ const pageCount = pageCountFor(slideCount, perMove, slidesPerPage, autoSize);
44
+ const last = Math.max(0, pageCount - 1);
45
+ const at = written("index") ? asInt(args.index, 0) : 0;
46
+ return {
47
+ index: Math.min(Math.max(0, at), last),
48
+ pageCount,
49
+ slidesInView: [],
50
+ focused: false,
51
+ focusedId: null,
52
+ dragStatus: "idle",
53
+ loop: written("loop") ? args.loop === true : false,
54
+ perMove,
55
+ slideParams: {
56
+ perMove,
57
+ slidesPerPage,
58
+ autoSize,
59
+ slideCount
60
+ },
61
+ slides: slidesOf(args.items),
62
+ orientation: args.orientation === "vertical" ? "vertical" : "horizontal",
63
+ allowMouseDrag: args.allowMouseDrag === true,
64
+ autoplayDelay: typeof args.autoplayDelay === "number" ? args.autoplayDelay : 4e3,
65
+ dir: typeof args.dir === "string" ? args.dir : "ltr",
66
+ inViewThreshold: typeof args.inViewThreshold === "number" ? args.inViewThreshold : 60,
67
+ autoSize,
68
+ slidesPerPage
69
+ };
70
+ }
71
+ function pageCountFor(slideCount, perMove, slidesPerPage, autoSize) {
72
+ const total = Math.max(0, Math.trunc(slideCount));
73
+ if (autoSize) return total;
74
+ const step = Math.max(1, Math.trunc(perMove));
75
+ const per = Math.max(1, Math.trunc(slidesPerPage));
76
+ let count = 0;
77
+ for (let i = 0; i < total; i += step) {
78
+ if (i + per > total) break;
79
+ count += 1;
80
+ }
81
+ return count;
82
+ }
83
+ function cycleCount(pageCount) {
84
+ return Math.max(1, pageCount);
85
+ }
86
+ const lastPageOf = (pageCount) => Math.max(0, pageCount - 1);
87
+ const movesPer = (ctx) => Math.max(1, Math.trunc(ctx.perMove));
88
+ const pageOf = (ctx, slide) => clampIndex(Math.floor(slide / movesPer(ctx)), ctx.pageCount);
89
+ const restStatus = (ctx) => ctx.focused ? "focus" : "idle";
90
+ const midGesture = (status) => status === "dragging" || status === "settling";
91
+ export { clampIndex, cycleCount, initial, lastPageOf, midGesture, movesPer, pageCountFor, pageOf, restStatus, slidesOf, slidesPerMoveOf, slidesPerPageOf };
92
+
93
+ //# sourceMappingURL=carousel.state.js.map
@@ -0,0 +1,20 @@
1
+ import { CarouselEvents } from "./carousel.events.js";
2
+ import { CarouselContext } from "./carousel.state.js";
3
+ import { AssignFor } from "@spinjs/runtime/fsm";
4
+ type CarouselAssign<K extends keyof CarouselEvents = keyof CarouselEvents> = AssignFor<CarouselContext, CarouselEvents, K>;
5
+ export declare const advance: CarouselAssign<"NEXT" | "AUTOPLAY.TICK">;
6
+ export declare const previous: CarouselAssign<"PREV">;
7
+ export declare const goTo: CarouselAssign<"GO_TO">;
8
+ export declare const pagesSet: CarouselAssign<"PAGES.SET">;
9
+ export declare const slideView: CarouselAssign<"SLIDE.VIEW">;
10
+ export declare const dragStart: CarouselAssign<"DRAG.START">;
11
+ export declare const dragEnd: CarouselAssign<"DRAG.END">;
12
+ export declare const scrollSettle: CarouselAssign<"SCROLL.SETTLE">;
13
+ export declare const viewportFocus: CarouselAssign<"VIEWPORT.FOCUS">;
14
+ export declare const viewportBlur: CarouselAssign<"VIEWPORT.BLUR">;
15
+ export declare const partFocus: CarouselAssign<"PART.FOCUS">;
16
+ export declare const partBlur: CarouselAssign<"PART.BLUR">;
17
+ export declare const autoplayStart: CarouselAssign<"AUTOPLAY.START">;
18
+ export declare const autoplayStop: CarouselAssign<"AUTOPLAY.STOP">;
19
+ export {};
20
+ //# sourceMappingURL=carousel.transitions.d.ts.map
@@ -0,0 +1,49 @@
1
+ import { clampIndex, cycleCount, lastPageOf, midGesture, pageOf, restStatus } from "./carousel.state.js";
2
+ // src/carousel/carousel.transitions.ts
3
+ const next = (ctx) => ({ index: ctx.loop ? (ctx.index + 1) % cycleCount(ctx.pageCount) : Math.min(ctx.index + 1, lastPageOf(ctx.pageCount)) });
4
+ const advance = (ctx) => next(ctx);
5
+ const previous = (ctx) => ({ index: ctx.loop ? (ctx.index - 1 + cycleCount(ctx.pageCount)) % cycleCount(ctx.pageCount) : Math.max(0, ctx.index - 1) });
6
+ const goTo = (ctx, e) => {
7
+ if (typeof e.index !== "number" || !Number.isFinite(e.index)) return {};
8
+ return { index: clampIndex(e.index, ctx.pageCount) };
9
+ };
10
+ const pagesSet = (ctx, e) => {
11
+ const pageCount = Math.max(0, Math.trunc(e.count));
12
+ return {
13
+ pageCount,
14
+ index: clampIndex(ctx.index, pageCount)
15
+ };
16
+ };
17
+ const slideView = (ctx, e) => {
18
+ const inView = e.inView === true;
19
+ const slides = inView ? ctx.slidesInView.includes(e.index) ? ctx.slidesInView : [...ctx.slidesInView, e.index].sort((a, b) => a - b) : ctx.slidesInView.filter((slide) => slide !== e.index);
20
+ if (!inView || ctx.dragStatus !== "settling") return { slidesInView: slides };
21
+ return {
22
+ slidesInView: slides,
23
+ index: pageOf(ctx, e.index),
24
+ dragStatus: restStatus(ctx)
25
+ };
26
+ };
27
+ const dragStart = () => ({ dragStatus: "dragging" });
28
+ const dragEnd = () => ({ dragStatus: "settling" });
29
+ const scrollSettle = (ctx, e) => {
30
+ return {
31
+ index: clampIndex(e.index, ctx.pageCount),
32
+ ...ctx.dragStatus === "settling" ? { dragStatus: restStatus(ctx) } : {}
33
+ };
34
+ };
35
+ const viewportFocus = (ctx) => ({
36
+ focused: true,
37
+ ...midGesture(ctx.dragStatus) ? {} : { dragStatus: "focus" }
38
+ });
39
+ const viewportBlur = (ctx) => ({
40
+ focused: false,
41
+ ...midGesture(ctx.dragStatus) ? {} : { dragStatus: "idle" }
42
+ });
43
+ const partFocus = (_ctx, e) => ({ focusedId: e.id });
44
+ const partBlur = (ctx, e) => ctx.focusedId === e.id ? { focusedId: null } : {};
45
+ const autoplayStart = () => ({});
46
+ const autoplayStop = () => ({});
47
+ export { advance, autoplayStart, autoplayStop, dragEnd, dragStart, goTo, pagesSet, partBlur, partFocus, previous, scrollSettle, slideView, viewportBlur, viewportFocus };
48
+
49
+ //# sourceMappingURL=carousel.transitions.js.map
@@ -0,0 +1,69 @@
1
+ <script lang="ts">
2
+ import { carousel } from "../carousel.presentation.js";
3
+
4
+ const machine = carousel({
5
+ allowMouseDrag: true,
6
+ autoplay: true,
7
+ autoplayDelay: 2000,
8
+ items: [
9
+ { value: "a", tag: "01 · Peak", label: "Alpine", content: "Thin air, steep lines." },
10
+ { value: "b", tag: "02 · Coast", label: "Bay", content: "Salt, fog, gulls." },
11
+ { value: "c", tag: "03 · Mesa", label: "Canyon", content: "Red rock, deep time." },
12
+ ],
13
+ });
14
+ </script>
15
+
16
+ <div
17
+ class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
18
+ {...machine.getRootProps()}>
19
+ <div
20
+ class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
21
+ {...machine.getItemGroupProps()}
22
+ >
23
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
24
+ <div
25
+ class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
26
+ {...machine.getItemProps(row)}
27
+ >
28
+ <div
29
+ class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-6 text-center">
30
+ <span class="font-mono text-xs text-primary">{row.tag}</span>
31
+ <div class="mt-1 text-md font-semibold text-text">{row.label}</div>
32
+ <div class="mt-1 text-xs text-text-muted">{row.content}</div>
33
+ </div>
34
+ </div>
35
+ </template>
36
+ </div>
37
+
38
+ <div
39
+ class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
40
+ {...machine.getAutoplayProgressProps()}>
41
+ <div
42
+ class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
43
+ {...machine.getAutoplayProgressFillProps()}></div>
44
+ </div>
45
+
46
+ <div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
47
+ <button
48
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
49
+ {...machine.getPrevTriggerProps()}>‹</button>
50
+ <div class="flex flex-1 items-center justify-center gap-1"
51
+ {...machine.getIndicatorGroupProps()}>
52
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
53
+ <button
54
+ class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
55
+ {...machine.getIndicatorProps(row)}></button>
56
+ </template>
57
+ </div>
58
+ <button
59
+ class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
60
+ {...machine.getAutoplayTriggerProps()}>▶</button>
61
+ <template for={machine.getProgressRows()} as={row} key={row.value}>
62
+ <span class="text-xs text-text-muted"
63
+ {...machine.getProgressTextProps()}>{row.value}</span>
64
+ </template>
65
+ <button
66
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
67
+ {...machine.getNextTriggerProps()}>›</button>
68
+ </div>
69
+ </div>
@@ -0,0 +1,56 @@
1
+ <script lang="ts">
2
+ import { carousel } from "../carousel.presentation.js";
3
+
4
+ const machine = carousel({
5
+ allowMouseDrag: true,
6
+ items: [
7
+ { value: "a", tag: "01 · Peak", label: "Alpine", content: "Thin air, steep lines." },
8
+ { value: "b", tag: "02 · Coast", label: "Bay", content: "Salt, fog, gulls." },
9
+ { value: "c", tag: "03 · Mesa", label: "Canyon", content: "Red rock, deep time." },
10
+ ],
11
+ });
12
+ </script>
13
+
14
+ <div
15
+ class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
16
+ {...machine.getRootProps()}>
17
+ <div
18
+ class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
19
+ {...machine.getItemGroupProps()}
20
+ >
21
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
22
+ <div
23
+ class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
24
+ {...machine.getItemProps(row)}
25
+ >
26
+ <div
27
+ class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-6 text-center">
28
+ <span class="font-mono text-xs text-primary">{row.tag}</span>
29
+ <div class="mt-1 text-md font-semibold text-text">{row.label}</div>
30
+ <div class="mt-1 text-xs text-text-muted">{row.content}</div>
31
+ </div>
32
+ </div>
33
+ </template>
34
+ </div>
35
+
36
+ <div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
37
+ <button
38
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
39
+ {...machine.getPrevTriggerProps()}>‹</button>
40
+ <div class="flex flex-1 items-center justify-center gap-1"
41
+ {...machine.getIndicatorGroupProps()}>
42
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
43
+ <button
44
+ class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
45
+ {...machine.getIndicatorProps(row)}></button>
46
+ </template>
47
+ </div>
48
+ <template for={machine.getProgressRows()} as={row} key={row.value}>
49
+ <span class="text-xs text-text-muted"
50
+ {...machine.getProgressTextProps()}>{row.value}</span>
51
+ </template>
52
+ <button
53
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
54
+ {...machine.getNextTriggerProps()}>›</button>
55
+ </div>
56
+ </div>
@@ -0,0 +1,71 @@
1
+ <script lang="ts">
2
+ import { carousel } from "../carousel.presentation.js";
3
+
4
+ const machine = carousel({
5
+ allowMouseDrag: true,
6
+ slidesPerPage: 2,
7
+ items: [
8
+ { value: "mtn", tag: "Elevation", label: "Mountain Adventure", content: "Thin air, steep lines." },
9
+ { value: "ocean", tag: "Pacific", label: "Ocean Views", content: "Salt, fog, gulls." },
10
+ { value: "forest", tag: "Redwoods", label: "Forest Escape", content: "Tall trees, soft light." },
11
+ { value: "urban", tag: "Downtown", label: "Urban Explorer", content: "Vibrant city culture." },
12
+ ],
13
+ });
14
+ </script>
15
+
16
+ <div
17
+ class="relative mx-auto w-full max-w-sm rounded-lg border border-solid border-border bg-surface-raised p-4"
18
+ {...machine.getRootProps()}>
19
+ <div
20
+ class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
21
+ {...machine.getItemGroupProps()}
22
+ >
23
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
24
+ <div
25
+ class={["w-[calc((100%_-_0.5rem)/2)] shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
26
+ {...machine.getItemProps(row)}
27
+ >
28
+ <div
29
+ class="flex min-h-[8rem] flex-col justify-between rounded-md border border-solid border-border bg-surface p-4">
30
+ <span class="font-mono text-xs text-primary">{row.tag}</span>
31
+ <div class="mt-3">
32
+ <div class="text-sm font-medium text-text">{row.label}</div>
33
+ <div class="mt-1 text-xs text-text-muted">{row.content}</div>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </template>
38
+ </div>
39
+
40
+ <div
41
+ class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
42
+ {...machine.getAutoplayProgressProps()}>
43
+ <div
44
+ class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
45
+ {...machine.getAutoplayProgressFillProps()}></div>
46
+ </div>
47
+
48
+ <div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
49
+ <button
50
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
51
+ {...machine.getPrevTriggerProps()}>‹</button>
52
+ <div class="flex flex-1 items-center justify-center gap-1"
53
+ {...machine.getIndicatorGroupProps()}>
54
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
55
+ <button
56
+ class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
57
+ {...machine.getIndicatorProps(row)}></button>
58
+ </template>
59
+ </div>
60
+ <button
61
+ class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
62
+ {...machine.getAutoplayTriggerProps()}>▶</button>
63
+ <template for={machine.getProgressRows()} as={row} key={row.value}>
64
+ <span class="text-xs text-text-muted"
65
+ {...machine.getProgressTextProps()}>{row.value}</span>
66
+ </template>
67
+ <button
68
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
69
+ {...machine.getNextTriggerProps()}>›</button>
70
+ </div>
71
+ </div>
@@ -0,0 +1,54 @@
1
+ <script lang="ts">
2
+ import { carousel } from "../carousel.presentation.js";
3
+
4
+ const machine = carousel({
5
+ allowMouseDrag: true,
6
+ items: [
7
+ { value: "h1", tag: "Featured Release", label: "Discover Amazing Places", content: "Explore the world's most beautiful destinations." },
8
+ { value: "h2", tag: "Expedition", label: "Adventure Awaits", content: "Peaks, trails, and thin air." },
9
+ { value: "h3", tag: "Deep Time", label: "Journey Beyond", content: "Red rock canyons and quiet horizons." },
10
+ ],
11
+ });
12
+ </script>
13
+
14
+ <div
15
+ class="relative mx-auto w-full max-w-sm rounded-lg border border-solid border-border bg-surface-raised p-4"
16
+ {...machine.getRootProps()}>
17
+ <div
18
+ class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
19
+ {...machine.getItemGroupProps()}
20
+ >
21
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
22
+ <div
23
+ class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
24
+ {...machine.getItemProps(row)}
25
+ >
26
+ <div
27
+ class="relative flex min-h-[10rem] flex-col justify-between rounded-md border border-solid border-border bg-surface p-6">
28
+ <span class="w-fit rounded-full bg-surface-sunken px-2 py-1 font-mono text-xs text-primary">{row.tag}</span>
29
+ <div class="mt-4">
30
+ <div class="text-lg font-semibold text-text">{row.label}</div>
31
+ <div class="mt-1 text-sm text-text-muted">{row.content}</div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </template>
36
+ </div>
37
+
38
+ <div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
39
+ <button
40
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
41
+ {...machine.getPrevTriggerProps()}>‹</button>
42
+ <div class="flex flex-1 items-center justify-center gap-1"
43
+ {...machine.getIndicatorGroupProps()}>
44
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
45
+ <button
46
+ class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
47
+ {...machine.getIndicatorProps(row)}></button>
48
+ </template>
49
+ </div>
50
+ <button
51
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
52
+ {...machine.getNextTriggerProps()}>›</button>
53
+ </div>
54
+ </div>
@@ -0,0 +1,68 @@
1
+ <script lang="ts">
2
+ import { carousel } from "../carousel.presentation.js";
3
+
4
+ const machine = carousel({
5
+ allowMouseDrag: true,
6
+ items: [
7
+ { "value": "apple", "label": "Apple", "content": "Fresh picks." },
8
+ { "value": "figma", "label": "Figma", "content": "Design together." },
9
+ { "value": "linear", "label": "Linear", "content": "Ship faster." },
10
+ { "value": "slack", "label": "Slack", "content": "Talk it over." },
11
+ ],
12
+ loop: true,
13
+ });
14
+ </script>
15
+
16
+ <div
17
+ class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
18
+ {...machine.getRootProps()}>
19
+ <div
20
+ class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
21
+ {...machine.getItemGroupProps()}
22
+ >
23
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
24
+ <div
25
+ class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
26
+ {...machine.getItemProps(row)}
27
+ >
28
+ <div
29
+ class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-4 text-center">
30
+ <div class="text-sm font-medium text-text">{row.label}</div>
31
+ <div class="text-xs text-text-muted mt-1">{row.content}</div>
32
+ </div>
33
+ </div>
34
+ </template>
35
+ </div>
36
+
37
+ <div
38
+ class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
39
+ {...machine.getAutoplayProgressProps()}>
40
+ <div
41
+ class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
42
+ {...machine.getAutoplayProgressFillProps()}></div>
43
+ </div>
44
+
45
+ <div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
46
+ <button
47
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
48
+ {...machine.getPrevTriggerProps()}>‹</button>
49
+ <div class="flex flex-1 items-center justify-center gap-1"
50
+ {...machine.getIndicatorGroupProps()}>
51
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
52
+ <button
53
+ class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
54
+ {...machine.getIndicatorProps(row)}></button>
55
+ </template>
56
+ </div>
57
+ <button
58
+ class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
59
+ {...machine.getAutoplayTriggerProps()}>▶</button>
60
+ <template for={machine.getProgressRows()} as={row} key={row.value}>
61
+ <span class="text-xs text-text-muted"
62
+ {...machine.getProgressTextProps()}>{row.value}</span>
63
+ </template>
64
+ <button
65
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
66
+ {...machine.getNextTriggerProps()}>›</button>
67
+ </div>
68
+ </div>
@@ -0,0 +1,47 @@
1
+ <script lang="ts">
2
+ import { carousel } from "../carousel.presentation.js";
3
+
4
+ const machine = carousel({
5
+ allowMouseDrag: true,
6
+ items: [{ "value": "one", "label": "One", "content": "First." }, {
7
+ "value": "two",
8
+ "label": "Two",
9
+ "content": "Second.",
10
+ }],
11
+ });
12
+ </script>
13
+
14
+ <div
15
+ class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
16
+ {...machine.getRootProps()}>
17
+ <div
18
+ class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
19
+ {...machine.getItemGroupProps()}
20
+ >
21
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
22
+ <div
23
+ class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
24
+ {...machine.getItemProps(row)}
25
+ >
26
+ <div
27
+ class="flex min-h-[6rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-4 text-center">
28
+ <div class="text-sm font-medium text-text">{row.label}</div>
29
+ <div class="text-xs text-text-muted mt-1">{row.content}</div>
30
+ </div>
31
+ </div>
32
+ </template>
33
+ </div>
34
+
35
+ <div class="flex items-center justify-between gap-2 pt-3" {...machine.getControlProps()}>
36
+ <button
37
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
38
+ {...machine.getPrevTriggerProps()}>‹</button>
39
+ <template for={machine.getProgressRows()} as={row} key={row.value}>
40
+ <span class="text-xs text-text-muted"
41
+ {...machine.getProgressTextProps()}>{row.value}</span>
42
+ </template>
43
+ <button
44
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
45
+ {...machine.getNextTriggerProps()}>›</button>
46
+ </div>
47
+ </div>
@@ -0,0 +1,78 @@
1
+ <script lang="ts">
2
+ import { carousel } from "../carousel.presentation.js";
3
+
4
+ const machine = carousel({
5
+ allowMouseDrag: true,
6
+ items: [
7
+ { value: "sarah", initials: "SJ", role: "Marketing Director", label: "Sarah Johnson", content: "Ships on time with zero visual drift across themes." },
8
+ { value: "michael", initials: "MC", role: "Engineering Lead", label: "Michael Chen", content: "Deterministic state machines and zero flaky selectors." },
9
+ { value: "emily", initials: "ER", role: "Design Systems", label: "Emily Rodriguez", content: "Every token lands cleanly without one-off overrides." },
10
+ ],
11
+ });
12
+ </script>
13
+
14
+ <div
15
+ class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
16
+ {...machine.getRootProps()}>
17
+ <div
18
+ class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
19
+ {...machine.getItemGroupProps()}
20
+ >
21
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
22
+ <div
23
+ class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
24
+ {...machine.getItemProps(row)}
25
+ >
26
+ <div
27
+ class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-6 text-center">
28
+ <span class="i-lucide-quote icon-lg text-primary"
29
+ aria-hidden="true"></span>
30
+ <p class="text-sm italic text-text">"{row.content}"</p>
31
+ <div class="mt-3 flex items-center justify-center gap-1"
32
+ aria-hidden="true">
33
+ <span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span>
34
+ </div>
35
+ <div class="mt-3 flex items-center gap-2">
36
+ <span class="grid h-10 w-10 shrink-0 place-items-center rounded-full bg-primary text-xs font-semibold text-on-primary">{row.initials}</span>
37
+ <div class="text-left">
38
+ <div class="text-sm font-medium text-text">{row.label}</div>
39
+ <div class="text-xs text-text-muted">{row.role}</div>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ </template>
45
+ </div>
46
+
47
+ <div
48
+ class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
49
+ {...machine.getAutoplayProgressProps()}>
50
+ <div
51
+ class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
52
+ {...machine.getAutoplayProgressFillProps()}></div>
53
+ </div>
54
+
55
+ <div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
56
+ <button
57
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
58
+ {...machine.getPrevTriggerProps()}>‹</button>
59
+ <div class="flex flex-1 items-center justify-center gap-1"
60
+ {...machine.getIndicatorGroupProps()}>
61
+ <template for={machine.getItemIndexes()} as={row} key={row.value}>
62
+ <button
63
+ class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
64
+ {...machine.getIndicatorProps(row)}></button>
65
+ </template>
66
+ </div>
67
+ <button
68
+ class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
69
+ {...machine.getAutoplayTriggerProps()}>▶</button>
70
+ <template for={machine.getProgressRows()} as={row} key={row.value}>
71
+ <span class="text-xs text-text-muted"
72
+ {...machine.getProgressTextProps()}>{row.value}</span>
73
+ </template>
74
+ <button
75
+ class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
76
+ {...machine.getNextTriggerProps()}>›</button>
77
+ </div>
78
+ </div>