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

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,31 @@
1
+ import { defaultTwin } from "@spinjs/runtime";
2
+ // src/async-list/async-list.state.ts
3
+ const isSortDescriptor = (value) => {
4
+ if (typeof value !== "object" || value === null) return false;
5
+ const column = Reflect.get(value, "column");
6
+ const direction = Reflect.get(value, "direction");
7
+ return typeof column === "string" && (direction === "ascending" || direction === "descending");
8
+ };
9
+ function itemsOf(raw) {
10
+ if (!Array.isArray(raw)) return [];
11
+ if (raw.length === 1 && raw[0] === "[]") return [];
12
+ return [...raw];
13
+ }
14
+ function initial(args = {}, authored = () => false) {
15
+ const written = (field) => authored(field) || authored(defaultTwin(field)) || args[defaultTwin(field)] !== void 0;
16
+ const sortFn = written("sortFn") ? args.sortFn : void 0;
17
+ return {
18
+ items: itemsOf(args.initialItems),
19
+ cursor: null,
20
+ filterText: typeof args.initialFilterText === "string" ? args.initialFilterText : "",
21
+ sortDescriptor: isSortDescriptor(args.initialSortDescriptor) ? args.initialSortDescriptor : null,
22
+ error: void 0,
23
+ hasSortFn: typeof sortFn === "function",
24
+ dependenciesHash: void 0,
25
+ load: args.load,
26
+ sortFn: args.sortFn
27
+ };
28
+ }
29
+ export { initial, isSortDescriptor, itemsOf };
30
+
31
+ //# sourceMappingURL=async-list.state.js.map
@@ -0,0 +1,16 @@
1
+ import { AsyncListContext } from "./async-list.state.js";
2
+ import { AsyncListEvents } from "./async-list.events.js";
3
+ import { AssignFor, GuardFor } from "@spinjs/runtime/fsm";
4
+ type AsyncListAssign<K extends keyof AsyncListEvents = keyof AsyncListEvents> = AssignFor<AsyncListContext, AsyncListEvents, K>;
5
+ export declare const clearItems: AsyncListAssign;
6
+ export declare const setItems: AsyncListAssign<"SUCCESS">;
7
+ export declare const setCursor: AsyncListAssign<"SUCCESS">;
8
+ export declare const setError: AsyncListAssign<"ERROR">;
9
+ export declare const clearError: AsyncListAssign;
10
+ export declare const setFilterText: AsyncListAssign<"FILTER">;
11
+ export declare const setSortDescriptor: AsyncListAssign<"SORT">;
12
+ export declare const clearCursor: AsyncListAssign;
13
+ export declare const hasSortFn: GuardFor<AsyncListContext, AsyncListEvents>;
14
+ export declare const hasCursor: GuardFor<AsyncListContext, AsyncListEvents>;
15
+ export {};
16
+ //# sourceMappingURL=async-list.transitions.d.ts.map
@@ -0,0 +1,17 @@
1
+ // src/async-list/async-list.transitions.ts
2
+ const clearItems = () => ({ items: [] });
3
+ const setItems = (ctx, event) => {
4
+ const loaded = [...event.items];
5
+ return { items: event.append ? [...ctx.items, ...loaded] : loaded };
6
+ };
7
+ const setCursor = (_ctx, event) => ({ cursor: event.cursor ?? null });
8
+ const setError = (_ctx, event) => ({ error: event.error });
9
+ const clearError = () => ({ error: void 0 });
10
+ const setFilterText = (_ctx, event) => ({ filterText: event.filterText });
11
+ const setSortDescriptor = (_ctx, event) => ({ sortDescriptor: event.sortDescriptor });
12
+ const clearCursor = () => ({ cursor: null });
13
+ const hasSortFn = (ctx, _event) => ctx.hasSortFn;
14
+ const hasCursor = (ctx, _event) => ctx.cursor != null;
15
+ export { clearCursor, clearError, clearItems, hasCursor, hasSortFn, setCursor, setError, setFilterText, setItems, setSortDescriptor };
16
+
17
+ //# sourceMappingURL=async-list.transitions.js.map
@@ -0,0 +1,88 @@
1
+ <script lang="ts">
2
+ import { asyncList } from "../async-list.presentation.js";
3
+
4
+ const machine = asyncList({
5
+ initialItems: [{ "value": "ada", "label": "Ada Lovelace" }, {
6
+ "value": "grace",
7
+ "label": "Grace Hopper",
8
+ }, { "value": "margaret", "label": "Margaret Hamilton" }],
9
+ sortFn: ({ items, descriptor }) => {
10
+ const label = (item) => String(item.label);
11
+ const sorted = [...items].sort((a, b) =>
12
+ label(a).localeCompare(label(b))
13
+ );
14
+ if (descriptor !== undefined && descriptor.direction === "descending") {
15
+ sorted.reverse();
16
+ }
17
+ return { items: sorted };
18
+ },
19
+ });
20
+ </script>
21
+ <div class="w-64 max-w-full" {...machine.getRootProps()}>
22
+ <div class="mb-2 flex flex-wrap items-center justify-between gap-2">
23
+ <div class="flex items-center gap-1">
24
+ <button
25
+ class="secondary s-sm"
26
+ aria-label="Sort ascending"
27
+ {...machine.getSortTriggerProps({ column: "name", direction: "ascending" })}
28
+ ><span aria-hidden="true">A</span><span class="i-lucide-arrow-right text-xs" aria-hidden="true"></span><span aria-hidden="true">Z</span></button>
29
+ <button
30
+ class="secondary s-sm"
31
+ aria-label="Sort descending"
32
+ {...machine.getSortTriggerProps({ column: "name", direction: "descending" })}
33
+ ><span aria-hidden="true">Z</span><span class="i-lucide-arrow-right text-xs" aria-hidden="true"></span><span aria-hidden="true">A</span></button>
34
+ </div>
35
+ <div class="flex items-center gap-2">
36
+ <input
37
+ class="w-36 transition-colors duration-fast ease-decelerate"
38
+ aria-label="Filter"
39
+ {...machine.getFilterInputProps()}
40
+ />
41
+ <button
42
+ class={["secondary s-sm", { "inline-flex": machine.filterText.length > 0, "hidden": machine.filterText.length === 0 }]}
43
+ {...machine.getClearFilterProps()}
44
+ >Clear</button>
45
+ <button
46
+ class={["secondary s-sm", { "text-primary": machine.state === "loading" }]}
47
+ {...machine.getReloadProps()}
48
+ >Reload</button>
49
+ </div>
50
+ </div>
51
+
52
+ <div
53
+ class="relative max-h-60 overflow-y-auto rounded-lg border border-solid border-border bg-surface-raised shadow-sm transition-shadow duration-fast ease-decelerate"
54
+ {...machine.getListProps()}
55
+ >
56
+ <div class="relative p-1">
57
+ <div
58
+ class={["pointer-events-none absolute inset-x-0 top-0 h-1 origin-left scale-x-0 rounded-full bg-primary transition-transform duration-fast ease-decelerate", { "scale-x-100": machine.state === "loading" || machine.state === "sorting" }]}
59
+ {...machine.getProgressProps()}
60
+ ></div>
61
+ <template for={machine.getRows()} as={row} key={row.value}>
62
+ <div
63
+ class="flex items-center gap-2 rounded-md px-2 py-1 text-sm text-text transition-colors duration-fast ease-decelerate"
64
+ {...machine.getItemProps(row)}
65
+ >
66
+ <span class="min-w-0 flex-1 truncate">{row.label}</span>
67
+ <span class="text-xs text-text-muted tabular-nums">{row.value}</span>
68
+ </div>
69
+ </template>
70
+ <span
71
+ class={["px-2 py-6 text-center text-sm text-text-muted transition-colors duration-fast ease-decelerate", { "block": machine.empty, "hidden": !machine.empty }]}
72
+ {...machine.getEmptyProps()}>Nothing loaded yet</span>
73
+ <div class="h-[1px]" {...machine.getSentinelProps()}></div>
74
+ </div>
75
+ </div>
76
+
77
+ <div class="mt-2 flex justify-center">
78
+ <button
79
+ class={["secondary s-sm", { "inline-flex": machine.hasMore, "hidden": !machine.hasMore }]}
80
+ {...machine.getLoadMoreProps()}
81
+ >Load more</button>
82
+ </div>
83
+
84
+ <div
85
+ class={["mt-2 rounded-md border border-solid border-border bg-surface px-3 py-2 text-sm text-text transition-colors duration-fast ease-decelerate", { "block": machine.error !== undefined, "hidden": machine.error === undefined }]}
86
+ {...machine.getErrorProps()}
87
+ >Something went wrong.</div>
88
+ </div>
@@ -0,0 +1,18 @@
1
+ import { EventUnion } from "@spinjs/runtime/fsm";
2
+ export interface AvatarEvents {
3
+ "IMG.LOADED": {};
4
+ "IMG.ERROR": {};
5
+ "IMG.UNMOUNT": {};
6
+ "SRC.CHANGE": {
7
+ src: string;
8
+ };
9
+ "SET_SRC": {
10
+ src: string;
11
+ };
12
+ }
13
+ export type AvatarEvent = EventUnion<AvatarEvents>;
14
+ export type AvatarStatus = "loading" | "error" | "loaded";
15
+ export type AvatarStatusChange = {
16
+ readonly status: AvatarStatus;
17
+ };
18
+ //# sourceMappingURL=avatar.events.d.ts.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { AvatarEvents } from "./avatar.events.js";
2
+ import { AvatarArgs, AvatarContext, AvatarState } from "./avatar.state.js";
3
+ import { Machine } from "@spinjs/runtime/fsm";
4
+ export declare function avatar(args?: AvatarArgs, authored?: (name: string) => boolean): Machine<AvatarContext, AvatarEvents, AvatarState>;
5
+ //# sourceMappingURL=avatar.machine.d.ts.map
@@ -0,0 +1,47 @@
1
+ import { initial } from "./avatar.state.js";
2
+ import { setSrc } from "./avatar.transitions.js";
3
+ import { createMachine } from "@spinjs/runtime/fsm";
4
+ // src/avatar/avatar.machine.ts
5
+ /**
6
+ * Avatar machine: loading/error/loaded over three states.
7
+ *
8
+ * Load and error signals arrive as events from the image node; the
9
+ * machine owns which face shows.
10
+ *
11
+ * Context stays serializable for the scope channel: the src and nothing
12
+ * else. There is no guard: the last signal wins.
13
+ */
14
+ function avatar(args = {}, authored = () => false) {
15
+ return createMachine({
16
+ id: "avatar",
17
+ initial: "loading",
18
+ context: initial(args, authored),
19
+ fields: {
20
+ src: { event: "SRC.CHANGE" },
21
+ label: {},
22
+ fallback: {}
23
+ },
24
+ on: {
25
+ "SRC.CHANGE": {
26
+ target: "loading",
27
+ assign: setSrc
28
+ },
29
+ "IMG.UNMOUNT": { target: "error" },
30
+ "SET_SRC": {
31
+ target: "loading",
32
+ assign: setSrc
33
+ }
34
+ },
35
+ states: {
36
+ loading: { on: {
37
+ "IMG.LOADED": { target: "loaded" },
38
+ "IMG.ERROR": { target: "error" }
39
+ } },
40
+ error: { on: { "IMG.LOADED": { target: "loaded" } } },
41
+ loaded: { on: { "IMG.ERROR": { target: "error" } } }
42
+ }
43
+ });
44
+ }
45
+ export { avatar };
46
+
47
+ //# sourceMappingURL=avatar.machine.js.map
@@ -0,0 +1,75 @@
1
+ import { AvatarEvents, AvatarStatus } from "./avatar.events.js";
2
+ import { AvatarArgs, AvatarContext, AvatarState } from "./avatar.state.js";
3
+ import { ApiOf, ViewFor } from "@spinjs/runtime";
4
+ /** Avatar definition: the DOM contract as data. */
5
+ type ScopeLike = ViewFor<AvatarContext, AvatarEvents, AvatarState>;
6
+ export declare const def: {
7
+ name: string;
8
+ machine: (args: AvatarArgs, authored: (name: string) => boolean) => import("@spinjs/runtime").Machine<AvatarContext, AvatarEvents, AvatarState>;
9
+ start: "loading";
10
+ parts: {
11
+ root: {};
12
+ image: {
13
+ attrs: (scope: ScopeLike) => {
14
+ src: string | undefined;
15
+ alt: string;
16
+ "data-state": string;
17
+ onLoad: () => void;
18
+ onError: () => void;
19
+ "use:observe": {
20
+ attributes: string[];
21
+ onAttributes: (node: Element) => void;
22
+ };
23
+ };
24
+ };
25
+ fallback: {
26
+ attrs: (scope: ScopeLike) => {
27
+ role: string;
28
+ "aria-label": string;
29
+ "data-state": string;
30
+ };
31
+ };
32
+ };
33
+ commands: {
34
+ setSrc: {
35
+ event: ([src]: [src: string]) => {
36
+ type: "SET_SRC";
37
+ src: string;
38
+ };
39
+ };
40
+ setLoaded: {
41
+ event: () => {
42
+ type: "IMG.LOADED";
43
+ };
44
+ };
45
+ setError: {
46
+ event: () => {
47
+ type: "IMG.ERROR";
48
+ };
49
+ };
50
+ };
51
+ readers: {
52
+ loaded: {
53
+ read: (_context: AvatarContext, state: AvatarState) => state is "loaded";
54
+ };
55
+ src: {
56
+ read: (context: AvatarContext) => string;
57
+ };
58
+ status: {
59
+ read: (_context: AvatarContext, state: AvatarState) => AvatarStatus;
60
+ };
61
+ };
62
+ events: {
63
+ "status-change": {
64
+ prop: string;
65
+ watch: (_context: AvatarContext, state: AvatarState) => AvatarState[];
66
+ detail: (watched: readonly unknown[]) => {
67
+ status: AvatarStatus;
68
+ };
69
+ };
70
+ };
71
+ };
72
+ export type AvatarApi = ApiOf<typeof def>;
73
+ export declare const avatar: import("@spinjs/runtime").DefinedComponent<AvatarApi, AvatarArgs>;
74
+ export type { AvatarArgs, AvatarState };
75
+ //# sourceMappingURL=avatar.presentation.d.ts.map
@@ -0,0 +1,68 @@
1
+ import { avatar as avatar$1 } from "./avatar.machine.js";
2
+ import { defineComponent } from "@spinjs/runtime";
3
+ // src/avatar/avatar.presentation.ts
4
+ const def = {
5
+ name: "avatar",
6
+ machine: (args, authored) => avatar$1(args, authored),
7
+ start: "loading",
8
+ parts: {
9
+ root: {},
10
+ image: { attrs: (scope) => {
11
+ const src = scope.context.src;
12
+ const loaded = scope.state === "loaded";
13
+ return {
14
+ src: src.length > 0 ? src : void 0,
15
+ alt: scope.context.label,
16
+ "data-state": loaded ? "visible" : "hidden",
17
+ onLoad: () => {
18
+ scope.send({ type: "IMG.LOADED" });
19
+ },
20
+ onError: () => {
21
+ scope.send({ type: "IMG.ERROR" });
22
+ },
23
+ "use:observe": {
24
+ attributes: ["src"],
25
+ onAttributes: (node) => {
26
+ scope.send({
27
+ type: "SRC.CHANGE",
28
+ src: node.getAttribute("src") ?? ""
29
+ });
30
+ }
31
+ }
32
+ };
33
+ } },
34
+ fallback: { attrs: (scope) => {
35
+ const loaded = scope.state === "loaded";
36
+ return {
37
+ role: "img",
38
+ "aria-label": scope.context.label,
39
+ "data-state": loaded ? "hidden" : "visible"
40
+ };
41
+ } }
42
+ },
43
+ commands: {
44
+ setSrc: { event: ([src]) => ({
45
+ type: "SET_SRC",
46
+ src
47
+ }) },
48
+ setLoaded: { event: () => ({ type: "IMG.LOADED" }) },
49
+ setError: { event: () => ({ type: "IMG.ERROR" }) }
50
+ },
51
+ readers: {
52
+ loaded: { read: (_context, state) => state === "loaded" },
53
+ src: { read: (context) => context.src },
54
+ status: { read: (_context, state) => state === "loaded" || state === "error" ? state : "loading" }
55
+ },
56
+ events: { "status-change": {
57
+ prop: "onStatusChange",
58
+ watch: (_context, state) => [state],
59
+ detail: (watched) => {
60
+ const status = watched[0];
61
+ return { status: status === "loading" || status === "error" || status === "loaded" ? status : "loading" };
62
+ }
63
+ } }
64
+ };
65
+ const avatar = defineComponent(def);
66
+ export { avatar, def };
67
+
68
+ //# sourceMappingURL=avatar.presentation.js.map
@@ -0,0 +1,28 @@
1
+ export type AvatarState = "loading" | "loaded" | "error";
2
+ export interface AvatarContext {
3
+ src: string;
4
+ label: string;
5
+ fallback: string;
6
+ }
7
+ /**
8
+ * The avatar's arguments: the machine's own domain types. The host sets
9
+ * typed values; nothing parses text here.
10
+ *
11
+ * The twin (`defaultSrc`) is resolved by the framework before the factory
12
+ * is called, so the machine only ever sees the live value.
13
+ */
14
+ export interface AvatarArgs {
15
+ src?: string;
16
+ defaultSrc?: string;
17
+ label?: string;
18
+ fallback?: string;
19
+ }
20
+ /**
21
+ * The machine's context, built from its arguments: what the args did not
22
+ * carry takes the machine's own default.
23
+ *
24
+ * The seed twin (`defaultSrc`) is the host's write of the src — the
25
+ * framework resolved it into the args — so it counts as a write too.
26
+ */
27
+ export declare function initial(args: AvatarArgs | undefined, authored: (name: string) => boolean): AvatarContext;
28
+ //# sourceMappingURL=avatar.state.d.ts.map
@@ -0,0 +1,20 @@
1
+ import { defaultTwin } from "@spinjs/runtime";
2
+ // src/avatar/avatar.state.ts
3
+ /**
4
+ * The machine's context, built from its arguments: what the args did not
5
+ * carry takes the machine's own default.
6
+ *
7
+ * The seed twin (`defaultSrc`) is the host's write of the src — the
8
+ * framework resolved it into the args — so it counts as a write too.
9
+ */
10
+ function initial(args = {}, authored) {
11
+ const written = (field) => args[field] !== void 0 || authored(field) || authored(defaultTwin(field)) || args[defaultTwin(field)] !== void 0;
12
+ return {
13
+ src: written("src") ? args.src ?? "" : "",
14
+ label: args.label ?? "",
15
+ fallback: args.fallback ?? ""
16
+ };
17
+ }
18
+ export { initial };
19
+
20
+ //# sourceMappingURL=avatar.state.js.map
@@ -0,0 +1,7 @@
1
+ import { AvatarEvents } from "./avatar.events.js";
2
+ import { AvatarContext } from "./avatar.state.js";
3
+ import { AssignFor } from "@spinjs/runtime/fsm";
4
+ type AvatarAssign<K extends keyof AvatarEvents = keyof AvatarEvents> = AssignFor<AvatarContext, AvatarEvents, K>;
5
+ export declare const setSrc: AvatarAssign<"SRC.CHANGE" | "SET_SRC">;
6
+ export {};
7
+ //# sourceMappingURL=avatar.transitions.d.ts.map
@@ -0,0 +1,5 @@
1
+ // src/avatar/avatar.transitions.ts
2
+ const setSrc = (_ctx, event) => ({ src: event.src });
3
+ export { setSrc };
4
+
5
+ //# sourceMappingURL=avatar.transitions.js.map
@@ -0,0 +1,24 @@
1
+ <script lang="ts">
2
+ import { avatar } from "../avatar.presentation.js";
3
+
4
+ const face1 = avatar({ label: "Jordan Doe", fallback: "JD", src: "https://i.pravatar.cc/80?img=1" });
5
+ const face2 = avatar({ label: "Alex Blair", fallback: "AB", src: "https://i.pravatar.cc/80?img=2" });
6
+ </script>
7
+
8
+
9
+ <div class="flex items-center gap-4">
10
+ <div class="relative">
11
+ <span class="relative grid h-16 w-16 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-lg font-semibold text-text-muted" {...face1.getRootProps()}>
12
+ <img show={face1.src !== "" && face1.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face1.getImageProps()} />
13
+ <span show={!face1.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face1.getFallbackProps()}>JD</span>
14
+ </span>
15
+ <badge class="absolute -top-1 -right-1 grid h-6 w-6 place-items-center" variant="danger">6</badge>
16
+ </div>
17
+ <div class="relative">
18
+ <span class="relative grid h-16 w-16 shrink-0 place-items-center overflow-hidden rounded-lg bg-surface-sunken text-lg font-semibold text-text-muted" {...face2.getRootProps()}>
19
+ <img show={face2.src !== "" && face2.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face2.getImageProps()} />
20
+ <span show={!face2.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face2.getFallbackProps()}>AB</span>
21
+ </span>
22
+ <badge class="absolute -top-1 -right-1 grid h-6 w-6 place-items-center" variant="danger">6</badge>
23
+ </div>
24
+ </div>
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ import { avatar } from "../avatar.presentation.js";
3
+
4
+ const machine = avatar({ label: "Avatar", fallback: "AB", src: "https://i.pravatar.cc/80?img=1" });
5
+ </script>
6
+
7
+
8
+ <div class="mx-auto flex w-full max-w-[20rem] justify-center">
9
+ <div class="relative">
10
+ <span class="relative grid h-16 w-16 shrink-0 place-items-center overflow-hidden rounded-lg bg-surface-sunken text-lg font-semibold text-text-muted" {...machine.getRootProps()}>
11
+ <img show={machine.src !== "" && machine.status !== "error"} class="h-full w-full object-cover" draggable="false" {...machine.getImageProps()} />
12
+ <span show={!machine.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...machine.getFallbackProps()}>AB</span>
13
+ </span>
14
+ <badge class="absolute -top-1 -right-1 grid h-6 w-6 place-items-center" variant="danger">6</badge>
15
+ </div>
16
+ </div>
@@ -0,0 +1,24 @@
1
+ <script lang="ts">
2
+ import { avatar } from "../avatar.presentation.js";
3
+
4
+ const machine = avatar({ label: "Paula Aster", fallback: "PA", src: "https://i.pravatar.cc/80?img=1" });
5
+ </script>
6
+
7
+
8
+ <div class="mx-auto flex w-full max-w-[20rem] justify-center">
9
+ <span
10
+ class="relative grid h-16 w-16 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-lg font-semibold text-text-muted"
11
+ {...machine.getRootProps()}
12
+ >
13
+ <img show={machine.src !== "" && machine.status !== "error"}
14
+ class="h-full w-full object-cover"
15
+ draggable="false"
16
+ {...machine.getImageProps()}
17
+ />
18
+ <span show={!machine.loaded}
19
+ aria-hidden="true"
20
+ class="grid h-full w-full place-items-center"
21
+ {...machine.getFallbackProps()}
22
+ >PA</span>
23
+ </span>
24
+ </div>
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { avatar } from "../avatar.presentation.js";
3
+
4
+ const face1 = avatar({ label: "Jordan Doe", fallback: "JD", src: "https://i.pravatar.cc/80?img=1" });
5
+ const face2 = avatar({ label: "Sam Morgan", fallback: "SM", src: "https://i.pravatar.cc/80?img=2" });
6
+ const face3 = avatar({ label: "Alex Blair", fallback: "AB", src: "https://i.pravatar.cc/80?img=3" });
7
+ const face4 = avatar({ label: "Kai Lee", fallback: "KL", src: "https://i.pravatar.cc/80?img=4" });
8
+ </script>
9
+
10
+
11
+ <div class="flex">
12
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face1.getRootProps()}>
13
+ <img show={face1.src !== "" && face1.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face1.getImageProps()} />
14
+ <span show={!face1.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face1.getFallbackProps()}>JD</span>
15
+ </span>
16
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face2.getRootProps()}>
17
+ <img show={face2.src !== "" && face2.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face2.getImageProps()} />
18
+ <span show={!face2.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face2.getFallbackProps()}>SM</span>
19
+ </span>
20
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face3.getRootProps()}>
21
+ <img show={face3.src !== "" && face3.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face3.getImageProps()} />
22
+ <span show={!face3.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face3.getFallbackProps()}>AB</span>
23
+ </span>
24
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face4.getRootProps()}>
25
+ <img show={face4.src !== "" && face4.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face4.getImageProps()} />
26
+ <span show={!face4.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face4.getFallbackProps()}>KL</span>
27
+ </span>
28
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted border-2 border-solid border-surface">+3</span>
29
+ </div>
@@ -0,0 +1,24 @@
1
+ <script lang="ts">
2
+ import { avatar } from "../avatar.presentation.js";
3
+
4
+ const machine = avatar({ label: "Quinn Reyes", fallback: "QR" });
5
+ </script>
6
+
7
+
8
+ <div class="mx-auto flex w-full max-w-[20rem] justify-center">
9
+ <span
10
+ class="relative grid h-16 w-16 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-lg font-semibold text-text-muted"
11
+ {...machine.getRootProps()}
12
+ >
13
+ <img show={machine.src !== "" && machine.status !== "error"}
14
+ class="h-full w-full object-cover"
15
+ draggable="false"
16
+ {...machine.getImageProps()}
17
+ />
18
+ <span show={!machine.loaded}
19
+ aria-hidden="true"
20
+ class="grid h-full w-full place-items-center"
21
+ {...machine.getFallbackProps()}
22
+ >QR</span>
23
+ </span>
24
+ </div>
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import { avatar } from "../avatar.presentation.js";
3
+
4
+ const face1 = avatar({ label: "Jordan Doe", fallback: "JD", src: "https://i.pravatar.cc/80?img=1" });
5
+ const face2 = avatar({ label: "Sam Morgan", fallback: "SM", src: "https://i.pravatar.cc/80?img=2" });
6
+ const face3 = avatar({ label: "Alex Blair", fallback: "AB", src: "https://i.pravatar.cc/80?img=3" });
7
+ const face4 = avatar({ label: "Kai Lee", fallback: "KL", src: "https://i.pravatar.cc/80?img=4" });
8
+ </script>
9
+
10
+
11
+ <div class="flex">
12
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face1.getRootProps()}>
13
+ <img show={face1.src !== "" && face1.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face1.getImageProps()} />
14
+ <span show={!face1.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face1.getFallbackProps()}>JD</span>
15
+ </span>
16
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face2.getRootProps()}>
17
+ <img show={face2.src !== "" && face2.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face2.getImageProps()} />
18
+ <span show={!face2.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face2.getFallbackProps()}>SM</span>
19
+ </span>
20
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face3.getRootProps()}>
21
+ <img show={face3.src !== "" && face3.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face3.getImageProps()} />
22
+ <span show={!face3.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face3.getFallbackProps()}>AB</span>
23
+ </span>
24
+ <span class="relative grid h-12 w-12 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-sm font-semibold text-text-muted" {...face4.getRootProps()}>
25
+ <img show={face4.src !== "" && face4.status !== "error"} class="h-full w-full object-cover" draggable="false" {...face4.getImageProps()} />
26
+ <span show={!face4.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...face4.getFallbackProps()}>KL</span>
27
+ </span>
28
+ </div>
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import { avatar } from "../avatar.presentation.js";
3
+
4
+ const machine = avatar({ label: "Avatar", fallback: " " });
5
+ </script>
6
+
7
+
8
+ <div class="mx-auto flex w-full max-w-[20rem] justify-center">
9
+ <span class="relative grid h-16 w-16 shrink-0 place-items-center overflow-hidden rounded-full bg-surface-sunken text-text-muted" {...machine.getRootProps()}>
10
+ <img show={machine.src !== "" && machine.status !== "error"} class="h-full w-full object-cover" draggable="false" {...machine.getImageProps()} />
11
+ <span show={!machine.loaded} aria-hidden="true" class="grid h-full w-full place-items-center" {...machine.getFallbackProps()}>
12
+ <span class="i-lucide-user text-lg" aria-hidden="true"></span>
13
+ </span>
14
+ </span>
15
+ </div>