@vielzeug/refine 1.1.3 → 1.3.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 (768) hide show
  1. package/dist/accordion-item.cjs +4 -4
  2. package/dist/accordion-item.cjs.map +1 -1
  3. package/dist/accordion-item.js +41 -41
  4. package/dist/accordion-item.js.map +1 -1
  5. package/dist/accordion.cjs +1 -1
  6. package/dist/accordion.cjs.map +1 -1
  7. package/dist/accordion.js +21 -21
  8. package/dist/accordion.js.map +1 -1
  9. package/dist/alert.cjs +5 -5
  10. package/dist/alert.cjs.map +1 -1
  11. package/dist/alert.js +21 -21
  12. package/dist/alert.js.map +1 -1
  13. package/dist/async.cjs +10 -10
  14. package/dist/async.cjs.map +1 -1
  15. package/dist/async.js +27 -27
  16. package/dist/async.js.map +1 -1
  17. package/dist/avatar.cjs +2 -2
  18. package/dist/avatar.cjs.map +1 -1
  19. package/dist/avatar.js +30 -30
  20. package/dist/avatar.js.map +1 -1
  21. package/dist/badge.cjs +1 -1
  22. package/dist/badge.cjs.map +1 -1
  23. package/dist/badge.js +1 -1
  24. package/dist/box.cjs +1 -1
  25. package/dist/box.cjs.map +1 -1
  26. package/dist/box.js +1 -1
  27. package/dist/breadcrumb.cjs +2 -2
  28. package/dist/breadcrumb.cjs.map +1 -1
  29. package/dist/breadcrumb.js +20 -20
  30. package/dist/breadcrumb.js.map +1 -1
  31. package/dist/button-group.cjs +1 -1
  32. package/dist/button-group.cjs.map +1 -1
  33. package/dist/button-group.js +7 -7
  34. package/dist/button-group.js.map +1 -1
  35. package/dist/button.cjs +6 -6
  36. package/dist/button.cjs.map +1 -1
  37. package/dist/button.js +44 -42
  38. package/dist/button.js.map +1 -1
  39. package/dist/calendar.cjs +28 -28
  40. package/dist/calendar.cjs.map +1 -1
  41. package/dist/calendar.js +93 -91
  42. package/dist/calendar.js.map +1 -1
  43. package/dist/card.cjs +6 -6
  44. package/dist/card.cjs.map +1 -1
  45. package/dist/card.js +35 -34
  46. package/dist/card.js.map +1 -1
  47. package/dist/carousel.cjs +19 -19
  48. package/dist/carousel.cjs.map +1 -1
  49. package/dist/carousel.js +111 -111
  50. package/dist/carousel.js.map +1 -1
  51. package/dist/chat-message.cjs +47 -0
  52. package/dist/chat-message.cjs.map +1 -0
  53. package/dist/chat-message.js +121 -0
  54. package/dist/chat-message.js.map +1 -0
  55. package/dist/checkbox-group.cjs +9 -9
  56. package/dist/checkbox-group.cjs.map +1 -1
  57. package/dist/checkbox-group.js +54 -52
  58. package/dist/checkbox-group.js.map +1 -1
  59. package/dist/checkbox.cjs +4 -4
  60. package/dist/checkbox.cjs.map +1 -1
  61. package/dist/checkbox.js +39 -37
  62. package/dist/checkbox.js.map +1 -1
  63. package/dist/chip.cjs +14 -14
  64. package/dist/chip.cjs.map +1 -1
  65. package/dist/chip.js +43 -43
  66. package/dist/chip.js.map +1 -1
  67. package/dist/code-window.cjs +1 -1
  68. package/dist/code-window.cjs.map +1 -1
  69. package/dist/code-window.js +1 -1
  70. package/dist/combobox.cjs +25 -25
  71. package/dist/combobox.cjs.map +1 -1
  72. package/dist/combobox.js +181 -179
  73. package/dist/combobox.js.map +1 -1
  74. package/dist/command-palette.cjs +62 -0
  75. package/dist/command-palette.cjs.map +1 -0
  76. package/dist/command-palette.js +179 -0
  77. package/dist/command-palette.js.map +1 -0
  78. package/dist/content/avatar/{avatar-group.css?inline.cjs → avatar-group.css.cjs} +1 -1
  79. package/dist/content/avatar/avatar-group.css.cjs.map +1 -0
  80. package/dist/content/avatar/{avatar-group.css?inline.js → avatar-group.css.js} +1 -1
  81. package/dist/content/avatar/avatar-group.css.js.map +1 -0
  82. package/dist/content/avatar/{avatar.css?inline.cjs → avatar.css.cjs} +1 -1
  83. package/dist/content/avatar/avatar.css.cjs.map +1 -0
  84. package/dist/content/avatar/{avatar.css?inline.js → avatar.css.js} +1 -1
  85. package/dist/content/avatar/avatar.css.js.map +1 -0
  86. package/dist/content/breadcrumb/{breadcrumb-item.css?inline.cjs → breadcrumb-item.css.cjs} +1 -1
  87. package/dist/content/breadcrumb/breadcrumb-item.css.cjs.map +1 -0
  88. package/dist/content/breadcrumb/{breadcrumb-item.css?inline.js → breadcrumb-item.css.js} +1 -1
  89. package/dist/content/breadcrumb/breadcrumb-item.css.js.map +1 -0
  90. package/dist/content/breadcrumb/{breadcrumb.css?inline.cjs → breadcrumb.css.cjs} +1 -1
  91. package/dist/content/breadcrumb/breadcrumb.css.cjs.map +1 -0
  92. package/dist/content/breadcrumb/{breadcrumb.css?inline.js → breadcrumb.css.js} +1 -1
  93. package/dist/content/breadcrumb/breadcrumb.css.js.map +1 -0
  94. package/dist/content/card/{card.css?inline.cjs → card.css.cjs} +1 -1
  95. package/dist/content/card/card.css.cjs.map +1 -0
  96. package/dist/content/card/{card.css?inline.js → card.css.js} +1 -1
  97. package/dist/content/card/card.css.js.map +1 -0
  98. package/dist/content/carousel/carousel-slide.cjs +1 -1
  99. package/dist/content/carousel/carousel-slide.cjs.map +1 -1
  100. package/dist/content/carousel/{carousel-slide.css?inline.cjs → carousel-slide.css.cjs} +1 -1
  101. package/dist/content/carousel/carousel-slide.css.cjs.map +1 -0
  102. package/dist/content/carousel/{carousel-slide.css?inline.js → carousel-slide.css.js} +1 -1
  103. package/dist/content/carousel/carousel-slide.css.js.map +1 -0
  104. package/dist/content/carousel/carousel-slide.js +7 -7
  105. package/dist/content/carousel/carousel-slide.js.map +1 -1
  106. package/dist/content/carousel/{carousel.css?inline.cjs → carousel.css.cjs} +1 -1
  107. package/dist/content/carousel/carousel.css.cjs.map +1 -0
  108. package/dist/content/carousel/{carousel.css?inline.js → carousel.css.js} +1 -1
  109. package/dist/content/carousel/carousel.css.js.map +1 -0
  110. package/dist/content/chat-message/chat-message.css.cjs +2 -0
  111. package/dist/content/chat-message/chat-message.css.cjs.map +1 -0
  112. package/dist/content/chat-message/chat-message.css.js +6 -0
  113. package/dist/content/chat-message/chat-message.css.js.map +1 -0
  114. package/dist/content/chat-message/chat-message.d.ts +87 -0
  115. package/dist/content/chat-message/chat-message.d.ts.map +1 -0
  116. package/dist/content/code-window/{code-window.css?inline.cjs → code-window.css.cjs} +1 -1
  117. package/dist/content/code-window/code-window.css.cjs.map +1 -0
  118. package/dist/content/code-window/{code-window.css?inline.js → code-window.css.js} +1 -1
  119. package/dist/content/code-window/code-window.css.js.map +1 -0
  120. package/dist/content/copy-command/{copy-command.css?inline.cjs → copy-command.css.cjs} +1 -1
  121. package/dist/content/copy-command/copy-command.css.cjs.map +1 -0
  122. package/dist/content/copy-command/{copy-command.css?inline.js → copy-command.css.js} +1 -1
  123. package/dist/content/copy-command/copy-command.css.js.map +1 -0
  124. package/dist/content/icon/{icon.css?inline.cjs → icon.css.cjs} +1 -1
  125. package/dist/content/icon/icon.css.cjs.map +1 -0
  126. package/dist/content/icon/{icon.css?inline.js → icon.css.js} +1 -1
  127. package/dist/content/icon/icon.css.js.map +1 -0
  128. package/dist/content/index.d.ts +2 -0
  129. package/dist/content/index.d.ts.map +1 -1
  130. package/dist/content/pagination/{pagination.css?inline.cjs → pagination.css.cjs} +1 -1
  131. package/dist/content/pagination/pagination.css.cjs.map +1 -0
  132. package/dist/content/pagination/{pagination.css?inline.js → pagination.css.js} +1 -1
  133. package/dist/content/pagination/pagination.css.js.map +1 -0
  134. package/dist/content/separator/{separator.css?inline.cjs → separator.css.cjs} +1 -1
  135. package/dist/content/separator/separator.css.cjs.map +1 -0
  136. package/dist/content/separator/{separator.css?inline.js → separator.css.js} +1 -1
  137. package/dist/content/separator/separator.css.js.map +1 -0
  138. package/dist/content/table/{table.css?inline.cjs → table.css.cjs} +1 -1
  139. package/dist/content/table/table.css.cjs.map +1 -0
  140. package/dist/content/table/{table.css?inline.js → table.css.js} +1 -1
  141. package/dist/content/table/table.css.js.map +1 -0
  142. package/dist/content/text/{text.css?inline.cjs → text.css.cjs} +1 -1
  143. package/dist/content/text/text.css.cjs.map +1 -0
  144. package/dist/content/text/{text.css?inline.js → text.css.js} +1 -1
  145. package/dist/content/text/text.css.js.map +1 -0
  146. package/dist/copy-command.cjs +5 -5
  147. package/dist/copy-command.cjs.map +1 -1
  148. package/dist/copy-command.js +25 -25
  149. package/dist/copy-command.js.map +1 -1
  150. package/dist/custom-elements.json +4716 -3980
  151. package/dist/datagrid.cjs +109 -109
  152. package/dist/datagrid.cjs.map +1 -1
  153. package/dist/datagrid.js +194 -194
  154. package/dist/datagrid.js.map +1 -1
  155. package/dist/date-picker.cjs +40 -40
  156. package/dist/date-picker.cjs.map +1 -1
  157. package/dist/date-picker.js +116 -114
  158. package/dist/date-picker.js.map +1 -1
  159. package/dist/dialog.cjs +5 -5
  160. package/dist/dialog.cjs.map +1 -1
  161. package/dist/dialog.js +28 -28
  162. package/dist/dialog.js.map +1 -1
  163. package/dist/disclosure/accordion/{accordion.css?inline.cjs → accordion.css.cjs} +1 -1
  164. package/dist/disclosure/accordion/accordion.css.cjs.map +1 -0
  165. package/dist/disclosure/accordion/{accordion.css?inline.js → accordion.css.js} +1 -1
  166. package/dist/disclosure/accordion/accordion.css.js.map +1 -0
  167. package/dist/disclosure/accordion-item/{accordion-item.css?inline.cjs → accordion-item.css.cjs} +1 -1
  168. package/dist/disclosure/accordion-item/accordion-item.css.cjs.map +1 -0
  169. package/dist/disclosure/accordion-item/{accordion-item.css?inline.js → accordion-item.css.js} +1 -1
  170. package/dist/disclosure/accordion-item/accordion-item.css.js.map +1 -0
  171. package/dist/disclosure/tab-item/{tab-item.css?inline.cjs → tab-item.css.cjs} +1 -1
  172. package/dist/disclosure/tab-item/tab-item.css.cjs.map +1 -0
  173. package/dist/disclosure/tab-item/{tab-item.css?inline.js → tab-item.css.js} +1 -1
  174. package/dist/disclosure/tab-item/tab-item.css.js.map +1 -0
  175. package/dist/disclosure/tab-panel/{tab-panel.css?inline.cjs → tab-panel.css.cjs} +1 -1
  176. package/dist/disclosure/tab-panel/tab-panel.css.cjs.map +1 -0
  177. package/dist/disclosure/tab-panel/{tab-panel.css?inline.js → tab-panel.css.js} +1 -1
  178. package/dist/disclosure/tab-panel/tab-panel.css.js.map +1 -0
  179. package/dist/disclosure/tabs/{tabs.css?inline.cjs → tabs.css.cjs} +1 -1
  180. package/dist/disclosure/tabs/tabs.css.cjs.map +1 -0
  181. package/dist/disclosure/tabs/{tabs.css?inline.js → tabs.css.js} +1 -1
  182. package/dist/disclosure/tabs/tabs.css.js.map +1 -0
  183. package/dist/drawer.cjs +9 -9
  184. package/dist/drawer.cjs.map +1 -1
  185. package/dist/drawer.js +80 -80
  186. package/dist/drawer.js.map +1 -1
  187. package/dist/feedback/alert/{alert.css?inline.cjs → alert.css.cjs} +1 -1
  188. package/dist/feedback/alert/alert.css.cjs.map +1 -0
  189. package/dist/feedback/alert/{alert.css?inline.js → alert.css.js} +1 -1
  190. package/dist/feedback/alert/alert.css.js.map +1 -0
  191. package/dist/feedback/async/{async.css?inline.cjs → async.css.cjs} +1 -1
  192. package/dist/feedback/async/async.css.cjs.map +1 -0
  193. package/dist/feedback/async/{async.css?inline.js → async.css.js} +1 -1
  194. package/dist/feedback/async/async.css.js.map +1 -0
  195. package/dist/feedback/badge/{badge.css?inline.cjs → badge.css.cjs} +1 -1
  196. package/dist/feedback/badge/badge.css.cjs.map +1 -0
  197. package/dist/feedback/badge/{badge.css?inline.js → badge.css.js} +1 -1
  198. package/dist/feedback/badge/badge.css.js.map +1 -0
  199. package/dist/feedback/chip/{chip.css?inline.cjs → chip.css.cjs} +1 -1
  200. package/dist/feedback/chip/chip.css.cjs.map +1 -0
  201. package/dist/feedback/chip/{chip.css?inline.js → chip.css.js} +1 -1
  202. package/dist/feedback/chip/chip.css.js.map +1 -0
  203. package/dist/feedback/index.d.ts +2 -0
  204. package/dist/feedback/index.d.ts.map +1 -1
  205. package/dist/feedback/password-strength/{password-strength.css?inline.cjs → password-strength.css.cjs} +1 -1
  206. package/dist/feedback/password-strength/password-strength.css.cjs.map +1 -0
  207. package/dist/feedback/password-strength/{password-strength.css?inline.js → password-strength.css.js} +1 -1
  208. package/dist/feedback/password-strength/password-strength.css.js.map +1 -0
  209. package/dist/feedback/progress/{progress.css?inline.cjs → progress.css.cjs} +1 -1
  210. package/dist/feedback/progress/progress.css.cjs.map +1 -0
  211. package/dist/feedback/progress/{progress.css?inline.js → progress.css.js} +1 -1
  212. package/dist/feedback/progress/progress.css.js.map +1 -0
  213. package/dist/feedback/skeleton/{skeleton.css?inline.cjs → skeleton.css.cjs} +1 -1
  214. package/dist/feedback/skeleton/skeleton.css.cjs.map +1 -0
  215. package/dist/feedback/skeleton/{skeleton.css?inline.js → skeleton.css.js} +1 -1
  216. package/dist/feedback/skeleton/skeleton.css.js.map +1 -0
  217. package/dist/feedback/toast/{toast.css?inline.cjs → toast.css.cjs} +1 -1
  218. package/dist/feedback/toast/toast.css.cjs.map +1 -0
  219. package/dist/feedback/toast/{toast.css?inline.js → toast.css.js} +1 -1
  220. package/dist/feedback/toast/toast.css.js.map +1 -0
  221. package/dist/feedback/toast/toast.d.ts.map +1 -1
  222. package/dist/feedback/typing-indicator/typing-indicator.css.cjs +2 -0
  223. package/dist/feedback/typing-indicator/typing-indicator.css.cjs.map +1 -0
  224. package/dist/feedback/typing-indicator/typing-indicator.css.js +6 -0
  225. package/dist/feedback/typing-indicator/typing-indicator.css.js.map +1 -0
  226. package/dist/feedback/typing-indicator/typing-indicator.d.ts +42 -0
  227. package/dist/feedback/typing-indicator/typing-indicator.d.ts.map +1 -0
  228. package/dist/file-input.cjs +56 -34
  229. package/dist/file-input.cjs.map +1 -1
  230. package/dist/file-input.js +143 -104
  231. package/dist/file-input.js.map +1 -1
  232. package/dist/form.cjs +3 -3
  233. package/dist/form.cjs.map +1 -1
  234. package/dist/form.js +28 -25
  235. package/dist/form.js.map +1 -1
  236. package/dist/grid-item.cjs +1 -1
  237. package/dist/grid-item.cjs.map +1 -1
  238. package/dist/grid-item.js +19 -19
  239. package/dist/grid-item.js.map +1 -1
  240. package/dist/grid.cjs +1 -1
  241. package/dist/grid.cjs.map +1 -1
  242. package/dist/grid.js +48 -48
  243. package/dist/grid.js.map +1 -1
  244. package/dist/icon.cjs +1 -1
  245. package/dist/icon.cjs.map +1 -1
  246. package/dist/icon.js +26 -26
  247. package/dist/icon.js.map +1 -1
  248. package/dist/index.cjs +1 -1
  249. package/dist/index.js +52 -49
  250. package/dist/input.cjs +25 -25
  251. package/dist/input.cjs.map +1 -1
  252. package/dist/input.js +75 -73
  253. package/dist/input.js.map +1 -1
  254. package/dist/inputs/button/{button.css?inline.cjs → button.css.cjs} +1 -1
  255. package/dist/inputs/button/button.css.cjs.map +1 -0
  256. package/dist/inputs/button/{button.css?inline.js → button.css.js} +1 -1
  257. package/dist/inputs/button/button.css.js.map +1 -0
  258. package/dist/inputs/button/button.d.ts.map +1 -1
  259. package/dist/inputs/button-group/{button-group.css?inline.cjs → button-group.css.cjs} +1 -1
  260. package/dist/inputs/button-group/button-group.css.cjs.map +1 -0
  261. package/dist/inputs/button-group/{button-group.css?inline.js → button-group.css.js} +1 -1
  262. package/dist/inputs/button-group/button-group.css.js.map +1 -0
  263. package/dist/inputs/calendar/{calendar.css?inline.cjs → calendar.css.cjs} +1 -1
  264. package/dist/inputs/calendar/calendar.css.cjs.map +1 -0
  265. package/dist/inputs/calendar/{calendar.css?inline.js → calendar.css.js} +1 -1
  266. package/dist/inputs/calendar/calendar.css.js.map +1 -0
  267. package/dist/inputs/calendar/calendar.d.ts.map +1 -1
  268. package/dist/inputs/checkbox/{checkbox.css?inline.cjs → checkbox.css.cjs} +1 -1
  269. package/dist/inputs/checkbox/checkbox.css.cjs.map +1 -0
  270. package/dist/inputs/checkbox/{checkbox.css?inline.js → checkbox.css.js} +1 -1
  271. package/dist/inputs/checkbox/checkbox.css.js.map +1 -0
  272. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
  273. package/dist/inputs/checkbox-group/{checkbox-group.css?inline.cjs → checkbox-group.css.cjs} +1 -1
  274. package/dist/inputs/checkbox-group/checkbox-group.css.cjs.map +1 -0
  275. package/dist/inputs/checkbox-group/{checkbox-group.css?inline.js → checkbox-group.css.js} +1 -1
  276. package/dist/inputs/checkbox-group/checkbox-group.css.js.map +1 -0
  277. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
  278. package/dist/inputs/combobox/{combobox.css?inline.cjs → combobox.css.cjs} +1 -1
  279. package/dist/inputs/combobox/combobox.css.cjs.map +1 -0
  280. package/dist/inputs/combobox/{combobox.css?inline.js → combobox.css.js} +1 -1
  281. package/dist/inputs/combobox/combobox.css.js.map +1 -0
  282. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  283. package/dist/inputs/datagrid/{datagrid.css?inline.cjs → datagrid.css.cjs} +1 -1
  284. package/dist/inputs/datagrid/datagrid.css.cjs.map +1 -0
  285. package/dist/inputs/datagrid/{datagrid.css?inline.js → datagrid.css.js} +1 -1
  286. package/dist/inputs/datagrid/datagrid.css.js.map +1 -0
  287. package/dist/inputs/date-picker/{date-picker.css?inline.cjs → date-picker.css.cjs} +1 -1
  288. package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -0
  289. package/dist/inputs/date-picker/{date-picker.css?inline.js → date-picker.css.js} +1 -1
  290. package/dist/inputs/date-picker/date-picker.css.js.map +1 -0
  291. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
  292. package/dist/inputs/file-input/{file-input.css?inline.cjs → file-input.css.cjs} +2 -2
  293. package/dist/inputs/file-input/file-input.css.cjs.map +1 -0
  294. package/dist/inputs/file-input/{file-input.css?inline.js → file-input.css.js} +2 -2
  295. package/dist/inputs/file-input/file-input.css.js.map +1 -0
  296. package/dist/inputs/file-input/file-input.d.ts +9 -0
  297. package/dist/inputs/file-input/file-input.d.ts.map +1 -1
  298. package/dist/inputs/form/{form.css?inline.cjs → form.css.cjs} +1 -1
  299. package/dist/inputs/form/form.css.cjs.map +1 -0
  300. package/dist/inputs/form/{form.css?inline.js → form.css.js} +1 -1
  301. package/dist/inputs/form/form.css.js.map +1 -0
  302. package/dist/inputs/input/{input.css?inline.cjs → input.css.cjs} +1 -1
  303. package/dist/inputs/input/input.css.cjs.map +1 -0
  304. package/dist/inputs/input/{input.css?inline.js → input.css.js} +1 -1
  305. package/dist/inputs/input/input.css.js.map +1 -0
  306. package/dist/inputs/input/input.d.ts.map +1 -1
  307. package/dist/inputs/number-input/{number-input.css?inline.cjs → number-input.css.cjs} +1 -1
  308. package/dist/inputs/number-input/number-input.css.cjs.map +1 -0
  309. package/dist/inputs/number-input/{number-input.css?inline.js → number-input.css.js} +1 -1
  310. package/dist/inputs/number-input/number-input.css.js.map +1 -0
  311. package/dist/inputs/otp-input/{otp-input.css?inline.cjs → otp-input.css.cjs} +1 -1
  312. package/dist/inputs/otp-input/otp-input.css.cjs.map +1 -0
  313. package/dist/inputs/otp-input/{otp-input.css?inline.js → otp-input.css.js} +1 -1
  314. package/dist/inputs/otp-input/otp-input.css.js.map +1 -0
  315. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
  316. package/dist/inputs/radio/{radio.css?inline.cjs → radio.css.cjs} +1 -1
  317. package/dist/inputs/radio/radio.css.cjs.map +1 -0
  318. package/dist/inputs/radio/{radio.css?inline.js → radio.css.js} +1 -1
  319. package/dist/inputs/radio/radio.css.js.map +1 -0
  320. package/dist/inputs/radio/radio.d.ts.map +1 -1
  321. package/dist/inputs/radio-group/{radio-group.css?inline.cjs → radio-group.css.cjs} +1 -1
  322. package/dist/inputs/radio-group/radio-group.css.cjs.map +1 -0
  323. package/dist/inputs/radio-group/{radio-group.css?inline.js → radio-group.css.js} +1 -1
  324. package/dist/inputs/radio-group/radio-group.css.js.map +1 -0
  325. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
  326. package/dist/inputs/rating/{rating.css?inline.cjs → rating.css.cjs} +1 -1
  327. package/dist/inputs/rating/rating.css.cjs.map +1 -0
  328. package/dist/inputs/rating/{rating.css?inline.js → rating.css.js} +1 -1
  329. package/dist/inputs/rating/rating.css.js.map +1 -0
  330. package/dist/inputs/rating/rating.d.ts.map +1 -1
  331. package/dist/inputs/select/{select.css?inline.cjs → select.css.cjs} +1 -1
  332. package/dist/inputs/select/select.css.cjs.map +1 -0
  333. package/dist/inputs/select/{select.css?inline.js → select.css.js} +1 -1
  334. package/dist/inputs/select/select.css.js.map +1 -0
  335. package/dist/inputs/select/select.d.ts.map +1 -1
  336. package/dist/inputs/shared/field-binding.cjs +1 -1
  337. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  338. package/dist/inputs/shared/field-binding.d.ts +1 -2
  339. package/dist/inputs/shared/field-binding.d.ts.map +1 -1
  340. package/dist/inputs/shared/field-binding.js +3 -2
  341. package/dist/inputs/shared/field-binding.js.map +1 -1
  342. package/dist/inputs/shared/form-context.cjs +1 -1
  343. package/dist/inputs/shared/form-context.cjs.map +1 -1
  344. package/dist/inputs/shared/form-context.d.ts +4 -4
  345. package/dist/inputs/shared/form-context.d.ts.map +1 -1
  346. package/dist/inputs/shared/form-context.js +10 -10
  347. package/dist/inputs/shared/form-context.js.map +1 -1
  348. package/dist/inputs/slider/{slider.css?inline.cjs → slider.css.cjs} +1 -1
  349. package/dist/inputs/slider/slider.css.cjs.map +1 -0
  350. package/dist/inputs/slider/{slider.css?inline.js → slider.css.js} +1 -1
  351. package/dist/inputs/slider/slider.css.js.map +1 -0
  352. package/dist/inputs/slider/slider.d.ts.map +1 -1
  353. package/dist/inputs/switch/{switch.css?inline.cjs → switch.css.cjs} +1 -1
  354. package/dist/inputs/switch/switch.css.cjs.map +1 -0
  355. package/dist/inputs/switch/{switch.css?inline.js → switch.css.js} +1 -1
  356. package/dist/inputs/switch/switch.css.js.map +1 -0
  357. package/dist/inputs/switch/switch.d.ts.map +1 -1
  358. package/dist/inputs/textarea/{textarea.css?inline.cjs → textarea.css.cjs} +1 -1
  359. package/dist/inputs/textarea/textarea.css.cjs.map +1 -0
  360. package/dist/inputs/textarea/{textarea.css?inline.js → textarea.css.js} +1 -1
  361. package/dist/inputs/textarea/textarea.css.js.map +1 -0
  362. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  363. package/dist/inputs/time-picker/{time-picker.css?inline.cjs → time-picker.css.cjs} +1 -1
  364. package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -0
  365. package/dist/inputs/time-picker/{time-picker.css?inline.js → time-picker.css.js} +1 -1
  366. package/dist/inputs/time-picker/time-picker.css.js.map +1 -0
  367. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
  368. package/dist/keymap/dist/_dev.cjs +2 -0
  369. package/dist/keymap/dist/_dev.cjs.map +1 -0
  370. package/dist/keymap/dist/_dev.js +4 -0
  371. package/dist/keymap/dist/_dev.js.map +1 -0
  372. package/dist/keymap/dist/format.cjs +1 -0
  373. package/dist/keymap/dist/format.js +1 -0
  374. package/dist/keymap/dist/index.cjs +1 -0
  375. package/dist/keymap/dist/index.js +4 -0
  376. package/dist/keymap/dist/keymap.cjs +2 -0
  377. package/dist/keymap/dist/keymap.cjs.map +1 -0
  378. package/dist/keymap/dist/keymap.js +221 -0
  379. package/dist/keymap/dist/keymap.js.map +1 -0
  380. package/dist/keymap/dist/layer.cjs +1 -0
  381. package/dist/keymap/dist/layer.js +1 -0
  382. package/dist/layout/box/{box.css?inline.cjs → box.css.cjs} +1 -1
  383. package/dist/layout/box/box.css.cjs.map +1 -0
  384. package/dist/layout/box/{box.css?inline.js → box.css.js} +1 -1
  385. package/dist/layout/box/box.css.js.map +1 -0
  386. package/dist/layout/grid/{grid.css?inline.cjs → grid.css.cjs} +1 -1
  387. package/dist/layout/grid/grid.css.cjs.map +1 -0
  388. package/dist/layout/grid/{grid.css?inline.js → grid.css.js} +1 -1
  389. package/dist/layout/grid/grid.css.js.map +1 -0
  390. package/dist/layout/grid-item/{grid-item.css?inline.cjs → grid-item.css.cjs} +1 -1
  391. package/dist/layout/grid-item/grid-item.css.cjs.map +1 -0
  392. package/dist/layout/grid-item/{grid-item.css?inline.js → grid-item.css.js} +1 -1
  393. package/dist/layout/grid-item/grid-item.css.js.map +1 -0
  394. package/dist/layout/navbar/{navbar.css?inline.cjs → navbar.css.cjs} +1 -1
  395. package/dist/layout/navbar/navbar.css.cjs.map +1 -0
  396. package/dist/layout/navbar/{navbar.css?inline.js → navbar.css.js} +1 -1
  397. package/dist/layout/navbar/navbar.css.js.map +1 -0
  398. package/dist/layout/navbar/navbar.d.ts.map +1 -1
  399. package/dist/layout/sidebar/{sidebar-group.css?inline.cjs → sidebar-group.css.cjs} +1 -1
  400. package/dist/layout/sidebar/sidebar-group.css.cjs.map +1 -0
  401. package/dist/layout/sidebar/{sidebar-group.css?inline.js → sidebar-group.css.js} +1 -1
  402. package/dist/layout/sidebar/sidebar-group.css.js.map +1 -0
  403. package/dist/layout/sidebar/{sidebar-item.css?inline.cjs → sidebar-item.css.cjs} +1 -1
  404. package/dist/layout/sidebar/sidebar-item.css.cjs.map +1 -0
  405. package/dist/layout/sidebar/{sidebar-item.css?inline.js → sidebar-item.css.js} +1 -1
  406. package/dist/layout/sidebar/sidebar-item.css.js.map +1 -0
  407. package/dist/layout/sidebar/{sidebar.css?inline.cjs → sidebar.css.cjs} +1 -1
  408. package/dist/layout/sidebar/sidebar.css.cjs.map +1 -0
  409. package/dist/layout/sidebar/{sidebar.css?inline.js → sidebar.css.js} +1 -1
  410. package/dist/layout/sidebar/sidebar.css.js.map +1 -0
  411. package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
  412. package/dist/menu.cjs +5 -5
  413. package/dist/menu.cjs.map +1 -1
  414. package/dist/menu.js +85 -85
  415. package/dist/menu.js.map +1 -1
  416. package/dist/navbar.cjs +15 -15
  417. package/dist/navbar.cjs.map +1 -1
  418. package/dist/navbar.js +127 -127
  419. package/dist/navbar.js.map +1 -1
  420. package/dist/number-input.cjs +11 -11
  421. package/dist/number-input.cjs.map +1 -1
  422. package/dist/number-input.js +69 -69
  423. package/dist/number-input.js.map +1 -1
  424. package/dist/ore/dist/_dev.cjs.map +1 -1
  425. package/dist/ore/dist/_dev.js.map +1 -1
  426. package/dist/ore/dist/base-element.cjs +1 -1
  427. package/dist/ore/dist/base-element.cjs.map +1 -1
  428. package/dist/ore/dist/base-element.js +37 -35
  429. package/dist/ore/dist/base-element.js.map +1 -1
  430. package/dist/ore/dist/context.cjs +1 -1
  431. package/dist/ore/dist/context.cjs.map +1 -1
  432. package/dist/ore/dist/context.js +6 -33
  433. package/dist/ore/dist/context.js.map +1 -1
  434. package/dist/ore/dist/define.cjs.map +1 -1
  435. package/dist/ore/dist/define.js.map +1 -1
  436. package/dist/ore/dist/directives/raw.cjs +1 -1
  437. package/dist/ore/dist/directives/raw.cjs.map +1 -1
  438. package/dist/ore/dist/directives/raw.js +20 -17
  439. package/dist/ore/dist/directives/raw.js.map +1 -1
  440. package/dist/ore/dist/directives/when.cjs +1 -1
  441. package/dist/ore/dist/directives/when.cjs.map +1 -1
  442. package/dist/ore/dist/directives/when.js +29 -24
  443. package/dist/ore/dist/directives/when.js.map +1 -1
  444. package/dist/ore/dist/errors.cjs +2 -2
  445. package/dist/ore/dist/errors.cjs.map +1 -1
  446. package/dist/ore/dist/errors.js +12 -3
  447. package/dist/ore/dist/errors.js.map +1 -1
  448. package/dist/ore/dist/forms/context.cjs +2 -0
  449. package/dist/ore/dist/forms/context.cjs.map +1 -0
  450. package/dist/ore/dist/forms/context.js +6 -0
  451. package/dist/ore/dist/forms/context.js.map +1 -0
  452. package/dist/ore/dist/forms/field.cjs +2 -0
  453. package/dist/ore/dist/forms/field.cjs.map +1 -0
  454. package/dist/ore/dist/forms/field.js +35 -0
  455. package/dist/ore/dist/forms/field.js.map +1 -0
  456. package/dist/ore/dist/forms.cjs +1 -0
  457. package/dist/ore/dist/forms.js +3 -0
  458. package/dist/ore/dist/props.cjs +1 -1
  459. package/dist/ore/dist/props.cjs.map +1 -1
  460. package/dist/ore/dist/props.js +29 -27
  461. package/dist/ore/dist/props.js.map +1 -1
  462. package/dist/ore/dist/runtime.cjs +1 -1
  463. package/dist/ore/dist/runtime.cjs.map +1 -1
  464. package/dist/ore/dist/runtime.js +13 -23
  465. package/dist/ore/dist/runtime.js.map +1 -1
  466. package/dist/ore/dist/testing/render-hook.cjs +1 -1
  467. package/dist/ore/dist/testing/render-hook.js +0 -1
  468. package/dist/ore/dist/utils/dom.cjs +1 -1
  469. package/dist/ore/dist/utils/dom.cjs.map +1 -1
  470. package/dist/ore/dist/utils/dom.js +2 -6
  471. package/dist/ore/dist/utils/dom.js.map +1 -1
  472. package/dist/otp-input.cjs +9 -9
  473. package/dist/otp-input.cjs.map +1 -1
  474. package/dist/otp-input.js +70 -68
  475. package/dist/otp-input.js.map +1 -1
  476. package/dist/overlay/command-palette/command-palette-items.cjs +2 -0
  477. package/dist/overlay/command-palette/command-palette-items.cjs.map +1 -0
  478. package/dist/overlay/command-palette/command-palette-items.d.ts +22 -0
  479. package/dist/overlay/command-palette/command-palette-items.d.ts.map +1 -0
  480. package/dist/overlay/command-palette/command-palette-items.js +55 -0
  481. package/dist/overlay/command-palette/command-palette-items.js.map +1 -0
  482. package/dist/overlay/command-palette/command-palette.css.cjs +2 -0
  483. package/dist/overlay/command-palette/command-palette.css.cjs.map +1 -0
  484. package/dist/overlay/command-palette/command-palette.css.js +6 -0
  485. package/dist/overlay/command-palette/command-palette.css.js.map +1 -0
  486. package/dist/overlay/command-palette/command-palette.d.ts +72 -0
  487. package/dist/overlay/command-palette/command-palette.d.ts.map +1 -0
  488. package/dist/overlay/command-palette/command-palette.types.d.ts +76 -0
  489. package/dist/overlay/command-palette/command-palette.types.d.ts.map +1 -0
  490. package/dist/overlay/dialog/{dialog.css?inline.cjs → dialog.css.cjs} +1 -1
  491. package/dist/overlay/dialog/dialog.css.cjs.map +1 -0
  492. package/dist/overlay/dialog/{dialog.css?inline.js → dialog.css.js} +1 -1
  493. package/dist/overlay/dialog/dialog.css.js.map +1 -0
  494. package/dist/overlay/drawer/{drawer.css?inline.cjs → drawer.css.cjs} +1 -1
  495. package/dist/overlay/drawer/drawer.css.cjs.map +1 -0
  496. package/dist/overlay/drawer/{drawer.css?inline.js → drawer.css.js} +1 -1
  497. package/dist/overlay/drawer/drawer.css.js.map +1 -0
  498. package/dist/overlay/drawer/drawer.d.ts.map +1 -1
  499. package/dist/overlay/index.d.ts +2 -0
  500. package/dist/overlay/index.d.ts.map +1 -1
  501. package/dist/overlay/menu/{menu-item.css?inline.cjs → menu-item.css.cjs} +1 -1
  502. package/dist/overlay/menu/menu-item.css.cjs.map +1 -0
  503. package/dist/overlay/menu/{menu-item.css?inline.js → menu-item.css.js} +1 -1
  504. package/dist/overlay/menu/menu-item.css.js.map +1 -0
  505. package/dist/overlay/menu/{menu-separator.css?inline.cjs → menu-separator.css.cjs} +1 -1
  506. package/dist/overlay/menu/menu-separator.css.cjs.map +1 -0
  507. package/dist/overlay/menu/{menu-separator.css?inline.js → menu-separator.css.js} +1 -1
  508. package/dist/overlay/menu/menu-separator.css.js.map +1 -0
  509. package/dist/overlay/menu/{menu.css?inline.cjs → menu.css.cjs} +1 -1
  510. package/dist/overlay/menu/menu.css.cjs.map +1 -0
  511. package/dist/overlay/menu/{menu.css?inline.js → menu.css.js} +1 -1
  512. package/dist/overlay/menu/menu.css.js.map +1 -0
  513. package/dist/overlay/menu/menu.d.ts.map +1 -1
  514. package/dist/overlay/popover/{popover.css?inline.cjs → popover.css.cjs} +1 -1
  515. package/dist/overlay/popover/popover.css.cjs.map +1 -0
  516. package/dist/overlay/popover/{popover.css?inline.js → popover.css.js} +1 -1
  517. package/dist/overlay/popover/popover.css.js.map +1 -0
  518. package/dist/overlay/popover/popover.d.ts.map +1 -1
  519. package/dist/overlay/tooltip/{tooltip.css?inline.cjs → tooltip.css.cjs} +1 -1
  520. package/dist/overlay/tooltip/tooltip.css.cjs.map +1 -0
  521. package/dist/overlay/tooltip/{tooltip.css?inline.js → tooltip.css.js} +1 -1
  522. package/dist/overlay/tooltip/tooltip.css.js.map +1 -0
  523. package/dist/pagination.cjs +12 -12
  524. package/dist/pagination.cjs.map +1 -1
  525. package/dist/pagination.js +39 -38
  526. package/dist/pagination.js.map +1 -1
  527. package/dist/password-strength.cjs +8 -8
  528. package/dist/password-strength.cjs.map +1 -1
  529. package/dist/password-strength.js +34 -34
  530. package/dist/password-strength.js.map +1 -1
  531. package/dist/popover.cjs +4 -4
  532. package/dist/popover.cjs.map +1 -1
  533. package/dist/popover.js +30 -30
  534. package/dist/popover.js.map +1 -1
  535. package/dist/progress.cjs +1 -1
  536. package/dist/progress.cjs.map +1 -1
  537. package/dist/progress.js +30 -30
  538. package/dist/progress.js.map +1 -1
  539. package/dist/radio-group.cjs +11 -11
  540. package/dist/radio-group.cjs.map +1 -1
  541. package/dist/radio-group.js +67 -63
  542. package/dist/radio-group.js.map +1 -1
  543. package/dist/radio.cjs +4 -4
  544. package/dist/radio.cjs.map +1 -1
  545. package/dist/radio.js +69 -67
  546. package/dist/radio.js.map +1 -1
  547. package/dist/rating.cjs +4 -4
  548. package/dist/rating.cjs.map +1 -1
  549. package/dist/rating.js +57 -55
  550. package/dist/rating.js.map +1 -1
  551. package/dist/refine.cjs +753 -620
  552. package/dist/refine.cjs.map +1 -1
  553. package/dist/refine.iife.js +742 -609
  554. package/dist/refine.iife.js.map +1 -1
  555. package/dist/refine.js +777 -644
  556. package/dist/refine.js.map +1 -1
  557. package/dist/select.cjs +37 -37
  558. package/dist/select.cjs.map +1 -1
  559. package/dist/select.js +130 -128
  560. package/dist/select.js.map +1 -1
  561. package/dist/separator.cjs +1 -1
  562. package/dist/separator.cjs.map +1 -1
  563. package/dist/separator.js +1 -1
  564. package/dist/sidebar.cjs +22 -22
  565. package/dist/sidebar.cjs.map +1 -1
  566. package/dist/sidebar.js +135 -135
  567. package/dist/sidebar.js.map +1 -1
  568. package/dist/skeleton.cjs +2 -2
  569. package/dist/skeleton.cjs.map +1 -1
  570. package/dist/skeleton.js +28 -28
  571. package/dist/skeleton.js.map +1 -1
  572. package/dist/slider.cjs +13 -13
  573. package/dist/slider.cjs.map +1 -1
  574. package/dist/slider.js +142 -140
  575. package/dist/slider.js.map +1 -1
  576. package/dist/switch.cjs +4 -4
  577. package/dist/switch.cjs.map +1 -1
  578. package/dist/switch.js +35 -33
  579. package/dist/switch.js.map +1 -1
  580. package/dist/tab-item.cjs +5 -5
  581. package/dist/tab-item.cjs.map +1 -1
  582. package/dist/tab-item.js +25 -25
  583. package/dist/tab-item.js.map +1 -1
  584. package/dist/tab-panel.cjs +6 -6
  585. package/dist/tab-panel.cjs.map +1 -1
  586. package/dist/tab-panel.js +24 -24
  587. package/dist/tab-panel.js.map +1 -1
  588. package/dist/table.cjs +1 -1
  589. package/dist/table.cjs.map +1 -1
  590. package/dist/table.js +36 -35
  591. package/dist/table.js.map +1 -1
  592. package/dist/tabs.cjs +3 -3
  593. package/dist/tabs.cjs.map +1 -1
  594. package/dist/tabs.js +61 -61
  595. package/dist/tabs.js.map +1 -1
  596. package/dist/text.cjs +1 -1
  597. package/dist/text.cjs.map +1 -1
  598. package/dist/text.js +16 -16
  599. package/dist/text.js.map +1 -1
  600. package/dist/textarea.cjs +15 -15
  601. package/dist/textarea.cjs.map +1 -1
  602. package/dist/textarea.js +67 -65
  603. package/dist/textarea.js.map +1 -1
  604. package/dist/time-picker.cjs +31 -31
  605. package/dist/time-picker.cjs.map +1 -1
  606. package/dist/time-picker.js +115 -113
  607. package/dist/time-picker.js.map +1 -1
  608. package/dist/toast.cjs +14 -14
  609. package/dist/toast.cjs.map +1 -1
  610. package/dist/toast.js +85 -85
  611. package/dist/toast.js.map +1 -1
  612. package/dist/tooltip.cjs +5 -5
  613. package/dist/tooltip.cjs.map +1 -1
  614. package/dist/tooltip.js +55 -55
  615. package/dist/tooltip.js.map +1 -1
  616. package/dist/typing-indicator.cjs +8 -0
  617. package/dist/typing-indicator.cjs.map +1 -0
  618. package/dist/typing-indicator.js +49 -0
  619. package/dist/typing-indicator.js.map +1 -0
  620. package/package.json +21 -2
  621. package/dist/content/avatar/avatar-group.css?inline.cjs.map +0 -1
  622. package/dist/content/avatar/avatar-group.css?inline.js.map +0 -1
  623. package/dist/content/avatar/avatar.css?inline.cjs.map +0 -1
  624. package/dist/content/avatar/avatar.css?inline.js.map +0 -1
  625. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +0 -1
  626. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +0 -1
  627. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +0 -1
  628. package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +0 -1
  629. package/dist/content/card/card.css?inline.cjs.map +0 -1
  630. package/dist/content/card/card.css?inline.js.map +0 -1
  631. package/dist/content/carousel/carousel-slide.css?inline.cjs.map +0 -1
  632. package/dist/content/carousel/carousel-slide.css?inline.js.map +0 -1
  633. package/dist/content/carousel/carousel.css?inline.cjs.map +0 -1
  634. package/dist/content/carousel/carousel.css?inline.js.map +0 -1
  635. package/dist/content/code-window/code-window.css?inline.cjs.map +0 -1
  636. package/dist/content/code-window/code-window.css?inline.js.map +0 -1
  637. package/dist/content/copy-command/copy-command.css?inline.cjs.map +0 -1
  638. package/dist/content/copy-command/copy-command.css?inline.js.map +0 -1
  639. package/dist/content/icon/icon.css?inline.cjs.map +0 -1
  640. package/dist/content/icon/icon.css?inline.js.map +0 -1
  641. package/dist/content/pagination/pagination.css?inline.cjs.map +0 -1
  642. package/dist/content/pagination/pagination.css?inline.js.map +0 -1
  643. package/dist/content/separator/separator.css?inline.cjs.map +0 -1
  644. package/dist/content/separator/separator.css?inline.js.map +0 -1
  645. package/dist/content/table/table.css?inline.cjs.map +0 -1
  646. package/dist/content/table/table.css?inline.js.map +0 -1
  647. package/dist/content/text/text.css?inline.cjs.map +0 -1
  648. package/dist/content/text/text.css?inline.js.map +0 -1
  649. package/dist/disclosure/accordion/accordion.css?inline.cjs.map +0 -1
  650. package/dist/disclosure/accordion/accordion.css?inline.js.map +0 -1
  651. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +0 -1
  652. package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +0 -1
  653. package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +0 -1
  654. package/dist/disclosure/tab-item/tab-item.css?inline.js.map +0 -1
  655. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +0 -1
  656. package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +0 -1
  657. package/dist/disclosure/tabs/tabs.css?inline.cjs.map +0 -1
  658. package/dist/disclosure/tabs/tabs.css?inline.js.map +0 -1
  659. package/dist/feedback/alert/alert.css?inline.cjs.map +0 -1
  660. package/dist/feedback/alert/alert.css?inline.js.map +0 -1
  661. package/dist/feedback/async/async.css?inline.cjs.map +0 -1
  662. package/dist/feedback/async/async.css?inline.js.map +0 -1
  663. package/dist/feedback/badge/badge.css?inline.cjs.map +0 -1
  664. package/dist/feedback/badge/badge.css?inline.js.map +0 -1
  665. package/dist/feedback/chip/chip.css?inline.cjs.map +0 -1
  666. package/dist/feedback/chip/chip.css?inline.js.map +0 -1
  667. package/dist/feedback/password-strength/password-strength.css?inline.cjs.map +0 -1
  668. package/dist/feedback/password-strength/password-strength.css?inline.js.map +0 -1
  669. package/dist/feedback/progress/progress.css?inline.cjs.map +0 -1
  670. package/dist/feedback/progress/progress.css?inline.js.map +0 -1
  671. package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +0 -1
  672. package/dist/feedback/skeleton/skeleton.css?inline.js.map +0 -1
  673. package/dist/feedback/toast/toast.css?inline.cjs.map +0 -1
  674. package/dist/feedback/toast/toast.css?inline.js.map +0 -1
  675. package/dist/inputs/button/button.css?inline.cjs.map +0 -1
  676. package/dist/inputs/button/button.css?inline.js.map +0 -1
  677. package/dist/inputs/button-group/button-group.css?inline.cjs.map +0 -1
  678. package/dist/inputs/button-group/button-group.css?inline.js.map +0 -1
  679. package/dist/inputs/calendar/calendar.css?inline.cjs.map +0 -1
  680. package/dist/inputs/calendar/calendar.css?inline.js.map +0 -1
  681. package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +0 -1
  682. package/dist/inputs/checkbox/checkbox.css?inline.js.map +0 -1
  683. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +0 -1
  684. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +0 -1
  685. package/dist/inputs/combobox/combobox.css?inline.cjs.map +0 -1
  686. package/dist/inputs/combobox/combobox.css?inline.js.map +0 -1
  687. package/dist/inputs/datagrid/datagrid.css?inline.cjs.map +0 -1
  688. package/dist/inputs/datagrid/datagrid.css?inline.js.map +0 -1
  689. package/dist/inputs/date-picker/date-picker.css?inline.cjs.map +0 -1
  690. package/dist/inputs/date-picker/date-picker.css?inline.js.map +0 -1
  691. package/dist/inputs/file-input/file-input.css?inline.cjs.map +0 -1
  692. package/dist/inputs/file-input/file-input.css?inline.js.map +0 -1
  693. package/dist/inputs/form/form.css?inline.cjs.map +0 -1
  694. package/dist/inputs/form/form.css?inline.js.map +0 -1
  695. package/dist/inputs/input/input.css?inline.cjs.map +0 -1
  696. package/dist/inputs/input/input.css?inline.js.map +0 -1
  697. package/dist/inputs/number-input/number-input.css?inline.cjs.map +0 -1
  698. package/dist/inputs/number-input/number-input.css?inline.js.map +0 -1
  699. package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +0 -1
  700. package/dist/inputs/otp-input/otp-input.css?inline.js.map +0 -1
  701. package/dist/inputs/radio/radio.css?inline.cjs.map +0 -1
  702. package/dist/inputs/radio/radio.css?inline.js.map +0 -1
  703. package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +0 -1
  704. package/dist/inputs/radio-group/radio-group.css?inline.js.map +0 -1
  705. package/dist/inputs/rating/rating.css?inline.cjs.map +0 -1
  706. package/dist/inputs/rating/rating.css?inline.js.map +0 -1
  707. package/dist/inputs/select/select.css?inline.cjs.map +0 -1
  708. package/dist/inputs/select/select.css?inline.js.map +0 -1
  709. package/dist/inputs/slider/slider.css?inline.cjs.map +0 -1
  710. package/dist/inputs/slider/slider.css?inline.js.map +0 -1
  711. package/dist/inputs/switch/switch.css?inline.cjs.map +0 -1
  712. package/dist/inputs/switch/switch.css?inline.js.map +0 -1
  713. package/dist/inputs/textarea/textarea.css?inline.cjs.map +0 -1
  714. package/dist/inputs/textarea/textarea.css?inline.js.map +0 -1
  715. package/dist/inputs/time-picker/time-picker.css?inline.cjs.map +0 -1
  716. package/dist/inputs/time-picker/time-picker.css?inline.js.map +0 -1
  717. package/dist/layout/box/box.css?inline.cjs.map +0 -1
  718. package/dist/layout/box/box.css?inline.js.map +0 -1
  719. package/dist/layout/grid/grid.css?inline.cjs.map +0 -1
  720. package/dist/layout/grid/grid.css?inline.js.map +0 -1
  721. package/dist/layout/grid-item/grid-item.css?inline.cjs.map +0 -1
  722. package/dist/layout/grid-item/grid-item.css?inline.js.map +0 -1
  723. package/dist/layout/navbar/navbar.css?inline.cjs.map +0 -1
  724. package/dist/layout/navbar/navbar.css?inline.js.map +0 -1
  725. package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +0 -1
  726. package/dist/layout/sidebar/sidebar-group.css?inline.js.map +0 -1
  727. package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +0 -1
  728. package/dist/layout/sidebar/sidebar-item.css?inline.js.map +0 -1
  729. package/dist/layout/sidebar/sidebar.css?inline.cjs.map +0 -1
  730. package/dist/layout/sidebar/sidebar.css?inline.js.map +0 -1
  731. package/dist/ore/dist/aria.cjs +0 -2
  732. package/dist/ore/dist/aria.cjs.map +0 -1
  733. package/dist/ore/dist/aria.js +0 -37
  734. package/dist/ore/dist/aria.js.map +0 -1
  735. package/dist/ore/dist/context-bag.cjs +0 -2
  736. package/dist/ore/dist/context-bag.cjs.map +0 -1
  737. package/dist/ore/dist/context-bag.js +0 -28
  738. package/dist/ore/dist/context-bag.js.map +0 -1
  739. package/dist/ore/dist/host-bind.cjs +0 -2
  740. package/dist/ore/dist/host-bind.cjs.map +0 -1
  741. package/dist/ore/dist/host-bind.js +0 -60
  742. package/dist/ore/dist/host-bind.js.map +0 -1
  743. package/dist/ore/dist/slots.cjs +0 -2
  744. package/dist/ore/dist/slots.cjs.map +0 -1
  745. package/dist/ore/dist/slots.js +0 -61
  746. package/dist/ore/dist/slots.js.map +0 -1
  747. package/dist/ore/dist/utils/aria.cjs +0 -2
  748. package/dist/ore/dist/utils/aria.cjs.map +0 -1
  749. package/dist/ore/dist/utils/aria.js +0 -6
  750. package/dist/ore/dist/utils/aria.js.map +0 -1
  751. package/dist/ore/dist/utils/emit.cjs +0 -2
  752. package/dist/ore/dist/utils/emit.cjs.map +0 -1
  753. package/dist/ore/dist/utils/emit.js +0 -16
  754. package/dist/ore/dist/utils/emit.js.map +0 -1
  755. package/dist/overlay/dialog/dialog.css?inline.cjs.map +0 -1
  756. package/dist/overlay/dialog/dialog.css?inline.js.map +0 -1
  757. package/dist/overlay/drawer/drawer.css?inline.cjs.map +0 -1
  758. package/dist/overlay/drawer/drawer.css?inline.js.map +0 -1
  759. package/dist/overlay/menu/menu-item.css?inline.cjs.map +0 -1
  760. package/dist/overlay/menu/menu-item.css?inline.js.map +0 -1
  761. package/dist/overlay/menu/menu-separator.css?inline.cjs.map +0 -1
  762. package/dist/overlay/menu/menu-separator.css?inline.js.map +0 -1
  763. package/dist/overlay/menu/menu.css?inline.cjs.map +0 -1
  764. package/dist/overlay/menu/menu.css?inline.js.map +0 -1
  765. package/dist/overlay/popover/popover.css?inline.cjs.map +0 -1
  766. package/dist/overlay/popover/popover.css?inline.js.map +0 -1
  767. package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +0 -1
  768. package/dist/overlay/tooltip/tooltip.css?inline.js.map +0 -1
package/dist/alert.js CHANGED
@@ -3,37 +3,37 @@ import { roundedVariantMixin as n, sizeVariantMixin as r } from "./styles/mixins
3
3
  import { colorThemeMixin as i, forcedColorsMixin as a } from "./styles/mixins/theme.css.js";
4
4
  import { roundableBundle as o, sizableBundle as s, themableBundle as c } from "./shared/prop-bundles.js";
5
5
  import { awaitExit as l } from "./overlay/shared/await-exit.js";
6
- import u from "./feedback/alert/alert.css?inline.js";
7
- import { define as d, html as f, prop as p } from "@vielzeug/ore";
6
+ import u from "./feedback/alert/alert.css.js";
7
+ import { define as d, getHost as f, html as p, prop as m, useEmit as h, useSlots as g } from "@vielzeug/ore";
8
8
  //#region src/feedback/alert/alert.ts
9
- var m = "ore-alert";
10
- d(m, {
9
+ var _ = "ore-alert";
10
+ d(_, {
11
11
  props: {
12
12
  ...c,
13
13
  ...s,
14
14
  ...o,
15
- accented: p.bool(!1),
16
- dismissible: p.bool(!1),
17
- heading: p.string(),
18
- horizontal: p.bool(!1),
19
- variant: p.string()
15
+ accented: m.bool(!1),
16
+ dismissible: m.bool(!1),
17
+ heading: m.string(),
18
+ horizontal: m.bool(!1),
19
+ variant: m.string()
20
20
  },
21
- setup(e, { bind: t, el: n, emit: r, slots: i }) {
22
- let a = null, o = (e) => {
23
- a && (a.textContent = "", requestAnimationFrame(() => {
24
- a && (a.textContent = e);
21
+ setup(e) {
22
+ let t = f(), n = h(), r = g(), i = null, a = (e) => {
23
+ i && (i.textContent = "", requestAnimationFrame(() => {
24
+ i && (i.textContent = e);
25
25
  }));
26
26
  };
27
- return f`
27
+ return p`
28
28
  <span
29
29
  class="sr-announce"
30
30
  aria-live="polite"
31
31
  aria-atomic="true"
32
32
  ref="${(e) => {
33
- a = e;
33
+ i = e;
34
34
  }}"></span>
35
35
  <div class="alert" :role="${() => e.color.value === "error" ? "alert" : "status"}" part="alert">
36
- <span class="icon" part="icon" aria-hidden="true" ?hidden="${() => !i.has("icon").value}">
36
+ <span class="icon" part="icon" aria-hidden="true" ?hidden="${() => !r.has("icon").value}">
37
37
  <slot name="icon"></slot>
38
38
  </span>
39
39
  <div class="header" part="header" ?hidden="${() => !e.heading.value}">
@@ -47,7 +47,7 @@ d(m, {
47
47
  <slot></slot>
48
48
  </div>
49
49
  </div>
50
- <div class="actions" part="actions" ?hidden="${() => !i.has("actions").value}">
50
+ <div class="actions" part="actions" ?hidden="${() => !r.has("actions").value}">
51
51
  <slot name="actions"></slot>
52
52
  </div>
53
53
  <button
@@ -56,9 +56,9 @@ d(m, {
56
56
  type="button"
57
57
  aria-label="Dismiss alert"
58
58
  ?hidden="${() => !e.dismissible.value}"
59
- @click="${(t) => {
60
- e.dismissible.value && (n.setAttribute("dismissing", ""), l(n, () => {
61
- n.removeAttribute("dismissing"), n.setAttribute("dismissed", ""), o("Alert dismissed"), r("dismiss", { originalEvent: t });
59
+ @click="${(r) => {
60
+ e.dismissible.value && (t.setAttribute("dismissing", ""), l(t, () => {
61
+ t.removeAttribute("dismissing"), t.setAttribute("dismissed", ""), a("Alert dismissed"), n("dismiss", { originalEvent: r });
62
62
  }));
63
63
  }}">
64
64
  <ore-icon name="x" size="16" stroke-width="2.5" aria-hidden="true"></ore-icon>
@@ -88,6 +88,6 @@ d(m, {
88
88
  ]
89
89
  });
90
90
  //#endregion
91
- export { m as ALERT_TAG };
91
+ export { _ as ALERT_TAG };
92
92
 
93
93
  //# sourceMappingURL=alert.js.map
package/dist/alert.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","names":[],"sources":["../src/feedback/alert/alert.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../../content/icon/icon';\nimport { awaitExit } from '../../overlay/shared/await-exit';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport {\n coarsePointerMixin,\n colorThemeMixin,\n forcedColorsMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n sizeVariantMixin,\n} from '../../styles';\nimport componentStyles from './alert.css?inline';\n\nexport type OreAlertEvents = {\n dismiss: { originalEvent: MouseEvent };\n};\n\nexport type OreAlertProps = {\n /** Show a left accent border (for flat/bordered variants) */\n accented?: boolean;\n /** Theme color */\n color?: ThemeColor;\n /** Show a dismissible (×) button */\n dismissible?: boolean;\n /** Heading text shown above the content */\n heading?: string;\n /** Position action buttons to the right instead of below */\n horizontal?: boolean;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Alert size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: 'solid' | 'flat' | 'bordered';\n};\n\n/**\n * A status/feedback banner with optional heading, icon slot, and dismiss button.\n *\n * @element ore-alert\n *\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual style: 'flat' | 'solid' | 'bordered'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} heading - Bold heading text above the content\n * @attr {boolean} dismissible - Show a close (×) button\n * @attr {boolean} accented - Add a left accent border (flat/bordered only)\n * @attr {boolean} horizontal - Position action buttons to the right instead of below\n *\n * @fires dismiss - Fired when the alert is dismissed. detail: { originalEvent: MouseEvent }\n *\n * @slot - Default slot for the alert message content\n * @slot icon - Icon on the left side\n * @slot meta - Metadata displayed alongside the heading (lighter, right-aligned)\n * @slot actions - Action buttons shown below the message\n *\n * @cssprop --alert-bg - Background color\n * @cssprop --alert-color - Text/icon color\n * @cssprop --alert-border-color - Border color\n * @cssprop --alert-shadow - Box shadow\n * @cssprop --alert-radius - Border radius\n * @cssprop --alert-padding - Padding\n * @cssprop --alert-gap - Gap between icon, body, and close button\n * @cssprop --alert-font-size - Font size\n *\n * @part alert - Alert root container.\n * @part icon - Icon container.\n * @part header - Header container.\n * @part heading - Heading text element.\n * @part meta - Meta text container.\n * @part body - Body content container.\n * @part content - Content container.\n * @part actions - Actions slot container.\n * @part close - Close action control.\n * @example\n * ```html\n * <ore-alert color=\"success\">Your changes have been saved.</ore-alert>\n * <ore-alert color=\"error\" variant=\"solid\" dismissible heading=\"Something went wrong\">\n * Please try again later.\n * </ore-alert>\n * ```\n */\nexport const ALERT_TAG = 'ore-alert' as const;\ndefine<OreAlertProps, OreAlertEvents>(ALERT_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n accented: prop.bool(false),\n dismissible: prop.bool(false),\n heading: prop.string(),\n horizontal: prop.bool(false),\n variant: prop.string<'solid' | 'flat' | 'bordered'>(),\n },\n setup(props, { bind: _bind, el, emit, slots }) {\n let announceEl: HTMLElement | null = null;\n\n const announce = (message: string) => {\n if (!announceEl) return;\n\n announceEl.textContent = '';\n requestAnimationFrame(() => {\n if (announceEl) announceEl.textContent = message;\n });\n };\n\n const handleDismiss = (e: MouseEvent) => {\n if (!props.dismissible.value) return;\n\n el.setAttribute('dismissing', '');\n awaitExit(el, () => {\n el.removeAttribute('dismissing');\n el.setAttribute('dismissed', '');\n announce('Alert dismissed');\n emit('dismiss', { originalEvent: e });\n });\n };\n\n const alertRole = () => (props.color.value === 'error' ? 'alert' : 'status');\n\n return html`\n <span\n class=\"sr-announce\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n ref=\"${(ref: HTMLElement) => {\n announceEl = ref;\n }}\"></span>\n <div class=\"alert\" :role=\"${alertRole}\" part=\"alert\">\n <span class=\"icon\" part=\"icon\" aria-hidden=\"true\" ?hidden=\"${() => !slots.has('icon').value}\">\n <slot name=\"icon\"></slot>\n </span>\n <div class=\"header\" part=\"header\" ?hidden=\"${() => !props.heading.value}\">\n <span class=\"heading\" part=\"heading\">${props.heading}</span>\n <span class=\"meta\" part=\"meta\">\n <slot name=\"meta\"></slot>\n </span>\n </div>\n <div class=\"body\" part=\"body\">\n <div class=\"content\" part=\"content\">\n <slot></slot>\n </div>\n </div>\n <div class=\"actions\" part=\"actions\" ?hidden=\"${() => !slots.has('actions').value}\">\n <slot name=\"actions\"></slot>\n </div>\n <button\n class=\"close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Dismiss alert\"\n ?hidden=\"${() => !props.dismissible.value}\"\n @click=\"${handleDismiss}\">\n <ore-icon name=\"x\" size=\"16\" stroke-width=\"2.5\" aria-hidden=\"true\"></ore-icon>\n </button>\n </div>\n `;\n },\n styles: [\n colorThemeMixin,\n coarsePointerMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n forcedColorsMixin,\n sizeVariantMixin({\n lg: { '--_padding': 'var(--size-4) var(--size-5)', fontSize: 'var(--text-base)', gap: 'var(--size-3-5)' },\n sm: { '--_padding': 'var(--size-2) var(--size-3)', fontSize: 'var(--text-xs)', gap: 'var(--size-2)' },\n }),\n componentStyles,\n ],\n});\n"],"mappings":";;;;;;;;AAuFA,IAAa,IAAY;AACzB,EAAsC,GAAW;CAC/C,OAAO;EACL,GAAG;EACH,GAAG;EACH,GAAG;EACH,UAAU,EAAK,KAAK,EAAK;EACzB,aAAa,EAAK,KAAK,EAAK;EAC5B,SAAS,EAAK,OAAO;EACrB,YAAY,EAAK,KAAK,EAAK;EAC3B,SAAS,EAAK,OAAsC;CACtD;CACA,MAAM,GAAO,EAAE,MAAM,GAAO,OAAI,SAAM,YAAS;EAC7C,IAAI,IAAiC,MAE/B,KAAY,MAAoB;GAC/B,MAEL,EAAW,cAAc,IACzB,4BAA4B;IAC1B,AAAI,MAAY,EAAW,cAAc;GAC3C,CAAC;EACH;EAgBA,OAAO,CAAI;;;;;gBAKC,MAAqB;GAC3B,IAAa;EACf,EAAE;wCATmB,EAAM,MAAM,UAAU,UAAU,UAAU,SAU3B;2EAC+B,CAAC,EAAM,IAAI,MAAM,CAAC,CAAC,MAAM;;;2DAGzC,CAAC,EAAM,QAAQ,MAAM;iDAC/B,EAAM,QAAQ;;;;;;;;;;6DAUF,CAAC,EAAM,IAAI,SAAS,CAAC,CAAC,MAAM;;;;;;;;2BAQ9D,CAAC,EAAM,YAAY,MAAM;qBA7CzB,MAAkB;GAClC,EAAM,YAAY,UAEvB,EAAG,aAAa,cAAc,EAAE,GAChC,EAAU,SAAU;IAIlB,AAHA,EAAG,gBAAgB,YAAY,GAC/B,EAAG,aAAa,aAAa,EAAE,GAC/B,EAAS,iBAAiB,GAC1B,EAAK,WAAW,EAAE,eAAe,EAAE,CAAC;GACtC,CAAC;EACH,EAoC8B;;;;;CAKhC;CACA,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA,EAAiB;GACf,IAAI;IAAE,cAAc;IAA+B,UAAU;IAAoB,KAAK;GAAkB;GACxG,IAAI;IAAE,cAAc;IAA+B,UAAU;IAAkB,KAAK;GAAgB;EACtG,CAAC;EACD;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"alert.js","names":[],"sources":["../src/feedback/alert/alert.ts"],"sourcesContent":["import { define, html, prop, getHost, useEmit, useSlots } from '@vielzeug/ore';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../../content/icon/icon';\nimport { awaitExit } from '../../overlay/shared/await-exit';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport {\n coarsePointerMixin,\n colorThemeMixin,\n forcedColorsMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n sizeVariantMixin,\n} from '../../styles';\nimport componentStyles from './alert.css?inline';\n\nexport type OreAlertEvents = {\n dismiss: { originalEvent: MouseEvent };\n};\n\nexport type OreAlertProps = {\n /** Show a left accent border (for flat/bordered variants) */\n accented?: boolean;\n /** Theme color */\n color?: ThemeColor;\n /** Show a dismissible (×) button */\n dismissible?: boolean;\n /** Heading text shown above the content */\n heading?: string;\n /** Position action buttons to the right instead of below */\n horizontal?: boolean;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Alert size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: 'solid' | 'flat' | 'bordered';\n};\n\n/**\n * A status/feedback banner with optional heading, icon slot, and dismiss button.\n *\n * @element ore-alert\n *\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual style: 'flat' | 'solid' | 'bordered'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} heading - Bold heading text above the content\n * @attr {boolean} dismissible - Show a close (×) button\n * @attr {boolean} accented - Add a left accent border (flat/bordered only)\n * @attr {boolean} horizontal - Position action buttons to the right instead of below\n *\n * @fires dismiss - Fired when the alert is dismissed. detail: { originalEvent: MouseEvent }\n *\n * @slot - Default slot for the alert message content\n * @slot icon - Icon on the left side\n * @slot meta - Metadata displayed alongside the heading (lighter, right-aligned)\n * @slot actions - Action buttons shown below the message\n *\n * @cssprop --alert-bg - Background color\n * @cssprop --alert-color - Text/icon color\n * @cssprop --alert-border-color - Border color\n * @cssprop --alert-shadow - Box shadow\n * @cssprop --alert-radius - Border radius\n * @cssprop --alert-padding - Padding\n * @cssprop --alert-gap - Gap between icon, body, and close button\n * @cssprop --alert-font-size - Font size\n *\n * @part alert - Alert root container.\n * @part icon - Icon container.\n * @part header - Header container.\n * @part heading - Heading text element.\n * @part meta - Meta text container.\n * @part body - Body content container.\n * @part content - Content container.\n * @part actions - Actions slot container.\n * @part close - Close action control.\n * @example\n * ```html\n * <ore-alert color=\"success\">Your changes have been saved.</ore-alert>\n * <ore-alert color=\"error\" variant=\"solid\" dismissible heading=\"Something went wrong\">\n * Please try again later.\n * </ore-alert>\n * ```\n */\nexport const ALERT_TAG = 'ore-alert' as const;\ndefine<OreAlertProps>(ALERT_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n accented: prop.bool(false),\n dismissible: prop.bool(false),\n heading: prop.string(),\n horizontal: prop.bool(false),\n variant: prop.string<'solid' | 'flat' | 'bordered'>(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreAlertEvents>();\n const slots = useSlots();\n\n let announceEl: HTMLElement | null = null;\n\n const announce = (message: string) => {\n if (!announceEl) return;\n\n announceEl.textContent = '';\n requestAnimationFrame(() => {\n if (announceEl) announceEl.textContent = message;\n });\n };\n\n const handleDismiss = (e: MouseEvent) => {\n if (!props.dismissible.value) return;\n\n el.setAttribute('dismissing', '');\n awaitExit(el, () => {\n el.removeAttribute('dismissing');\n el.setAttribute('dismissed', '');\n announce('Alert dismissed');\n emit('dismiss', { originalEvent: e });\n });\n };\n\n const alertRole = () => (props.color.value === 'error' ? 'alert' : 'status');\n\n return html`\n <span\n class=\"sr-announce\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n ref=\"${(ref: HTMLElement) => {\n announceEl = ref;\n }}\"></span>\n <div class=\"alert\" :role=\"${alertRole}\" part=\"alert\">\n <span class=\"icon\" part=\"icon\" aria-hidden=\"true\" ?hidden=\"${() => !slots.has('icon').value}\">\n <slot name=\"icon\"></slot>\n </span>\n <div class=\"header\" part=\"header\" ?hidden=\"${() => !props.heading.value}\">\n <span class=\"heading\" part=\"heading\">${props.heading}</span>\n <span class=\"meta\" part=\"meta\">\n <slot name=\"meta\"></slot>\n </span>\n </div>\n <div class=\"body\" part=\"body\">\n <div class=\"content\" part=\"content\">\n <slot></slot>\n </div>\n </div>\n <div class=\"actions\" part=\"actions\" ?hidden=\"${() => !slots.has('actions').value}\">\n <slot name=\"actions\"></slot>\n </div>\n <button\n class=\"close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Dismiss alert\"\n ?hidden=\"${() => !props.dismissible.value}\"\n @click=\"${handleDismiss}\">\n <ore-icon name=\"x\" size=\"16\" stroke-width=\"2.5\" aria-hidden=\"true\"></ore-icon>\n </button>\n </div>\n `;\n },\n styles: [\n colorThemeMixin,\n coarsePointerMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n forcedColorsMixin,\n sizeVariantMixin({\n lg: { '--_padding': 'var(--size-4) var(--size-5)', fontSize: 'var(--text-base)', gap: 'var(--size-3-5)' },\n sm: { '--_padding': 'var(--size-2) var(--size-3)', fontSize: 'var(--text-xs)', gap: 'var(--size-2)' },\n }),\n componentStyles,\n ],\n});\n"],"mappings":";;;;;;;;AAuFA,IAAa,IAAY;AACzB,EAAsB,GAAW;CAC/B,OAAO;EACL,GAAG;EACH,GAAG;EACH,GAAG;EACH,UAAU,EAAK,KAAK,EAAK;EACzB,aAAa,EAAK,KAAK,EAAK;EAC5B,SAAS,EAAK,OAAO;EACrB,YAAY,EAAK,KAAK,EAAK;EAC3B,SAAS,EAAK,OAAsC;CACtD;CACA,MAAM,GAAO;EACX,IAAM,IAAK,EAAQ,GACb,IAAO,EAAwB,GAC/B,IAAQ,EAAS,GAEnB,IAAiC,MAE/B,KAAY,MAAoB;GAC/B,MAEL,EAAW,cAAc,IACzB,4BAA4B;IAC1B,AAAI,MAAY,EAAW,cAAc;GAC3C,CAAC;EACH;EAgBA,OAAO,CAAI;;;;;gBAKC,MAAqB;GAC3B,IAAa;EACf,EAAE;wCATmB,EAAM,MAAM,UAAU,UAAU,UAAU,SAU3B;2EAC+B,CAAC,EAAM,IAAI,MAAM,CAAC,CAAC,MAAM;;;2DAGzC,CAAC,EAAM,QAAQ,MAAM;iDAC/B,EAAM,QAAQ;;;;;;;;;;6DAUF,CAAC,EAAM,IAAI,SAAS,CAAC,CAAC,MAAM;;;;;;;;2BAQ9D,CAAC,EAAM,YAAY,MAAM;qBA7CzB,MAAkB;GAClC,EAAM,YAAY,UAEvB,EAAG,aAAa,cAAc,EAAE,GAChC,EAAU,SAAU;IAIlB,AAHA,EAAG,gBAAgB,YAAY,GAC/B,EAAG,aAAa,aAAa,EAAE,GAC/B,EAAS,iBAAiB,GAC1B,EAAK,WAAW,EAAE,eAAe,EAAE,CAAC;GACtC,CAAC;EACH,EAoC8B;;;;;CAKhC;CACA,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA,EAAiB;GACf,IAAI;IAAE,cAAc;IAA+B,UAAU;IAAoB,KAAK;GAAkB;GACxG,IAAI;IAAE,cAAc;IAA+B,UAAU;IAAkB,KAAK;GAAgB;EACtG,CAAC;EACD;CACF;AACF,CAAC"}
package/dist/async.cjs CHANGED
@@ -1,11 +1,11 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ore/dist/directives/when.cjs");require("./ore/dist/directives.cjs");const t=require("./styles/mixins/accessibility.css.cjs"),n=require("./feedback/async/async.css?inline.cjs");let r=require("@vielzeug/ore"),i=require("@vielzeug/ripple");var a=`ore-async`;(0,r.define)(a,{props:{"empty-description":r.prop.string(),"empty-label":r.prop.string(`No content yet`),"error-description":r.prop.string(),"error-label":r.prop.string(`Something went wrong`),retryable:r.prop.bool(!1),status:r.prop.oneOf([`idle`,`loading`,`empty`,`error`,`success`],`success`)},setup(t,{bind:n,emit:a}){let o=(0,i.signal)(!1),s=(0,i.signal)(!1),c=(0,i.signal)(!1);n({attr:{ariaBusy:()=>t.status.value===`loading`?`true`:`false`,ariaLabel:()=>t.status.value===`loading`?`Loading…`:null,ariaLive:()=>t.status.value===`error`?`assertive`:`polite`,status:t.status}});let l=(e,t)=>()=>t?.value?r.html`<p class="${e}">${t}</p>`:``;return r.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ore/dist/directives/when.cjs");require("./ore/dist/directives.cjs");const t=require("./styles/mixins/accessibility.css.cjs"),n=require("./feedback/async/async.css.cjs");let r=require("@vielzeug/ore"),i=require("@vielzeug/ripple");var a=`ore-async`;(0,r.define)(a,{props:{"empty-description":r.prop.string(),"empty-label":r.prop.string(`No content yet`),"error-description":r.prop.string(),"error-label":r.prop.string(`Something went wrong`),retryable:r.prop.bool(!1),status:r.prop.oneOf([`idle`,`loading`,`empty`,`error`,`success`],`success`)},setup(t){let n=(0,r.useEmit)(),a=(0,i.signal)(!1),o=(0,i.signal)(!1),s=(0,i.signal)(!1);(0,r.bind)({attr:{ariaBusy:()=>t.status.value===`loading`?`true`:`false`,ariaLabel:()=>t.status.value===`loading`?`Loading…`:null,ariaLive:()=>t.status.value===`error`?`assertive`:`polite`,status:t.status}});let c=(e,t)=>()=>t?.value?r.html`<p class="${e}">${t}</p>`:``;return r.html`
2
2
  <div class="region region-idle" role="presentation"></div>
3
3
 
4
4
  <div class="region region-loading" role="status">
5
5
  <slot
6
6
  name="loading"
7
- @slotchange=${e=>{o.value=e.target.assignedNodes().length>0}}></slot>
8
- ${e.when(o,()=>r.html``,()=>r.html`
7
+ @slotchange=${e=>{a.value=e.target.assignedNodes().length>0}}></slot>
8
+ ${e.when(a,()=>r.html``,()=>r.html`
9
9
  <div class="loading-default" aria-hidden="true">
10
10
  <ore-skeleton variant="text" lines="1" width="40%"></ore-skeleton>
11
11
  <ore-skeleton variant="text" lines="3" width="100%"></ore-skeleton>
@@ -17,13 +17,13 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
17
17
  <div class="region region-empty">
18
18
  <slot
19
19
  name="empty"
20
- @slotchange=${e=>{s.value=e.target.assignedNodes().length>0}}></slot>
21
- ${e.when(s,()=>r.html``,()=>r.html`
20
+ @slotchange=${e=>{o.value=e.target.assignedNodes().length>0}}></slot>
21
+ ${e.when(o,()=>r.html``,()=>r.html`
22
22
  <div class="empty-state" role="status">
23
23
  <div class="icon">
24
24
  <ore-icon name="inbox" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
25
25
  </div>
26
- ${l(`title`,t[`empty-label`])} ${l(`description`,t[`empty-description`])}
26
+ ${c(`title`,t[`empty-label`])} ${c(`description`,t[`empty-description`])}
27
27
  </div>
28
28
  `)}
29
29
  </div>
@@ -31,15 +31,15 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
31
31
  <div class="region region-error">
32
32
  <slot
33
33
  name="error"
34
- @slotchange=${e=>{c.value=e.target.assignedNodes().length>0}}></slot>
35
- ${e.when(c,()=>r.html``,()=>r.html`
34
+ @slotchange=${e=>{s.value=e.target.assignedNodes().length>0}}></slot>
35
+ ${e.when(s,()=>r.html``,()=>r.html`
36
36
  <div class="error-state" role="alert">
37
37
  <div class="icon">
38
38
  <ore-icon name="triangle-alert" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
39
39
  </div>
40
- ${l(`title`,t[`error-label`])} ${l(`description`,t[`error-description`])}
40
+ ${c(`title`,t[`error-label`])} ${c(`description`,t[`error-description`])}
41
41
  ${e.when(()=>!!t.retryable.value,()=>r.html`
42
- <button class="retry-btn" type="button" @click=${()=>a(`retry`)}>
42
+ <button class="retry-btn" type="button" @click=${()=>n(`retry`)}>
43
43
  <ore-icon name="refresh-cw" size="1em" stroke-width="2" aria-hidden="true"></ore-icon>
44
44
  Try again
45
45
  </button>
@@ -1 +1 @@
1
- {"version":3,"file":"async.cjs","names":[],"sources":["../src/feedback/async/async.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { type Readable, signal } from '@vielzeug/ripple';\n\nimport { reducedMotionMixin } from '../../styles';\nimport componentStyles from './async.css?inline';\n\nexport type AsyncStatus = 'idle' | 'loading' | 'empty' | 'error' | 'success';\n\nexport type OreAsyncEvents = {\n retry: void;\n};\n\nexport type OreAsyncProps = {\n 'empty-description'?: string;\n 'empty-label'?: string;\n 'error-description'?: string;\n 'error-label'?: string;\n retryable?: boolean;\n status?: AsyncStatus;\n};\n\n/**\n * A container for handling asynchronous states (loading, empty, error, success).\n * Simplifies data fetching UI by providing consistent fallbacks.\n *\n * @element ore-async\n *\n * @attr {string} status - current state: 'idle' | 'loading' | 'empty' | 'error' | 'success' (default: 'success')\n * @attr {boolean} retryable - show retry button in error state (default: false)\n * @attr {string} empty-label - title for empty state (default: 'No content yet')\n * @attr {string} empty-description - optional text for empty state\n * @attr {string} error-label - title for error state (default: 'Something went wrong')\n * @attr {string} error-description - optional text for error state\n *\n * @fires retry - Emitted when the retry button is clicked (no detail payload)\n *\n * @slot - default content shown in 'success' state\n * @slot loading - custom loading UI (overrides default skeletons)\n * @slot empty - custom empty UI (overrides default icon/label)\n * @slot error - custom error UI (overrides default icon/label)\n *\n * @cssprop --async-color - Text/icon color used by default async state content\n * @cssprop --async-gap - Vertical spacing between icon, title, description, and actions\n * @cssprop --async-icon-size - Icon size for built-in loading/empty/error visuals\n * @example\n * ```html\n * <!-- Success state: default slot is shown -->\n * <ore-async status=\"success\">\n * <ul><li>Item one</li><li>Item two</li></ul>\n * </ore-async>\n *\n * <!-- Loading state: shows skeleton placeholders -->\n * <ore-async status=\"loading\"></ore-async>\n *\n * <!-- Empty state with custom message -->\n * <ore-async status=\"empty\" empty-label=\"No results\" empty-description=\"Try adjusting your filters.\"></ore-async>\n *\n * <!-- Error state with retry button -->\n * <ore-async status=\"error\" retryable error-label=\"Failed to load\" error-description=\"Check your connection.\"></ore-async>\n * ```\n */\nexport const ASYNC_TAG = 'ore-async' as const;\ndefine<OreAsyncProps, OreAsyncEvents>(ASYNC_TAG, {\n props: {\n 'empty-description': prop.string(),\n 'empty-label': prop.string('No content yet'),\n 'error-description': prop.string(),\n 'error-label': prop.string('Something went wrong'),\n retryable: prop.bool(false),\n status: prop.oneOf(['idle', 'loading', 'empty', 'error', 'success'] as const, 'success'),\n },\n setup(props, { bind, emit }) {\n const hasLoadingSlot = signal(false);\n const hasEmptySlot = signal(false);\n const hasErrorSlot = signal(false);\n\n // Reflect status onto the host so CSS can show/hide each region.\n // ARIA attributes are driven reactively by bind().\n bind({\n attr: {\n ariaBusy: () => (props.status.value === 'loading' ? 'true' : 'false'),\n ariaLabel: () => (props.status.value === 'loading' ? 'Loading…' : null),\n ariaLive: () => (props.status.value === 'error' ? 'assertive' : 'polite'),\n status: props.status,\n },\n });\n\n const renderText = (className: 'title' | 'description', text: Readable<string | undefined> | undefined) => () =>\n text?.value ? html`<p class=\"${className}\">${text}</p>` : '';\n\n // All four regions are always in the shadow DOM — CSS on :host([status=\"…\"])\n // toggles their visibility. This means:\n // - No DOM churn on status transitions (no teardown/rebuild of slot elements).\n // - Live regions are always present, so screen readers announce correctly.\n // - focus is never lost across status changes.\n return html`\n <div class=\"region region-idle\" role=\"presentation\"></div>\n\n <div class=\"region region-loading\" role=\"status\">\n <slot\n name=\"loading\"\n @slotchange=${(e: Event) => {\n hasLoadingSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasLoadingSlot,\n () => html``,\n () => html`\n <div class=\"loading-default\" aria-hidden=\"true\">\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"40%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"60%\"></ore-skeleton>\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-empty\">\n <slot\n name=\"empty\"\n @slotchange=${(e: Event) => {\n hasEmptySlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasEmptySlot,\n () => html``,\n () => html`\n <div class=\"empty-state\" role=\"status\">\n <div class=\"icon\">\n <ore-icon name=\"inbox\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['empty-label'])} ${renderText('description', props['empty-description'])}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-error\">\n <slot\n name=\"error\"\n @slotchange=${(e: Event) => {\n hasErrorSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasErrorSlot,\n () => html``,\n () => html`\n <div class=\"error-state\" role=\"alert\">\n <div class=\"icon\">\n <ore-icon name=\"triangle-alert\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['error-label'])} ${renderText('description', props['error-description'])}\n ${when(\n () => Boolean(props.retryable.value),\n () => html`\n <button class=\"retry-btn\" type=\"button\" @click=${() => emit('retry')}>\n <ore-icon name=\"refresh-cw\" size=\"1em\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n Try again\n </button>\n `,\n )}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-success\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":"mUA8DA,IAAa,EAAY,yBACa,EAAW,CAC/C,MAAO,CACL,oBAAqB,EAAA,KAAK,OAAO,EACjC,cAAe,EAAA,KAAK,OAAO,gBAAgB,EAC3C,oBAAqB,EAAA,KAAK,OAAO,EACjC,cAAe,EAAA,KAAK,OAAO,sBAAsB,EACjD,UAAW,EAAA,KAAK,KAAK,EAAK,EAC1B,OAAQ,EAAA,KAAK,MAAM,CAAC,OAAQ,UAAW,QAAS,QAAS,SAAS,EAAY,SAAS,CACzF,EACA,MAAM,EAAO,CAAE,OAAM,QAAQ,CAC3B,IAAM,GAAA,EAAA,EAAA,OAAA,CAAwB,EAAK,EAC7B,GAAA,EAAA,EAAA,OAAA,CAAsB,EAAK,EAC3B,GAAA,EAAA,EAAA,OAAA,CAAsB,EAAK,EAIjC,EAAK,CACH,KAAM,CACJ,aAAiB,EAAM,OAAO,QAAU,UAAY,OAAS,QAC7D,cAAkB,EAAM,OAAO,QAAU,UAAY,WAAa,KAClE,aAAiB,EAAM,OAAO,QAAU,QAAU,YAAc,SAChE,OAAQ,EAAM,MAChB,CACF,CAAC,EAED,IAAM,GAAc,EAAoC,QACtD,GAAM,MAAQ,EAAA,IAAI,aAAa,EAAU,IAAI,EAAK,MAAQ,GAO5D,MAAO,GAAA,IAAI;;;;;;wBAMU,GAAa,CAC1B,EAAe,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAChF,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;;WAOZ,EAAE;;;;;;wBAMe,GAAa,CAC1B,EAAa,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAC9E,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;gBAKJ,EAAW,QAAS,EAAM,cAAc,EAAE,GAAG,EAAW,cAAe,EAAM,oBAAoB,EAAE;;WAG3G,EAAE;;;;;;wBAMe,GAAa,CAC1B,EAAa,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAC9E,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;gBAKJ,EAAW,QAAS,EAAM,cAAc,EAAE,GAAG,EAAW,cAAe,EAAM,oBAAoB,EAAE;gBACnG,EAAA,SACM,EAAQ,EAAM,UAAU,UACxB,EAAA,IAAI;uEAC+C,EAAK,OAAO,EAAE;;;;iBAKzE,EAAE;;WAGR,EAAE;;;;;;KAOR,EACA,OAAQ,CAAC,EAAA,mBAAoB,EAAA,OAAe,CAC9C,CAAC"}
1
+ {"version":3,"file":"async.cjs","names":[],"sources":["../src/feedback/async/async.ts"],"sourcesContent":["import { define, html, prop, bind, useEmit } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { type Readable, signal } from '@vielzeug/ripple';\n\nimport { reducedMotionMixin } from '../../styles';\nimport componentStyles from './async.css?inline';\n\nexport type AsyncStatus = 'idle' | 'loading' | 'empty' | 'error' | 'success';\n\nexport type OreAsyncEvents = {\n retry: void;\n};\n\nexport type OreAsyncProps = {\n 'empty-description'?: string;\n 'empty-label'?: string;\n 'error-description'?: string;\n 'error-label'?: string;\n retryable?: boolean;\n status?: AsyncStatus;\n};\n\n/**\n * A container for handling asynchronous states (loading, empty, error, success).\n * Simplifies data fetching UI by providing consistent fallbacks.\n *\n * @element ore-async\n *\n * @attr {string} status - current state: 'idle' | 'loading' | 'empty' | 'error' | 'success' (default: 'success')\n * @attr {boolean} retryable - show retry button in error state (default: false)\n * @attr {string} empty-label - title for empty state (default: 'No content yet')\n * @attr {string} empty-description - optional text for empty state\n * @attr {string} error-label - title for error state (default: 'Something went wrong')\n * @attr {string} error-description - optional text for error state\n *\n * @fires retry - Emitted when the retry button is clicked (no detail payload)\n *\n * @slot - default content shown in 'success' state\n * @slot loading - custom loading UI (overrides default skeletons)\n * @slot empty - custom empty UI (overrides default icon/label)\n * @slot error - custom error UI (overrides default icon/label)\n *\n * @cssprop --async-color - Text/icon color used by default async state content\n * @cssprop --async-gap - Vertical spacing between icon, title, description, and actions\n * @cssprop --async-icon-size - Icon size for built-in loading/empty/error visuals\n * @example\n * ```html\n * <!-- Success state: default slot is shown -->\n * <ore-async status=\"success\">\n * <ul><li>Item one</li><li>Item two</li></ul>\n * </ore-async>\n *\n * <!-- Loading state: shows skeleton placeholders -->\n * <ore-async status=\"loading\"></ore-async>\n *\n * <!-- Empty state with custom message -->\n * <ore-async status=\"empty\" empty-label=\"No results\" empty-description=\"Try adjusting your filters.\"></ore-async>\n *\n * <!-- Error state with retry button -->\n * <ore-async status=\"error\" retryable error-label=\"Failed to load\" error-description=\"Check your connection.\"></ore-async>\n * ```\n */\nexport const ASYNC_TAG = 'ore-async' as const;\ndefine<OreAsyncProps>(ASYNC_TAG, {\n props: {\n 'empty-description': prop.string(),\n 'empty-label': prop.string('No content yet'),\n 'error-description': prop.string(),\n 'error-label': prop.string('Something went wrong'),\n retryable: prop.bool(false),\n status: prop.oneOf(['idle', 'loading', 'empty', 'error', 'success'] as const, 'success'),\n },\n setup(props) {\n const emit = useEmit<OreAsyncEvents>();\n\n const hasLoadingSlot = signal(false);\n const hasEmptySlot = signal(false);\n const hasErrorSlot = signal(false);\n\n // Reflect status onto the host so CSS can show/hide each region.\n // ARIA attributes are driven reactively by bind().\n bind({\n attr: {\n ariaBusy: () => (props.status.value === 'loading' ? 'true' : 'false'),\n ariaLabel: () => (props.status.value === 'loading' ? 'Loading…' : null),\n ariaLive: () => (props.status.value === 'error' ? 'assertive' : 'polite'),\n status: props.status,\n },\n });\n\n const renderText = (className: 'title' | 'description', text: Readable<string | undefined> | undefined) => () =>\n text?.value ? html`<p class=\"${className}\">${text}</p>` : '';\n\n // All four regions are always in the shadow DOM — CSS on :host([status=\"…\"])\n // toggles their visibility. This means:\n // - No DOM churn on status transitions (no teardown/rebuild of slot elements).\n // - Live regions are always present, so screen readers announce correctly.\n // - focus is never lost across status changes.\n return html`\n <div class=\"region region-idle\" role=\"presentation\"></div>\n\n <div class=\"region region-loading\" role=\"status\">\n <slot\n name=\"loading\"\n @slotchange=${(e: Event) => {\n hasLoadingSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasLoadingSlot,\n () => html``,\n () => html`\n <div class=\"loading-default\" aria-hidden=\"true\">\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"40%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"60%\"></ore-skeleton>\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-empty\">\n <slot\n name=\"empty\"\n @slotchange=${(e: Event) => {\n hasEmptySlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasEmptySlot,\n () => html``,\n () => html`\n <div class=\"empty-state\" role=\"status\">\n <div class=\"icon\">\n <ore-icon name=\"inbox\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['empty-label'])} ${renderText('description', props['empty-description'])}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-error\">\n <slot\n name=\"error\"\n @slotchange=${(e: Event) => {\n hasErrorSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasErrorSlot,\n () => html``,\n () => html`\n <div class=\"error-state\" role=\"alert\">\n <div class=\"icon\">\n <ore-icon name=\"triangle-alert\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['error-label'])} ${renderText('description', props['error-description'])}\n ${when(\n () => Boolean(props.retryable.value),\n () => html`\n <button class=\"retry-btn\" type=\"button\" @click=${() => emit('retry')}>\n <ore-icon name=\"refresh-cw\" size=\"1em\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n Try again\n </button>\n `,\n )}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-success\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":"4TA8DA,IAAa,EAAY,yBACH,EAAW,CAC/B,MAAO,CACL,oBAAqB,EAAA,KAAK,OAAO,EACjC,cAAe,EAAA,KAAK,OAAO,gBAAgB,EAC3C,oBAAqB,EAAA,KAAK,OAAO,EACjC,cAAe,EAAA,KAAK,OAAO,sBAAsB,EACjD,UAAW,EAAA,KAAK,KAAK,EAAK,EAC1B,OAAQ,EAAA,KAAK,MAAM,CAAC,OAAQ,UAAW,QAAS,QAAS,SAAS,EAAY,SAAS,CACzF,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,QAAA,CAA+B,EAE/B,GAAA,EAAA,EAAA,OAAA,CAAwB,EAAK,EAC7B,GAAA,EAAA,EAAA,OAAA,CAAsB,EAAK,EAC3B,GAAA,EAAA,EAAA,OAAA,CAAsB,EAAK,GAIjC,EAAA,EAAA,KAAA,CAAK,CACH,KAAM,CACJ,aAAiB,EAAM,OAAO,QAAU,UAAY,OAAS,QAC7D,cAAkB,EAAM,OAAO,QAAU,UAAY,WAAa,KAClE,aAAiB,EAAM,OAAO,QAAU,QAAU,YAAc,SAChE,OAAQ,EAAM,MAChB,CACF,CAAC,EAED,IAAM,GAAc,EAAoC,QACtD,GAAM,MAAQ,EAAA,IAAI,aAAa,EAAU,IAAI,EAAK,MAAQ,GAO5D,MAAO,GAAA,IAAI;;;;;;wBAMU,GAAa,CAC1B,EAAe,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAChF,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;;WAOZ,EAAE;;;;;;wBAMe,GAAa,CAC1B,EAAa,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAC9E,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;gBAKJ,EAAW,QAAS,EAAM,cAAc,EAAE,GAAG,EAAW,cAAe,EAAM,oBAAoB,EAAE;;WAG3G,EAAE;;;;;;wBAMe,GAAa,CAC1B,EAAa,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAC9E,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;gBAKJ,EAAW,QAAS,EAAM,cAAc,EAAE,GAAG,EAAW,cAAe,EAAM,oBAAoB,EAAE;gBACnG,EAAA,SACM,EAAQ,EAAM,UAAU,UACxB,EAAA,IAAI;uEAC+C,EAAK,OAAO,EAAE;;;;iBAKzE,EAAE;;WAGR,EAAE;;;;;;KAOR,EACA,OAAQ,CAAC,EAAA,mBAAoB,EAAA,OAAe,CAC9C,CAAC"}
package/dist/async.js CHANGED
@@ -1,19 +1,19 @@
1
1
  import { when as e } from "./ore/dist/directives/when.js";
2
2
  import "./ore/dist/directives.js";
3
3
  import { reducedMotionMixin as t } from "./styles/mixins/accessibility.css.js";
4
- import n from "./feedback/async/async.css?inline.js";
5
- import { define as r, html as i, prop as a } from "@vielzeug/ore";
6
- import { signal as o } from "@vielzeug/ripple";
4
+ import n from "./feedback/async/async.css.js";
5
+ import { bind as r, define as i, html as a, prop as o, useEmit as s } from "@vielzeug/ore";
6
+ import { signal as c } from "@vielzeug/ripple";
7
7
  //#region src/feedback/async/async.ts
8
- var s = "ore-async";
9
- r(s, {
8
+ var l = "ore-async";
9
+ i(l, {
10
10
  props: {
11
- "empty-description": a.string(),
12
- "empty-label": a.string("No content yet"),
13
- "error-description": a.string(),
14
- "error-label": a.string("Something went wrong"),
15
- retryable: a.bool(!1),
16
- status: a.oneOf([
11
+ "empty-description": o.string(),
12
+ "empty-label": o.string("No content yet"),
13
+ "error-description": o.string(),
14
+ "error-label": o.string("Something went wrong"),
15
+ retryable: o.bool(!1),
16
+ status: o.oneOf([
17
17
  "idle",
18
18
  "loading",
19
19
  "empty",
@@ -21,25 +21,25 @@ r(s, {
21
21
  "success"
22
22
  ], "success")
23
23
  },
24
- setup(t, { bind: n, emit: r }) {
25
- let a = o(!1), s = o(!1), c = o(!1);
26
- n({ attr: {
24
+ setup(t) {
25
+ let n = s(), i = c(!1), o = c(!1), l = c(!1);
26
+ r({ attr: {
27
27
  ariaBusy: () => t.status.value === "loading" ? "true" : "false",
28
28
  ariaLabel: () => t.status.value === "loading" ? "Loading…" : null,
29
29
  ariaLive: () => t.status.value === "error" ? "assertive" : "polite",
30
30
  status: t.status
31
31
  } });
32
- let l = (e, t) => () => t?.value ? i`<p class="${e}">${t}</p>` : "";
33
- return i`
32
+ let u = (e, t) => () => t?.value ? a`<p class="${e}">${t}</p>` : "";
33
+ return a`
34
34
  <div class="region region-idle" role="presentation"></div>
35
35
 
36
36
  <div class="region region-loading" role="status">
37
37
  <slot
38
38
  name="loading"
39
39
  @slotchange=${(e) => {
40
- a.value = e.target.assignedNodes().length > 0;
40
+ i.value = e.target.assignedNodes().length > 0;
41
41
  }}></slot>
42
- ${e(a, () => i``, () => i`
42
+ ${e(i, () => a``, () => a`
43
43
  <div class="loading-default" aria-hidden="true">
44
44
  <ore-skeleton variant="text" lines="1" width="40%"></ore-skeleton>
45
45
  <ore-skeleton variant="text" lines="3" width="100%"></ore-skeleton>
@@ -52,14 +52,14 @@ r(s, {
52
52
  <slot
53
53
  name="empty"
54
54
  @slotchange=${(e) => {
55
- s.value = e.target.assignedNodes().length > 0;
55
+ o.value = e.target.assignedNodes().length > 0;
56
56
  }}></slot>
57
- ${e(s, () => i``, () => i`
57
+ ${e(o, () => a``, () => a`
58
58
  <div class="empty-state" role="status">
59
59
  <div class="icon">
60
60
  <ore-icon name="inbox" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
61
61
  </div>
62
- ${l("title", t["empty-label"])} ${l("description", t["empty-description"])}
62
+ ${u("title", t["empty-label"])} ${u("description", t["empty-description"])}
63
63
  </div>
64
64
  `)}
65
65
  </div>
@@ -68,16 +68,16 @@ r(s, {
68
68
  <slot
69
69
  name="error"
70
70
  @slotchange=${(e) => {
71
- c.value = e.target.assignedNodes().length > 0;
71
+ l.value = e.target.assignedNodes().length > 0;
72
72
  }}></slot>
73
- ${e(c, () => i``, () => i`
73
+ ${e(l, () => a``, () => a`
74
74
  <div class="error-state" role="alert">
75
75
  <div class="icon">
76
76
  <ore-icon name="triangle-alert" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
77
77
  </div>
78
- ${l("title", t["error-label"])} ${l("description", t["error-description"])}
79
- ${e(() => !!t.retryable.value, () => i`
80
- <button class="retry-btn" type="button" @click=${() => r("retry")}>
78
+ ${u("title", t["error-label"])} ${u("description", t["error-description"])}
79
+ ${e(() => !!t.retryable.value, () => a`
80
+ <button class="retry-btn" type="button" @click=${() => n("retry")}>
81
81
  <ore-icon name="refresh-cw" size="1em" stroke-width="2" aria-hidden="true"></ore-icon>
82
82
  Try again
83
83
  </button>
@@ -94,6 +94,6 @@ r(s, {
94
94
  styles: [t, n]
95
95
  });
96
96
  //#endregion
97
- export { s as ASYNC_TAG };
97
+ export { l as ASYNC_TAG };
98
98
 
99
99
  //# sourceMappingURL=async.js.map
package/dist/async.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"async.js","names":[],"sources":["../src/feedback/async/async.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { type Readable, signal } from '@vielzeug/ripple';\n\nimport { reducedMotionMixin } from '../../styles';\nimport componentStyles from './async.css?inline';\n\nexport type AsyncStatus = 'idle' | 'loading' | 'empty' | 'error' | 'success';\n\nexport type OreAsyncEvents = {\n retry: void;\n};\n\nexport type OreAsyncProps = {\n 'empty-description'?: string;\n 'empty-label'?: string;\n 'error-description'?: string;\n 'error-label'?: string;\n retryable?: boolean;\n status?: AsyncStatus;\n};\n\n/**\n * A container for handling asynchronous states (loading, empty, error, success).\n * Simplifies data fetching UI by providing consistent fallbacks.\n *\n * @element ore-async\n *\n * @attr {string} status - current state: 'idle' | 'loading' | 'empty' | 'error' | 'success' (default: 'success')\n * @attr {boolean} retryable - show retry button in error state (default: false)\n * @attr {string} empty-label - title for empty state (default: 'No content yet')\n * @attr {string} empty-description - optional text for empty state\n * @attr {string} error-label - title for error state (default: 'Something went wrong')\n * @attr {string} error-description - optional text for error state\n *\n * @fires retry - Emitted when the retry button is clicked (no detail payload)\n *\n * @slot - default content shown in 'success' state\n * @slot loading - custom loading UI (overrides default skeletons)\n * @slot empty - custom empty UI (overrides default icon/label)\n * @slot error - custom error UI (overrides default icon/label)\n *\n * @cssprop --async-color - Text/icon color used by default async state content\n * @cssprop --async-gap - Vertical spacing between icon, title, description, and actions\n * @cssprop --async-icon-size - Icon size for built-in loading/empty/error visuals\n * @example\n * ```html\n * <!-- Success state: default slot is shown -->\n * <ore-async status=\"success\">\n * <ul><li>Item one</li><li>Item two</li></ul>\n * </ore-async>\n *\n * <!-- Loading state: shows skeleton placeholders -->\n * <ore-async status=\"loading\"></ore-async>\n *\n * <!-- Empty state with custom message -->\n * <ore-async status=\"empty\" empty-label=\"No results\" empty-description=\"Try adjusting your filters.\"></ore-async>\n *\n * <!-- Error state with retry button -->\n * <ore-async status=\"error\" retryable error-label=\"Failed to load\" error-description=\"Check your connection.\"></ore-async>\n * ```\n */\nexport const ASYNC_TAG = 'ore-async' as const;\ndefine<OreAsyncProps, OreAsyncEvents>(ASYNC_TAG, {\n props: {\n 'empty-description': prop.string(),\n 'empty-label': prop.string('No content yet'),\n 'error-description': prop.string(),\n 'error-label': prop.string('Something went wrong'),\n retryable: prop.bool(false),\n status: prop.oneOf(['idle', 'loading', 'empty', 'error', 'success'] as const, 'success'),\n },\n setup(props, { bind, emit }) {\n const hasLoadingSlot = signal(false);\n const hasEmptySlot = signal(false);\n const hasErrorSlot = signal(false);\n\n // Reflect status onto the host so CSS can show/hide each region.\n // ARIA attributes are driven reactively by bind().\n bind({\n attr: {\n ariaBusy: () => (props.status.value === 'loading' ? 'true' : 'false'),\n ariaLabel: () => (props.status.value === 'loading' ? 'Loading…' : null),\n ariaLive: () => (props.status.value === 'error' ? 'assertive' : 'polite'),\n status: props.status,\n },\n });\n\n const renderText = (className: 'title' | 'description', text: Readable<string | undefined> | undefined) => () =>\n text?.value ? html`<p class=\"${className}\">${text}</p>` : '';\n\n // All four regions are always in the shadow DOM — CSS on :host([status=\"…\"])\n // toggles their visibility. This means:\n // - No DOM churn on status transitions (no teardown/rebuild of slot elements).\n // - Live regions are always present, so screen readers announce correctly.\n // - focus is never lost across status changes.\n return html`\n <div class=\"region region-idle\" role=\"presentation\"></div>\n\n <div class=\"region region-loading\" role=\"status\">\n <slot\n name=\"loading\"\n @slotchange=${(e: Event) => {\n hasLoadingSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasLoadingSlot,\n () => html``,\n () => html`\n <div class=\"loading-default\" aria-hidden=\"true\">\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"40%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"60%\"></ore-skeleton>\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-empty\">\n <slot\n name=\"empty\"\n @slotchange=${(e: Event) => {\n hasEmptySlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasEmptySlot,\n () => html``,\n () => html`\n <div class=\"empty-state\" role=\"status\">\n <div class=\"icon\">\n <ore-icon name=\"inbox\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['empty-label'])} ${renderText('description', props['empty-description'])}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-error\">\n <slot\n name=\"error\"\n @slotchange=${(e: Event) => {\n hasErrorSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasErrorSlot,\n () => html``,\n () => html`\n <div class=\"error-state\" role=\"alert\">\n <div class=\"icon\">\n <ore-icon name=\"triangle-alert\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['error-label'])} ${renderText('description', props['error-description'])}\n ${when(\n () => Boolean(props.retryable.value),\n () => html`\n <button class=\"retry-btn\" type=\"button\" @click=${() => emit('retry')}>\n <ore-icon name=\"refresh-cw\" size=\"1em\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n Try again\n </button>\n `,\n )}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-success\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":";;;;;;;AA8DA,IAAa,IAAY;AACzB,EAAsC,GAAW;CAC/C,OAAO;EACL,qBAAqB,EAAK,OAAO;EACjC,eAAe,EAAK,OAAO,gBAAgB;EAC3C,qBAAqB,EAAK,OAAO;EACjC,eAAe,EAAK,OAAO,sBAAsB;EACjD,WAAW,EAAK,KAAK,EAAK;EAC1B,QAAQ,EAAK,MAAM;GAAC;GAAQ;GAAW;GAAS;GAAS;EAAS,GAAY,SAAS;CACzF;CACA,MAAM,GAAO,EAAE,SAAM,WAAQ;EAC3B,IAAM,IAAiB,EAAO,EAAK,GAC7B,IAAe,EAAO,EAAK,GAC3B,IAAe,EAAO,EAAK;EAIjC,EAAK,EACH,MAAM;GACJ,gBAAiB,EAAM,OAAO,UAAU,YAAY,SAAS;GAC7D,iBAAkB,EAAM,OAAO,UAAU,YAAY,aAAa;GAClE,gBAAiB,EAAM,OAAO,UAAU,UAAU,cAAc;GAChE,QAAQ,EAAM;EAChB,EACF,CAAC;EAED,IAAM,KAAc,GAAoC,YACtD,GAAM,QAAQ,CAAI,aAAa,EAAU,IAAI,EAAK,QAAQ;EAO5D,OAAO,CAAI;;;;;;yBAMU,MAAa;GAC1B,EAAe,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAChF,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;;WAOZ,EAAE;;;;;;yBAMe,MAAa;GAC1B,EAAa,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAC9E,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;gBAKJ,EAAW,SAAS,EAAM,cAAc,EAAE,GAAG,EAAW,eAAe,EAAM,oBAAoB,EAAE;;WAG3G,EAAE;;;;;;yBAMe,MAAa;GAC1B,EAAa,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAC9E,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;gBAKJ,EAAW,SAAS,EAAM,cAAc,EAAE,GAAG,EAAW,eAAe,EAAM,oBAAoB,EAAE;gBACnG,QACM,EAAQ,EAAM,UAAU,aACxB,CAAI;yEAC+C,EAAK,OAAO,EAAE;;;;iBAKzE,EAAE;;WAGR,EAAE;;;;;;;CAOR;CACA,QAAQ,CAAC,GAAoB,CAAe;AAC9C,CAAC"}
1
+ {"version":3,"file":"async.js","names":[],"sources":["../src/feedback/async/async.ts"],"sourcesContent":["import { define, html, prop, bind, useEmit } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { type Readable, signal } from '@vielzeug/ripple';\n\nimport { reducedMotionMixin } from '../../styles';\nimport componentStyles from './async.css?inline';\n\nexport type AsyncStatus = 'idle' | 'loading' | 'empty' | 'error' | 'success';\n\nexport type OreAsyncEvents = {\n retry: void;\n};\n\nexport type OreAsyncProps = {\n 'empty-description'?: string;\n 'empty-label'?: string;\n 'error-description'?: string;\n 'error-label'?: string;\n retryable?: boolean;\n status?: AsyncStatus;\n};\n\n/**\n * A container for handling asynchronous states (loading, empty, error, success).\n * Simplifies data fetching UI by providing consistent fallbacks.\n *\n * @element ore-async\n *\n * @attr {string} status - current state: 'idle' | 'loading' | 'empty' | 'error' | 'success' (default: 'success')\n * @attr {boolean} retryable - show retry button in error state (default: false)\n * @attr {string} empty-label - title for empty state (default: 'No content yet')\n * @attr {string} empty-description - optional text for empty state\n * @attr {string} error-label - title for error state (default: 'Something went wrong')\n * @attr {string} error-description - optional text for error state\n *\n * @fires retry - Emitted when the retry button is clicked (no detail payload)\n *\n * @slot - default content shown in 'success' state\n * @slot loading - custom loading UI (overrides default skeletons)\n * @slot empty - custom empty UI (overrides default icon/label)\n * @slot error - custom error UI (overrides default icon/label)\n *\n * @cssprop --async-color - Text/icon color used by default async state content\n * @cssprop --async-gap - Vertical spacing between icon, title, description, and actions\n * @cssprop --async-icon-size - Icon size for built-in loading/empty/error visuals\n * @example\n * ```html\n * <!-- Success state: default slot is shown -->\n * <ore-async status=\"success\">\n * <ul><li>Item one</li><li>Item two</li></ul>\n * </ore-async>\n *\n * <!-- Loading state: shows skeleton placeholders -->\n * <ore-async status=\"loading\"></ore-async>\n *\n * <!-- Empty state with custom message -->\n * <ore-async status=\"empty\" empty-label=\"No results\" empty-description=\"Try adjusting your filters.\"></ore-async>\n *\n * <!-- Error state with retry button -->\n * <ore-async status=\"error\" retryable error-label=\"Failed to load\" error-description=\"Check your connection.\"></ore-async>\n * ```\n */\nexport const ASYNC_TAG = 'ore-async' as const;\ndefine<OreAsyncProps>(ASYNC_TAG, {\n props: {\n 'empty-description': prop.string(),\n 'empty-label': prop.string('No content yet'),\n 'error-description': prop.string(),\n 'error-label': prop.string('Something went wrong'),\n retryable: prop.bool(false),\n status: prop.oneOf(['idle', 'loading', 'empty', 'error', 'success'] as const, 'success'),\n },\n setup(props) {\n const emit = useEmit<OreAsyncEvents>();\n\n const hasLoadingSlot = signal(false);\n const hasEmptySlot = signal(false);\n const hasErrorSlot = signal(false);\n\n // Reflect status onto the host so CSS can show/hide each region.\n // ARIA attributes are driven reactively by bind().\n bind({\n attr: {\n ariaBusy: () => (props.status.value === 'loading' ? 'true' : 'false'),\n ariaLabel: () => (props.status.value === 'loading' ? 'Loading…' : null),\n ariaLive: () => (props.status.value === 'error' ? 'assertive' : 'polite'),\n status: props.status,\n },\n });\n\n const renderText = (className: 'title' | 'description', text: Readable<string | undefined> | undefined) => () =>\n text?.value ? html`<p class=\"${className}\">${text}</p>` : '';\n\n // All four regions are always in the shadow DOM — CSS on :host([status=\"…\"])\n // toggles their visibility. This means:\n // - No DOM churn on status transitions (no teardown/rebuild of slot elements).\n // - Live regions are always present, so screen readers announce correctly.\n // - focus is never lost across status changes.\n return html`\n <div class=\"region region-idle\" role=\"presentation\"></div>\n\n <div class=\"region region-loading\" role=\"status\">\n <slot\n name=\"loading\"\n @slotchange=${(e: Event) => {\n hasLoadingSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasLoadingSlot,\n () => html``,\n () => html`\n <div class=\"loading-default\" aria-hidden=\"true\">\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"40%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"60%\"></ore-skeleton>\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-empty\">\n <slot\n name=\"empty\"\n @slotchange=${(e: Event) => {\n hasEmptySlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasEmptySlot,\n () => html``,\n () => html`\n <div class=\"empty-state\" role=\"status\">\n <div class=\"icon\">\n <ore-icon name=\"inbox\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['empty-label'])} ${renderText('description', props['empty-description'])}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-error\">\n <slot\n name=\"error\"\n @slotchange=${(e: Event) => {\n hasErrorSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasErrorSlot,\n () => html``,\n () => html`\n <div class=\"error-state\" role=\"alert\">\n <div class=\"icon\">\n <ore-icon name=\"triangle-alert\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['error-label'])} ${renderText('description', props['error-description'])}\n ${when(\n () => Boolean(props.retryable.value),\n () => html`\n <button class=\"retry-btn\" type=\"button\" @click=${() => emit('retry')}>\n <ore-icon name=\"refresh-cw\" size=\"1em\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n Try again\n </button>\n `,\n )}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-success\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":";;;;;;;AA8DA,IAAa,IAAY;AACzB,EAAsB,GAAW;CAC/B,OAAO;EACL,qBAAqB,EAAK,OAAO;EACjC,eAAe,EAAK,OAAO,gBAAgB;EAC3C,qBAAqB,EAAK,OAAO;EACjC,eAAe,EAAK,OAAO,sBAAsB;EACjD,WAAW,EAAK,KAAK,EAAK;EAC1B,QAAQ,EAAK,MAAM;GAAC;GAAQ;GAAW;GAAS;GAAS;EAAS,GAAY,SAAS;CACzF;CACA,MAAM,GAAO;EACX,IAAM,IAAO,EAAwB,GAE/B,IAAiB,EAAO,EAAK,GAC7B,IAAe,EAAO,EAAK,GAC3B,IAAe,EAAO,EAAK;EAIjC,EAAK,EACH,MAAM;GACJ,gBAAiB,EAAM,OAAO,UAAU,YAAY,SAAS;GAC7D,iBAAkB,EAAM,OAAO,UAAU,YAAY,aAAa;GAClE,gBAAiB,EAAM,OAAO,UAAU,UAAU,cAAc;GAChE,QAAQ,EAAM;EAChB,EACF,CAAC;EAED,IAAM,KAAc,GAAoC,YACtD,GAAM,QAAQ,CAAI,aAAa,EAAU,IAAI,EAAK,QAAQ;EAO5D,OAAO,CAAI;;;;;;yBAMU,MAAa;GAC1B,EAAe,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAChF,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;;WAOZ,EAAE;;;;;;yBAMe,MAAa;GAC1B,EAAa,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAC9E,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;gBAKJ,EAAW,SAAS,EAAM,cAAc,EAAE,GAAG,EAAW,eAAe,EAAM,oBAAoB,EAAE;;WAG3G,EAAE;;;;;;yBAMe,MAAa;GAC1B,EAAa,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAC9E,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;gBAKJ,EAAW,SAAS,EAAM,cAAc,EAAE,GAAG,EAAW,eAAe,EAAM,oBAAoB,EAAE;gBACnG,QACM,EAAQ,EAAM,UAAU,aACxB,CAAI;yEAC+C,EAAK,OAAO,EAAE;;;;iBAKzE,EAAE;;WAGR,EAAE;;;;;;;CAOR;CACA,QAAQ,CAAC,GAAoB,CAAe;AAC9C,CAAC"}
package/dist/avatar.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/shape.css.cjs"),t=require("./styles/mixins/theme.css.cjs"),n=require("./shared/prop-bundles.cjs"),r=require("./content/avatar/avatar-group.css?inline.cjs"),i=require("./content/avatar/avatar.css?inline.cjs");let a=require("@vielzeug/ore"),o=require("@vielzeug/ripple");var s={away:`Away`,busy:`Busy`,offline:`Offline`,online:`Online`},c=`ore-avatar`;(0,a.define)(c,{props:{...n.themableBundle,...n.sizableBundle,...n.roundableBundle,alt:a.prop.string(),initials:a.prop.string(),src:a.prop.string(),status:a.prop.string()},setup(e){let t=(0,o.signal)(!1);(0,o.watch)(e.src,()=>{t.value=!1});let n=e=>{e&&(e.addEventListener(`error`,()=>{t.value=!0}),e.addEventListener(`load`,()=>{t.value=!1}))},r=(0,o.computed)(()=>{if(e.initials.value)return e.initials.value.slice(0,2);let t=e.alt.value;if(!t)return``;let n=t.trim().split(/\s+/);return n.length>=2?(n[0][0]+n[n.length-1][0]).toUpperCase():n[0].slice(0,2).toUpperCase()}),i=(0,o.computed)(()=>!!e.src.value&&!t.value),c=(0,o.computed)(()=>!i.value&&!!r.value),l=(0,o.computed)(()=>!i.value&&!c.value),u=()=>{let t=e.alt.value||null,n=e.status.value,r=n?s[n]:null;return!t&&!r?null:t?r?`${t}, ${r}`:t:`Status: ${r}`};return a.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/shape.css.cjs"),t=require("./styles/mixins/theme.css.cjs"),n=require("./shared/prop-bundles.cjs"),r=require("./content/avatar/avatar-group.css.cjs"),i=require("./content/avatar/avatar.css.cjs");let a=require("@vielzeug/ore"),o=require("@vielzeug/ripple");var s={away:`Away`,busy:`Busy`,offline:`Offline`,online:`Online`},c=`ore-avatar`;(0,a.define)(c,{props:{...n.themableBundle,...n.sizableBundle,...n.roundableBundle,alt:a.prop.string(),initials:a.prop.string(),src:a.prop.string(),status:a.prop.string()},setup(e){let t=(0,o.signal)(!1);(0,o.watch)(e.src,()=>{t.value=!1});let n=e=>{e&&(e.addEventListener(`error`,()=>{t.value=!0}),e.addEventListener(`load`,()=>{t.value=!1}))},r=(0,o.computed)(()=>{if(e.initials.value)return e.initials.value.slice(0,2);let t=e.alt.value;if(!t)return``;let n=t.trim().split(/\s+/);return n.length>=2?(n[0][0]+n[n.length-1][0]).toUpperCase():n[0].slice(0,2).toUpperCase()}),i=(0,o.computed)(()=>!!e.src.value&&!t.value),c=(0,o.computed)(()=>!i.value&&!!r.value),l=(0,o.computed)(()=>!i.value&&!c.value),u=()=>{let t=e.alt.value||null,n=e.status.value,r=n?s[n]:null;return!t&&!r?null:t?r?`${t}, ${r}`:t:`Status: ${r}`};return a.html`
2
2
  <span class="avatar" part="avatar" :aria-label="${u}" :role="${()=>u()?`img`:null}">
3
3
  ${()=>e.src.value?a.html`<img
4
4
  ref="${n}"
@@ -11,7 +11,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
11
11
  ${()=>l.value?a.html`<ore-icon class="icon-fallback" part="fallback" name="user" size="50%"></ore-icon>`:``}
12
12
  </span>
13
13
  ${()=>e.status.value?a.html`<span class="status" part="status" :data-status="${e.status}" aria-hidden="true"></span>`:``}
14
- `},styles:[t.colorThemeMixin,e.roundedVariantMixin,e.sizeVariantMixin({lg:{fontSize:`var(--avatar-font-size, var(--text-base))`,size:`var(--avatar-size, var(--size-14))`},md:{fontSize:`var(--avatar-font-size, var(--text-sm))`,size:`var(--avatar-size, var(--size-10))`},sm:{fontSize:`var(--avatar-font-size, var(--text-xs))`,size:`var(--avatar-size, var(--size-7))`}}),i.default]});var l=`ore-avatar-group`;(0,a.define)(l,{props:{max:a.prop.number(5),total:a.prop.number()},setup(e,{el:t,slots:n,watch:r}){let i=(0,o.signal)(0),s=()=>{let n=[...t.querySelectorAll(`ore-avatar`)],r=Number(e.max.value)||5,a=Math.max(0,n.length-r);i.value=e.total.value==null?a:Number(e.total.value)-r,n.forEach((e,t)=>{t>=r?e.setAttribute(`data-avatar-group-hidden`,``):e.removeAttribute(`data-avatar-group-hidden`)})};r(()=>{n.elements().value,s()});let c=()=>`+${i.value} more`,l=()=>`+${i.value}`;return a.html`
14
+ `},styles:[t.colorThemeMixin,e.roundedVariantMixin,e.sizeVariantMixin({lg:{fontSize:`var(--avatar-font-size, var(--text-base))`,size:`var(--avatar-size, var(--size-14))`},md:{fontSize:`var(--avatar-font-size, var(--text-sm))`,size:`var(--avatar-size, var(--size-10))`},sm:{fontSize:`var(--avatar-font-size, var(--text-xs))`,size:`var(--avatar-size, var(--size-7))`}}),i.default]});var l=`ore-avatar-group`;(0,a.define)(l,{props:{max:a.prop.number(5),total:a.prop.number()},setup(e){let t=(0,a.getHost)(),n=(0,a.useSlots)(),r=a.watchEffect,i=(0,o.signal)(0),s=()=>{let n=[...t.querySelectorAll(`ore-avatar`)],r=Number(e.max.value)||5,a=Math.max(0,n.length-r);i.value=e.total.value==null?a:Number(e.total.value)-r,n.forEach((e,t)=>{t>=r?e.setAttribute(`data-avatar-group-hidden`,``):e.removeAttribute(`data-avatar-group-hidden`)})};r(()=>{n.elements().value,s()});let c=()=>`+${i.value} more`,l=()=>`+${i.value}`;return a.html`
15
15
  <slot></slot>
16
16
  ${()=>i.value>0?a.html`<span class="overflow-badge" part="overflow" aria-label="${c}"> ${l} </span>`:``}
17
17
  `},styles:[r.default]}),exports.AVATAR_GROUP_TAG=l,exports.AVATAR_TAG=c;
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.cjs","names":[],"sources":["../src/content/avatar/avatar.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../icon/icon';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, roundedVariantMixin, sizeVariantMixin } from '../../styles';\nimport groupStyles from './avatar-group.css?inline';\nimport componentStyles from './avatar.css?inline';\n\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst STATUS_LABELS: Record<AvatarStatus, string> = {\n away: 'Away',\n busy: 'Busy',\n offline: 'Offline',\n online: 'Online',\n};\n\n/** Avatar component properties */\nexport type OreAvatarProps = {\n /** Alt text for the image; also used to derive initials when no `initials` prop is given */\n alt?: string;\n /** Theme color (used for initials background) */\n color?: ThemeColor;\n /** Explicit initials to display when no image is available (e.g. \"JD\") */\n initials?: string;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Component size */\n size?: ComponentSize;\n /** Image source URL */\n src?: string;\n /** Online presence indicator */\n status?: AvatarStatus;\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Displays a user avatar: image → initials → generic fallback icon, in that priority order.\n *\n * @element ore-avatar\n *\n * @attr {string} src - Image source URL\n * @attr {string} alt - Image alt text (also used to derive initials)\n * @attr {string} initials - Explicit initials (up to 2 chars)\n * @attr {string} color - Theme color for initials background: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} status - 'online' | 'offline' | 'busy' | 'away'\n *\n * @slot - Fallback content shown when image and initials are unavailable.\n * @cssprop --avatar-size - Diameter of the avatar\n * @cssprop --avatar-bg - Background color\n * @cssprop --avatar-color - Text/icon color\n * @cssprop --avatar-radius - Border radius\n * @cssprop --avatar-border - Border shorthand\n * @cssprop --avatar-border-color - Border color (also controls status dot border)\n *\n * @part avatar - Avatar root container.\n * @part img - Image element.\n * @part initials - Initials fallback element.\n * @part fallback - Shadow part for the `fallback` element.\n * @part status - Status indicator element.\n * @part overflow - Overflow indicator element.\n * @example\n * ```html\n * <ore-avatar src=\"/jane.jpg\" alt=\"Jane Doe\"></ore-avatar>\n * <ore-avatar initials=\"JD\" color=\"primary\"></ore-avatar>\n * <ore-avatar alt=\"John Smith\" status=\"online\"></ore-avatar>\n * ```\n */\nexport const AVATAR_TAG = 'ore-avatar' as const;\ndefine<OreAvatarProps>(AVATAR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n alt: prop.string(),\n initials: prop.string(),\n src: prop.string(),\n status: prop.string<AvatarStatus>(),\n },\n setup(props) {\n const imgFailed = signal(false);\n\n // Reset stale error state whenever src changes\n watch(props.src, () => {\n imgFailed.value = false;\n });\n\n // Attach load/error listeners reactively when the img element mounts\n const attachImgListeners = (el: HTMLImageElement | null) => {\n if (!el) return;\n\n el.addEventListener('error', () => {\n imgFailed.value = true;\n });\n el.addEventListener('load', () => {\n imgFailed.value = false;\n });\n };\n const derivedInitials = computed(() => {\n if (props.initials.value) return props.initials.value.slice(0, 2);\n\n const alt = props.alt.value;\n\n if (!alt) return '';\n\n const parts = alt.trim().split(/\\s+/);\n\n if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n\n return parts[0].slice(0, 2).toUpperCase();\n });\n const showImage = computed(() => !!props.src.value && !imgFailed.value);\n const showInitials = computed(() => !showImage.value && !!derivedInitials.value);\n const showFallback = computed(() => !showImage.value && !showInitials.value);\n const avatarLabel = () => {\n const name = (props.alt.value as string | undefined) || null;\n const statusKey = props.status.value as AvatarStatus | undefined;\n const status = statusKey ? STATUS_LABELS[statusKey] : null;\n\n if (!name && !status) return null;\n\n if (!name) return `Status: ${status}`;\n\n if (!status) return name;\n\n return `${name}, ${status}`;\n };\n const avatarRole = () => (avatarLabel() ? 'img' : null);\n\n return html`\n <span class=\"avatar\" part=\"avatar\" :aria-label=\"${avatarLabel}\" :role=\"${avatarRole}\">\n ${() =>\n props.src.value\n ? html`<img\n ref=\"${attachImgListeners}\"\n part=\"img\"\n :src=\"${props.src}\"\n :alt=\"${props.alt}\"\n ?hidden=\"${() => !showImage.value}\"\n aria-hidden=\"true\" />`\n : ''}\n ${() =>\n showInitials.value\n ? html`<span class=\"initials\" part=\"initials\" aria-hidden=\"true\">${derivedInitials}</span>`\n : ''}\n ${() =>\n showFallback.value\n ? html`<ore-icon class=\"icon-fallback\" part=\"fallback\" name=\"user\" size=\"50%\"></ore-icon>`\n : ''}\n </span>\n ${() =>\n props.status.value\n ? html`<span class=\"status\" part=\"status\" :data-status=\"${props.status}\" aria-hidden=\"true\"></span>`\n : ''}\n `;\n },\n styles: [\n colorThemeMixin,\n roundedVariantMixin,\n sizeVariantMixin({\n lg: { fontSize: 'var(--avatar-font-size, var(--text-base))', size: 'var(--avatar-size, var(--size-14))' },\n md: { fontSize: 'var(--avatar-font-size, var(--text-sm))', size: 'var(--avatar-size, var(--size-10))' },\n sm: { fontSize: 'var(--avatar-font-size, var(--text-xs))', size: 'var(--avatar-size, var(--size-7))' },\n }),\n componentStyles,\n ],\n});\n\n// ============================================\n// AvatarGroup\n// ============================================\n\n/** AvatarGroup component properties */\nexport type OreAvatarGroupProps = {\n /** Maximum number of avatars to show before showing a +N badge */\n max?: number;\n /** Total count shown in the overflow badge (defaults to the actual hidden count) */\n total?: number;\n};\n\n/**\n * Groups multiple `ore-avatar` elements in a stacked, overlapping row.\n *\n * @element ore-avatar-group\n *\n * @attr {number} max - Max visible avatars before overflow badge (default: 5)\n * @attr {number} total - Override the total count displayed in the badge\n *\n * @slot - `ore-avatar` elements\n *\n * @cssprop --avatar-group-overlap - Negative margin creating the overlap (default: -0.75rem)\n *\n * @part overflow - Overflow count badge shown when avatars exceed `max`.\n *\n * @example\n * ```html\n * <ore-avatar-group max=\"3\">\n * <ore-avatar src=\"/a.jpg\" alt=\"Alice\"></ore-avatar>\n * <ore-avatar src=\"/b.jpg\" alt=\"Bob\"></ore-avatar>\n * <ore-avatar src=\"/c.jpg\" alt=\"Carol\"></ore-avatar>\n * <ore-avatar src=\"/d.jpg\" alt=\"Dave\"></ore-avatar>\n * </ore-avatar-group>\n * ```\n */\nexport const AVATAR_GROUP_TAG = 'ore-avatar-group' as const;\ndefine<OreAvatarGroupProps>(AVATAR_GROUP_TAG, {\n props: {\n max: prop.number(5),\n total: prop.number(),\n },\n setup(props, { el, slots, watch }) {\n const overflowCount = signal(0);\n\n const updateVisibility = () => {\n const avatars = [...el.querySelectorAll('ore-avatar')];\n const max = Number(props.max.value) || 5;\n const hidden = Math.max(0, avatars.length - max);\n\n overflowCount.value = props.total.value != null ? Number(props.total.value) - max : hidden;\n avatars.forEach((a, i) => {\n if (i >= max) a.setAttribute('data-avatar-group-hidden', '');\n else a.removeAttribute('data-avatar-group-hidden');\n });\n };\n\n watch(() => {\n void slots.elements().value;\n updateVisibility();\n });\n\n const overflowLabel = () => `+${overflowCount.value} more`;\n const overflowText = () => `+${overflowCount.value}`;\n\n return html`\n <slot></slot>\n ${() =>\n overflowCount.value > 0\n ? html`<span class=\"overflow-badge\" part=\"overflow\" aria-label=\"${overflowLabel}\"> ${overflowText} </span>`\n : ''}\n `;\n },\n styles: [groupStyles],\n});\n"],"mappings":"iXAaA,IAAM,EAA8C,CAClD,KAAM,OACN,KAAM,OACN,QAAS,UACT,OAAQ,QACV,EA0Da,EAAa,0BACH,EAAY,CACjC,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,GAAG,EAAA,gBACH,IAAK,EAAA,KAAK,OAAO,EACjB,SAAU,EAAA,KAAK,OAAO,EACtB,IAAK,EAAA,KAAK,OAAO,EACjB,OAAQ,EAAA,KAAK,OAAqB,CACpC,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,OAAA,CAAmB,EAAK,GAG9B,EAAA,EAAA,MAAA,CAAM,EAAM,QAAW,CACrB,EAAU,MAAQ,EACpB,CAAC,EAGD,IAAM,EAAsB,GAAgC,CACrD,IAEL,EAAG,iBAAiB,YAAe,CACjC,EAAU,MAAQ,EACpB,CAAC,EACD,EAAG,iBAAiB,WAAc,CAChC,EAAU,MAAQ,EACpB,CAAC,EACH,EACM,GAAA,EAAA,EAAA,SAAA,KAAiC,CACrC,GAAI,EAAM,SAAS,MAAO,OAAO,EAAM,SAAS,MAAM,MAAM,EAAG,CAAC,EAEhE,IAAM,EAAM,EAAM,IAAI,MAEtB,GAAI,CAAC,EAAK,MAAO,GAEjB,IAAM,EAAQ,EAAI,KAAK,CAAC,CAAC,MAAM,KAAK,EAIpC,OAFI,EAAM,QAAU,GAAW,EAAM,EAAE,CAAC,GAAK,EAAM,EAAM,OAAS,EAAE,CAAC,GAAA,CAAI,YAAY,EAE9E,EAAM,EAAE,CAAC,MAAM,EAAG,CAAC,CAAC,CAAC,YAAY,CAC1C,CAAC,EACK,GAAA,EAAA,EAAA,SAAA,KAA2B,CAAC,CAAC,EAAM,IAAI,OAAS,CAAC,EAAU,KAAK,EAChE,GAAA,EAAA,EAAA,SAAA,KAA8B,CAAC,EAAU,OAAS,CAAC,CAAC,EAAgB,KAAK,EACzE,GAAA,EAAA,EAAA,SAAA,KAA8B,CAAC,EAAU,OAAS,CAAC,EAAa,KAAK,EACrE,MAAoB,CACxB,IAAM,EAAQ,EAAM,IAAI,OAAgC,KAClD,EAAY,EAAM,OAAO,MACzB,EAAS,EAAY,EAAc,GAAa,KAQtD,MANI,CAAC,GAAQ,CAAC,EAAe,KAExB,EAEA,EAEE,GAAG,EAAK,IAAI,IAFC,EAFF,WAAW,GAK/B,EAGA,MAAO,GAAA,IAAI;wDACyC,EAAY,eAHtC,EAAY,EAAI,MAAQ,KAGoC;cAEhF,EAAM,IAAI,MACN,EAAA,IAAI;uBACK,EAAmB;;wBAElB,EAAM,IAAI;wBACV,EAAM,IAAI;+BACD,CAAC,EAAU,MAAM;uCAEpC,GAAG;cAEP,EAAa,MACT,EAAA,IAAI,6DAA6D,EAAgB,SACjF,GAAG;cAEP,EAAa,MACT,EAAA,IAAI,qFACJ,GAAG;;YAGT,EAAM,OAAO,MACT,EAAA,IAAI,oDAAoD,EAAM,OAAO,8BACrE,GAAG;KAEb,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,oBACA,EAAA,iBAAiB,CACf,GAAI,CAAE,SAAU,4CAA6C,KAAM,oCAAqC,EACxG,GAAI,CAAE,SAAU,0CAA2C,KAAM,oCAAqC,EACtG,GAAI,CAAE,SAAU,0CAA2C,KAAM,mCAAoC,CACvG,CAAC,EACD,EAAA,OACF,CACF,CAAC,EAsCD,IAAa,EAAmB,gCACJ,EAAkB,CAC5C,MAAO,CACL,IAAK,EAAA,KAAK,OAAO,CAAC,EAClB,MAAO,EAAA,KAAK,OAAO,CACrB,EACA,MAAM,EAAO,CAAE,KAAI,QAAO,SAAS,CACjC,IAAM,GAAA,EAAA,EAAA,OAAA,CAAuB,CAAC,EAExB,MAAyB,CAC7B,IAAM,EAAU,CAAC,GAAG,EAAG,iBAAiB,YAAY,CAAC,EAC/C,EAAM,OAAO,EAAM,IAAI,KAAK,GAAK,EACjC,EAAS,KAAK,IAAI,EAAG,EAAQ,OAAS,CAAG,EAE/C,EAAc,MAAQ,EAAM,MAAM,OAAS,KAAyC,EAAlC,OAAO,EAAM,MAAM,KAAK,EAAI,EAC9E,EAAQ,SAAS,EAAG,IAAM,CACpB,GAAK,EAAK,EAAE,aAAa,2BAA4B,EAAE,EACtD,EAAE,gBAAgB,0BAA0B,CACnD,CAAC,CACH,EAEA,MAAY,CACV,EAAW,SAAS,CAAC,CAAC,MACtB,EAAiB,CACnB,CAAC,EAED,IAAM,MAAsB,IAAI,EAAc,MAAM,OAC9C,MAAqB,IAAI,EAAc,QAE7C,MAAO,GAAA,IAAI;;YAGP,EAAc,MAAQ,EAClB,EAAA,IAAI,4DAA4D,EAAc,KAAK,EAAa,UAChG,GAAG;KAEb,EACA,OAAQ,CAAC,EAAA,OAAW,CACtB,CAAC"}
1
+ {"version":3,"file":"avatar.cjs","names":[],"sources":["../src/content/avatar/avatar.ts"],"sourcesContent":["import { define, html, prop, getHost, useSlots, watchEffect } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../icon/icon';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, roundedVariantMixin, sizeVariantMixin } from '../../styles';\nimport groupStyles from './avatar-group.css?inline';\nimport componentStyles from './avatar.css?inline';\n\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst STATUS_LABELS: Record<AvatarStatus, string> = {\n away: 'Away',\n busy: 'Busy',\n offline: 'Offline',\n online: 'Online',\n};\n\n/** Avatar component properties */\nexport type OreAvatarProps = {\n /** Alt text for the image; also used to derive initials when no `initials` prop is given */\n alt?: string;\n /** Theme color (used for initials background) */\n color?: ThemeColor;\n /** Explicit initials to display when no image is available (e.g. \"JD\") */\n initials?: string;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Component size */\n size?: ComponentSize;\n /** Image source URL */\n src?: string;\n /** Online presence indicator */\n status?: AvatarStatus;\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Displays a user avatar: image → initials → generic fallback icon, in that priority order.\n *\n * @element ore-avatar\n *\n * @attr {string} src - Image source URL\n * @attr {string} alt - Image alt text (also used to derive initials)\n * @attr {string} initials - Explicit initials (up to 2 chars)\n * @attr {string} color - Theme color for initials background: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} status - 'online' | 'offline' | 'busy' | 'away'\n *\n * @slot - Fallback content shown when image and initials are unavailable.\n * @cssprop --avatar-size - Diameter of the avatar\n * @cssprop --avatar-bg - Background color\n * @cssprop --avatar-color - Text/icon color\n * @cssprop --avatar-radius - Border radius\n * @cssprop --avatar-border - Border shorthand\n * @cssprop --avatar-border-color - Border color (also controls status dot border)\n *\n * @part avatar - Avatar root container.\n * @part img - Image element.\n * @part initials - Initials fallback element.\n * @part fallback - Shadow part for the `fallback` element.\n * @part status - Status indicator element.\n * @part overflow - Overflow indicator element.\n * @example\n * ```html\n * <ore-avatar src=\"/jane.jpg\" alt=\"Jane Doe\"></ore-avatar>\n * <ore-avatar initials=\"JD\" color=\"primary\"></ore-avatar>\n * <ore-avatar alt=\"John Smith\" status=\"online\"></ore-avatar>\n * ```\n */\nexport const AVATAR_TAG = 'ore-avatar' as const;\ndefine<OreAvatarProps>(AVATAR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n alt: prop.string(),\n initials: prop.string(),\n src: prop.string(),\n status: prop.string<AvatarStatus>(),\n },\n setup(props) {\n const imgFailed = signal(false);\n\n // Reset stale error state whenever src changes\n watch(props.src, () => {\n imgFailed.value = false;\n });\n\n // Attach load/error listeners reactively when the img element mounts\n const attachImgListeners = (el: HTMLImageElement | null) => {\n if (!el) return;\n\n el.addEventListener('error', () => {\n imgFailed.value = true;\n });\n el.addEventListener('load', () => {\n imgFailed.value = false;\n });\n };\n const derivedInitials = computed(() => {\n if (props.initials.value) return props.initials.value.slice(0, 2);\n\n const alt = props.alt.value;\n\n if (!alt) return '';\n\n const parts = alt.trim().split(/\\s+/);\n\n if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n\n return parts[0].slice(0, 2).toUpperCase();\n });\n const showImage = computed(() => !!props.src.value && !imgFailed.value);\n const showInitials = computed(() => !showImage.value && !!derivedInitials.value);\n const showFallback = computed(() => !showImage.value && !showInitials.value);\n const avatarLabel = () => {\n const name = (props.alt.value as string | undefined) || null;\n const statusKey = props.status.value as AvatarStatus | undefined;\n const status = statusKey ? STATUS_LABELS[statusKey] : null;\n\n if (!name && !status) return null;\n\n if (!name) return `Status: ${status}`;\n\n if (!status) return name;\n\n return `${name}, ${status}`;\n };\n const avatarRole = () => (avatarLabel() ? 'img' : null);\n\n return html`\n <span class=\"avatar\" part=\"avatar\" :aria-label=\"${avatarLabel}\" :role=\"${avatarRole}\">\n ${() =>\n props.src.value\n ? html`<img\n ref=\"${attachImgListeners}\"\n part=\"img\"\n :src=\"${props.src}\"\n :alt=\"${props.alt}\"\n ?hidden=\"${() => !showImage.value}\"\n aria-hidden=\"true\" />`\n : ''}\n ${() =>\n showInitials.value\n ? html`<span class=\"initials\" part=\"initials\" aria-hidden=\"true\">${derivedInitials}</span>`\n : ''}\n ${() =>\n showFallback.value\n ? html`<ore-icon class=\"icon-fallback\" part=\"fallback\" name=\"user\" size=\"50%\"></ore-icon>`\n : ''}\n </span>\n ${() =>\n props.status.value\n ? html`<span class=\"status\" part=\"status\" :data-status=\"${props.status}\" aria-hidden=\"true\"></span>`\n : ''}\n `;\n },\n styles: [\n colorThemeMixin,\n roundedVariantMixin,\n sizeVariantMixin({\n lg: { fontSize: 'var(--avatar-font-size, var(--text-base))', size: 'var(--avatar-size, var(--size-14))' },\n md: { fontSize: 'var(--avatar-font-size, var(--text-sm))', size: 'var(--avatar-size, var(--size-10))' },\n sm: { fontSize: 'var(--avatar-font-size, var(--text-xs))', size: 'var(--avatar-size, var(--size-7))' },\n }),\n componentStyles,\n ],\n});\n\n// ============================================\n// AvatarGroup\n// ============================================\n\n/** AvatarGroup component properties */\nexport type OreAvatarGroupProps = {\n /** Maximum number of avatars to show before showing a +N badge */\n max?: number;\n /** Total count shown in the overflow badge (defaults to the actual hidden count) */\n total?: number;\n};\n\n/**\n * Groups multiple `ore-avatar` elements in a stacked, overlapping row.\n *\n * @element ore-avatar-group\n *\n * @attr {number} max - Max visible avatars before overflow badge (default: 5)\n * @attr {number} total - Override the total count displayed in the badge\n *\n * @slot - `ore-avatar` elements\n *\n * @cssprop --avatar-group-overlap - Negative margin creating the overlap (default: -0.75rem)\n *\n * @part overflow - Overflow count badge shown when avatars exceed `max`.\n *\n * @example\n * ```html\n * <ore-avatar-group max=\"3\">\n * <ore-avatar src=\"/a.jpg\" alt=\"Alice\"></ore-avatar>\n * <ore-avatar src=\"/b.jpg\" alt=\"Bob\"></ore-avatar>\n * <ore-avatar src=\"/c.jpg\" alt=\"Carol\"></ore-avatar>\n * <ore-avatar src=\"/d.jpg\" alt=\"Dave\"></ore-avatar>\n * </ore-avatar-group>\n * ```\n */\nexport const AVATAR_GROUP_TAG = 'ore-avatar-group' as const;\ndefine<OreAvatarGroupProps>(AVATAR_GROUP_TAG, {\n props: {\n max: prop.number(5),\n total: prop.number(),\n },\n setup(props) {\n const el = getHost();\n const slots = useSlots();\n const watch = watchEffect;\n\n const overflowCount = signal(0);\n\n const updateVisibility = () => {\n const avatars = [...el.querySelectorAll('ore-avatar')];\n const max = Number(props.max.value) || 5;\n const hidden = Math.max(0, avatars.length - max);\n\n overflowCount.value = props.total.value != null ? Number(props.total.value) - max : hidden;\n avatars.forEach((a, i) => {\n if (i >= max) a.setAttribute('data-avatar-group-hidden', '');\n else a.removeAttribute('data-avatar-group-hidden');\n });\n };\n\n watch(() => {\n void slots.elements().value;\n updateVisibility();\n });\n\n const overflowLabel = () => `+${overflowCount.value} more`;\n const overflowText = () => `+${overflowCount.value}`;\n\n return html`\n <slot></slot>\n ${() =>\n overflowCount.value > 0\n ? html`<span class=\"overflow-badge\" part=\"overflow\" aria-label=\"${overflowLabel}\"> ${overflowText} </span>`\n : ''}\n `;\n },\n styles: [groupStyles],\n});\n"],"mappings":"mWAaA,IAAM,EAA8C,CAClD,KAAM,OACN,KAAM,OACN,QAAS,UACT,OAAQ,QACV,EA0Da,EAAa,0BACH,EAAY,CACjC,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,GAAG,EAAA,gBACH,IAAK,EAAA,KAAK,OAAO,EACjB,SAAU,EAAA,KAAK,OAAO,EACtB,IAAK,EAAA,KAAK,OAAO,EACjB,OAAQ,EAAA,KAAK,OAAqB,CACpC,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,OAAA,CAAmB,EAAK,GAG9B,EAAA,EAAA,MAAA,CAAM,EAAM,QAAW,CACrB,EAAU,MAAQ,EACpB,CAAC,EAGD,IAAM,EAAsB,GAAgC,CACrD,IAEL,EAAG,iBAAiB,YAAe,CACjC,EAAU,MAAQ,EACpB,CAAC,EACD,EAAG,iBAAiB,WAAc,CAChC,EAAU,MAAQ,EACpB,CAAC,EACH,EACM,GAAA,EAAA,EAAA,SAAA,KAAiC,CACrC,GAAI,EAAM,SAAS,MAAO,OAAO,EAAM,SAAS,MAAM,MAAM,EAAG,CAAC,EAEhE,IAAM,EAAM,EAAM,IAAI,MAEtB,GAAI,CAAC,EAAK,MAAO,GAEjB,IAAM,EAAQ,EAAI,KAAK,CAAC,CAAC,MAAM,KAAK,EAIpC,OAFI,EAAM,QAAU,GAAW,EAAM,EAAE,CAAC,GAAK,EAAM,EAAM,OAAS,EAAE,CAAC,GAAA,CAAI,YAAY,EAE9E,EAAM,EAAE,CAAC,MAAM,EAAG,CAAC,CAAC,CAAC,YAAY,CAC1C,CAAC,EACK,GAAA,EAAA,EAAA,SAAA,KAA2B,CAAC,CAAC,EAAM,IAAI,OAAS,CAAC,EAAU,KAAK,EAChE,GAAA,EAAA,EAAA,SAAA,KAA8B,CAAC,EAAU,OAAS,CAAC,CAAC,EAAgB,KAAK,EACzE,GAAA,EAAA,EAAA,SAAA,KAA8B,CAAC,EAAU,OAAS,CAAC,EAAa,KAAK,EACrE,MAAoB,CACxB,IAAM,EAAQ,EAAM,IAAI,OAAgC,KAClD,EAAY,EAAM,OAAO,MACzB,EAAS,EAAY,EAAc,GAAa,KAQtD,MANI,CAAC,GAAQ,CAAC,EAAe,KAExB,EAEA,EAEE,GAAG,EAAK,IAAI,IAFC,EAFF,WAAW,GAK/B,EAGA,MAAO,GAAA,IAAI;wDACyC,EAAY,eAHtC,EAAY,EAAI,MAAQ,KAGoC;cAEhF,EAAM,IAAI,MACN,EAAA,IAAI;uBACK,EAAmB;;wBAElB,EAAM,IAAI;wBACV,EAAM,IAAI;+BACD,CAAC,EAAU,MAAM;uCAEpC,GAAG;cAEP,EAAa,MACT,EAAA,IAAI,6DAA6D,EAAgB,SACjF,GAAG;cAEP,EAAa,MACT,EAAA,IAAI,qFACJ,GAAG;;YAGT,EAAM,OAAO,MACT,EAAA,IAAI,oDAAoD,EAAM,OAAO,8BACrE,GAAG;KAEb,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,oBACA,EAAA,iBAAiB,CACf,GAAI,CAAE,SAAU,4CAA6C,KAAM,oCAAqC,EACxG,GAAI,CAAE,SAAU,0CAA2C,KAAM,oCAAqC,EACtG,GAAI,CAAE,SAAU,0CAA2C,KAAM,mCAAoC,CACvG,CAAC,EACD,EAAA,OACF,CACF,CAAC,EAsCD,IAAa,EAAmB,gCACJ,EAAkB,CAC5C,MAAO,CACL,IAAK,EAAA,KAAK,OAAO,CAAC,EAClB,MAAO,EAAA,KAAK,OAAO,CACrB,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,QAAA,CAAa,EACb,GAAA,EAAA,EAAA,SAAA,CAAiB,EACjB,EAAQ,EAAA,YAER,GAAA,EAAA,EAAA,OAAA,CAAuB,CAAC,EAExB,MAAyB,CAC7B,IAAM,EAAU,CAAC,GAAG,EAAG,iBAAiB,YAAY,CAAC,EAC/C,EAAM,OAAO,EAAM,IAAI,KAAK,GAAK,EACjC,EAAS,KAAK,IAAI,EAAG,EAAQ,OAAS,CAAG,EAE/C,EAAc,MAAQ,EAAM,MAAM,OAAS,KAAyC,EAAlC,OAAO,EAAM,MAAM,KAAK,EAAI,EAC9E,EAAQ,SAAS,EAAG,IAAM,CACpB,GAAK,EAAK,EAAE,aAAa,2BAA4B,EAAE,EACtD,EAAE,gBAAgB,0BAA0B,CACnD,CAAC,CACH,EAEA,MAAY,CACV,EAAW,SAAS,CAAC,CAAC,MACtB,EAAiB,CACnB,CAAC,EAED,IAAM,MAAsB,IAAI,EAAc,MAAM,OAC9C,MAAqB,IAAI,EAAc,QAE7C,MAAO,GAAA,IAAI;;YAGP,EAAc,MAAQ,EAClB,EAAA,IAAI,4DAA4D,EAAc,KAAK,EAAa,UAChG,GAAG;KAEb,EACA,OAAQ,CAAC,EAAA,OAAW,CACtB,CAAC"}
package/dist/avatar.js CHANGED
@@ -1,30 +1,30 @@
1
1
  import { roundedVariantMixin as e, sizeVariantMixin as t } from "./styles/mixins/shape.css.js";
2
2
  import { colorThemeMixin as n } from "./styles/mixins/theme.css.js";
3
3
  import { roundableBundle as r, sizableBundle as i, themableBundle as a } from "./shared/prop-bundles.js";
4
- import o from "./content/avatar/avatar-group.css?inline.js";
5
- import s from "./content/avatar/avatar.css?inline.js";
6
- import { define as c, html as l, prop as u } from "@vielzeug/ore";
7
- import { computed as d, signal as f, watch as p } from "@vielzeug/ripple";
4
+ import o from "./content/avatar/avatar-group.css.js";
5
+ import s from "./content/avatar/avatar.css.js";
6
+ import { define as c, getHost as l, html as u, prop as d, useSlots as f, watchEffect as p } from "@vielzeug/ore";
7
+ import { computed as m, signal as h, watch as g } from "@vielzeug/ripple";
8
8
  //#region src/content/avatar/avatar.ts
9
- var m = {
9
+ var _ = {
10
10
  away: "Away",
11
11
  busy: "Busy",
12
12
  offline: "Offline",
13
13
  online: "Online"
14
- }, h = "ore-avatar";
15
- c(h, {
14
+ }, v = "ore-avatar";
15
+ c(v, {
16
16
  props: {
17
17
  ...a,
18
18
  ...i,
19
19
  ...r,
20
- alt: u.string(),
21
- initials: u.string(),
22
- src: u.string(),
23
- status: u.string()
20
+ alt: d.string(),
21
+ initials: d.string(),
22
+ src: d.string(),
23
+ status: d.string()
24
24
  },
25
25
  setup(e) {
26
- let t = f(!1);
27
- p(e.src, () => {
26
+ let t = h(!1);
27
+ g(e.src, () => {
28
28
  t.value = !1;
29
29
  });
30
30
  let n = (e) => {
@@ -33,29 +33,29 @@ c(h, {
33
33
  }), e.addEventListener("load", () => {
34
34
  t.value = !1;
35
35
  }));
36
- }, r = d(() => {
36
+ }, r = m(() => {
37
37
  if (e.initials.value) return e.initials.value.slice(0, 2);
38
38
  let t = e.alt.value;
39
39
  if (!t) return "";
40
40
  let n = t.trim().split(/\s+/);
41
41
  return n.length >= 2 ? (n[0][0] + n[n.length - 1][0]).toUpperCase() : n[0].slice(0, 2).toUpperCase();
42
- }), i = d(() => !!e.src.value && !t.value), a = d(() => !i.value && !!r.value), o = d(() => !i.value && !a.value), s = () => {
43
- let t = e.alt.value || null, n = e.status.value, r = n ? m[n] : null;
42
+ }), i = m(() => !!e.src.value && !t.value), a = m(() => !i.value && !!r.value), o = m(() => !i.value && !a.value), s = () => {
43
+ let t = e.alt.value || null, n = e.status.value, r = n ? _[n] : null;
44
44
  return !t && !r ? null : t ? r ? `${t}, ${r}` : t : `Status: ${r}`;
45
45
  };
46
- return l`
46
+ return u`
47
47
  <span class="avatar" part="avatar" :aria-label="${s}" :role="${() => s() ? "img" : null}">
48
- ${() => e.src.value ? l`<img
48
+ ${() => e.src.value ? u`<img
49
49
  ref="${n}"
50
50
  part="img"
51
51
  :src="${e.src}"
52
52
  :alt="${e.alt}"
53
53
  ?hidden="${() => !i.value}"
54
54
  aria-hidden="true" />` : ""}
55
- ${() => a.value ? l`<span class="initials" part="initials" aria-hidden="true">${r}</span>` : ""}
56
- ${() => o.value ? l`<ore-icon class="icon-fallback" part="fallback" name="user" size="50%"></ore-icon>` : ""}
55
+ ${() => a.value ? u`<span class="initials" part="initials" aria-hidden="true">${r}</span>` : ""}
56
+ ${() => o.value ? u`<ore-icon class="icon-fallback" part="fallback" name="user" size="50%"></ore-icon>` : ""}
57
57
  </span>
58
- ${() => e.status.value ? l`<span class="status" part="status" :data-status="${e.status}" aria-hidden="true"></span>` : ""}
58
+ ${() => e.status.value ? u`<span class="status" part="status" :data-status="${e.status}" aria-hidden="true"></span>` : ""}
59
59
  `;
60
60
  },
61
61
  styles: [
@@ -78,14 +78,14 @@ c(h, {
78
78
  s
79
79
  ]
80
80
  });
81
- var g = "ore-avatar-group";
82
- c(g, {
81
+ var y = "ore-avatar-group";
82
+ c(y, {
83
83
  props: {
84
- max: u.number(5),
85
- total: u.number()
84
+ max: d.number(5),
85
+ total: d.number()
86
86
  },
87
- setup(e, { el: t, slots: n, watch: r }) {
88
- let i = f(0), a = () => {
87
+ setup(e) {
88
+ let t = l(), n = f(), r = p, i = h(0), a = () => {
89
89
  let n = [...t.querySelectorAll("ore-avatar")], r = Number(e.max.value) || 5, a = Math.max(0, n.length - r);
90
90
  i.value = e.total.value == null ? a : Number(e.total.value) - r, n.forEach((e, t) => {
91
91
  t >= r ? e.setAttribute("data-avatar-group-hidden", "") : e.removeAttribute("data-avatar-group-hidden");
@@ -95,14 +95,14 @@ c(g, {
95
95
  n.elements().value, a();
96
96
  });
97
97
  let o = () => `+${i.value} more`, s = () => `+${i.value}`;
98
- return l`
98
+ return u`
99
99
  <slot></slot>
100
- ${() => i.value > 0 ? l`<span class="overflow-badge" part="overflow" aria-label="${o}"> ${s} </span>` : ""}
100
+ ${() => i.value > 0 ? u`<span class="overflow-badge" part="overflow" aria-label="${o}"> ${s} </span>` : ""}
101
101
  `;
102
102
  },
103
103
  styles: [o]
104
104
  });
105
105
  //#endregion
106
- export { g as AVATAR_GROUP_TAG, h as AVATAR_TAG };
106
+ export { y as AVATAR_GROUP_TAG, v as AVATAR_TAG };
107
107
 
108
108
  //# sourceMappingURL=avatar.js.map