@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,76 @@
1
+ import { defaultTwin, isRecord } from "@spinjs/runtime";
2
+ // src/floating-panel/floating-panel.state.ts
3
+ function sizeOf(raw) {
4
+ const shape = (value) => {
5
+ if (!isRecord(value)) return null;
6
+ const w = value["w"];
7
+ const h = value["h"];
8
+ return typeof w === "number" && typeof h === "number" ? {
9
+ w,
10
+ h
11
+ } : null;
12
+ };
13
+ if (typeof raw === "string") {
14
+ if (raw.length === 0) return null;
15
+ try {
16
+ return shape(JSON.parse(raw));
17
+ } catch {
18
+ return null;
19
+ }
20
+ }
21
+ return shape(raw);
22
+ }
23
+ const DEFAULT_SIZE = {
24
+ w: 360,
25
+ h: 240
26
+ };
27
+ const DEFAULT_MIN = {
28
+ w: 120,
29
+ h: 80
30
+ };
31
+ const DEFAULT_MAX = {
32
+ w: 1024,
33
+ h: 768
34
+ };
35
+ function initial(args = {}, authored) {
36
+ const written = (field) => authored(field) || authored(defaultTwin(field)) || args[defaultTwin(field)] !== void 0;
37
+ const stage = args.stage;
38
+ return {
39
+ position: {
40
+ x: 0,
41
+ y: 0
42
+ },
43
+ size: written("size") ? sizeOf(args.size) ?? DEFAULT_SIZE : DEFAULT_SIZE,
44
+ restoreSize: null,
45
+ restorePosition: null,
46
+ stage: stage === "minimized" || stage === "maximized" ? stage : "restored",
47
+ dragFrom: null,
48
+ minSize: sizeOf(args.minSize) ?? DEFAULT_MIN,
49
+ maxSize: sizeOf(args.maxSize) ?? DEFAULT_MAX,
50
+ resizeFrom: null,
51
+ axis: null,
52
+ draggable: written("draggable") ? args.draggable !== false : true,
53
+ resizable: written("resizable") ? args.resizable !== false : true,
54
+ closeOnEscape: written("closeOnEscape") ? args.closeOnEscape !== false : true,
55
+ boundary: {
56
+ w: 1024,
57
+ h: 768
58
+ },
59
+ label: written("label") ? args.label ?? "" : "",
60
+ disabled: written("disabled") ? args.disabled === true : false
61
+ };
62
+ }
63
+ function startOpen(raw, authored) {
64
+ return authored("open") ? raw["open"] === true : raw["defaultOpen"] === true;
65
+ }
66
+ function clampPosition(ctx, x, y) {
67
+ const maxX = Math.max(0, ctx.boundary.w - ctx.size.w);
68
+ const maxY = Math.max(0, ctx.boundary.h - ctx.size.h);
69
+ return {
70
+ x: Math.min(Math.max(x, 0), maxX),
71
+ y: Math.min(Math.max(y, 0), maxY)
72
+ };
73
+ }
74
+ export { clampPosition, initial, sizeOf, startOpen };
75
+
76
+ //# sourceMappingURL=floating-panel.state.js.map
@@ -0,0 +1,22 @@
1
+ import { FloatingPanelContext } from "./floating-panel.state.js";
2
+ import { FloatingPanelEvents } from "./floating-panel.events.js";
3
+ import { AssignFor, GuardFor } from "@spinjs/runtime/fsm";
4
+ type FPAssign<K extends keyof FloatingPanelEvents = keyof FloatingPanelEvents> = AssignFor<FloatingPanelContext, FloatingPanelEvents, K>;
5
+ export declare const clearDragFrom: FPAssign;
6
+ export declare const clearResizeFrom: FPAssign;
7
+ export declare const setSize: FPAssign<"SIZE.SET">;
8
+ export declare const minimize: FPAssign<"MINIMIZE">;
9
+ export declare const maximize: FPAssign<"MAXIMIZE">;
10
+ export declare const restore: FPAssign<"RESTORE">;
11
+ export declare const escapeCancel: FPAssign<"ESCAPE">;
12
+ export declare const dragStart: FPAssign<"DRAG.START">;
13
+ export declare const resizeStart: FPAssign<"RESIZE.START">;
14
+ export declare const dragMove: FPAssign<"DRAG.MOVE">;
15
+ export declare const resizeMove: FPAssign<"RESIZE.MOVE">;
16
+ export declare const cancelDragToOpen: FPAssign;
17
+ export declare const restoreResizeGeometry: FPAssign;
18
+ export declare const closeOnEscape: GuardFor<FloatingPanelContext, FloatingPanelEvents>;
19
+ export declare const canDrag: GuardFor<FloatingPanelContext, FloatingPanelEvents>;
20
+ export declare const canResize: GuardFor<FloatingPanelContext, FloatingPanelEvents>;
21
+ export {};
22
+ //# sourceMappingURL=floating-panel.transitions.d.ts.map
@@ -0,0 +1,114 @@
1
+ import { clampPosition, sizeOf } from "./floating-panel.state.js";
2
+ // src/floating-panel/floating-panel.transitions.ts
3
+ const clearDragFrom = () => ({ dragFrom: null });
4
+ const clearResizeFrom = () => ({
5
+ resizeFrom: null,
6
+ axis: null
7
+ });
8
+ const setSize = (_ctx, event) => {
9
+ const size = sizeOf(event.size);
10
+ if (size === null) return {};
11
+ return { size: {
12
+ w: size.w,
13
+ h: size.h
14
+ } };
15
+ };
16
+ const minimize = (ctx) => {
17
+ if (ctx.stage === "minimized") return {};
18
+ return ctx.stage === "restored" ? {
19
+ stage: "minimized",
20
+ restoreSize: { ...ctx.size },
21
+ restorePosition: { ...ctx.position }
22
+ } : { stage: "minimized" };
23
+ };
24
+ const maximize = (ctx) => {
25
+ if (ctx.stage === "maximized") return {};
26
+ return {
27
+ restoreSize: ctx.stage === "restored" ? { ...ctx.size } : ctx.restoreSize,
28
+ restorePosition: ctx.stage === "restored" ? { ...ctx.position } : ctx.restorePosition,
29
+ stage: "maximized",
30
+ size: {
31
+ w: ctx.boundary.w,
32
+ h: ctx.boundary.h
33
+ },
34
+ position: {
35
+ x: 0,
36
+ y: 0
37
+ }
38
+ };
39
+ };
40
+ const restore = (ctx) => {
41
+ if (ctx.stage === "restored") return {};
42
+ return {
43
+ stage: "restored",
44
+ size: ctx.restoreSize ?? ctx.size,
45
+ position: ctx.restorePosition ?? ctx.position,
46
+ restoreSize: null,
47
+ restorePosition: null
48
+ };
49
+ };
50
+ const escapeCancel = (ctx) => {
51
+ const back = {};
52
+ if (ctx.dragFrom !== null) back.position = { ...ctx.dragFrom };
53
+ if (ctx.resizeFrom !== null) back.size = { ...ctx.resizeFrom.size };
54
+ return {
55
+ ...back,
56
+ dragFrom: null,
57
+ resizeFrom: null,
58
+ axis: null
59
+ };
60
+ };
61
+ const dragStart = (ctx) => ({ dragFrom: { ...ctx.position } });
62
+ const resizeStart = (ctx, event) => ({
63
+ resizeFrom: {
64
+ size: { ...ctx.size },
65
+ position: { ...ctx.position }
66
+ },
67
+ axis: {
68
+ x: event.x,
69
+ y: event.y
70
+ }
71
+ });
72
+ const dragMove = (ctx, event) => {
73
+ const from = ctx.dragFrom ?? ctx.position;
74
+ return { position: clampPosition(ctx, from.x + event.dx, from.y + event.dy) };
75
+ };
76
+ const resizeMove = (ctx, event) => {
77
+ const origin = ctx.resizeFrom;
78
+ if (origin === null) return {};
79
+ const axis = ctx.axis ?? {
80
+ x: 0,
81
+ y: 0
82
+ };
83
+ const lo = ctx.minSize;
84
+ const hi = ctx.maxSize;
85
+ const w = Math.min(hi.w, Math.max(lo.w, origin.size.w + (axis.x === 1 ? event.dx : axis.x === -1 ? -event.dx : 0)));
86
+ const h = Math.min(hi.h, Math.max(lo.h, origin.size.h + (axis.y === 1 ? event.dy : axis.y === -1 ? -event.dy : 0)));
87
+ const back = {};
88
+ if (axis.x === -1) back.position = clampPosition(ctx, origin.position.x - (w - origin.size.w), origin.position.y);
89
+ if (axis.y === -1) back.position = {
90
+ x: back.position?.x ?? origin.position.x,
91
+ y: origin.position.y - (h - origin.size.h)
92
+ };
93
+ return {
94
+ size: {
95
+ w,
96
+ h
97
+ },
98
+ ...back
99
+ };
100
+ };
101
+ const cancelDragToOpen = (ctx) => ({ position: ctx.dragFrom ?? ctx.position });
102
+ const restoreResizeGeometry = (ctx) => {
103
+ if (ctx.resizeFrom === null) return {};
104
+ return {
105
+ size: { ...ctx.resizeFrom.size },
106
+ position: { ...ctx.resizeFrom.position }
107
+ };
108
+ };
109
+ const closeOnEscape = (ctx) => ctx.closeOnEscape;
110
+ const canDrag = (ctx) => ctx.draggable && ctx.stage !== "maximized" && ctx.stage !== "minimized";
111
+ const canResize = (ctx) => ctx.resizable && ctx.stage !== "maximized" && ctx.stage !== "minimized";
112
+ export { canDrag, canResize, cancelDragToOpen, clearDragFrom, clearResizeFrom, closeOnEscape, dragMove, dragStart, escapeCancel, maximize, minimize, resizeMove, resizeStart, restore, restoreResizeGeometry, setSize };
113
+
114
+ //# sourceMappingURL=floating-panel.transitions.js.map
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ import { hoverCard } from "../hover-card.controller-def.js";
3
+
4
+ const ctl = hoverCard();
5
+ </script>
6
+
7
+ <div {...ctl.getRootProps()} class="inline-block">
8
+ <span {...ctl.getTriggerProps()}
9
+ class="inline-block cursor-pointer rounded-md border border-solid border-border bg-surface-raised px-3 py-1 text-sm text-text transition-colors hover:bg-surface">Hover me</span>
10
+
11
+ <div {...ctl.getContentProps()}
12
+ class="fixed m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg max-w-[20rem]">
13
+ <div class="stack-sm">
14
+ <strong class="text-sm text-text">Hover Card</strong>
15
+ <p
16
+ class="text-sm text-text-muted">This is a basic hover card that appears when you hover over the trigger element.</p>
17
+ </div>
18
+ </div>
19
+ </div>
@@ -0,0 +1,32 @@
1
+ <script lang="ts">
2
+ import { hoverCard } from "../hover-card.controller-def.js";
3
+
4
+ const ctl = hoverCard();
5
+ </script>
6
+
7
+ <div class="w-full stack-lg p-6">
8
+ <div class="stack-sm">
9
+ <strong class="text-sm text-text">External Controls</strong>
10
+ <div class="flex gap-2">
11
+ <button id="hc-show" class="s-sm">Show Hover Card</button>
12
+ <button id="hc-hide" class="s-sm">Hide Hover Card</button>
13
+ </div>
14
+ <p
15
+ class="text-sm text-text-muted">Current state: <span class="font-medium" id="hc-state">Closed</span></p>
16
+ </div>
17
+ <div class="flex items-center justify-center py-12"
18
+ {...ctl.getRootProps()}>
19
+ <span {...ctl.getTriggerProps()}
20
+ class="cursor-pointer rounded-lg border border-solid border-border bg-surface-raised px-4 py-2 text-sm text-text transition-colors hover:bg-surface">Controlled Hover Card</span>
21
+
22
+ <div {...ctl.getContentProps()}
23
+ class="fixed m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg max-w-[20rem]">
24
+ <div class="stack-sm">
25
+ <strong
26
+ class="text-sm text-text">Controlled Hover Card</strong>
27
+ <p
28
+ class="text-sm text-text-muted">This hover card's open state is controlled externally via the buttons above.</p>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </div>
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { hoverCard } from "../hover-card.controller-def.js";
3
+
4
+ const ctl = hoverCard();
5
+ </script>
6
+
7
+ <div class="w-full stack-lg p-6">
8
+ <div class="stack-sm">
9
+ <strong class="text-sm text-text">Select Position</strong>
10
+ <div class="flex flex-wrap gap-2" data-positions>
11
+ <button class="secondary s-sm" data-placement-choice="top">Top</button>
12
+ <button class="secondary s-sm" data-placement-choice="bottom">Bottom</button>
13
+ </div>
14
+ </div>
15
+ <div class="flex items-center justify-center py-12"
16
+ {...ctl.getRootProps()}>
17
+ <span {...ctl.getTriggerProps()}
18
+ class="cursor-pointer rounded-lg bg-primary px-4 py-2 text-sm font-medium text-on-primary">Hover for bottom positioning</span>
19
+
20
+ <div {...ctl.getContentProps()}
21
+ class="fixed m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg max-w-[20rem]">
22
+ <div class="stack-sm">
23
+ <strong class="text-sm text-text">Custom Positioning</strong>
24
+ <p
25
+ class="text-sm text-text-muted">The card prefers the bottom side and flips when the viewport vetoes it.</p>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </div>
@@ -0,0 +1,10 @@
1
+ <script lang="ts">
2
+ import { hoverCard } from "../hover-card.controller-def.js";
3
+
4
+ const ctl = hoverCard();
5
+ </script>
6
+
7
+ <div class="mx-auto max-w-md stack p-6">
8
+ <p
9
+ class="text-sm text-text-muted">Check out this amazing article about <span {...ctl.getRootProps()} class="inline"><span {...ctl.getTriggerProps()} class="cursor-pointer text-primary underline">building modern web applications</span><span {...ctl.getContentProps()} class="fixed m-0 max-w-[24rem] w-full overflow-hidden rounded-lg border border-solid border-border bg-surface-raised shadow-lg max-w-[24rem]"><span class="block h-[8rem] w-full bg-surface-sunken" aria-hidden="true"></span><span class="block stack-sm p-4"><span class="block stack-sm"><span class="block text-lg font-semibold text-text">Building Modern Web Applications with React and TypeScript</span><span class="block text-sm text-text-muted">Learn how to create scalable and maintainable web applications using the latest tools and best practices.</span></span><span class="flex items-center justify-between text-xs text-text-muted"><span>Dec 15, 2023</span><span>12.4k views</span></span></span></span></span>.</p>
10
+ </div>
@@ -0,0 +1,33 @@
1
+ <script lang="ts">
2
+ import { hoverCard } from "../hover-card.controller-def.js";
3
+
4
+ const ctl = hoverCard();
5
+ </script>
6
+
7
+ <div class="flex items-center gap-4 p-6" {...ctl.getRootProps()}>
8
+ <span {...ctl.getTriggerProps()}
9
+ class="block h-[8rem] w-[8rem] cursor-pointer overflow-hidden rounded-lg border border-solid border-border bg-surface-sunken">
10
+ <span
11
+ class="grid h-full w-full place-items-center transition-transform hover:scale-105"
12
+ aria-hidden="true"><span class="i-lucide-headphones icon-lg text-text"></span></span>
13
+ </span>
14
+
15
+ <div {...ctl.getContentProps()}
16
+ class="fixed m-0 max-w-[20rem] w-full overflow-hidden rounded-lg border border-solid border-border bg-surface-raised shadow-lg max-w-[20rem]">
17
+ <div class="grid aspect-square w-full place-items-center bg-surface-sunken">
18
+ <span class="i-lucide-headphones text-3xl text-text"
19
+ aria-hidden="true"></span>
20
+ </div>
21
+ <div class="stack p-4">
22
+ <div class="stack-sm">
23
+ <h3>Premium Wireless Headphones</h3>
24
+ <p class="text-sm text-text-muted">High-quality wireless headphones with active noise cancellation and 30-hour battery life.</p>
25
+ </div>
26
+ <div class="flex items-center justify-between">
27
+ <p class="text-lg font-semibold text-text">$299</p>
28
+ <p class="text-sm text-text-muted">★★★★☆ (4.8)</p>
29
+ </div>
30
+ <button class="w-full s-sm">Add to Cart</button>
31
+ </div>
32
+ </div>
33
+ </div>
@@ -0,0 +1,38 @@
1
+ <script lang="ts">
2
+ import { hoverCard } from "../hover-card.controller-def.js";
3
+
4
+ const ctl = hoverCard();
5
+ </script>
6
+
7
+ <div {...ctl.getRootProps()} class="inline-block">
8
+ <span {...ctl.getTriggerProps()}
9
+ class="inline-flex cursor-pointer items-center gap-2 rounded-lg border border-solid border-border bg-surface-raised px-3 py-2 text-sm text-text transition-colors hover:bg-surface">
10
+ <span
11
+ class="grid h-6 w-6 place-items-center rounded-full bg-primary text-xs font-semibold text-on-primary"
12
+ aria-hidden="true">JD</span>
13
+ <span class="text-sm font-medium">@johndoe</span>
14
+ </span>
15
+
16
+ <div {...ctl.getContentProps()}
17
+ class="fixed m-0 max-w-[20rem] w-full rounded-lg border border-solid border-border bg-surface-raised p-6 shadow-lg max-w-[20rem]">
18
+ <div class="stack">
19
+ <div class="flex items-start gap-3">
20
+ <span
21
+ class="grid h-12 w-12 shrink-0 place-items-center rounded-full bg-primary text-lg font-semibold text-on-primary"
22
+ aria-hidden="true">JD</span>
23
+ <div class="min-w-0 flex-1">
24
+ <h3>John Doe</h3>
25
+ <p class="text-sm text-text-muted">@johndoe</p>
26
+ </div>
27
+ <button class="s-sm">Follow</button>
28
+ </div>
29
+ <p class="text-sm text-text-muted">Frontend developer passionate about creating beautiful and accessible user interfaces.</p>
30
+ <div class="flex items-center gap-4 text-sm">
31
+ <p
32
+ class="text-text-muted"><span class="font-medium text-text">2.1k</span> followers</p>
33
+ <p
34
+ class="text-text-muted"><span class="font-medium text-text">180</span> following</p>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { hoverCard } from "../hover-card.controller-def.js";
3
+
4
+ const ctl = hoverCard();
5
+ </script>
6
+
7
+ <div class="flex items-center justify-center gap-8 p-12"
8
+ {...ctl.getRootProps()}>
9
+ <span {...ctl.getTriggerProps()}
10
+ class="inline-flex cursor-pointer items-center gap-2 rounded-lg border border-solid border-border bg-surface-raised px-3 py-2 text-sm text-text transition-colors hover:bg-surface">
11
+ <span class="i-lucide-info text-sm text-primary" aria-hidden="true"></span>
12
+ <span class="text-sm font-medium">Information</span>
13
+ </span>
14
+
15
+ <div {...ctl.getContentProps()}
16
+ class="fixed m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg max-w-[20rem]">
17
+ <span aria-hidden="true"
18
+ class="absolute -top-1 left-6 h-2 w-2 rotate-45 border-b-0 border-r-0 border-l border-t border-solid border-border bg-surface-raised"></span>
19
+ <div class="stack-sm">
20
+ <div class="flex items-center gap-2">
21
+ <span class="i-lucide-info text-sm text-primary"
22
+ aria-hidden="true"></span>
23
+ <strong class="text-sm text-text">Information</strong>
24
+ </div>
25
+ <p
26
+ class="text-sm text-text-muted">This is an informational message with an arrow pointing to the trigger element.</p>
27
+ </div>
28
+ </div>
29
+ </div>
@@ -0,0 +1,50 @@
1
+ import { ControllerDef } from "@spinjs/runtime";
2
+ /**
3
+ * Hover-card on the platform: the browser owns open/closed, the top layer,
4
+ * light-dismiss, and Escape. There is no machine here — `attach` wires the
5
+ * native popover behavior to the declared commands and events, and the
6
+ * panel is a card surface from utilities.
7
+ *
8
+ * The delays the upstream holds as opening/closing states are one
9
+ * `hover-delay` action on the root bag: the trigger and the panel are both
10
+ * inside the root, so moving between them never leaves it, and a single clock
11
+ * pair owns the open/absence handoff with no cross-instance race. Focus opens
12
+ * at once and blur closes — keyboard users never wait out a hover clock.
13
+ * Touch never opens: a card that opens on tap steals the tap the trigger
14
+ * wanted.
15
+ *
16
+ * Delays and disabled are attach-time attribute reads (`open-delay`,
17
+ * `close-delay`, `disabled`): the declarative case works, and post-build
18
+ * writes do not reconfigure — the same staleness class as the popover's
19
+ * frozen data-state.
20
+ *
21
+ * The panel positions against the trigger through the `anchor` action,
22
+ * which reports geometry the bag carries as style properties. Placement
23
+ * is a suggestion the viewport can veto; the flip reports alongside the
24
+ * geometry so the origin utility can follow.
25
+ */
26
+ export interface HoverCardOpenChange {
27
+ readonly open: boolean;
28
+ }
29
+ /** Authorship surface for recipe-check's reader rule (controllers do
30
+ * not run defineComponent, so there is no synthesized manifest). */
31
+ export declare const hoverCardManifest: {
32
+ readonly parts: readonly [];
33
+ readonly slots: readonly [];
34
+ readonly readers: readonly ["open"];
35
+ readonly methods: readonly ["show", "hide", "getRootProps", "getTriggerProps", "getContentProps"];
36
+ };
37
+ export interface HoverCardApi {
38
+ readonly open: boolean;
39
+ show(): void;
40
+ hide(): void;
41
+ getRootProps(): Record<string, unknown>;
42
+ getTriggerProps(): Record<string, unknown>;
43
+ getContentProps(): Record<string, unknown>;
44
+ setPlacement(next: "top" | "bottom" | "left" | "right"): void;
45
+ }
46
+ export declare function attachHoverCard(el: Element): HoverCardApi;
47
+ export declare const hoverCard: ControllerDef & {
48
+ attach(el: Element): HoverCardApi;
49
+ } & (() => HoverCardApi);
50
+ //# sourceMappingURL=hover-card.controller-def.d.ts.map
@@ -0,0 +1,134 @@
1
+ import { defineController, signal } from "@spinjs/runtime";
2
+ // src/hover-card/hover-card.controller-def.ts
3
+ /** Authorship surface for recipe-check's reader rule (controllers do
4
+ * not run defineComponent, so there is no synthesized manifest). */
5
+ const hoverCardManifest = {
6
+ parts: [],
7
+ slots: [],
8
+ readers: ["open"],
9
+ methods: [
10
+ "show",
11
+ "hide",
12
+ "getRootProps",
13
+ "getTriggerProps",
14
+ "getContentProps"
15
+ ]
16
+ };
17
+ function panelOf(el) {
18
+ return el.querySelector("[popover]");
19
+ }
20
+ function intAttr(el, name, fallback) {
21
+ const raw = el.getAttribute(name);
22
+ if (raw === null) return fallback;
23
+ const parsed = Number.parseInt(raw, 10);
24
+ return Number.isNaN(parsed) ? fallback : parsed;
25
+ }
26
+ let instanceCounter = 0;
27
+ function attachHoverCard(el) {
28
+ const readOpen = () => panelOf(el)?.matches(":popover-open") ?? false;
29
+ const disabled = el.hasAttribute("disabled");
30
+ const openDelay = intAttr(el, "open-delay", 600);
31
+ const closeDelay = intAttr(el, "close-delay", 300);
32
+ let placement = (() => {
33
+ const raw = el.getAttribute("placement");
34
+ return raw === "top" || raw === "bottom" || raw === "left" || raw === "right" ? raw : "bottom";
35
+ })();
36
+ const emit = (open) => {
37
+ el.dispatchEvent(new CustomEvent("open-change", {
38
+ detail: { open },
39
+ bubbles: true
40
+ }));
41
+ };
42
+ el.addEventListener("toggle", (event) => {
43
+ emit(event.newState === "open");
44
+ }, true);
45
+ const show = () => {
46
+ if (disabled) return;
47
+ const panel = panelOf(el);
48
+ if (panel === null || panel.matches(":popover-open")) return;
49
+ panel.showPopover();
50
+ };
51
+ const hide = () => {
52
+ const panel = panelOf(el);
53
+ if (panel === null || !panel.matches(":popover-open")) return;
54
+ panel.hidePopover();
55
+ };
56
+ const geometry = signal({
57
+ x: 0,
58
+ y: 0,
59
+ w: 0,
60
+ h: 0,
61
+ placement: "bottom"
62
+ });
63
+ const instance = el.id !== "" ? el.id : `hover-card-${++instanceCounter}`;
64
+ const triggerId = `${instance}:trigger`;
65
+ const panelId = `${instance}:panel`;
66
+ return {
67
+ get open() {
68
+ return readOpen();
69
+ },
70
+ setPlacement(next) {
71
+ placement = next;
72
+ },
73
+ show,
74
+ hide,
75
+ getRootProps: () => ({
76
+ "data-scope": "hover-card",
77
+ "data-part": "root",
78
+ "data-state": readOpen() ? "open" : "closed",
79
+ ...disabled ? {} : { "use:hover-delay": {
80
+ openDelay,
81
+ closeDelay,
82
+ onOpen: show,
83
+ onClose: hide
84
+ } }
85
+ }),
86
+ getTriggerProps: () => ({
87
+ id: triggerId,
88
+ "data-scope": "hover-card",
89
+ "data-part": "trigger",
90
+ "aria-expanded": readOpen(),
91
+ "aria-details": panelId,
92
+ "aria-haspopup": "dialog",
93
+ "data-state": readOpen() ? "open" : "closed",
94
+ ...disabled ? { disabled: true } : {},
95
+ onFocus: show,
96
+ onBlur: hide
97
+ }),
98
+ getContentProps: () => ({
99
+ id: panelId,
100
+ "data-scope": "hover-card",
101
+ "data-part": "content",
102
+ popover: "",
103
+ role: "dialog",
104
+ "data-state": readOpen() ? "open" : "closed",
105
+ get ["data-placement"]() {
106
+ return geometry().placement;
107
+ },
108
+ style: {
109
+ left: `${geometry().x}px`,
110
+ top: `${geometry().y}px`,
111
+ minWidth: `${geometry().w}px`
112
+ },
113
+ "use:anchor": {
114
+ placement,
115
+ onGeometry: (next) => geometry(next)
116
+ }
117
+ })
118
+ };
119
+ }
120
+ const hoverCard = defineController({
121
+ attach: attachHoverCard,
122
+ commands: [
123
+ "show",
124
+ "hide",
125
+ "setPlacement"
126
+ ],
127
+ events: { "open-change": {
128
+ on: "onOpenChange",
129
+ detail: (change) => ({ open: change.open })
130
+ } }
131
+ });
132
+ export { attachHoverCard, hoverCard, hoverCardManifest };
133
+
134
+ //# sourceMappingURL=hover-card.controller-def.js.map