@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,43 @@
1
+ <script lang="ts">
2
+ import { tabs } from "../tabs.presentation.js";
3
+
4
+ const machine = tabs({
5
+ items: [
6
+ {
7
+ value: "tasks",
8
+ label: "Tasks",
9
+ content: "Eight open, two blocking Deploy #4821.",
10
+ badge: "8",
11
+ },
12
+ {
13
+ value: "messages",
14
+ label: "Messages",
15
+ content: "Tomas asked about the canary graph.",
16
+ badge: "5",
17
+ },
18
+ {
19
+ value: "alerts",
20
+ label: "Alerts",
21
+ content: "Two firing, both on checkout-api.",
22
+ badge: "2",
23
+ },
24
+ ],
25
+ defaultValue: "tasks",
26
+ });
27
+ </script>
28
+
29
+ <div class="mx-auto flex w-full max-w-md flex-col items-center"
30
+ {...machine.getRootProps()}>
31
+ <div class="mb-4 flex gap-2" {...machine.getListProps()}>
32
+ <template for={machine.items} as={row} key={row.value}>
33
+ <button
34
+ class="bare flex flex-col items-center gap-1 rounded-md px-4 py-3 text-sm font-medium transition-all aria-[selected=true]:bg-surface aria-[selected=true]:text-text aria-[selected=true]:shadow-sm aria-[selected=false]:text-text-muted"
35
+ {...machine.getTriggerProps(row)}
36
+ ><span class="bare grid h-6 w-6 place-items-center rounded-full text-xs font-semibold aria-[selected=true]:bg-selected aria-[selected=true]:text-on-selected aria-[selected=false]:bg-surface-sunken aria-[selected=false]:text-text-muted" aria-hidden="true">{row.badge}</span><span>{row.label}</span></button>
37
+ </template>
38
+ </div>
39
+ <template for={machine.items} as={row} key={row.value}>
40
+ <p class=" text-center text-sm text-text-muted"
41
+ {...machine.getContentProps(row)}>{row.content}</p>
42
+ </template>
43
+ </div>
@@ -0,0 +1,42 @@
1
+ <script lang="ts">
2
+ import { tabs } from "../tabs.presentation.js";
3
+
4
+ const machine = tabs({
5
+ items: [
6
+ {
7
+ value: "overview",
8
+ label: "Overview",
9
+ content: "Fleet health at a glance.",
10
+ },
11
+ {
12
+ value: "projects",
13
+ label: "Projects",
14
+ content: "checkout-api and its preview deploys.",
15
+ },
16
+ {
17
+ value: "packages",
18
+ label: "Packages",
19
+ content: "Canary channel and pinned versions.",
20
+ },
21
+ ],
22
+ defaultValue: "overview",
23
+ });
24
+ </script>
25
+
26
+ <div class="mx-auto flex w-full max-w-md flex-col items-center"
27
+ {...machine.getRootProps()}>
28
+ <div
29
+ class="relative mb-4 flex w-fit gap-8 border-b border-solid border-border"
30
+ {...machine.getListProps()}>
31
+ <template for={machine.items} as={row} key={row.value}>
32
+ <button
33
+ class="bare flex items-center gap-2 border-b-2 border-solid px-1 py-2 text-sm font-medium transition-colors aria-[selected=true]:border-primary aria-[selected=true]:text-text aria-[selected=false]:border-transparent aria-[selected=false]:text-text-muted"
34
+ {...machine.getTriggerProps(row)}
35
+ ><span class="i-lucide-house text-sm" aria-hidden="true" show={row.value === "overview"}></span><span class="i-lucide-folder-open text-sm" aria-hidden="true" show={row.value === "projects"}></span><span class="i-lucide-package text-sm" aria-hidden="true" show={row.value === "packages"}></span><span>{row.label}</span></button>
36
+ </template>
37
+ </div>
38
+ <template for={machine.items} as={row} key={row.value}>
39
+ <p class=" text-center text-sm text-text-muted"
40
+ {...machine.getContentProps(row)}>{row.content}</p>
41
+ </template>
42
+ </div>
@@ -0,0 +1,19 @@
1
+ import { EventUnion } from "@spinjs/runtime/fsm";
2
+ /**
3
+ * The tabs' events, as a MAP: the contract with the outside. The spec's
4
+ * `on` map is typed over it, so a transition's KEY narrows the event it
5
+ * receives — an assign reads its payload with no guard and no cast.
6
+ */
7
+ export interface TabsEvents {
8
+ "VALUE.SET": {
9
+ value: string;
10
+ };
11
+ "TAB.SELECT": {
12
+ value: string;
13
+ };
14
+ }
15
+ export type TabsEvent = EventUnion<TabsEvents>;
16
+ export type TabsValueChange = {
17
+ readonly value: string;
18
+ };
19
+ //# sourceMappingURL=tabs.events.d.ts.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { TabsArgs, TabsContext, TabsState } from "./tabs.state.js";
2
+ import { TabsEvents } from "./tabs.events.js";
3
+ import { Machine } from "@spinjs/runtime/fsm";
4
+ export declare function tabs(args: TabsArgs | undefined, authored: (name: string) => boolean): Machine<TabsContext, TabsEvents, TabsState>;
5
+ //# sourceMappingURL=tabs.machine.d.ts.map
@@ -0,0 +1,54 @@
1
+ import { initial, parseItems } from "./tabs.state.js";
2
+ import { selectTab, setValue } from "./tabs.transitions.js";
3
+ import { createMachine } from "@spinjs/runtime/fsm";
4
+ // src/tabs/tabs.machine.ts
5
+ /** Tabs machine: selection is component state, not platform state. */
6
+ function tabs(args = {}, authored) {
7
+ return createMachine({
8
+ id: "tabs",
9
+ initial: "idle",
10
+ context: initial(args, authored),
11
+ /**
12
+ * The machine's contract with its hosts: the context fields a host may
13
+ * write, and the event each write carries. A field with an event is
14
+ * REPORTED — the machine decides, and the change reaches the host; a
15
+ * field without one is SILENT.
16
+ *
17
+ * The rows are the machine's own configuration: they never change
18
+ * while the tabs live, so the host may not write them.
19
+ */
20
+ fields: {
21
+ value: { event: "VALUE.SET" },
22
+ items: { parse: parseItems },
23
+ activationMode: {},
24
+ loopFocus: {},
25
+ deselectable: {},
26
+ composite: {}
27
+ },
28
+ states: {
29
+ idle: { on: {
30
+ "VALUE.SET": {
31
+ target: "idle",
32
+ assign: setValue
33
+ },
34
+ "TAB.SELECT": {
35
+ target: "idle",
36
+ assign: selectTab
37
+ }
38
+ } },
39
+ focused: { on: {
40
+ "VALUE.SET": {
41
+ target: "focused",
42
+ assign: setValue
43
+ },
44
+ "TAB.SELECT": {
45
+ target: "focused",
46
+ assign: selectTab
47
+ }
48
+ } }
49
+ }
50
+ });
51
+ }
52
+ export { tabs };
53
+
54
+ //# sourceMappingURL=tabs.machine.js.map
@@ -0,0 +1,83 @@
1
+ import { TabsArgs, TabsContext, TabsItem, TabsState } from "./tabs.state.js";
2
+ import { TabsEvents } from "./tabs.events.js";
3
+ import { ApiOf, ViewFor } from "@spinjs/runtime";
4
+ export declare const def: {
5
+ name: string;
6
+ machine: (args: TabsArgs, authored: (name: string) => boolean) => import("@spinjs/runtime").Machine<TabsContext, TabsEvents, TabsState>;
7
+ start: "idle";
8
+ parts: {
9
+ root: {};
10
+ list: {
11
+ attrs: (scope: ViewFor<TabsContext, TabsEvents, TabsState>) => {
12
+ role: string;
13
+ };
14
+ };
15
+ trigger: {
16
+ attrs: (scope: ViewFor<TabsContext, TabsEvents, TabsState> & {
17
+ readonly slot: TabsItem;
18
+ }) => {
19
+ tabindex: number;
20
+ onClick: () => void;
21
+ onKeydown: (event: KeyboardEvent) => void;
22
+ id: string;
23
+ type: string;
24
+ role: string;
25
+ };
26
+ };
27
+ content: {
28
+ attrs: (scope: ViewFor<TabsContext, TabsEvents, TabsState> & {
29
+ readonly slot: TabsItem;
30
+ }) => {
31
+ hidden: boolean | undefined;
32
+ id: string;
33
+ role: string;
34
+ };
35
+ };
36
+ };
37
+ commands: {
38
+ select: {
39
+ event: ([value]: [value: string]) => {
40
+ type: "TAB.SELECT";
41
+ value: string;
42
+ };
43
+ };
44
+ };
45
+ readers: {
46
+ value: {
47
+ read: (context: TabsContext) => string;
48
+ };
49
+ items: {
50
+ read: (context: TabsContext) => readonly TabsItem[];
51
+ };
52
+ };
53
+ events: {
54
+ "value-change": {
55
+ prop: string;
56
+ watch: (context: TabsContext) => string[];
57
+ detail: (watched: readonly [string]) => {
58
+ value: string;
59
+ };
60
+ };
61
+ };
62
+ settled: ({ event, focus }: {
63
+ readonly event: import("@spinjs/runtime").AnyEvent;
64
+ readonly before: {
65
+ readonly context: TabsContext;
66
+ readonly state: TabsState;
67
+ };
68
+ readonly after: {
69
+ readonly context: TabsContext;
70
+ readonly state: TabsState;
71
+ };
72
+ readonly props: Record<string, unknown>;
73
+ readonly root: () => Element;
74
+ readonly id: (part: string, slot?: unknown) => string;
75
+ readonly focus: (part: string, slot?: unknown) => void;
76
+ readonly measure: (part: string, slot?: unknown) => DOMRect | null;
77
+ readonly send: (event: import("@spinjs/runtime").AnyEvent) => void;
78
+ }) => void;
79
+ };
80
+ export type TabsApi = ApiOf<typeof def>;
81
+ export declare const tabs: import("@spinjs/runtime").DefinedComponent<TabsApi, TabsArgs>;
82
+ export type { TabsArgs, TabsItem, TabsState };
83
+ //# sourceMappingURL=tabs.presentation.d.ts.map
@@ -0,0 +1,94 @@
1
+ import { ROVING_KEYS } from "../shared/keyboard.js";
2
+ import { tabs as tabs$1 } from "./tabs.machine.js";
3
+ import { ariaControls, ariaLabelledBy, ariaOrientation, defineComponent, optionRow } from "@spinjs/runtime";
4
+ // src/tabs/tabs.presentation.ts
5
+ const enabledValues = (context) => context.items.map((item) => item.value);
6
+ const neighbor = (context, value, direction) => {
7
+ const items = context.items;
8
+ const idx = items.findIndex((item) => item.value === value);
9
+ if (idx === -1) return null;
10
+ const next = idx + direction;
11
+ if (next < 0 || next >= items.length) return context.loopFocus ? items[(next + items.length) % items.length]?.value ?? null : null;
12
+ return items[next]?.value ?? null;
13
+ };
14
+ const def = {
15
+ name: "tabs",
16
+ machine: (args, authored) => tabs$1(args, authored),
17
+ start: "idle",
18
+ parts: {
19
+ root: {},
20
+ list: { attrs: (scope) => ({
21
+ role: "tablist",
22
+ ...ariaOrientation(scope.context.orientation === "vertical" ? "vertical" : void 0)
23
+ }) },
24
+ trigger: { attrs: (scope) => {
25
+ const row = scope.slot;
26
+ const isSelected = scope.context.value === row.value;
27
+ return {
28
+ id: scope.id("trigger", row.value),
29
+ type: "button",
30
+ role: "tab",
31
+ ...optionRow({ selected: isSelected ? "true" : "false" }),
32
+ ...ariaControls(scope, {
33
+ part: "content",
34
+ slot: row.value
35
+ }),
36
+ tabindex: isSelected ? 0 : -1,
37
+ onClick: () => {
38
+ scope.send({
39
+ type: "TAB.SELECT",
40
+ value: row.value
41
+ });
42
+ },
43
+ onKeydown: (event) => {
44
+ if (event.defaultPrevented) return;
45
+ const intent = ROVING_KEYS[event.key];
46
+ if (intent === void 0) return;
47
+ const order = enabledValues(scope.context);
48
+ const target = intent.intent === "next" ? neighbor(scope.context, row.value, 1) : intent.intent === "prev" ? neighbor(scope.context, row.value, -1) : intent.intent === "first" ? order[0] ?? null : order[order.length - 1] ?? null;
49
+ if (target === null) return;
50
+ event.preventDefault();
51
+ scope.send({
52
+ type: "TAB.SELECT",
53
+ value: target
54
+ });
55
+ }
56
+ };
57
+ } },
58
+ content: { attrs: (scope) => {
59
+ const row = scope.slot;
60
+ const isSelected = scope.context.value === row.value;
61
+ return {
62
+ id: scope.id("content", row.value),
63
+ role: "tabpanel",
64
+ ...ariaLabelledBy(scope, {
65
+ part: "trigger",
66
+ slot: row.value
67
+ }),
68
+ hidden: isSelected ? void 0 : true
69
+ };
70
+ } }
71
+ },
72
+ commands: { select: { event: ([value]) => ({
73
+ type: "TAB.SELECT",
74
+ value
75
+ }) } },
76
+ readers: {
77
+ value: { read: (context) => context.value },
78
+ items: { read: (context) => context.items }
79
+ },
80
+ events: { "value-change": {
81
+ prop: "onValueChange",
82
+ watch: (context) => [context.value],
83
+ detail: (watched) => ({ value: watched[0] })
84
+ } },
85
+ settled: ({ event, focus }) => {
86
+ if (event.type !== "TAB.SELECT") return;
87
+ const value = event["value"];
88
+ if (typeof value === "string") focus("trigger", value);
89
+ }
90
+ };
91
+ const tabs = defineComponent(def);
92
+ export { def, tabs };
93
+
94
+ //# sourceMappingURL=tabs.presentation.js.map
@@ -0,0 +1,61 @@
1
+ export interface TabsItem {
2
+ readonly value: string;
3
+ readonly label: string;
4
+ readonly content: string;
5
+ readonly badge?: string;
6
+ }
7
+ export type TabsState = "idle" | "focused";
8
+ export interface TabsContext {
9
+ value: string;
10
+ defaultValue: string;
11
+ /** Configuration-that-never-changes: the shaped rows, supplied once at
12
+ * instantiation. Bags read this for keyboard navigation. */
13
+ items: readonly TabsItem[];
14
+ orientation: "horizontal" | "vertical";
15
+ activationMode: "automatic" | "manual";
16
+ loopFocus: boolean;
17
+ deselectable: boolean;
18
+ composite: boolean;
19
+ }
20
+ /** A row as the host set it: the fields the host wrote, narrowed to their
21
+ * own types. `label` may be absent — transport does not invent labels,
22
+ * `initial` falls back to the value. */
23
+ export interface TabsRow {
24
+ readonly value?: string;
25
+ readonly label?: string;
26
+ readonly content?: string;
27
+ readonly badge?: string;
28
+ }
29
+ /**
30
+ * The tabs' arguments: the values the host may set.
31
+ *
32
+ * The twin (`defaultValue`) is resolved by the framework before the factory
33
+ * is called, so the machine only ever sees the live value; the machine
34
+ * keeps the twin's own text in its context, so it also reads it when the
35
+ * factory is called on its own.
36
+ */
37
+ export interface TabsArgs {
38
+ items?: readonly TabsRow[];
39
+ value?: string;
40
+ defaultValue?: string;
41
+ orientation?: "horizontal" | "vertical";
42
+ activationMode?: "automatic" | "manual";
43
+ loopFocus?: boolean;
44
+ deselectable?: boolean;
45
+ composite?: boolean;
46
+ }
47
+ /** Shape raw items into rows: label-from-value, content-to-empty, and a row
48
+ * without a usable value drops out. Shared by `initial` and the field
49
+ * contract, so a host write parses exactly like the seed. */
50
+ export declare function parseItems(raw: unknown): TabsItem[];
51
+ /**
52
+ * Shape the arguments into the machine's initial context.
53
+ * Pure shaping only: the rows (label-from-value, content-to-empty, and a
54
+ * row without a usable value drops out), and the first-selected fallback
55
+ * (the host's write, then `defaultValue`, then the first row).
56
+ *
57
+ * The seed twin (`defaultValue`) is the host's write of the selection —
58
+ * the framework resolved it into the args — so it counts as a write too.
59
+ */
60
+ export declare function initial(args: TabsArgs | undefined, authored: (name: string) => boolean): TabsContext;
61
+ //# sourceMappingURL=tabs.state.d.ts.map
@@ -0,0 +1,53 @@
1
+ import { defaultTwin } from "@spinjs/runtime";
2
+ // src/tabs/tabs.state.ts
3
+ /** Shape raw items into rows: label-from-value, content-to-empty, and a row
4
+ * without a usable value drops out. Shared by `initial` and the field
5
+ * contract, so a host write parses exactly like the seed. */
6
+ function parseItems(raw) {
7
+ const items = [];
8
+ const list = Array.isArray(raw) ? raw : [];
9
+ for (const entry of list) {
10
+ if (typeof entry !== "object" || entry === null) continue;
11
+ const row = entry;
12
+ const value = row["value"];
13
+ if (typeof value !== "string" || value.length === 0) continue;
14
+ const label = row["label"];
15
+ const content = row["content"];
16
+ const badge = row["badge"];
17
+ items.push({
18
+ value,
19
+ label: typeof label === "string" ? label : value,
20
+ content: typeof content === "string" ? content : "",
21
+ ...typeof badge === "string" ? { badge } : {}
22
+ });
23
+ }
24
+ return items;
25
+ }
26
+ /**
27
+ * Shape the arguments into the machine's initial context.
28
+ * Pure shaping only: the rows (label-from-value, content-to-empty, and a
29
+ * row without a usable value drops out), and the first-selected fallback
30
+ * (the host's write, then `defaultValue`, then the first row).
31
+ *
32
+ * The seed twin (`defaultValue`) is the host's write of the selection —
33
+ * the framework resolved it into the args — so it counts as a write too.
34
+ */
35
+ function initial(args = {}, authored) {
36
+ const written = (field) => authored(field) || authored(defaultTwin(field)) || args.defaultValue !== void 0;
37
+ const items = parseItems(args.items ?? []);
38
+ const hostValue = args.value ?? "";
39
+ const defaultValue = args.defaultValue ?? "";
40
+ return {
41
+ value: written("value") ? hostValue || defaultValue || items[0]?.value || "" : items[0]?.value || "",
42
+ defaultValue,
43
+ items,
44
+ orientation: args.orientation ?? "horizontal",
45
+ activationMode: args.activationMode ?? "automatic",
46
+ loopFocus: args.loopFocus ?? true,
47
+ deselectable: args.deselectable ?? false,
48
+ composite: args.composite ?? true
49
+ };
50
+ }
51
+ export { initial, parseItems };
52
+
53
+ //# sourceMappingURL=tabs.state.js.map
@@ -0,0 +1,8 @@
1
+ import { TabsContext } from "./tabs.state.js";
2
+ import { TabsEvents } from "./tabs.events.js";
3
+ import { AssignFor } from "@spinjs/runtime/fsm";
4
+ type TabsAssign<K extends keyof TabsEvents = keyof TabsEvents> = AssignFor<TabsContext, TabsEvents, K>;
5
+ export declare const setValue: TabsAssign<"VALUE.SET">;
6
+ export declare const selectTab: TabsAssign<"TAB.SELECT">;
7
+ export {};
8
+ //# sourceMappingURL=tabs.transitions.d.ts.map
@@ -0,0 +1,6 @@
1
+ // src/tabs/tabs.transitions.ts
2
+ const setValue = (_ctx, event) => ({ value: event.value });
3
+ const selectTab = (ctx, event) => event.value.length === 0 || event.value === ctx.value ? {} : { value: event.value };
4
+ export { selectTab, setValue };
5
+
6
+ //# sourceMappingURL=tabs.transitions.js.map
@@ -0,0 +1,43 @@
1
+ <script lang="ts">
2
+ import { tags } from "../tags.presentation.js";
3
+
4
+ const machine = tags({
5
+ defaultValue: '["TypeScript","React","CSS"]',
6
+ placeholder: "Add a skill…",
7
+ });
8
+ </script>
9
+ <div class="w-full" {...machine.getRootProps()}>
10
+ <label
11
+ class={["mb-1 block text-xs font-medium text-text transition-opacity duration-fast ease-decelerate", { "opacity-50": machine.disabled }]}
12
+ {...machine.getLabelProps()}>Skills</label>
13
+ <div
14
+ class={["flex flex-wrap items-center gap-1 rounded-md border border-solid border-border bg-surface-raised p-1 transition-shadow duration-fast ease-decelerate", { "ring-2 ring-border-strong": machine.focused }]}
15
+ {...machine.getControlProps()}>
16
+ <template for={machine.getTags()} as={row}
17
+ key={row.value + ":" + row.occurrence}>
18
+ <span
19
+ class={["inline-flex items-center gap-1 rounded-sm border border-solid border-border bg-surface py-1 pl-2 pr-1 text-xs text-text transition-colors duration-fast ease-decelerate", { "border-primary text-primary": machine.getItemState(row).highlighted }]}
20
+ {...machine.getItemProps(row)}>
21
+ <span class="inline-flex items-center gap-1"
22
+ {...machine.getItemPreviewProps(row)}>
23
+ <span class="truncate"
24
+ {...machine.getItemTextProps(row)}>{row.value}</span>
25
+ <button
26
+ class={["bare ghost icon s-sm", { "text-primary": machine.getItemState(row).highlighted }]}
27
+ {...machine.getItemDeleteTriggerProps(row)}><span class="i-lucide-x text-xs" aria-hidden="true"></span></button>
28
+ </span>
29
+ <input
30
+ class="bare w-20 rounded-sm px-1 py-1 text-xs"
31
+ {...machine.getItemInputProps(row)} />
32
+ </span>
33
+ </template>
34
+ <input
35
+ class="bare min-w-16 flex-1 bg-transparent py-1 text-xs outline-none "
36
+ {...machine.getInputProps()} />
37
+ <button aria-label="Clear tags"
38
+ class="ghost icon s-sm"
39
+ {...machine.getClearTriggerProps()}><span class="i-lucide-x text-xs" aria-hidden="true"></span></button>
40
+ </div>
41
+ <input {...machine.getHiddenInputProps()} />
42
+ <div class="visually-hidden" {...machine.getLiveRegionProps()}></div>
43
+ </div>
@@ -0,0 +1,64 @@
1
+ <script lang="ts">
2
+ import { tags } from "../tags.presentation.js";
3
+ import { combobox } from "../../combobox/combobox.presentation.js";
4
+
5
+ const machine_tags = tags({});
6
+ const machine_combobox = combobox({items: [{"value":"react","label":"React"},{"value":"solid","label":"Solid"},{"value":"svelte","label":"Svelte"},{"value":"vue","label":"Vue"}]});
7
+ </script>
8
+ <div class="w-full">
9
+ <label class="mb-1 block text-xs font-medium text-text"
10
+ {...machine_tags.getLabelProps()}>Frameworks</label>
11
+ <div
12
+ class="flex flex-wrap items-center gap-1 rounded-md border border-solid border-border bg-surface-raised p-1"
13
+ {...machine_tags.getControlProps()}>
14
+ <template for={machine_tags.getTags()} as={row}
15
+ key={row.value + ":" + row.occurrence}>
16
+ <span
17
+ class={["inline-flex items-center gap-1 rounded-sm border border-solid border-border bg-surface py-1 pl-2 pr-1 text-xs text-text", { "border-primary text-primary": machine_tags.getItemState(row).highlighted }]}
18
+ {...machine_tags.getItemProps(row)}>
19
+ <span class="inline-flex items-center gap-1"
20
+ {...machine_tags.getItemPreviewProps(row)}>
21
+ <span class="truncate"
22
+ {...machine_tags.getItemTextProps(row)}>{row.value}</span>
23
+ <button
24
+ class="bare inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-sm text-text-muted hover:text-text"
25
+ {...machine_tags.getItemDeleteTriggerProps(row)}><span class="i-lucide-x text-xs" aria-hidden="true"></span></button>
26
+ </span>
27
+ <input
28
+ class="bare w-20 rounded-sm px-1 py-1 text-xs"
29
+ {...machine_tags.getItemInputProps(row)} />
30
+ </span>
31
+ </template>
32
+ <div class="relative min-w-16 flex-1" {...machine_combobox.getRootProps()}>
33
+ <input
34
+ class="w-full border-0 bg-transparent py-1 text-xs"
35
+ {...machine_combobox.getInputProps()} />
36
+ <button aria-hidden="true" tabindex="-1" class="hidden"
37
+ {...machine_combobox.getClearTriggerProps()}></button>
38
+ <div class="absolute left-0 top-full z-dropdown mt-1 w-full origin-top"
39
+ {...machine_combobox.getPositionerProps()}>
40
+ <div
41
+ class="overflow-hidden rounded-lg border border-solid border-border bg-surface-raised shadow-lg"
42
+ {...machine_combobox.getContentProps()}>
43
+ <div class="max-h-60 overflow-y-auto p-1"
44
+ {...machine_combobox.getListProps()}>
45
+ <template for={machine_combobox.getBlocks()} as={block}
46
+ key={block.id}>
47
+ <template for={machine_combobox.getRows(block)} as={brow}
48
+ key={brow.value}>
49
+ <div
50
+ class={["relative flex cursor-default select-none items-center gap-2 rounded-md px-2 py-1 text-xs text-text", { "bg-surface": machine_combobox.getItemState(brow).highlighted }]}
51
+ show={brow.label.toLowerCase().indexOf(machine_combobox.inputValue.toLowerCase()) !== -1}
52
+ {...machine_combobox.getItemProps(brow)}>{brow.label}</div>
53
+ </template>
54
+ </template>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ <button aria-label="Clear tags"
60
+ class="bare inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-sm text-text-muted hover:text-text"
61
+ {...machine_tags.getClearTriggerProps()}><span class="i-lucide-x text-xs" aria-hidden="true"></span></button>
62
+ </div>
63
+ <input {...machine_tags.getHiddenInputProps()} />
64
+ </div>
@@ -0,0 +1,77 @@
1
+ import { EventUnion } from "@spinjs/runtime/fsm";
2
+ export interface TagsEvents {
3
+ "FOCUS": {};
4
+ "POINTER_DOWN": {};
5
+ "TYPE": {
6
+ value: string;
7
+ };
8
+ "BLUR": {};
9
+ "ENTER": {};
10
+ "DELIMITER_KEY": {};
11
+ "ARROW_LEFT": {
12
+ caretAtStart: boolean;
13
+ };
14
+ "ARROW_RIGHT": {
15
+ caretAtStart: boolean;
16
+ };
17
+ "ARROW_DOWN": {};
18
+ "ESCAPE": {};
19
+ "BACKSPACE": {
20
+ caretAtStart: boolean;
21
+ };
22
+ "DELETE": {
23
+ caretAtStart: boolean;
24
+ };
25
+ "PASTE": {
26
+ value: string;
27
+ };
28
+ "DOUBLE_CLICK_TAG": {
29
+ index: number;
30
+ };
31
+ "POINTER_DOWN_TAG": {
32
+ index: number;
33
+ };
34
+ "CLICK_DELETE_TAG": {
35
+ index: number;
36
+ };
37
+ "SET_INPUT_VALUE": {
38
+ value: string;
39
+ };
40
+ "SET_VALUE": {
41
+ value: readonly string[];
42
+ };
43
+ "SET_VALUE_AT_INDEX": {
44
+ index: number;
45
+ value: string;
46
+ };
47
+ "CLEAR_TAG": {
48
+ index: number;
49
+ };
50
+ "CLEAR_VALUE": {};
51
+ "ADD_TAG": {
52
+ value?: string;
53
+ };
54
+ "EXTERNAL_BLUR": {};
55
+ "TAG_INPUT_TYPE": {
56
+ value: string;
57
+ };
58
+ "TAG_INPUT_ESCAPE": {};
59
+ "TAG_INPUT_BLUR": {
60
+ relatedToInput: boolean;
61
+ };
62
+ "TAG_INPUT_ENTER": {};
63
+ }
64
+ export type TagsEvent = EventUnion<TagsEvents>;
65
+ export interface TagsValueChange {
66
+ readonly value: readonly string[];
67
+ }
68
+ export interface TagsInputValueChange {
69
+ readonly inputValue: string;
70
+ }
71
+ export interface TagsHighlightChange {
72
+ readonly highlightedValue: number | null;
73
+ }
74
+ export interface TagsValueInvalid {
75
+ readonly reason: "invalidTag" | "rangeOverflow";
76
+ }
77
+ //# sourceMappingURL=tags.events.d.ts.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { TagsEvent, TagsEvents } from "./tags.events.js";
2
+ import { SanitizeValue, TagsArgs, TagsContext, TagsLog, TagsState, TagsValidateArgs, ValidateTag, initial, sameTags, stringsOf } from "./tags.state.js";
3
+ import { Machine } from "@spinjs/runtime/fsm";
4
+ export declare function tags(args?: TagsArgs, authored?: (name: string) => boolean): Machine<TagsContext, TagsEvents, TagsState>;
5
+ export { type SanitizeValue, type TagsArgs, type TagsContext, type TagsEvent, type TagsEvents, type TagsLog, type TagsValidateArgs, type ValidateTag, initial, sameTags, stringsOf };
6
+ //# sourceMappingURL=tags.machine.d.ts.map