@sharedex/ui 0.9.0 → 0.10.0

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 (509) hide show
  1. package/README.md +37 -2
  2. package/dist/backgrounds/hosts/CssHost.d.ts +2 -6
  3. package/dist/backgrounds/hosts/CssHost.js +3 -17
  4. package/dist/backgrounds/hosts/styleHref.d.ts +6 -0
  5. package/dist/backgrounds/hosts/styleHref.js +20 -0
  6. package/dist/buttons/pick.d.ts +9 -3
  7. package/dist/buttons/pick.js +4 -1
  8. package/dist/forms/base.d.ts +1 -0
  9. package/dist/forms/base.js +224 -0
  10. package/dist/forms/buddy.d.ts +6 -0
  11. package/dist/forms/buddy.js +150 -0
  12. package/dist/forms/chips.d.ts +1 -0
  13. package/dist/forms/chips.js +140 -0
  14. package/dist/forms/choice.d.ts +1 -0
  15. package/dist/forms/choice.js +208 -0
  16. package/dist/forms/controls/CheckGroup.d.ts +65 -0
  17. package/dist/forms/controls/CheckGroup.js +99 -0
  18. package/dist/forms/controls/Checkbox.d.ts +43 -0
  19. package/dist/forms/controls/Checkbox.js +67 -0
  20. package/dist/forms/controls/ChipGroup.d.ts +50 -0
  21. package/dist/forms/controls/ChipGroup.js +56 -0
  22. package/dist/forms/controls/Combobox.d.ts +75 -0
  23. package/dist/forms/controls/Combobox.js +249 -0
  24. package/dist/forms/controls/ErrorSummary.d.ts +29 -0
  25. package/dist/forms/controls/ErrorSummary.js +79 -0
  26. package/dist/forms/controls/Field.d.ts +92 -0
  27. package/dist/forms/controls/Field.js +219 -0
  28. package/dist/forms/controls/FileDrop.d.ts +81 -0
  29. package/dist/forms/controls/FileDrop.js +328 -0
  30. package/dist/forms/controls/FormBuddy.d.ts +22 -0
  31. package/dist/forms/controls/FormBuddy.js +143 -0
  32. package/dist/forms/controls/FormReveal.d.ts +21 -0
  33. package/dist/forms/controls/FormReveal.js +19 -0
  34. package/dist/forms/controls/FormSteps.d.ts +75 -0
  35. package/dist/forms/controls/FormSteps.js +205 -0
  36. package/dist/forms/controls/FormSwap.d.ts +27 -0
  37. package/dist/forms/controls/FormSwap.js +38 -0
  38. package/dist/forms/controls/InlineEdit.d.ts +50 -0
  39. package/dist/forms/controls/InlineEdit.js +136 -0
  40. package/dist/forms/controls/NumberField.d.ts +43 -0
  41. package/dist/forms/controls/NumberField.js +205 -0
  42. package/dist/forms/controls/OtpField.d.ts +46 -0
  43. package/dist/forms/controls/OtpField.js +195 -0
  44. package/dist/forms/controls/PasswordRules.d.ts +31 -0
  45. package/dist/forms/controls/PasswordRules.js +85 -0
  46. package/dist/forms/controls/RadioGroup.d.ts +69 -0
  47. package/dist/forms/controls/RadioGroup.js +95 -0
  48. package/dist/forms/controls/Range.d.ts +60 -0
  49. package/dist/forms/controls/Range.js +169 -0
  50. package/dist/forms/controls/SaveStatus.d.ts +25 -0
  51. package/dist/forms/controls/SaveStatus.js +88 -0
  52. package/dist/forms/controls/Select.d.ts +46 -0
  53. package/dist/forms/controls/Select.js +35 -0
  54. package/dist/forms/controls/Switch.d.ts +54 -0
  55. package/dist/forms/controls/Switch.js +91 -0
  56. package/dist/forms/controls/TagsField.d.ts +68 -0
  57. package/dist/forms/controls/TagsField.js +0 -0
  58. package/dist/forms/controls/choiceChecks.d.ts +11 -0
  59. package/dist/forms/controls/choiceChecks.js +19 -0
  60. package/dist/forms/controls/choiceParts.d.ts +40 -0
  61. package/dist/forms/controls/choiceParts.js +49 -0
  62. package/dist/forms/controls/fieldChecks.d.ts +17 -0
  63. package/dist/forms/controls/fieldChecks.js +34 -0
  64. package/dist/forms/controls/fieldTools.d.ts +62 -0
  65. package/dist/forms/controls/fieldTools.js +54 -0
  66. package/dist/forms/controls/pickerChecks.d.ts +10 -0
  67. package/dist/forms/controls/pickerChecks.js +27 -0
  68. package/dist/forms/controls/rangeChecks.d.ts +11 -0
  69. package/dist/forms/controls/rangeChecks.js +23 -0
  70. package/dist/forms/controls/shared.d.ts +8 -0
  71. package/dist/forms/controls/shared.js +18 -0
  72. package/dist/forms/effects/cards.d.ts +11 -0
  73. package/dist/forms/effects/cards.js +52 -0
  74. package/dist/forms/effects/check/checkCard.d.ts +10 -0
  75. package/dist/forms/effects/check/checkCard.js +15 -0
  76. package/dist/forms/effects/check/checkCard.schema.d.ts +1 -0
  77. package/dist/forms/effects/check/checkCard.schema.js +9 -0
  78. package/dist/forms/effects/check/checkConfetti.d.ts +18 -0
  79. package/dist/forms/effects/check/checkConfetti.js +38 -0
  80. package/dist/forms/effects/check/checkConfetti.schema.d.ts +1 -0
  81. package/dist/forms/effects/check/checkConfetti.schema.js +13 -0
  82. package/dist/forms/effects/check/checkDraw.d.ts +7 -0
  83. package/dist/forms/effects/check/checkDraw.js +12 -0
  84. package/dist/forms/effects/check/checkDraw.schema.d.ts +1 -0
  85. package/dist/forms/effects/check/checkDraw.schema.js +9 -0
  86. package/dist/forms/effects/check/checkHeart.d.ts +9 -0
  87. package/dist/forms/effects/check/checkHeart.js +84 -0
  88. package/dist/forms/effects/check/checkHeart.schema.d.ts +1 -0
  89. package/dist/forms/effects/check/checkHeart.schema.js +10 -0
  90. package/dist/forms/effects/check/checkJelly.d.ts +9 -0
  91. package/dist/forms/effects/check/checkJelly.js +23 -0
  92. package/dist/forms/effects/check/checkJelly.schema.d.ts +1 -0
  93. package/dist/forms/effects/check/checkJelly.schema.js +10 -0
  94. package/dist/forms/effects/check/checkMerge.d.ts +9 -0
  95. package/dist/forms/effects/check/checkMerge.js +37 -0
  96. package/dist/forms/effects/check/checkMerge.schema.d.ts +1 -0
  97. package/dist/forms/effects/check/checkMerge.schema.js +10 -0
  98. package/dist/forms/effects/check/checkMixed.d.ts +7 -0
  99. package/dist/forms/effects/check/checkMixed.js +25 -0
  100. package/dist/forms/effects/check/checkMixed.schema.d.ts +1 -0
  101. package/dist/forms/effects/check/checkMixed.schema.js +9 -0
  102. package/dist/forms/effects/check/checkMorph.d.ts +9 -0
  103. package/dist/forms/effects/check/checkMorph.js +53 -0
  104. package/dist/forms/effects/check/checkMorph.schema.d.ts +1 -0
  105. package/dist/forms/effects/check/checkMorph.schema.js +10 -0
  106. package/dist/forms/effects/check/checkPop.d.ts +9 -0
  107. package/dist/forms/effects/check/checkPop.js +27 -0
  108. package/dist/forms/effects/check/checkPop.schema.d.ts +1 -0
  109. package/dist/forms/effects/check/checkPop.schema.js +10 -0
  110. package/dist/forms/effects/check/checkRipple.d.ts +7 -0
  111. package/dist/forms/effects/check/checkRipple.js +33 -0
  112. package/dist/forms/effects/check/checkRipple.schema.d.ts +1 -0
  113. package/dist/forms/effects/check/checkRipple.schema.js +9 -0
  114. package/dist/forms/effects/check/checkScribble.d.ts +11 -0
  115. package/dist/forms/effects/check/checkScribble.js +42 -0
  116. package/dist/forms/effects/check/checkScribble.schema.d.ts +1 -0
  117. package/dist/forms/effects/check/checkScribble.schema.js +11 -0
  118. package/dist/forms/effects/check/checkStrike.d.ts +9 -0
  119. package/dist/forms/effects/check/checkStrike.js +54 -0
  120. package/dist/forms/effects/check/checkStrike.schema.d.ts +1 -0
  121. package/dist/forms/effects/check/checkStrike.schema.js +10 -0
  122. package/dist/forms/effects/chip/chipCheck.d.ts +7 -0
  123. package/dist/forms/effects/chip/chipCheck.js +26 -0
  124. package/dist/forms/effects/chip/chipCheck.schema.d.ts +1 -0
  125. package/dist/forms/effects/chip/chipCheck.schema.js +9 -0
  126. package/dist/forms/effects/chip/chipMerge.d.ts +9 -0
  127. package/dist/forms/effects/chip/chipMerge.js +63 -0
  128. package/dist/forms/effects/chip/chipMerge.schema.d.ts +1 -0
  129. package/dist/forms/effects/chip/chipMerge.schema.js +10 -0
  130. package/dist/forms/effects/file/fileButton.d.ts +7 -0
  131. package/dist/forms/effects/file/fileButton.js +28 -0
  132. package/dist/forms/effects/file/fileButton.schema.d.ts +1 -0
  133. package/dist/forms/effects/file/fileButton.schema.js +9 -0
  134. package/dist/forms/effects/file/fileCards.d.ts +7 -0
  135. package/dist/forms/effects/file/fileCards.js +38 -0
  136. package/dist/forms/effects/file/fileCards.schema.d.ts +1 -0
  137. package/dist/forms/effects/file/fileCards.schema.js +9 -0
  138. package/dist/forms/effects/file/fileDrag.d.ts +9 -0
  139. package/dist/forms/effects/file/fileDrag.js +45 -0
  140. package/dist/forms/effects/file/fileDrag.schema.d.ts +1 -0
  141. package/dist/forms/effects/file/fileDrag.schema.js +10 -0
  142. package/dist/forms/effects/file/filePage.d.ts +7 -0
  143. package/dist/forms/effects/file/filePage.js +46 -0
  144. package/dist/forms/effects/file/filePage.schema.d.ts +1 -0
  145. package/dist/forms/effects/file/filePage.schema.js +9 -0
  146. package/dist/forms/effects/file/filePreview.d.ts +7 -0
  147. package/dist/forms/effects/file/filePreview.js +17 -0
  148. package/dist/forms/effects/file/filePreview.schema.d.ts +1 -0
  149. package/dist/forms/effects/file/filePreview.schema.js +9 -0
  150. package/dist/forms/effects/file/fileProgress.d.ts +9 -0
  151. package/dist/forms/effects/file/fileProgress.js +92 -0
  152. package/dist/forms/effects/file/fileProgress.schema.d.ts +1 -0
  153. package/dist/forms/effects/file/fileProgress.schema.js +10 -0
  154. package/dist/forms/effects/file/fileReject.d.ts +7 -0
  155. package/dist/forms/effects/file/fileReject.js +24 -0
  156. package/dist/forms/effects/file/fileReject.schema.d.ts +1 -0
  157. package/dist/forms/effects/file/fileReject.schema.js +9 -0
  158. package/dist/forms/effects/input/inputAside.d.ts +11 -0
  159. package/dist/forms/effects/input/inputAside.js +42 -0
  160. package/dist/forms/effects/input/inputAside.schema.d.ts +1 -0
  161. package/dist/forms/effects/input/inputAside.schema.js +11 -0
  162. package/dist/forms/effects/input/inputBeam.d.ts +14 -0
  163. package/dist/forms/effects/input/inputBeam.js +51 -0
  164. package/dist/forms/effects/input/inputBeam.schema.d.ts +1 -0
  165. package/dist/forms/effects/input/inputBeam.schema.js +18 -0
  166. package/dist/forms/effects/input/inputCaret.d.ts +13 -0
  167. package/dist/forms/effects/input/inputCaret.js +33 -0
  168. package/dist/forms/effects/input/inputCaret.schema.d.ts +1 -0
  169. package/dist/forms/effects/input/inputCaret.schema.js +26 -0
  170. package/dist/forms/effects/input/inputCounter.d.ts +16 -0
  171. package/dist/forms/effects/input/inputCounter.js +84 -0
  172. package/dist/forms/effects/input/inputCounter.schema.d.ts +1 -0
  173. package/dist/forms/effects/input/inputCounter.schema.js +12 -0
  174. package/dist/forms/effects/input/inputCycle.d.ts +19 -0
  175. package/dist/forms/effects/input/inputCycle.js +93 -0
  176. package/dist/forms/effects/input/inputCycle.schema.d.ts +1 -0
  177. package/dist/forms/effects/input/inputCycle.schema.js +11 -0
  178. package/dist/forms/effects/input/inputDepth.d.ts +11 -0
  179. package/dist/forms/effects/input/inputDepth.js +31 -0
  180. package/dist/forms/effects/input/inputDepth.schema.d.ts +1 -0
  181. package/dist/forms/effects/input/inputDepth.schema.js +11 -0
  182. package/dist/forms/effects/input/inputDraw.d.ts +13 -0
  183. package/dist/forms/effects/input/inputDraw.js +27 -0
  184. package/dist/forms/effects/input/inputDraw.schema.d.ts +1 -0
  185. package/dist/forms/effects/input/inputDraw.schema.js +12 -0
  186. package/dist/forms/effects/input/inputFlap.d.ts +9 -0
  187. package/dist/forms/effects/input/inputFlap.js +24 -0
  188. package/dist/forms/effects/input/inputFlap.schema.d.ts +1 -0
  189. package/dist/forms/effects/input/inputFlap.schema.js +10 -0
  190. package/dist/forms/effects/input/inputFloat.d.ts +12 -0
  191. package/dist/forms/effects/input/inputFloat.js +46 -0
  192. package/dist/forms/effects/input/inputFloat.schema.d.ts +1 -0
  193. package/dist/forms/effects/input/inputFloat.schema.js +10 -0
  194. package/dist/forms/effects/input/inputFlood.d.ts +11 -0
  195. package/dist/forms/effects/input/inputFlood.js +30 -0
  196. package/dist/forms/effects/input/inputFlood.schema.d.ts +1 -0
  197. package/dist/forms/effects/input/inputFlood.schema.js +11 -0
  198. package/dist/forms/effects/input/inputFrame.d.ts +18 -0
  199. package/dist/forms/effects/input/inputFrame.js +77 -0
  200. package/dist/forms/effects/input/inputFrame.schema.d.ts +1 -0
  201. package/dist/forms/effects/input/inputFrame.schema.js +13 -0
  202. package/dist/forms/effects/input/inputIcon.d.ts +11 -0
  203. package/dist/forms/effects/input/inputIcon.js +18 -0
  204. package/dist/forms/effects/input/inputIcon.schema.d.ts +1 -0
  205. package/dist/forms/effects/input/inputIcon.schema.js +11 -0
  206. package/dist/forms/effects/input/inputNotch.d.ts +9 -0
  207. package/dist/forms/effects/input/inputNotch.js +70 -0
  208. package/dist/forms/effects/input/inputNotch.schema.d.ts +1 -0
  209. package/dist/forms/effects/input/inputNotch.schema.js +10 -0
  210. package/dist/forms/effects/input/inputReveal.d.ts +15 -0
  211. package/dist/forms/effects/input/inputReveal.js +56 -0
  212. package/dist/forms/effects/input/inputReveal.schema.d.ts +1 -0
  213. package/dist/forms/effects/input/inputReveal.schema.js +16 -0
  214. package/dist/forms/effects/input/inputRing.d.ts +13 -0
  215. package/dist/forms/effects/input/inputRing.js +27 -0
  216. package/dist/forms/effects/input/inputRing.schema.d.ts +1 -0
  217. package/dist/forms/effects/input/inputRing.schema.js +12 -0
  218. package/dist/forms/effects/input/inputRise.d.ts +9 -0
  219. package/dist/forms/effects/input/inputRise.js +22 -0
  220. package/dist/forms/effects/input/inputRise.schema.d.ts +1 -0
  221. package/dist/forms/effects/input/inputRise.schema.js +10 -0
  222. package/dist/forms/effects/input/inputSearch.d.ts +9 -0
  223. package/dist/forms/effects/input/inputSearch.js +37 -0
  224. package/dist/forms/effects/input/inputSearch.schema.d.ts +1 -0
  225. package/dist/forms/effects/input/inputSearch.schema.js +10 -0
  226. package/dist/forms/effects/input/inputSkeleton.d.ts +7 -0
  227. package/dist/forms/effects/input/inputSkeleton.js +41 -0
  228. package/dist/forms/effects/input/inputSkeleton.schema.d.ts +1 -0
  229. package/dist/forms/effects/input/inputSkeleton.schema.js +9 -0
  230. package/dist/forms/effects/input/inputSpotlight.d.ts +9 -0
  231. package/dist/forms/effects/input/inputSpotlight.js +20 -0
  232. package/dist/forms/effects/input/inputSpotlight.schema.d.ts +1 -0
  233. package/dist/forms/effects/input/inputSpotlight.schema.js +10 -0
  234. package/dist/forms/effects/input/inputStrength.d.ts +9 -0
  235. package/dist/forms/effects/input/inputStrength.js +29 -0
  236. package/dist/forms/effects/input/inputStrength.schema.d.ts +1 -0
  237. package/dist/forms/effects/input/inputStrength.schema.js +10 -0
  238. package/dist/forms/effects/input/inputSwap.d.ts +11 -0
  239. package/dist/forms/effects/input/inputSwap.js +39 -0
  240. package/dist/forms/effects/input/inputSwap.schema.d.ts +1 -0
  241. package/dist/forms/effects/input/inputSwap.schema.js +11 -0
  242. package/dist/forms/effects/input/inputUnderline.d.ts +13 -0
  243. package/dist/forms/effects/input/inputUnderline.js +36 -0
  244. package/dist/forms/effects/input/inputUnderline.schema.d.ts +1 -0
  245. package/dist/forms/effects/input/inputUnderline.schema.js +18 -0
  246. package/dist/forms/effects/input/inputWave.d.ts +11 -0
  247. package/dist/forms/effects/input/inputWave.js +23 -0
  248. package/dist/forms/effects/input/inputWave.schema.d.ts +1 -0
  249. package/dist/forms/effects/input/inputWave.schema.js +11 -0
  250. package/dist/forms/effects/input/inputWavy.d.ts +11 -0
  251. package/dist/forms/effects/input/inputWavy.js +53 -0
  252. package/dist/forms/effects/input/inputWavy.schema.d.ts +1 -0
  253. package/dist/forms/effects/input/inputWavy.schema.js +11 -0
  254. package/dist/forms/effects/kit.d.ts +213 -0
  255. package/dist/forms/effects/kit.js +226 -0
  256. package/dist/forms/effects/picker/chipPop.d.ts +7 -0
  257. package/dist/forms/effects/picker/chipPop.js +28 -0
  258. package/dist/forms/effects/picker/chipPop.schema.d.ts +1 -0
  259. package/dist/forms/effects/picker/chipPop.schema.js +9 -0
  260. package/dist/forms/effects/picker/listHighlight.d.ts +9 -0
  261. package/dist/forms/effects/picker/listHighlight.js +42 -0
  262. package/dist/forms/effects/picker/listHighlight.schema.d.ts +1 -0
  263. package/dist/forms/effects/picker/listHighlight.schema.js +10 -0
  264. package/dist/forms/effects/picker/listMatch.d.ts +7 -0
  265. package/dist/forms/effects/picker/listMatch.js +21 -0
  266. package/dist/forms/effects/picker/listMatch.schema.d.ts +1 -0
  267. package/dist/forms/effects/picker/listMatch.schema.js +9 -0
  268. package/dist/forms/effects/picker/pickerArrow.d.ts +9 -0
  269. package/dist/forms/effects/picker/pickerArrow.js +17 -0
  270. package/dist/forms/effects/picker/pickerArrow.schema.d.ts +1 -0
  271. package/dist/forms/effects/picker/pickerArrow.schema.js +10 -0
  272. package/dist/forms/effects/picker/pickerCheck.d.ts +7 -0
  273. package/dist/forms/effects/picker/pickerCheck.js +31 -0
  274. package/dist/forms/effects/picker/pickerCheck.schema.d.ts +1 -0
  275. package/dist/forms/effects/picker/pickerCheck.schema.js +9 -0
  276. package/dist/forms/effects/picker/pickerOpen.d.ts +12 -0
  277. package/dist/forms/effects/picker/pickerOpen.js +34 -0
  278. package/dist/forms/effects/picker/pickerOpen.schema.d.ts +1 -0
  279. package/dist/forms/effects/picker/pickerOpen.schema.js +16 -0
  280. package/dist/forms/effects/picker/pickerSheet.d.ts +9 -0
  281. package/dist/forms/effects/picker/pickerSheet.js +47 -0
  282. package/dist/forms/effects/picker/pickerSheet.schema.d.ts +1 -0
  283. package/dist/forms/effects/picker/pickerSheet.schema.js +10 -0
  284. package/dist/forms/effects/picker/pickerStagger.d.ts +9 -0
  285. package/dist/forms/effects/picker/pickerStagger.js +31 -0
  286. package/dist/forms/effects/picker/pickerStagger.schema.d.ts +1 -0
  287. package/dist/forms/effects/picker/pickerStagger.schema.js +10 -0
  288. package/dist/forms/effects/radio/radioCard.d.ts +10 -0
  289. package/dist/forms/effects/radio/radioCard.js +15 -0
  290. package/dist/forms/effects/radio/radioCard.schema.d.ts +1 -0
  291. package/dist/forms/effects/radio/radioCard.schema.js +9 -0
  292. package/dist/forms/effects/radio/radioCircle.d.ts +9 -0
  293. package/dist/forms/effects/radio/radioCircle.js +49 -0
  294. package/dist/forms/effects/radio/radioCircle.schema.d.ts +1 -0
  295. package/dist/forms/effects/radio/radioCircle.schema.js +10 -0
  296. package/dist/forms/effects/radio/radioDot.d.ts +7 -0
  297. package/dist/forms/effects/radio/radioDot.js +10 -0
  298. package/dist/forms/effects/radio/radioDot.schema.d.ts +1 -0
  299. package/dist/forms/effects/radio/radioDot.schema.js +9 -0
  300. package/dist/forms/effects/radio/radioEmoji.d.ts +9 -0
  301. package/dist/forms/effects/radio/radioEmoji.js +94 -0
  302. package/dist/forms/effects/radio/radioEmoji.schema.d.ts +1 -0
  303. package/dist/forms/effects/radio/radioEmoji.schema.js +10 -0
  304. package/dist/forms/effects/radio/radioPulse.d.ts +9 -0
  305. package/dist/forms/effects/radio/radioPulse.js +24 -0
  306. package/dist/forms/effects/radio/radioPulse.schema.d.ts +1 -0
  307. package/dist/forms/effects/radio/radioPulse.schema.js +10 -0
  308. package/dist/forms/effects/radio/radioScale.d.ts +9 -0
  309. package/dist/forms/effects/radio/radioScale.js +73 -0
  310. package/dist/forms/effects/radio/radioScale.schema.d.ts +1 -0
  311. package/dist/forms/effects/radio/radioScale.schema.js +10 -0
  312. package/dist/forms/effects/radio/radioSegment.d.ts +7 -0
  313. package/dist/forms/effects/radio/radioSegment.js +52 -0
  314. package/dist/forms/effects/radio/radioSegment.schema.d.ts +1 -0
  315. package/dist/forms/effects/radio/radioSegment.schema.js +9 -0
  316. package/dist/forms/effects/radio/radioStars.d.ts +15 -0
  317. package/dist/forms/effects/radio/radioStars.js +125 -0
  318. package/dist/forms/effects/radio/radioStars.schema.d.ts +1 -0
  319. package/dist/forms/effects/radio/radioStars.schema.js +13 -0
  320. package/dist/forms/effects/radio/radioTravel.d.ts +9 -0
  321. package/dist/forms/effects/radio/radioTravel.js +49 -0
  322. package/dist/forms/effects/radio/radioTravel.schema.d.ts +1 -0
  323. package/dist/forms/effects/radio/radioTravel.schema.js +10 -0
  324. package/dist/forms/effects/radio/radioUnderline.d.ts +9 -0
  325. package/dist/forms/effects/radio/radioUnderline.js +61 -0
  326. package/dist/forms/effects/radio/radioUnderline.schema.d.ts +1 -0
  327. package/dist/forms/effects/radio/radioUnderline.schema.js +10 -0
  328. package/dist/forms/effects/radio/shape.d.ts +13 -0
  329. package/dist/forms/effects/radio/shape.js +61 -0
  330. package/dist/forms/effects/range/rangeBubble.d.ts +9 -0
  331. package/dist/forms/effects/range/rangeBubble.js +54 -0
  332. package/dist/forms/effects/range/rangeBubble.schema.d.ts +1 -0
  333. package/dist/forms/effects/range/rangeBubble.schema.js +10 -0
  334. package/dist/forms/effects/range/rangeElastic.d.ts +9 -0
  335. package/dist/forms/effects/range/rangeElastic.js +101 -0
  336. package/dist/forms/effects/range/rangeElastic.schema.d.ts +1 -0
  337. package/dist/forms/effects/range/rangeElastic.schema.js +10 -0
  338. package/dist/forms/effects/range/rangeFace.d.ts +11 -0
  339. package/dist/forms/effects/range/rangeFace.js +68 -0
  340. package/dist/forms/effects/range/rangeFace.schema.d.ts +1 -0
  341. package/dist/forms/effects/range/rangeFace.schema.js +11 -0
  342. package/dist/forms/effects/range/rangeFill.d.ts +7 -0
  343. package/dist/forms/effects/range/rangeFill.js +29 -0
  344. package/dist/forms/effects/range/rangeFill.schema.d.ts +1 -0
  345. package/dist/forms/effects/range/rangeFill.schema.js +9 -0
  346. package/dist/forms/effects/range/rangeHistogram.d.ts +14 -0
  347. package/dist/forms/effects/range/rangeHistogram.js +65 -0
  348. package/dist/forms/effects/range/rangeHistogram.schema.d.ts +1 -0
  349. package/dist/forms/effects/range/rangeHistogram.schema.js +11 -0
  350. package/dist/forms/effects/range/rangeThumb.d.ts +9 -0
  351. package/dist/forms/effects/range/rangeThumb.js +39 -0
  352. package/dist/forms/effects/range/rangeThumb.schema.d.ts +1 -0
  353. package/dist/forms/effects/range/rangeThumb.schema.js +10 -0
  354. package/dist/forms/effects/range/rangeTicks.d.ts +9 -0
  355. package/dist/forms/effects/range/rangeTicks.js +44 -0
  356. package/dist/forms/effects/range/rangeTicks.schema.d.ts +1 -0
  357. package/dist/forms/effects/range/rangeTicks.schema.js +18 -0
  358. package/dist/forms/effects/ring.d.ts +5 -0
  359. package/dist/forms/effects/ring.js +12 -0
  360. package/dist/forms/effects/step/stepProgress.d.ts +9 -0
  361. package/dist/forms/effects/step/stepProgress.js +35 -0
  362. package/dist/forms/effects/step/stepProgress.schema.d.ts +1 -0
  363. package/dist/forms/effects/step/stepProgress.schema.js +10 -0
  364. package/dist/forms/effects/step/stepSlide.d.ts +9 -0
  365. package/dist/forms/effects/step/stepSlide.js +50 -0
  366. package/dist/forms/effects/step/stepSlide.schema.d.ts +1 -0
  367. package/dist/forms/effects/step/stepSlide.schema.js +10 -0
  368. package/dist/forms/effects/switch/switchBulb.d.ts +9 -0
  369. package/dist/forms/effects/switch/switchBulb.js +70 -0
  370. package/dist/forms/effects/switch/switchBulb.schema.d.ts +1 -0
  371. package/dist/forms/effects/switch/switchBulb.schema.js +10 -0
  372. package/dist/forms/effects/switch/switchDayNight.d.ts +15 -0
  373. package/dist/forms/effects/switch/switchDayNight.js +96 -0
  374. package/dist/forms/effects/switch/switchDayNight.schema.d.ts +1 -0
  375. package/dist/forms/effects/switch/switchDayNight.schema.js +13 -0
  376. package/dist/forms/effects/switch/switchFace.d.ts +7 -0
  377. package/dist/forms/effects/switch/switchFace.js +75 -0
  378. package/dist/forms/effects/switch/switchFace.schema.d.ts +1 -0
  379. package/dist/forms/effects/switch/switchFace.schema.js +9 -0
  380. package/dist/forms/effects/switch/switchFlip.d.ts +7 -0
  381. package/dist/forms/effects/switch/switchFlip.js +45 -0
  382. package/dist/forms/effects/switch/switchFlip.schema.d.ts +1 -0
  383. package/dist/forms/effects/switch/switchFlip.schema.js +9 -0
  384. package/dist/forms/effects/switch/switchGoo.d.ts +7 -0
  385. package/dist/forms/effects/switch/switchGoo.js +95 -0
  386. package/dist/forms/effects/switch/switchGoo.schema.d.ts +1 -0
  387. package/dist/forms/effects/switch/switchGoo.schema.js +9 -0
  388. package/dist/forms/effects/switch/switchIcon.d.ts +9 -0
  389. package/dist/forms/effects/switch/switchIcon.js +63 -0
  390. package/dist/forms/effects/switch/switchIcon.schema.d.ts +1 -0
  391. package/dist/forms/effects/switch/switchIcon.schema.js +10 -0
  392. package/dist/forms/effects/switch/switchLabels.d.ts +11 -0
  393. package/dist/forms/effects/switch/switchLabels.js +55 -0
  394. package/dist/forms/effects/switch/switchLabels.schema.d.ts +1 -0
  395. package/dist/forms/effects/switch/switchLabels.schema.js +11 -0
  396. package/dist/forms/effects/switch/switchMorph.d.ts +9 -0
  397. package/dist/forms/effects/switch/switchMorph.js +22 -0
  398. package/dist/forms/effects/switch/switchMorph.schema.d.ts +1 -0
  399. package/dist/forms/effects/switch/switchMorph.schema.js +10 -0
  400. package/dist/forms/effects/switch/switchNeon.d.ts +11 -0
  401. package/dist/forms/effects/switch/switchNeon.js +53 -0
  402. package/dist/forms/effects/switch/switchNeon.schema.d.ts +1 -0
  403. package/dist/forms/effects/switch/switchNeon.schema.js +11 -0
  404. package/dist/forms/effects/switch/switchSlide.d.ts +7 -0
  405. package/dist/forms/effects/switch/switchSlide.js +11 -0
  406. package/dist/forms/effects/switch/switchSlide.schema.d.ts +1 -0
  407. package/dist/forms/effects/switch/switchSlide.schema.js +9 -0
  408. package/dist/forms/effects/switch/switchStretch.d.ts +9 -0
  409. package/dist/forms/effects/switch/switchStretch.js +21 -0
  410. package/dist/forms/effects/switch/switchStretch.schema.d.ts +1 -0
  411. package/dist/forms/effects/switch/switchStretch.schema.js +10 -0
  412. package/dist/forms/effects/valid/validAsync.d.ts +7 -0
  413. package/dist/forms/effects/valid/validAsync.js +36 -0
  414. package/dist/forms/effects/valid/validAsync.schema.d.ts +1 -0
  415. package/dist/forms/effects/valid/validAsync.schema.js +9 -0
  416. package/dist/forms/effects/valid/validBubble.d.ts +7 -0
  417. package/dist/forms/effects/valid/validBubble.js +61 -0
  418. package/dist/forms/effects/valid/validBubble.schema.d.ts +1 -0
  419. package/dist/forms/effects/valid/validBubble.schema.js +9 -0
  420. package/dist/forms/effects/valid/validCheck.d.ts +9 -0
  421. package/dist/forms/effects/valid/validCheck.js +50 -0
  422. package/dist/forms/effects/valid/validCheck.schema.d.ts +1 -0
  423. package/dist/forms/effects/valid/validCheck.schema.js +10 -0
  424. package/dist/forms/effects/valid/validColor.d.ts +11 -0
  425. package/dist/forms/effects/valid/validColor.js +28 -0
  426. package/dist/forms/effects/valid/validColor.schema.d.ts +1 -0
  427. package/dist/forms/effects/valid/validColor.schema.js +11 -0
  428. package/dist/forms/effects/valid/validFlash.d.ts +9 -0
  429. package/dist/forms/effects/valid/validFlash.js +36 -0
  430. package/dist/forms/effects/valid/validFlash.schema.d.ts +1 -0
  431. package/dist/forms/effects/valid/validFlash.schema.js +10 -0
  432. package/dist/forms/effects/valid/validMessage.d.ts +7 -0
  433. package/dist/forms/effects/valid/validMessage.js +24 -0
  434. package/dist/forms/effects/valid/validMessage.schema.d.ts +1 -0
  435. package/dist/forms/effects/valid/validMessage.schema.js +9 -0
  436. package/dist/forms/effects/valid/validShake.d.ts +9 -0
  437. package/dist/forms/effects/valid/validShake.js +37 -0
  438. package/dist/forms/effects/valid/validShake.schema.d.ts +1 -0
  439. package/dist/forms/effects/valid/validShake.schema.js +10 -0
  440. package/dist/forms/effects/valid/validSwap.d.ts +7 -0
  441. package/dist/forms/effects/valid/validSwap.js +33 -0
  442. package/dist/forms/effects/valid/validSwap.schema.d.ts +1 -0
  443. package/dist/forms/effects/valid/validSwap.schema.js +9 -0
  444. package/dist/forms/errors.d.ts +12 -0
  445. package/dist/forms/errors.js +20 -0
  446. package/dist/forms/file.d.ts +1 -0
  447. package/dist/forms/file.js +268 -0
  448. package/dist/forms/files.d.ts +7 -0
  449. package/dist/forms/files.js +29 -0
  450. package/dist/forms/formSteps.d.ts +9 -0
  451. package/dist/forms/formSteps.js +6 -0
  452. package/dist/forms/ids.d.ts +17 -0
  453. package/dist/forms/ids.js +13 -0
  454. package/dist/forms/inline.d.ts +3 -0
  455. package/dist/forms/inline.js +128 -0
  456. package/dist/forms/number.d.ts +1 -0
  457. package/dist/forms/number.js +67 -0
  458. package/dist/forms/otp.d.ts +4 -0
  459. package/dist/forms/otp.js +171 -0
  460. package/dist/forms/picker.d.ts +1 -0
  461. package/dist/forms/picker.js +303 -0
  462. package/dist/forms/range.d.ts +3 -0
  463. package/dist/forms/range.js +223 -0
  464. package/dist/forms/registry.d.ts +4 -0
  465. package/dist/forms/registry.js +133 -0
  466. package/dist/forms/reveal.d.ts +6 -0
  467. package/dist/forms/reveal.js +51 -0
  468. package/dist/forms/runtime/focus.d.ts +16 -0
  469. package/dist/forms/runtime/focus.js +55 -0
  470. package/dist/forms/runtime/listMatch.d.ts +2 -0
  471. package/dist/forms/runtime/listMatch.js +33 -0
  472. package/dist/forms/runtime/origin.d.ts +10 -0
  473. package/dist/forms/runtime/origin.js +25 -0
  474. package/dist/forms/runtime/placePopup.d.ts +10 -0
  475. package/dist/forms/runtime/placePopup.js +55 -0
  476. package/dist/forms/runtime/useFlip.d.ts +7 -0
  477. package/dist/forms/runtime/useFlip.js +38 -0
  478. package/dist/forms/runtime/useMorph.d.ts +8 -0
  479. package/dist/forms/runtime/useMorph.js +56 -0
  480. package/dist/forms/runtime/useOffScreen.d.ts +3 -0
  481. package/dist/forms/runtime/useOffScreen.js +16 -0
  482. package/dist/forms/runtime/useSwitchDrag.d.ts +8 -0
  483. package/dist/forms/runtime/useSwitchDrag.js +83 -0
  484. package/dist/forms/runtime/vanish.d.ts +6 -0
  485. package/dist/forms/runtime/vanish.js +185 -0
  486. package/dist/forms/steps.d.ts +1 -0
  487. package/dist/forms/steps.js +149 -0
  488. package/dist/forms/swap.d.ts +7 -0
  489. package/dist/forms/swap.js +149 -0
  490. package/dist/forms/switch.d.ts +1 -0
  491. package/dist/forms/switch.js +99 -0
  492. package/dist/forms/tools.d.ts +3 -0
  493. package/dist/forms/tools.js +248 -0
  494. package/dist/forms/types.d.ts +161 -0
  495. package/dist/forms/types.js +5 -0
  496. package/dist/index.d.ts +234 -0
  497. package/dist/index.js +119 -0
  498. package/dist/schema/forms.d.ts +3 -0
  499. package/dist/schema/forms.js +194 -0
  500. package/dist/schema/index.d.ts +2 -1
  501. package/dist/schema/index.js +3 -1
  502. package/dist/schema/types.d.ts +2 -2
  503. package/dist/schema/types.js +1 -0
  504. package/guides/README.md +62 -61
  505. package/guides/contact.md +100 -77
  506. package/guides/forms.md +105 -0
  507. package/package.json +1 -1
  508. package/styles/form.css +594 -0
  509. package/theme.css +6 -1
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from "react";
2
+ import type { FormEffect } from "../types.js";
3
+ /** The effects as a list, each id once (the last one wins). */
4
+ export declare function effectList(effect: FormEffect | readonly FormEffect[] | undefined): readonly FormEffect[];
5
+ /** `{uid}` in a var's value becomes this control's id prefix (an anchor name, `url(#{uid}-goo)` for a filter). */
6
+ export declare function withUid(vars: Record<string, unknown>, uid: string): Record<string, unknown>;
7
+ /** The node shows something. */
8
+ export declare const filled: (node: ReactNode) => boolean;
@@ -0,0 +1,18 @@
1
+ // Small pure helpers every form control shares: the effects as a list, `{uid}` in their vars, whether a node shows
2
+ // anything. No React state, no "use client": a plain module.
3
+ /** The effects as a list, each id once (the last one wins). */
4
+ export function effectList(effect) {
5
+ if (!effect)
6
+ return [];
7
+ const list = Array.isArray(effect) ? effect : [effect];
8
+ return [...new Map(list.map((e) => [e.id, e])).values()];
9
+ }
10
+ /** `{uid}` in a var's value becomes this control's id prefix (an anchor name, `url(#{uid}-goo)` for a filter). */
11
+ export function withUid(vars, uid) {
12
+ const out = {};
13
+ for (const [k, value] of Object.entries(vars))
14
+ out[k] = typeof value === "string" ? value.split("{uid}").join(uid) : value;
15
+ return out;
16
+ }
17
+ /** The node shows something. */
18
+ export const filled = (node) => node !== undefined && node !== null && node !== false && node !== "";
@@ -0,0 +1,11 @@
1
+ /** The card's states (they hold under reduced motion) for an effect's root (`choiceOf` or `radiosOf`). */
2
+ export declare function cardState(root: string, id: string): string;
3
+ /** The card's motion: the light fades in, the border turns, and a mouse lifts it a little. */
4
+ export declare function cardMotion(root: string, id: string): string;
5
+ /** The card's layer: the panel, with the light inside it. It shows a state, so it stays under reduced motion. */
6
+ export declare const CARD_LAYER: {
7
+ readonly slot: "row";
8
+ readonly part: "card";
9
+ readonly children: readonly ["tint"];
10
+ readonly keep: true;
11
+ };
@@ -0,0 +1,52 @@
1
+ // The card both `checkCard` and `radioCard` turn each option into: a bordered panel holding the box, the words and the
2
+ // help, lit when chosen. The panel is a `row` layer, so the option's real label stays the whole card.
3
+ import { at, inItem, choiceLayer, choiceChild, CHECKED, KEYED, ROW, timed, whenItemHover } from "./kit.js";
4
+ /** The card's states (they hold under reduced motion) for an effect's root (`choiceOf` or `radiosOf`). */
5
+ export function cardState(root, id) {
6
+ const CARD = choiceLayer(id, "card");
7
+ const TINT = choiceChild(id, "tint", "card");
8
+ return ` ${at(`${root} ${ROW}`)} {
9
+ padding: 0.875rem 1rem;
10
+ }
11
+ ${at(inItem(root, "", CARD))} {
12
+ border: 1px solid var(--color-sx-border, currentColor);
13
+ border-radius: var(--radius-sx-card, 0.75rem);
14
+ background: var(--color-sx-secondary, Canvas);
15
+ }
16
+ ${at(inItem(root, "", TINT))} {
17
+ position: absolute;
18
+ inset: 0;
19
+ border-radius: inherit;
20
+ background: color-mix(in oklab, var(--color-sx-primary) 7%, transparent);
21
+ opacity: 0;
22
+ }
23
+ ${at(inItem(root, CHECKED, CARD))} {
24
+ border-color: var(--color-sx-primary, currentColor);
25
+ outline: 1px solid var(--color-sx-primary, currentColor);
26
+ outline-offset: -2px;
27
+ }
28
+ ${at(inItem(root, CHECKED, TINT))} {
29
+ opacity: 1;
30
+ }
31
+ ${at(inItem(root, KEYED, CARD))} {
32
+ outline: 2px solid var(--color-sx-primary, currentColor);
33
+ outline-offset: 2px;
34
+ }`;
35
+ }
36
+ /** The card's motion: the light fades in, the border turns, and a mouse lifts it a little. */
37
+ export function cardMotion(root, id) {
38
+ const CARD = choiceLayer(id, "card");
39
+ const TINT = choiceChild(id, "tint", "card");
40
+ return ` ${at(inItem(root, "", CARD))} {
41
+ ${timed(id, "border-color")}
42
+ }
43
+ ${at(inItem(root, "", TINT))} {
44
+ ${timed(id, "opacity")}
45
+ }
46
+ ${at(inItem(root, "", ROW))} {
47
+ ${timed(id, "translate")}
48
+ }
49
+ ${whenItemHover(root, ROW, "translate: 0 -2px;")}`;
50
+ }
51
+ /** The card's layer: the panel, with the light inside it. It shows a state, so it stays under reduced motion. */
52
+ export const CARD_LAYER = { slot: "row", part: "card", children: ["tint"], keep: true };
@@ -0,0 +1,10 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckCardOptions {
3
+ /** Seconds each change takes. Default `0.2`. */
4
+ readonly duration?: number;
5
+ }
6
+ /**
7
+ * The option becomes a card holding the box, the words and the help: lit and outlined when checked, lifted a little
8
+ * under the mouse. The whole card is the label, so a click anywhere on it toggles it.
9
+ */
10
+ export declare function checkCard(options?: CheckCardOptions): FormEffect;
@@ -0,0 +1,15 @@
1
+ import { CARD_LAYER, cardMotion, cardState } from "../cards.js";
2
+ import { choiceOf, defineForm, varName } from "../kit.js";
3
+ const ID = "checkCard";
4
+ /**
5
+ * The option becomes a card holding the box, the words and the help: lit and outlined when checked, lifted a little
6
+ * under the mouse. The whole card is the label, so a click anywhere on it toggles it.
7
+ */
8
+ export function checkCard(options = {}) {
9
+ return defineForm(ID, cardMotion(choiceOf(ID), ID), {
10
+ fits: ["checkbox"],
11
+ state: cardState(choiceOf(ID), ID),
12
+ vars: { [varName(ID, "time")]: `${options.duration ?? 0.2}s` },
13
+ layers: [CARD_LAYER],
14
+ });
15
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_CARD_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_CARD_SCHEMA = defineSchema()({
3
+ id: "checkCard",
4
+ family: "form",
5
+ factory: "checkCard",
6
+ fields: {
7
+ duration: { kind: "number", label: "Duration", min: 0.05, max: 0.6, step: 0.05, unit: "s", default: 0.2 },
8
+ },
9
+ });
@@ -0,0 +1,18 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckConfettiOptions {
3
+ /** Picked at random for each piece. Default `["var(--color-sx-accent)", "var(--color-sx-primary)", "var(--color-sx-success)"]`. */
4
+ readonly colors?: readonly string[];
5
+ /** How many pieces, at most 30. Default `24`. */
6
+ readonly count?: number;
7
+ /** Degrees either side of straight up. Default `60`. */
8
+ readonly spread?: number;
9
+ /** A piece's width, px. Default `8`. */
10
+ readonly size?: number;
11
+ /** Seconds they fall. Default `1.6`. */
12
+ readonly duration?: number;
13
+ }
14
+ /**
15
+ * Confetti bursts from the box each time it is checked by hand, on the page's one burst canvas (shared with `Button`'s
16
+ * particles; gone when the last piece lands). Nothing under reduced motion. It runs code: the page needs `"use client"`.
17
+ */
18
+ export declare function checkConfetti(options?: CheckConfettiOptions): FormEffect;
@@ -0,0 +1,38 @@
1
+ import { emit } from "../../../buttons/runtime/burst.js";
2
+ import { CONFETTI } from "../../../buttons/runtime/particles.js";
3
+ import { stillMotion } from "../../../buttons/runtime/press.js";
4
+ import { canvasColors } from "../../../buttons/effects/press/throw.js";
5
+ import { defineForm } from "../kit.js";
6
+ /**
7
+ * Confetti bursts from the box each time it is checked by hand, on the page's one burst canvas (shared with `Button`'s
8
+ * particles; gone when the last piece lands). Nothing under reduced motion. It runs code: the page needs `"use client"`.
9
+ */
10
+ export function checkConfetti(options = {}) {
11
+ const colors = options.colors ?? ["var(--color-sx-accent)", "var(--color-sx-primary)", "var(--color-sx-success)"];
12
+ const count = options.count ?? 24;
13
+ const spread = options.spread ?? 60;
14
+ const size = options.size ?? 8;
15
+ const life = options.duration ?? 1.6;
16
+ return defineForm("checkConfetti", "", {
17
+ fits: ["checkbox"],
18
+ program: {
19
+ signature: JSON.stringify({ colors, count, spread, size, life }),
20
+ attach: (root) => {
21
+ const fire = (event) => {
22
+ const input = event.target;
23
+ if (!input || input.type !== "checkbox" || !input.checked || stillMotion())
24
+ return;
25
+ const box = (input.parentElement?.querySelector("[data-sx-choice-box]") ?? input).getBoundingClientRect();
26
+ emit(CONFETTI, box.left + box.width / 2, box.top + box.height / 2, count, {
27
+ colors: canvasColors(root, colors),
28
+ size,
29
+ life,
30
+ spread: (spread * Math.PI) / 180,
31
+ });
32
+ };
33
+ root.addEventListener("change", fire);
34
+ return () => root.removeEventListener("change", fire);
35
+ },
36
+ },
37
+ });
38
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_CONFETTI_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,13 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_CONFETTI_SCHEMA = defineSchema()({
3
+ id: "checkConfetti",
4
+ family: "form",
5
+ factory: "checkConfetti",
6
+ fields: {
7
+ colors: { kind: "colors", label: "Colours", min: 1, max: 6, default: ["var(--color-sx-accent)", "var(--color-sx-primary)", "var(--color-sx-success)"] },
8
+ count: { kind: "integer", label: "Pieces", min: 4, max: 30, default: 24 },
9
+ spread: { kind: "number", label: "Spread", min: 10, max: 120, step: 5, unit: "°", default: 60 },
10
+ size: { kind: "number", label: "Piece size", min: 4, max: 14, step: 1, unit: "px", default: 8 },
11
+ duration: { kind: "number", label: "Falls for", min: 0.6, max: 3, step: 0.05, unit: "s", default: 1.6 },
12
+ },
13
+ });
@@ -0,0 +1,7 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckDrawOptions {
3
+ /** Seconds the tick takes to draw. Default `0.25`. */
4
+ readonly duration?: number;
5
+ }
6
+ /** The tick draws itself into the box, stroke by stroke, a moment after the box fills. */
7
+ export declare function checkDraw(options?: CheckDrawOptions): FormEffect;
@@ -0,0 +1,12 @@
1
+ import { at, choiceOf, defineForm, v, varName } from "../kit.js";
2
+ const ID = "checkDraw";
3
+ const MARKS = `${choiceOf(ID)} [data-sx-mark]`;
4
+ // The tick (and the mixed dash) are the box's own paths with a dash: on, the dash runs from 1 to 0 and the line draws
5
+ // itself from its start. Without this the mark just appears. It starts a moment after the box fills.
6
+ const CSS = ` ${at(MARKS)} {
7
+ transition: stroke-dashoffset ${v(ID, "time")} ease-out calc(${v(ID, "time")} * 0.2);
8
+ }`;
9
+ /** The tick draws itself into the box, stroke by stroke, a moment after the box fills. */
10
+ export function checkDraw(options = {}) {
11
+ return defineForm(ID, CSS, { fits: ["checkbox"], vars: { [varName(ID, "time")]: `${options.duration ?? 0.25}s` } });
12
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_DRAW_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_DRAW_SCHEMA = defineSchema()({
3
+ id: "checkDraw",
4
+ family: "form",
5
+ factory: "checkDraw",
6
+ fields: {
7
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 0.8, step: 0.05, unit: "s", default: 0.25 },
8
+ },
9
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckHeartOptions {
3
+ /** The heart's colour once liked. Default `var(--color-sx-danger)`. */
4
+ readonly color?: string;
5
+ /** Seconds the pop and the burst take. Default `0.45`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** The box is a heart: liked, it fills, pops and throws a ring of dots (a "like" button that is a real checkbox). */
9
+ export declare function checkHeart(options?: CheckHeartOptions): FormEffect;
@@ -0,0 +1,84 @@
1
+ import { CHANGED, CHECKED, MARK, SPRING, at, choiceLayer, choiceOf, defineForm, inItem, v, varName } from "../kit.js";
2
+ const ID = "checkHeart";
3
+ const ROOT = choiceOf(ID);
4
+ const HEART = `${choiceLayer(ID, "heart")} [data-sx-choice-svg="heart"]`;
5
+ const SPARKS = choiceLayer(ID, "burst");
6
+ const SPARK = `${SPARKS} > [data-sx-choice-part]`;
7
+ const ANGLES = [0, 45, 90, 135, 180, 225, 270, 315];
8
+ // The box becomes a heart: an outline, filled once liked (a state: it holds under reduced motion). Liked by hand, it
9
+ // pops and throws eight dots out in a ring, which fade as they fly.
10
+ const STATE = ` ${at(ROOT)} {
11
+ --sx-choice-edge: transparent;
12
+ --sx-choice-bg: transparent;
13
+ --sx-choice-fill: transparent;
14
+ }
15
+ ${at(`${ROOT} ${MARK}`)} {
16
+ display: none;
17
+ }
18
+ ${at(HEART)} {
19
+ fill: transparent;
20
+ stroke: var(--sx-choice-line, currentColor);
21
+ stroke-width: 2;
22
+ stroke-linejoin: round;
23
+ transform-box: fill-box;
24
+ transform-origin: center;
25
+ }
26
+ ${at(inItem(ROOT, CHECKED, HEART))} {
27
+ fill: ${v(ID, "color")};
28
+ stroke: ${v(ID, "color")};
29
+ }`;
30
+ const CSS = ` ${at(HEART)} {
31
+ transition: fill ${v(ID, "time")}, stroke ${v(ID, "time")};
32
+ }
33
+ ${at(inItem(ROOT, `${CHECKED}${CHANGED}`, HEART))} {
34
+ animation: sx-form-checkHeart ${v(ID, "time")} ${SPRING};
35
+ }
36
+ ${at(SPARK)} {
37
+ position: absolute;
38
+ inset-block-start: 50%;
39
+ inset-inline-start: 50%;
40
+ inline-size: 0.25em;
41
+ block-size: 0.25em;
42
+ margin: -0.125em;
43
+ border-radius: 50%;
44
+ background: ${v(ID, "color")};
45
+ opacity: 0;
46
+ }
47
+ ${ANGLES.map((a, i) => ` ${at(`${SPARKS} > [data-sx-choice-part="s${i + 1}"]`)} { --sx-form-checkHeart-a: ${a}deg; }`).join("\n")}
48
+ ${at(inItem(ROOT, `${CHECKED}${CHANGED}`, SPARK))} {
49
+ animation: sx-form-checkHeart-burst ${v(ID, "time")} ease-out;
50
+ }
51
+ @keyframes sx-form-checkHeart {
52
+ 0% { scale: 0.6; }
53
+ 60% { scale: 1.25; }
54
+ 100% { scale: 1; }
55
+ }
56
+ @keyframes sx-form-checkHeart-burst {
57
+ 0% { translate: 0 0; scale: 1; opacity: 1; }
58
+ 100% {
59
+ translate: calc(cos(var(--sx-form-checkHeart-a)) * 1.5em) calc(sin(var(--sx-form-checkHeart-a)) * 1.5em);
60
+ scale: 0.3;
61
+ opacity: 0;
62
+ }
63
+ }`;
64
+ /** The box is a heart: liked, it fills, pops and throws a ring of dots (a "like" button that is a real checkbox). */
65
+ export function checkHeart(options = {}) {
66
+ return defineForm(ID, CSS, {
67
+ fits: ["checkbox"],
68
+ state: STATE,
69
+ vars: { [varName(ID, "color")]: options.color ?? "var(--color-sx-danger)", [varName(ID, "time")]: `${options.duration ?? 0.45}s` },
70
+ layers: [
71
+ {
72
+ slot: "box",
73
+ part: "heart",
74
+ keep: true,
75
+ svg: {
76
+ viewBox: "0 0 24 24",
77
+ children: [{ tag: "path", part: "heart", attrs: { d: "M12 20.5s-7.6-4.6-9.3-9.3C1.5 7.7 3.7 4.5 7.1 4.5c2 0 3.6 1.1 4.9 3 1.3-1.9 2.9-3 4.9-3 3.4 0 5.6 3.2 4.4 6.7-1.7 4.7-9.3 9.3-9.3 9.3Z" } }],
78
+ },
79
+ },
80
+ { slot: "halo", part: "burst", children: ANGLES.map((_, i) => `s${i + 1}`) },
81
+ ],
82
+ claims: ["mark"],
83
+ });
84
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_HEART_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_HEART_SCHEMA = defineSchema()({
3
+ id: "checkHeart",
4
+ family: "form",
5
+ factory: "checkHeart",
6
+ fields: {
7
+ color: { kind: "color", label: "Colour", default: "var(--color-sx-danger)" },
8
+ duration: { kind: "number", label: "Duration", min: 0.2, max: 1, step: 0.05, unit: "s", default: 0.45 },
9
+ },
10
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckJellyOptions {
3
+ /** How far it squashes, 0.1 to 0.4. Default `0.25`. */
4
+ readonly squash?: number;
5
+ /** Seconds it wobbles. Default `0.5`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** The box wobbles like jelly when checked: squashed, stretched, settling. */
9
+ export declare function checkJelly(options?: CheckJellyOptions): FormEffect;
@@ -0,0 +1,23 @@
1
+ import { BOX, CHANGED, CHECKED, at, choiceOf, defineForm, inItem, v, varName } from "../kit.js";
2
+ const ID = "checkJelly";
3
+ const SQ = v(ID, "squash");
4
+ // Plays when the user checks it (CHANGED), never for a box that loads checked: wide and flat, tall and thin, smaller
5
+ // and smaller wobbles, then still.
6
+ const CSS = ` ${at(inItem(choiceOf(ID), `${CHECKED}${CHANGED}`, BOX))} {
7
+ animation: sx-form-checkJelly ${v(ID, "time")} ease-out;
8
+ }
9
+ @keyframes sx-form-checkJelly {
10
+ 0%, 100% { scale: 1 1; }
11
+ 30% { scale: calc(1 + ${SQ}) calc(1 - ${SQ}); }
12
+ 45% { scale: calc(1 - ${SQ}) calc(1 + ${SQ}); }
13
+ 60% { scale: calc(1 + ${SQ} * 0.5) calc(1 - ${SQ} * 0.5); }
14
+ 75% { scale: calc(1 - ${SQ} * 0.2) calc(1 + ${SQ} * 0.2); }
15
+ }`;
16
+ /** The box wobbles like jelly when checked: squashed, stretched, settling. */
17
+ export function checkJelly(options = {}) {
18
+ return defineForm(ID, CSS, {
19
+ fits: ["checkbox"],
20
+ vars: { [varName(ID, "squash")]: options.squash ?? 0.25, [varName(ID, "time")]: `${options.duration ?? 0.5}s` },
21
+ claims: ["box"],
22
+ });
23
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_JELLY_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_JELLY_SCHEMA = defineSchema()({
3
+ id: "checkJelly",
4
+ family: "form",
5
+ factory: "checkJelly",
6
+ fields: {
7
+ squash: { kind: "number", label: "Squash", min: 0.1, max: 0.4, step: 0.01, default: 0.25 },
8
+ duration: { kind: "number", label: "Duration", min: 0.2, max: 1, step: 0.05, unit: "s", default: 0.5 },
9
+ },
10
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckMergeOptions {
3
+ /** The pill's colour, mixed light. Default `var(--color-sx-primary)`. */
4
+ readonly color?: string;
5
+ /** Seconds it takes. Default `0.2`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** Checked neighbours merge: their highlights join into one block, corners squaring where they meet. */
9
+ export declare function checkMerge(options?: CheckMergeOptions): FormEffect;
@@ -0,0 +1,37 @@
1
+ import { CHECKED, CHOICE, ITEM, at, choiceLayer, choiceOf, defineForm, inItem, v, varName } from "../kit.js";
2
+ const ID = "checkMerge";
3
+ const ROOT = choiceOf(ID);
4
+ const PILL = choiceLayer(ID, "pill");
5
+ const NEXT_ON = `:has(+ ${ITEM} ${CHOICE}:checked)`;
6
+ // Each checked option sits on a pill. Pills reach half the gap past their option, so two checked neighbours touch,
7
+ // and their facing corners square off: a run of checked options reads as one block (in a CheckGroup, or any stack of
8
+ // checkboxes with the group's 0.5rem gap). The pills are the state; only how they appear moves.
9
+ const STATE = ` ${at(PILL)} {
10
+ inset: -0.25rem -0.5rem;
11
+ border-radius: 0.625rem;
12
+ background: color-mix(in oklab, ${v(ID, "color")} 14%, transparent);
13
+ opacity: 0;
14
+ }
15
+ ${at(inItem(ROOT, CHECKED, PILL))} {
16
+ opacity: 1;
17
+ }
18
+ ${at(inItem(ROOT, `${CHECKED}${NEXT_ON}`, PILL))} {
19
+ border-end-start-radius: 0;
20
+ border-end-end-radius: 0;
21
+ }
22
+ ${at(`${ITEM}:has(${CHOICE}:checked) + ${ROOT}${CHECKED} ${PILL}`)} {
23
+ border-start-start-radius: 0;
24
+ border-start-end-radius: 0;
25
+ }`;
26
+ const CSS = ` ${at(PILL)} {
27
+ transition: opacity ${v(ID, "time")} ease-out, border-radius ${v(ID, "time")} ease-out;
28
+ }`;
29
+ /** Checked neighbours merge: their highlights join into one block, corners squaring where they meet. */
30
+ export function checkMerge(options = {}) {
31
+ return defineForm(ID, CSS, {
32
+ fits: ["checkbox"],
33
+ state: STATE,
34
+ vars: { [varName(ID, "color")]: options.color ?? "var(--color-sx-primary)", [varName(ID, "time")]: `${options.duration ?? 0.2}s` },
35
+ layers: [{ slot: "row", part: "pill", keep: true }],
36
+ });
37
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_MERGE_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_MERGE_SCHEMA = defineSchema()({
3
+ id: "checkMerge",
4
+ family: "form",
5
+ factory: "checkMerge",
6
+ fields: {
7
+ color: { kind: "color", label: "Colour", default: "var(--color-sx-primary)" },
8
+ duration: { kind: "number", label: "Duration", min: 0.05, max: 0.5, step: 0.05, unit: "s", default: 0.2 },
9
+ },
10
+ });
@@ -0,0 +1,7 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckMixedOptions {
3
+ /** Seconds each change takes. Default `0.25`. */
4
+ readonly duration?: number;
5
+ }
6
+ /** The mixed dash grows out from the middle, and gives way to the tick when every item is on. */
7
+ export declare function checkMixed(options?: CheckMixedOptions): FormEffect;
@@ -0,0 +1,25 @@
1
+ import { MIXED, SPRING, at, choiceOf, defineForm, inItem, v, varName } from "../kit.js";
2
+ const ID = "checkMixed";
3
+ const ROOT = choiceOf(ID);
4
+ const DASH = '[data-sx-mark="dash"]';
5
+ const TICK = '[data-sx-mark="tick"]';
6
+ // The mixed state (`indeterminate`, a "select all" box when some are on) shows a dash. Here it grows out from the
7
+ // middle instead of drawing from one end, and on the way to fully on it shrinks away while the tick draws in after it.
8
+ // Under reduced motion the box's own dash simply shows.
9
+ const CSS = ` ${at(`${ROOT} ${DASH}`)} {
10
+ stroke-dashoffset: 0;
11
+ scale: 0 1;
12
+ opacity: 0;
13
+ transition: scale ${v(ID, "time")} ${SPRING}, opacity ${v(ID, "time")};
14
+ }
15
+ ${at(inItem(ROOT, MIXED, DASH))} {
16
+ scale: 1 1;
17
+ opacity: 1;
18
+ }
19
+ ${at(`${ROOT} ${TICK}`)} {
20
+ transition: stroke-dashoffset ${v(ID, "time")} ease-out calc(${v(ID, "time")} * 0.5);
21
+ }`;
22
+ /** The mixed dash grows out from the middle, and gives way to the tick when every item is on. */
23
+ export function checkMixed(options = {}) {
24
+ return defineForm(ID, CSS, { fits: ["checkbox"], vars: { [varName(ID, "time")]: `${options.duration ?? 0.25}s` } });
25
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_MIXED_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_MIXED_SCHEMA = defineSchema()({
3
+ id: "checkMixed",
4
+ family: "form",
5
+ factory: "checkMixed",
6
+ fields: {
7
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 0.6, step: 0.05, unit: "s", default: 0.25 },
8
+ },
9
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckMorphOptions {
3
+ /** The tick's colour. Default `var(--color-sx-primary)`. */
4
+ readonly color?: string;
5
+ /** Seconds the line takes to run from the box into the tick. Default `0.45`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** The box's outline runs off and folds into the tick: one line becomes the other. */
9
+ export declare function checkMorph(options?: CheckMorphOptions): FormEffect;
@@ -0,0 +1,53 @@
1
+ import { CHECKED, EASE, MARK, at, choiceLayer, choiceOf, defineForm, inItem, v, varName } from "../kit.js";
2
+ const ID = "checkMorph";
3
+ const ROOT = choiceOf(ID);
4
+ const LINE = `${choiceLayer(ID)} [data-sx-choice-svg="line"]`;
5
+ // One path: the box's outline (80% of its length), then the tick (20%). A dash shows the outline at rest; on, the dash
6
+ // shrinks to the tick's length and slides along the path, so the line seems to leave the box and become the tick.
7
+ // The look's own box and tick step aside; the mixed dash stays, in the tick's colour.
8
+ const STATE = ` ${at(ROOT)} {
9
+ --sx-choice-edge: transparent;
10
+ --sx-choice-bg: transparent;
11
+ --sx-choice-fill: transparent;
12
+ --sx-choice-ink: ${v(ID, "color")};
13
+ }
14
+ ${at(`${ROOT} ${MARK} [data-sx-mark="tick"]`)} {
15
+ display: none;
16
+ }
17
+ ${at(LINE)} {
18
+ fill: none;
19
+ stroke: var(--sx-choice-line, currentColor);
20
+ stroke-width: 2;
21
+ stroke-linecap: round;
22
+ stroke-linejoin: round;
23
+ stroke-dasharray: 0.8 1;
24
+ stroke-dashoffset: 0;
25
+ }
26
+ ${at(inItem(ROOT, CHECKED, LINE))} {
27
+ stroke: ${v(ID, "color")};
28
+ stroke-width: 3;
29
+ stroke-dasharray: 0.2 1;
30
+ stroke-dashoffset: -0.8;
31
+ }`;
32
+ const CSS = ` ${at(LINE)} {
33
+ transition: stroke-dasharray ${v(ID, "time")} ${EASE}, stroke-dashoffset ${v(ID, "time")} ${EASE}, stroke ${v(ID, "time")}, stroke-width ${v(ID, "time")};
34
+ }`;
35
+ /** The box's outline runs off and folds into the tick: one line becomes the other. */
36
+ export function checkMorph(options = {}) {
37
+ return defineForm(ID, CSS, {
38
+ fits: ["checkbox"],
39
+ state: STATE,
40
+ vars: { [varName(ID, "color")]: options.color ?? "var(--color-sx-primary)", [varName(ID, "time")]: `${options.duration ?? 0.45}s` },
41
+ layers: [
42
+ {
43
+ slot: "box",
44
+ keep: true,
45
+ svg: {
46
+ viewBox: "0 0 24 24",
47
+ children: [{ tag: "path", part: "line", attrs: { pathLength: 1, d: "M7 3h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V7a4 4 0 0 1 4-4zM6.5 12.5l3.75 3.75L18 8.5" } }],
48
+ },
49
+ },
50
+ ],
51
+ claims: ["mark"],
52
+ });
53
+ }
@@ -0,0 +1 @@
1
+ export declare const CHECK_MORPH_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const CHECK_MORPH_SCHEMA = defineSchema()({
3
+ id: "checkMorph",
4
+ family: "form",
5
+ factory: "checkMorph",
6
+ fields: {
7
+ color: { kind: "color", label: "Tick colour", default: "var(--color-sx-primary)" },
8
+ duration: { kind: "number", label: "Duration", min: 0.2, max: 1, step: 0.05, unit: "s", default: 0.45 },
9
+ },
10
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface CheckPopOptions {
3
+ /** How small the box gets while pressed, 0.7 to 1. Default `0.85`. */
4
+ readonly press?: number;
5
+ /** Seconds the spring back takes. Default `0.3`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** The box squeezes while pressed and springs back past its size; the tick grows in. */
9
+ export declare function checkPop(options?: CheckPopOptions): FormEffect;