@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
package/README.md CHANGED
@@ -431,6 +431,36 @@ const title = [enterRise({ by: "chars" }), inkGradient()]; // module level, li
431
431
  guide lists them).
432
432
  - **Guide for Claude Code:** `node_modules/@sharedex/ui/guides/text.md`.
433
433
 
434
+ ## Forms
435
+
436
+ Form controls whose **real native element does all the work** (the label, the keyboard, autofill, password managers,
437
+ screen readers, a plain form submit), wearing any number of the **91 form effects** from the owner's Form Effects
438
+ Atlas plus rows found online: `Field` (with built-in tools: clear, show password, Caps Lock, counter, strength, an async
439
+ check, a hint, auto-grow, `inline`), `Checkbox`, `CheckGroup`, `RadioGroup`, `Switch`, `Select`, our own `Combobox`,
440
+ `Range`, `NumberField`, `OtpField`, `TagsField`, `ChipGroup`, `FileDrop`, `FormSteps`, `FormReveal`, `FormSwap`,
441
+ `InlineEdit`, `ErrorSummary`, `SaveStatus`, `PasswordRules` and `FormBuddy`, a sign-in companion of our own.
442
+
443
+ ```tsx
444
+ import { Controller } from "react-hook-form";
445
+ import { Field, Checkbox, Combobox, inputFloat, validColor, checkDraw, pickerOpen } from "@sharedex/ui";
446
+
447
+ const fieldEffects = [inputFloat(), validColor()]; // module level, like every effect
448
+
449
+ <Field label="Email" type="email" effect={fieldEffects} error={errors.email?.message} {...register("email")} />
450
+ <Checkbox label="I agree" effect={checkDraw()} {...register("terms")} />
451
+ <Controller name="topics" control={control} render={({ field }) => (
452
+ <Combobox label="Topics" multiple options={topics} effect={pickerOpen()} {...field} />
453
+ )} />
454
+ ```
455
+
456
+ - **Every prop and the `ref` go on the native control**, so React Hook Form's `register()` spreads straight onto it; a
457
+ list or files go through a `Controller`. The package imports no form library: React Hook Form + Zod is a documented
458
+ recipe. Errors need words: `error` sets `aria-invalid`, points `aria-describedby` at the message and announces it.
459
+ - **Effects read the control's state through CSS** (`:focus-visible`, `:user-invalid`, `:checked`, `:autofill`), so
460
+ nearly all are plain data a Server Component can pass; three carry code (`checkConfetti`, `rangeElastic`,
461
+ `inputCycle`). They never scold while you type, keep their state under reduced motion and drop the movement.
462
+ - **Guide for Claude Code:** `node_modules/@sharedex/ui/guides/forms.md`.
463
+
434
464
  ## Option schemas (`@sharedex/ui/schema`)
435
465
 
436
466
  Every configurable piece describes its options as data, for tools such as the sharedex Design System Builder:
@@ -462,7 +492,11 @@ validateOptions(schema, { strength: 3 }, schemaOf); // ["strength: must b
462
492
 
463
493
  ## Status
464
494
 
465
- **0.9.0** adds `Text` and 69 text effects (every row of the Text Effects Atlas, plus 26 found online), `Typewriter`,
495
+ **0.10.0** adds the form controls and 91 form effects (every row of the Form Effects Atlas, plus 62 found online):
496
+ `Field` and its tools, `Checkbox`, `CheckGroup`, `RadioGroup`, `Switch`, `Select`, `Combobox`, `Range`, `NumberField`,
497
+ `OtpField`, `TagsField`, `ChipGroup`, `FileDrop`, `FormSteps`, `FormReveal`, `FormSwap`, `InlineEdit`, `ErrorSummary`,
498
+ `SaveStatus`, `PasswordRules`, `FormBuddy`, `focusFirstError`; the `danger` and `success` tokens; the `form` schema
499
+ family. **0.9.0** added `Text` and 69 text effects (every row of the Text Effects Atlas, plus 26 found online), `Typewriter`,
466
500
  `WordCycle`, `NumberRoll`, `TextPath`, `Text3D` (in `@sharedex/ui/three`), the Ticker's `scrollBoost`, and on the
467
501
  sections `titleEffect` / `eyebrowEffect` (every `Root`), a cycling word in the Hero's title (`titleWords`,
468
502
  `titleCycle`) and rolling figures in About (`statRoll`); schema families `text`, `word-cycle`, `number-roll`.
@@ -492,7 +526,8 @@ category filtering, drag, autoplay; Hero, About, Services and Contact sections;
492
526
  backgrounds (all 94 rows of the Background Effects Atlas: 88 effects, 3 rows covered by the
493
527
  `image()` / `video()` slots, 3 docs recipes); transitions (all 51 rows of the Transition Effects
494
528
  Atlas); the gallery effects, `Ticker` and `Grid`; `Button` (75 of the 76 rows of the Button Effects Atlas, the
495
- last a docs recipe); `Text` (all 94 rows of the Text Effects Atlas: 69 effects and the text components).
529
+ last a docs recipe); `Text` (all 94 rows of the Text Effects Atlas: 69 effects and the text components); the form
530
+ controls (all 134 rows of the Form Effects Atlas: 91 effects and the controls).
496
531
  **Next:** built-in Controls / Filters / Pagination components, full a11y wiring for the carousel
497
532
  (region label, live region, roving tabindex), RTL for the carousel.
498
533
 
@@ -1,10 +1,6 @@
1
1
  import type { CssEffect } from "../types.js";
2
- /**
3
- * `sx-bg-<id>-<hash of the css>`: React keeps one style per href, so the hash
4
- * lets an edited stylesheet (hot reload) or a second package version on the
5
- * same page get its own tag instead of silently reusing the first one.
6
- */
7
- export declare function styleHref(id: string, css: string): string;
2
+ import { styleHref } from "./styleHref.js";
3
+ export { styleHref };
8
4
  /**
9
5
  * Renders a CSS effect: one layer element, its generated nodes, and its
10
6
  * stylesheet. React 19 hoists `<style href precedence>` into <head> and keeps
@@ -1,24 +1,10 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useRef } from "react";
4
+ import { styleHref } from "./styleHref.js";
4
5
  import { useLayerNeeds } from "./useLayerNeeds.js";
5
- const hrefs = new Map();
6
- /**
7
- * `sx-bg-<id>-<hash of the css>`: React keeps one style per href, so the hash
8
- * lets an edited stylesheet (hot reload) or a second package version on the
9
- * same page get its own tag instead of silently reusing the first one.
10
- */
11
- export function styleHref(id, css) {
12
- let href = hrefs.get(css);
13
- if (href === undefined) {
14
- let h = 5381;
15
- for (let i = 0; i < css.length; i++)
16
- h = ((h << 5) + h + css.charCodeAt(i)) >>> 0;
17
- href = `sx-bg-${id}-${h.toString(36)}`;
18
- hrefs.set(css, href);
19
- }
20
- return href;
21
- }
6
+ // kept here too, for the modules that import it from this one (all of them client modules)
7
+ export { styleHref };
22
8
  /**
23
9
  * Renders a CSS effect: one layer element, its generated nodes, and its
24
10
  * stylesheet. React 19 hoists `<style href precedence>` into <head> and keeps
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `sx-bg-<id>-<hash of the css>`: React keeps one style per href, so the hash
3
+ * lets an edited stylesheet (hot reload) or a second package version on the
4
+ * same page get its own tag instead of silently reusing the first one.
5
+ */
6
+ export declare function styleHref(id: string, css: string): string;
@@ -0,0 +1,20 @@
1
+ // A <style>'s href for React 19 to hoist and keep once per page. A plain module (no "use client"): a Server
2
+ // Component that renders its own <style> (FormReveal, SaveStatus, PasswordRules) calls it on the server, where a client
3
+ // module's export is only a reference.
4
+ const hrefs = new Map();
5
+ /**
6
+ * `sx-bg-<id>-<hash of the css>`: React keeps one style per href, so the hash
7
+ * lets an edited stylesheet (hot reload) or a second package version on the
8
+ * same page get its own tag instead of silently reusing the first one.
9
+ */
10
+ export function styleHref(id, css) {
11
+ let href = hrefs.get(css);
12
+ if (href === undefined) {
13
+ let h = 5381;
14
+ for (let i = 0; i < css.length; i++)
15
+ h = ((h << 5) + h + css.charCodeAt(i)) >>> 0;
16
+ href = `sx-bg-${id}-${h.toString(36)}`;
17
+ hrefs.set(css, href);
18
+ }
19
+ return href;
20
+ }
@@ -1,5 +1,11 @@
1
- import type { ButtonEffect } from "./types.js";
1
+ import type { ButtonEffect, ButtonTier } from "./types.js";
2
2
  /** What a device can carry, as the backgrounds and transitions guess it. */
3
3
  export type ButtonDevice = "low" | "mid" | "high";
4
- /** The first link in the fallback chain this device runs; the last link when none does (it is always `all`). */
5
- export declare function pickEffect(effect: ButtonEffect, device: ButtonDevice): ButtonEffect;
4
+ /**
5
+ * The first link in the fallback chain this device runs; the last link when none does (it is always `all`). Any
6
+ * descriptor with a tier and a fallback works: the form controls pick their effects with it too.
7
+ */
8
+ export declare function pickEffect<E extends {
9
+ readonly tier: ButtonTier;
10
+ readonly fallback?: E;
11
+ } = ButtonEffect>(effect: E, device: ButtonDevice): E;
@@ -2,7 +2,10 @@
2
2
  // than backgrounds/runtime/tier.ts, so a plain button doesn't download the device check.
3
3
  const DEVICE = { low: 0, mid: 1, high: 2 };
4
4
  const NEEDS = { all: 0, mid: 1, high: 2 };
5
- /** The first link in the fallback chain this device runs; the last link when none does (it is always `all`). */
5
+ /**
6
+ * The first link in the fallback chain this device runs; the last link when none does (it is always `all`). Any
7
+ * descriptor with a tier and a fallback works: the form controls pick their effects with it too.
8
+ */
6
9
  export function pickEffect(effect, device) {
7
10
  let link = effect;
8
11
  let last = effect;
@@ -0,0 +1 @@
1
+ export declare const FORM_BASE_CSS = "@layer theme, base, components, utilities;\n@layer components {\n :where([data-sx-field]) {\n --sx-form-dir: 1;\n --sx-field-px: 1rem;\n --sx-field-py: 0.75rem;\n --sx-field-bw: 0px;\n --sx-field-start: var(--sx-field-px);\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n grid-template-areas: \"label\" \"box\" \"meter\" \"description\" \"note\" \"message\";\n align-content: start;\n min-inline-size: 0;\n position: relative;\n isolation: isolate;\n }\n :where([data-sx-field]:dir(rtl)) {\n --sx-form-dir: -1;\n }\n :where([data-sx-field]:has([data-sx-field-icon])) {\n --sx-field-start: calc(var(--sx-field-px) + 1.25em + 0.5rem);\n }\n :where([data-sx-field-label]) {\n grid-area: label;\n justify-self: start;\n position: relative;\n margin-block-end: 0.375rem;\n }\n :where([data-sx-field-box]) {\n grid-area: box;\n position: relative;\n isolation: isolate;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n min-inline-size: 0;\n }\n :where([data-sx-field-control]) {\n flex: 1 1 auto;\n align-self: stretch;\n min-inline-size: 0;\n box-sizing: border-box;\n margin: 0;\n border: 0;\n border-radius: inherit;\n padding-block: var(--sx-field-py);\n padding-inline: var(--sx-field-start) var(--sx-field-px);\n background: transparent;\n color: inherit;\n font: inherit;\n line-height: 1.5;\n outline: none;\n }\n :where(textarea[data-sx-field-control]) {\n resize: vertical;\n }\n :where([data-sx-field]:has([data-sx-field-control]:focus-visible) > [data-sx-field-box]) {\n outline: var(--sx-field-ring-width, 2px) var(--sx-field-ring-style, solid) var(--sx-field-ring-color, var(--color-sx-primary, currentColor));\n outline-offset: var(--sx-field-ring-offset, 2px);\n }\n :where([data-sx-ring=\"none\"]) {\n --sx-field-ring-style: none;\n }\n :where([data-sx-field-control]:autofill) {\n filter: none;\n -webkit-text-fill-color: currentColor;\n transition: background-color 0s 600000s, color 0s 600000s;\n }\n :where([data-sx-field-icon]) {\n position: absolute;\n inset-block: 0;\n inset-inline-start: var(--sx-field-px);\n display: grid;\n place-items: center;\n inline-size: 1.25em;\n pointer-events: none;\n }\n :where([data-sx-field-icon] > svg) {\n display: block;\n inline-size: 1.15em;\n block-size: 1.15em;\n }\n :where([data-sx-field-end]) {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n padding-inline-end: calc(var(--sx-field-px) / 2);\n }\n :where([data-sx-field-text]) {\n display: inline-block;\n }\n :where([data-sx-field-sr]) {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n }\n :where([data-sx-field-chars]) {\n display: inline-flex;\n }\n :where([data-sx-field-char]) {\n display: inline-block;\n white-space: pre;\n }\n :where([data-sx-field-layer]) {\n position: absolute;\n inset: calc(var(--sx-field-bw) * -1);\n border-radius: inherit;\n pointer-events: none;\n }\n :where([data-sx-field-layer][data-sx-field-slot=\"under\"]) {\n z-index: -1;\n }\n :where([data-sx-field-label] > [data-sx-field-layer]) {\n position: static;\n border-radius: 0;\n }\n :where([data-sx-field] > [data-sx-field-layer][data-sx-field-slot=\"behind\"]) {\n position: relative;\n inset: auto;\n grid-area: box;\n z-index: -1;\n border-radius: var(--radius-sx-control, 0);\n }\n :where([data-sx-field-clip]) {\n position: absolute;\n inset: 0;\n z-index: -1;\n overflow: hidden;\n border-radius: inherit;\n container-type: size;\n pointer-events: none;\n }\n :where([data-sx-field-clip] > [data-sx-field-layer]) {\n inset: 0;\n border-radius: 0;\n }\n :where([data-sx-field-layer] > svg) {\n position: absolute;\n inset: 0;\n display: block;\n inline-size: 100%;\n block-size: 100%;\n overflow: visible;\n }\n :where(fieldset[data-sx-field-layer]) {\n margin: 0;\n padding: 0;\n min-inline-size: 0;\n }\n :where([data-sx-field-description]) {\n grid-area: description;\n margin: 0.375rem 0 0;\n }\n :where([data-sx-field-message]) {\n grid-area: message;\n display: grid;\n grid-template-rows: 0fr;\n }\n :where([data-sx-field-message]:has(> [data-sx-field-error]:not(:empty))) {\n grid-template-rows: 1fr;\n }\n :where([data-sx-field-error]) {\n min-block-size: 0;\n margin: 0;\n overflow: hidden;\n }\n :where([data-sx-field-says]) {\n display: block;\n padding-block-start: 0.375rem;\n }\n :where([data-sx-field-off] *) {\n animation-play-state: paused !important;\n }\n :where([data-sx-field][data-sx-inline]) {\n --sx-field-px: 0.125rem;\n --sx-field-py: 0rem;\n display: inline-grid;\n vertical-align: baseline;\n grid-template-areas: \"box\";\n }\n :where([data-sx-field][data-sx-inline] > [data-sx-field-label]) {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n }\n :where([data-sx-field][data-sx-inline] [data-sx-field-control]) {\n field-sizing: content;\n min-inline-size: var(--sx-field-min, 6ch);\n }\n :where([data-sx-field][data-sx-inline] > :is([data-sx-field-message], [data-sx-field-description])) {\n position: absolute;\n inset-block-start: 100%;\n inset-inline-start: 0;\n z-index: 1;\n inline-size: max-content;\n max-inline-size: 20rem;\n }\n @media (pointer: coarse) {\n :where([data-sx-field-control]) {\n font-size: max(16px, 1em);\n }\n }\n @media (prefers-reduced-motion: reduce) {\n :where([data-sx-field-clip]:not([data-sx-field-keep]), [data-sx-field-layer]:not([data-sx-field-keep])) {\n display: none;\n }\n }\n @media (forced-colors: active) {\n :where([data-sx-ring]) {\n --sx-field-ring-style: solid;\n }\n }\n}";
@@ -0,0 +1,224 @@
1
+ // The structural sheet every form control ships: the anatomy, the focus ring on the box, autofill, 16 px text on touch
2
+ // screens, the error region, the reduced-motion and off-screen switches. Positioning only, no colours of its own: the
3
+ // look is styles/form.css (or the developer's className). Pure string, so it works without theme.css. See ./CLAUDE.md.
4
+ import { LAYER_ORDER } from "../backgrounds/runtime/rootCss.js";
5
+ const CONTROL = "[data-sx-field-control]";
6
+ export const FORM_BASE_CSS = `${LAYER_ORDER}
7
+ @layer components {
8
+ :where([data-sx-field]) {
9
+ --sx-form-dir: 1;
10
+ --sx-field-px: 1rem;
11
+ --sx-field-py: 0.75rem;
12
+ --sx-field-bw: 0px;
13
+ --sx-field-start: var(--sx-field-px);
14
+ display: grid;
15
+ grid-template-columns: minmax(0, 1fr);
16
+ grid-template-areas: "label" "box" "meter" "description" "note" "message";
17
+ align-content: start;
18
+ min-inline-size: 0;
19
+ position: relative;
20
+ isolation: isolate;
21
+ }
22
+ :where([data-sx-field]:dir(rtl)) {
23
+ --sx-form-dir: -1;
24
+ }
25
+ :where([data-sx-field]:has([data-sx-field-icon])) {
26
+ --sx-field-start: calc(var(--sx-field-px) + 1.25em + 0.5rem);
27
+ }
28
+ :where([data-sx-field-label]) {
29
+ grid-area: label;
30
+ justify-self: start;
31
+ position: relative;
32
+ margin-block-end: 0.375rem;
33
+ }
34
+ :where([data-sx-field-box]) {
35
+ grid-area: box;
36
+ position: relative;
37
+ isolation: isolate;
38
+ display: flex;
39
+ align-items: center;
40
+ box-sizing: border-box;
41
+ min-inline-size: 0;
42
+ }
43
+ :where(${CONTROL}) {
44
+ flex: 1 1 auto;
45
+ align-self: stretch;
46
+ min-inline-size: 0;
47
+ box-sizing: border-box;
48
+ margin: 0;
49
+ border: 0;
50
+ border-radius: inherit;
51
+ padding-block: var(--sx-field-py);
52
+ padding-inline: var(--sx-field-start) var(--sx-field-px);
53
+ background: transparent;
54
+ color: inherit;
55
+ font: inherit;
56
+ line-height: 1.5;
57
+ outline: none;
58
+ }
59
+ :where(textarea${CONTROL}) {
60
+ resize: vertical;
61
+ }
62
+ :where([data-sx-field]:has(${CONTROL}:focus-visible) > [data-sx-field-box]) {
63
+ outline: var(--sx-field-ring-width, 2px) var(--sx-field-ring-style, solid) var(--sx-field-ring-color, var(--color-sx-primary, currentColor));
64
+ outline-offset: var(--sx-field-ring-offset, 2px);
65
+ }
66
+ :where([data-sx-ring="none"]) {
67
+ --sx-field-ring-style: none;
68
+ }
69
+ :where(${CONTROL}:autofill) {
70
+ filter: none;
71
+ -webkit-text-fill-color: currentColor;
72
+ transition: background-color 0s 600000s, color 0s 600000s;
73
+ }
74
+ :where([data-sx-field-icon]) {
75
+ position: absolute;
76
+ inset-block: 0;
77
+ inset-inline-start: var(--sx-field-px);
78
+ display: grid;
79
+ place-items: center;
80
+ inline-size: 1.25em;
81
+ pointer-events: none;
82
+ }
83
+ :where([data-sx-field-icon] > svg) {
84
+ display: block;
85
+ inline-size: 1.15em;
86
+ block-size: 1.15em;
87
+ }
88
+ :where([data-sx-field-end]) {
89
+ display: flex;
90
+ align-items: center;
91
+ gap: 0.25rem;
92
+ padding-inline-end: calc(var(--sx-field-px) / 2);
93
+ }
94
+ :where([data-sx-field-text]) {
95
+ display: inline-block;
96
+ }
97
+ :where([data-sx-field-sr]) {
98
+ position: absolute;
99
+ inline-size: 1px;
100
+ block-size: 1px;
101
+ overflow: hidden;
102
+ clip-path: inset(50%);
103
+ white-space: nowrap;
104
+ }
105
+ :where([data-sx-field-chars]) {
106
+ display: inline-flex;
107
+ }
108
+ :where([data-sx-field-char]) {
109
+ display: inline-block;
110
+ white-space: pre;
111
+ }
112
+ :where([data-sx-field-layer]) {
113
+ position: absolute;
114
+ inset: calc(var(--sx-field-bw) * -1);
115
+ border-radius: inherit;
116
+ pointer-events: none;
117
+ }
118
+ :where([data-sx-field-layer][data-sx-field-slot="under"]) {
119
+ z-index: -1;
120
+ }
121
+ :where([data-sx-field-label] > [data-sx-field-layer]) {
122
+ position: static;
123
+ border-radius: 0;
124
+ }
125
+ :where([data-sx-field] > [data-sx-field-layer][data-sx-field-slot="behind"]) {
126
+ position: relative;
127
+ inset: auto;
128
+ grid-area: box;
129
+ z-index: -1;
130
+ border-radius: var(--radius-sx-control, 0);
131
+ }
132
+ :where([data-sx-field-clip]) {
133
+ position: absolute;
134
+ inset: 0;
135
+ z-index: -1;
136
+ overflow: hidden;
137
+ border-radius: inherit;
138
+ container-type: size;
139
+ pointer-events: none;
140
+ }
141
+ :where([data-sx-field-clip] > [data-sx-field-layer]) {
142
+ inset: 0;
143
+ border-radius: 0;
144
+ }
145
+ :where([data-sx-field-layer] > svg) {
146
+ position: absolute;
147
+ inset: 0;
148
+ display: block;
149
+ inline-size: 100%;
150
+ block-size: 100%;
151
+ overflow: visible;
152
+ }
153
+ :where(fieldset[data-sx-field-layer]) {
154
+ margin: 0;
155
+ padding: 0;
156
+ min-inline-size: 0;
157
+ }
158
+ :where([data-sx-field-description]) {
159
+ grid-area: description;
160
+ margin: 0.375rem 0 0;
161
+ }
162
+ :where([data-sx-field-message]) {
163
+ grid-area: message;
164
+ display: grid;
165
+ grid-template-rows: 0fr;
166
+ }
167
+ :where([data-sx-field-message]:has(> [data-sx-field-error]:not(:empty))) {
168
+ grid-template-rows: 1fr;
169
+ }
170
+ :where([data-sx-field-error]) {
171
+ min-block-size: 0;
172
+ margin: 0;
173
+ overflow: hidden;
174
+ }
175
+ :where([data-sx-field-says]) {
176
+ display: block;
177
+ padding-block-start: 0.375rem;
178
+ }
179
+ :where([data-sx-field-off] *) {
180
+ animation-play-state: paused !important;
181
+ }
182
+ :where([data-sx-field][data-sx-inline]) {
183
+ --sx-field-px: 0.125rem;
184
+ --sx-field-py: 0rem;
185
+ display: inline-grid;
186
+ vertical-align: baseline;
187
+ grid-template-areas: "box";
188
+ }
189
+ :where([data-sx-field][data-sx-inline] > [data-sx-field-label]) {
190
+ position: absolute;
191
+ inline-size: 1px;
192
+ block-size: 1px;
193
+ overflow: hidden;
194
+ clip-path: inset(50%);
195
+ white-space: nowrap;
196
+ }
197
+ :where([data-sx-field][data-sx-inline] ${CONTROL}) {
198
+ field-sizing: content;
199
+ min-inline-size: var(--sx-field-min, 6ch);
200
+ }
201
+ :where([data-sx-field][data-sx-inline] > :is([data-sx-field-message], [data-sx-field-description])) {
202
+ position: absolute;
203
+ inset-block-start: 100%;
204
+ inset-inline-start: 0;
205
+ z-index: 1;
206
+ inline-size: max-content;
207
+ max-inline-size: 20rem;
208
+ }
209
+ @media (pointer: coarse) {
210
+ :where(${CONTROL}) {
211
+ font-size: max(16px, 1em);
212
+ }
213
+ }
214
+ @media (prefers-reduced-motion: reduce) {
215
+ :where([data-sx-field-clip]:not([data-sx-field-keep]), [data-sx-field-layer]:not([data-sx-field-keep])) {
216
+ display: none;
217
+ }
218
+ }
219
+ @media (forced-colors: active) {
220
+ :where([data-sx-ring]) {
221
+ --sx-field-ring-style: solid;
222
+ }
223
+ }
224
+ }`;
@@ -0,0 +1,6 @@
1
+ export declare const BUDDY_CSS: string;
2
+ /**
3
+ * What moves: eyes follow at once, the face a little behind, hands with a spring, and a blink now and then that rests,
4
+ * eyes open, when the page pauses its loops or the buddy is off screen. Dropped under reduced motion.
5
+ */
6
+ export declare const BUDDY_MOTION: string;
@@ -0,0 +1,150 @@
1
+ // FormBuddy's sheets: our own character, a round sprout that sits on a form's top edge. Its parts are SVG groups named
2
+ // by `data-sx-buddy-part`; its state is on the root (`data-sx-buddy-state`: idle, look, cover, peek; `data-sx-mood`:
3
+ // worried, happy) and where it looks is two numbers, `--sx-buddy-x` / `--sx-buddy-y` (-1 to 1). Pure strings.
4
+ import { LAYER_ORDER } from "../backgrounds/runtime/rootCss.js";
5
+ const P = (part) => `[data-sx-buddy-part="${part}"]`;
6
+ const IS = (state) => `[data-sx-buddy-state="${state}"]`;
7
+ const MOOD = (mood) => `[data-sx-mood="${mood}"]`;
8
+ const ROOT = "[data-sx-buddy]";
9
+ // One face at a time: calm, worried (brows up, a wavy mouth) or happy (eyes closed in a smile, a grin). On a password the
10
+ // hands rise from behind the form's edge (outside the drawing, clipped) to cover the eyes; one slides down to peek when
11
+ // the password shows.
12
+ export const BUDDY_CSS = `${LAYER_ORDER}
13
+ @layer components {
14
+ :where(${ROOT}) {
15
+ --sx-buddy-x: 0;
16
+ --sx-buddy-y: 0;
17
+ --sx-buddy-body: var(--color-sx-primary);
18
+ --sx-buddy-leaf: var(--color-sx-accent, var(--color-sx-primary));
19
+ --sx-buddy-eye: white;
20
+ --sx-buddy-ink: color-mix(in oklab, var(--sx-buddy-body) 30%, black);
21
+ --sx-buddy-hand: color-mix(in oklab, var(--sx-buddy-body) 82%, var(--sx-buddy-ink));
22
+ --sx-buddy-cheek: color-mix(in oklab, var(--color-sx-accent, white) 55%, transparent);
23
+ display: block;
24
+ inline-size: var(--sx-buddy-size, 8rem);
25
+ max-inline-size: 100%;
26
+ margin-inline: auto;
27
+ pointer-events: none;
28
+ user-select: none;
29
+ }
30
+ :where(${ROOT} > svg) {
31
+ display: block;
32
+ inline-size: 100%;
33
+ block-size: auto;
34
+ overflow: hidden;
35
+ }
36
+ :where(${ROOT} ${P("body")}) {
37
+ fill: var(--sx-buddy-body);
38
+ }
39
+ :where(${ROOT} ${P("leaf")}) {
40
+ fill: var(--sx-buddy-leaf);
41
+ }
42
+ :where(${ROOT} ${P("stem")}) {
43
+ fill: none;
44
+ stroke: var(--sx-buddy-leaf);
45
+ stroke-width: 3;
46
+ stroke-linecap: round;
47
+ }
48
+ :where(${ROOT} ${P("white")}) {
49
+ fill: var(--sx-buddy-eye);
50
+ stroke: var(--sx-buddy-ink);
51
+ stroke-width: 1.5;
52
+ }
53
+ :where(${ROOT} ${P("pupil")}) {
54
+ fill: var(--sx-buddy-ink);
55
+ translate: calc(var(--sx-buddy-x) * 5px) calc(var(--sx-buddy-y) * 5px);
56
+ }
57
+ :where(${ROOT} ${P("glint")}) {
58
+ fill: var(--sx-buddy-eye);
59
+ }
60
+ :where(${ROOT} ${P("cheek")}) {
61
+ fill: var(--sx-buddy-cheek);
62
+ }
63
+ :where(${ROOT} :is(${P("calm")}, ${P("wobble")}, ${P("brow")}, ${P("smile-eye")}, ${P("finger")})) {
64
+ fill: none;
65
+ stroke: var(--sx-buddy-ink);
66
+ stroke-width: 3.5;
67
+ stroke-linecap: round;
68
+ stroke-linejoin: round;
69
+ }
70
+ :where(${ROOT} ${P("finger")}) {
71
+ stroke-width: 2.5;
72
+ opacity: 0.35;
73
+ }
74
+ :where(${ROOT} ${P("grin")}) {
75
+ fill: var(--sx-buddy-ink);
76
+ }
77
+ :where(${ROOT} ${P("hand")}) {
78
+ fill: var(--sx-buddy-hand);
79
+ }
80
+ :where(${ROOT} ${P("face")}) {
81
+ translate: calc(var(--sx-buddy-x) * 3px) calc(var(--sx-buddy-y) * 2px);
82
+ }
83
+ :where(${ROOT} ${P("eye")}) {
84
+ transform-box: fill-box;
85
+ transform-origin: 50% 50%;
86
+ }
87
+ :where(${ROOT} :is(${P("brow")}, ${P("smile-eye")}, ${P("grin")}, ${P("wobble")})) {
88
+ opacity: 0;
89
+ }
90
+ :where(${ROOT}${MOOD("worried")} :is(${P("brow")}, ${P("wobble")})) {
91
+ opacity: 1;
92
+ }
93
+ :where(${ROOT}${MOOD("worried")} ${P("calm")}) {
94
+ opacity: 0;
95
+ }
96
+ :where(${ROOT}${MOOD("happy")} :is(${P("smile-eye")}, ${P("grin")})) {
97
+ opacity: 1;
98
+ }
99
+ :where(${ROOT}${MOOD("happy")} :is(${P("eye")}, ${P("calm")})) {
100
+ opacity: 0;
101
+ }
102
+ :where(${ROOT}:is(${IS("cover")}, ${IS("peek")}) ${P("hand")}[data-sx-side="start"]) {
103
+ translate: 4px -66px;
104
+ rotate: 8deg;
105
+ }
106
+ :where(${ROOT}:is(${IS("cover")}, ${IS("peek")}) ${P("hand")}[data-sx-side="end"]) {
107
+ translate: -4px -66px;
108
+ rotate: -8deg;
109
+ }
110
+ :where(${ROOT}${IS("peek")} ${P("hand")}[data-sx-side="end"]) {
111
+ translate: 8px -34px;
112
+ rotate: -24deg;
113
+ }
114
+ :where(${ROOT} ${P("hand")}) {
115
+ transform-box: fill-box;
116
+ transform-origin: 50% 100%;
117
+ }
118
+ }`;
119
+ /**
120
+ * What moves: eyes follow at once, the face a little behind, hands with a spring, and a blink now and then that rests,
121
+ * eyes open, when the page pauses its loops or the buddy is off screen. Dropped under reduced motion.
122
+ */
123
+ export const BUDDY_MOTION = `@layer components {
124
+ :where(${ROOT} ${P("pupil")}) {
125
+ transition: translate 120ms ease-out;
126
+ }
127
+ :where(${ROOT} ${P("face")}) {
128
+ transition: translate 260ms var(--ease-sx-out, ease-out);
129
+ }
130
+ :where(${ROOT} ${P("hand")}) {
131
+ transition: translate 420ms linear(0, 0.45 12%, 0.85 25%, 1.08 38%, 1.1 46%, 1.03 62%, 0.99 78%, 1), rotate 420ms ease-out;
132
+ }
133
+ :where(${ROOT} :is(${P("brow")}, ${P("smile-eye")}, ${P("grin")}, ${P("wobble")}, ${P("calm")}, ${P("eye")})) {
134
+ transition: opacity 160ms ease-out;
135
+ }
136
+ :where(${ROOT}:is(${IS("idle")}, ${IS("look")}) ${P("eye")}) {
137
+ animation: sx-form-buddy-blink 5.2s ease-in-out infinite;
138
+ }
139
+ :where(html[data-sx-loops-paused] ${ROOT} ${P("eye")}, ${ROOT}[data-sx-buddy-off] ${P("eye")}) {
140
+ animation: none;
141
+ }
142
+ @keyframes sx-form-buddy-blink {
143
+ 0%, 93%, 100% {
144
+ scale: 1 1;
145
+ }
146
+ 96% {
147
+ scale: 1 0.1;
148
+ }
149
+ }
150
+ }`;
@@ -0,0 +1 @@
1
+ export declare const CHIPS_CSS = "@layer theme, base, components, utilities;\n@layer components {\n :where([data-sx-chips]) {\n --sx-form-dir: 1;\n --sx-chips-gap: 0.5rem;\n min-inline-size: 0;\n margin: 0;\n padding: 0;\n border: 0;\n }\n :where([data-sx-chips]:dir(rtl)) {\n --sx-form-dir: -1;\n }\n :where([data-sx-chips-legend]) {\n padding: 0;\n margin-block-end: 0.5rem;\n }\n :where([data-sx-chips-description]) {\n margin: 0 0 0.5rem;\n }\n :where([data-sx-chips-options]) {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sx-chips-gap);\n }\n :where([data-sx-chip-option]) {\n position: relative;\n isolation: isolate;\n display: inline-grid;\n grid-template-columns: minmax(0, 0fr) auto;\n align-items: center;\n min-block-size: 2rem;\n box-sizing: border-box;\n padding-inline: 0.75rem;\n border-radius: 999px;\n line-height: 1.25;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n }\n :where([data-sx-chip-option]:has([data-sx-chip-control]:checked)) {\n grid-template-columns: minmax(0, 1fr) auto;\n }\n :where([data-sx-chip-check]) {\n display: flex;\n align-items: center;\n min-inline-size: 0;\n overflow: hidden;\n }\n :where([data-sx-chip-check] > svg) {\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n margin-inline-end: 0.375rem;\n overflow: visible;\n fill: none;\n stroke: currentColor;\n stroke-width: 2.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n :where([data-sx-chip-check] path) {\n stroke-dasharray: 1 2;\n stroke-dashoffset: 1.01;\n }\n :where([data-sx-chip-option]:has([data-sx-chip-control]:checked) [data-sx-chip-check] path) {\n stroke-dashoffset: 0;\n }\n :where([data-sx-chip-control]) {\n position: absolute;\n inset: 0;\n z-index: 1;\n inline-size: 100%;\n block-size: 100%;\n margin: 0;\n border-radius: inherit;\n opacity: 0;\n cursor: inherit;\n appearance: none;\n }\n :where([data-sx-chip-option]:has([data-sx-chip-control]:focus-visible)) {\n outline: 2px solid var(--color-sx-primary, currentColor);\n outline-offset: 2px;\n }\n :where([data-sx-chip-option]:has([data-sx-chip-control]:disabled)) {\n opacity: 0.55;\n cursor: not-allowed;\n }\n :where([data-sx-chips] [data-sx-chip-layer]) {\n position: absolute;\n z-index: -1;\n pointer-events: none;\n }\n :where([data-sx-chips-message]) {\n display: grid;\n grid-template-rows: 0fr;\n }\n :where([data-sx-chips-message]:has([data-sx-chips-says])) {\n grid-template-rows: 1fr;\n }\n :where([data-sx-chips-error]) {\n min-block-size: 0;\n margin: 0;\n overflow: hidden;\n }\n :where([data-sx-chips-says]) {\n display: block;\n padding-block-start: 0.375rem;\n }\n @media (prefers-reduced-motion: reduce) {\n :where([data-sx-chips] [data-sx-chip-layer]:not([data-sx-chip-keep])) {\n display: none;\n }\n }\n @media (forced-colors: active) {\n :where([data-sx-chip-option]) {\n grid-template-columns: auto auto;\n column-gap: 0.375rem;\n border: 1px solid ButtonText;\n }\n :where([data-sx-chip-control]) {\n position: static;\n grid-area: 1 / 1;\n inline-size: 1em;\n block-size: 1em;\n opacity: 1;\n appearance: auto;\n }\n :where([data-sx-chip-check], [data-sx-chips] [data-sx-chip-layer]) {\n display: none;\n }\n }\n}";