@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,95 @@
1
+ import { CHANGED, CHECKED, SPRING, THUMB, TRAVEL, at, choiceChild, choiceLayer, defineForm, inItem, switchOf, v, varName } from "../kit.js";
2
+ const ID = "switchGoo";
3
+ const ROOT = switchOf(ID);
4
+ const GOO = choiceLayer(ID, "goo");
5
+ const DROP = `${GOO} > [data-sx-choice-part]`;
6
+ const TAIL = choiceChild(ID, "tail", "goo");
7
+ const PLACE = `translate: calc(var(--sx-switch-at) * ${TRAVEL} * var(--sx-form-dir)) 0;`;
8
+ /** Two drops where the thumb is: the lead crosses quickly, the tail lags, and a blur-then-sharpen filter melts them into one liquid. */
9
+ const DROPS = ` ${at(DROP)} {
10
+ position: absolute;
11
+ inset-block: var(--sx-switch-pad);
12
+ inset-inline-start: var(--sx-switch-pad);
13
+ aspect-ratio: 1;
14
+ border-radius: 50%;
15
+ background: var(--sx-switch-thumb, var(--color-sx-muted));
16
+ ${PLACE}
17
+ }
18
+ ${at(inItem(ROOT, CHECKED, DROP))} {
19
+ background: var(--sx-switch-thumb-on, var(--color-sx-on-primary));
20
+ }
21
+ ${at(`${ROOT} ${THUMB}`)} {
22
+ opacity: 0;
23
+ }`;
24
+ // The liquid look is the costly part (an SVG filter over the drops on every frame of the move), so it starts at the
25
+ // mid tier; weaker devices get the lite version below. The drops' places are the state.
26
+ const STATE = `${DROPS}
27
+ ${at(GOO)} {
28
+ filter: ${v(ID, "filter")};
29
+ }`;
30
+ const CSS = ` ${at(`${ROOT}:not([data-sx-dragging]) ${DROP}`)} {
31
+ transition: translate ${v(ID, "time")} ${SPRING};
32
+ }
33
+ ${at(`${ROOT}:not([data-sx-dragging]) ${TAIL}`)} {
34
+ transition-duration: calc(${v(ID, "time")} * 1.6);
35
+ }`;
36
+ const LITE = "switchGoo-lite";
37
+ const LITE_ROOT = switchOf(LITE);
38
+ /** The lite version: the thumb squashes like a drop as it lands, with no filter. */
39
+ function switchGooLite(time) {
40
+ const css = ` ${at(`${LITE_ROOT}:not([data-sx-dragging]) ${THUMB}`)} {
41
+ transition: translate ${v(LITE, "time")} ${SPRING};
42
+ }
43
+ ${at(inItem(LITE_ROOT, CHANGED, THUMB))} {
44
+ animation: sx-form-switchGoo-lite ${v(LITE, "time")} ease-out;
45
+ }
46
+ ${at(inItem(LITE_ROOT, `${CHECKED}${CHANGED}`, THUMB))} {
47
+ animation: sx-form-switchGoo-lite-on ${v(LITE, "time")} ease-out;
48
+ }
49
+ @keyframes sx-form-switchGoo-lite {
50
+ 0%, 100% { scale: 1 1; }
51
+ 40% { scale: 1.35 0.8; }
52
+ }
53
+ @keyframes sx-form-switchGoo-lite-on {
54
+ 0%, 100% { scale: 1 1; }
55
+ 40% { scale: 1.35 0.8; }
56
+ }`;
57
+ return defineForm(LITE, css, { fits: ["switch"], vars: { [varName(LITE, "time")]: time }, claims: ["thumb"] });
58
+ }
59
+ /** The thumb is a drop of liquid: it stretches into a bridge as it crosses and snaps round on the other side. */
60
+ export function switchGoo(options = {}) {
61
+ const time = `${options.duration ?? 0.5}s`;
62
+ return defineForm(ID, CSS, {
63
+ fits: ["switch"],
64
+ tier: "mid",
65
+ state: STATE,
66
+ vars: { [varName(ID, "filter")]: "url(#{uid}-goo)", [varName(ID, "time")]: time },
67
+ layers: [
68
+ {
69
+ slot: "box",
70
+ part: "goo",
71
+ children: ["lead", "tail"],
72
+ keep: true,
73
+ svg: {
74
+ children: [
75
+ {
76
+ tag: "defs",
77
+ children: [
78
+ {
79
+ tag: "filter",
80
+ attrs: { id: "{uid}-goo" },
81
+ children: [
82
+ { tag: "feGaussianBlur", attrs: { in: "SourceGraphic", stdDeviation: 3 } },
83
+ { tag: "feColorMatrix", attrs: { mode: "matrix", values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -8" } },
84
+ ],
85
+ },
86
+ ],
87
+ },
88
+ ],
89
+ },
90
+ },
91
+ ],
92
+ claims: ["thumb"],
93
+ fallback: switchGooLite(time),
94
+ });
95
+ }
@@ -0,0 +1 @@
1
+ export declare const SWITCH_GOO_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const SWITCH_GOO_SCHEMA = defineSchema()({
3
+ id: "switchGoo",
4
+ family: "form",
5
+ factory: "switchGoo",
6
+ fields: {
7
+ duration: { kind: "number", label: "Duration", min: 0.2, max: 1, step: 0.05, unit: "s", default: 0.5 },
8
+ },
9
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface SwitchIconOptions {
3
+ /** Show a cross on the small thumb while off. Default `true`. */
4
+ readonly off?: boolean;
5
+ /** Seconds it takes. Default `0.25`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** The thumb grows when on and shows a tick; off, it shrinks and shows a cross (Material 3). */
9
+ export declare function switchIcon(options?: SwitchIconOptions): FormEffect;
@@ -0,0 +1,63 @@
1
+ import { CHECKED, SPRING, THUMB, at, choiceLayer, defineForm, inItem, switchOf, v, varName } from "../kit.js";
2
+ const ID = "switchIcon";
3
+ const ROOT = switchOf(ID);
4
+ const ICON = choiceLayer(ID);
5
+ const TICK = `${ICON} [data-sx-choice-svg="tick"]`;
6
+ const CROSS = `${ICON} [data-sx-choice-svg="cross"]`;
7
+ // Material 3's switch: off, a small thumb (with a cross); on, a full thumb with a tick. Sizes and signs are the state
8
+ // (they hold under reduced motion); the grow, the draw and the pressed swell are motion.
9
+ const STATE = ` ${at(`${ROOT} ${THUMB}`)} {
10
+ scale: 0.7;
11
+ }
12
+ ${at(inItem(ROOT, CHECKED, THUMB))} {
13
+ scale: 1;
14
+ }
15
+ ${at(`${TICK}, ${CROSS}`)} {
16
+ fill: none;
17
+ stroke: currentColor;
18
+ stroke-width: 3;
19
+ stroke-linecap: round;
20
+ stroke-linejoin: round;
21
+ stroke-dasharray: 1 2;
22
+ stroke-dashoffset: 1.01;
23
+ }
24
+ ${at(inItem(ROOT, CHECKED, TICK))} {
25
+ stroke-dashoffset: 0;
26
+ }
27
+ ${at(`${ROOT}:not(${CHECKED}) ${CROSS}`)} {
28
+ stroke-dashoffset: calc(1.01 - 1.01 * ${v(ID, "off")});
29
+ }
30
+ ${at(ICON)} {
31
+ inset: 18%;
32
+ }`;
33
+ const CSS = ` ${at(`${ROOT} ${THUMB}`)} {
34
+ transition: scale ${v(ID, "time")} ${SPRING};
35
+ }
36
+ ${at(`${ROOT}:not([data-sx-pending]):active ${THUMB}`)} {
37
+ scale: 1.1;
38
+ }
39
+ ${at(`${TICK}, ${CROSS}`)} {
40
+ transition: stroke-dashoffset ${v(ID, "time")} ease-out;
41
+ }`;
42
+ /** The thumb grows when on and shows a tick; off, it shrinks and shows a cross (Material 3). */
43
+ export function switchIcon(options = {}) {
44
+ return defineForm(ID, CSS, {
45
+ fits: ["switch"],
46
+ state: STATE,
47
+ vars: { [varName(ID, "off")]: options.off === false ? 0 : 1, [varName(ID, "time")]: `${options.duration ?? 0.25}s` },
48
+ layers: [
49
+ {
50
+ slot: "thumb",
51
+ keep: true,
52
+ svg: {
53
+ viewBox: "0 0 24 24",
54
+ children: [
55
+ { tag: "path", part: "tick", attrs: { pathLength: 1, d: "m5.5 12.5 4.25 4.25L18.5 7.5" } },
56
+ { tag: "path", part: "cross", attrs: { pathLength: 1, d: "m7 7 10 10M17 7 7 17" } },
57
+ ],
58
+ },
59
+ },
60
+ ],
61
+ claims: ["thumb", "mark"],
62
+ });
63
+ }
@@ -0,0 +1 @@
1
+ export declare const SWITCH_ICON_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const SWITCH_ICON_SCHEMA = defineSchema()({
3
+ id: "switchIcon",
4
+ family: "form",
5
+ factory: "switchIcon",
6
+ fields: {
7
+ off: { kind: "boolean", label: "A cross while off", default: true },
8
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 0.6, step: 0.05, unit: "s", default: 0.25 },
9
+ },
10
+ });
@@ -0,0 +1,11 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface SwitchLabelsOptions {
3
+ /** The word on the free side while on. Default `"ON"`. */
4
+ readonly on?: string;
5
+ /** The word while off. Default `"OFF"`. */
6
+ readonly off?: string;
7
+ /** Seconds the words take to swap. Default `0.2`. */
8
+ readonly duration?: number;
9
+ }
10
+ /** A short word inside the track, ON or OFF, on the side the thumb has left. */
11
+ export declare function switchLabels(options?: SwitchLabelsOptions): FormEffect;
@@ -0,0 +1,55 @@
1
+ import { CHECKED, at, choiceLayer, defineForm, inItem, switchOf, v, varName } from "../kit.js";
2
+ const ID = "switchLabels";
3
+ const ROOT = switchOf(ID);
4
+ const ON = choiceLayer(ID, "on");
5
+ const OFF = choiceLayer(ID, "off");
6
+ // The track widens to hold a short word on its free side: the "on" word where the thumb has left (the start), the
7
+ // "off" word at the end. The words are decoration (hidden from screen readers, which hear "switch, on"); which one shows
8
+ // is the state. Pass your own words for another language.
9
+ const STATE = ` ${at(ROOT)} {
10
+ --sx-switch-w: 3.75em;
11
+ }
12
+ ${at(`${ON}, ${OFF}`)} {
13
+ display: grid;
14
+ align-items: center;
15
+ inline-size: calc(100% - var(--sx-switch-h));
16
+ padding-inline: 0.4em;
17
+ box-sizing: border-box;
18
+ font-size: 0.6em;
19
+ font-weight: 600;
20
+ line-height: 1;
21
+ white-space: nowrap;
22
+ overflow: hidden;
23
+ opacity: 0;
24
+ }
25
+ ${at(ON)} {
26
+ inset-inline: 0 auto;
27
+ justify-items: center;
28
+ color: var(--color-sx-on-primary, Canvas);
29
+ }
30
+ ${at(OFF)} {
31
+ inset-inline: auto 0;
32
+ justify-items: center;
33
+ color: var(--color-sx-muted, CanvasText);
34
+ }
35
+ ${at(inItem(ROOT, CHECKED, ON))} {
36
+ opacity: 1;
37
+ }
38
+ ${at(`${ROOT}:not(${CHECKED}) ${OFF}`)} {
39
+ opacity: 1;
40
+ }`;
41
+ const CSS = ` ${at(`${ON}, ${OFF}`)} {
42
+ transition: opacity ${v(ID, "time")} ease-out;
43
+ }`;
44
+ /** A short word inside the track, ON or OFF, on the side the thumb has left. */
45
+ export function switchLabels(options = {}) {
46
+ return defineForm(ID, CSS, {
47
+ fits: ["switch"],
48
+ state: STATE,
49
+ vars: { [varName(ID, "time")]: `${options.duration ?? 0.2}s` },
50
+ layers: [
51
+ { slot: "box", part: "on", text: options.on ?? "ON", keep: true },
52
+ { slot: "box", part: "off", text: options.off ?? "OFF", keep: true },
53
+ ],
54
+ });
55
+ }
@@ -0,0 +1 @@
1
+ export declare const SWITCH_LABELS_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,11 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const SWITCH_LABELS_SCHEMA = defineSchema()({
3
+ id: "switchLabels",
4
+ family: "form",
5
+ factory: "switchLabels",
6
+ fields: {
7
+ on: { kind: "text", label: "On word", default: "ON" },
8
+ off: { kind: "text", label: "Off word", default: "OFF" },
9
+ duration: { kind: "number", label: "Duration", min: 0.05, max: 0.5, step: 0.05, unit: "s", default: 0.2 },
10
+ },
11
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface SwitchMorphOptions {
3
+ /** The thumb's corners when on, as a share of its size: 0 a square, 50 a circle. Default `22`. */
4
+ readonly corner?: number;
5
+ /** Seconds it takes. Default `0.4`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** The thumb morphs from a circle into a rounded square, turning as it crosses. */
9
+ export declare function switchMorph(options?: SwitchMorphOptions): FormEffect;
@@ -0,0 +1,22 @@
1
+ import { CHECKED, SPRING, THUMB, at, defineForm, inItem, switchOf, v, varName } from "../kit.js";
2
+ const ID = "switchMorph";
3
+ const ROOT = switchOf(ID);
4
+ // The thumb changes shape as it crosses: a circle when off, a rounded square when on, turning a half turn on the way so
5
+ // the change reads as one gesture. The shape is the state (it holds under reduced motion); the turn and the morph are
6
+ // motion. Corners animate on one small element: cheap.
7
+ const STATE = ` ${at(inItem(ROOT, CHECKED, THUMB))} {
8
+ border-radius: calc(${v(ID, "corner")} * 1%);
9
+ rotate: 180deg;
10
+ }`;
11
+ const CSS = ` ${at(`${ROOT} ${THUMB}`)} {
12
+ transition: border-radius ${v(ID, "time")} ease-in-out, rotate ${v(ID, "time")} ${SPRING};
13
+ }`;
14
+ /** The thumb morphs from a circle into a rounded square, turning as it crosses. */
15
+ export function switchMorph(options = {}) {
16
+ return defineForm(ID, CSS, {
17
+ fits: ["switch"],
18
+ state: STATE,
19
+ vars: { [varName(ID, "corner")]: options.corner ?? 22, [varName(ID, "time")]: `${options.duration ?? 0.4}s` },
20
+ claims: ["thumb"],
21
+ });
22
+ }
@@ -0,0 +1 @@
1
+ export declare const SWITCH_MORPH_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const SWITCH_MORPH_SCHEMA = defineSchema()({
3
+ id: "switchMorph",
4
+ family: "form",
5
+ factory: "switchMorph",
6
+ fields: {
7
+ corner: { kind: "number", label: "Corners when on", min: 0, max: 50, step: 1, unit: "%", default: 22 },
8
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 1, step: 0.05, unit: "s", default: 0.4 },
9
+ },
10
+ });
@@ -0,0 +1,11 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface SwitchNeonOptions {
3
+ /** The tube's colour. Default `var(--color-sx-accent)`. */
4
+ readonly color?: string;
5
+ /** The dark glass behind the tube, the same in light and dark themes. Default a near-black. */
6
+ readonly glass?: string;
7
+ /** Seconds the switch-on flicker takes. Default `0.6`. */
8
+ readonly duration?: number;
9
+ }
10
+ /** A neon tube: on, it strikes with a flicker and then hums softly (an endless glow: it pauses off screen). */
11
+ export declare function switchNeon(options?: SwitchNeonOptions): FormEffect;
@@ -0,0 +1,53 @@
1
+ import { CHANGED, CHECKED, at, choiceLayer, defineForm, inItem, loopPaused, switchOf, v, varName } from "../kit.js";
2
+ const ID = "switchNeon";
3
+ const ROOT = switchOf(ID);
4
+ const TUBE = choiceLayer(ID, "tube");
5
+ // A neon sign: off, the tube is dark glass; on, it lights (its glow is a fixed shadow on a layer whose opacity moves,
6
+ // never an animated shadow), flickers as it strikes, then hums: a slow, slight breathing that never stops while it is
7
+ // on. That hum is an endless loop: it pauses off screen and with the page's pause switch (WCAG 2.2.2).
8
+ const STATE = ` ${at(ROOT)} {
9
+ --sx-choice-bg: ${v(ID, "glass")};
10
+ --sx-choice-fill: ${v(ID, "glass")};
11
+ --sx-choice-edge: color-mix(in oklab, ${v(ID, "color")} 35%, transparent);
12
+ --sx-switch-thumb-on: ${v(ID, "color")};
13
+ }
14
+ ${at(TUBE)} {
15
+ inset: -2px;
16
+ border: 2px solid ${v(ID, "color")};
17
+ border-radius: inherit;
18
+ box-shadow: 0 0 0.5em ${v(ID, "color")}, inset 0 0 0.35em ${v(ID, "color")};
19
+ opacity: 0;
20
+ }
21
+ ${at(inItem(ROOT, CHECKED, TUBE))} {
22
+ opacity: 1;
23
+ }`;
24
+ const CSS = ` ${at(inItem(ROOT, CHECKED, TUBE))} {
25
+ animation: sx-form-switchNeon-hum 3s ease-in-out infinite;
26
+ }
27
+ ${at(inItem(ROOT, `${CHECKED}${CHANGED}`, TUBE))} {
28
+ animation: sx-form-switchNeon ${v(ID, "time")} linear, sx-form-switchNeon-hum 3s ease-in-out ${v(ID, "time")} infinite;
29
+ }
30
+ ${loopPaused(TUBE)}
31
+ @keyframes sx-form-switchNeon {
32
+ 0%, 20%, 40%, 100% { opacity: 1; }
33
+ 10%, 30% { opacity: 0.2; }
34
+ 35% { opacity: 0.6; }
35
+ }
36
+ @keyframes sx-form-switchNeon-hum {
37
+ 0%, 100% { opacity: 1; }
38
+ 50% { opacity: 0.82; }
39
+ }`;
40
+ /** A neon tube: on, it strikes with a flicker and then hums softly (an endless glow: it pauses off screen). */
41
+ export function switchNeon(options = {}) {
42
+ return defineForm(ID, CSS, {
43
+ fits: ["switch"],
44
+ state: STATE,
45
+ vars: {
46
+ [varName(ID, "color")]: options.color ?? "var(--color-sx-accent)",
47
+ [varName(ID, "glass")]: options.glass ?? "#15151d",
48
+ [varName(ID, "time")]: `${options.duration ?? 0.6}s`,
49
+ },
50
+ layers: [{ slot: "box", part: "tube", keep: true }],
51
+ needs: { inView: true },
52
+ });
53
+ }
@@ -0,0 +1 @@
1
+ export declare const SWITCH_NEON_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,11 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const SWITCH_NEON_SCHEMA = defineSchema()({
3
+ id: "switchNeon",
4
+ family: "form",
5
+ factory: "switchNeon",
6
+ fields: {
7
+ color: { kind: "color", label: "Tube colour", default: "var(--color-sx-accent)" },
8
+ glass: { kind: "color", label: "Glass", default: "#15151d" },
9
+ duration: { kind: "number", label: "Flicker", min: 0.2, max: 1.2, step: 0.05, unit: "s", default: 0.6 },
10
+ },
11
+ });
@@ -0,0 +1,7 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface SwitchSlideOptions {
3
+ /** Seconds the thumb takes to cross. Default `0.3`. */
4
+ readonly duration?: number;
5
+ }
6
+ /** The thumb slides across with a little overshoot, as on a phone. */
7
+ export declare function switchSlide(options?: SwitchSlideOptions): FormEffect;
@@ -0,0 +1,11 @@
1
+ import { SPRING, THUMB, at, defineForm, switchOf, v, varName } from "../kit.js";
2
+ const ID = "switchSlide";
3
+ // Without it the thumb jumps; with it the thumb slides across with a little overshoot, and the track's colour fades
4
+ // (the look's own transition). A dragged thumb follows the finger with no lag: the transition waits for the release.
5
+ const CSS = ` ${at(`${switchOf(ID)}:not([data-sx-dragging]) ${THUMB}`)} {
6
+ transition: translate ${v(ID, "time")} ${SPRING};
7
+ }`;
8
+ /** The thumb slides across with a little overshoot, as on a phone. */
9
+ export function switchSlide(options = {}) {
10
+ return defineForm(ID, CSS, { fits: ["switch"], vars: { [varName(ID, "time")]: `${options.duration ?? 0.3}s` } });
11
+ }
@@ -0,0 +1 @@
1
+ export declare const SWITCH_SLIDE_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const SWITCH_SLIDE_SCHEMA = defineSchema()({
3
+ id: "switchSlide",
4
+ family: "form",
5
+ factory: "switchSlide",
6
+ fields: {
7
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 0.8, step: 0.05, unit: "s", default: 0.3 },
8
+ },
9
+ });
@@ -0,0 +1,9 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface SwitchStretchOptions {
3
+ /** How wide the thumb gets while pressed, 1 to 1.6. Default `1.3`. */
4
+ readonly stretch?: number;
5
+ /** Seconds it takes. Default `0.25`. */
6
+ readonly duration?: number;
7
+ }
8
+ /** The thumb stretches toward the other side while pressed, then springs back. */
9
+ export declare function switchStretch(options?: SwitchStretchOptions): FormEffect;
@@ -0,0 +1,21 @@
1
+ import { DIR, SPRING, THUMB, at, defineForm, switchOf, v, varName } from "../kit.js";
2
+ const ID = "switchStretch";
3
+ const ROOT = switchOf(ID);
4
+ // Pressed, the thumb widens toward where it would go, anchored on the side it sits on (start when off, end when on,
5
+ // in reading direction), and springs back when let go: the switch feels like it is about to move.
6
+ const CSS = ` ${at(`${ROOT} ${THUMB}`)} {
7
+ transform-origin: calc(50% + 50% * ${DIR} * (2 * var(--sx-switch-at) - 1)) 50%;
8
+ transition: scale ${v(ID, "time")} ${SPRING};
9
+ }
10
+ ${at(`${ROOT}:not([data-sx-pending]):active ${THUMB}`)} {
11
+ scale: ${v(ID, "stretch")} 1;
12
+ transition-duration: 120ms;
13
+ }`;
14
+ /** The thumb stretches toward the other side while pressed, then springs back. */
15
+ export function switchStretch(options = {}) {
16
+ return defineForm(ID, CSS, {
17
+ fits: ["switch"],
18
+ vars: { [varName(ID, "stretch")]: options.stretch ?? 1.3, [varName(ID, "time")]: `${options.duration ?? 0.25}s` },
19
+ claims: ["thumb"],
20
+ });
21
+ }
@@ -0,0 +1 @@
1
+ export declare const SWITCH_STRETCH_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const SWITCH_STRETCH_SCHEMA = defineSchema()({
3
+ id: "switchStretch",
4
+ family: "form",
5
+ factory: "switchStretch",
6
+ fields: {
7
+ stretch: { kind: "number", label: "Stretch", min: 1, max: 1.6, step: 0.05, default: 1.3 },
8
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 0.6, step: 0.05, unit: "s", default: 0.25 },
9
+ },
10
+ });
@@ -0,0 +1,7 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface ValidAsyncOptions {
3
+ /** Seconds the ring takes to close and the mark to draw. Default `0.3`. */
4
+ readonly duration?: number;
5
+ }
6
+ /** The async check's spinner closes into a ring, then a check (or a cross) draws inside it and the mark pops (`status`). */
7
+ export declare function validAsync(options?: ValidAsyncOptions): FormEffect;
@@ -0,0 +1,36 @@
1
+ import { SPRING, at, defineForm, fieldOf, inField, v, varName } from "../kit.js";
2
+ const ID = "validAsync";
3
+ const FIELD = fieldOf(ID);
4
+ const MARK = `${FIELD} [data-sx-field-status] > svg`;
5
+ const RING = `${FIELD} [data-sx-field-status] [data-sx-tool-part="ring"]`;
6
+ const SIGN = `${FIELD} [data-sx-field-status] :is([data-sx-tool-part="check"], [data-sx-tool-part="cross"])`;
7
+ const DONE = ':is([data-sx-status="valid"], [data-sx-status="invalid"])';
8
+ // The field's own mark (`status`) swaps a spinner for a check or a cross. This turns the swap into one gesture: the
9
+ // spinning arc closes into a full ring, then the sign draws inside it and the whole mark pops. The closed ring is a
10
+ // state (it holds under reduced motion); the rest is motion.
11
+ const STATE = ` ${at(RING)} {
12
+ transform-box: fill-box;
13
+ transform-origin: center;
14
+ rotate: -90deg;
15
+ }
16
+ ${at(inField(ID, DONE, RING))} {
17
+ stroke-dashoffset: 0;
18
+ }`;
19
+ const CSS = ` ${at(RING)} {
20
+ transition: stroke-dashoffset ${v(ID, "time")} ease-out;
21
+ }
22
+ ${at(inField(ID, DONE, SIGN))} {
23
+ transition: stroke-dashoffset ${v(ID, "time")} ease-out calc(${v(ID, "time")} * 0.6);
24
+ }
25
+ ${at(inField(ID, DONE, MARK))} {
26
+ animation: sx-form-validAsync calc(${v(ID, "time")} * 2) ${SPRING};
27
+ }
28
+ @keyframes sx-form-validAsync {
29
+ 0%, 50% { scale: 1; }
30
+ 75% { scale: 1.2; }
31
+ 100% { scale: 1; }
32
+ }`;
33
+ /** The async check's spinner closes into a ring, then a check (or a cross) draws inside it and the mark pops (`status`). */
34
+ export function validAsync(options = {}) {
35
+ return defineForm(ID, CSS, { state: STATE, vars: { [varName(ID, "time")]: `${options.duration ?? 0.3}s` } });
36
+ }
@@ -0,0 +1 @@
1
+ export declare const VALID_ASYNC_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const VALID_ASYNC_SCHEMA = defineSchema()({
3
+ id: "validAsync",
4
+ family: "form",
5
+ factory: "validAsync",
6
+ fields: {
7
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 0.8, step: 0.05, unit: "s", default: 0.3 },
8
+ },
9
+ });
@@ -0,0 +1,7 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface ValidBubbleOptions {
3
+ /** Seconds it takes to pop up. Default `0.18`. */
4
+ readonly duration?: number;
5
+ }
6
+ /** The error pops up in a bubble tied to the field, over the page, instead of pushing the form down. */
7
+ export declare function validBubble(options?: ValidBubbleOptions): FormEffect;
@@ -0,0 +1,61 @@
1
+ import { EASE, at, boxOf, defineForm, fieldOf, inField, v, varName } from "../kit.js";
2
+ const ID = "validBubble";
3
+ const FIELD = fieldOf(ID);
4
+ const MESSAGE = `${FIELD} > [data-sx-field-message]`;
5
+ const SAYS = `${FIELD} [data-sx-field-says]`;
6
+ const SAYING = ":has([data-sx-field-error]:not(:empty))";
7
+ // The error leaves the flow and floats in a bubble under the box, so nothing below moves (atlas rule 7). Anchor
8
+ // positioning ties it to the box, fixed, so a scroll box around the form can't clip it. It never flips above: a
9
+ // `flip-block` fallback flipped it on a scrolled page in Chromium, WebKit and Firefox alike, with room to spare below
10
+ // (found in Phase 2). A browser without anchor positioning puts the bubble under the whole field. The field rises over
11
+ // the next one while it speaks: the field root isolates its stacking, so the bubble alone could never cover a later field.
12
+ const STATE = ` ${at(boxOf(ID))} {
13
+ anchor-name: ${v(ID, "anchor")};
14
+ }
15
+ ${at(MESSAGE)} {
16
+ position: absolute;
17
+ z-index: 2;
18
+ inset-block-start: calc(100% + 0.25rem);
19
+ inset-inline-start: 0;
20
+ inline-size: max-content;
21
+ max-inline-size: min(20rem, 100%);
22
+ }
23
+ @supports (anchor-name: --a) {
24
+ ${at(MESSAGE)} {
25
+ position: fixed;
26
+ inset: auto;
27
+ margin-block: 0.375rem;
28
+ position-anchor: ${v(ID, "anchor")};
29
+ position-area: block-end span-inline-end;
30
+ }
31
+ }
32
+ ${at(inField(ID, SAYING, FIELD))} {
33
+ z-index: 3;
34
+ }
35
+ ${at(SAYS)} {
36
+ padding: 0.375rem 0.625rem;
37
+ border: 1px solid currentColor;
38
+ border-radius: var(--radius-sx-control, 0.375rem);
39
+ background: var(--color-sx-secondary, Canvas);
40
+ }`;
41
+ const CSS = ` ${at(SAYS)} {
42
+ transform-origin: calc(50% - 50% * var(--sx-form-dir)) 0;
43
+ transition: opacity ${v(ID, "time")} ${EASE}, scale ${v(ID, "time")} ${EASE};
44
+ }
45
+ @starting-style {
46
+ ${at(SAYS)} {
47
+ opacity: 0;
48
+ scale: 0.92;
49
+ }
50
+ }`;
51
+ /** The error pops up in a bubble tied to the field, over the page, instead of pushing the form down. */
52
+ export function validBubble(options = {}) {
53
+ return defineForm(ID, CSS, {
54
+ state: STATE,
55
+ vars: {
56
+ // one anchor name per field: `{uid}` becomes the field's own id
57
+ [varName(ID, "anchor")]: "--{uid}-bubble",
58
+ [varName(ID, "time")]: `${options.duration ?? 0.18}s`,
59
+ },
60
+ });
61
+ }
@@ -0,0 +1 @@
1
+ export declare const VALID_BUBBLE_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const VALID_BUBBLE_SCHEMA = defineSchema()({
3
+ id: "validBubble",
4
+ family: "form",
5
+ factory: "validBubble",
6
+ fields: {
7
+ duration: { kind: "number", label: "Duration", min: 0.05, max: 0.5, step: 0.05, unit: "s", default: 0.18 },
8
+ },
9
+ });