@vielzeug/buildit 2.0.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 (792) hide show
  1. package/README.md +124 -0
  2. package/dist/accordion-item.cjs +32 -0
  3. package/dist/accordion-item.cjs.map +1 -0
  4. package/dist/accordion-item.js +72 -0
  5. package/dist/accordion-item.js.map +1 -0
  6. package/dist/accordion.cjs +2 -0
  7. package/dist/accordion.cjs.map +1 -0
  8. package/dist/accordion.js +37 -0
  9. package/dist/accordion.js.map +1 -0
  10. package/dist/alert.cjs +31 -0
  11. package/dist/alert.cjs.map +1 -0
  12. package/dist/alert.js +85 -0
  13. package/dist/alert.js.map +1 -0
  14. package/dist/avatar.cjs +37 -0
  15. package/dist/avatar.cjs.map +1 -0
  16. package/dist/avatar.js +123 -0
  17. package/dist/avatar.js.map +1 -0
  18. package/dist/badge.cjs +7 -0
  19. package/dist/badge.cjs.map +1 -0
  20. package/dist/badge.js +60 -0
  21. package/dist/badge.js.map +1 -0
  22. package/dist/box.cjs +2 -0
  23. package/dist/box.cjs.map +1 -0
  24. package/dist/box.js +22 -0
  25. package/dist/box.js.map +1 -0
  26. package/dist/breadcrumb.cjs +21 -0
  27. package/dist/breadcrumb.cjs.map +1 -0
  28. package/dist/breadcrumb.js +58 -0
  29. package/dist/breadcrumb.js.map +1 -0
  30. package/dist/buildit.cjs +1892 -0
  31. package/dist/buildit.cjs.map +1 -0
  32. package/dist/buildit.js +1892 -0
  33. package/dist/buildit.js.map +1 -0
  34. package/dist/button-group.cjs +6 -0
  35. package/dist/button-group.cjs.map +1 -0
  36. package/dist/button-group.js +31 -0
  37. package/dist/button-group.js.map +1 -0
  38. package/dist/button.cjs +30 -0
  39. package/dist/button.cjs.map +1 -0
  40. package/dist/button.js +115 -0
  41. package/dist/button.js.map +1 -0
  42. package/dist/card.cjs +23 -0
  43. package/dist/card.cjs.map +1 -0
  44. package/dist/card.js +99 -0
  45. package/dist/card.js.map +1 -0
  46. package/dist/checkbox-group.cjs +20 -0
  47. package/dist/checkbox-group.cjs.map +1 -0
  48. package/dist/checkbox-group.js +88 -0
  49. package/dist/checkbox-group.js.map +1 -0
  50. package/dist/checkbox.cjs +37 -0
  51. package/dist/checkbox.cjs.map +1 -0
  52. package/dist/checkbox.js +115 -0
  53. package/dist/checkbox.js.map +1 -0
  54. package/dist/chip.cjs +56 -0
  55. package/dist/chip.cjs.map +1 -0
  56. package/dist/chip.js +140 -0
  57. package/dist/chip.js.map +1 -0
  58. package/dist/combobox.cjs +93 -0
  59. package/dist/combobox.cjs.map +1 -0
  60. package/dist/combobox.js +401 -0
  61. package/dist/combobox.js.map +1 -0
  62. package/dist/content/avatar/avatar-group.css?inline.cjs +2 -0
  63. package/dist/content/avatar/avatar-group.css?inline.cjs.map +1 -0
  64. package/dist/content/avatar/avatar-group.css?inline.js +6 -0
  65. package/dist/content/avatar/avatar-group.css?inline.js.map +1 -0
  66. package/dist/content/avatar/avatar.css?inline.cjs +2 -0
  67. package/dist/content/avatar/avatar.css?inline.cjs.map +1 -0
  68. package/dist/content/avatar/avatar.css?inline.js +6 -0
  69. package/dist/content/avatar/avatar.css?inline.js.map +1 -0
  70. package/dist/content/avatar/avatar.d.ts +78 -0
  71. package/dist/content/avatar/avatar.d.ts.map +1 -0
  72. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs +2 -0
  73. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +1 -0
  74. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js +6 -0
  75. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +1 -0
  76. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs +2 -0
  77. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +1 -0
  78. package/dist/content/breadcrumb/breadcrumb.css?inline.js +6 -0
  79. package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +1 -0
  80. package/dist/content/breadcrumb/breadcrumb.d.ts +36 -0
  81. package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -0
  82. package/dist/content/card/card.css?inline.cjs +2 -0
  83. package/dist/content/card/card.css?inline.cjs.map +1 -0
  84. package/dist/content/card/card.css?inline.js +6 -0
  85. package/dist/content/card/card.css?inline.js.map +1 -0
  86. package/dist/content/card/card.d.ts +66 -0
  87. package/dist/content/card/card.d.ts.map +1 -0
  88. package/dist/content/index.cjs +1 -0
  89. package/dist/content/index.d.ts +15 -0
  90. package/dist/content/index.d.ts.map +1 -0
  91. package/dist/content/index.js +7 -0
  92. package/dist/content/pagination/pagination.css?inline.cjs +2 -0
  93. package/dist/content/pagination/pagination.css?inline.cjs.map +1 -0
  94. package/dist/content/pagination/pagination.css?inline.js +6 -0
  95. package/dist/content/pagination/pagination.css?inline.js.map +1 -0
  96. package/dist/content/pagination/pagination.d.ts +56 -0
  97. package/dist/content/pagination/pagination.d.ts.map +1 -0
  98. package/dist/content/separator/separator.css?inline.cjs +2 -0
  99. package/dist/content/separator/separator.css?inline.cjs.map +1 -0
  100. package/dist/content/separator/separator.css?inline.js +6 -0
  101. package/dist/content/separator/separator.css?inline.js.map +1 -0
  102. package/dist/content/separator/separator.d.ts +35 -0
  103. package/dist/content/separator/separator.d.ts.map +1 -0
  104. package/dist/content/table/table.css?inline.cjs +2 -0
  105. package/dist/content/table/table.css?inline.cjs.map +1 -0
  106. package/dist/content/table/table.css?inline.js +6 -0
  107. package/dist/content/table/table.css?inline.js.map +1 -0
  108. package/dist/content/table/table.d.ts +69 -0
  109. package/dist/content/table/table.d.ts.map +1 -0
  110. package/dist/content/text/text.css?inline.cjs +2 -0
  111. package/dist/content/text/text.css?inline.cjs.map +1 -0
  112. package/dist/content/text/text.css?inline.js +6 -0
  113. package/dist/content/text/text.css?inline.js.map +1 -0
  114. package/dist/content/text/text.d.ts +55 -0
  115. package/dist/content/text/text.d.ts.map +1 -0
  116. package/dist/craftit/dist/core/internal.cjs +2 -0
  117. package/dist/craftit/dist/core/internal.cjs.map +1 -0
  118. package/dist/craftit/dist/core/internal.js +25 -0
  119. package/dist/craftit/dist/core/internal.js.map +1 -0
  120. package/dist/craftit/dist/core/runtime-bindings.cjs +2 -0
  121. package/dist/craftit/dist/core/runtime-bindings.cjs.map +1 -0
  122. package/dist/craftit/dist/core/runtime-bindings.js +38 -0
  123. package/dist/craftit/dist/core/runtime-bindings.js.map +1 -0
  124. package/dist/craftit/dist/core/runtime-lifecycle.cjs +2 -0
  125. package/dist/craftit/dist/core/runtime-lifecycle.cjs.map +1 -0
  126. package/dist/craftit/dist/core/runtime-lifecycle.js +68 -0
  127. package/dist/craftit/dist/core/runtime-lifecycle.js.map +1 -0
  128. package/dist/craftit/dist/core/runtime.cjs +1 -0
  129. package/dist/craftit/dist/core/runtime.js +2 -0
  130. package/dist/craftit/dist/core/utilities.cjs +2 -0
  131. package/dist/craftit/dist/core/utilities.cjs.map +1 -0
  132. package/dist/craftit/dist/core/utilities.js +12 -0
  133. package/dist/craftit/dist/core/utilities.js.map +1 -0
  134. package/dist/craftit/dist/directives/attr.cjs +2 -0
  135. package/dist/craftit/dist/directives/attr.cjs.map +1 -0
  136. package/dist/craftit/dist/directives/attr.js +13 -0
  137. package/dist/craftit/dist/directives/attr.js.map +1 -0
  138. package/dist/craftit/dist/directives/bind.cjs +1 -0
  139. package/dist/craftit/dist/directives/bind.js +3 -0
  140. package/dist/craftit/dist/directives/choose.cjs +1 -0
  141. package/dist/craftit/dist/directives/choose.js +1 -0
  142. package/dist/craftit/dist/directives/classes.cjs +2 -0
  143. package/dist/craftit/dist/directives/classes.cjs.map +1 -0
  144. package/dist/craftit/dist/directives/classes.js +12 -0
  145. package/dist/craftit/dist/directives/classes.js.map +1 -0
  146. package/dist/craftit/dist/directives/each.cjs +2 -0
  147. package/dist/craftit/dist/directives/each.cjs.map +1 -0
  148. package/dist/craftit/dist/directives/each.js +96 -0
  149. package/dist/craftit/dist/directives/each.js.map +1 -0
  150. package/dist/craftit/dist/directives/index.cjs +1 -0
  151. package/dist/craftit/dist/directives/index.js +12 -0
  152. package/dist/craftit/dist/directives/match.cjs +1 -0
  153. package/dist/craftit/dist/directives/match.js +1 -0
  154. package/dist/craftit/dist/directives/memo.cjs +1 -0
  155. package/dist/craftit/dist/directives/memo.js +1 -0
  156. package/dist/craftit/dist/directives/raw.cjs +1 -0
  157. package/dist/craftit/dist/directives/raw.js +2 -0
  158. package/dist/craftit/dist/directives/spread.cjs +2 -0
  159. package/dist/craftit/dist/directives/spread.cjs.map +1 -0
  160. package/dist/craftit/dist/directives/spread.js +30 -0
  161. package/dist/craftit/dist/directives/spread.js.map +1 -0
  162. package/dist/craftit/dist/directives/style.cjs +1 -0
  163. package/dist/craftit/dist/directives/style.js +1 -0
  164. package/dist/craftit/dist/directives/until.cjs +1 -0
  165. package/dist/craftit/dist/directives/until.js +1 -0
  166. package/dist/craftit/dist/directives/when.cjs +2 -0
  167. package/dist/craftit/dist/directives/when.cjs.map +1 -0
  168. package/dist/craftit/dist/directives/when.js +14 -0
  169. package/dist/craftit/dist/directives/when.js.map +1 -0
  170. package/dist/craftit/dist/labs/a11y.cjs +2 -0
  171. package/dist/craftit/dist/labs/a11y.cjs.map +1 -0
  172. package/dist/craftit/dist/labs/a11y.js +38 -0
  173. package/dist/craftit/dist/labs/a11y.js.map +1 -0
  174. package/dist/craftit/dist/labs/list.cjs +2 -0
  175. package/dist/craftit/dist/labs/list.cjs.map +1 -0
  176. package/dist/craftit/dist/labs/list.js +87 -0
  177. package/dist/craftit/dist/labs/list.js.map +1 -0
  178. package/dist/craftit/dist/labs/observers.cjs +2 -0
  179. package/dist/craftit/dist/labs/observers.cjs.map +1 -0
  180. package/dist/craftit/dist/labs/observers.js +28 -0
  181. package/dist/craftit/dist/labs/observers.js.map +1 -0
  182. package/dist/craftit/dist/labs/overlay.cjs +2 -0
  183. package/dist/craftit/dist/labs/overlay.cjs.map +1 -0
  184. package/dist/craftit/dist/labs/overlay.js +49 -0
  185. package/dist/craftit/dist/labs/overlay.js.map +1 -0
  186. package/dist/craftit/dist/labs/selectable.cjs +2 -0
  187. package/dist/craftit/dist/labs/selectable.cjs.map +1 -0
  188. package/dist/craftit/dist/labs/selectable.js +29 -0
  189. package/dist/craftit/dist/labs/selectable.js.map +1 -0
  190. package/dist/craftit/dist/labs/selection.cjs +2 -0
  191. package/dist/craftit/dist/labs/selection.cjs.map +1 -0
  192. package/dist/craftit/dist/labs/selection.js +42 -0
  193. package/dist/craftit/dist/labs/selection.js.map +1 -0
  194. package/dist/craftit/dist/labs.cjs +1 -0
  195. package/dist/craftit/dist/labs.js +6 -0
  196. package/dist/custom-elements.json +2321 -0
  197. package/dist/dialog.cjs +33 -0
  198. package/dist/dialog.cjs.map +1 -0
  199. package/dist/dialog.js +94 -0
  200. package/dist/dialog.js.map +1 -0
  201. package/dist/disclosure/accordion/accordion.css?inline.cjs +2 -0
  202. package/dist/disclosure/accordion/accordion.css?inline.cjs.map +1 -0
  203. package/dist/disclosure/accordion/accordion.css?inline.js +6 -0
  204. package/dist/disclosure/accordion/accordion.css?inline.js.map +1 -0
  205. package/dist/disclosure/accordion/accordion.d.ts +47 -0
  206. package/dist/disclosure/accordion/accordion.d.ts.map +1 -0
  207. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs +2 -0
  208. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +1 -0
  209. package/dist/disclosure/accordion-item/accordion-item.css?inline.js +6 -0
  210. package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +1 -0
  211. package/dist/disclosure/accordion-item/accordion-item.d.ts +62 -0
  212. package/dist/disclosure/accordion-item/accordion-item.d.ts.map +1 -0
  213. package/dist/disclosure/index.cjs +1 -0
  214. package/dist/disclosure/index.d.ts +11 -0
  215. package/dist/disclosure/index.d.ts.map +1 -0
  216. package/dist/disclosure/index.js +5 -0
  217. package/dist/disclosure/tab-item/tab-item.css?inline.cjs +2 -0
  218. package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +1 -0
  219. package/dist/disclosure/tab-item/tab-item.css?inline.js +6 -0
  220. package/dist/disclosure/tab-item/tab-item.css?inline.js.map +1 -0
  221. package/dist/disclosure/tab-item/tab-item.d.ts +39 -0
  222. package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -0
  223. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs +2 -0
  224. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +1 -0
  225. package/dist/disclosure/tab-panel/tab-panel.css?inline.js +6 -0
  226. package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +1 -0
  227. package/dist/disclosure/tab-panel/tab-panel.d.ts +30 -0
  228. package/dist/disclosure/tab-panel/tab-panel.d.ts.map +1 -0
  229. package/dist/disclosure/tabs/tabs.css?inline.cjs +2 -0
  230. package/dist/disclosure/tabs/tabs.css?inline.cjs.map +1 -0
  231. package/dist/disclosure/tabs/tabs.css?inline.js +6 -0
  232. package/dist/disclosure/tabs/tabs.css?inline.js.map +1 -0
  233. package/dist/disclosure/tabs/tabs.d.ts +64 -0
  234. package/dist/disclosure/tabs/tabs.d.ts.map +1 -0
  235. package/dist/drawer.cjs +31 -0
  236. package/dist/drawer.cjs.map +1 -0
  237. package/dist/drawer.js +98 -0
  238. package/dist/drawer.js.map +1 -0
  239. package/dist/feedback/alert/alert.css?inline.cjs +2 -0
  240. package/dist/feedback/alert/alert.css?inline.cjs.map +1 -0
  241. package/dist/feedback/alert/alert.css?inline.js +6 -0
  242. package/dist/feedback/alert/alert.css?inline.js.map +1 -0
  243. package/dist/feedback/alert/alert.d.ts +63 -0
  244. package/dist/feedback/alert/alert.d.ts.map +1 -0
  245. package/dist/feedback/badge/badge.css?inline.cjs +2 -0
  246. package/dist/feedback/badge/badge.css?inline.cjs.map +1 -0
  247. package/dist/feedback/badge/badge.css?inline.js +6 -0
  248. package/dist/feedback/badge/badge.css?inline.js.map +1 -0
  249. package/dist/feedback/badge/badge.d.ts +67 -0
  250. package/dist/feedback/badge/badge.d.ts.map +1 -0
  251. package/dist/feedback/chip/chip.css?inline.cjs +2 -0
  252. package/dist/feedback/chip/chip.css?inline.cjs.map +1 -0
  253. package/dist/feedback/chip/chip.css?inline.js +6 -0
  254. package/dist/feedback/chip/chip.css?inline.js.map +1 -0
  255. package/dist/feedback/chip/chip.d.ts +124 -0
  256. package/dist/feedback/chip/chip.d.ts.map +1 -0
  257. package/dist/feedback/index.cjs +1 -0
  258. package/dist/feedback/index.d.ts +13 -0
  259. package/dist/feedback/index.d.ts.map +1 -0
  260. package/dist/feedback/index.js +6 -0
  261. package/dist/feedback/progress/progress.css?inline.cjs +2 -0
  262. package/dist/feedback/progress/progress.css?inline.cjs.map +1 -0
  263. package/dist/feedback/progress/progress.css?inline.js +6 -0
  264. package/dist/feedback/progress/progress.css?inline.js.map +1 -0
  265. package/dist/feedback/progress/progress.d.ts +64 -0
  266. package/dist/feedback/progress/progress.d.ts.map +1 -0
  267. package/dist/feedback/skeleton/skeleton.css?inline.cjs +2 -0
  268. package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +1 -0
  269. package/dist/feedback/skeleton/skeleton.css?inline.js +6 -0
  270. package/dist/feedback/skeleton/skeleton.css?inline.js.map +1 -0
  271. package/dist/feedback/skeleton/skeleton.d.ts +61 -0
  272. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -0
  273. package/dist/feedback/toast/index.d.ts +2 -0
  274. package/dist/feedback/toast/index.d.ts.map +1 -0
  275. package/dist/feedback/toast/toast.css?inline.cjs +2 -0
  276. package/dist/feedback/toast/toast.css?inline.cjs.map +1 -0
  277. package/dist/feedback/toast/toast.css?inline.js +6 -0
  278. package/dist/feedback/toast/toast.css?inline.js.map +1 -0
  279. package/dist/feedback/toast/toast.d.ts +95 -0
  280. package/dist/feedback/toast/toast.d.ts.map +1 -0
  281. package/dist/file-input.cjs +66 -0
  282. package/dist/file-input.cjs.map +1 -0
  283. package/dist/file-input.js +210 -0
  284. package/dist/file-input.js.map +1 -0
  285. package/dist/form.cjs +11 -0
  286. package/dist/form.cjs.map +1 -0
  287. package/dist/form.js +49 -0
  288. package/dist/form.js.map +1 -0
  289. package/dist/grid-item.cjs +2 -0
  290. package/dist/grid-item.cjs.map +1 -0
  291. package/dist/grid-item.js +28 -0
  292. package/dist/grid-item.js.map +1 -0
  293. package/dist/grid.cjs +2 -0
  294. package/dist/grid.cjs.map +1 -0
  295. package/dist/grid.js +90 -0
  296. package/dist/grid.js.map +1 -0
  297. package/dist/icons.cjs +176 -0
  298. package/dist/icons.cjs.map +1 -0
  299. package/dist/icons.d.ts +15 -0
  300. package/dist/icons.d.ts.map +1 -0
  301. package/dist/icons.js +181 -0
  302. package/dist/icons.js.map +1 -0
  303. package/dist/index.cjs +1 -0
  304. package/dist/index.d.ts +9 -0
  305. package/dist/index.d.ts.map +1 -0
  306. package/dist/index.js +53 -0
  307. package/dist/input.cjs +48 -0
  308. package/dist/input.cjs.map +1 -0
  309. package/dist/input.js +182 -0
  310. package/dist/input.js.map +1 -0
  311. package/dist/inputs/button/button.css?inline.cjs +2 -0
  312. package/dist/inputs/button/button.css?inline.cjs.map +1 -0
  313. package/dist/inputs/button/button.css?inline.js +6 -0
  314. package/dist/inputs/button/button.css?inline.js.map +1 -0
  315. package/dist/inputs/button/button.d.ts +73 -0
  316. package/dist/inputs/button/button.d.ts.map +1 -0
  317. package/dist/inputs/button-group/button-group.css?inline.cjs +2 -0
  318. package/dist/inputs/button-group/button-group.css?inline.cjs.map +1 -0
  319. package/dist/inputs/button-group/button-group.css?inline.js +6 -0
  320. package/dist/inputs/button-group/button-group.css?inline.js.map +1 -0
  321. package/dist/inputs/button-group/button-group.d.ts +52 -0
  322. package/dist/inputs/button-group/button-group.d.ts.map +1 -0
  323. package/dist/inputs/checkbox/checkbox.css?inline.cjs +2 -0
  324. package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +1 -0
  325. package/dist/inputs/checkbox/checkbox.css?inline.js +6 -0
  326. package/dist/inputs/checkbox/checkbox.css?inline.js.map +1 -0
  327. package/dist/inputs/checkbox/checkbox.d.ts +43 -0
  328. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -0
  329. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs +2 -0
  330. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +1 -0
  331. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js +6 -0
  332. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +1 -0
  333. package/dist/inputs/checkbox-group/checkbox-group.d.ts +56 -0
  334. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -0
  335. package/dist/inputs/combobox/combobox-options.cjs +2 -0
  336. package/dist/inputs/combobox/combobox-options.cjs.map +1 -0
  337. package/dist/inputs/combobox/combobox-options.d.ts +7 -0
  338. package/dist/inputs/combobox/combobox-options.d.ts.map +1 -0
  339. package/dist/inputs/combobox/combobox-options.js +36 -0
  340. package/dist/inputs/combobox/combobox-options.js.map +1 -0
  341. package/dist/inputs/combobox/combobox-virtualizer.cjs +2 -0
  342. package/dist/inputs/combobox/combobox-virtualizer.cjs.map +1 -0
  343. package/dist/inputs/combobox/combobox-virtualizer.d.ts +20 -0
  344. package/dist/inputs/combobox/combobox-virtualizer.d.ts.map +1 -0
  345. package/dist/inputs/combobox/combobox-virtualizer.js +71 -0
  346. package/dist/inputs/combobox/combobox-virtualizer.js.map +1 -0
  347. package/dist/inputs/combobox/combobox.css?inline.cjs +2 -0
  348. package/dist/inputs/combobox/combobox.css?inline.cjs.map +1 -0
  349. package/dist/inputs/combobox/combobox.css?inline.js +6 -0
  350. package/dist/inputs/combobox/combobox.css?inline.js.map +1 -0
  351. package/dist/inputs/combobox/combobox.d.ts +28 -0
  352. package/dist/inputs/combobox/combobox.d.ts.map +1 -0
  353. package/dist/inputs/combobox/combobox.types.d.ts +36 -0
  354. package/dist/inputs/combobox/combobox.types.d.ts.map +1 -0
  355. package/dist/inputs/file-input/file-input.css?inline.cjs +2 -0
  356. package/dist/inputs/file-input/file-input.css?inline.cjs.map +1 -0
  357. package/dist/inputs/file-input/file-input.css?inline.js +6 -0
  358. package/dist/inputs/file-input/file-input.css?inline.js.map +1 -0
  359. package/dist/inputs/file-input/file-input.d.ts +94 -0
  360. package/dist/inputs/file-input/file-input.d.ts.map +1 -0
  361. package/dist/inputs/form/form.css?inline.cjs +2 -0
  362. package/dist/inputs/form/form.css?inline.cjs.map +1 -0
  363. package/dist/inputs/form/form.css?inline.js +6 -0
  364. package/dist/inputs/form/form.css?inline.js.map +1 -0
  365. package/dist/inputs/form/form.d.ts +61 -0
  366. package/dist/inputs/form/form.d.ts.map +1 -0
  367. package/dist/inputs/index.cjs +1 -0
  368. package/dist/inputs/index.d.ts +38 -0
  369. package/dist/inputs/index.d.ts.map +1 -0
  370. package/dist/inputs/index.js +18 -0
  371. package/dist/inputs/input/input.css?inline.cjs +2 -0
  372. package/dist/inputs/input/input.css?inline.cjs.map +1 -0
  373. package/dist/inputs/input/input.css?inline.js +6 -0
  374. package/dist/inputs/input/input.css?inline.js.map +1 -0
  375. package/dist/inputs/input/input.d.ts +82 -0
  376. package/dist/inputs/input/input.d.ts.map +1 -0
  377. package/dist/inputs/number-input/number-input.css?inline.cjs +2 -0
  378. package/dist/inputs/number-input/number-input.css?inline.cjs.map +1 -0
  379. package/dist/inputs/number-input/number-input.css?inline.js +6 -0
  380. package/dist/inputs/number-input/number-input.css?inline.js.map +1 -0
  381. package/dist/inputs/number-input/number-input.d.ts +76 -0
  382. package/dist/inputs/number-input/number-input.d.ts.map +1 -0
  383. package/dist/inputs/otp-input/otp-input.css?inline.cjs +2 -0
  384. package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +1 -0
  385. package/dist/inputs/otp-input/otp-input.css?inline.js +6 -0
  386. package/dist/inputs/otp-input/otp-input.css?inline.js.map +1 -0
  387. package/dist/inputs/otp-input/otp-input.d.ts +71 -0
  388. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -0
  389. package/dist/inputs/radio/radio.css?inline.cjs +2 -0
  390. package/dist/inputs/radio/radio.css?inline.cjs.map +1 -0
  391. package/dist/inputs/radio/radio.css?inline.js +6 -0
  392. package/dist/inputs/radio/radio.css?inline.js.map +1 -0
  393. package/dist/inputs/radio/radio.d.ts +41 -0
  394. package/dist/inputs/radio/radio.d.ts.map +1 -0
  395. package/dist/inputs/radio-group/radio-group.css?inline.cjs +2 -0
  396. package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +1 -0
  397. package/dist/inputs/radio-group/radio-group.css?inline.js +6 -0
  398. package/dist/inputs/radio-group/radio-group.css?inline.js.map +1 -0
  399. package/dist/inputs/radio-group/radio-group.d.ts +61 -0
  400. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -0
  401. package/dist/inputs/rating/rating.css?inline.cjs +2 -0
  402. package/dist/inputs/rating/rating.css?inline.cjs.map +1 -0
  403. package/dist/inputs/rating/rating.css?inline.js +6 -0
  404. package/dist/inputs/rating/rating.css?inline.js.map +1 -0
  405. package/dist/inputs/rating/rating.d.ts +48 -0
  406. package/dist/inputs/rating/rating.d.ts.map +1 -0
  407. package/dist/inputs/select/select.css?inline.cjs +2 -0
  408. package/dist/inputs/select/select.css?inline.cjs.map +1 -0
  409. package/dist/inputs/select/select.css?inline.js +6 -0
  410. package/dist/inputs/select/select.css?inline.js.map +1 -0
  411. package/dist/inputs/select/select.d.ts +79 -0
  412. package/dist/inputs/select/select.d.ts.map +1 -0
  413. package/dist/inputs/shared/base-props.d.ts +39 -0
  414. package/dist/inputs/shared/base-props.d.ts.map +1 -0
  415. package/dist/inputs/shared/composables/index.cjs +1 -0
  416. package/dist/inputs/shared/composables/index.d.ts +3 -0
  417. package/dist/inputs/shared/composables/index.d.ts.map +1 -0
  418. package/dist/inputs/shared/composables/index.js +2 -0
  419. package/dist/inputs/shared/composables/use-text-field.cjs +2 -0
  420. package/dist/inputs/shared/composables/use-text-field.cjs.map +1 -0
  421. package/dist/inputs/shared/composables/use-text-field.d.ts +33 -0
  422. package/dist/inputs/shared/composables/use-text-field.d.ts.map +1 -0
  423. package/dist/inputs/shared/composables/use-text-field.js +41 -0
  424. package/dist/inputs/shared/composables/use-text-field.js.map +1 -0
  425. package/dist/inputs/shared/composables/use-toggle-field.cjs +2 -0
  426. package/dist/inputs/shared/composables/use-toggle-field.cjs.map +1 -0
  427. package/dist/inputs/shared/composables/use-toggle-field.d.ts +18 -0
  428. package/dist/inputs/shared/composables/use-toggle-field.d.ts.map +1 -0
  429. package/dist/inputs/shared/composables/use-toggle-field.js +26 -0
  430. package/dist/inputs/shared/composables/use-toggle-field.js.map +1 -0
  431. package/dist/inputs/shared/design-presets.cjs +2 -0
  432. package/dist/inputs/shared/design-presets.cjs.map +1 -0
  433. package/dist/inputs/shared/design-presets.d.ts +97 -0
  434. package/dist/inputs/shared/design-presets.d.ts.map +1 -0
  435. package/dist/inputs/shared/design-presets.js +92 -0
  436. package/dist/inputs/shared/design-presets.js.map +1 -0
  437. package/dist/inputs/shared/dom-sync/dropdown.cjs +2 -0
  438. package/dist/inputs/shared/dom-sync/dropdown.cjs.map +1 -0
  439. package/dist/inputs/shared/dom-sync/dropdown.d.ts +7 -0
  440. package/dist/inputs/shared/dom-sync/dropdown.d.ts.map +1 -0
  441. package/dist/inputs/shared/dom-sync/dropdown.js +30 -0
  442. package/dist/inputs/shared/dom-sync/dropdown.js.map +1 -0
  443. package/dist/inputs/shared/dom-sync/field-sync.cjs +2 -0
  444. package/dist/inputs/shared/dom-sync/field-sync.cjs.map +1 -0
  445. package/dist/inputs/shared/dom-sync/field-sync.d.ts +36 -0
  446. package/dist/inputs/shared/dom-sync/field-sync.d.ts.map +1 -0
  447. package/dist/inputs/shared/dom-sync/field-sync.js +37 -0
  448. package/dist/inputs/shared/dom-sync/field-sync.js.map +1 -0
  449. package/dist/inputs/shared/dom-sync/form-context.cjs +2 -0
  450. package/dist/inputs/shared/dom-sync/form-context.cjs.map +1 -0
  451. package/dist/inputs/shared/dom-sync/form-context.d.ts +18 -0
  452. package/dist/inputs/shared/dom-sync/form-context.d.ts.map +1 -0
  453. package/dist/inputs/shared/dom-sync/form-context.js +20 -0
  454. package/dist/inputs/shared/dom-sync/form-context.js.map +1 -0
  455. package/dist/inputs/shared/dom-sync/index.cjs +1 -0
  456. package/dist/inputs/shared/dom-sync/index.d.ts +5 -0
  457. package/dist/inputs/shared/dom-sync/index.d.ts.map +1 -0
  458. package/dist/inputs/shared/dom-sync/index.js +4 -0
  459. package/dist/inputs/shared/dom-sync/label-sync.cjs +2 -0
  460. package/dist/inputs/shared/dom-sync/label-sync.cjs.map +1 -0
  461. package/dist/inputs/shared/dom-sync/label-sync.d.ts +16 -0
  462. package/dist/inputs/shared/dom-sync/label-sync.d.ts.map +1 -0
  463. package/dist/inputs/shared/dom-sync/label-sync.js +12 -0
  464. package/dist/inputs/shared/dom-sync/label-sync.js.map +1 -0
  465. package/dist/inputs/shared/form-context.cjs +2 -0
  466. package/dist/inputs/shared/form-context.cjs.map +1 -0
  467. package/dist/inputs/shared/form-context.d.ts +19 -0
  468. package/dist/inputs/shared/form-context.d.ts.map +1 -0
  469. package/dist/inputs/shared/form-context.js +7 -0
  470. package/dist/inputs/shared/form-context.js.map +1 -0
  471. package/dist/inputs/shared/utils/assistive-text.cjs +2 -0
  472. package/dist/inputs/shared/utils/assistive-text.cjs.map +1 -0
  473. package/dist/inputs/shared/utils/assistive-text.d.ts +24 -0
  474. package/dist/inputs/shared/utils/assistive-text.d.ts.map +1 -0
  475. package/dist/inputs/shared/utils/assistive-text.js +37 -0
  476. package/dist/inputs/shared/utils/assistive-text.js.map +1 -0
  477. package/dist/inputs/shared/utils/choice-change.cjs +2 -0
  478. package/dist/inputs/shared/utils/choice-change.cjs.map +1 -0
  479. package/dist/inputs/shared/utils/choice-change.d.ts +8 -0
  480. package/dist/inputs/shared/utils/choice-change.d.ts.map +1 -0
  481. package/dist/inputs/shared/utils/choice-change.js +13 -0
  482. package/dist/inputs/shared/utils/choice-change.js.map +1 -0
  483. package/dist/inputs/shared/utils/controlled-csv.cjs +2 -0
  484. package/dist/inputs/shared/utils/controlled-csv.cjs.map +1 -0
  485. package/dist/inputs/shared/utils/controlled-csv.d.ts +8 -0
  486. package/dist/inputs/shared/utils/controlled-csv.d.ts.map +1 -0
  487. package/dist/inputs/shared/utils/controlled-csv.js +15 -0
  488. package/dist/inputs/shared/utils/controlled-csv.js.map +1 -0
  489. package/dist/inputs/shared/utils/field-values.cjs +2 -0
  490. package/dist/inputs/shared/utils/field-values.cjs.map +1 -0
  491. package/dist/inputs/shared/utils/field-values.d.ts +5 -0
  492. package/dist/inputs/shared/utils/field-values.d.ts.map +1 -0
  493. package/dist/inputs/shared/utils/field-values.js +13 -0
  494. package/dist/inputs/shared/utils/field-values.js.map +1 -0
  495. package/dist/inputs/shared/utils/index.d.ts +5 -0
  496. package/dist/inputs/shared/utils/index.d.ts.map +1 -0
  497. package/dist/inputs/shared/validation/index.cjs +2 -0
  498. package/dist/inputs/shared/validation/index.cjs.map +1 -0
  499. package/dist/inputs/shared/validation/index.d.ts +14 -0
  500. package/dist/inputs/shared/validation/index.d.ts.map +1 -0
  501. package/dist/inputs/shared/validation/index.js +13 -0
  502. package/dist/inputs/shared/validation/index.js.map +1 -0
  503. package/dist/inputs/slider/slider.css?inline.cjs +2 -0
  504. package/dist/inputs/slider/slider.css?inline.cjs.map +1 -0
  505. package/dist/inputs/slider/slider.css?inline.js +6 -0
  506. package/dist/inputs/slider/slider.css?inline.js.map +1 -0
  507. package/dist/inputs/slider/slider.d.ts +82 -0
  508. package/dist/inputs/slider/slider.d.ts.map +1 -0
  509. package/dist/inputs/switch/switch.css?inline.cjs +2 -0
  510. package/dist/inputs/switch/switch.css?inline.cjs.map +1 -0
  511. package/dist/inputs/switch/switch.css?inline.js +6 -0
  512. package/dist/inputs/switch/switch.css?inline.js.map +1 -0
  513. package/dist/inputs/switch/switch.d.ts +40 -0
  514. package/dist/inputs/switch/switch.d.ts.map +1 -0
  515. package/dist/inputs/textarea/textarea.css?inline.cjs +2 -0
  516. package/dist/inputs/textarea/textarea.css?inline.cjs.map +1 -0
  517. package/dist/inputs/textarea/textarea.css?inline.js +6 -0
  518. package/dist/inputs/textarea/textarea.css?inline.js.map +1 -0
  519. package/dist/inputs/textarea/textarea.d.ts +57 -0
  520. package/dist/inputs/textarea/textarea.d.ts.map +1 -0
  521. package/dist/layout/box/box.css?inline.cjs +2 -0
  522. package/dist/layout/box/box.css?inline.cjs.map +1 -0
  523. package/dist/layout/box/box.css?inline.js +6 -0
  524. package/dist/layout/box/box.css?inline.js.map +1 -0
  525. package/dist/layout/box/box.d.ts +52 -0
  526. package/dist/layout/box/box.d.ts.map +1 -0
  527. package/dist/layout/grid/grid.css?inline.cjs +2 -0
  528. package/dist/layout/grid/grid.css?inline.cjs.map +1 -0
  529. package/dist/layout/grid/grid.css?inline.js +6 -0
  530. package/dist/layout/grid/grid.css?inline.js.map +1 -0
  531. package/dist/layout/grid/grid.d.ts +105 -0
  532. package/dist/layout/grid/grid.d.ts.map +1 -0
  533. package/dist/layout/grid-item/grid-item.css?inline.cjs +2 -0
  534. package/dist/layout/grid-item/grid-item.css?inline.cjs.map +1 -0
  535. package/dist/layout/grid-item/grid-item.css?inline.js +6 -0
  536. package/dist/layout/grid-item/grid-item.css?inline.js.map +1 -0
  537. package/dist/layout/grid-item/grid-item.d.ts +47 -0
  538. package/dist/layout/grid-item/grid-item.d.ts.map +1 -0
  539. package/dist/layout/index.cjs +1 -0
  540. package/dist/layout/index.d.ts +9 -0
  541. package/dist/layout/index.d.ts.map +1 -0
  542. package/dist/layout/index.js +4 -0
  543. package/dist/layout/sidebar/sidebar-group.css?inline.cjs +2 -0
  544. package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +1 -0
  545. package/dist/layout/sidebar/sidebar-group.css?inline.js +6 -0
  546. package/dist/layout/sidebar/sidebar-group.css?inline.js.map +1 -0
  547. package/dist/layout/sidebar/sidebar-item.css?inline.cjs +2 -0
  548. package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +1 -0
  549. package/dist/layout/sidebar/sidebar-item.css?inline.js +6 -0
  550. package/dist/layout/sidebar/sidebar-item.css?inline.js.map +1 -0
  551. package/dist/layout/sidebar/sidebar.css?inline.cjs +2 -0
  552. package/dist/layout/sidebar/sidebar.css?inline.cjs.map +1 -0
  553. package/dist/layout/sidebar/sidebar.css?inline.js +6 -0
  554. package/dist/layout/sidebar/sidebar.css?inline.js.map +1 -0
  555. package/dist/layout/sidebar/sidebar.d.ts +190 -0
  556. package/dist/layout/sidebar/sidebar.d.ts.map +1 -0
  557. package/dist/menu.cjs +133 -0
  558. package/dist/menu.cjs.map +1 -0
  559. package/dist/menu.js +296 -0
  560. package/dist/menu.js.map +1 -0
  561. package/dist/number-input.cjs +55 -0
  562. package/dist/number-input.cjs.map +1 -0
  563. package/dist/number-input.js +158 -0
  564. package/dist/number-input.js.map +1 -0
  565. package/dist/otp-input.cjs +22 -0
  566. package/dist/otp-input.cjs.map +1 -0
  567. package/dist/otp-input.js +120 -0
  568. package/dist/otp-input.js.map +1 -0
  569. package/dist/overlay/dialog/dialog.css?inline.cjs +2 -0
  570. package/dist/overlay/dialog/dialog.css?inline.cjs.map +1 -0
  571. package/dist/overlay/dialog/dialog.css?inline.js +6 -0
  572. package/dist/overlay/dialog/dialog.css?inline.js.map +1 -0
  573. package/dist/overlay/dialog/dialog.d.ts +98 -0
  574. package/dist/overlay/dialog/dialog.d.ts.map +1 -0
  575. package/dist/overlay/drawer/drawer.css?inline.cjs +2 -0
  576. package/dist/overlay/drawer/drawer.css?inline.cjs.map +1 -0
  577. package/dist/overlay/drawer/drawer.css?inline.js +6 -0
  578. package/dist/overlay/drawer/drawer.css?inline.js.map +1 -0
  579. package/dist/overlay/drawer/drawer.d.ts +98 -0
  580. package/dist/overlay/drawer/drawer.d.ts.map +1 -0
  581. package/dist/overlay/index.cjs +1 -0
  582. package/dist/overlay/index.d.ts +11 -0
  583. package/dist/overlay/index.d.ts.map +1 -0
  584. package/dist/overlay/index.js +5 -0
  585. package/dist/overlay/menu/menu.css?inline.cjs +2 -0
  586. package/dist/overlay/menu/menu.css?inline.cjs.map +1 -0
  587. package/dist/overlay/menu/menu.css?inline.js +6 -0
  588. package/dist/overlay/menu/menu.css?inline.js.map +1 -0
  589. package/dist/overlay/menu/menu.d.ts +45 -0
  590. package/dist/overlay/menu/menu.d.ts.map +1 -0
  591. package/dist/overlay/popover/popover.css?inline.cjs +2 -0
  592. package/dist/overlay/popover/popover.css?inline.cjs.map +1 -0
  593. package/dist/overlay/popover/popover.css?inline.js +6 -0
  594. package/dist/overlay/popover/popover.css?inline.js.map +1 -0
  595. package/dist/overlay/popover/popover.d.ts +56 -0
  596. package/dist/overlay/popover/popover.d.ts.map +1 -0
  597. package/dist/overlay/tooltip/tooltip.css?inline.cjs +2 -0
  598. package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +1 -0
  599. package/dist/overlay/tooltip/tooltip.css?inline.js +6 -0
  600. package/dist/overlay/tooltip/tooltip.css?inline.js.map +1 -0
  601. package/dist/overlay/tooltip/tooltip.d.ts +55 -0
  602. package/dist/overlay/tooltip/tooltip.d.ts.map +1 -0
  603. package/dist/pagination.cjs +102 -0
  604. package/dist/pagination.cjs.map +1 -0
  605. package/dist/pagination.js +168 -0
  606. package/dist/pagination.js.map +1 -0
  607. package/dist/popover.cjs +16 -0
  608. package/dist/popover.cjs.map +1 -0
  609. package/dist/popover.js +110 -0
  610. package/dist/popover.js.map +1 -0
  611. package/dist/progress.cjs +51 -0
  612. package/dist/progress.cjs.map +1 -0
  613. package/dist/progress.js +90 -0
  614. package/dist/progress.js.map +1 -0
  615. package/dist/radio-group.cjs +20 -0
  616. package/dist/radio-group.cjs.map +1 -0
  617. package/dist/radio-group.js +104 -0
  618. package/dist/radio-group.js.map +1 -0
  619. package/dist/radio.cjs +16 -0
  620. package/dist/radio.cjs.map +1 -0
  621. package/dist/radio.js +135 -0
  622. package/dist/radio.js.map +1 -0
  623. package/dist/rating.cjs +37 -0
  624. package/dist/rating.cjs.map +1 -0
  625. package/dist/rating.js +123 -0
  626. package/dist/rating.js.map +1 -0
  627. package/dist/select.cjs +77 -0
  628. package/dist/select.cjs.map +1 -0
  629. package/dist/select.js +317 -0
  630. package/dist/select.js.map +1 -0
  631. package/dist/separator.cjs +26 -0
  632. package/dist/separator.cjs.map +1 -0
  633. package/dist/separator.js +46 -0
  634. package/dist/separator.js.map +1 -0
  635. package/dist/sidebar.cjs +69 -0
  636. package/dist/sidebar.cjs.map +1 -0
  637. package/dist/sidebar.js +202 -0
  638. package/dist/sidebar.js.map +1 -0
  639. package/dist/skeleton.cjs +10 -0
  640. package/dist/skeleton.cjs.map +1 -0
  641. package/dist/skeleton.js +56 -0
  642. package/dist/skeleton.js.map +1 -0
  643. package/dist/slider.cjs +24 -0
  644. package/dist/slider.cjs.map +1 -0
  645. package/dist/slider.js +209 -0
  646. package/dist/slider.js.map +1 -0
  647. package/dist/stateit/dist/computed.cjs +2 -0
  648. package/dist/stateit/dist/computed.cjs.map +1 -0
  649. package/dist/stateit/dist/computed.js +65 -0
  650. package/dist/stateit/dist/computed.js.map +1 -0
  651. package/dist/stateit/dist/effect.cjs +2 -0
  652. package/dist/stateit/dist/effect.cjs.map +1 -0
  653. package/dist/stateit/dist/effect.js +53 -0
  654. package/dist/stateit/dist/effect.js.map +1 -0
  655. package/dist/stateit/dist/index.cjs +1 -0
  656. package/dist/stateit/dist/index.js +5 -0
  657. package/dist/stateit/dist/runtime.cjs +2 -0
  658. package/dist/stateit/dist/runtime.cjs.map +1 -0
  659. package/dist/stateit/dist/runtime.js +43 -0
  660. package/dist/stateit/dist/runtime.js.map +1 -0
  661. package/dist/stateit/dist/signal.cjs +2 -0
  662. package/dist/stateit/dist/signal.cjs.map +1 -0
  663. package/dist/stateit/dist/signal.js +27 -0
  664. package/dist/stateit/dist/signal.js.map +1 -0
  665. package/dist/stateit/dist/store.cjs +2 -0
  666. package/dist/stateit/dist/store.cjs.map +1 -0
  667. package/dist/stateit/dist/store.js +17 -0
  668. package/dist/stateit/dist/store.js.map +1 -0
  669. package/dist/stateit/dist/types.cjs +2 -0
  670. package/dist/stateit/dist/types.cjs.map +1 -0
  671. package/dist/stateit/dist/types.js +6 -0
  672. package/dist/stateit/dist/types.js.map +1 -0
  673. package/dist/styles/animation.css +87 -0
  674. package/dist/styles/index.cjs +2 -0
  675. package/dist/styles/index.cjs.map +1 -0
  676. package/dist/styles/index.d.ts +48 -0
  677. package/dist/styles/index.d.ts.map +1 -0
  678. package/dist/styles/index.js +26 -0
  679. package/dist/styles/index.js.map +1 -0
  680. package/dist/styles/layer.css +18 -0
  681. package/dist/styles/mixins/accessibility.css.cjs +15 -0
  682. package/dist/styles/mixins/accessibility.css.cjs.map +1 -0
  683. package/dist/styles/mixins/accessibility.css.d.ts +46 -0
  684. package/dist/styles/mixins/accessibility.css.d.ts.map +1 -0
  685. package/dist/styles/mixins/accessibility.css.js +20 -0
  686. package/dist/styles/mixins/accessibility.css.js.map +1 -0
  687. package/dist/styles/mixins/animation.css.cjs +71 -0
  688. package/dist/styles/mixins/animation.css.cjs.map +1 -0
  689. package/dist/styles/mixins/animation.css.d.ts +22 -0
  690. package/dist/styles/mixins/animation.css.d.ts.map +1 -0
  691. package/dist/styles/mixins/animation.css.js +90 -0
  692. package/dist/styles/mixins/animation.css.js.map +1 -0
  693. package/dist/styles/mixins/shape.css.cjs +72 -0
  694. package/dist/styles/mixins/shape.css.cjs.map +1 -0
  695. package/dist/styles/mixins/shape.css.d.ts +97 -0
  696. package/dist/styles/mixins/shape.css.d.ts.map +1 -0
  697. package/dist/styles/mixins/shape.css.js +104 -0
  698. package/dist/styles/mixins/shape.css.js.map +1 -0
  699. package/dist/styles/mixins/states.css.cjs +18 -0
  700. package/dist/styles/mixins/states.css.cjs.map +1 -0
  701. package/dist/styles/mixins/states.css.d.ts +61 -0
  702. package/dist/styles/mixins/states.css.d.ts.map +1 -0
  703. package/dist/styles/mixins/states.css.js +26 -0
  704. package/dist/styles/mixins/states.css.js.map +1 -0
  705. package/dist/styles/mixins/theme.css.cjs +146 -0
  706. package/dist/styles/mixins/theme.css.cjs.map +1 -0
  707. package/dist/styles/mixins/theme.css.d.ts +93 -0
  708. package/dist/styles/mixins/theme.css.d.ts.map +1 -0
  709. package/dist/styles/mixins/theme.css.js +151 -0
  710. package/dist/styles/mixins/theme.css.js.map +1 -0
  711. package/dist/styles/mixins/variants.css.cjs +84 -0
  712. package/dist/styles/mixins/variants.css.cjs.map +1 -0
  713. package/dist/styles/mixins/variants.css.d.ts +22 -0
  714. package/dist/styles/mixins/variants.css.d.ts.map +1 -0
  715. package/dist/styles/mixins/variants.css.js +89 -0
  716. package/dist/styles/mixins/variants.css.js.map +1 -0
  717. package/dist/styles/preflight.css +237 -0
  718. package/dist/styles/styles.css +5 -0
  719. package/dist/styles/theme.css +457 -0
  720. package/dist/switch.cjs +16 -0
  721. package/dist/switch.cjs.map +1 -0
  722. package/dist/switch.js +82 -0
  723. package/dist/switch.js.map +1 -0
  724. package/dist/tab-item.cjs +17 -0
  725. package/dist/tab-item.cjs.map +1 -0
  726. package/dist/tab-item.js +57 -0
  727. package/dist/tab-item.js.map +1 -0
  728. package/dist/tab-panel.cjs +14 -0
  729. package/dist/tab-panel.cjs.map +1 -0
  730. package/dist/tab-panel.js +51 -0
  731. package/dist/tab-panel.js.map +1 -0
  732. package/dist/table.cjs +2 -0
  733. package/dist/table.cjs.map +1 -0
  734. package/dist/table.js +101 -0
  735. package/dist/table.js.map +1 -0
  736. package/dist/tabs.cjs +17 -0
  737. package/dist/tabs.cjs.map +1 -0
  738. package/dist/tabs.js +98 -0
  739. package/dist/tabs.js.map +1 -0
  740. package/dist/text.cjs +2 -0
  741. package/dist/text.cjs.map +1 -0
  742. package/dist/text.js +30 -0
  743. package/dist/text.js.map +1 -0
  744. package/dist/textarea.cjs +16 -0
  745. package/dist/textarea.cjs.map +1 -0
  746. package/dist/textarea.js +122 -0
  747. package/dist/textarea.js.map +1 -0
  748. package/dist/toast.cjs +63 -0
  749. package/dist/toast.cjs.map +1 -0
  750. package/dist/toast.js +221 -0
  751. package/dist/toast.js.map +1 -0
  752. package/dist/tooltip.cjs +15 -0
  753. package/dist/tooltip.cjs.map +1 -0
  754. package/dist/tooltip.js +111 -0
  755. package/dist/tooltip.js.map +1 -0
  756. package/dist/types/index.d.ts +7 -0
  757. package/dist/types/index.d.ts.map +1 -0
  758. package/dist/types/shared.d.ts +120 -0
  759. package/dist/types/shared.d.ts.map +1 -0
  760. package/dist/utils/animation.cjs +2 -0
  761. package/dist/utils/animation.cjs.map +1 -0
  762. package/dist/utils/animation.d.ts +2 -0
  763. package/dist/utils/animation.d.ts.map +1 -0
  764. package/dist/utils/animation.js +29 -0
  765. package/dist/utils/animation.js.map +1 -0
  766. package/dist/utils/background-lock.cjs +2 -0
  767. package/dist/utils/background-lock.cjs.map +1 -0
  768. package/dist/utils/background-lock.d.ts +20 -0
  769. package/dist/utils/background-lock.d.ts.map +1 -0
  770. package/dist/utils/background-lock.js +21 -0
  771. package/dist/utils/background-lock.js.map +1 -0
  772. package/dist/utils/index.cjs +1 -0
  773. package/dist/utils/index.d.ts +4 -0
  774. package/dist/utils/index.d.ts.map +1 -0
  775. package/dist/utils/index.js +3 -0
  776. package/dist/utils/use-overlay.cjs +2 -0
  777. package/dist/utils/use-overlay.cjs.map +1 -0
  778. package/dist/utils/use-overlay.d.ts +26 -0
  779. package/dist/utils/use-overlay.d.ts.map +1 -0
  780. package/dist/utils/use-overlay.js +34 -0
  781. package/dist/utils/use-overlay.js.map +1 -0
  782. package/dist/virtualit/dist/dom/dom.cjs +2 -0
  783. package/dist/virtualit/dist/dom/dom.cjs.map +1 -0
  784. package/dist/virtualit/dist/dom/dom.js +47 -0
  785. package/dist/virtualit/dist/dom/dom.js.map +1 -0
  786. package/dist/virtualit/dist/dom.cjs +1 -0
  787. package/dist/virtualit/dist/dom.js +2 -0
  788. package/dist/virtualit/dist/virtualit.cjs +2 -0
  789. package/dist/virtualit/dist/virtualit.cjs.map +1 -0
  790. package/dist/virtualit/dist/virtualit.js +129 -0
  791. package/dist/virtualit/dist/virtualit.js.map +1 -0
  792. package/package.json +282 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.cjs","names":[],"sources":["../src/overlay/popover/popover.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/floatit';\n\nimport { computed, createId, defineComponent, html, onMount, onSlotChange, signal, watch } from '@vielzeug/craftit';\nimport { autoUpdate, flip, offset, positionFloat, shift } from '@vielzeug/floatit';\n\nimport { reducedMotionMixin } from '../../styles';\n\nexport type PopoverTrigger = 'click' | 'hover' | 'focus';\n\nconst PANEL_OFFSET = 8;\nconst VALID_TRIGGERS = new Set<PopoverTrigger>(['click', 'hover', 'focus']);\n\nfunction normalizeTriggers(value: unknown): PopoverTrigger[] {\n const parsed = String(value)\n .split(',')\n .map((item) => item.trim())\n .filter((item): item is PopoverTrigger => VALID_TRIGGERS.has(item as PopoverTrigger));\n\n // Keep behavior predictable for invalid input.\n return parsed.length > 0 ? parsed : ['click'];\n}\n\nimport styles from './popover.css?inline';\n\nexport type BitPopoverEvents = {\n /** Emitted when the popover closes */\n close: undefined;\n /** Emitted when the popover opens */\n open: undefined;\n};\n\n/** Popover component properties */\nexport type BitPopoverProps = {\n /** Disable the popover */\n disabled?: boolean;\n /** Accessible label for the panel */\n label?: string;\n /** Gap between trigger and panel in px */\n offset?: number;\n /** Controlled open state */\n open?: boolean;\n /** Preferred placement relative to the trigger */\n placement?: Placement;\n /** Which trigger(s) open/close the popover — comma-separated */\n trigger?: string;\n};\n\n/**\n * A floating informational or interactive panel anchored to a trigger element.\n * Unlike tooltips, popovers support arbitrary interactive content via slots.\n *\n * @element bit-popover\n *\n * @attr {string} placement - Preferred placement (default: 'bottom')\n * @attr {string} trigger - 'click' | 'hover' | 'focus' or comma-separated (default: 'click')\n * @attr {boolean} open - Controlled open state\n * @attr {number} offset - Gap in px between trigger and panel (default: 8)\n * @attr {boolean} disabled - Disables the popover\n * @attr {string} label - aria-label on the panel\n *\n * @slot - The trigger element\n * @slot content - Panel content\n *\n * @fires open - When the panel opens\n * @fires close - When the panel closes\n *\n * @cssprop --popover-min-width - Min width of the panel\n * @cssprop --popover-max-width - Max width of the panel\n * @cssprop --popover-max-height - Max height of the panel\n *\n * @example\n * ```html\n * <bit-popover>\n * <button>Open</button>\n * <div slot=\"content\">Panel content here</div>\n * </bit-popover>\n * ```\n */\nexport const POPOVER_TAG = defineComponent<BitPopoverProps, BitPopoverEvents>({\n props: {\n disabled: { default: false },\n label: { default: undefined },\n offset: { default: PANEL_OFFSET },\n open: { default: undefined },\n placement: { default: 'bottom' },\n trigger: { default: 'click' },\n },\n setup({ emit, host, props }) {\n const visible = signal(false);\n const panelId = createId('popover');\n let panelEl: HTMLElement | null = null;\n let currentTrigger: HTMLElement | null = null;\n let autoUpdateCleanup: (() => void) | null = null;\n const triggers = computed<PopoverTrigger[]>(() => normalizeTriggers(props.trigger.value));\n\n function updatePosition() {\n if (!panelEl || !currentTrigger) return;\n\n positionFloat(currentTrigger, panelEl, {\n middleware: [offset(props.offset.value ?? PANEL_OFFSET), flip(), shift({ padding: 8 })],\n placement: props.placement.value,\n }).then((resolvedPlacement) => {\n if (panelEl) panelEl.dataset.placement = resolvedPlacement;\n });\n }\n /** Show the panel and start auto-updating its position. */\n function showFloat() {\n visible.value = true;\n currentTrigger?.setAttribute('aria-expanded', 'true');\n\n if (panelEl && !panelEl.matches(':popover-open')) panelEl.showPopover();\n\n if (currentTrigger && panelEl) {\n autoUpdateCleanup?.();\n autoUpdateCleanup = autoUpdate(currentTrigger, panelEl, updatePosition);\n }\n\n updatePosition();\n }\n /** Hide the panel and stop auto-updating its position. */\n function hideFloat() {\n autoUpdateCleanup?.();\n autoUpdateCleanup = null;\n currentTrigger?.setAttribute('aria-expanded', 'false');\n visible.value = false;\n\n if (panelEl?.matches(':popover-open')) panelEl.hidePopover();\n }\n function open() {\n if (props.open.value !== undefined) return;\n\n if (props.disabled.value) return;\n\n if (visible.value) return;\n\n showFloat();\n emit('open');\n }\n function close() {\n if (props.open.value !== undefined) return;\n\n if (!visible.value) return;\n\n hideFloat();\n emit('close');\n }\n function toggle() {\n if (visible.value) close();\n else open();\n }\n function handleKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') close();\n }\n function handleClickOutside(e: MouseEvent) {\n if (!visible.value) return;\n\n const path = e.composedPath();\n\n if (path.includes(host)) return;\n\n if (panelEl && path.includes(panelEl)) return;\n\n if (currentTrigger && path.includes(currentTrigger)) return;\n\n close();\n }\n // Don't close when focus moves from the trigger into the panel content.\n function handleFocusOut(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n\n if (next && panelEl?.contains(next)) return;\n\n if (next && currentTrigger?.contains(next)) return;\n\n close();\n }\n onMount(() => {\n const triggerSlot = host.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n\n if (!triggerSlot) return;\n\n const bindEvents = () => {\n unbindEvents();\n\n const el = triggerSlot.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!el) return;\n\n currentTrigger = el;\n el.setAttribute('aria-controls', panelId);\n el.setAttribute('aria-haspopup', 'dialog');\n el.setAttribute('aria-expanded', String(visible.value));\n el.setAttribute('aria-disabled', String(Boolean(props.disabled.value)));\n\n const t = triggers.value;\n\n if (t.includes('click')) {\n el.addEventListener('click', toggle);\n document.addEventListener('click', handleClickOutside, { capture: true });\n }\n\n if (t.includes('hover')) {\n el.addEventListener('pointerenter', open);\n el.addEventListener('pointerleave', close);\n panelEl?.addEventListener('pointerenter', open);\n panelEl?.addEventListener('pointerleave', close);\n }\n\n if (t.includes('focus')) {\n el.addEventListener('focusin', open);\n el.addEventListener('focusout', handleFocusOut);\n panelEl?.addEventListener('focusout', handleFocusOut);\n }\n\n document.addEventListener('keydown', handleKeydown);\n };\n const unbindEvents = () => {\n if (!currentTrigger) return;\n\n currentTrigger.removeAttribute('aria-controls');\n currentTrigger.removeAttribute('aria-haspopup');\n currentTrigger.removeAttribute('aria-expanded');\n currentTrigger.removeAttribute('aria-disabled');\n currentTrigger.removeEventListener('click', toggle);\n currentTrigger.removeEventListener('pointerenter', open);\n currentTrigger.removeEventListener('pointerleave', close);\n currentTrigger.removeEventListener('focusin', open);\n currentTrigger.removeEventListener('focusout', handleFocusOut);\n panelEl?.removeEventListener('pointerenter', open);\n panelEl?.removeEventListener('pointerleave', close);\n panelEl?.removeEventListener('focusout', handleFocusOut);\n document.removeEventListener('click', handleClickOutside, { capture: true });\n document.removeEventListener('keydown', handleKeydown);\n currentTrigger = null;\n };\n\n onSlotChange('default', bindEvents);\n // Controlled mode\n watch(props.open, (openVal) => {\n if (openVal === undefined || openVal === null) return;\n\n if (openVal) {\n showFloat();\n emit('open');\n } else {\n hideFloat();\n emit('close');\n }\n });\n watch(props.trigger, bindEvents);\n watch(props.disabled, (isDisabled) => {\n currentTrigger?.setAttribute('aria-disabled', String(Boolean(isDisabled)));\n\n if (isDisabled) {\n close();\n }\n });\n\n return () => {\n unbindEvents();\n autoUpdateCleanup?.();\n autoUpdateCleanup = null;\n\n if (panelEl?.matches(':popover-open')) panelEl.hidePopover();\n };\n });\n\n return html`\n <slot></slot>\n <div\n class=\"panel\"\n part=\"panel\"\n id=\"${panelId}\"\n role=\"dialog\"\n aria-modal=\"false\"\n popover=\"manual\"\n :aria-label=\"${() => props.label.value ?? null}\"\n :aria-hidden=\"${() => String(!visible.value)}\"\n ref=${(el: HTMLElement) => {\n panelEl = el;\n }}>\n <slot name=\"content\"></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, styles],\n tag: 'bit-popover',\n});\n"],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
2
+ import "./styles/index.js";
3
+ import t from "./overlay/popover/popover.css?inline.js";
4
+ import { computed as n, createId as r, defineComponent as i, html as a, onMount as o, onSlotChange as s, signal as c, watch as l } from "@vielzeug/craftit";
5
+ import { autoUpdate as u, flip as d, offset as f, positionFloat as p, shift as m } from "@vielzeug/floatit";
6
+ //#region src/overlay/popover/popover.ts
7
+ var h = 8, g = new Set([
8
+ "click",
9
+ "hover",
10
+ "focus"
11
+ ]);
12
+ function _(e) {
13
+ let t = String(e).split(",").map((e) => e.trim()).filter((e) => g.has(e));
14
+ return t.length > 0 ? t : ["click"];
15
+ }
16
+ var v = i({
17
+ props: {
18
+ disabled: { default: !1 },
19
+ label: { default: void 0 },
20
+ offset: { default: h },
21
+ open: { default: void 0 },
22
+ placement: { default: "bottom" },
23
+ trigger: { default: "click" }
24
+ },
25
+ setup({ emit: e, host: t, props: i }) {
26
+ let g = c(!1), v = r("popover"), y = null, b = null, x = null, S = n(() => _(i.trigger.value));
27
+ function C() {
28
+ !y || !b || p(b, y, {
29
+ middleware: [
30
+ f(i.offset.value ?? h),
31
+ d(),
32
+ m({ padding: 8 })
33
+ ],
34
+ placement: i.placement.value
35
+ }).then((e) => {
36
+ y && (y.dataset.placement = e);
37
+ });
38
+ }
39
+ function w() {
40
+ g.value = !0, b?.setAttribute("aria-expanded", "true"), y && !y.matches(":popover-open") && y.showPopover(), b && y && (x?.(), x = u(b, y, C)), C();
41
+ }
42
+ function T() {
43
+ x?.(), x = null, b?.setAttribute("aria-expanded", "false"), g.value = !1, y?.matches(":popover-open") && y.hidePopover();
44
+ }
45
+ function E() {
46
+ i.open.value === void 0 && (i.disabled.value || g.value || (w(), e("open")));
47
+ }
48
+ function D() {
49
+ i.open.value === void 0 && g.value && (T(), e("close"));
50
+ }
51
+ function O() {
52
+ g.value ? D() : E();
53
+ }
54
+ function k(e) {
55
+ e.key === "Escape" && D();
56
+ }
57
+ function A(e) {
58
+ if (!g.value) return;
59
+ let n = e.composedPath();
60
+ n.includes(t) || y && n.includes(y) || b && n.includes(b) || D();
61
+ }
62
+ function j(e) {
63
+ let t = e.relatedTarget;
64
+ t && y?.contains(t) || t && b?.contains(t) || D();
65
+ }
66
+ return o(() => {
67
+ let n = t.shadowRoot?.querySelector("slot:not([name])");
68
+ if (!n) return;
69
+ let r = () => {
70
+ a();
71
+ let e = n.assignedElements({ flatten: !0 })[0];
72
+ if (!e) return;
73
+ b = e, e.setAttribute("aria-controls", v), e.setAttribute("aria-haspopup", "dialog"), e.setAttribute("aria-expanded", String(g.value)), e.setAttribute("aria-disabled", String(!!i.disabled.value));
74
+ let t = S.value;
75
+ t.includes("click") && (e.addEventListener("click", O), document.addEventListener("click", A, { capture: !0 })), t.includes("hover") && (e.addEventListener("pointerenter", E), e.addEventListener("pointerleave", D), y?.addEventListener("pointerenter", E), y?.addEventListener("pointerleave", D)), t.includes("focus") && (e.addEventListener("focusin", E), e.addEventListener("focusout", j), y?.addEventListener("focusout", j)), document.addEventListener("keydown", k);
76
+ }, a = () => {
77
+ b &&= (b.removeAttribute("aria-controls"), b.removeAttribute("aria-haspopup"), b.removeAttribute("aria-expanded"), b.removeAttribute("aria-disabled"), b.removeEventListener("click", O), b.removeEventListener("pointerenter", E), b.removeEventListener("pointerleave", D), b.removeEventListener("focusin", E), b.removeEventListener("focusout", j), y?.removeEventListener("pointerenter", E), y?.removeEventListener("pointerleave", D), y?.removeEventListener("focusout", j), document.removeEventListener("click", A, { capture: !0 }), document.removeEventListener("keydown", k), null);
78
+ };
79
+ return s("default", r), l(i.open, (t) => {
80
+ t != null && (t ? (w(), e("open")) : (T(), e("close")));
81
+ }), l(i.trigger, r), l(i.disabled, (e) => {
82
+ b?.setAttribute("aria-disabled", String(!!e)), e && D();
83
+ }), () => {
84
+ a(), x?.(), x = null, y?.matches(":popover-open") && y.hidePopover();
85
+ };
86
+ }), a`
87
+ <slot></slot>
88
+ <div
89
+ class="panel"
90
+ part="panel"
91
+ id="${v}"
92
+ role="dialog"
93
+ aria-modal="false"
94
+ popover="manual"
95
+ :aria-label="${() => i.label.value ?? null}"
96
+ :aria-hidden="${() => String(!g.value)}"
97
+ ref=${(e) => {
98
+ y = e;
99
+ }}>
100
+ <slot name="content"></slot>
101
+ </div>
102
+ `;
103
+ },
104
+ styles: [e, t],
105
+ tag: "bit-popover"
106
+ });
107
+ //#endregion
108
+ export { v as POPOVER_TAG };
109
+
110
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","names":[],"sources":["../src/overlay/popover/popover.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/floatit';\n\nimport { computed, createId, defineComponent, html, onMount, onSlotChange, signal, watch } from '@vielzeug/craftit';\nimport { autoUpdate, flip, offset, positionFloat, shift } from '@vielzeug/floatit';\n\nimport { reducedMotionMixin } from '../../styles';\n\nexport type PopoverTrigger = 'click' | 'hover' | 'focus';\n\nconst PANEL_OFFSET = 8;\nconst VALID_TRIGGERS = new Set<PopoverTrigger>(['click', 'hover', 'focus']);\n\nfunction normalizeTriggers(value: unknown): PopoverTrigger[] {\n const parsed = String(value)\n .split(',')\n .map((item) => item.trim())\n .filter((item): item is PopoverTrigger => VALID_TRIGGERS.has(item as PopoverTrigger));\n\n // Keep behavior predictable for invalid input.\n return parsed.length > 0 ? parsed : ['click'];\n}\n\nimport styles from './popover.css?inline';\n\nexport type BitPopoverEvents = {\n /** Emitted when the popover closes */\n close: undefined;\n /** Emitted when the popover opens */\n open: undefined;\n};\n\n/** Popover component properties */\nexport type BitPopoverProps = {\n /** Disable the popover */\n disabled?: boolean;\n /** Accessible label for the panel */\n label?: string;\n /** Gap between trigger and panel in px */\n offset?: number;\n /** Controlled open state */\n open?: boolean;\n /** Preferred placement relative to the trigger */\n placement?: Placement;\n /** Which trigger(s) open/close the popover — comma-separated */\n trigger?: string;\n};\n\n/**\n * A floating informational or interactive panel anchored to a trigger element.\n * Unlike tooltips, popovers support arbitrary interactive content via slots.\n *\n * @element bit-popover\n *\n * @attr {string} placement - Preferred placement (default: 'bottom')\n * @attr {string} trigger - 'click' | 'hover' | 'focus' or comma-separated (default: 'click')\n * @attr {boolean} open - Controlled open state\n * @attr {number} offset - Gap in px between trigger and panel (default: 8)\n * @attr {boolean} disabled - Disables the popover\n * @attr {string} label - aria-label on the panel\n *\n * @slot - The trigger element\n * @slot content - Panel content\n *\n * @fires open - When the panel opens\n * @fires close - When the panel closes\n *\n * @cssprop --popover-min-width - Min width of the panel\n * @cssprop --popover-max-width - Max width of the panel\n * @cssprop --popover-max-height - Max height of the panel\n *\n * @example\n * ```html\n * <bit-popover>\n * <button>Open</button>\n * <div slot=\"content\">Panel content here</div>\n * </bit-popover>\n * ```\n */\nexport const POPOVER_TAG = defineComponent<BitPopoverProps, BitPopoverEvents>({\n props: {\n disabled: { default: false },\n label: { default: undefined },\n offset: { default: PANEL_OFFSET },\n open: { default: undefined },\n placement: { default: 'bottom' },\n trigger: { default: 'click' },\n },\n setup({ emit, host, props }) {\n const visible = signal(false);\n const panelId = createId('popover');\n let panelEl: HTMLElement | null = null;\n let currentTrigger: HTMLElement | null = null;\n let autoUpdateCleanup: (() => void) | null = null;\n const triggers = computed<PopoverTrigger[]>(() => normalizeTriggers(props.trigger.value));\n\n function updatePosition() {\n if (!panelEl || !currentTrigger) return;\n\n positionFloat(currentTrigger, panelEl, {\n middleware: [offset(props.offset.value ?? PANEL_OFFSET), flip(), shift({ padding: 8 })],\n placement: props.placement.value,\n }).then((resolvedPlacement) => {\n if (panelEl) panelEl.dataset.placement = resolvedPlacement;\n });\n }\n /** Show the panel and start auto-updating its position. */\n function showFloat() {\n visible.value = true;\n currentTrigger?.setAttribute('aria-expanded', 'true');\n\n if (panelEl && !panelEl.matches(':popover-open')) panelEl.showPopover();\n\n if (currentTrigger && panelEl) {\n autoUpdateCleanup?.();\n autoUpdateCleanup = autoUpdate(currentTrigger, panelEl, updatePosition);\n }\n\n updatePosition();\n }\n /** Hide the panel and stop auto-updating its position. */\n function hideFloat() {\n autoUpdateCleanup?.();\n autoUpdateCleanup = null;\n currentTrigger?.setAttribute('aria-expanded', 'false');\n visible.value = false;\n\n if (panelEl?.matches(':popover-open')) panelEl.hidePopover();\n }\n function open() {\n if (props.open.value !== undefined) return;\n\n if (props.disabled.value) return;\n\n if (visible.value) return;\n\n showFloat();\n emit('open');\n }\n function close() {\n if (props.open.value !== undefined) return;\n\n if (!visible.value) return;\n\n hideFloat();\n emit('close');\n }\n function toggle() {\n if (visible.value) close();\n else open();\n }\n function handleKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') close();\n }\n function handleClickOutside(e: MouseEvent) {\n if (!visible.value) return;\n\n const path = e.composedPath();\n\n if (path.includes(host)) return;\n\n if (panelEl && path.includes(panelEl)) return;\n\n if (currentTrigger && path.includes(currentTrigger)) return;\n\n close();\n }\n // Don't close when focus moves from the trigger into the panel content.\n function handleFocusOut(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n\n if (next && panelEl?.contains(next)) return;\n\n if (next && currentTrigger?.contains(next)) return;\n\n close();\n }\n onMount(() => {\n const triggerSlot = host.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n\n if (!triggerSlot) return;\n\n const bindEvents = () => {\n unbindEvents();\n\n const el = triggerSlot.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!el) return;\n\n currentTrigger = el;\n el.setAttribute('aria-controls', panelId);\n el.setAttribute('aria-haspopup', 'dialog');\n el.setAttribute('aria-expanded', String(visible.value));\n el.setAttribute('aria-disabled', String(Boolean(props.disabled.value)));\n\n const t = triggers.value;\n\n if (t.includes('click')) {\n el.addEventListener('click', toggle);\n document.addEventListener('click', handleClickOutside, { capture: true });\n }\n\n if (t.includes('hover')) {\n el.addEventListener('pointerenter', open);\n el.addEventListener('pointerleave', close);\n panelEl?.addEventListener('pointerenter', open);\n panelEl?.addEventListener('pointerleave', close);\n }\n\n if (t.includes('focus')) {\n el.addEventListener('focusin', open);\n el.addEventListener('focusout', handleFocusOut);\n panelEl?.addEventListener('focusout', handleFocusOut);\n }\n\n document.addEventListener('keydown', handleKeydown);\n };\n const unbindEvents = () => {\n if (!currentTrigger) return;\n\n currentTrigger.removeAttribute('aria-controls');\n currentTrigger.removeAttribute('aria-haspopup');\n currentTrigger.removeAttribute('aria-expanded');\n currentTrigger.removeAttribute('aria-disabled');\n currentTrigger.removeEventListener('click', toggle);\n currentTrigger.removeEventListener('pointerenter', open);\n currentTrigger.removeEventListener('pointerleave', close);\n currentTrigger.removeEventListener('focusin', open);\n currentTrigger.removeEventListener('focusout', handleFocusOut);\n panelEl?.removeEventListener('pointerenter', open);\n panelEl?.removeEventListener('pointerleave', close);\n panelEl?.removeEventListener('focusout', handleFocusOut);\n document.removeEventListener('click', handleClickOutside, { capture: true });\n document.removeEventListener('keydown', handleKeydown);\n currentTrigger = null;\n };\n\n onSlotChange('default', bindEvents);\n // Controlled mode\n watch(props.open, (openVal) => {\n if (openVal === undefined || openVal === null) return;\n\n if (openVal) {\n showFloat();\n emit('open');\n } else {\n hideFloat();\n emit('close');\n }\n });\n watch(props.trigger, bindEvents);\n watch(props.disabled, (isDisabled) => {\n currentTrigger?.setAttribute('aria-disabled', String(Boolean(isDisabled)));\n\n if (isDisabled) {\n close();\n }\n });\n\n return () => {\n unbindEvents();\n autoUpdateCleanup?.();\n autoUpdateCleanup = null;\n\n if (panelEl?.matches(':popover-open')) panelEl.hidePopover();\n };\n });\n\n return html`\n <slot></slot>\n <div\n class=\"panel\"\n part=\"panel\"\n id=\"${panelId}\"\n role=\"dialog\"\n aria-modal=\"false\"\n popover=\"manual\"\n :aria-label=\"${() => props.label.value ?? null}\"\n :aria-hidden=\"${() => String(!visible.value)}\"\n ref=${(el: HTMLElement) => {\n panelEl = el;\n }}>\n <slot name=\"content\"></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, styles],\n tag: 'bit-popover',\n});\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/accessibility.css.cjs`),t=require(`./styles/mixins/theme.css.cjs`);require(`./styles/index.cjs`);const n=require(`./feedback/progress/progress.css?inline.cjs`);let r=require(`@vielzeug/craftit`);var i=(0,r.defineComponent)({props:{color:{default:void 0},"floating-label":{default:void 0},indeterminate:{default:!1},label:{default:void 0},max:{default:100},size:{default:void 0},title:{default:void 0},type:{default:`linear`},value:{default:0},"value-text":{default:void 0}},setup({host:e,props:t}){let n=2*Math.PI*45,i=(0,r.computed)(()=>`${Math.max(0,Math.min(Number(t.value.value),Number(t.max.value)))/Math.max(1,Number(t.max.value))*100}%`),a=(0,r.computed)(()=>n-Math.max(0,Math.min(Number(t.value.value),Number(t.max.value)))/Math.max(1,Number(t.max.value))*n),o=(0,r.computed)(()=>t.type.value===`circular`);return(0,r.watch)([t.value,t.max,t.indeterminate],()=>{e.style.setProperty(`--_percent`,t.indeterminate.value?`0%`:i.value)},{immediate:!0}),r.html`
2
+ ${()=>o.value?r.html` <div
3
+ class="circular-track"
4
+ role="progressbar"
5
+ :aria-valuenow="${()=>t.indeterminate.value?null:String(t.value.value)}"
6
+ aria-valuemin="0"
7
+ :aria-valuemax="${()=>String(t.max.value)}"
8
+ :aria-label="${()=>t.label.value??t.title.value??`Progress`}"
9
+ :aria-valuetext="${()=>t[`value-text`].value??null}"
10
+ :style="${()=>`--_circ:${n}px`}">
11
+ <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
12
+ <circle class="circle-bg" cx="50" cy="50" r="${45}"></circle>
13
+ <circle
14
+ class="circle-fill"
15
+ cx="50"
16
+ cy="50"
17
+ r="${45}"
18
+ :stroke-dasharray="${()=>t.indeterminate.value?void 0:`${n}px`}"
19
+ :stroke-dashoffset="${()=>t.indeterminate.value?void 0:`${a.value}px`}"></circle>
20
+ </svg>
21
+ <div class="circular-inner">
22
+ <span class="circular-label">${()=>t.label.value}</span>
23
+ <span class="circular-title">${()=>t.title.value}</span>
24
+ </div>
25
+ </div>`:r.html` <div class="wrapper">
26
+ <div class="header">
27
+ <span class="progress-title">${()=>t.title.value}</span>
28
+ <span class="end-label header-label">${()=>t.label.value}</span>
29
+ </div>
30
+ <div class="bar-row">
31
+ <div class="track-outer">
32
+ <div
33
+ class="track"
34
+ role="progressbar"
35
+ :aria-valuenow="${()=>t.indeterminate.value?null:String(t.value.value)}"
36
+ aria-valuemin="0"
37
+ :aria-valuemax="${()=>String(t.max.value)}"
38
+ :aria-label="${()=>t.label.value??t.title.value??`Progress`}"
39
+ :aria-valuetext="${()=>t[`value-text`].value??null}">
40
+ <div
41
+ class="fill"
42
+ part="fill"
43
+ :style="${()=>t.indeterminate.value?null:`width:${i.value}`}"></div>
44
+ </div>
45
+ <span class="floating-label">${()=>t[`floating-label`].value}</span>
46
+ </div>
47
+ <span class="end-label row-label">${()=>t.label.value}</span>
48
+ </div>
49
+ </div>`}
50
+ `},styles:[t.colorThemeMixin,t.forcedColorsMixin,e.reducedMotionMixin,n.default],tag:`bit-progress`});exports.PROGRESS_TAG=i;
51
+ //# sourceMappingURL=progress.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.cjs","names":[],"sources":["../src/feedback/progress/progress.ts"],"sourcesContent":["import { computed, defineComponent, html, watch } from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { colorThemeMixin, forcedColorsMixin, reducedMotionMixin } from '../../styles';\nimport componentStyles from './progress.css?inline';\n\n/** Progress bar component properties */\nexport type BitProgressProps = {\n /** Theme color for the fill bar */\n color?: ThemeColor;\n /** Floating chip centered above the fill endpoint (linear only). Hidden in indeterminate mode. Position formula: left = fill% − half chip width (CSS: left:X%; transform:translateX(−50%)). */\n 'floating-label'?: string;\n /** When true, shows an infinite animation — use when progress is unknown. */\n indeterminate?: boolean;\n /** Accessible name AND visible text label.\n * - Linear without `title`: rendered at the end of the bar.\n * - Linear with `title`: moved into the header row above the bar.\n * - Circular: large text centered inside the ring. */\n label?: string;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Size variant controlling bar height */\n size?: ComponentSize;\n /** Title text.\n * - Linear: displayed as a header above the bar; moves `label` into the header row.\n * - Circular: smaller text displayed below the `label` inside the ring. */\n title?: string;\n /** 'linear' (default) or 'circular' */\n type?: 'linear' | 'circular';\n /** Current progress value (0 to `max`). Ignored when `indeterminate`. */\n value?: number;\n /** Human-readable value text for screen readers (e.g. \"Step 2 of 5\", \"75%\"). Overrides the raw aria-valuenow when set. */\n 'value-text'?: string;\n};\n\n/**\n * A linear progress bar for conveying operation progress.\n * Supports determinate (known value) and indeterminate (unknown duration) modes.\n *\n * @element bit-progress\n *\n * @attr {number} value - Current value (0–max). Defaults to 0.\n * @attr {number} max - Maximum value. Defaults to 100.\n * @attr {boolean} indeterminate - Show infinite animation (ignores value/max).\n * @attr {string} color - Theme color: 'primary' | 'success' | 'warning' | 'error' | …\n * @attr {string} size - Bar height: 'sm' | 'md' | 'lg'\n * @attr {string} label - Visible text label + accessible name. Linear: at bar end (or header row with title). Circular: large text centered inside the ring.\n * @attr {string} title - Title text. Linear: header above the bar (moves label to header row). Circular: smaller text below the label inside the ring.\n * @attr {string} floating-label - Floating chip centered above the fill endpoint (linear only); hidden when indeterminate.\n *\n * @cssprop --progress-height - Bar height override\n * @cssprop --progress-track-bg - Track background color\n * @cssprop --progress-fill - Fill bar color\n * @cssprop --progress-radius - Border radius\n * @cssprop --progress-label-gap - Gap between header/bar row and between bar and trailing label (default 0.25 rem)\n * @cssprop --progress-title-color - Title text color (defaults to currentColor)\n * @cssprop --progress-label-color - Label text color (defaults to currentColor)\n * @cssprop --progress-circle-size - Circular indicator diameter (default 6rem)\n * @cssprop --progress-circular-label-size - Font size of the label inside the ring (default --text-xl)\n * @cssprop --progress-circular-title-size - Font size of the title inside the ring (default --text-xs)\n *\n * @example\n * ```html\n * <bit-progress value=\"45\"></bit-progress>\n * <bit-progress value=\"75\" max=\"100\" color=\"success\" size=\"lg\"></bit-progress>\n * <bit-progress indeterminate color=\"primary\" label=\"Loading…\"></bit-progress>\n * ```\n */\nexport const PROGRESS_TAG = defineComponent<BitProgressProps>({\n props: {\n color: { default: undefined },\n 'floating-label': { default: undefined },\n indeterminate: { default: false },\n label: { default: undefined },\n max: { default: 100 },\n size: { default: undefined },\n title: { default: undefined },\n type: { default: 'linear' },\n value: { default: 0 },\n 'value-text': { default: undefined },\n },\n setup({ host, props }) {\n // The SVG circle circumference for a radius of 45 (viewBox 0 0 100 100)\n const RADIUS = 45;\n const CIRC = 2 * Math.PI * RADIUS; // ~282.7\n const percent = computed(() => {\n const v = Math.max(0, Math.min(Number(props.value.value), Number(props.max.value)));\n const m = Math.max(1, Number(props.max.value));\n\n return `${(v / m) * 100}%`;\n });\n const dashoffset = computed(() => {\n const v = Math.max(0, Math.min(Number(props.value.value), Number(props.max.value)));\n const m = Math.max(1, Number(props.max.value));\n\n return CIRC - (v / m) * CIRC;\n });\n const isCircular = computed(() => props.type.value === 'circular');\n\n // Use watch([...], fn, { immediate: true }) at setup-level so it fires during\n // connectedCallback (when attributes are already synced) rather than deferring\n // to onMount. The immediate flag triggers the first run synchronously.\n watch(\n [props.value, props.max, props.indeterminate],\n () => {\n host.style.setProperty('--_percent', props.indeterminate.value ? '0%' : percent.value);\n },\n { immediate: true },\n );\n\n return html`\n ${() =>\n isCircular.value\n ? html` <div\n class=\"circular-track\"\n role=\"progressbar\"\n :aria-valuenow=\"${() => (props.indeterminate.value ? null : String(props.value.value))}\"\n aria-valuemin=\"0\"\n :aria-valuemax=\"${() => String(props.max.value)}\"\n :aria-label=\"${() => props.label.value ?? props.title.value ?? 'Progress'}\"\n :aria-valuetext=\"${() => props['value-text'].value ?? null}\"\n :style=\"${() => `--_circ:${CIRC}px`}\">\n <svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle class=\"circle-bg\" cx=\"50\" cy=\"50\" r=\"${RADIUS}\"></circle>\n <circle\n class=\"circle-fill\"\n cx=\"50\"\n cy=\"50\"\n r=\"${RADIUS}\"\n :stroke-dasharray=\"${() => (props.indeterminate.value ? undefined : `${CIRC}px`)}\"\n :stroke-dashoffset=\"${() =>\n props.indeterminate.value ? undefined : `${dashoffset.value}px`}\"></circle>\n </svg>\n <div class=\"circular-inner\">\n <span class=\"circular-label\">${() => props.label.value}</span>\n <span class=\"circular-title\">${() => props.title.value}</span>\n </div>\n </div>`\n : html` <div class=\"wrapper\">\n <div class=\"header\">\n <span class=\"progress-title\">${() => props.title.value}</span>\n <span class=\"end-label header-label\">${() => props.label.value}</span>\n </div>\n <div class=\"bar-row\">\n <div class=\"track-outer\">\n <div\n class=\"track\"\n role=\"progressbar\"\n :aria-valuenow=\"${() => (props.indeterminate.value ? null : String(props.value.value))}\"\n aria-valuemin=\"0\"\n :aria-valuemax=\"${() => String(props.max.value)}\"\n :aria-label=\"${() => props.label.value ?? props.title.value ?? 'Progress'}\"\n :aria-valuetext=\"${() => props['value-text'].value ?? null}\">\n <div\n class=\"fill\"\n part=\"fill\"\n :style=\"${() => (!props.indeterminate.value ? `width:${percent.value}` : null)}\"></div>\n </div>\n <span class=\"floating-label\">${() => props['floating-label'].value}</span>\n </div>\n <span class=\"end-label row-label\">${() => props.label.value}</span>\n </div>\n </div>`}\n `;\n },\n styles: [colorThemeMixin, forcedColorsMixin, reducedMotionMixin, componentStyles],\n tag: 'bit-progress',\n});\n"],"mappings":"uSAqEA,IAAa,GAAA,EAAA,EAAA,iBAAiD,CAC5D,MAAO,CACL,MAAO,CAAE,QAAS,IAAA,GAAW,CAC7B,iBAAkB,CAAE,QAAS,IAAA,GAAW,CACxC,cAAe,CAAE,QAAS,GAAO,CACjC,MAAO,CAAE,QAAS,IAAA,GAAW,CAC7B,IAAK,CAAE,QAAS,IAAK,CACrB,KAAM,CAAE,QAAS,IAAA,GAAW,CAC5B,MAAO,CAAE,QAAS,IAAA,GAAW,CAC7B,KAAM,CAAE,QAAS,SAAU,CAC3B,MAAO,CAAE,QAAS,EAAG,CACrB,aAAc,CAAE,QAAS,IAAA,GAAW,CACrC,CACD,MAAM,CAAE,OAAM,SAAS,CAErB,IACM,EAAO,EAAI,KAAK,GAAK,GACrB,GAAA,EAAA,EAAA,cAIG,GAHG,KAAK,IAAI,EAAG,KAAK,IAAI,OAAO,EAAM,MAAM,MAAM,CAAE,OAAO,EAAM,IAAI,MAAM,CAAC,CAAC,CACzE,KAAK,IAAI,EAAG,OAAO,EAAM,IAAI,MAAM,CAAC,CAE1B,IAAI,GACxB,CACI,GAAA,EAAA,EAAA,cAIG,EAHG,KAAK,IAAI,EAAG,KAAK,IAAI,OAAO,EAAM,MAAM,MAAM,CAAE,OAAO,EAAM,IAAI,MAAM,CAAC,CAAC,CACzE,KAAK,IAAI,EAAG,OAAO,EAAM,IAAI,MAAM,CAAC,CAEtB,EACxB,CACI,GAAA,EAAA,EAAA,cAA4B,EAAM,KAAK,QAAU,WAAW,CAalE,OARA,EAAA,EAAA,OACE,CAAC,EAAM,MAAO,EAAM,IAAK,EAAM,cAAc,KACvC,CACJ,EAAK,MAAM,YAAY,aAAc,EAAM,cAAc,MAAQ,KAAO,EAAQ,MAAM,EAExF,CAAE,UAAW,GAAM,CACpB,CAEM,EAAA,IAAI;YAEP,EAAW,MACP,EAAA,IAAI;;;oCAGuB,EAAM,cAAc,MAAQ,KAAO,OAAO,EAAM,MAAM,MAAM,CAAE;;oCAE/D,OAAO,EAAM,IAAI,MAAM,CAAC;iCAC3B,EAAM,MAAM,OAAS,EAAM,MAAM,OAAS,WAAW;qCACjD,EAAM,cAAc,OAAS,KAAK;4BAC3C,WAAW,EAAK,IAAI;;+DAEa,GAAO;;;;;uBAK/C,GAAO;2CACgB,EAAM,cAAc,MAAQ,IAAA,GAAY,GAAG,EAAK,IAAK;4CAE/E,EAAM,cAAc,MAAQ,IAAA,GAAY,GAAG,EAAW,MAAM,IAAI;;;mDAG/B,EAAM,MAAM,MAAM;mDAClB,EAAM,MAAM,MAAM;;oBAG3D,EAAA,IAAI;;mDAEqC,EAAM,MAAM,MAAM;2DACV,EAAM,MAAM,MAAM;;;;;;;0CAOlC,EAAM,cAAc,MAAQ,KAAO,OAAO,EAAM,MAAM,MAAM,CAAE;;0CAE/D,OAAO,EAAM,IAAI,MAAM,CAAC;uCAC3B,EAAM,MAAM,OAAS,EAAM,MAAM,OAAS,WAAW;2CACjD,EAAM,cAAc,OAAS,KAAK;;;;oCAIvC,EAAM,cAAc,MAAmC,KAA3B,SAAS,EAAQ,QAAgB;;qDAE9C,EAAM,kBAAkB,MAAM;;wDAE3B,EAAM,MAAM,MAAM;;oBAExD;OAGlB,OAAQ,CAAC,EAAA,gBAAiB,EAAA,kBAAmB,EAAA,mBAAoB,EAAA,QAAgB,CACjF,IAAK,eACN,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
2
+ import { colorThemeMixin as t, forcedColorsMixin as n } from "./styles/mixins/theme.css.js";
3
+ import "./styles/index.js";
4
+ import r from "./feedback/progress/progress.css?inline.js";
5
+ import { computed as i, defineComponent as a, html as o, watch as s } from "@vielzeug/craftit";
6
+ //#region src/feedback/progress/progress.ts
7
+ var c = a({
8
+ props: {
9
+ color: { default: void 0 },
10
+ "floating-label": { default: void 0 },
11
+ indeterminate: { default: !1 },
12
+ label: { default: void 0 },
13
+ max: { default: 100 },
14
+ size: { default: void 0 },
15
+ title: { default: void 0 },
16
+ type: { default: "linear" },
17
+ value: { default: 0 },
18
+ "value-text": { default: void 0 }
19
+ },
20
+ setup({ host: e, props: t }) {
21
+ let n = 2 * Math.PI * 45, r = i(() => `${Math.max(0, Math.min(Number(t.value.value), Number(t.max.value))) / Math.max(1, Number(t.max.value)) * 100}%`), a = i(() => n - Math.max(0, Math.min(Number(t.value.value), Number(t.max.value))) / Math.max(1, Number(t.max.value)) * n), c = i(() => t.type.value === "circular");
22
+ return s([
23
+ t.value,
24
+ t.max,
25
+ t.indeterminate
26
+ ], () => {
27
+ e.style.setProperty("--_percent", t.indeterminate.value ? "0%" : r.value);
28
+ }, { immediate: !0 }), o`
29
+ ${() => c.value ? o` <div
30
+ class="circular-track"
31
+ role="progressbar"
32
+ :aria-valuenow="${() => t.indeterminate.value ? null : String(t.value.value)}"
33
+ aria-valuemin="0"
34
+ :aria-valuemax="${() => String(t.max.value)}"
35
+ :aria-label="${() => t.label.value ?? t.title.value ?? "Progress"}"
36
+ :aria-valuetext="${() => t["value-text"].value ?? null}"
37
+ :style="${() => `--_circ:${n}px`}">
38
+ <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
39
+ <circle class="circle-bg" cx="50" cy="50" r="${45}"></circle>
40
+ <circle
41
+ class="circle-fill"
42
+ cx="50"
43
+ cy="50"
44
+ r="${45}"
45
+ :stroke-dasharray="${() => t.indeterminate.value ? void 0 : `${n}px`}"
46
+ :stroke-dashoffset="${() => t.indeterminate.value ? void 0 : `${a.value}px`}"></circle>
47
+ </svg>
48
+ <div class="circular-inner">
49
+ <span class="circular-label">${() => t.label.value}</span>
50
+ <span class="circular-title">${() => t.title.value}</span>
51
+ </div>
52
+ </div>` : o` <div class="wrapper">
53
+ <div class="header">
54
+ <span class="progress-title">${() => t.title.value}</span>
55
+ <span class="end-label header-label">${() => t.label.value}</span>
56
+ </div>
57
+ <div class="bar-row">
58
+ <div class="track-outer">
59
+ <div
60
+ class="track"
61
+ role="progressbar"
62
+ :aria-valuenow="${() => t.indeterminate.value ? null : String(t.value.value)}"
63
+ aria-valuemin="0"
64
+ :aria-valuemax="${() => String(t.max.value)}"
65
+ :aria-label="${() => t.label.value ?? t.title.value ?? "Progress"}"
66
+ :aria-valuetext="${() => t["value-text"].value ?? null}">
67
+ <div
68
+ class="fill"
69
+ part="fill"
70
+ :style="${() => t.indeterminate.value ? null : `width:${r.value}`}"></div>
71
+ </div>
72
+ <span class="floating-label">${() => t["floating-label"].value}</span>
73
+ </div>
74
+ <span class="end-label row-label">${() => t.label.value}</span>
75
+ </div>
76
+ </div>`}
77
+ `;
78
+ },
79
+ styles: [
80
+ t,
81
+ n,
82
+ e,
83
+ r
84
+ ],
85
+ tag: "bit-progress"
86
+ });
87
+ //#endregion
88
+ export { c as PROGRESS_TAG };
89
+
90
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","names":[],"sources":["../src/feedback/progress/progress.ts"],"sourcesContent":["import { computed, defineComponent, html, watch } from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { colorThemeMixin, forcedColorsMixin, reducedMotionMixin } from '../../styles';\nimport componentStyles from './progress.css?inline';\n\n/** Progress bar component properties */\nexport type BitProgressProps = {\n /** Theme color for the fill bar */\n color?: ThemeColor;\n /** Floating chip centered above the fill endpoint (linear only). Hidden in indeterminate mode. Position formula: left = fill% − half chip width (CSS: left:X%; transform:translateX(−50%)). */\n 'floating-label'?: string;\n /** When true, shows an infinite animation — use when progress is unknown. */\n indeterminate?: boolean;\n /** Accessible name AND visible text label.\n * - Linear without `title`: rendered at the end of the bar.\n * - Linear with `title`: moved into the header row above the bar.\n * - Circular: large text centered inside the ring. */\n label?: string;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Size variant controlling bar height */\n size?: ComponentSize;\n /** Title text.\n * - Linear: displayed as a header above the bar; moves `label` into the header row.\n * - Circular: smaller text displayed below the `label` inside the ring. */\n title?: string;\n /** 'linear' (default) or 'circular' */\n type?: 'linear' | 'circular';\n /** Current progress value (0 to `max`). Ignored when `indeterminate`. */\n value?: number;\n /** Human-readable value text for screen readers (e.g. \"Step 2 of 5\", \"75%\"). Overrides the raw aria-valuenow when set. */\n 'value-text'?: string;\n};\n\n/**\n * A linear progress bar for conveying operation progress.\n * Supports determinate (known value) and indeterminate (unknown duration) modes.\n *\n * @element bit-progress\n *\n * @attr {number} value - Current value (0–max). Defaults to 0.\n * @attr {number} max - Maximum value. Defaults to 100.\n * @attr {boolean} indeterminate - Show infinite animation (ignores value/max).\n * @attr {string} color - Theme color: 'primary' | 'success' | 'warning' | 'error' | …\n * @attr {string} size - Bar height: 'sm' | 'md' | 'lg'\n * @attr {string} label - Visible text label + accessible name. Linear: at bar end (or header row with title). Circular: large text centered inside the ring.\n * @attr {string} title - Title text. Linear: header above the bar (moves label to header row). Circular: smaller text below the label inside the ring.\n * @attr {string} floating-label - Floating chip centered above the fill endpoint (linear only); hidden when indeterminate.\n *\n * @cssprop --progress-height - Bar height override\n * @cssprop --progress-track-bg - Track background color\n * @cssprop --progress-fill - Fill bar color\n * @cssprop --progress-radius - Border radius\n * @cssprop --progress-label-gap - Gap between header/bar row and between bar and trailing label (default 0.25 rem)\n * @cssprop --progress-title-color - Title text color (defaults to currentColor)\n * @cssprop --progress-label-color - Label text color (defaults to currentColor)\n * @cssprop --progress-circle-size - Circular indicator diameter (default 6rem)\n * @cssprop --progress-circular-label-size - Font size of the label inside the ring (default --text-xl)\n * @cssprop --progress-circular-title-size - Font size of the title inside the ring (default --text-xs)\n *\n * @example\n * ```html\n * <bit-progress value=\"45\"></bit-progress>\n * <bit-progress value=\"75\" max=\"100\" color=\"success\" size=\"lg\"></bit-progress>\n * <bit-progress indeterminate color=\"primary\" label=\"Loading…\"></bit-progress>\n * ```\n */\nexport const PROGRESS_TAG = defineComponent<BitProgressProps>({\n props: {\n color: { default: undefined },\n 'floating-label': { default: undefined },\n indeterminate: { default: false },\n label: { default: undefined },\n max: { default: 100 },\n size: { default: undefined },\n title: { default: undefined },\n type: { default: 'linear' },\n value: { default: 0 },\n 'value-text': { default: undefined },\n },\n setup({ host, props }) {\n // The SVG circle circumference for a radius of 45 (viewBox 0 0 100 100)\n const RADIUS = 45;\n const CIRC = 2 * Math.PI * RADIUS; // ~282.7\n const percent = computed(() => {\n const v = Math.max(0, Math.min(Number(props.value.value), Number(props.max.value)));\n const m = Math.max(1, Number(props.max.value));\n\n return `${(v / m) * 100}%`;\n });\n const dashoffset = computed(() => {\n const v = Math.max(0, Math.min(Number(props.value.value), Number(props.max.value)));\n const m = Math.max(1, Number(props.max.value));\n\n return CIRC - (v / m) * CIRC;\n });\n const isCircular = computed(() => props.type.value === 'circular');\n\n // Use watch([...], fn, { immediate: true }) at setup-level so it fires during\n // connectedCallback (when attributes are already synced) rather than deferring\n // to onMount. The immediate flag triggers the first run synchronously.\n watch(\n [props.value, props.max, props.indeterminate],\n () => {\n host.style.setProperty('--_percent', props.indeterminate.value ? '0%' : percent.value);\n },\n { immediate: true },\n );\n\n return html`\n ${() =>\n isCircular.value\n ? html` <div\n class=\"circular-track\"\n role=\"progressbar\"\n :aria-valuenow=\"${() => (props.indeterminate.value ? null : String(props.value.value))}\"\n aria-valuemin=\"0\"\n :aria-valuemax=\"${() => String(props.max.value)}\"\n :aria-label=\"${() => props.label.value ?? props.title.value ?? 'Progress'}\"\n :aria-valuetext=\"${() => props['value-text'].value ?? null}\"\n :style=\"${() => `--_circ:${CIRC}px`}\">\n <svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle class=\"circle-bg\" cx=\"50\" cy=\"50\" r=\"${RADIUS}\"></circle>\n <circle\n class=\"circle-fill\"\n cx=\"50\"\n cy=\"50\"\n r=\"${RADIUS}\"\n :stroke-dasharray=\"${() => (props.indeterminate.value ? undefined : `${CIRC}px`)}\"\n :stroke-dashoffset=\"${() =>\n props.indeterminate.value ? undefined : `${dashoffset.value}px`}\"></circle>\n </svg>\n <div class=\"circular-inner\">\n <span class=\"circular-label\">${() => props.label.value}</span>\n <span class=\"circular-title\">${() => props.title.value}</span>\n </div>\n </div>`\n : html` <div class=\"wrapper\">\n <div class=\"header\">\n <span class=\"progress-title\">${() => props.title.value}</span>\n <span class=\"end-label header-label\">${() => props.label.value}</span>\n </div>\n <div class=\"bar-row\">\n <div class=\"track-outer\">\n <div\n class=\"track\"\n role=\"progressbar\"\n :aria-valuenow=\"${() => (props.indeterminate.value ? null : String(props.value.value))}\"\n aria-valuemin=\"0\"\n :aria-valuemax=\"${() => String(props.max.value)}\"\n :aria-label=\"${() => props.label.value ?? props.title.value ?? 'Progress'}\"\n :aria-valuetext=\"${() => props['value-text'].value ?? null}\">\n <div\n class=\"fill\"\n part=\"fill\"\n :style=\"${() => (!props.indeterminate.value ? `width:${percent.value}` : null)}\"></div>\n </div>\n <span class=\"floating-label\">${() => props['floating-label'].value}</span>\n </div>\n <span class=\"end-label row-label\">${() => props.label.value}</span>\n </div>\n </div>`}\n `;\n },\n styles: [colorThemeMixin, forcedColorsMixin, reducedMotionMixin, componentStyles],\n tag: 'bit-progress',\n});\n"],"mappings":";;;;;;AAqEA,IAAa,IAAe,EAAkC;CAC5D,OAAO;EACL,OAAO,EAAE,SAAS,KAAA,GAAW;EAC7B,kBAAkB,EAAE,SAAS,KAAA,GAAW;EACxC,eAAe,EAAE,SAAS,IAAO;EACjC,OAAO,EAAE,SAAS,KAAA,GAAW;EAC7B,KAAK,EAAE,SAAS,KAAK;EACrB,MAAM,EAAE,SAAS,KAAA,GAAW;EAC5B,OAAO,EAAE,SAAS,KAAA,GAAW;EAC7B,MAAM,EAAE,SAAS,UAAU;EAC3B,OAAO,EAAE,SAAS,GAAG;EACrB,cAAc,EAAE,SAAS,KAAA,GAAW;EACrC;CACD,MAAM,EAAE,SAAM,YAAS;EAErB,IACM,IAAO,IAAI,KAAK,KAAK,IACrB,IAAU,QAIP,GAHG,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,EAAM,MAAM,MAAM,EAAE,OAAO,EAAM,IAAI,MAAM,CAAC,CAAC,GACzE,KAAK,IAAI,GAAG,OAAO,EAAM,IAAI,MAAM,CAAC,GAE1B,IAAI,GACxB,EACI,IAAa,QAIV,IAHG,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,EAAM,MAAM,MAAM,EAAE,OAAO,EAAM,IAAI,MAAM,CAAC,CAAC,GACzE,KAAK,IAAI,GAAG,OAAO,EAAM,IAAI,MAAM,CAAC,GAEtB,EACxB,EACI,IAAa,QAAe,EAAM,KAAK,UAAU,WAAW;AAalE,SARA,EACE;GAAC,EAAM;GAAO,EAAM;GAAK,EAAM;GAAc,QACvC;AACJ,KAAK,MAAM,YAAY,cAAc,EAAM,cAAc,QAAQ,OAAO,EAAQ,MAAM;KAExF,EAAE,WAAW,IAAM,CACpB,EAEM,CAAI;cAEP,EAAW,QACP,CAAI;;;sCAGuB,EAAM,cAAc,QAAQ,OAAO,OAAO,EAAM,MAAM,MAAM,CAAE;;sCAE/D,OAAO,EAAM,IAAI,MAAM,CAAC;mCAC3B,EAAM,MAAM,SAAS,EAAM,MAAM,SAAS,WAAW;uCACjD,EAAM,cAAc,SAAS,KAAK;8BAC3C,WAAW,EAAK,IAAI;;+DAEa,GAAO;;;;;uBAK/C,GAAO;6CACgB,EAAM,cAAc,QAAQ,KAAA,IAAY,GAAG,EAAK,IAAK;8CAE/E,EAAM,cAAc,QAAQ,KAAA,IAAY,GAAG,EAAW,MAAM,IAAI;;;qDAG/B,EAAM,MAAM,MAAM;qDAClB,EAAM,MAAM,MAAM;;sBAG3D,CAAI;;qDAEqC,EAAM,MAAM,MAAM;6DACV,EAAM,MAAM,MAAM;;;;;;;4CAOlC,EAAM,cAAc,QAAQ,OAAO,OAAO,EAAM,MAAM,MAAM,CAAE;;4CAE/D,OAAO,EAAM,IAAI,MAAM,CAAC;yCAC3B,EAAM,MAAM,SAAS,EAAM,MAAM,SAAS,WAAW;6CACjD,EAAM,cAAc,SAAS,KAAK;;;;sCAIvC,EAAM,cAAc,QAAmC,OAA3B,SAAS,EAAQ,QAAgB;;uDAE9C,EAAM,kBAAkB,MAAM;;0DAE3B,EAAM,MAAM,MAAM;;oBAExD;;;CAGlB,QAAQ;EAAC;EAAiB;EAAmB;EAAoB;EAAgB;CACjF,KAAK;CACN,CAAC"}
@@ -0,0 +1,20 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/shape.css.cjs`),t=require(`./styles/mixins/states.css.cjs`),n=require(`./styles/mixins/theme.css.cjs`);require(`./styles/index.cjs`);const r=require(`./inputs/shared/utils/choice-change.cjs`),i=require(`./inputs/shared/form-context.cjs`),a=require(`./inputs/shared/dom-sync/form-context.cjs`);require(`./inputs/shared/dom-sync/index.cjs`);const o=require(`./inputs/radio-group/radio-group.css?inline.cjs`);let s=require(`@vielzeug/craftit`);var c=(0,s.createContext)(`RadioGroupContext`),l=(0,s.defineComponent)({props:{color:{default:void 0},disabled:{default:!1},error:{default:``},helper:{default:``},label:{default:``},name:{default:``},orientation:{default:`vertical`},required:{default:!1},size:{default:void 0},value:{default:``}},setup({emit:e,host:t,props:n}){let o=(0,s.signal)(``);(0,s.watch)(n.value,e=>{o.value=e??``},{immediate:!0});let l=()=>Array.from(t.getElementsByTagName(`bit-radio`)),u=e=>l().find(t=>(t.getAttribute(`value`)??``)===e)?.textContent?.replace(/\s+/g,` `).trim()||e,d=(t,n)=>{o.value=t;let i=t?[u(t)]:[];e(`change`,r.createChoiceChangeDetail(t?[t]:[],i,n))};a.mountFormContextSync(t,(0,s.inject)(i.FORM_CTX,void 0),n),(0,s.provide)(c,{color:n.color,disabled:(0,s.computed)(()=>!!n.disabled.value),name:n.name,select:d,size:n.size,value:o});let f=()=>{for(let e of l())(e.getAttribute(`value`)??``)===o.value?e.setAttribute(`checked`,``):e.removeAttribute(`checked`),n.name.value&&e.setAttribute(`name`,n.name.value),n.color.value?e.setAttribute(`color`,n.color.value):e.removeAttribute(`color`),n.size.value?e.setAttribute(`size`,n.size.value):e.removeAttribute(`size`),n.disabled.value?e.setAttribute(`disabled`,``):e.removeAttribute(`disabled`)};(0,s.onMount)(()=>{(0,s.onSlotChange)(`default`,f),f(),(0,s.effect)(f),(0,s.effect)(()=>{let e=l(),t=!1;for(let r of e)r.getAttribute(`value`)===o.value&&!n.disabled.value?(r.setAttribute(`tabindex`,`0`),t=!0):r.setAttribute(`tabindex`,`-1`);if(!t&&e.length>0){let t=e.find(e=>!e.hasAttribute(`disabled`));t&&t.setAttribute(`tabindex`,`0`)}}),(0,s.handle)(t,`keydown`,e=>{if(![`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`].includes(e.key))return;let t=l().filter(e=>!e.hasAttribute(`disabled`));if(!t.length)return;let n=t.indexOf(document.activeElement);if(n===-1)return;e.preventDefault();let r=e.key===`ArrowDown`||e.key===`ArrowRight`?(n+1)%t.length:(n-1+t.length)%t.length;t[r].focus(),d(t[r].getAttribute(`value`)??``,e)}),(0,s.handle)(t,`change`,e=>{e.target!==t&&(e.stopPropagation(),d(e.target.getAttribute(`value`)??``,e))})});let p=(0,s.createId)(`radio-group-legend`),m=`${p}-error`,h=`${p}-helper`,g=(0,s.computed)(()=>!!n.error.value),_=(0,s.computed)(()=>!!n.helper.value&&!g.value);return s.html`
2
+ <fieldset
3
+ role="radiogroup"
4
+ aria-required="${()=>String(!!n.required.value)}"
5
+ aria-invalid="${()=>String(g.value)}"
6
+ aria-errormessage="${()=>g.value?m:null}"
7
+ aria-describedby="${()=>g.value?m:_.value?h:null}">
8
+ <legend id="${p}" ?hidden=${()=>!n.label.value}>
9
+ ${()=>n.label.value}${()=>n.required.value?s.html`<span aria-hidden="true"> *</span>`:``}
10
+ </legend>
11
+ <div class="radio-group-items" part="items">
12
+ <slot></slot>
13
+ </div>
14
+ <div class="error-text" id="${m}" role="alert" ?hidden=${()=>!g.value}>
15
+ ${()=>n.error.value}
16
+ </div>
17
+ <div class="helper-text" id="${h}" ?hidden=${()=>!_.value}>${()=>n.helper.value}</div>
18
+ </fieldset>
19
+ `},styles:[n.colorThemeMixin,e.sizeVariantMixin(),t.disabledStateMixin(),o.default],tag:`bit-radio-group`});exports.RADIO_GROUP_CTX=c,exports.RADIO_GROUP_TAG=l;
20
+ //# sourceMappingURL=radio-group.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.cjs","names":[],"sources":["../src/inputs/radio-group/radio-group.ts"],"sourcesContent":["import {\n computed,\n createContext,\n createId,\n defineComponent,\n effect,\n handle,\n html,\n inject,\n onMount,\n onSlotChange,\n provide,\n type ReadonlySignal,\n signal,\n watch,\n} from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { mountFormContextSync } from '../shared/dom-sync';\nimport { FORM_CTX } from '../shared/form-context';\nimport { createChoiceChangeDetail, type ChoiceChangeDetail } from '../shared/utils';\nimport componentStyles from './radio-group.css?inline';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport type RadioGroupContext = {\n color: ReadonlySignal<ThemeColor | undefined>;\n disabled: ReadonlySignal<boolean>;\n name: ReadonlySignal<string | undefined>;\n select: (value: string, originalEvent?: Event) => void;\n size: ReadonlySignal<ComponentSize | undefined>;\n value: ReadonlySignal<string>;\n};\n\nexport const RADIO_GROUP_CTX = createContext<RadioGroupContext>('RadioGroupContext');\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type BitRadioGroupProps = {\n /** Theme color — propagated to all child bit-radio elements */\n color?: ThemeColor;\n /** Disable all radios in the group */\n disabled?: boolean;\n /** Error message shown below the group */\n error?: string;\n /** Helper text shown below the group */\n helper?: string;\n /** Legend / label for the fieldset. Required for accessibility. */\n label?: string;\n /** Form field name — propagated to all child bit-radio elements */\n name?: string;\n /** Layout direction of the radio options */\n orientation?: 'vertical' | 'horizontal';\n /** Mark the group as required */\n required?: boolean;\n /** Size — propagated to all child bit-radio elements */\n size?: ComponentSize;\n /** Currently selected value */\n value?: string;\n};\n\nexport type BitRadioGroupEvents = {\n change: ChoiceChangeDetail;\n};\n\n/**\n * A fieldset wrapper that groups `bit-radio` elements, provides shared\n * `name`, `color`, and `size` via context, and manages roving tabindex\n * keyboard navigation.\n *\n * @element bit-radio-group\n *\n * @attr {string} label - Legend text (required for a11y)\n * @attr {string} value - Currently selected value\n * @attr {string} name - Form field name (propagated to all bit-radio children)\n * @attr {boolean} disabled - Disable all radios in the group\n * @attr {string} error - Error message\n * @attr {string} helper - Helper text\n * @attr {string} color - Theme color\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} orientation - Layout: 'vertical' | 'horizontal'\n * @attr {boolean} required - Required field\n *\n * @fires change - Emitted when a radio is selected. detail: { value: string, values: string[], labels: string[], originalEvent?: Event }\n *\n * @slot - Place `bit-radio` elements here\n */\nexport const RADIO_GROUP_TAG = defineComponent<BitRadioGroupProps, BitRadioGroupEvents>({\n props: {\n color: { default: undefined },\n disabled: { default: false },\n error: { default: '' },\n helper: { default: '' },\n label: { default: '' },\n name: { default: '' },\n orientation: { default: 'vertical' },\n required: { default: false },\n size: { default: undefined },\n value: { default: '' },\n },\n setup({ emit, host, props }) {\n const selectedValue = signal('');\n\n watch(\n props.value,\n (v) => {\n selectedValue.value = (v as string | undefined) ?? '';\n },\n { immediate: true },\n );\n\n const getSlottedRadios = (): HTMLElement[] => Array.from(host.getElementsByTagName('bit-radio')) as HTMLElement[];\n\n const getLabelForValue = (value: string): string => {\n const radio = getSlottedRadios().find((el) => (el.getAttribute('value') ?? '') === value);\n\n return radio?.textContent?.replace(/\\s+/g, ' ').trim() || value;\n };\n\n const selectRadio = (val: string, originalEvent?: Event) => {\n selectedValue.value = val;\n\n const labels = val ? [getLabelForValue(val)] : [];\n const values = val ? [val] : [];\n\n emit('change', createChoiceChangeDetail(values, labels, originalEvent));\n };\n\n const formCtx = inject(FORM_CTX, undefined);\n\n mountFormContextSync(host, formCtx, props);\n\n provide(RADIO_GROUP_CTX, {\n color: props.color,\n disabled: computed(() => Boolean(props.disabled.value)),\n name: props.name,\n select: selectRadio,\n size: props.size,\n value: selectedValue,\n });\n\n // Sync name/color/size/disabled onto slotted bit-radio children.\n // Checked state is handled reactively inside bit-radio via group context.\n const syncChildren = () => {\n for (const radio of getSlottedRadios()) {\n const val = radio.getAttribute('value') ?? '';\n\n if (val === selectedValue.value) radio.setAttribute('checked', '');\n else radio.removeAttribute('checked');\n\n if (props.name.value) radio.setAttribute('name', props.name.value);\n\n if (props.color.value) radio.setAttribute('color', props.color.value);\n else radio.removeAttribute('color');\n\n if (props.size.value) radio.setAttribute('size', props.size.value);\n else radio.removeAttribute('size');\n\n if (props.disabled.value) radio.setAttribute('disabled', '');\n else radio.removeAttribute('disabled');\n }\n };\n\n onMount(() => {\n onSlotChange('default', syncChildren);\n // Apply group props to already-slotted radios on first mount.\n syncChildren();\n effect(syncChildren);\n\n // Roving tabindex: only the selected (or first) radio is tabbable\n effect(() => {\n const radios = getSlottedRadios();\n let hasFocusable = false;\n\n for (const radio of radios) {\n const isSelected = radio.getAttribute('value') === selectedValue.value;\n\n if (isSelected && !props.disabled.value) {\n radio.setAttribute('tabindex', '0');\n hasFocusable = true;\n } else {\n radio.setAttribute('tabindex', '-1');\n }\n }\n\n // If nothing is selected, make the first non-disabled radio tabbable\n if (!hasFocusable && radios.length > 0) {\n const first = radios.find((r) => !r.hasAttribute('disabled'));\n\n if (first) first.setAttribute('tabindex', '0');\n }\n });\n\n // Arrow-key navigation within the group\n handle(host, 'keydown', (e: KeyboardEvent) => {\n if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) return;\n\n const radios = getSlottedRadios().filter((el) => !el.hasAttribute('disabled'));\n\n if (!radios.length) return;\n\n const focused = radios.indexOf(document.activeElement as HTMLElement);\n\n if (focused === -1) return;\n\n e.preventDefault();\n\n const next =\n e.key === 'ArrowDown' || e.key === 'ArrowRight'\n ? (focused + 1) % radios.length\n : (focused - 1 + radios.length) % radios.length;\n\n radios[next].focus();\n selectRadio(radios[next].getAttribute('value') ?? '', e);\n });\n\n handle(host, 'change', (e: Event) => {\n if (e.target === host) return;\n\n e.stopPropagation();\n selectRadio((e.target as HTMLElement).getAttribute('value') ?? '', e);\n });\n });\n\n const legendId = createId('radio-group-legend');\n const errorId = `${legendId}-error`;\n const helperId = `${legendId}-helper`;\n const hasError = computed(() => Boolean(props.error.value));\n const hasHelper = computed(() => Boolean(props.helper.value) && !hasError.value);\n\n return html`\n <fieldset\n role=\"radiogroup\"\n aria-required=\"${() => String(Boolean(props.required.value))}\"\n aria-invalid=\"${() => String(hasError.value)}\"\n aria-errormessage=\"${() => (hasError.value ? errorId : null)}\"\n aria-describedby=\"${() => (hasError.value ? errorId : hasHelper.value ? helperId : null)}\">\n <legend id=\"${legendId}\" ?hidden=${() => !props.label.value}>\n ${() => props.label.value}${() => (props.required.value ? html`<span aria-hidden=\"true\"> *</span>` : '')}\n </legend>\n <div class=\"radio-group-items\" part=\"items\">\n <slot></slot>\n </div>\n <div class=\"error-text\" id=\"${errorId}\" role=\"alert\" ?hidden=${() => !hasError.value}>\n ${() => props.error.value}\n </div>\n <div class=\"helper-text\" id=\"${helperId}\" ?hidden=${() => !hasHelper.value}>${() => props.helper.value}</div>\n </fieldset>\n `;\n },\n styles: [colorThemeMixin, sizeVariantMixin(), disabledStateMixin(), componentStyles],\n tag: 'bit-radio-group',\n});\n"],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { sizeVariantMixin as e } from "./styles/mixins/shape.css.js";
2
+ import { disabledStateMixin as t } from "./styles/mixins/states.css.js";
3
+ import { colorThemeMixin as n } from "./styles/mixins/theme.css.js";
4
+ import "./styles/index.js";
5
+ import { createChoiceChangeDetail as r } from "./inputs/shared/utils/choice-change.js";
6
+ import { FORM_CTX as i } from "./inputs/shared/form-context.js";
7
+ import { mountFormContextSync as a } from "./inputs/shared/dom-sync/form-context.js";
8
+ import "./inputs/shared/dom-sync/index.js";
9
+ import o from "./inputs/radio-group/radio-group.css?inline.js";
10
+ import { computed as s, createContext as c, createId as l, defineComponent as u, effect as d, handle as f, html as p, inject as m, onMount as h, onSlotChange as g, provide as _, signal as v, watch as y } from "@vielzeug/craftit";
11
+ //#region src/inputs/radio-group/radio-group.ts
12
+ var b = c("RadioGroupContext"), x = u({
13
+ props: {
14
+ color: { default: void 0 },
15
+ disabled: { default: !1 },
16
+ error: { default: "" },
17
+ helper: { default: "" },
18
+ label: { default: "" },
19
+ name: { default: "" },
20
+ orientation: { default: "vertical" },
21
+ required: { default: !1 },
22
+ size: { default: void 0 },
23
+ value: { default: "" }
24
+ },
25
+ setup({ emit: e, host: t, props: n }) {
26
+ let o = v("");
27
+ y(n.value, (e) => {
28
+ o.value = e ?? "";
29
+ }, { immediate: !0 });
30
+ let c = () => Array.from(t.getElementsByTagName("bit-radio")), u = (e) => c().find((t) => (t.getAttribute("value") ?? "") === e)?.textContent?.replace(/\s+/g, " ").trim() || e, x = (t, n) => {
31
+ o.value = t;
32
+ let i = t ? [u(t)] : [];
33
+ e("change", r(t ? [t] : [], i, n));
34
+ };
35
+ a(t, m(i, void 0), n), _(b, {
36
+ color: n.color,
37
+ disabled: s(() => !!n.disabled.value),
38
+ name: n.name,
39
+ select: x,
40
+ size: n.size,
41
+ value: o
42
+ });
43
+ let S = () => {
44
+ for (let e of c()) (e.getAttribute("value") ?? "") === o.value ? e.setAttribute("checked", "") : e.removeAttribute("checked"), n.name.value && e.setAttribute("name", n.name.value), n.color.value ? e.setAttribute("color", n.color.value) : e.removeAttribute("color"), n.size.value ? e.setAttribute("size", n.size.value) : e.removeAttribute("size"), n.disabled.value ? e.setAttribute("disabled", "") : e.removeAttribute("disabled");
45
+ };
46
+ h(() => {
47
+ g("default", S), S(), d(S), d(() => {
48
+ let e = c(), t = !1;
49
+ for (let r of e) r.getAttribute("value") === o.value && !n.disabled.value ? (r.setAttribute("tabindex", "0"), t = !0) : r.setAttribute("tabindex", "-1");
50
+ if (!t && e.length > 0) {
51
+ let t = e.find((e) => !e.hasAttribute("disabled"));
52
+ t && t.setAttribute("tabindex", "0");
53
+ }
54
+ }), f(t, "keydown", (e) => {
55
+ if (![
56
+ "ArrowUp",
57
+ "ArrowDown",
58
+ "ArrowLeft",
59
+ "ArrowRight"
60
+ ].includes(e.key)) return;
61
+ let t = c().filter((e) => !e.hasAttribute("disabled"));
62
+ if (!t.length) return;
63
+ let n = t.indexOf(document.activeElement);
64
+ if (n === -1) return;
65
+ e.preventDefault();
66
+ let r = e.key === "ArrowDown" || e.key === "ArrowRight" ? (n + 1) % t.length : (n - 1 + t.length) % t.length;
67
+ t[r].focus(), x(t[r].getAttribute("value") ?? "", e);
68
+ }), f(t, "change", (e) => {
69
+ e.target !== t && (e.stopPropagation(), x(e.target.getAttribute("value") ?? "", e));
70
+ });
71
+ });
72
+ let C = l("radio-group-legend"), w = `${C}-error`, T = `${C}-helper`, E = s(() => !!n.error.value), D = s(() => !!n.helper.value && !E.value);
73
+ return p`
74
+ <fieldset
75
+ role="radiogroup"
76
+ aria-required="${() => String(!!n.required.value)}"
77
+ aria-invalid="${() => String(E.value)}"
78
+ aria-errormessage="${() => E.value ? w : null}"
79
+ aria-describedby="${() => E.value ? w : D.value ? T : null}">
80
+ <legend id="${C}" ?hidden=${() => !n.label.value}>
81
+ ${() => n.label.value}${() => n.required.value ? p`<span aria-hidden="true"> *</span>` : ""}
82
+ </legend>
83
+ <div class="radio-group-items" part="items">
84
+ <slot></slot>
85
+ </div>
86
+ <div class="error-text" id="${w}" role="alert" ?hidden=${() => !E.value}>
87
+ ${() => n.error.value}
88
+ </div>
89
+ <div class="helper-text" id="${T}" ?hidden=${() => !D.value}>${() => n.helper.value}</div>
90
+ </fieldset>
91
+ `;
92
+ },
93
+ styles: [
94
+ n,
95
+ e(),
96
+ t(),
97
+ o
98
+ ],
99
+ tag: "bit-radio-group"
100
+ });
101
+ //#endregion
102
+ export { b as RADIO_GROUP_CTX, x as RADIO_GROUP_TAG };
103
+
104
+ //# sourceMappingURL=radio-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.js","names":[],"sources":["../src/inputs/radio-group/radio-group.ts"],"sourcesContent":["import {\n computed,\n createContext,\n createId,\n defineComponent,\n effect,\n handle,\n html,\n inject,\n onMount,\n onSlotChange,\n provide,\n type ReadonlySignal,\n signal,\n watch,\n} from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { mountFormContextSync } from '../shared/dom-sync';\nimport { FORM_CTX } from '../shared/form-context';\nimport { createChoiceChangeDetail, type ChoiceChangeDetail } from '../shared/utils';\nimport componentStyles from './radio-group.css?inline';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport type RadioGroupContext = {\n color: ReadonlySignal<ThemeColor | undefined>;\n disabled: ReadonlySignal<boolean>;\n name: ReadonlySignal<string | undefined>;\n select: (value: string, originalEvent?: Event) => void;\n size: ReadonlySignal<ComponentSize | undefined>;\n value: ReadonlySignal<string>;\n};\n\nexport const RADIO_GROUP_CTX = createContext<RadioGroupContext>('RadioGroupContext');\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type BitRadioGroupProps = {\n /** Theme color — propagated to all child bit-radio elements */\n color?: ThemeColor;\n /** Disable all radios in the group */\n disabled?: boolean;\n /** Error message shown below the group */\n error?: string;\n /** Helper text shown below the group */\n helper?: string;\n /** Legend / label for the fieldset. Required for accessibility. */\n label?: string;\n /** Form field name — propagated to all child bit-radio elements */\n name?: string;\n /** Layout direction of the radio options */\n orientation?: 'vertical' | 'horizontal';\n /** Mark the group as required */\n required?: boolean;\n /** Size — propagated to all child bit-radio elements */\n size?: ComponentSize;\n /** Currently selected value */\n value?: string;\n};\n\nexport type BitRadioGroupEvents = {\n change: ChoiceChangeDetail;\n};\n\n/**\n * A fieldset wrapper that groups `bit-radio` elements, provides shared\n * `name`, `color`, and `size` via context, and manages roving tabindex\n * keyboard navigation.\n *\n * @element bit-radio-group\n *\n * @attr {string} label - Legend text (required for a11y)\n * @attr {string} value - Currently selected value\n * @attr {string} name - Form field name (propagated to all bit-radio children)\n * @attr {boolean} disabled - Disable all radios in the group\n * @attr {string} error - Error message\n * @attr {string} helper - Helper text\n * @attr {string} color - Theme color\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} orientation - Layout: 'vertical' | 'horizontal'\n * @attr {boolean} required - Required field\n *\n * @fires change - Emitted when a radio is selected. detail: { value: string, values: string[], labels: string[], originalEvent?: Event }\n *\n * @slot - Place `bit-radio` elements here\n */\nexport const RADIO_GROUP_TAG = defineComponent<BitRadioGroupProps, BitRadioGroupEvents>({\n props: {\n color: { default: undefined },\n disabled: { default: false },\n error: { default: '' },\n helper: { default: '' },\n label: { default: '' },\n name: { default: '' },\n orientation: { default: 'vertical' },\n required: { default: false },\n size: { default: undefined },\n value: { default: '' },\n },\n setup({ emit, host, props }) {\n const selectedValue = signal('');\n\n watch(\n props.value,\n (v) => {\n selectedValue.value = (v as string | undefined) ?? '';\n },\n { immediate: true },\n );\n\n const getSlottedRadios = (): HTMLElement[] => Array.from(host.getElementsByTagName('bit-radio')) as HTMLElement[];\n\n const getLabelForValue = (value: string): string => {\n const radio = getSlottedRadios().find((el) => (el.getAttribute('value') ?? '') === value);\n\n return radio?.textContent?.replace(/\\s+/g, ' ').trim() || value;\n };\n\n const selectRadio = (val: string, originalEvent?: Event) => {\n selectedValue.value = val;\n\n const labels = val ? [getLabelForValue(val)] : [];\n const values = val ? [val] : [];\n\n emit('change', createChoiceChangeDetail(values, labels, originalEvent));\n };\n\n const formCtx = inject(FORM_CTX, undefined);\n\n mountFormContextSync(host, formCtx, props);\n\n provide(RADIO_GROUP_CTX, {\n color: props.color,\n disabled: computed(() => Boolean(props.disabled.value)),\n name: props.name,\n select: selectRadio,\n size: props.size,\n value: selectedValue,\n });\n\n // Sync name/color/size/disabled onto slotted bit-radio children.\n // Checked state is handled reactively inside bit-radio via group context.\n const syncChildren = () => {\n for (const radio of getSlottedRadios()) {\n const val = radio.getAttribute('value') ?? '';\n\n if (val === selectedValue.value) radio.setAttribute('checked', '');\n else radio.removeAttribute('checked');\n\n if (props.name.value) radio.setAttribute('name', props.name.value);\n\n if (props.color.value) radio.setAttribute('color', props.color.value);\n else radio.removeAttribute('color');\n\n if (props.size.value) radio.setAttribute('size', props.size.value);\n else radio.removeAttribute('size');\n\n if (props.disabled.value) radio.setAttribute('disabled', '');\n else radio.removeAttribute('disabled');\n }\n };\n\n onMount(() => {\n onSlotChange('default', syncChildren);\n // Apply group props to already-slotted radios on first mount.\n syncChildren();\n effect(syncChildren);\n\n // Roving tabindex: only the selected (or first) radio is tabbable\n effect(() => {\n const radios = getSlottedRadios();\n let hasFocusable = false;\n\n for (const radio of radios) {\n const isSelected = radio.getAttribute('value') === selectedValue.value;\n\n if (isSelected && !props.disabled.value) {\n radio.setAttribute('tabindex', '0');\n hasFocusable = true;\n } else {\n radio.setAttribute('tabindex', '-1');\n }\n }\n\n // If nothing is selected, make the first non-disabled radio tabbable\n if (!hasFocusable && radios.length > 0) {\n const first = radios.find((r) => !r.hasAttribute('disabled'));\n\n if (first) first.setAttribute('tabindex', '0');\n }\n });\n\n // Arrow-key navigation within the group\n handle(host, 'keydown', (e: KeyboardEvent) => {\n if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) return;\n\n const radios = getSlottedRadios().filter((el) => !el.hasAttribute('disabled'));\n\n if (!radios.length) return;\n\n const focused = radios.indexOf(document.activeElement as HTMLElement);\n\n if (focused === -1) return;\n\n e.preventDefault();\n\n const next =\n e.key === 'ArrowDown' || e.key === 'ArrowRight'\n ? (focused + 1) % radios.length\n : (focused - 1 + radios.length) % radios.length;\n\n radios[next].focus();\n selectRadio(radios[next].getAttribute('value') ?? '', e);\n });\n\n handle(host, 'change', (e: Event) => {\n if (e.target === host) return;\n\n e.stopPropagation();\n selectRadio((e.target as HTMLElement).getAttribute('value') ?? '', e);\n });\n });\n\n const legendId = createId('radio-group-legend');\n const errorId = `${legendId}-error`;\n const helperId = `${legendId}-helper`;\n const hasError = computed(() => Boolean(props.error.value));\n const hasHelper = computed(() => Boolean(props.helper.value) && !hasError.value);\n\n return html`\n <fieldset\n role=\"radiogroup\"\n aria-required=\"${() => String(Boolean(props.required.value))}\"\n aria-invalid=\"${() => String(hasError.value)}\"\n aria-errormessage=\"${() => (hasError.value ? errorId : null)}\"\n aria-describedby=\"${() => (hasError.value ? errorId : hasHelper.value ? helperId : null)}\">\n <legend id=\"${legendId}\" ?hidden=${() => !props.label.value}>\n ${() => props.label.value}${() => (props.required.value ? html`<span aria-hidden=\"true\"> *</span>` : '')}\n </legend>\n <div class=\"radio-group-items\" part=\"items\">\n <slot></slot>\n </div>\n <div class=\"error-text\" id=\"${errorId}\" role=\"alert\" ?hidden=${() => !hasError.value}>\n ${() => props.error.value}\n </div>\n <div class=\"helper-text\" id=\"${helperId}\" ?hidden=${() => !hasHelper.value}>${() => props.helper.value}</div>\n </fieldset>\n `;\n },\n styles: [colorThemeMixin, sizeVariantMixin(), disabledStateMixin(), componentStyles],\n tag: 'bit-radio-group',\n});\n"],"mappings":"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"}
package/dist/radio.cjs ADDED
@@ -0,0 +1,16 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/accessibility.css.cjs`),t=require(`./styles/mixins/shape.css.cjs`),n=require(`./styles/index.cjs`),r=require(`./craftit/dist/labs/a11y.cjs`),i=require(`./craftit/dist/labs/selectable.cjs`);require(`./craftit/dist/labs.cjs`);const a=require(`./inputs/shared/form-context.cjs`),o=require(`./inputs/shared/dom-sync/form-context.cjs`);require(`./inputs/shared/dom-sync/index.cjs`);const s=require(`./inputs/shared/design-presets.cjs`),c=require(`./radio-group.cjs`),l=require(`./inputs/radio/radio.css?inline.cjs`);let u=require(`@vielzeug/craftit`);var d=(0,u.defineComponent)({formAssociated:!0,props:{checked:{default:!1},color:{default:void 0},disabled:{default:!1},error:{default:``},helper:{default:``},name:{default:``},size:{default:void 0},value:{default:``}},setup({emit:e,host:t,props:n,reflect:s}){let l=(0,u.inject)(c.RADIO_GROUP_CTX,void 0),d=(0,u.inject)(a.FORM_CTX,void 0),f=(0,u.computed)(()=>l?.name.value||n.name.value||``),p=(0,u.computed)(()=>l?.size.value??n.size.value),m=(0,u.computed)(()=>l?.color.value??n.color.value),h=(0,u.computed)(()=>!!(l?.disabled.value||n.disabled.value));o.mountFormContextSync(t,d,n);let g=(0,u.signal)(!!n.checked.value);l?(0,u.watch)((0,u.computed)(()=>l.value.value===n.value.value),e=>{g.value=e},{immediate:!0}):(0,u.watch)(n.checked,e=>{g.value=!!e},{immediate:!0});let _=i.t({checked:g,disabled:n.disabled,onToggle:t=>{e(`change`,{checked:_.checked.value,fieldValue:n.value.value??``,originalEvent:t,value:_.checked.value})},value:n.value});(0,u.defineField)({disabled:h,toFormValue:e=>e,value:(0,u.computed)(()=>g.value?n.value.value??``:null)},{onReset:()=>{g.value=!!n.checked.value}});let v=()=>{let e=f.value;return e?Array.from(document.querySelectorAll(`bit-radio[name="${e}"]`)).filter(e=>!e.hasAttribute(`disabled`)):[]},y=r.r(t,{checked:()=>_.checked.value?`true`:`false`,helperText:()=>n.error.value||n.helper.value,helperTone:()=>n.error.value?`error`:`default`,invalid:()=>!!n.error.value,role:`radio`});return s({checked:()=>_.checked.value,classMap:()=>({"is-checked":_.checked.value,"is-disabled":h.value}),color:()=>m.value,disabled:()=>h.value?!0:void 0,name:()=>f.value||void 0,onClick:e=>{if(!h.value)if(l)l.select(n.value.value??``,e);else{if(!f.value)return;if(!_.checked.value){let r=n.name.value;document.querySelectorAll(`bit-radio[name="${r}"]`).forEach(e=>{e!==t&&e.removeAttribute(`checked`)}),_.toggle(e)}}},onKeydown:e=>{let r=e,i=v();if(i.length===0)return;let a=i.indexOf(t);if(a!==-1){if(r.key===` `||r.key===`Enter`)r.preventDefault(),_.checked.value||(l?l.select(n.value.value??``,r):_.toggle(r));else if(r.key===`ArrowDown`||r.key===`ArrowRight`){r.preventDefault();let e=i[(a+1)%i.length];e.focus(),l?l.select(e.getAttribute(`value`)??``):e.click()}else if(r.key===`ArrowUp`||r.key===`ArrowLeft`){r.preventDefault();let e=i[a===0?i.length-1:a-1];e.focus(),l?l.select(e.getAttribute(`value`)??``):e.click()}}},size:()=>p.value,tabindex:()=>{if(!h.value)return _.checked.value?0:-1}}),u.html`
2
+ <div class="radio-wrapper" part="radio">
3
+ <div class="circle" part="circle">
4
+ <div class="dot" part="dot"></div>
5
+ </div>
6
+ </div>
7
+ <span class="label" part="label" data-a11y-label id="${y.labelId}"><slot></slot></span>
8
+ <div
9
+ class="helper-text"
10
+ part="helper-text"
11
+ data-a11y-helper
12
+ id="${y.helperId}"
13
+ aria-live="polite"
14
+ hidden></div>
15
+ `},styles:[...n.formControlMixins,e.coarsePointerMixin,t.sizeVariantMixin(s.CONTROL_SIZE_PRESET),l.default],tag:`bit-radio`});exports.RADIO_TAG=d;
16
+ //# sourceMappingURL=radio.cjs.map