@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,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const FILE_PAGE_SCHEMA = defineSchema()({
3
+ id: "filePage",
4
+ family: "form",
5
+ factory: "filePage",
6
+ fields: {
7
+ color: { kind: "color", label: "Frame colour", default: "var(--color-sx-primary)" },
8
+ },
9
+ });
@@ -0,0 +1,7 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface FilePreviewOptions {
3
+ /** Seconds a picture takes to fade in. Default `0.3`. */
4
+ readonly duration?: number;
5
+ }
6
+ /** Image files show a thumbnail in their card, fading in once it has loaded. */
7
+ export declare function filePreview(options?: FilePreviewOptions): FormEffect;
@@ -0,0 +1,17 @@
1
+ import { EASE, at, defineForm, fileOf, v, varName } from "../kit.js";
2
+ const ID = "filePreview";
3
+ const ROOT = fileOf(ID);
4
+ const IMG = "[data-sx-file-thumb] > img";
5
+ // Asks the FileDrop for pictures (needs.preview: an object URL per image file, let go when the file goes) and fades
6
+ // each one in, settling from a little larger, once it has loaded (data-sx-loaded). Under reduced motion it just shows.
7
+ const CSS = ` ${at(`${ROOT} ${IMG}`)} {
8
+ transition: opacity ${v(ID, "time")} ${EASE}, scale ${v(ID, "time")} ${EASE};
9
+ }
10
+ ${at(`${ROOT} ${IMG}:not([data-sx-loaded])`)} {
11
+ opacity: 0;
12
+ scale: 1.08;
13
+ }`;
14
+ /** Image files show a thumbnail in their card, fading in once it has loaded. */
15
+ export function filePreview(options = {}) {
16
+ return defineForm(ID, CSS, { fits: ["file"], needs: { preview: true }, vars: { [varName(ID, "time")]: `${options.duration ?? 0.3}s` } });
17
+ }
@@ -0,0 +1 @@
1
+ export declare const FILE_PREVIEW_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const FILE_PREVIEW_SCHEMA = defineSchema()({
3
+ id: "filePreview",
4
+ family: "form",
5
+ factory: "filePreview",
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 FileProgressOptions {
3
+ /** A bar under the name, or a ring that fills. Either ends in a check. Default `"bar"`. */
4
+ readonly kind?: "bar" | "ring";
5
+ /** The colour of the progress. Default `var(--color-sx-primary)`. */
6
+ readonly color?: string;
7
+ }
8
+ /** Each file's upload fills a bar (or a ring) smoothly, which turns into a check drawn at the end. */
9
+ export declare function fileProgress(options?: FileProgressOptions): FormEffect;
@@ -0,0 +1,92 @@
1
+ import { CARD, DIR, EASE, SPRING, at, defineForm, fileLayer, fileOf, v, varName } from "../kit.js";
2
+ const ID = "fileProgress";
3
+ const ROOT = fileOf(ID);
4
+ const RING = fileLayer(ID, "ring");
5
+ const DONE = "[data-sx-file-done]";
6
+ // The FileDrop draws each file's progress as a bar from `progress` (0-1, on the card as --sx-file-progress) and a
7
+ // check at 1. This makes the bar fill smoothly and the check draw itself; `ring` puts the progress in a ring that fills
8
+ // round the card's end, then turns into the check. The bar stays for screen readers (role progressbar), unseen.
9
+ const STATE = ` ${at(ROOT)} {
10
+ --sx-file-bar: ${v(ID, "color")};
11
+ }
12
+ ${at(`${ROOT} ${CARD}:has(${RING}) [data-sx-file-bar]`)} {
13
+ opacity: 0;
14
+ }
15
+ ${at(RING)} {
16
+ inline-size: 1.5rem;
17
+ block-size: 1.5rem;
18
+ color: ${v(ID, "color")};
19
+ opacity: 0;
20
+ }
21
+ ${at(`${ROOT} ${CARD}[data-sx-uploading] ${RING}`)} {
22
+ opacity: 1;
23
+ }
24
+ ${at(`${RING} > svg`)} {
25
+ display: block;
26
+ inline-size: 100%;
27
+ block-size: 100%;
28
+ overflow: visible;
29
+ fill: none;
30
+ stroke: currentColor;
31
+ stroke-width: 2.5;
32
+ stroke-linecap: round;
33
+ rotate: -90deg;
34
+ scale: ${DIR} 1;
35
+ }
36
+ ${at(`${RING} [data-sx-file-svg="track"]`)} {
37
+ opacity: 0.2;
38
+ }
39
+ ${at(`${RING} [data-sx-file-svg="arc"]`)} {
40
+ stroke-dasharray: 1 2;
41
+ stroke-dashoffset: calc((1 - var(--sx-file-progress)) * 1.01);
42
+ }`;
43
+ const CSS = ` ${at(`${ROOT} [data-sx-file-fill]`)} {
44
+ transition: scale 0.3s ${EASE};
45
+ }
46
+ ${at(`${ROOT} [data-sx-file-bar]`)} {
47
+ transition: opacity 0.2s ${EASE} 0.2s;
48
+ }
49
+ ${at(`${RING} [data-sx-file-svg="arc"]`)} {
50
+ transition: stroke-dashoffset 0.3s ${EASE};
51
+ }
52
+ ${at(RING)} {
53
+ transition: opacity 0.2s ${EASE}, scale 0.2s ${EASE};
54
+ }
55
+ ${at(`${ROOT} ${CARD}[data-sx-done] ${RING}`)} {
56
+ scale: 0.6;
57
+ }
58
+ ${at(`${ROOT} ${CARD}[data-sx-done] ${DONE} path`)} {
59
+ stroke-dasharray: 1 2;
60
+ stroke-dashoffset: 1.01;
61
+ animation: sx-form-fileProgress-draw 0.35s ${EASE} 0.1s forwards;
62
+ }
63
+ ${at(`${ROOT} ${CARD}[data-sx-done] ${DONE} svg`)} {
64
+ animation: sx-form-fileProgress-pop 0.35s ${SPRING};
65
+ }
66
+ @keyframes sx-form-fileProgress-draw {
67
+ to {
68
+ stroke-dashoffset: 0;
69
+ }
70
+ }
71
+ @keyframes sx-form-fileProgress-pop {
72
+ from {
73
+ scale: 0.6;
74
+ }
75
+ }`;
76
+ const RING_SVG = {
77
+ viewBox: "0 0 24 24",
78
+ children: [
79
+ { tag: "circle", part: "track", attrs: { cx: 12, cy: 12, r: 9 } },
80
+ { tag: "circle", part: "arc", attrs: { cx: 12, cy: 12, r: 9, pathLength: 1 } },
81
+ ],
82
+ };
83
+ /** Each file's upload fills a bar (or a ring) smoothly, which turns into a check drawn at the end. */
84
+ export function fileProgress(options = {}) {
85
+ const ring = options.kind === "ring";
86
+ return defineForm(ID, CSS, {
87
+ fits: ["file"],
88
+ state: STATE,
89
+ vars: { [varName(ID, "color")]: options.color ?? "var(--color-sx-primary)" },
90
+ layers: ring ? [{ slot: "card", part: "ring", keep: true, svg: RING_SVG }] : [],
91
+ });
92
+ }
@@ -0,0 +1 @@
1
+ export declare const FILE_PROGRESS_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,10 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const FILE_PROGRESS_SCHEMA = defineSchema()({
3
+ id: "fileProgress",
4
+ family: "form",
5
+ factory: "fileProgress",
6
+ fields: {
7
+ kind: { kind: "choice", label: "Shape", values: ["bar", "ring"], labels: { bar: "Bar", ring: "Ring" }, default: "bar" },
8
+ color: { kind: "color", label: "Colour", default: "var(--color-sx-primary)" },
9
+ },
10
+ });
@@ -0,0 +1,7 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface FileRejectOptions {
3
+ /** How far the zone shakes, in rem. Default `0.375`. */
4
+ readonly distance?: number;
5
+ }
6
+ /** A refused file shakes the zone once and turns its line red; so do files it won't take, while dragged over it. */
7
+ export declare function fileReject(options?: FileRejectOptions): FormEffect;
@@ -0,0 +1,24 @@
1
+ import { OVER_REJECT, REJECTED, ZONE, at, defineForm, fileOf, v, varName } from "../kit.js";
2
+ const ID = "fileReject";
3
+ const ROOT = fileOf(ID);
4
+ // A file the zone refuses (a kind it won't take, too big, too many, a twin) shakes the zone once, and its line turns
5
+ // red while it does; the words of why are the FileDrop's own, under the zone. Files of a kind it won't take turn the
6
+ // line red while they are dragged over it, where the browser tells the kind.
7
+ const STATE = ` ${at(`${ROOT}:is(${REJECTED}, ${OVER_REJECT})`)} {
8
+ --sx-file-line: var(--color-sx-danger);
9
+ }`;
10
+ const CSS = ` ${at(`${ROOT}${REJECTED} ${ZONE}`)} {
11
+ animation: sx-form-fileReject-shake 0.4s ease-in-out;
12
+ }
13
+ @keyframes sx-form-fileReject-shake {
14
+ 20%, 60% {
15
+ translate: calc(${v(ID, "distance")} * -1) 0;
16
+ }
17
+ 40%, 80% {
18
+ translate: ${v(ID, "distance")} 0;
19
+ }
20
+ }`;
21
+ /** A refused file shakes the zone once and turns its line red; so do files it won't take, while dragged over it. */
22
+ export function fileReject(options = {}) {
23
+ return defineForm(ID, CSS, { fits: ["file"], state: STATE, vars: { [varName(ID, "distance")]: `${options.distance ?? 0.375}rem` } });
24
+ }
@@ -0,0 +1 @@
1
+ export declare const FILE_REJECT_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,9 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const FILE_REJECT_SCHEMA = defineSchema()({
3
+ id: "fileReject",
4
+ family: "form",
5
+ factory: "fileReject",
6
+ fields: {
7
+ distance: { kind: "number", label: "Shake", min: 0.125, max: 1, step: 0.125, unit: "rem", default: 0.375 },
8
+ },
9
+ });
@@ -0,0 +1,11 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface InputAsideOptions {
3
+ /** How much of the field the label keeps once it moves aside, 0.25 to 0.6. Default `0.4`. */
4
+ readonly size?: number;
5
+ /** The panel's colour. Default the accent, mixed into the surface. */
6
+ readonly color?: string;
7
+ /** Seconds it takes. Default `0.35`. */
8
+ readonly duration?: number;
9
+ }
10
+ /** The label's panel covers the field, then shrinks to its start side so you can type (Codrops' Kaede). */
11
+ export declare function inputAside(options?: InputAsideOptions): FormEffect;
@@ -0,0 +1,42 @@
1
+ import { DIR, PAD_X, RAISED, at, controlOf, defineForm, inField, labelOf, layerOf, timed, v, varName } from "../kit.js";
2
+ const ID = "inputAside";
3
+ const LABEL = labelOf(ID);
4
+ const PANEL = layerOf(ID);
5
+ // The label always sits at the start; the input always leaves it that much room. Only the panel moves: it covers the
6
+ // whole field at rest and shrinks behind the label on focus, so nothing but a scale animates.
7
+ const STATE = ` ${at(LABEL)} {
8
+ grid-area: box;
9
+ align-self: center;
10
+ z-index: 1;
11
+ margin: 0;
12
+ margin-inline-start: ${PAD_X};
13
+ max-inline-size: calc(${v(ID, "size")} * 100% - 2 * ${PAD_X});
14
+ overflow: hidden;
15
+ text-overflow: ellipsis;
16
+ white-space: nowrap;
17
+ pointer-events: none;
18
+ }
19
+ ${at(controlOf(ID))} {
20
+ padding-inline-start: calc(${v(ID, "size")} * 100% + ${PAD_X});
21
+ }`;
22
+ const CSS = ` ${at(PANEL)} {
23
+ background: ${v(ID, "color")};
24
+ transform-origin: calc(50% - 50% * ${DIR}) 50%;
25
+ ${timed(ID, "scale")}
26
+ }
27
+ ${at(inField(ID, RAISED, PANEL))} {
28
+ scale: ${v(ID, "size")} 1;
29
+ }`;
30
+ /** The label's panel covers the field, then shrinks to its start side so you can type (Codrops' Kaede). */
31
+ export function inputAside(options = {}) {
32
+ return defineForm(ID, CSS, {
33
+ state: STATE,
34
+ vars: {
35
+ [varName(ID, "size")]: options.size ?? 0.4,
36
+ [varName(ID, "color")]: options.color ?? "color-mix(in oklab, var(--color-sx-accent) 55%, var(--color-sx-secondary))",
37
+ [varName(ID, "time")]: `${options.duration ?? 0.35}s`,
38
+ },
39
+ layers: [{ slot: "edge" }],
40
+ claims: ["label"],
41
+ });
42
+ }
@@ -0,0 +1 @@
1
+ export declare const INPUT_ASIDE_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,11 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const INPUT_ASIDE_SCHEMA = defineSchema()({
3
+ id: "inputAside",
4
+ family: "form",
5
+ factory: "inputAside",
6
+ fields: {
7
+ size: { kind: "number", label: "Label's share", min: 0.25, max: 0.6, step: 0.05, default: 0.4, help: "How much of the field the label keeps once you type." },
8
+ color: { kind: "color", label: "Panel colour", default: "color-mix(in oklab, var(--color-sx-accent) 55%, var(--color-sx-secondary))" },
9
+ duration: { kind: "number", label: "Duration", min: 0.1, max: 1, step: 0.05, unit: "s", default: 0.35 },
10
+ },
11
+ });
@@ -0,0 +1,14 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface InputBeamOptions {
3
+ /** The beam's colours, head last, 1 to 4. Default the accent and primary colours. */
4
+ readonly colors?: readonly string[];
5
+ /** The ring's width, px. Default `2`. */
6
+ readonly width?: number;
7
+ /** `"focus"`: it runs while the field has the focus. `"always"`: all the time (a field the page is waiting on); one per screen. Default `"focus"`. */
8
+ readonly trigger?: "focus" | "always";
9
+ /** Seconds for one lap. Default `2.5`. */
10
+ readonly duration?: number;
11
+ }
12
+ export declare const INPUT_BEAM_COLORS: readonly ["var(--color-sx-accent)", "var(--color-sx-primary)"];
13
+ /** A light with a tail runs around the edge while the field has the focus, or all the time ("AI glow"). */
14
+ export declare function inputBeam(options?: InputBeamOptions): FormEffect;
@@ -0,0 +1,51 @@
1
+ import { at, childOf, defineForm, layerOf, loopPaused, v, varName, whenFocused } from "../kit.js";
2
+ import { ringOff } from "../ring.js";
3
+ const ID = "inputBeam";
4
+ const LAYER = layerOf(ID);
5
+ const SPIN = childOf(ID, "spin");
6
+ export const INPUT_BEAM_COLORS = ["var(--color-sx-accent)", "var(--color-sx-primary)"];
7
+ // A ring: the layer's middle is masked away, so the square that turns inside it shows only along the field's edge, and
8
+ // follows its corners. The square is wider than the field's diagonal (the layer is a size container), so it covers the
9
+ // ring at every angle. It turns with `rotate`: the compositor runs it, nothing repaints.
10
+ const CSS = ` ${at(LAYER)} {
11
+ box-sizing: border-box;
12
+ padding: calc(${v(ID, "width")} * 1px);
13
+ overflow: hidden;
14
+ container-type: size;
15
+ mask: linear-gradient(black 0 0) content-box, linear-gradient(black 0 0);
16
+ mask-composite: exclude;
17
+ -webkit-mask-composite: xor;
18
+ opacity: ${v(ID, "shown")};
19
+ transition: opacity 0.25s ease-out;
20
+ }
21
+ ${whenFocused(ID, LAYER, "opacity: 1;")}
22
+ ${at(SPIN)} {
23
+ position: absolute;
24
+ inset: calc(50cqh - 75cqmax) calc(50cqw - 75cqmax);
25
+ background: conic-gradient(from 0deg, transparent 0 55%, ${v(ID, "stops")});
26
+ animation: sx-form-inputBeam ${v(ID, "time")} linear infinite;
27
+ animation-play-state: ${v(ID, "rest")};
28
+ }
29
+ ${whenFocused(ID, SPIN, "animation-play-state: running;")}
30
+ ${loopPaused(SPIN)}
31
+ @keyframes sx-form-inputBeam {
32
+ to { rotate: 360deg; }
33
+ }`;
34
+ /** A light with a tail runs around the edge while the field has the focus, or all the time ("AI glow"). */
35
+ export function inputBeam(options = {}) {
36
+ const colors = options.colors ?? INPUT_BEAM_COLORS;
37
+ const always = (options.trigger ?? "focus") === "always";
38
+ return defineForm(ID, CSS, {
39
+ // a beam that runs all the time says nothing about the focus
40
+ marksFocus: always ? undefined : ringOff(ID),
41
+ vars: {
42
+ [varName(ID, "stops")]: colors.join(", "),
43
+ [varName(ID, "width")]: options.width ?? 2,
44
+ [varName(ID, "time")]: `${options.duration ?? 2.5}s`,
45
+ [varName(ID, "rest")]: always ? "running" : "paused",
46
+ [varName(ID, "shown")]: always ? 1 : 0,
47
+ },
48
+ layers: [{ slot: "edge", children: ["spin"] }],
49
+ needs: always ? { inView: true } : {},
50
+ });
51
+ }
@@ -0,0 +1 @@
1
+ export declare const INPUT_BEAM_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,18 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const INPUT_BEAM_SCHEMA = defineSchema()({
3
+ id: "inputBeam",
4
+ family: "form",
5
+ factory: "inputBeam",
6
+ fields: {
7
+ trigger: {
8
+ kind: "choice",
9
+ label: "Runs",
10
+ values: ["focus", "always"],
11
+ labels: { focus: "While focused", always: "All the time (one per screen)" },
12
+ default: "focus",
13
+ },
14
+ colors: { kind: "colors", label: "Colours", min: 1, max: 4, default: ["var(--color-sx-accent)", "var(--color-sx-primary)"] },
15
+ width: { kind: "number", label: "Width", min: 1, max: 5, step: 0.5, unit: "px", default: 2 },
16
+ duration: { kind: "number", label: "One lap", min: 1, max: 8, step: 0.5, unit: "s", default: 2.5 },
17
+ },
18
+ });
@@ -0,0 +1,13 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface InputCaretOptions {
3
+ /** The caret's colour. Default `var(--color-sx-primary)`. */
4
+ readonly color?: string;
5
+ /** Its shape: the usual bar, a block over the next letter, or an underscore (Chrome only). Default `"auto"`. */
6
+ readonly shape?: "auto" | "bar" | "block" | "underscore";
7
+ /** `"native"`: the browser's blink. `"smooth"`: it fades in and out. `"steady"`: it never blinks (Chrome only, for both). Default `"native"`. */
8
+ readonly blink?: "native" | "smooth" | "steady";
9
+ /** Seconds for one smooth blink. Default `1.1`. */
10
+ readonly duration?: number;
11
+ }
12
+ /** A coloured caret, a block or underscore shape, a soft or steady blink. */
13
+ export declare function inputCaret(options?: InputCaretOptions): FormEffect;
@@ -0,0 +1,33 @@
1
+ import { at, controlOf, defineForm, inField, loopPaused, v, varName } from "../kit.js";
2
+ const ID = "inputCaret";
3
+ const CONTROL = controlOf(ID);
4
+ // The colour and the shape are a state. The blink is the browser's unless `caret-animation: manual` hands it to us: then
5
+ // the smooth blink is a loop on `caret-color`, run only while focused. Browsers without caret-shape / caret-animation
6
+ // keep the colour and their own caret.
7
+ const STATE = ` ${at(CONTROL)} {
8
+ caret-color: ${v(ID, "color")};
9
+ caret-shape: ${v(ID, "shape")};
10
+ caret-animation: ${v(ID, "manual")};
11
+ }`;
12
+ const CSS = ` ${at(inField(ID, ":focus-within", CONTROL))} {
13
+ animation: ${v(ID, "blink")} ${v(ID, "time")} ease-in-out infinite;
14
+ }
15
+ ${loopPaused(CONTROL)}
16
+ @keyframes sx-form-inputCaret {
17
+ 0%, 100% { caret-color: ${v(ID, "color")}; }
18
+ 50% { caret-color: transparent; }
19
+ }`;
20
+ /** A coloured caret, a block or underscore shape, a soft or steady blink. */
21
+ export function inputCaret(options = {}) {
22
+ const blink = options.blink ?? "native";
23
+ return defineForm(ID, CSS, {
24
+ state: STATE,
25
+ vars: {
26
+ [varName(ID, "color")]: options.color ?? "var(--color-sx-primary)",
27
+ [varName(ID, "shape")]: options.shape ?? "auto",
28
+ [varName(ID, "manual")]: blink === "native" ? "auto" : "manual",
29
+ [varName(ID, "blink")]: blink === "smooth" ? "sx-form-inputCaret" : "none",
30
+ [varName(ID, "time")]: `${options.duration ?? 1.1}s`,
31
+ },
32
+ });
33
+ }
@@ -0,0 +1 @@
1
+ export declare const INPUT_CARET_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,26 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const INPUT_CARET_SCHEMA = defineSchema()({
3
+ id: "inputCaret",
4
+ family: "form",
5
+ factory: "inputCaret",
6
+ fields: {
7
+ color: { kind: "color", label: "Colour", default: "var(--color-sx-primary)" },
8
+ shape: {
9
+ kind: "choice",
10
+ label: "Shape",
11
+ values: ["auto", "bar", "block", "underscore"],
12
+ labels: { auto: "Browser's own", bar: "Bar", block: "Block", underscore: "Underscore" },
13
+ default: "auto",
14
+ help: "Chrome only; other browsers keep their bar.",
15
+ },
16
+ blink: {
17
+ kind: "choice",
18
+ label: "Blink",
19
+ values: ["native", "smooth", "steady"],
20
+ labels: { native: "Browser's own", smooth: "Soft fade", steady: "No blink" },
21
+ default: "native",
22
+ help: "Soft and steady: Chrome only.",
23
+ },
24
+ duration: { kind: "number", label: "One soft blink", min: 0.6, max: 2, step: 0.1, unit: "s", default: 1.1 },
25
+ },
26
+ });
@@ -0,0 +1,16 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface InputCounterOptions {
3
+ /** The ring's colour while there is room. Default `var(--color-sx-primary)`. */
4
+ readonly color?: string;
5
+ /** Its colour near the limit. Default halfway between danger and success: an amber. */
6
+ readonly near?: string;
7
+ /** Its colour past a soft limit. Default `var(--color-sx-danger)`. */
8
+ readonly over?: string;
9
+ /** Seconds each change takes. Default `0.2`. */
10
+ readonly duration?: number;
11
+ }
12
+ /**
13
+ * A ring fills as you type, turns amber near the limit, red past it, and grows a little to show the number left
14
+ * (`counter` on the field). Without it, the field shows "12/280".
15
+ */
16
+ export declare function inputCounter(options?: InputCounterOptions): FormEffect;
@@ -0,0 +1,84 @@
1
+ import { DIR, at, defineForm, fieldOf, layerOf, timed, v, varName } from "../kit.js";
2
+ const ID = "inputCounter";
3
+ const FIELD = fieldOf(ID);
4
+ const LAYER = `${FIELD} ${layerOf(ID)}`;
5
+ const TRACK = `${LAYER} [data-sx-field-svg="track"]`;
6
+ const FILL = `${LAYER} [data-sx-field-svg="fill"]`;
7
+ // The ring and which number shows are the field's state: they hold under reduced motion. The ring fills with the
8
+ // length (`--sx-field-used`, 0-1, written by the field), starting at the top and turning with reading direction.
9
+ const STATE = ` ${at(`${FIELD} [data-sx-field-used]`)} {
10
+ display: none;
11
+ }
12
+ ${at(`${FIELD}[data-sx-count] [data-sx-field-left]`)} {
13
+ display: block;
14
+ font-size: 0.625rem;
15
+ }
16
+ ${at(TRACK)} {
17
+ fill: none;
18
+ stroke: color-mix(in oklab, currentColor 15%, transparent);
19
+ stroke-width: 2.5;
20
+ }
21
+ ${at(FILL)} {
22
+ fill: none;
23
+ stroke: ${v(ID, "color")};
24
+ stroke-width: 2.5;
25
+ stroke-linecap: round;
26
+ stroke-dasharray: 1 2;
27
+ stroke-dashoffset: calc(1.01 - var(--sx-field-used, 0) * 1.01);
28
+ transform-box: fill-box;
29
+ transform-origin: center;
30
+ rotate: -90deg;
31
+ scale: ${DIR} 1;
32
+ }
33
+ ${at(`${FIELD}[data-sx-count="near"] [data-sx-field-svg="fill"]`)} {
34
+ stroke: ${v(ID, "near")};
35
+ }
36
+ ${at(`${FIELD}[data-sx-count="over"] [data-sx-field-svg="fill"]`)} {
37
+ stroke: ${v(ID, "over")};
38
+ }
39
+ ${at(`${FIELD}[data-sx-count] ${layerOf(ID)}`)} {
40
+ scale: 1.2;
41
+ }
42
+ @media (forced-colors: active) {
43
+ ${at(TRACK)} {
44
+ stroke: GrayText;
45
+ }
46
+ ${at(`${FILL}, ${FIELD}[data-sx-count] [data-sx-field-svg="fill"]`)} {
47
+ stroke: Highlight;
48
+ }
49
+ }`;
50
+ const CSS = ` ${at(FILL)} {
51
+ ${timed(ID, "stroke-dashoffset, stroke")}
52
+ }
53
+ ${at(LAYER)} {
54
+ ${timed(ID, "scale")}
55
+ }`;
56
+ /**
57
+ * A ring fills as you type, turns amber near the limit, red past it, and grows a little to show the number left
58
+ * (`counter` on the field). Without it, the field shows "12/280".
59
+ */
60
+ export function inputCounter(options = {}) {
61
+ return defineForm(ID, CSS, {
62
+ state: STATE,
63
+ vars: {
64
+ [varName(ID, "color")]: options.color ?? "var(--color-sx-primary)",
65
+ [varName(ID, "near")]: options.near ?? "color-mix(in oklab, var(--color-sx-danger) 50%, var(--color-sx-success))",
66
+ [varName(ID, "over")]: options.over ?? "var(--color-sx-danger)",
67
+ [varName(ID, "time")]: `${options.duration ?? 0.2}s`,
68
+ },
69
+ layers: [
70
+ {
71
+ slot: "counter",
72
+ keep: true,
73
+ svg: {
74
+ viewBox: "0 0 24 24",
75
+ children: [
76
+ { tag: "circle", part: "track", attrs: { cx: 12, cy: 12, r: 10 } },
77
+ { tag: "circle", part: "fill", attrs: { cx: 12, cy: 12, r: 10, pathLength: 1 } },
78
+ ],
79
+ },
80
+ },
81
+ ],
82
+ needs: { tool: "counter" },
83
+ });
84
+ }
@@ -0,0 +1 @@
1
+ export declare const INPUT_COUNTER_SCHEMA: import("../../../schema/types.js").Schema;
@@ -0,0 +1,12 @@
1
+ import { defineSchema } from "../../../schema/define.js";
2
+ export const INPUT_COUNTER_SCHEMA = defineSchema()({
3
+ id: "inputCounter",
4
+ family: "form",
5
+ factory: "inputCounter",
6
+ fields: {
7
+ color: { kind: "color", label: "Ring colour", default: "var(--color-sx-primary)" },
8
+ near: { kind: "color", label: "Near the limit", default: "color-mix(in oklab, var(--color-sx-danger) 50%, var(--color-sx-success))" },
9
+ over: { kind: "color", label: "Past the limit", default: "var(--color-sx-danger)" },
10
+ duration: { kind: "number", label: "Duration", min: 0.05, max: 0.6, step: 0.05, unit: "s", default: 0.2 },
11
+ },
12
+ });
@@ -0,0 +1,19 @@
1
+ import type { FormEffect } from "../../types.js";
2
+ export interface InputCycleOptions {
3
+ /** The phrases the empty field shows in turn (up to 8). */
4
+ readonly words?: readonly string[];
5
+ /** Seconds each phrase stays. Default `3`. */
6
+ readonly hold?: number;
7
+ /**
8
+ * When the form is sent (or Enter is pressed in a field with no form), the typed text breaks into dust and the field
9
+ * empties. It waits until nothing in the form is flagged wrong. Runs code: the page needs `"use client"`. Default `true`.
10
+ */
11
+ readonly vanish?: boolean;
12
+ }
13
+ /** Phrases past this many are left out: a longer cycle is a slideshow, not a hint. */
14
+ export declare const CYCLE_MAX = 8;
15
+ /**
16
+ * The empty field's placeholder cycles through phrases, each sliding up into place; with `vanish`, the text you send
17
+ * breaks into dust and the field empties.
18
+ */
19
+ export declare function inputCycle(options?: InputCycleOptions): FormEffect;