@vielzeug/refine 26.10.0 → 26.10.1

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 (463) hide show
  1. package/README.md +1 -1
  2. package/dist/accordion-item.cjs.map +1 -1
  3. package/dist/accordion-item.js.map +1 -1
  4. package/dist/accordion.cjs.map +1 -1
  5. package/dist/accordion.js.map +1 -1
  6. package/dist/async.cjs.map +1 -1
  7. package/dist/async.js.map +1 -1
  8. package/dist/badge.cjs.map +1 -1
  9. package/dist/badge.js.map +1 -1
  10. package/dist/box.cjs.map +1 -1
  11. package/dist/box.js.map +1 -1
  12. package/dist/button.cjs +3 -3
  13. package/dist/button.cjs.map +1 -1
  14. package/dist/button.js +3 -3
  15. package/dist/button.js.map +1 -1
  16. package/dist/calendar.cjs.map +1 -1
  17. package/dist/calendar.js.map +1 -1
  18. package/dist/carousel.cjs.map +1 -1
  19. package/dist/carousel.js.map +1 -1
  20. package/dist/chat-message.cjs.map +1 -1
  21. package/dist/chat-message.js.map +1 -1
  22. package/dist/chat-panel.cjs.map +1 -1
  23. package/dist/chat-panel.js.map +1 -1
  24. package/dist/checkbox-group.cjs.map +1 -1
  25. package/dist/checkbox-group.js.map +1 -1
  26. package/dist/chip.cjs.map +1 -1
  27. package/dist/chip.js.map +1 -1
  28. package/dist/code-window.cjs.map +1 -1
  29. package/dist/code-window.js.map +1 -1
  30. package/dist/combobox.cjs.map +1 -1
  31. package/dist/combobox.js.map +1 -1
  32. package/dist/command-palette.cjs.map +1 -1
  33. package/dist/command-palette.js.map +1 -1
  34. package/dist/content/card/card.css.cjs.map +1 -1
  35. package/dist/content/card/card.css.js.map +1 -1
  36. package/dist/content/carousel/carousel-slide.css.cjs.map +1 -1
  37. package/dist/content/carousel/carousel-slide.css.js.map +1 -1
  38. package/dist/content/carousel/carousel.css.cjs.map +1 -1
  39. package/dist/content/carousel/carousel.css.js.map +1 -1
  40. package/dist/content/carousel/carousel.d.ts +5 -5
  41. package/dist/content/chat-message/chat-message.css.cjs +1 -1
  42. package/dist/content/chat-message/chat-message.css.cjs.map +1 -1
  43. package/dist/content/chat-message/chat-message.css.js +1 -1
  44. package/dist/content/chat-message/chat-message.css.js.map +1 -1
  45. package/dist/content/chat-message/chat-message.d.ts +4 -4
  46. package/dist/content/chat-message/chat-message.d.ts.map +1 -1
  47. package/dist/content/chat-panel/chat-panel.d.ts +1 -1
  48. package/dist/content/code-window/code-window.css.cjs.map +1 -1
  49. package/dist/content/code-window/code-window.css.js.map +1 -1
  50. package/dist/content/code-window/code-window.d.ts +4 -4
  51. package/dist/content/index.d.ts +4 -0
  52. package/dist/content/index.d.ts.map +1 -1
  53. package/dist/content/list/_list-item-reveal.cjs.map +1 -1
  54. package/dist/content/list/_list-item-reveal.d.ts +4 -4
  55. package/dist/content/list/_list-item-reveal.d.ts.map +1 -1
  56. package/dist/content/list/_list-item-reveal.js.map +1 -1
  57. package/dist/content/list/list-item.css.cjs.map +1 -1
  58. package/dist/content/list/list-item.css.js.map +1 -1
  59. package/dist/content/list/list-item.d.ts +8 -8
  60. package/dist/content/list/list-item.d.ts.map +1 -1
  61. package/dist/content/list/list.d.ts +8 -8
  62. package/dist/content/list/list.d.ts.map +1 -1
  63. package/dist/content/qr-code/qr-code.d.ts +1 -1
  64. package/dist/content/rank-list/rank-item.css.cjs +2 -0
  65. package/dist/content/rank-list/rank-item.css.cjs.map +1 -0
  66. package/dist/content/rank-list/rank-item.css.js +2 -0
  67. package/dist/content/rank-list/rank-item.css.js.map +1 -0
  68. package/dist/content/rank-list/rank-item.d.ts +68 -0
  69. package/dist/content/rank-list/rank-item.d.ts.map +1 -0
  70. package/dist/content/rank-list/rank-list.css.cjs +2 -0
  71. package/dist/content/rank-list/rank-list.css.cjs.map +1 -0
  72. package/dist/content/rank-list/rank-list.css.js +2 -0
  73. package/dist/content/rank-list/rank-list.css.js.map +1 -0
  74. package/dist/content/rank-list/rank-list.d.ts +44 -0
  75. package/dist/content/rank-list/rank-list.d.ts.map +1 -0
  76. package/dist/content/separator/separator.d.ts +1 -1
  77. package/dist/content/separator/separator.d.ts.map +1 -1
  78. package/dist/content/speech-player/speech-player.css.cjs.map +1 -1
  79. package/dist/content/speech-player/speech-player.css.js.map +1 -1
  80. package/dist/content/speech-player/speech-player.d.ts +12 -12
  81. package/dist/content/speech-player/speech-player.d.ts.map +1 -1
  82. package/dist/content/stepper/step.css.cjs.map +1 -1
  83. package/dist/content/stepper/step.css.js.map +1 -1
  84. package/dist/content/stepper/step.d.ts +3 -3
  85. package/dist/content/stepper/step.d.ts.map +1 -1
  86. package/dist/content/stepper/stepper.css.cjs.map +1 -1
  87. package/dist/content/stepper/stepper.css.js.map +1 -1
  88. package/dist/content/stepper/stepper.d.ts +3 -3
  89. package/dist/content/stepper/stepper.d.ts.map +1 -1
  90. package/dist/content/table/table.css.cjs.map +1 -1
  91. package/dist/content/table/table.css.js.map +1 -1
  92. package/dist/content/table/table.d.ts +3 -3
  93. package/dist/content/table/table.d.ts.map +1 -1
  94. package/dist/content/text/text.css.cjs.map +1 -1
  95. package/dist/content/text/text.css.js.map +1 -1
  96. package/dist/content/text/text.d.ts +2 -2
  97. package/dist/content/text/text.d.ts.map +1 -1
  98. package/dist/cookie-banner.cjs.map +1 -1
  99. package/dist/cookie-banner.js.map +1 -1
  100. package/dist/copy-command.cjs +1 -1
  101. package/dist/copy-command.cjs.map +1 -1
  102. package/dist/copy-command.js +1 -1
  103. package/dist/copy-command.js.map +1 -1
  104. package/dist/core/announcer.cjs.map +1 -1
  105. package/dist/core/announcer.d.ts +2 -2
  106. package/dist/core/announcer.js.map +1 -1
  107. package/dist/core/aria-reflection.cjs.map +1 -1
  108. package/dist/core/aria-reflection.d.ts +3 -3
  109. package/dist/core/aria-reflection.js.map +1 -1
  110. package/dist/core/auto-resize.cjs.map +1 -1
  111. package/dist/core/auto-resize.d.ts +1 -1
  112. package/dist/core/auto-resize.js.map +1 -1
  113. package/dist/core/checkable.cjs.map +1 -1
  114. package/dist/core/checkable.d.ts +2 -2
  115. package/dist/core/checkable.d.ts.map +1 -1
  116. package/dist/core/checkable.js.map +1 -1
  117. package/dist/core/choice-field.cjs.map +1 -1
  118. package/dist/core/choice-field.d.ts +3 -3
  119. package/dist/core/choice-field.d.ts.map +1 -1
  120. package/dist/core/choice-field.js.map +1 -1
  121. package/dist/core/composer.cjs.map +1 -1
  122. package/dist/core/composer.d.ts +4 -4
  123. package/dist/core/composer.d.ts.map +1 -1
  124. package/dist/core/composer.js.map +1 -1
  125. package/dist/core/date-picker.cjs.map +1 -1
  126. package/dist/core/date-picker.d.ts +5 -5
  127. package/dist/core/date-picker.d.ts.map +1 -1
  128. package/dist/core/date-picker.js.map +1 -1
  129. package/dist/core/direction.cjs.map +1 -1
  130. package/dist/core/direction.d.ts +1 -1
  131. package/dist/core/direction.js.map +1 -1
  132. package/dist/core/field-base.cjs.map +1 -1
  133. package/dist/core/field-base.d.ts +9 -9
  134. package/dist/core/field-base.d.ts.map +1 -1
  135. package/dist/core/field-base.js.map +1 -1
  136. package/dist/core/focus.cjs.map +1 -1
  137. package/dist/core/focus.d.ts +1 -1
  138. package/dist/core/focus.js.map +1 -1
  139. package/dist/core/icon-registry.cjs.map +1 -1
  140. package/dist/core/icon-registry.d.ts +1 -1
  141. package/dist/core/icon-registry.js.map +1 -1
  142. package/dist/core/icons.cjs.map +1 -1
  143. package/dist/core/icons.js.map +1 -1
  144. package/dist/core/keyboard.cjs.map +1 -1
  145. package/dist/core/keyboard.d.ts +1 -1
  146. package/dist/core/keyboard.js.map +1 -1
  147. package/dist/core/numbers.cjs.map +1 -1
  148. package/dist/core/numbers.d.ts +1 -1
  149. package/dist/core/numbers.js.map +1 -1
  150. package/dist/core/overlay.cjs.map +1 -1
  151. package/dist/core/overlay.d.ts +6 -6
  152. package/dist/core/overlay.js.map +1 -1
  153. package/dist/core/parse.cjs.map +1 -1
  154. package/dist/core/parse.d.ts +1 -1
  155. package/dist/core/parse.js.map +1 -1
  156. package/dist/core/positioner.cjs.map +1 -1
  157. package/dist/core/positioner.d.ts +3 -3
  158. package/dist/core/positioner.js.map +1 -1
  159. package/dist/core/ref-callback.cjs.map +1 -1
  160. package/dist/core/ref-callback.d.ts +2 -2
  161. package/dist/core/ref-callback.d.ts.map +1 -1
  162. package/dist/core/ref-callback.js.map +1 -1
  163. package/dist/core/text-field.cjs.map +1 -1
  164. package/dist/core/text-field.d.ts +6 -6
  165. package/dist/core/text-field.d.ts.map +1 -1
  166. package/dist/core/text-field.js.map +1 -1
  167. package/dist/counter.cjs +1 -0
  168. package/dist/counter.cjs.map +1 -1
  169. package/dist/counter.js +1 -0
  170. package/dist/counter.js.map +1 -1
  171. package/dist/custom-elements.json +315 -87
  172. package/dist/datagrid.cjs.map +1 -1
  173. package/dist/datagrid.js.map +1 -1
  174. package/dist/date-picker.cjs +1 -1
  175. package/dist/date-picker.cjs.map +1 -1
  176. package/dist/date-picker.js +1 -1
  177. package/dist/date-picker.js.map +1 -1
  178. package/dist/dialog.cjs.map +1 -1
  179. package/dist/dialog.js.map +1 -1
  180. package/dist/disclosure/accordion-item/accordion-item.css.cjs +1 -1
  181. package/dist/disclosure/accordion-item/accordion-item.css.cjs.map +1 -1
  182. package/dist/disclosure/accordion-item/accordion-item.css.js +1 -1
  183. package/dist/disclosure/accordion-item/accordion-item.css.js.map +1 -1
  184. package/dist/disclosure/tab-item/tab-item.d.ts +1 -1
  185. package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -1
  186. package/dist/drawer.cjs.map +1 -1
  187. package/dist/drawer.js.map +1 -1
  188. package/dist/feedback/alert/alert.css.cjs.map +1 -1
  189. package/dist/feedback/alert/alert.css.js.map +1 -1
  190. package/dist/feedback/badge/badge.css.cjs.map +1 -1
  191. package/dist/feedback/badge/badge.css.js.map +1 -1
  192. package/dist/feedback/badge/badge.d.ts +1 -1
  193. package/dist/feedback/badge/badge.d.ts.map +1 -1
  194. package/dist/feedback/chip/chip.css.cjs.map +1 -1
  195. package/dist/feedback/chip/chip.css.js.map +1 -1
  196. package/dist/feedback/chip/chip.d.ts +3 -3
  197. package/dist/feedback/chip/chip.d.ts.map +1 -1
  198. package/dist/feedback/cookie-banner/cookie-banner.css.cjs.map +1 -1
  199. package/dist/feedback/cookie-banner/cookie-banner.css.js.map +1 -1
  200. package/dist/feedback/cookie-banner/cookie-banner.d.ts +8 -8
  201. package/dist/feedback/cookie-banner/cookie-banner.d.ts.map +1 -1
  202. package/dist/feedback/progress/progress.css.cjs.map +1 -1
  203. package/dist/feedback/progress/progress.css.js.map +1 -1
  204. package/dist/feedback/progress/progress.d.ts +1 -1
  205. package/dist/feedback/progress/progress.d.ts.map +1 -1
  206. package/dist/feedback/skeleton/skeleton.css.cjs.map +1 -1
  207. package/dist/feedback/skeleton/skeleton.css.js.map +1 -1
  208. package/dist/feedback/skeleton/skeleton.d.ts +1 -1
  209. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -1
  210. package/dist/feedback/toast/toast.css.cjs +1 -1
  211. package/dist/feedback/toast/toast.css.cjs.map +1 -1
  212. package/dist/feedback/toast/toast.css.js +1 -1
  213. package/dist/feedback/toast/toast.css.js.map +1 -1
  214. package/dist/feedback/toast/toast.d.ts +1 -1
  215. package/dist/feedback/toast/toast.d.ts.map +1 -1
  216. package/dist/feedback/typing-indicator/typing-indicator.d.ts +2 -2
  217. package/dist/file-input.cjs +1 -1
  218. package/dist/file-input.cjs.map +1 -1
  219. package/dist/file-input.js +1 -1
  220. package/dist/file-input.js.map +1 -1
  221. package/dist/frameworks/elements.d.ts +1 -1
  222. package/dist/grid-item.cjs.map +1 -1
  223. package/dist/grid-item.js.map +1 -1
  224. package/dist/grid.cjs.map +1 -1
  225. package/dist/grid.js.map +1 -1
  226. package/dist/icon.cjs.map +1 -1
  227. package/dist/icon.js.map +1 -1
  228. package/dist/input.cjs.map +1 -1
  229. package/dist/input.js.map +1 -1
  230. package/dist/inputs/button/button.css.cjs.map +1 -1
  231. package/dist/inputs/button/button.css.js.map +1 -1
  232. package/dist/inputs/button/button.d.ts +3 -3
  233. package/dist/inputs/button/button.d.ts.map +1 -1
  234. package/dist/inputs/calendar/calendar.css.cjs.map +1 -1
  235. package/dist/inputs/calendar/calendar.css.js.map +1 -1
  236. package/dist/inputs/calendar/calendar.d.ts +2 -2
  237. package/dist/inputs/checkbox-group/checkbox-group.d.ts +2 -2
  238. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
  239. package/dist/inputs/combobox/combobox.css.cjs.map +1 -1
  240. package/dist/inputs/combobox/combobox.css.js.map +1 -1
  241. package/dist/inputs/counter/counter.css.cjs +1 -1
  242. package/dist/inputs/counter/counter.css.cjs.map +1 -1
  243. package/dist/inputs/counter/counter.css.js +1 -1
  244. package/dist/inputs/counter/counter.css.js.map +1 -1
  245. package/dist/inputs/counter/counter.d.ts +2 -1
  246. package/dist/inputs/counter/counter.d.ts.map +1 -1
  247. package/dist/inputs/datagrid/datagrid.css.cjs.map +1 -1
  248. package/dist/inputs/datagrid/datagrid.css.js.map +1 -1
  249. package/dist/inputs/datagrid/datagrid.d.ts +5 -5
  250. package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -1
  251. package/dist/inputs/date-picker/date-picker.css.js.map +1 -1
  252. package/dist/inputs/date-picker/date-picker.d.ts +1 -1
  253. package/dist/inputs/file-input/file-input-upload.cjs.map +1 -1
  254. package/dist/inputs/file-input/file-input-upload.d.ts +6 -6
  255. package/dist/inputs/file-input/file-input-upload.js.map +1 -1
  256. package/dist/inputs/file-input/file-input.css.cjs.map +1 -1
  257. package/dist/inputs/file-input/file-input.css.js.map +1 -1
  258. package/dist/inputs/file-input/file-input.d.ts +6 -6
  259. package/dist/inputs/input/input.css.cjs +1 -1
  260. package/dist/inputs/input/input.css.cjs.map +1 -1
  261. package/dist/inputs/input/input.css.js +1 -1
  262. package/dist/inputs/input/input.css.js.map +1 -1
  263. package/dist/inputs/input/input.d.ts +6 -6
  264. package/dist/inputs/input/input.d.ts.map +1 -1
  265. package/dist/inputs/message-composer/message-composer.css.cjs.map +1 -1
  266. package/dist/inputs/message-composer/message-composer.css.js.map +1 -1
  267. package/dist/inputs/message-composer/message-composer.d.ts +7 -7
  268. package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
  269. package/dist/inputs/number-input/number-input.css.cjs.map +1 -1
  270. package/dist/inputs/number-input/number-input.css.js.map +1 -1
  271. package/dist/inputs/number-input/number-input.d.ts +2 -2
  272. package/dist/inputs/otp-input/otp-input.css.cjs.map +1 -1
  273. package/dist/inputs/otp-input/otp-input.css.js.map +1 -1
  274. package/dist/inputs/qr-scanner/qr-scanner.d.ts +1 -1
  275. package/dist/inputs/qr-scanner/qr-scanner.d.ts.map +1 -1
  276. package/dist/inputs/rating/rating.d.ts +1 -1
  277. package/dist/inputs/rating/rating.d.ts.map +1 -1
  278. package/dist/inputs/select/select.css.cjs +1 -1
  279. package/dist/inputs/select/select.css.cjs.map +1 -1
  280. package/dist/inputs/select/select.css.js +1 -1
  281. package/dist/inputs/select/select.css.js.map +1 -1
  282. package/dist/inputs/select/select.d.ts +1 -1
  283. package/dist/inputs/select/select.d.ts.map +1 -1
  284. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  285. package/dist/inputs/shared/field-binding.d.ts +2 -2
  286. package/dist/inputs/shared/field-binding.d.ts.map +1 -1
  287. package/dist/inputs/shared/field-binding.js.map +1 -1
  288. package/dist/inputs/shared/native-field-event.cjs.map +1 -1
  289. package/dist/inputs/shared/native-field-event.d.ts +1 -1
  290. package/dist/inputs/shared/native-field-event.js.map +1 -1
  291. package/dist/inputs/shared/templates.cjs.map +1 -1
  292. package/dist/inputs/shared/templates.d.ts +3 -3
  293. package/dist/inputs/shared/templates.js.map +1 -1
  294. package/dist/inputs/slider/slider.css.cjs.map +1 -1
  295. package/dist/inputs/slider/slider.css.js.map +1 -1
  296. package/dist/inputs/slider/slider.d.ts +1 -1
  297. package/dist/inputs/slider/slider.d.ts.map +1 -1
  298. package/dist/inputs/textarea/textarea.css.cjs.map +1 -1
  299. package/dist/inputs/textarea/textarea.css.js.map +1 -1
  300. package/dist/inputs/textarea/textarea.d.ts +1 -1
  301. package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -1
  302. package/dist/inputs/time-picker/time-picker.css.js.map +1 -1
  303. package/dist/inputs/time-picker/time-picker.d.ts +1 -1
  304. package/dist/layout/box/box.css.cjs.map +1 -1
  305. package/dist/layout/box/box.css.js.map +1 -1
  306. package/dist/layout/box/box.d.ts +1 -1
  307. package/dist/layout/grid/grid.d.ts +1 -1
  308. package/dist/layout/grid-item/grid-item.d.ts +3 -3
  309. package/dist/layout/grid-item/grid-item.d.ts.map +1 -1
  310. package/dist/layout/navbar/navbar.css.cjs +1 -1
  311. package/dist/layout/navbar/navbar.css.cjs.map +1 -1
  312. package/dist/layout/navbar/navbar.css.js +1 -1
  313. package/dist/layout/navbar/navbar.css.js.map +1 -1
  314. package/dist/layout/navbar/navbar.d.ts +3 -3
  315. package/dist/layout/sidebar/sidebar-item.css.cjs.map +1 -1
  316. package/dist/layout/sidebar/sidebar-item.css.js.map +1 -1
  317. package/dist/layout/sidebar/sidebar.d.ts +5 -5
  318. package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
  319. package/dist/list-item.cjs.map +1 -1
  320. package/dist/list-item.js.map +1 -1
  321. package/dist/list.cjs.map +1 -1
  322. package/dist/list.js.map +1 -1
  323. package/dist/menu.cjs +6 -5
  324. package/dist/menu.cjs.map +1 -1
  325. package/dist/menu.js +6 -5
  326. package/dist/menu.js.map +1 -1
  327. package/dist/message-composer.cjs.map +1 -1
  328. package/dist/message-composer.js.map +1 -1
  329. package/dist/navbar.cjs.map +1 -1
  330. package/dist/navbar.js.map +1 -1
  331. package/dist/number-input.cjs.map +1 -1
  332. package/dist/number-input.js.map +1 -1
  333. package/dist/otp-input.cjs.map +1 -1
  334. package/dist/otp-input.js.map +1 -1
  335. package/dist/overlay/command-palette/command-palette-items.cjs.map +1 -1
  336. package/dist/overlay/command-palette/command-palette-items.d.ts +1 -1
  337. package/dist/overlay/command-palette/command-palette-items.js.map +1 -1
  338. package/dist/overlay/command-palette/command-palette.css.cjs.map +1 -1
  339. package/dist/overlay/command-palette/command-palette.css.js.map +1 -1
  340. package/dist/overlay/command-palette/command-palette.d.ts +3 -3
  341. package/dist/overlay/command-palette/command-palette.types.d.ts +6 -6
  342. package/dist/overlay/command-palette/command-palette.types.d.ts.map +1 -1
  343. package/dist/overlay/dialog/dialog.css.cjs +1 -1
  344. package/dist/overlay/dialog/dialog.css.cjs.map +1 -1
  345. package/dist/overlay/dialog/dialog.css.js +1 -1
  346. package/dist/overlay/dialog/dialog.css.js.map +1 -1
  347. package/dist/overlay/dialog/dialog.d.ts +2 -2
  348. package/dist/overlay/dialog/dialog.d.ts.map +1 -1
  349. package/dist/overlay/drawer/drawer.css.cjs.map +1 -1
  350. package/dist/overlay/drawer/drawer.css.js.map +1 -1
  351. package/dist/overlay/drawer/drawer.d.ts +1 -1
  352. package/dist/overlay/drawer/drawer.d.ts.map +1 -1
  353. package/dist/overlay/menu/menu-item.css.cjs.map +1 -1
  354. package/dist/overlay/menu/menu-item.css.js.map +1 -1
  355. package/dist/overlay/menu/menu.d.ts.map +1 -1
  356. package/dist/overlay/shared/use-dialog.cjs.map +1 -1
  357. package/dist/overlay/shared/use-dialog.d.ts +6 -6
  358. package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
  359. package/dist/overlay/shared/use-dialog.js.map +1 -1
  360. package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
  361. package/dist/overlay/shared/use-floating-trigger.d.ts +1 -1
  362. package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
  363. package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
  364. package/dist/overlay/tooltip/tooltip.css.cjs.map +1 -1
  365. package/dist/overlay/tooltip/tooltip.css.js.map +1 -1
  366. package/dist/progress.cjs.map +1 -1
  367. package/dist/progress.js.map +1 -1
  368. package/dist/qr-code.cjs.map +1 -1
  369. package/dist/qr-code.js.map +1 -1
  370. package/dist/qr-scanner.cjs.map +1 -1
  371. package/dist/qr-scanner.js.map +1 -1
  372. package/dist/radio-group.cjs.map +1 -1
  373. package/dist/radio-group.js.map +1 -1
  374. package/dist/radio.cjs.map +1 -1
  375. package/dist/radio.js.map +1 -1
  376. package/dist/rank-item.cjs +21 -0
  377. package/dist/rank-item.cjs.map +1 -0
  378. package/dist/rank-item.js +21 -0
  379. package/dist/rank-item.js.map +1 -0
  380. package/dist/rank-list.cjs +4 -0
  381. package/dist/rank-list.cjs.map +1 -0
  382. package/dist/rank-list.js +4 -0
  383. package/dist/rank-list.js.map +1 -0
  384. package/dist/rating.cjs.map +1 -1
  385. package/dist/rating.js.map +1 -1
  386. package/dist/refine.cjs +103 -80
  387. package/dist/refine.cjs.map +1 -1
  388. package/dist/refine.iife.js +103 -80
  389. package/dist/refine.iife.js.map +1 -1
  390. package/dist/refine.js +104 -81
  391. package/dist/refine.js.map +1 -1
  392. package/dist/select.cjs.map +1 -1
  393. package/dist/select.js.map +1 -1
  394. package/dist/separator.cjs.map +1 -1
  395. package/dist/separator.js.map +1 -1
  396. package/dist/shared/index.d.ts +3 -3
  397. package/dist/shared/size-presets.cjs.map +1 -1
  398. package/dist/shared/size-presets.d.ts +4 -4
  399. package/dist/shared/size-presets.js.map +1 -1
  400. package/dist/shared/types.d.ts +1 -1
  401. package/dist/sidebar.cjs.map +1 -1
  402. package/dist/sidebar.js.map +1 -1
  403. package/dist/skeleton.cjs.map +1 -1
  404. package/dist/skeleton.js.map +1 -1
  405. package/dist/slider.cjs.map +1 -1
  406. package/dist/slider.js.map +1 -1
  407. package/dist/speech-player.cjs.map +1 -1
  408. package/dist/speech-player.js.map +1 -1
  409. package/dist/step.cjs.map +1 -1
  410. package/dist/step.js.map +1 -1
  411. package/dist/stepper.cjs.map +1 -1
  412. package/dist/stepper.js.map +1 -1
  413. package/dist/styles/fouc.css +2 -2
  414. package/dist/styles/mixins/accessibility.css.cjs.map +1 -1
  415. package/dist/styles/mixins/accessibility.css.d.ts +4 -4
  416. package/dist/styles/mixins/accessibility.css.js.map +1 -1
  417. package/dist/styles/mixins/animation.css.cjs +2 -2
  418. package/dist/styles/mixins/animation.css.cjs.map +1 -1
  419. package/dist/styles/mixins/animation.css.d.ts +4 -4
  420. package/dist/styles/mixins/animation.css.js +2 -2
  421. package/dist/styles/mixins/animation.css.js.map +1 -1
  422. package/dist/styles/mixins/field-variants.css.cjs +2 -2
  423. package/dist/styles/mixins/field-variants.css.cjs.map +1 -1
  424. package/dist/styles/mixins/field-variants.css.d.ts +6 -6
  425. package/dist/styles/mixins/field-variants.css.d.ts.map +1 -1
  426. package/dist/styles/mixins/field-variants.css.js +2 -2
  427. package/dist/styles/mixins/field-variants.css.js.map +1 -1
  428. package/dist/styles/mixins/shape.css.cjs.map +1 -1
  429. package/dist/styles/mixins/shape.css.d.ts +9 -9
  430. package/dist/styles/mixins/shape.css.d.ts.map +1 -1
  431. package/dist/styles/mixins/shape.css.js.map +1 -1
  432. package/dist/styles/mixins/variants.css.cjs.map +1 -1
  433. package/dist/styles/mixins/variants.css.d.ts +1 -1
  434. package/dist/styles/mixins/variants.css.js.map +1 -1
  435. package/dist/styles/theme.css +36 -28
  436. package/dist/tab-item.cjs.map +1 -1
  437. package/dist/tab-item.js.map +1 -1
  438. package/dist/tab-panel.cjs.map +1 -1
  439. package/dist/tab-panel.js.map +1 -1
  440. package/dist/table.cjs.map +1 -1
  441. package/dist/table.js.map +1 -1
  442. package/dist/text.cjs.map +1 -1
  443. package/dist/text.js.map +1 -1
  444. package/dist/textarea.cjs.map +1 -1
  445. package/dist/textarea.js.map +1 -1
  446. package/dist/theme.cjs.map +1 -1
  447. package/dist/theme.d.ts +2 -2
  448. package/dist/theme.js.map +1 -1
  449. package/dist/time-picker.cjs +1 -1
  450. package/dist/time-picker.cjs.map +1 -1
  451. package/dist/time-picker.js +1 -1
  452. package/dist/time-picker.js.map +1 -1
  453. package/dist/toast.cjs.map +1 -1
  454. package/dist/toast.js.map +1 -1
  455. package/dist/types/elements.d.ts +6 -2
  456. package/dist/typing-indicator.cjs.map +1 -1
  457. package/dist/typing-indicator.js.map +1 -1
  458. package/dist/utils/css.cjs.map +1 -1
  459. package/dist/utils/css.js.map +1 -1
  460. package/dist/utils/link.cjs.map +1 -1
  461. package/dist/utils/link.d.ts +2 -2
  462. package/dist/utils/link.js.map +1 -1
  463. package/package.json +31 -14
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.css.cjs","names":[],"sources":["../../../src/content/carousel/carousel.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--carousel-bg, var(--color-canvas));\n --_radius: var(--carousel-radius, var(--rounded-xl));\n --_dot-bg: var(--carousel-dot-bg, var(--color-contrast-300));\n --_dot-active-bg: var(--carousel-dot-active-bg, var(--color-contrast-700));\n\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: var(--carousel-min-height, 240px);\n overflow: hidden;\n touch-action: auto;\n outline: none;\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n /* ── Track ──────────────────────────────────────────────────────── */\n\n .track {\n position: relative;\n flex: 1 1 auto;\n width: 100%;\n min-height: 0;\n }\n\n /* ── Controls (prev / next) ────────────────────────────────────────────── */\n\n /* Controls live inside the bottom nav bar, right-aligned via margin-inline-start: auto. */\n\n .controls {\n display: flex;\n gap: var(--size-0-5);\n align-items: center;\n margin-inline-start: auto;\n pointer-events: none;\n }\n\n /* Controls rendered standalone (no indicators bar) — needs own positioning + backdrop. */\n :host > .controls {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n padding: var(--size-1-5) var(--size-2);\n margin-inline-start: 0;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n }\n\n .nav-btn {\n pointer-events: auto;\n }\n\n /* ── Variant-specific track styles ────────────────────────────────────── */\n\n /* Gallery: flex row, fills host, shows active + two thumbnails */\n :host([variant='gallery']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-gallery-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='gallery'][orientation='vertical']) .track {\n flex-direction: column;\n align-items: stretch;\n }\n\n /* Filmstrip: flex row/column with absolute positioning to fill host */\n :host([variant='filmstrip']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-filmstrip-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='filmstrip'][orientation='vertical']) .track {\n flex-direction: column;\n width: 100%;\n }\n\n /* ── Vertical orientation ──────────────────────────────────────────────── */\n\n :host([orientation='vertical']) {\n --_slide-translate-before: translateY(-100%);\n --_slide-translate-after: translateY(100%);\n }\n\n :host([orientation='vertical']) .indicators {\n inset-block: 50% auto;\n inset-inline: var(--size-3) auto;\n flex-direction: column;\n width: auto;\n height: max-content;\n padding-block: var(--size-6) var(--size-2);\n padding-inline: var(--size-1-5);\n border-radius: var(--rounded-full);\n transform: translateX(0) translateY(-50%);\n }\n\n :host([orientation='vertical']) .controls {\n flex-direction: column;\n margin-block-start: auto;\n margin-inline-start: 0;\n }\n\n :host([orientation='vertical']) > .controls {\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n margin-block-start: 0;\n }\n\n :host([orientation='vertical']) .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n }\n\n :host([orientation='vertical']) .indicator-active {\n width: var(--size-1-5);\n height: var(--size-8);\n }\n\n /* animation properties are inherited from .indicator-active ore-progress::part(fill) below */\n\n /* ── Bottom nav bar: indicators + controls ───────────────────────────── */\n\n /* Floats above the bottom edge, shrinks to content width, centered.\n A frosted backdrop keeps it legible over any image. */\n\n .indicators {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline: 50%;\n display: flex;\n flex-direction: row;\n gap: var(--size-1-5);\n align-items: center;\n width: max-content;\n padding: var(--size-1-5) var(--size-2) var(--size-1-5) var(--size-6);\n pointer-events: none;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n transform: translateX(-50%);\n }\n\n .indicator {\n display: block;\n flex-shrink: 0;\n padding: 0;\n pointer-events: auto;\n cursor: pointer;\n background: none;\n border: none;\n transition: opacity var(--transition-fast);\n }\n\n .indicator > ore-progress {\n display: block;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n /* Inactive indicator: small circle */\n .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n overflow: hidden;\n border-radius: var(--rounded-full);\n }\n\n /* Active indicator: wider pill (progress bar) */\n .indicator-active {\n --progress-track-bg: color-mix(in oklch, var(--_dot-bg) 60%, transparent);\n width: var(--size-8);\n }\n\n .indicator:focus-visible {\n outline: var(--border) solid currentcolor;\n outline-offset: 2px;\n }\n\n .indicator:hover {\n opacity: 0.8;\n }\n\n .indicator ore-progress::part(fill) {\n transition: width var(--transition-normal);\n }\n\n .indicator-active ore-progress::part(fill) {\n animation-name: var(--carousel-animation-name, none);\n animation-duration: calc(var(--carousel-timeout, 4000) * 1ms);\n animation-timing-function: var(--ease-linear);\n animation-fill-mode: forwards;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --carousel-transition-duration: 0s;\n }\n}\n\n@keyframes carousel-fill {\n from {\n width: 0%;\n }\n\n to {\n width: 100%;\n }\n}\n\n@keyframes carousel-fill-v {\n from {\n height: 0%;\n }\n\n to {\n height: 100%;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"carousel.css.cjs","names":[],"sources":["../../../src/content/carousel/carousel.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--carousel-bg, var(--color-canvas));\n --_radius: var(--carousel-radius, var(--rounded-xl));\n --_dot-bg: var(--carousel-dot-bg, var(--color-contrast-300));\n --_dot-active-bg: var(--carousel-dot-active-bg, var(--color-contrast-700));\n\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: var(--carousel-min-height, 240px);\n overflow: hidden;\n touch-action: auto;\n outline: none;\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n /* ── Track ──────────────────────────────────────────────────────── */\n\n .track {\n position: relative;\n flex: 1 1 auto;\n width: 100%;\n min-height: 0;\n }\n\n /* ── Controls (prev / next) ────────────────────────────────────────────── */\n\n /* Controls live inside the bottom nav bar, right-aligned via margin-inline-start: auto. */\n\n .controls {\n display: flex;\n gap: var(--size-0-5);\n align-items: center;\n margin-inline-start: auto;\n pointer-events: none;\n }\n\n /* Controls rendered standalone (no indicators bar): needs own positioning + backdrop. */\n :host > .controls {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n padding: var(--size-1-5) var(--size-2);\n margin-inline-start: 0;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n }\n\n .nav-btn {\n pointer-events: auto;\n }\n\n /* ── Variant-specific track styles ────────────────────────────────────── */\n\n /* Gallery: flex row, fills host, shows active + two thumbnails */\n :host([variant='gallery']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-gallery-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='gallery'][orientation='vertical']) .track {\n flex-direction: column;\n align-items: stretch;\n }\n\n /* Filmstrip: flex row/column with absolute positioning to fill host */\n :host([variant='filmstrip']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-filmstrip-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='filmstrip'][orientation='vertical']) .track {\n flex-direction: column;\n width: 100%;\n }\n\n /* ── Vertical orientation ──────────────────────────────────────────────── */\n\n :host([orientation='vertical']) {\n --_slide-translate-before: translateY(-100%);\n --_slide-translate-after: translateY(100%);\n }\n\n :host([orientation='vertical']) .indicators {\n inset-block: 50% auto;\n inset-inline: var(--size-3) auto;\n flex-direction: column;\n width: auto;\n height: max-content;\n padding-block: var(--size-6) var(--size-2);\n padding-inline: var(--size-1-5);\n border-radius: var(--rounded-full);\n transform: translateX(0) translateY(-50%);\n }\n\n :host([orientation='vertical']) .controls {\n flex-direction: column;\n margin-block-start: auto;\n margin-inline-start: 0;\n }\n\n :host([orientation='vertical']) > .controls {\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n margin-block-start: 0;\n }\n\n :host([orientation='vertical']) .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n }\n\n :host([orientation='vertical']) .indicator-active {\n width: var(--size-1-5);\n height: var(--size-8);\n }\n\n /* animation properties are inherited from .indicator-active ore-progress::part(fill) below */\n\n /* ── Bottom nav bar: indicators + controls ───────────────────────────── */\n\n /* Floats above the bottom edge, shrinks to content width, centered.\n A frosted backdrop keeps it legible over any image. */\n\n .indicators {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline: 50%;\n display: flex;\n flex-direction: row;\n gap: var(--size-1-5);\n align-items: center;\n width: max-content;\n padding: var(--size-1-5) var(--size-2) var(--size-1-5) var(--size-6);\n pointer-events: none;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n transform: translateX(-50%);\n }\n\n .indicator {\n display: block;\n flex-shrink: 0;\n padding: 0;\n pointer-events: auto;\n cursor: pointer;\n background: none;\n border: none;\n transition: opacity var(--transition-fast);\n }\n\n .indicator > ore-progress {\n display: block;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n /* Inactive indicator: small circle */\n .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n overflow: hidden;\n border-radius: var(--rounded-full);\n }\n\n /* Active indicator: wider pill (progress bar) */\n .indicator-active {\n --progress-track-bg: color-mix(in oklch, var(--_dot-bg) 60%, transparent);\n width: var(--size-8);\n }\n\n .indicator:focus-visible {\n outline: var(--border) solid currentcolor;\n outline-offset: 2px;\n }\n\n .indicator:hover {\n opacity: 0.8;\n }\n\n .indicator ore-progress::part(fill) {\n transition: width var(--transition-normal);\n }\n\n .indicator-active ore-progress::part(fill) {\n animation-name: var(--carousel-animation-name, none);\n animation-duration: calc(var(--carousel-timeout, 4000) * 1ms);\n animation-timing-function: var(--ease-linear);\n animation-fill-mode: forwards;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --carousel-transition-duration: 0s;\n }\n}\n\n@keyframes carousel-fill {\n from {\n width: 0%;\n }\n\n to {\n width: 100%;\n }\n}\n\n@keyframes carousel-fill-v {\n from {\n height: 0%;\n }\n\n to {\n height: 100%;\n }\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.css.js","names":[],"sources":["../../../src/content/carousel/carousel.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--carousel-bg, var(--color-canvas));\n --_radius: var(--carousel-radius, var(--rounded-xl));\n --_dot-bg: var(--carousel-dot-bg, var(--color-contrast-300));\n --_dot-active-bg: var(--carousel-dot-active-bg, var(--color-contrast-700));\n\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: var(--carousel-min-height, 240px);\n overflow: hidden;\n touch-action: auto;\n outline: none;\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n /* ── Track ──────────────────────────────────────────────────────── */\n\n .track {\n position: relative;\n flex: 1 1 auto;\n width: 100%;\n min-height: 0;\n }\n\n /* ── Controls (prev / next) ────────────────────────────────────────────── */\n\n /* Controls live inside the bottom nav bar, right-aligned via margin-inline-start: auto. */\n\n .controls {\n display: flex;\n gap: var(--size-0-5);\n align-items: center;\n margin-inline-start: auto;\n pointer-events: none;\n }\n\n /* Controls rendered standalone (no indicators bar) — needs own positioning + backdrop. */\n :host > .controls {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n padding: var(--size-1-5) var(--size-2);\n margin-inline-start: 0;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n }\n\n .nav-btn {\n pointer-events: auto;\n }\n\n /* ── Variant-specific track styles ────────────────────────────────────── */\n\n /* Gallery: flex row, fills host, shows active + two thumbnails */\n :host([variant='gallery']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-gallery-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='gallery'][orientation='vertical']) .track {\n flex-direction: column;\n align-items: stretch;\n }\n\n /* Filmstrip: flex row/column with absolute positioning to fill host */\n :host([variant='filmstrip']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-filmstrip-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='filmstrip'][orientation='vertical']) .track {\n flex-direction: column;\n width: 100%;\n }\n\n /* ── Vertical orientation ──────────────────────────────────────────────── */\n\n :host([orientation='vertical']) {\n --_slide-translate-before: translateY(-100%);\n --_slide-translate-after: translateY(100%);\n }\n\n :host([orientation='vertical']) .indicators {\n inset-block: 50% auto;\n inset-inline: var(--size-3) auto;\n flex-direction: column;\n width: auto;\n height: max-content;\n padding-block: var(--size-6) var(--size-2);\n padding-inline: var(--size-1-5);\n border-radius: var(--rounded-full);\n transform: translateX(0) translateY(-50%);\n }\n\n :host([orientation='vertical']) .controls {\n flex-direction: column;\n margin-block-start: auto;\n margin-inline-start: 0;\n }\n\n :host([orientation='vertical']) > .controls {\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n margin-block-start: 0;\n }\n\n :host([orientation='vertical']) .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n }\n\n :host([orientation='vertical']) .indicator-active {\n width: var(--size-1-5);\n height: var(--size-8);\n }\n\n /* animation properties are inherited from .indicator-active ore-progress::part(fill) below */\n\n /* ── Bottom nav bar: indicators + controls ───────────────────────────── */\n\n /* Floats above the bottom edge, shrinks to content width, centered.\n A frosted backdrop keeps it legible over any image. */\n\n .indicators {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline: 50%;\n display: flex;\n flex-direction: row;\n gap: var(--size-1-5);\n align-items: center;\n width: max-content;\n padding: var(--size-1-5) var(--size-2) var(--size-1-5) var(--size-6);\n pointer-events: none;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n transform: translateX(-50%);\n }\n\n .indicator {\n display: block;\n flex-shrink: 0;\n padding: 0;\n pointer-events: auto;\n cursor: pointer;\n background: none;\n border: none;\n transition: opacity var(--transition-fast);\n }\n\n .indicator > ore-progress {\n display: block;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n /* Inactive indicator: small circle */\n .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n overflow: hidden;\n border-radius: var(--rounded-full);\n }\n\n /* Active indicator: wider pill (progress bar) */\n .indicator-active {\n --progress-track-bg: color-mix(in oklch, var(--_dot-bg) 60%, transparent);\n width: var(--size-8);\n }\n\n .indicator:focus-visible {\n outline: var(--border) solid currentcolor;\n outline-offset: 2px;\n }\n\n .indicator:hover {\n opacity: 0.8;\n }\n\n .indicator ore-progress::part(fill) {\n transition: width var(--transition-normal);\n }\n\n .indicator-active ore-progress::part(fill) {\n animation-name: var(--carousel-animation-name, none);\n animation-duration: calc(var(--carousel-timeout, 4000) * 1ms);\n animation-timing-function: var(--ease-linear);\n animation-fill-mode: forwards;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --carousel-transition-duration: 0s;\n }\n}\n\n@keyframes carousel-fill {\n from {\n width: 0%;\n }\n\n to {\n width: 100%;\n }\n}\n\n@keyframes carousel-fill-v {\n from {\n height: 0%;\n }\n\n to {\n height: 100%;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"carousel.css.js","names":[],"sources":["../../../src/content/carousel/carousel.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--carousel-bg, var(--color-canvas));\n --_radius: var(--carousel-radius, var(--rounded-xl));\n --_dot-bg: var(--carousel-dot-bg, var(--color-contrast-300));\n --_dot-active-bg: var(--carousel-dot-active-bg, var(--color-contrast-700));\n\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: var(--carousel-min-height, 240px);\n overflow: hidden;\n touch-action: auto;\n outline: none;\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n /* ── Track ──────────────────────────────────────────────────────── */\n\n .track {\n position: relative;\n flex: 1 1 auto;\n width: 100%;\n min-height: 0;\n }\n\n /* ── Controls (prev / next) ────────────────────────────────────────────── */\n\n /* Controls live inside the bottom nav bar, right-aligned via margin-inline-start: auto. */\n\n .controls {\n display: flex;\n gap: var(--size-0-5);\n align-items: center;\n margin-inline-start: auto;\n pointer-events: none;\n }\n\n /* Controls rendered standalone (no indicators bar): needs own positioning + backdrop. */\n :host > .controls {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n padding: var(--size-1-5) var(--size-2);\n margin-inline-start: 0;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n }\n\n .nav-btn {\n pointer-events: auto;\n }\n\n /* ── Variant-specific track styles ────────────────────────────────────── */\n\n /* Gallery: flex row, fills host, shows active + two thumbnails */\n :host([variant='gallery']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-gallery-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='gallery'][orientation='vertical']) .track {\n flex-direction: column;\n align-items: stretch;\n }\n\n /* Filmstrip: flex row/column with absolute positioning to fill host */\n :host([variant='filmstrip']) .track {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n gap: var(--carousel-filmstrip-gap, var(--size-2));\n align-items: stretch;\n overflow: hidden;\n }\n\n :host([variant='filmstrip'][orientation='vertical']) .track {\n flex-direction: column;\n width: 100%;\n }\n\n /* ── Vertical orientation ──────────────────────────────────────────────── */\n\n :host([orientation='vertical']) {\n --_slide-translate-before: translateY(-100%);\n --_slide-translate-after: translateY(100%);\n }\n\n :host([orientation='vertical']) .indicators {\n inset-block: 50% auto;\n inset-inline: var(--size-3) auto;\n flex-direction: column;\n width: auto;\n height: max-content;\n padding-block: var(--size-6) var(--size-2);\n padding-inline: var(--size-1-5);\n border-radius: var(--rounded-full);\n transform: translateX(0) translateY(-50%);\n }\n\n :host([orientation='vertical']) .controls {\n flex-direction: column;\n margin-block-start: auto;\n margin-inline-start: 0;\n }\n\n :host([orientation='vertical']) > .controls {\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n margin-block-start: 0;\n }\n\n :host([orientation='vertical']) .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n }\n\n :host([orientation='vertical']) .indicator-active {\n width: var(--size-1-5);\n height: var(--size-8);\n }\n\n /* animation properties are inherited from .indicator-active ore-progress::part(fill) below */\n\n /* ── Bottom nav bar: indicators + controls ───────────────────────────── */\n\n /* Floats above the bottom edge, shrinks to content width, centered.\n A frosted backdrop keeps it legible over any image. */\n\n .indicators {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline: 50%;\n display: flex;\n flex-direction: row;\n gap: var(--size-1-5);\n align-items: center;\n width: max-content;\n padding: var(--size-1-5) var(--size-2) var(--size-1-5) var(--size-6);\n pointer-events: none;\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n transform: translateX(-50%);\n }\n\n .indicator {\n display: block;\n flex-shrink: 0;\n padding: 0;\n pointer-events: auto;\n cursor: pointer;\n background: none;\n border: none;\n transition: opacity var(--transition-fast);\n }\n\n .indicator > ore-progress {\n display: block;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n /* Inactive indicator: small circle */\n .indicator:not(.indicator-active) {\n width: var(--size-2);\n height: var(--size-2);\n overflow: hidden;\n border-radius: var(--rounded-full);\n }\n\n /* Active indicator: wider pill (progress bar) */\n .indicator-active {\n --progress-track-bg: color-mix(in oklch, var(--_dot-bg) 60%, transparent);\n width: var(--size-8);\n }\n\n .indicator:focus-visible {\n outline: var(--border) solid currentcolor;\n outline-offset: 2px;\n }\n\n .indicator:hover {\n opacity: 0.8;\n }\n\n .indicator ore-progress::part(fill) {\n transition: width var(--transition-normal);\n }\n\n .indicator-active ore-progress::part(fill) {\n animation-name: var(--carousel-animation-name, none);\n animation-duration: calc(var(--carousel-timeout, 4000) * 1ms);\n animation-timing-function: var(--ease-linear);\n animation-fill-mode: forwards;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --carousel-transition-duration: 0s;\n }\n}\n\n@keyframes carousel-fill {\n from {\n width: 0%;\n }\n\n to {\n width: 100%;\n }\n}\n\n@keyframes carousel-fill-v {\n from {\n height: 0%;\n }\n\n to {\n height: 100%;\n }\n}\n"],"mappings":""}
@@ -14,7 +14,7 @@ export type OreCarouselEvents = {
14
14
  export type OreCarouselProps = {
15
15
  /**
16
16
  * Whether to advance slides automatically. Defaults to `false`.
17
- * Opt in explicitly — autoplay on by default is a WCAG 2.1 SC 2.2.2 violation for many use cases.
17
+ * Opt in explicitly: autoplay on by default is a WCAG 2.1 SC 2.2.2 violation for many use cases.
18
18
  */
19
19
  autoplay?: boolean;
20
20
  /** Interval in milliseconds between automatic slide advances. Defaults to `5000`. */
@@ -35,10 +35,10 @@ export type OreCarouselProps = {
35
35
  'slide-index'?: number;
36
36
  /**
37
37
  * Layout variant.
38
- * - `'default'` — slides translate in/out (default)
39
- * - `'fade'` — slides crossfade; no movement
40
- * - `'filmstrip'` — all slides visible side-by-side; active expands
41
- * - `'gallery'` — active slide fills the majority; adjacent slides show as thumbnails
38
+ * - `'default'`: slides translate in/out (default)
39
+ * - `'fade'`: slides crossfade; no movement
40
+ * - `'filmstrip'`: all slides visible side-by-side; active expands
41
+ * - `'gallery'`: active slide fills the majority; adjacent slides show as thumbnails
42
42
  */
43
43
  variant?: CarouselVariant;
44
44
  };
@@ -1,2 +1,2 @@
1
- var e=`@layer refine.base{:host{--_bg:var(--chat-message-bg,var(--color-contrast-100));--_color:var(--chat-message-color,var(--color-contrast-900));--_user-bg:var(--chat-message-user-bg,var(--color-primary));--_user-color:var(--chat-message-user-color,var(--color-primary-content));--_radius:var(--chat-message-radius,var(--rounded-lg));--_max-width:var(--chat-message-max-width,36rem);display:block}.row{gap:var(--size-2-5);align-items:flex-start;display:flex}:host([sender=user]) .row{flex-direction:row-reverse}.avatar{flex-shrink:0;display:flex}.avatar[hidden]{display:none}.column{gap:var(--size-1);flex-direction:column;flex:1;align-items:flex-start;min-width:0;display:flex}:host([sender=user]) .column{align-items:flex-end}.name{padding-inline:var(--size-3-5);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-contrast-500)}.name[hidden]{display:none}.bubble{box-sizing:border-box;width:fit-content;max-width:var(--_max-width);padding:var(--size-2-5) var(--size-3-5);color:var(--_color);background:var(--_bg);border-radius:var(--_radius)}:host([sender=user]) .bubble{color:var(--_user-color);background:var(--_user-bg)}.content{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.content-slot{overflow-wrap:anywhere;white-space:pre-wrap}.cursor{vertical-align:text-bottom;width:.5em;height:1em;animation:var(--_motion-animation,chat-message-blink 1s step-end infinite);background:currentColor;display:inline-block}.cursor:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){margin-left:var(--size-0-5)}.cursor:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:var(--size-0-5)}.cursor[hidden]{display:none}@keyframes chat-message-blink{50%{opacity:0}}.meta{gap:var(--size-1-5);padding-inline:var(--size-3-5);font-size:var(--text-xs);color:var(--color-contrast-400);align-items:center;display:flex}.meta[hidden],.timestamp[hidden]{display:none}.status{align-items:center;display:inline-flex}.status[hidden]{display:none}.status[data-status=sent]{color:var(--color-success)}.status[data-status=error]{color:var(--color-error)}.spinner{border:2px solid var(--color-contrast-300);width:.75em;height:.75em;animation:var(--_motion-animation,chat-message-spin var(--transition-loader) infinite);border-radius:50%;display:inline-block}.spinner:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-right-color:#0000}.spinner:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-left-color:#0000}@keyframes chat-message-spin{to{transform:rotate(360deg)}}.error-text{color:var(--color-error)}.error-text[hidden]{display:none}.retry{font:inherit;font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-primary);text-underline-offset:2px;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.retry[hidden]{display:none}.retry:focus-visible{outline:var(--border-2) solid var(--color-focus);outline-offset:var(--border-2)}.actions{gap:var(--size-1);padding-inline:var(--size-3-5);display:flex}.actions[hidden]{display:none}}`;exports.default=e;
1
+ var e=`@layer refine.base{:host{--_bg:var(--chat-message-bg,var(--color-contrast-100));--_color:var(--chat-message-color,var(--color-contrast-900));--_user-bg:var(--chat-message-user-bg,var(--color-primary));--_user-color:var(--chat-message-user-color,var(--color-primary-content));--_radius:var(--chat-message-radius,var(--rounded-lg));--_max-width:var(--chat-message-max-width,36rem);display:block}.row{gap:var(--size-2-5);align-items:flex-start;display:flex}:host([sender=user]) .row{flex-direction:row-reverse}.avatar{flex-shrink:0;display:flex}.avatar[hidden]{display:none}.column{gap:var(--size-1);flex-direction:column;flex:1;align-items:flex-start;min-width:0;display:flex}:host([sender=user]) .column{align-items:flex-end}.name{padding-inline:var(--size-3-5);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-contrast-500)}.name[hidden]{display:none}.bubble{box-sizing:border-box;width:fit-content;max-width:var(--_max-width);padding:var(--size-2-5) var(--size-3-5);color:var(--_color);background:var(--_bg);border-radius:var(--_radius)}:host([sender=user]) .bubble{color:var(--_user-color);background:var(--_user-bg)}.content{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.content-slot{overflow-wrap:anywhere;white-space:pre-wrap}.cursor{vertical-align:text-bottom;width:.5em;height:1em;animation:var(--_motion-animation,chat-message-blink 1s step-end infinite);background:currentColor;display:inline-block}.cursor:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){margin-left:var(--size-0-5)}.cursor:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:var(--size-0-5)}.cursor[hidden]{display:none}@keyframes chat-message-blink{50%{opacity:0}}.meta{gap:var(--size-1-5);padding-inline:var(--size-3-5);font-size:var(--text-xs);color:var(--color-contrast-400);align-items:center;display:flex}.meta[hidden],.timestamp[hidden]{display:none}.status{align-items:center;display:inline-flex}.status[hidden]{display:none}.status[data-status=sent]{color:var(--color-success)}.status[data-status=error]{color:var(--color-error)}.spinner{border:2px solid var(--color-contrast-300);width:.75em;height:.75em;animation:var(--_motion-animation,chat-message-spin var(--transition-loader) infinite);border-radius:50%;display:inline-block}.spinner:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-right-color:#0000}.spinner:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-left-color:#0000}@keyframes chat-message-spin{to{transform:rotate(360deg)}}.error-text{color:var(--color-error)}.error-text[hidden]{display:none}.retry{font:inherit;font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-primary);text-underline-offset:2px;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.retry[hidden]{display:none}.retry:focus-visible{outline:var(--focus-ring);outline-offset:var(--border-2)}.actions{gap:var(--size-1);padding-inline:var(--size-3-5);display:flex}.actions[hidden]{display:none}}`;exports.default=e;
2
2
  //# sourceMappingURL=chat-message.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-message.css.cjs","names":[],"sources":["../../../src/content/chat-message/chat-message.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--chat-message-bg, var(--color-contrast-100));\n --_color: var(--chat-message-color, var(--color-contrast-900));\n --_user-bg: var(--chat-message-user-bg, var(--color-primary));\n --_user-color: var(--chat-message-user-color, var(--color-primary-content));\n --_radius: var(--chat-message-radius, var(--rounded-lg));\n --_max-width: var(--chat-message-max-width, 36rem);\n\n display: block;\n }\n\n .row {\n display: flex;\n gap: var(--size-2-5);\n align-items: flex-start;\n }\n\n :host([sender='user']) .row {\n flex-direction: row-reverse;\n }\n\n .avatar {\n display: flex;\n flex-shrink: 0;\n }\n\n .avatar[hidden] {\n display: none;\n }\n\n .column {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-1);\n align-items: flex-start;\n min-width: 0;\n }\n\n :host([sender='user']) .column {\n align-items: flex-end;\n }\n\n .name {\n /* Match `.bubble`'s inline padding so the name lines up with the bubble's own text\n instead of the bubble's outer box. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-contrast-500);\n }\n\n .name[hidden] {\n display: none;\n }\n\n /* =====================\n Bubble\n ===================== */\n\n .bubble {\n box-sizing: border-box;\n width: fit-content;\n max-width: var(--_max-width);\n padding: var(--size-2-5) var(--size-3-5);\n color: var(--_color);\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n :host([sender='user']) .bubble {\n color: var(--_user-color);\n background: var(--_user-bg);\n }\n\n .content {\n font-size: var(--text-sm);\n line-height: var(--leading-relaxed);\n }\n\n /*\n * `white-space`/`overflow-wrap` live on the slot itself, not `.content` — both are\n * inherited properties, and slotted nodes inherit from their point of use (the `<slot>`)\n * per the CSS Scoping spec, so this still reaches the projected text. Scoping it here\n * (instead of the parent `.content`) keeps `.content`'s own whitespace-only text nodes —\n * the newline + indentation between `<slot>` and the cursor `<span>` in this template —\n * under normal collapsing rules, so they don't render as extra blank lines. Putting\n * `pre-wrap` on `.content` directly did exactly that: real bug, caught by measuring\n * rendered box height in a real browser.\n */\n .content-slot {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n }\n\n /* =====================\n Streaming cursor\n ===================== */\n\n .cursor {\n display: inline-block;\n width: 0.5em;\n height: 1em;\n margin-inline-start: var(--size-0-5);\n vertical-align: text-bottom;\n background: currentcolor;\n animation: var(--_motion-animation, chat-message-blink 1s step-end infinite);\n }\n\n .cursor[hidden] {\n display: none;\n }\n\n @keyframes chat-message-blink {\n 50% {\n opacity: 0;\n }\n }\n\n /* =====================\n Meta row (timestamp / status / error / retry)\n ===================== */\n\n .meta {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n\n /* Match `.bubble`'s inline padding — see `.name` above. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n color: var(--color-contrast-400);\n }\n\n .meta[hidden] {\n display: none;\n }\n\n .timestamp[hidden] {\n display: none;\n }\n\n .status {\n display: inline-flex;\n align-items: center;\n }\n\n .status[hidden] {\n display: none;\n }\n\n .status[data-status='sent'] {\n color: var(--color-success);\n }\n\n .status[data-status='error'] {\n color: var(--color-error);\n }\n\n .spinner {\n display: inline-block;\n width: 0.75em;\n height: 0.75em;\n border: 2px solid var(--color-contrast-300);\n border-inline-end-color: transparent;\n border-radius: 50%;\n animation: var(--_motion-animation, chat-message-spin var(--transition-loader) infinite);\n }\n\n @keyframes chat-message-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .error-text {\n color: var(--color-error);\n }\n\n .error-text[hidden] {\n display: none;\n }\n\n .retry {\n padding: 0;\n font: inherit;\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n background: none;\n border: none;\n }\n\n .retry[hidden] {\n display: none;\n }\n\n .retry:focus-visible {\n outline: var(--border-2) solid var(--color-focus);\n outline-offset: var(--border-2);\n }\n\n /* =====================\n Actions\n ===================== */\n\n .actions {\n display: flex;\n gap: var(--size-1);\n\n /* Match `.bubble`'s inline padding — see `.name` above. */\n padding-inline: var(--size-3-5);\n }\n\n .actions[hidden] {\n display: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"chat-message.css.cjs","names":[],"sources":["../../../src/content/chat-message/chat-message.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--chat-message-bg, var(--color-contrast-100));\n --_color: var(--chat-message-color, var(--color-contrast-900));\n --_user-bg: var(--chat-message-user-bg, var(--color-primary));\n --_user-color: var(--chat-message-user-color, var(--color-primary-content));\n --_radius: var(--chat-message-radius, var(--rounded-lg));\n --_max-width: var(--chat-message-max-width, 36rem);\n\n display: block;\n }\n\n .row {\n display: flex;\n gap: var(--size-2-5);\n align-items: flex-start;\n }\n\n :host([sender='user']) .row {\n flex-direction: row-reverse;\n }\n\n .avatar {\n display: flex;\n flex-shrink: 0;\n }\n\n .avatar[hidden] {\n display: none;\n }\n\n .column {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-1);\n align-items: flex-start;\n min-width: 0;\n }\n\n :host([sender='user']) .column {\n align-items: flex-end;\n }\n\n .name {\n /* Match `.bubble`'s inline padding so the name lines up with the bubble's own text\n instead of the bubble's outer box. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-contrast-500);\n }\n\n .name[hidden] {\n display: none;\n }\n\n /* =====================\n Bubble\n ===================== */\n\n .bubble {\n box-sizing: border-box;\n width: fit-content;\n max-width: var(--_max-width);\n padding: var(--size-2-5) var(--size-3-5);\n color: var(--_color);\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n :host([sender='user']) .bubble {\n color: var(--_user-color);\n background: var(--_user-bg);\n }\n\n .content {\n font-size: var(--text-sm);\n line-height: var(--leading-relaxed);\n }\n\n /*\n * `white-space`/`overflow-wrap` live on the slot itself, not `.content`: both are\n * inherited properties, and slotted nodes inherit from their point of use (the `<slot>`)\n * per the CSS Scoping spec, so this still reaches the projected text. Scoping it here\n * (instead of the parent `.content`) keeps `.content`'s own whitespace-only text nodes :\n * the newline + indentation between `<slot>` and the cursor `<span>` in this template :\n * under normal collapsing rules, so they don't render as extra blank lines. Putting\n * `pre-wrap` on `.content` directly did exactly that: real bug, caught by measuring\n * rendered box height in a real browser.\n */\n .content-slot {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n }\n\n /* =====================\n Streaming cursor\n ===================== */\n\n .cursor {\n display: inline-block;\n width: 0.5em;\n height: 1em;\n margin-inline-start: var(--size-0-5);\n vertical-align: text-bottom;\n background: currentcolor;\n animation: var(--_motion-animation, chat-message-blink 1s step-end infinite);\n }\n\n .cursor[hidden] {\n display: none;\n }\n\n @keyframes chat-message-blink {\n 50% {\n opacity: 0;\n }\n }\n\n /* =====================\n Meta row (timestamp / status / error / retry)\n ===================== */\n\n .meta {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n\n /* Match `.bubble`'s inline padding: see `.name` above. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n color: var(--color-contrast-400);\n }\n\n .meta[hidden] {\n display: none;\n }\n\n .timestamp[hidden] {\n display: none;\n }\n\n .status {\n display: inline-flex;\n align-items: center;\n }\n\n .status[hidden] {\n display: none;\n }\n\n .status[data-status='sent'] {\n color: var(--color-success);\n }\n\n .status[data-status='error'] {\n color: var(--color-error);\n }\n\n .spinner {\n display: inline-block;\n width: 0.75em;\n height: 0.75em;\n border: 2px solid var(--color-contrast-300);\n border-inline-end-color: transparent;\n border-radius: 50%;\n animation: var(--_motion-animation, chat-message-spin var(--transition-loader) infinite);\n }\n\n @keyframes chat-message-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .error-text {\n color: var(--color-error);\n }\n\n .error-text[hidden] {\n display: none;\n }\n\n .retry {\n padding: 0;\n font: inherit;\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n background: none;\n border: none;\n }\n\n .retry[hidden] {\n display: none;\n }\n\n .retry:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--border-2);\n }\n\n /* =====================\n Actions\n ===================== */\n\n .actions {\n display: flex;\n gap: var(--size-1);\n\n /* Match `.bubble`'s inline padding: see `.name` above. */\n padding-inline: var(--size-3-5);\n }\n\n .actions[hidden] {\n display: none;\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- var e=`@layer refine.base{:host{--_bg:var(--chat-message-bg,var(--color-contrast-100));--_color:var(--chat-message-color,var(--color-contrast-900));--_user-bg:var(--chat-message-user-bg,var(--color-primary));--_user-color:var(--chat-message-user-color,var(--color-primary-content));--_radius:var(--chat-message-radius,var(--rounded-lg));--_max-width:var(--chat-message-max-width,36rem);display:block}.row{gap:var(--size-2-5);align-items:flex-start;display:flex}:host([sender=user]) .row{flex-direction:row-reverse}.avatar{flex-shrink:0;display:flex}.avatar[hidden]{display:none}.column{gap:var(--size-1);flex-direction:column;flex:1;align-items:flex-start;min-width:0;display:flex}:host([sender=user]) .column{align-items:flex-end}.name{padding-inline:var(--size-3-5);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-contrast-500)}.name[hidden]{display:none}.bubble{box-sizing:border-box;width:fit-content;max-width:var(--_max-width);padding:var(--size-2-5) var(--size-3-5);color:var(--_color);background:var(--_bg);border-radius:var(--_radius)}:host([sender=user]) .bubble{color:var(--_user-color);background:var(--_user-bg)}.content{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.content-slot{overflow-wrap:anywhere;white-space:pre-wrap}.cursor{vertical-align:text-bottom;width:.5em;height:1em;animation:var(--_motion-animation,chat-message-blink 1s step-end infinite);background:currentColor;display:inline-block}.cursor:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){margin-left:var(--size-0-5)}.cursor:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:var(--size-0-5)}.cursor[hidden]{display:none}@keyframes chat-message-blink{50%{opacity:0}}.meta{gap:var(--size-1-5);padding-inline:var(--size-3-5);font-size:var(--text-xs);color:var(--color-contrast-400);align-items:center;display:flex}.meta[hidden],.timestamp[hidden]{display:none}.status{align-items:center;display:inline-flex}.status[hidden]{display:none}.status[data-status=sent]{color:var(--color-success)}.status[data-status=error]{color:var(--color-error)}.spinner{border:2px solid var(--color-contrast-300);width:.75em;height:.75em;animation:var(--_motion-animation,chat-message-spin var(--transition-loader) infinite);border-radius:50%;display:inline-block}.spinner:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-right-color:#0000}.spinner:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-left-color:#0000}@keyframes chat-message-spin{to{transform:rotate(360deg)}}.error-text{color:var(--color-error)}.error-text[hidden]{display:none}.retry{font:inherit;font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-primary);text-underline-offset:2px;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.retry[hidden]{display:none}.retry:focus-visible{outline:var(--border-2) solid var(--color-focus);outline-offset:var(--border-2)}.actions{gap:var(--size-1);padding-inline:var(--size-3-5);display:flex}.actions[hidden]{display:none}}`;export{e as default};
1
+ var e=`@layer refine.base{:host{--_bg:var(--chat-message-bg,var(--color-contrast-100));--_color:var(--chat-message-color,var(--color-contrast-900));--_user-bg:var(--chat-message-user-bg,var(--color-primary));--_user-color:var(--chat-message-user-color,var(--color-primary-content));--_radius:var(--chat-message-radius,var(--rounded-lg));--_max-width:var(--chat-message-max-width,36rem);display:block}.row{gap:var(--size-2-5);align-items:flex-start;display:flex}:host([sender=user]) .row{flex-direction:row-reverse}.avatar{flex-shrink:0;display:flex}.avatar[hidden]{display:none}.column{gap:var(--size-1);flex-direction:column;flex:1;align-items:flex-start;min-width:0;display:flex}:host([sender=user]) .column{align-items:flex-end}.name{padding-inline:var(--size-3-5);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-contrast-500)}.name[hidden]{display:none}.bubble{box-sizing:border-box;width:fit-content;max-width:var(--_max-width);padding:var(--size-2-5) var(--size-3-5);color:var(--_color);background:var(--_bg);border-radius:var(--_radius)}:host([sender=user]) .bubble{color:var(--_user-color);background:var(--_user-bg)}.content{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.content-slot{overflow-wrap:anywhere;white-space:pre-wrap}.cursor{vertical-align:text-bottom;width:.5em;height:1em;animation:var(--_motion-animation,chat-message-blink 1s step-end infinite);background:currentColor;display:inline-block}.cursor:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){margin-left:var(--size-0-5)}.cursor:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:var(--size-0-5)}.cursor[hidden]{display:none}@keyframes chat-message-blink{50%{opacity:0}}.meta{gap:var(--size-1-5);padding-inline:var(--size-3-5);font-size:var(--text-xs);color:var(--color-contrast-400);align-items:center;display:flex}.meta[hidden],.timestamp[hidden]{display:none}.status{align-items:center;display:inline-flex}.status[hidden]{display:none}.status[data-status=sent]{color:var(--color-success)}.status[data-status=error]{color:var(--color-error)}.spinner{border:2px solid var(--color-contrast-300);width:.75em;height:.75em;animation:var(--_motion-animation,chat-message-spin var(--transition-loader) infinite);border-radius:50%;display:inline-block}.spinner:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-right-color:#0000}.spinner:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-left-color:#0000}@keyframes chat-message-spin{to{transform:rotate(360deg)}}.error-text{color:var(--color-error)}.error-text[hidden]{display:none}.retry{font:inherit;font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-primary);text-underline-offset:2px;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.retry[hidden]{display:none}.retry:focus-visible{outline:var(--focus-ring);outline-offset:var(--border-2)}.actions{gap:var(--size-1);padding-inline:var(--size-3-5);display:flex}.actions[hidden]{display:none}}`;export{e as default};
2
2
  //# sourceMappingURL=chat-message.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-message.css.js","names":[],"sources":["../../../src/content/chat-message/chat-message.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--chat-message-bg, var(--color-contrast-100));\n --_color: var(--chat-message-color, var(--color-contrast-900));\n --_user-bg: var(--chat-message-user-bg, var(--color-primary));\n --_user-color: var(--chat-message-user-color, var(--color-primary-content));\n --_radius: var(--chat-message-radius, var(--rounded-lg));\n --_max-width: var(--chat-message-max-width, 36rem);\n\n display: block;\n }\n\n .row {\n display: flex;\n gap: var(--size-2-5);\n align-items: flex-start;\n }\n\n :host([sender='user']) .row {\n flex-direction: row-reverse;\n }\n\n .avatar {\n display: flex;\n flex-shrink: 0;\n }\n\n .avatar[hidden] {\n display: none;\n }\n\n .column {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-1);\n align-items: flex-start;\n min-width: 0;\n }\n\n :host([sender='user']) .column {\n align-items: flex-end;\n }\n\n .name {\n /* Match `.bubble`'s inline padding so the name lines up with the bubble's own text\n instead of the bubble's outer box. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-contrast-500);\n }\n\n .name[hidden] {\n display: none;\n }\n\n /* =====================\n Bubble\n ===================== */\n\n .bubble {\n box-sizing: border-box;\n width: fit-content;\n max-width: var(--_max-width);\n padding: var(--size-2-5) var(--size-3-5);\n color: var(--_color);\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n :host([sender='user']) .bubble {\n color: var(--_user-color);\n background: var(--_user-bg);\n }\n\n .content {\n font-size: var(--text-sm);\n line-height: var(--leading-relaxed);\n }\n\n /*\n * `white-space`/`overflow-wrap` live on the slot itself, not `.content` — both are\n * inherited properties, and slotted nodes inherit from their point of use (the `<slot>`)\n * per the CSS Scoping spec, so this still reaches the projected text. Scoping it here\n * (instead of the parent `.content`) keeps `.content`'s own whitespace-only text nodes —\n * the newline + indentation between `<slot>` and the cursor `<span>` in this template —\n * under normal collapsing rules, so they don't render as extra blank lines. Putting\n * `pre-wrap` on `.content` directly did exactly that: real bug, caught by measuring\n * rendered box height in a real browser.\n */\n .content-slot {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n }\n\n /* =====================\n Streaming cursor\n ===================== */\n\n .cursor {\n display: inline-block;\n width: 0.5em;\n height: 1em;\n margin-inline-start: var(--size-0-5);\n vertical-align: text-bottom;\n background: currentcolor;\n animation: var(--_motion-animation, chat-message-blink 1s step-end infinite);\n }\n\n .cursor[hidden] {\n display: none;\n }\n\n @keyframes chat-message-blink {\n 50% {\n opacity: 0;\n }\n }\n\n /* =====================\n Meta row (timestamp / status / error / retry)\n ===================== */\n\n .meta {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n\n /* Match `.bubble`'s inline padding — see `.name` above. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n color: var(--color-contrast-400);\n }\n\n .meta[hidden] {\n display: none;\n }\n\n .timestamp[hidden] {\n display: none;\n }\n\n .status {\n display: inline-flex;\n align-items: center;\n }\n\n .status[hidden] {\n display: none;\n }\n\n .status[data-status='sent'] {\n color: var(--color-success);\n }\n\n .status[data-status='error'] {\n color: var(--color-error);\n }\n\n .spinner {\n display: inline-block;\n width: 0.75em;\n height: 0.75em;\n border: 2px solid var(--color-contrast-300);\n border-inline-end-color: transparent;\n border-radius: 50%;\n animation: var(--_motion-animation, chat-message-spin var(--transition-loader) infinite);\n }\n\n @keyframes chat-message-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .error-text {\n color: var(--color-error);\n }\n\n .error-text[hidden] {\n display: none;\n }\n\n .retry {\n padding: 0;\n font: inherit;\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n background: none;\n border: none;\n }\n\n .retry[hidden] {\n display: none;\n }\n\n .retry:focus-visible {\n outline: var(--border-2) solid var(--color-focus);\n outline-offset: var(--border-2);\n }\n\n /* =====================\n Actions\n ===================== */\n\n .actions {\n display: flex;\n gap: var(--size-1);\n\n /* Match `.bubble`'s inline padding — see `.name` above. */\n padding-inline: var(--size-3-5);\n }\n\n .actions[hidden] {\n display: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"chat-message.css.js","names":[],"sources":["../../../src/content/chat-message/chat-message.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--chat-message-bg, var(--color-contrast-100));\n --_color: var(--chat-message-color, var(--color-contrast-900));\n --_user-bg: var(--chat-message-user-bg, var(--color-primary));\n --_user-color: var(--chat-message-user-color, var(--color-primary-content));\n --_radius: var(--chat-message-radius, var(--rounded-lg));\n --_max-width: var(--chat-message-max-width, 36rem);\n\n display: block;\n }\n\n .row {\n display: flex;\n gap: var(--size-2-5);\n align-items: flex-start;\n }\n\n :host([sender='user']) .row {\n flex-direction: row-reverse;\n }\n\n .avatar {\n display: flex;\n flex-shrink: 0;\n }\n\n .avatar[hidden] {\n display: none;\n }\n\n .column {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-1);\n align-items: flex-start;\n min-width: 0;\n }\n\n :host([sender='user']) .column {\n align-items: flex-end;\n }\n\n .name {\n /* Match `.bubble`'s inline padding so the name lines up with the bubble's own text\n instead of the bubble's outer box. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-contrast-500);\n }\n\n .name[hidden] {\n display: none;\n }\n\n /* =====================\n Bubble\n ===================== */\n\n .bubble {\n box-sizing: border-box;\n width: fit-content;\n max-width: var(--_max-width);\n padding: var(--size-2-5) var(--size-3-5);\n color: var(--_color);\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n :host([sender='user']) .bubble {\n color: var(--_user-color);\n background: var(--_user-bg);\n }\n\n .content {\n font-size: var(--text-sm);\n line-height: var(--leading-relaxed);\n }\n\n /*\n * `white-space`/`overflow-wrap` live on the slot itself, not `.content`: both are\n * inherited properties, and slotted nodes inherit from their point of use (the `<slot>`)\n * per the CSS Scoping spec, so this still reaches the projected text. Scoping it here\n * (instead of the parent `.content`) keeps `.content`'s own whitespace-only text nodes :\n * the newline + indentation between `<slot>` and the cursor `<span>` in this template :\n * under normal collapsing rules, so they don't render as extra blank lines. Putting\n * `pre-wrap` on `.content` directly did exactly that: real bug, caught by measuring\n * rendered box height in a real browser.\n */\n .content-slot {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n }\n\n /* =====================\n Streaming cursor\n ===================== */\n\n .cursor {\n display: inline-block;\n width: 0.5em;\n height: 1em;\n margin-inline-start: var(--size-0-5);\n vertical-align: text-bottom;\n background: currentcolor;\n animation: var(--_motion-animation, chat-message-blink 1s step-end infinite);\n }\n\n .cursor[hidden] {\n display: none;\n }\n\n @keyframes chat-message-blink {\n 50% {\n opacity: 0;\n }\n }\n\n /* =====================\n Meta row (timestamp / status / error / retry)\n ===================== */\n\n .meta {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n\n /* Match `.bubble`'s inline padding: see `.name` above. */\n padding-inline: var(--size-3-5);\n font-size: var(--text-xs);\n color: var(--color-contrast-400);\n }\n\n .meta[hidden] {\n display: none;\n }\n\n .timestamp[hidden] {\n display: none;\n }\n\n .status {\n display: inline-flex;\n align-items: center;\n }\n\n .status[hidden] {\n display: none;\n }\n\n .status[data-status='sent'] {\n color: var(--color-success);\n }\n\n .status[data-status='error'] {\n color: var(--color-error);\n }\n\n .spinner {\n display: inline-block;\n width: 0.75em;\n height: 0.75em;\n border: 2px solid var(--color-contrast-300);\n border-inline-end-color: transparent;\n border-radius: 50%;\n animation: var(--_motion-animation, chat-message-spin var(--transition-loader) infinite);\n }\n\n @keyframes chat-message-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .error-text {\n color: var(--color-error);\n }\n\n .error-text[hidden] {\n display: none;\n }\n\n .retry {\n padding: 0;\n font: inherit;\n font-size: var(--text-xs);\n font-weight: var(--font-medium);\n color: var(--color-primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n background: none;\n border: none;\n }\n\n .retry[hidden] {\n display: none;\n }\n\n .retry:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--border-2);\n }\n\n /* =====================\n Actions\n ===================== */\n\n .actions {\n display: flex;\n gap: var(--size-1);\n\n /* Match `.bubble`'s inline padding: see `.name` above. */\n padding-inline: var(--size-3-5);\n }\n\n .actions[hidden] {\n display: none;\n }\n}\n"],"mappings":""}
@@ -14,9 +14,9 @@ export type OreChatMessageProps = {
14
14
  error?: string;
15
15
  /** Display name shown above the bubble (falls back to a generic label per `sender`) */
16
16
  name?: string;
17
- /** Who sent the message — controls alignment and bubble styling */
17
+ /** Who sent the message: controls alignment and bubble styling */
18
18
  sender?: ChatMessageSender;
19
- /** Delivery status for outgoing messages — shows an inline indicator and, for `"error"`, a retry action */
19
+ /** Delivery status for outgoing messages: shows an inline indicator and, for `"error"`, a retry action */
20
20
  status?: ChatMessageStatus;
21
21
  /** Append a blinking cursor after the content, for a message still streaming in */
22
22
  streaming?: boolean;
@@ -24,13 +24,13 @@ export type OreChatMessageProps = {
24
24
  timestamp?: string;
25
25
  };
26
26
  /**
27
- * A single message bubble for chat/conversation UIs — sender-aware alignment, an optional
27
+ * A single message bubble for chat/conversation UIs: sender-aware alignment, an optional
28
28
  * avatar slot, delivery status (sending/sent/error with retry), and a streaming cursor for
29
29
  * assistant messages still generating. Content is provided via the default slot, so any
30
30
  * markdown-to-HTML rendering stays the consumer's choice.
31
31
  *
32
32
  * The default slot's leading/trailing whitespace-only text nodes are trimmed in place once
33
- * per slot assignment (mount, and again on `slotchange`) — pretty-printed HTML's
33
+ * per slot assignment (mount, and again on `slotchange`): pretty-printed HTML's
34
34
  * indentation would otherwise render as blank lines, since the bubble preserves line breaks
35
35
  * (`white-space: pre-wrap`) for genuine multi-paragraph replies. This mutates those specific
36
36
  * text nodes' `textContent` directly; it never touches nodes appended afterward (e.g. by
@@ -1 +1 @@
1
- {"version":3,"file":"chat-message.d.ts","sourceRoot":"","sources":["../../../src/content/chat-message/chat-message.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAQ7D,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,6EAA6E;IAC7E,KAAK,EAAE;QAAE,aAAa,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;CAClC,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,mBAAmB,GAAG;IAChC,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,2GAA2G;IAC3G,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,gBAAgB,EAAG,kBAA2B,CAAC"}
1
+ {"version":3,"file":"chat-message.d.ts","sourceRoot":"","sources":["../../../src/content/chat-message/chat-message.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAQ7D,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,6EAA6E;IAC7E,KAAK,EAAE;QAAE,aAAa,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;CAClC,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,mBAAmB,GAAG;IAChC,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,0GAA0G;IAC1G,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,gBAAgB,EAAG,kBAA2B,CAAC"}
@@ -71,7 +71,7 @@ export type OreChatPanelProps = {
71
71
  open?: boolean;
72
72
  };
73
73
  /**
74
- * A self-contained assistant chat surface — the fixed corner window a demo or support
74
+ * A self-contained assistant chat surface: the fixed corner window a demo or support
75
75
  * flow needs: header with title, status, Start over and close; a live-region message
76
76
  * transcript built from `ore-chat-message`; suggested questions while the transcript
77
77
  * holds only the greeting; and an `ore-message-composer` footer.
@@ -1 +1 @@
1
- {"version":3,"file":"code-window.css.cjs","names":[],"sources":["../../../src/content/code-window/code-window.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--code-window-bg, var(--color-canvas));\n --_header-bg: var(--code-window-header-bg, var(--color-contrast-100));\n --_border-color: var(--code-window-border-color, var(--color-contrast-300));\n --_radius: var(--code-window-radius, var(--rounded-lg));\n --_shadow: var(--code-window-shadow, var(--shadow-sm));\n --_body-padding: var(--code-window-body-padding, var(--size-5) var(--size-6));\n\n display: block;\n }\n\n .window {\n overflow: hidden;\n background: var(--_bg);\n border: var(--border) solid var(--_border-color);\n border-radius: var(--_radius);\n box-shadow: var(--_shadow);\n transition:\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .header {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n padding: var(--size-3) var(--size-5);\n overflow: hidden;\n background: var(--_header-bg);\n border-bottom: var(--border) solid var(--_border-color);\n transition: background var(--transition-normal);\n }\n\n /* ── code variant ─────────────────────────────────────────── */\n\n .lang {\n flex-shrink: 0;\n padding: 2px var(--size-1-5);\n font-family: var(--font-mono);\n font-size: var(--text-2xs);\n font-weight: var(--font-semibold);\n color: var(--color-primary);\n letter-spacing: 0.03em;\n background: var(--color-primary-backdrop);\n border: var(--border) solid oklch(70% 0.12 293deg / 20%);\n border-radius: var(--rounded-sm);\n }\n\n .filename {\n min-width: 0;\n margin-inline-start: var(--size-2);\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n white-space: nowrap;\n }\n\n /* ── chat variant ─────────────────────────────────────────── */\n\n .dots {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-1-5);\n align-items: center;\n padding-inline-end: var(--size-3);\n margin-inline-end: var(--size-1-5);\n border-inline-end: var(--border) solid var(--_border-color);\n }\n\n /* Authentic macOS traffic-light palette — muted so they don't fight the content */\n .dots span {\n display: block;\n width: var(--size-3);\n height: var(--size-3);\n border-radius: var(--rounded-full);\n }\n\n .dots span:nth-child(1) {\n background: oklch(65% 0.18 25deg);\n }\n\n .dots span:nth-child(2) {\n background: oklch(72% 0.18 80deg);\n }\n\n .dots span:nth-child(3) {\n background: oklch(62% 0.18 145deg);\n }\n\n .title {\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n letter-spacing: 0.02em;\n }\n\n /* ── header-end spacer ────────────────────────────────────── */\n\n .header-spacer {\n flex: 1;\n }\n\n ::slotted([slot='header-end']) {\n flex-shrink: 0;\n }\n\n /* ── body ─────────────────────────────────────────────────── */\n\n .body {\n padding: var(--_body-padding);\n overflow-x: auto;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"code-window.css.cjs","names":[],"sources":["../../../src/content/code-window/code-window.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--code-window-bg, var(--color-canvas));\n --_header-bg: var(--code-window-header-bg, var(--color-contrast-100));\n --_border-color: var(--code-window-border-color, var(--color-contrast-300));\n --_radius: var(--code-window-radius, var(--rounded-lg));\n --_shadow: var(--code-window-shadow, var(--shadow-sm));\n --_body-padding: var(--code-window-body-padding, var(--size-5) var(--size-6));\n\n display: block;\n }\n\n .window {\n overflow: hidden;\n background: var(--_bg);\n border: var(--border) solid var(--_border-color);\n border-radius: var(--_radius);\n box-shadow: var(--_shadow);\n transition:\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .header {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n padding: var(--size-3) var(--size-5);\n overflow: hidden;\n background: var(--_header-bg);\n border-bottom: var(--border) solid var(--_border-color);\n transition: background var(--transition-normal);\n }\n\n /* ── code variant ─────────────────────────────────────────── */\n\n .lang {\n flex-shrink: 0;\n padding: 2px var(--size-1-5);\n font-family: var(--font-mono);\n font-size: var(--text-2xs);\n font-weight: var(--font-semibold);\n color: var(--color-primary);\n letter-spacing: 0.03em;\n background: var(--color-primary-backdrop);\n border: var(--border) solid oklch(70% 0.12 293deg / 20%);\n border-radius: var(--rounded-sm);\n }\n\n .filename {\n min-width: 0;\n margin-inline-start: var(--size-2);\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n white-space: nowrap;\n }\n\n /* ── chat variant ─────────────────────────────────────────── */\n\n .dots {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-1-5);\n align-items: center;\n padding-inline-end: var(--size-3);\n margin-inline-end: var(--size-1-5);\n border-inline-end: var(--border) solid var(--_border-color);\n }\n\n /* Authentic macOS traffic-light palette: muted so they don't fight the content */\n .dots span {\n display: block;\n width: var(--size-3);\n height: var(--size-3);\n border-radius: var(--rounded-full);\n }\n\n .dots span:nth-child(1) {\n background: oklch(65% 0.18 25deg);\n }\n\n .dots span:nth-child(2) {\n background: oklch(72% 0.18 80deg);\n }\n\n .dots span:nth-child(3) {\n background: oklch(62% 0.18 145deg);\n }\n\n .title {\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n letter-spacing: 0.02em;\n }\n\n /* ── header-end spacer ────────────────────────────────────── */\n\n .header-spacer {\n flex: 1;\n }\n\n ::slotted([slot='header-end']) {\n flex-shrink: 0;\n }\n\n /* ── body ─────────────────────────────────────────────────── */\n\n .body {\n padding: var(--_body-padding);\n overflow-x: auto;\n }\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"code-window.css.js","names":[],"sources":["../../../src/content/code-window/code-window.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--code-window-bg, var(--color-canvas));\n --_header-bg: var(--code-window-header-bg, var(--color-contrast-100));\n --_border-color: var(--code-window-border-color, var(--color-contrast-300));\n --_radius: var(--code-window-radius, var(--rounded-lg));\n --_shadow: var(--code-window-shadow, var(--shadow-sm));\n --_body-padding: var(--code-window-body-padding, var(--size-5) var(--size-6));\n\n display: block;\n }\n\n .window {\n overflow: hidden;\n background: var(--_bg);\n border: var(--border) solid var(--_border-color);\n border-radius: var(--_radius);\n box-shadow: var(--_shadow);\n transition:\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .header {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n padding: var(--size-3) var(--size-5);\n overflow: hidden;\n background: var(--_header-bg);\n border-bottom: var(--border) solid var(--_border-color);\n transition: background var(--transition-normal);\n }\n\n /* ── code variant ─────────────────────────────────────────── */\n\n .lang {\n flex-shrink: 0;\n padding: 2px var(--size-1-5);\n font-family: var(--font-mono);\n font-size: var(--text-2xs);\n font-weight: var(--font-semibold);\n color: var(--color-primary);\n letter-spacing: 0.03em;\n background: var(--color-primary-backdrop);\n border: var(--border) solid oklch(70% 0.12 293deg / 20%);\n border-radius: var(--rounded-sm);\n }\n\n .filename {\n min-width: 0;\n margin-inline-start: var(--size-2);\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n white-space: nowrap;\n }\n\n /* ── chat variant ─────────────────────────────────────────── */\n\n .dots {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-1-5);\n align-items: center;\n padding-inline-end: var(--size-3);\n margin-inline-end: var(--size-1-5);\n border-inline-end: var(--border) solid var(--_border-color);\n }\n\n /* Authentic macOS traffic-light palette — muted so they don't fight the content */\n .dots span {\n display: block;\n width: var(--size-3);\n height: var(--size-3);\n border-radius: var(--rounded-full);\n }\n\n .dots span:nth-child(1) {\n background: oklch(65% 0.18 25deg);\n }\n\n .dots span:nth-child(2) {\n background: oklch(72% 0.18 80deg);\n }\n\n .dots span:nth-child(3) {\n background: oklch(62% 0.18 145deg);\n }\n\n .title {\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n letter-spacing: 0.02em;\n }\n\n /* ── header-end spacer ────────────────────────────────────── */\n\n .header-spacer {\n flex: 1;\n }\n\n ::slotted([slot='header-end']) {\n flex-shrink: 0;\n }\n\n /* ── body ─────────────────────────────────────────────────── */\n\n .body {\n padding: var(--_body-padding);\n overflow-x: auto;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"code-window.css.js","names":[],"sources":["../../../src/content/code-window/code-window.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--code-window-bg, var(--color-canvas));\n --_header-bg: var(--code-window-header-bg, var(--color-contrast-100));\n --_border-color: var(--code-window-border-color, var(--color-contrast-300));\n --_radius: var(--code-window-radius, var(--rounded-lg));\n --_shadow: var(--code-window-shadow, var(--shadow-sm));\n --_body-padding: var(--code-window-body-padding, var(--size-5) var(--size-6));\n\n display: block;\n }\n\n .window {\n overflow: hidden;\n background: var(--_bg);\n border: var(--border) solid var(--_border-color);\n border-radius: var(--_radius);\n box-shadow: var(--_shadow);\n transition:\n border-color var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .header {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n padding: var(--size-3) var(--size-5);\n overflow: hidden;\n background: var(--_header-bg);\n border-bottom: var(--border) solid var(--_border-color);\n transition: background var(--transition-normal);\n }\n\n /* ── code variant ─────────────────────────────────────────── */\n\n .lang {\n flex-shrink: 0;\n padding: 2px var(--size-1-5);\n font-family: var(--font-mono);\n font-size: var(--text-2xs);\n font-weight: var(--font-semibold);\n color: var(--color-primary);\n letter-spacing: 0.03em;\n background: var(--color-primary-backdrop);\n border: var(--border) solid oklch(70% 0.12 293deg / 20%);\n border-radius: var(--rounded-sm);\n }\n\n .filename {\n min-width: 0;\n margin-inline-start: var(--size-2);\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n white-space: nowrap;\n }\n\n /* ── chat variant ─────────────────────────────────────────── */\n\n .dots {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-1-5);\n align-items: center;\n padding-inline-end: var(--size-3);\n margin-inline-end: var(--size-1-5);\n border-inline-end: var(--border) solid var(--_border-color);\n }\n\n /* Authentic macOS traffic-light palette: muted so they don't fight the content */\n .dots span {\n display: block;\n width: var(--size-3);\n height: var(--size-3);\n border-radius: var(--rounded-full);\n }\n\n .dots span:nth-child(1) {\n background: oklch(65% 0.18 25deg);\n }\n\n .dots span:nth-child(2) {\n background: oklch(72% 0.18 80deg);\n }\n\n .dots span:nth-child(3) {\n background: oklch(62% 0.18 145deg);\n }\n\n .title {\n font-family: var(--font-mono);\n font-size: var(--text-xs);\n color: var(--text-color-secondary);\n letter-spacing: 0.02em;\n }\n\n /* ── header-end spacer ────────────────────────────────────── */\n\n .header-spacer {\n flex: 1;\n }\n\n ::slotted([slot='header-end']) {\n flex-shrink: 0;\n }\n\n /* ── body ─────────────────────────────────────────────────── */\n\n .body {\n padding: var(--_body-padding);\n overflow-x: auto;\n }\n}\n"],"mappings":""}
@@ -9,8 +9,8 @@ export type OreCodeWindowProps = {
9
9
  /** Title string shown beside the traffic-light dots (`variant="chat"` only) */
10
10
  title?: string;
11
11
  /**
12
- * `"code"` (default) — header shows a language badge + filename.
13
- * `"chat"` — header shows traffic-light dots + a title.
12
+ * `"code"` (default): header shows a language badge + filename.
13
+ * `"chat"`: header shows traffic-light dots + a title.
14
14
  */
15
15
  variant?: CodeWindowVariant;
16
16
  };
@@ -18,8 +18,8 @@ export type OreCodeWindowProps = {
18
18
  * A styled window chrome for code blocks and AI/MCP conversation flows.
19
19
  *
20
20
  * Two variants:
21
- * - `variant="code"` (default) — language badge + optional filename header.
22
- * - `variant="chat"` — traffic-light dots + title header.
21
+ * - `variant="code"` (default): language badge + optional filename header.
22
+ * - `variant="chat"`: traffic-light dots + title header.
23
23
  *
24
24
  * @element ore-code-window
25
25
  *
@@ -30,6 +30,10 @@ export type { OrePaginationEvents, OrePaginationProps } from './pagination/pagin
30
30
  export { PAGINATION_TAG } from './pagination/pagination';
31
31
  export type { OreQrCodeEvents, OreQrCodeProps } from './qr-code/qr-code';
32
32
  export { QR_CODE_TAG } from './qr-code/qr-code';
33
+ export type { OreRankItemProps } from './rank-list/rank-item';
34
+ export { RANK_ITEM_TAG } from './rank-list/rank-item';
35
+ export type { OreRankListProps, RankContext } from './rank-list/rank-list';
36
+ export { RANK_CTX, RANK_LIST_TAG } from './rank-list/rank-list';
33
37
  export type { OreSeparatorProps } from './separator/separator';
34
38
  export { SEPARATOR_TAG } from './separator/separator';
35
39
  export type { OreSpeechPlayerEvents, OreSpeechPlayerLabels, OreSpeechPlayerProps, SpeechPlayerElement, SpeechPlayerState, } from './speech-player/speech-player';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"_list-item-reveal.cjs","names":[],"sources":["../../../src/content/list/_list-item-reveal.ts"],"sourcesContent":["import { createPanGesture, type PanGesture, type PanGestureDetail } from '@vielzeug/gesture';\nimport type { Readable } from '@vielzeug/ripple';\nimport type { ListItemRevealSide } from './list-item';\n\n/** Drag distance (px) past which the action panel snaps fully open on release. */\nconst REVEAL_THRESHOLD = 64;\n/** Drag distance (px) past which the swipe auto-confirms the action — \"swiped all the way\". */\nconst CONFIRM_THRESHOLD = REVEAL_THRESHOLD * 3;\n/** Fraction of CONFIRM_THRESHOLD past which `data-confirming` warns the drag is about to fire. */\nconst CONFIRM_WARNING_RATIO = 0.85;\n\nexport type RevealStateOptions = {\n disabled: Readable<boolean>;\n hasActions: (side: ListItemRevealSide) => boolean;\n /** The full-swipe-through gesture fired — emit `confirm` and click the slot's own action. */\n onConfirm: (side: ListItemRevealSide) => void;\n};\n\n/**\n * The swipe-reveal-confirm gesture behind `ore-list-item`'s `actions-left`/`actions-right` slots\n * — isolated here since it's the one genuinely tricky part of the component (three distance\n * thresholds, inline style/attribute choreography during an active drag). Deliberately *not* a\n * shared primitive: `createPanGesture` itself already is one (shared with `ore-toast`),\n * but this two-stage reveal/confirm layer on top of it has exactly one consumer today —\n * generalizing it further would be speculative, not reusable.\n *\n * Only sets/clears the `revealed`/`data-dragging`/`data-confirming` attributes and `--_swipe-x`\n * style — it does not itself emit `reveal`/`conceal`. `ore-list-item` already watches `revealed`\n * for transitions (to cover *both* this gesture and a directly-set attribute uniformly), so this\n * module setting the attribute is enough to drive both that watcher and `list.css`'s\n * `[revealed]` styling.\n */\nexport function createRevealState(el: HTMLElement, target: Element, options: RevealStateOptions): PanGesture {\n const resolveSide = (detail: PanGestureDetail): ListItemRevealSide => (detail.distance < 0 ? 'right' : 'left');\n\n // Inline `--_swipe-x` override during an active drag lets the row (and both action panels,\n // which read the same variable) follow the pointer 1:1 with no transition lag. Clearing it\n // hands control back to the `[revealed]`/`:focus-within` CSS rules in list-item.css, which\n // then animate normally via the CSS `transition`.\n const resetInline = (): void => {\n el.removeAttribute('data-dragging');\n el.removeAttribute('data-confirming');\n el.style.removeProperty('--_swipe-x');\n };\n\n let pan: PanGesture;\n\n pan = createPanGesture(target, {\n axis: 'x',\n disabled: () => options.disabled.value,\n onEnd: (detail) => {\n resetInline();\n\n if (detail.reason !== 'release') return;\n\n const side = resolveSide(detail);\n\n if (options.hasActions(side) && Math.abs(detail.distance) >= REVEAL_THRESHOLD) el.setAttribute('revealed', side);\n },\n onMove: (detail) => {\n const side = resolveSide(detail);\n\n if (!options.hasActions(side)) return;\n\n const distance = Math.abs(detail.distance);\n\n if (distance >= CONFIRM_THRESHOLD) {\n pan.cancel();\n el.removeAttribute('revealed');\n options.onConfirm(side);\n\n return;\n }\n\n const revealProgress = Math.min(distance / REVEAL_THRESHOLD, 1);\n\n el.setAttribute('data-dragging', '');\n el.toggleAttribute('data-confirming', distance / CONFIRM_THRESHOLD >= CONFIRM_WARNING_RATIO);\n el.style.setProperty('--_swipe-x', String((side === 'left' ? 1 : -1) * revealProgress));\n },\n pointerCapture: false,\n });\n\n return pan;\n}\n"],"mappings":"mCAKA,IAAM,EAAmB,GAEnB,EAAoB,IAEpB,EAAwB,IAuB9B,SAAgB,kBAAkB,EAAiB,EAAiB,EAAyC,CAC3G,IAAM,YAAe,GAAkD,EAAO,SAAW,EAAI,QAAU,OAMjG,gBAA0B,CAC9B,EAAG,gBAAgB,eAAe,EAClC,EAAG,gBAAgB,iBAAiB,EACpC,EAAG,MAAM,eAAe,YAAY,CACtC,EAEI,EAsCJ,MApCA,IAAA,EAAM,EAAA,iBAAA,CAAiB,EAAQ,CAC7B,KAAM,IACN,aAAgB,EAAQ,SAAS,MACjC,MAAQ,GAAW,CAGjB,GAFA,YAAY,EAER,EAAO,SAAW,UAAW,OAEjC,IAAM,EAAO,YAAY,CAAM,EAE3B,EAAQ,WAAW,CAAI,GAAK,KAAK,IAAI,EAAO,QAAQ,GAAK,GAAkB,EAAG,aAAa,WAAY,CAAI,CACjH,EACA,OAAS,GAAW,CAClB,IAAM,EAAO,YAAY,CAAM,EAE/B,GAAI,CAAC,EAAQ,WAAW,CAAI,EAAG,OAE/B,IAAM,EAAW,KAAK,IAAI,EAAO,QAAQ,EAEzC,GAAI,GAAY,EAAmB,CACjC,EAAI,OAAO,EACX,EAAG,gBAAgB,UAAU,EAC7B,EAAQ,UAAU,CAAI,EAEtB,MACF,CAEA,IAAM,EAAiB,KAAK,IAAI,EAAW,EAAkB,CAAC,EAE9D,EAAG,aAAa,gBAAiB,EAAE,EACnC,EAAG,gBAAgB,kBAAmB,EAAW,GAAqB,CAAqB,EAC3F,EAAG,MAAM,YAAY,aAAc,QAAQ,IAAS,OAAS,EAAI,IAAM,CAAc,CAAC,CACxF,EACA,eAAgB,EAClB,CAAC,EAEM,CACT"}
1
+ {"version":3,"file":"_list-item-reveal.cjs","names":[],"sources":["../../../src/content/list/_list-item-reveal.ts"],"sourcesContent":["import { createPanGesture, type PanGesture, type PanGestureDetail } from '@vielzeug/gesture';\nimport type { Readable } from '@vielzeug/ripple';\nimport type { ListItemRevealSide } from './list-item';\n\n/** Drag distance (px) past which the action panel snaps fully open on release. */\nconst REVEAL_THRESHOLD = 64;\n/** Drag distance (px) past which the swipe auto-confirms the action: \"swiped all the way\". */\nconst CONFIRM_THRESHOLD = REVEAL_THRESHOLD * 3;\n/** Fraction of CONFIRM_THRESHOLD past which `data-confirming` warns the drag is about to fire. */\nconst CONFIRM_WARNING_RATIO = 0.85;\n\nexport type RevealStateOptions = {\n disabled: Readable<boolean>;\n hasActions: (side: ListItemRevealSide) => boolean;\n /** The full-swipe-through gesture fired: emit `confirm` and click the slot's own action. */\n onConfirm: (side: ListItemRevealSide) => void;\n};\n\n/**\n * The swipe-reveal-confirm gesture behind `ore-list-item`'s `actions-left`/`actions-right` slots\n *: isolated here since it's the one genuinely tricky part of the component (three distance\n * thresholds, inline style/attribute choreography during an active drag). Deliberately *not* a\n * shared primitive: `createPanGesture` itself already is one (shared with `ore-toast`),\n * but this two-stage reveal/confirm layer on top of it has exactly one consumer today :\n * generalizing it further would be speculative, not reusable.\n *\n * Only sets/clears the `revealed`/`data-dragging`/`data-confirming` attributes and `--_swipe-x`\n * style: it does not itself emit `reveal`/`conceal`. `ore-list-item` already watches `revealed`\n * for transitions (to cover *both* this gesture and a directly-set attribute uniformly), so this\n * module setting the attribute is enough to drive both that watcher and `list.css`'s\n * `[revealed]` styling.\n */\nexport function createRevealState(el: HTMLElement, target: Element, options: RevealStateOptions): PanGesture {\n const resolveSide = (detail: PanGestureDetail): ListItemRevealSide => (detail.distance < 0 ? 'right' : 'left');\n\n // Inline `--_swipe-x` override during an active drag lets the row (and both action panels,\n // which read the same variable) follow the pointer 1:1 with no transition lag. Clearing it\n // hands control back to the `[revealed]`/`:focus-within` CSS rules in list-item.css, which\n // then animate normally via the CSS `transition`.\n const resetInline = (): void => {\n el.removeAttribute('data-dragging');\n el.removeAttribute('data-confirming');\n el.style.removeProperty('--_swipe-x');\n };\n\n let pan: PanGesture;\n\n pan = createPanGesture(target, {\n axis: 'x',\n disabled: () => options.disabled.value,\n onEnd: (detail) => {\n resetInline();\n\n if (detail.reason !== 'release') return;\n\n const side = resolveSide(detail);\n\n if (options.hasActions(side) && Math.abs(detail.distance) >= REVEAL_THRESHOLD) el.setAttribute('revealed', side);\n },\n onMove: (detail) => {\n const side = resolveSide(detail);\n\n if (!options.hasActions(side)) return;\n\n const distance = Math.abs(detail.distance);\n\n if (distance >= CONFIRM_THRESHOLD) {\n pan.cancel();\n el.removeAttribute('revealed');\n options.onConfirm(side);\n\n return;\n }\n\n const revealProgress = Math.min(distance / REVEAL_THRESHOLD, 1);\n\n el.setAttribute('data-dragging', '');\n el.toggleAttribute('data-confirming', distance / CONFIRM_THRESHOLD >= CONFIRM_WARNING_RATIO);\n el.style.setProperty('--_swipe-x', String((side === 'left' ? 1 : -1) * revealProgress));\n },\n pointerCapture: false,\n });\n\n return pan;\n}\n"],"mappings":"mCAKA,IAAM,EAAmB,GAEnB,EAAoB,IAEpB,EAAwB,IAuB9B,SAAgB,kBAAkB,EAAiB,EAAiB,EAAyC,CAC3G,IAAM,YAAe,GAAkD,EAAO,SAAW,EAAI,QAAU,OAMjG,gBAA0B,CAC9B,EAAG,gBAAgB,eAAe,EAClC,EAAG,gBAAgB,iBAAiB,EACpC,EAAG,MAAM,eAAe,YAAY,CACtC,EAEI,EAsCJ,MApCA,IAAA,EAAM,EAAA,iBAAA,CAAiB,EAAQ,CAC7B,KAAM,IACN,aAAgB,EAAQ,SAAS,MACjC,MAAQ,GAAW,CAGjB,GAFA,YAAY,EAER,EAAO,SAAW,UAAW,OAEjC,IAAM,EAAO,YAAY,CAAM,EAE3B,EAAQ,WAAW,CAAI,GAAK,KAAK,IAAI,EAAO,QAAQ,GAAK,GAAkB,EAAG,aAAa,WAAY,CAAI,CACjH,EACA,OAAS,GAAW,CAClB,IAAM,EAAO,YAAY,CAAM,EAE/B,GAAI,CAAC,EAAQ,WAAW,CAAI,EAAG,OAE/B,IAAM,EAAW,KAAK,IAAI,EAAO,QAAQ,EAEzC,GAAI,GAAY,EAAmB,CACjC,EAAI,OAAO,EACX,EAAG,gBAAgB,UAAU,EAC7B,EAAQ,UAAU,CAAI,EAEtB,MACF,CAEA,IAAM,EAAiB,KAAK,IAAI,EAAW,EAAkB,CAAC,EAE9D,EAAG,aAAa,gBAAiB,EAAE,EACnC,EAAG,gBAAgB,kBAAmB,EAAW,GAAqB,CAAqB,EAC3F,EAAG,MAAM,YAAY,aAAc,QAAQ,IAAS,OAAS,EAAI,IAAM,CAAc,CAAC,CACxF,EACA,eAAgB,EAClB,CAAC,EAEM,CACT"}
@@ -4,19 +4,19 @@ import type { ListItemRevealSide } from './list-item';
4
4
  export type RevealStateOptions = {
5
5
  disabled: Readable<boolean>;
6
6
  hasActions: (side: ListItemRevealSide) => boolean;
7
- /** The full-swipe-through gesture fired — emit `confirm` and click the slot's own action. */
7
+ /** The full-swipe-through gesture fired: emit `confirm` and click the slot's own action. */
8
8
  onConfirm: (side: ListItemRevealSide) => void;
9
9
  };
10
10
  /**
11
11
  * The swipe-reveal-confirm gesture behind `ore-list-item`'s `actions-left`/`actions-right` slots
12
- * — isolated here since it's the one genuinely tricky part of the component (three distance
12
+ *: isolated here since it's the one genuinely tricky part of the component (three distance
13
13
  * thresholds, inline style/attribute choreography during an active drag). Deliberately *not* a
14
14
  * shared primitive: `createPanGesture` itself already is one (shared with `ore-toast`),
15
- * but this two-stage reveal/confirm layer on top of it has exactly one consumer today —
15
+ * but this two-stage reveal/confirm layer on top of it has exactly one consumer today :
16
16
  * generalizing it further would be speculative, not reusable.
17
17
  *
18
18
  * Only sets/clears the `revealed`/`data-dragging`/`data-confirming` attributes and `--_swipe-x`
19
- * style — it does not itself emit `reveal`/`conceal`. `ore-list-item` already watches `revealed`
19
+ * style: it does not itself emit `reveal`/`conceal`. `ore-list-item` already watches `revealed`
20
20
  * for transitions (to cover *both* this gesture and a directly-set attribute uniformly), so this
21
21
  * module setting the attribute is enough to drive both that watcher and `list.css`'s
22
22
  * `[revealed]` styling.
@@ -1 +1 @@
1
- {"version":3,"file":"_list-item-reveal.d.ts","sourceRoot":"","sources":["../../../src/content/list/_list-item-reveal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAyB,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAStD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC;IAClD,6FAA6F;IAC7F,SAAS,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAoD3G"}
1
+ {"version":3,"file":"_list-item-reveal.d.ts","sourceRoot":"","sources":["../../../src/content/list/_list-item-reveal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAyB,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAStD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC;IAClD,4FAA4F;IAC5F,SAAS,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAoD3G"}
@@ -1 +1 @@
1
- {"version":3,"file":"_list-item-reveal.js","names":[],"sources":["../../../src/content/list/_list-item-reveal.ts"],"sourcesContent":["import { createPanGesture, type PanGesture, type PanGestureDetail } from '@vielzeug/gesture';\nimport type { Readable } from '@vielzeug/ripple';\nimport type { ListItemRevealSide } from './list-item';\n\n/** Drag distance (px) past which the action panel snaps fully open on release. */\nconst REVEAL_THRESHOLD = 64;\n/** Drag distance (px) past which the swipe auto-confirms the action — \"swiped all the way\". */\nconst CONFIRM_THRESHOLD = REVEAL_THRESHOLD * 3;\n/** Fraction of CONFIRM_THRESHOLD past which `data-confirming` warns the drag is about to fire. */\nconst CONFIRM_WARNING_RATIO = 0.85;\n\nexport type RevealStateOptions = {\n disabled: Readable<boolean>;\n hasActions: (side: ListItemRevealSide) => boolean;\n /** The full-swipe-through gesture fired — emit `confirm` and click the slot's own action. */\n onConfirm: (side: ListItemRevealSide) => void;\n};\n\n/**\n * The swipe-reveal-confirm gesture behind `ore-list-item`'s `actions-left`/`actions-right` slots\n * — isolated here since it's the one genuinely tricky part of the component (three distance\n * thresholds, inline style/attribute choreography during an active drag). Deliberately *not* a\n * shared primitive: `createPanGesture` itself already is one (shared with `ore-toast`),\n * but this two-stage reveal/confirm layer on top of it has exactly one consumer today —\n * generalizing it further would be speculative, not reusable.\n *\n * Only sets/clears the `revealed`/`data-dragging`/`data-confirming` attributes and `--_swipe-x`\n * style — it does not itself emit `reveal`/`conceal`. `ore-list-item` already watches `revealed`\n * for transitions (to cover *both* this gesture and a directly-set attribute uniformly), so this\n * module setting the attribute is enough to drive both that watcher and `list.css`'s\n * `[revealed]` styling.\n */\nexport function createRevealState(el: HTMLElement, target: Element, options: RevealStateOptions): PanGesture {\n const resolveSide = (detail: PanGestureDetail): ListItemRevealSide => (detail.distance < 0 ? 'right' : 'left');\n\n // Inline `--_swipe-x` override during an active drag lets the row (and both action panels,\n // which read the same variable) follow the pointer 1:1 with no transition lag. Clearing it\n // hands control back to the `[revealed]`/`:focus-within` CSS rules in list-item.css, which\n // then animate normally via the CSS `transition`.\n const resetInline = (): void => {\n el.removeAttribute('data-dragging');\n el.removeAttribute('data-confirming');\n el.style.removeProperty('--_swipe-x');\n };\n\n let pan: PanGesture;\n\n pan = createPanGesture(target, {\n axis: 'x',\n disabled: () => options.disabled.value,\n onEnd: (detail) => {\n resetInline();\n\n if (detail.reason !== 'release') return;\n\n const side = resolveSide(detail);\n\n if (options.hasActions(side) && Math.abs(detail.distance) >= REVEAL_THRESHOLD) el.setAttribute('revealed', side);\n },\n onMove: (detail) => {\n const side = resolveSide(detail);\n\n if (!options.hasActions(side)) return;\n\n const distance = Math.abs(detail.distance);\n\n if (distance >= CONFIRM_THRESHOLD) {\n pan.cancel();\n el.removeAttribute('revealed');\n options.onConfirm(side);\n\n return;\n }\n\n const revealProgress = Math.min(distance / REVEAL_THRESHOLD, 1);\n\n el.setAttribute('data-dragging', '');\n el.toggleAttribute('data-confirming', distance / CONFIRM_THRESHOLD >= CONFIRM_WARNING_RATIO);\n el.style.setProperty('--_swipe-x', String((side === 'left' ? 1 : -1) * revealProgress));\n },\n pointerCapture: false,\n });\n\n return pan;\n}\n"],"mappings":"qDAKA,IAAM,EAAmB,GAEnB,EAAoB,IAEpB,EAAwB,IAuB9B,SAAgB,kBAAkB,EAAiB,EAAiB,EAAyC,CAC3G,IAAM,YAAe,GAAkD,EAAO,SAAW,EAAI,QAAU,OAMjG,gBAA0B,CAC9B,EAAG,gBAAgB,eAAe,EAClC,EAAG,gBAAgB,iBAAiB,EACpC,EAAG,MAAM,eAAe,YAAY,CACtC,EAEI,EAsCJ,MApCA,GAAM,EAAiB,EAAQ,CAC7B,KAAM,IACN,aAAgB,EAAQ,SAAS,MACjC,MAAQ,GAAW,CAGjB,GAFA,YAAY,EAER,EAAO,SAAW,UAAW,OAEjC,IAAM,EAAO,YAAY,CAAM,EAE3B,EAAQ,WAAW,CAAI,GAAK,KAAK,IAAI,EAAO,QAAQ,GAAK,GAAkB,EAAG,aAAa,WAAY,CAAI,CACjH,EACA,OAAS,GAAW,CAClB,IAAM,EAAO,YAAY,CAAM,EAE/B,GAAI,CAAC,EAAQ,WAAW,CAAI,EAAG,OAE/B,IAAM,EAAW,KAAK,IAAI,EAAO,QAAQ,EAEzC,GAAI,GAAY,EAAmB,CACjC,EAAI,OAAO,EACX,EAAG,gBAAgB,UAAU,EAC7B,EAAQ,UAAU,CAAI,EAEtB,MACF,CAEA,IAAM,EAAiB,KAAK,IAAI,EAAW,EAAkB,CAAC,EAE9D,EAAG,aAAa,gBAAiB,EAAE,EACnC,EAAG,gBAAgB,kBAAmB,EAAW,GAAqB,CAAqB,EAC3F,EAAG,MAAM,YAAY,aAAc,QAAQ,IAAS,OAAS,EAAI,IAAM,CAAc,CAAC,CACxF,EACA,eAAgB,EAClB,CAAC,EAEM,CACT"}
1
+ {"version":3,"file":"_list-item-reveal.js","names":[],"sources":["../../../src/content/list/_list-item-reveal.ts"],"sourcesContent":["import { createPanGesture, type PanGesture, type PanGestureDetail } from '@vielzeug/gesture';\nimport type { Readable } from '@vielzeug/ripple';\nimport type { ListItemRevealSide } from './list-item';\n\n/** Drag distance (px) past which the action panel snaps fully open on release. */\nconst REVEAL_THRESHOLD = 64;\n/** Drag distance (px) past which the swipe auto-confirms the action: \"swiped all the way\". */\nconst CONFIRM_THRESHOLD = REVEAL_THRESHOLD * 3;\n/** Fraction of CONFIRM_THRESHOLD past which `data-confirming` warns the drag is about to fire. */\nconst CONFIRM_WARNING_RATIO = 0.85;\n\nexport type RevealStateOptions = {\n disabled: Readable<boolean>;\n hasActions: (side: ListItemRevealSide) => boolean;\n /** The full-swipe-through gesture fired: emit `confirm` and click the slot's own action. */\n onConfirm: (side: ListItemRevealSide) => void;\n};\n\n/**\n * The swipe-reveal-confirm gesture behind `ore-list-item`'s `actions-left`/`actions-right` slots\n *: isolated here since it's the one genuinely tricky part of the component (three distance\n * thresholds, inline style/attribute choreography during an active drag). Deliberately *not* a\n * shared primitive: `createPanGesture` itself already is one (shared with `ore-toast`),\n * but this two-stage reveal/confirm layer on top of it has exactly one consumer today :\n * generalizing it further would be speculative, not reusable.\n *\n * Only sets/clears the `revealed`/`data-dragging`/`data-confirming` attributes and `--_swipe-x`\n * style: it does not itself emit `reveal`/`conceal`. `ore-list-item` already watches `revealed`\n * for transitions (to cover *both* this gesture and a directly-set attribute uniformly), so this\n * module setting the attribute is enough to drive both that watcher and `list.css`'s\n * `[revealed]` styling.\n */\nexport function createRevealState(el: HTMLElement, target: Element, options: RevealStateOptions): PanGesture {\n const resolveSide = (detail: PanGestureDetail): ListItemRevealSide => (detail.distance < 0 ? 'right' : 'left');\n\n // Inline `--_swipe-x` override during an active drag lets the row (and both action panels,\n // which read the same variable) follow the pointer 1:1 with no transition lag. Clearing it\n // hands control back to the `[revealed]`/`:focus-within` CSS rules in list-item.css, which\n // then animate normally via the CSS `transition`.\n const resetInline = (): void => {\n el.removeAttribute('data-dragging');\n el.removeAttribute('data-confirming');\n el.style.removeProperty('--_swipe-x');\n };\n\n let pan: PanGesture;\n\n pan = createPanGesture(target, {\n axis: 'x',\n disabled: () => options.disabled.value,\n onEnd: (detail) => {\n resetInline();\n\n if (detail.reason !== 'release') return;\n\n const side = resolveSide(detail);\n\n if (options.hasActions(side) && Math.abs(detail.distance) >= REVEAL_THRESHOLD) el.setAttribute('revealed', side);\n },\n onMove: (detail) => {\n const side = resolveSide(detail);\n\n if (!options.hasActions(side)) return;\n\n const distance = Math.abs(detail.distance);\n\n if (distance >= CONFIRM_THRESHOLD) {\n pan.cancel();\n el.removeAttribute('revealed');\n options.onConfirm(side);\n\n return;\n }\n\n const revealProgress = Math.min(distance / REVEAL_THRESHOLD, 1);\n\n el.setAttribute('data-dragging', '');\n el.toggleAttribute('data-confirming', distance / CONFIRM_THRESHOLD >= CONFIRM_WARNING_RATIO);\n el.style.setProperty('--_swipe-x', String((side === 'left' ? 1 : -1) * revealProgress));\n },\n pointerCapture: false,\n });\n\n return pan;\n}\n"],"mappings":"qDAKA,IAAM,EAAmB,GAEnB,EAAoB,IAEpB,EAAwB,IAuB9B,SAAgB,kBAAkB,EAAiB,EAAiB,EAAyC,CAC3G,IAAM,YAAe,GAAkD,EAAO,SAAW,EAAI,QAAU,OAMjG,gBAA0B,CAC9B,EAAG,gBAAgB,eAAe,EAClC,EAAG,gBAAgB,iBAAiB,EACpC,EAAG,MAAM,eAAe,YAAY,CACtC,EAEI,EAsCJ,MApCA,GAAM,EAAiB,EAAQ,CAC7B,KAAM,IACN,aAAgB,EAAQ,SAAS,MACjC,MAAQ,GAAW,CAGjB,GAFA,YAAY,EAER,EAAO,SAAW,UAAW,OAEjC,IAAM,EAAO,YAAY,CAAM,EAE3B,EAAQ,WAAW,CAAI,GAAK,KAAK,IAAI,EAAO,QAAQ,GAAK,GAAkB,EAAG,aAAa,WAAY,CAAI,CACjH,EACA,OAAS,GAAW,CAClB,IAAM,EAAO,YAAY,CAAM,EAE/B,GAAI,CAAC,EAAQ,WAAW,CAAI,EAAG,OAE/B,IAAM,EAAW,KAAK,IAAI,EAAO,QAAQ,EAEzC,GAAI,GAAY,EAAmB,CACjC,EAAI,OAAO,EACX,EAAG,gBAAgB,UAAU,EAC7B,EAAQ,UAAU,CAAI,EAEtB,MACF,CAEA,IAAM,EAAiB,KAAK,IAAI,EAAW,EAAkB,CAAC,EAE9D,EAAG,aAAa,gBAAiB,EAAE,EACnC,EAAG,gBAAgB,kBAAmB,EAAW,GAAqB,CAAqB,EAC3F,EAAG,MAAM,YAAY,aAAc,QAAQ,IAAS,OAAS,EAAI,IAAM,CAAc,CAAC,CACxF,EACA,eAAgB,EAClB,CAAC,EAEM,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-item.css.cjs","names":[],"sources":["../../../src/content/list/list-item.css?inline"],"sourcesContent":["@layer refine.base {\n /* `--_gap` / `--_padding` / `--_font-size` are intentionally not emitted by any mixin in this\n component's own `styles` array — they're inherited from the parent `ore-list`'s\n `sizeVariantMixin(LIST_SIZE_PRESET)` call the same way `ore-menu-item` inherits\n `--_gap`/`--_font-size` from `ore-menu` (see `LIST_SIZE_PRESET`'s doc comment). The\n `var(..., fallback)` defaults below cover standalone use outside an `ore-list`. */\n :host {\n --_actions-width: var(--list-item-actions-width, var(--size-24));\n position: relative;\n display: block;\n overflow: hidden;\n color: var(--color-contrast-700);\n }\n\n /* ========================================\n Row\n ======================================== */\n\n .row {\n position: relative;\n z-index: 1;\n box-sizing: border-box;\n display: flex;\n gap: var(--_gap, var(--size-4));\n align-items: center;\n width: 100%;\n min-height: var(--_min-height, var(--size-4));\n padding: var(--_padding, var(--size-2-5) var(--size-4));\n padding-inline-end: var(--_padding-inline-end, var(--size-6));\n font-size: var(--_font-size, var(--text-sm));\n text-align: start;\n touch-action: pan-y;\n cursor: default;\n outline: none;\n background: var(--list-item-bg, var(--color-canvas));\n border: none;\n transform: translateX(calc(var(--_swipe-x, var(--_peek-x, 0)) * var(--_actions-width)));\n transition: var(--_motion-transition, transform var(--transition-fast), background var(--transition-fast));\n }\n\n :host([data-two-line]) .row {\n min-height: var(--_min-height-two-line, var(--size-18));\n }\n\n :host([actionable]) .row {\n cursor: pointer;\n }\n\n .leading,\n .trailing {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n }\n\n .leading[hidden],\n .trailing[hidden] {\n display: none;\n }\n\n .content {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-0-5);\n min-width: 0;\n }\n\n .title {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .description {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--text-xs);\n color: var(--color-contrast-600);\n white-space: nowrap;\n }\n\n .description:empty {\n display: none;\n }\n\n .row:hover {\n background: var(--list-item-hover-bg, var(--color-contrast-100));\n }\n\n .row:focus-visible {\n outline: var(--focus-ring);\n outline-offset: -2px;\n }\n\n /* ========================================\n Selected / Disabled States\n ======================================== */\n\n :host([selected]) .row {\n color: var(--color-primary);\n background: var(--list-item-selected-bg, color-mix(in oklch, var(--color-primary) 10%, transparent));\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.6;\n }\n\n /* ========================================\n Swipe Action Panels\n ======================================== */\n\n .actions {\n position: absolute;\n inset-block: 0;\n display: flex;\n align-items: stretch;\n width: var(--_actions-width);\n transition: var(--_motion-transition, transform var(--transition-fast));\n }\n\n /* A single slotted action button fills the whole revealed panel — the common case (one big\n tappable target, e.g. a full-height \"Delete\" button) rather than a small icon-sized hit area.\n This stretches the slotted element's own light-DOM box, which is enough for plain elements\n (a native <button>, an <a>, ...). It is NOT enough on its own for `ore-button`: its visible\n surface is an inner `[part=\"button\"]` with a fixed height from its size preset, independent\n of its own host box size — pass `fullheight` on the `ore-button` itself too (see its own\n `fullheight` prop) to actually fill this panel edge-to-edge. */\n .actions ::slotted(*) {\n flex: 1;\n height: 100%;\n }\n\n .actions-left {\n left: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) - 1) * 100%));\n }\n\n .actions-right {\n right: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) + 1) * 100%));\n }\n\n /* `:host(:has(...))` (`:has()` as `:host()`'s functional argument) is invalid — `:host()`\n only accepts a compound selector and doesn't accept `:has()` inside it. The plain `:host`\n pseudo-class chained directly with `:has()` (no parentheses) is the valid form. Kept as\n separate rules (not grouped via a comma with the `[revealed]` rules) so a selector list\n doesn't silently drop the whole rule if either half were ever invalid again. */\n :host([revealed='left']) {\n --_swipe-x: 1;\n }\n\n :host([revealed='right']) {\n --_swipe-x: -1;\n }\n\n :host:has(.actions-left:focus-within) {\n --_swipe-x: 1;\n }\n\n :host:has(.actions-right:focus-within) {\n --_swipe-x: -1;\n }\n\n /* Suppress the transition while a drag is actively updating `--_swipe-x` inline so the row\n and action panels track the pointer 1:1 instead of lagging behind on every move event. */\n :host([data-dragging]) .row,\n :host([data-dragging]) .actions-left,\n :host([data-dragging]) .actions-right {\n transition: none;\n }\n\n /* Feedback that the drag has passed into \"swipe all the way through\" territory (close to\n CONFIRM_THRESHOLD) — set by list-item.ts's onMove once past ~85% of that distance, cleared\n on release/cancel/commit. Visual-only; the confirm itself fires from JS regardless of CSS. */\n :host([data-confirming]) .actions-left,\n :host([data-confirming]) .actions-right {\n filter: saturate(1.4) brightness(0.94);\n }\n\n /* ========================================\n Hover peek — the swipe affordance\n ======================================== */\n\n /* A hovered row peeks a few pixels of its first action panel so the swipe affordance is\n discoverable without a gesture. `--_peek-x` is only consumed while `--_swipe-x` is unset\n (not revealed, not dragging, no slotted action focused), so the peek can never fight the\n real states — it is the fallback, not a competitor. Fine pointers only: touch discovers\n the gesture natively, and `hover` media guards hybrid devices. */\n @media (hover: hover) and (pointer: fine) {\n :host([data-peek='left']:hover:not([revealed])) {\n --_peek-x: var(--list-item-peek, 0.08);\n }\n\n :host([data-peek='right']:hover:not([revealed])) {\n --_peek-x: calc(var(--list-item-peek, 0.08) * -1);\n }\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"list-item.css.cjs","names":[],"sources":["../../../src/content/list/list-item.css?inline"],"sourcesContent":["@layer refine.base {\n /* `--_gap` / `--_padding` / `--_font-size` are intentionally not emitted by any mixin in this\n component's own `styles` array: they're inherited from the parent `ore-list`'s\n `sizeVariantMixin(LIST_SIZE_PRESET)` call the same way `ore-menu-item` inherits\n `--_gap`/`--_font-size` from `ore-menu` (see `LIST_SIZE_PRESET`'s doc comment). The\n `var(..., fallback)` defaults below cover standalone use outside an `ore-list`. */\n :host {\n --_actions-width: var(--list-item-actions-width, var(--size-24));\n position: relative;\n display: block;\n overflow: hidden;\n color: var(--color-contrast-700);\n }\n\n /* ========================================\n Row\n ======================================== */\n\n .row {\n position: relative;\n z-index: 1;\n box-sizing: border-box;\n display: flex;\n gap: var(--_gap, var(--size-4));\n align-items: center;\n width: 100%;\n min-height: var(--_min-height, var(--size-4));\n padding: var(--_padding, var(--size-2-5) var(--size-4));\n padding-inline-end: var(--_padding-inline-end, var(--size-6));\n font-size: var(--_font-size, var(--text-sm));\n text-align: start;\n touch-action: pan-y;\n cursor: default;\n outline: none;\n background: var(--list-item-bg, var(--color-canvas));\n border: none;\n transform: translateX(calc(var(--_swipe-x, var(--_peek-x, 0)) * var(--_actions-width)));\n transition: var(--_motion-transition, transform var(--transition-fast), background var(--transition-fast));\n }\n\n :host([data-two-line]) .row {\n min-height: var(--_min-height-two-line, var(--size-18));\n }\n\n :host([actionable]) .row {\n cursor: pointer;\n }\n\n .leading,\n .trailing {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n }\n\n .leading[hidden],\n .trailing[hidden] {\n display: none;\n }\n\n .content {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-0-5);\n min-width: 0;\n }\n\n .title {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .description {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--text-xs);\n color: var(--color-contrast-600);\n white-space: nowrap;\n }\n\n .description:empty {\n display: none;\n }\n\n .row:hover {\n background: var(--list-item-hover-bg, var(--color-contrast-100));\n }\n\n .row:focus-visible {\n outline: var(--focus-ring);\n outline-offset: -2px;\n }\n\n /* ========================================\n Selected / Disabled States\n ======================================== */\n\n :host([selected]) .row {\n color: var(--color-primary);\n background: var(--list-item-selected-bg, color-mix(in oklch, var(--color-primary) 10%, transparent));\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.6;\n }\n\n /* ========================================\n Swipe Action Panels\n ======================================== */\n\n .actions {\n position: absolute;\n inset-block: 0;\n display: flex;\n align-items: stretch;\n width: var(--_actions-width);\n transition: var(--_motion-transition, transform var(--transition-fast));\n }\n\n /* A single slotted action button fills the whole revealed panel: the common case (one big\n tappable target, e.g. a full-height \"Delete\" button) rather than a small icon-sized hit area.\n This stretches the slotted element's own light-DOM box, which is enough for plain elements\n (a native <button>, an <a>, ...). It is NOT enough on its own for `ore-button`: its visible\n surface is an inner `[part=\"button\"]` with a fixed height from its size preset, independent\n of its own host box size: pass `fullheight` on the `ore-button` itself too (see its own\n `fullheight` prop) to actually fill this panel edge-to-edge. */\n .actions ::slotted(*) {\n flex: 1;\n height: 100%;\n }\n\n .actions-left {\n left: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) - 1) * 100%));\n }\n\n .actions-right {\n right: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) + 1) * 100%));\n }\n\n /* `:host(:has(...))` (`:has()` as `:host()`'s functional argument) is invalid: `:host()`\n only accepts a compound selector and doesn't accept `:has()` inside it. The plain `:host`\n pseudo-class chained directly with `:has()` (no parentheses) is the valid form. Kept as\n separate rules (not grouped via a comma with the `[revealed]` rules) so a selector list\n doesn't silently drop the whole rule if either half were ever invalid again. */\n :host([revealed='left']) {\n --_swipe-x: 1;\n }\n\n :host([revealed='right']) {\n --_swipe-x: -1;\n }\n\n :host:has(.actions-left:focus-within) {\n --_swipe-x: 1;\n }\n\n :host:has(.actions-right:focus-within) {\n --_swipe-x: -1;\n }\n\n /* Suppress the transition while a drag is actively updating `--_swipe-x` inline so the row\n and action panels track the pointer 1:1 instead of lagging behind on every move event. */\n :host([data-dragging]) .row,\n :host([data-dragging]) .actions-left,\n :host([data-dragging]) .actions-right {\n transition: none;\n }\n\n /* Feedback that the drag has passed into \"swipe all the way through\" territory (close to\n CONFIRM_THRESHOLD): set by list-item.ts's onMove once past ~85% of that distance, cleared\n on release/cancel/commit. Visual-only; the confirm itself fires from JS regardless of CSS. */\n :host([data-confirming]) .actions-left,\n :host([data-confirming]) .actions-right {\n filter: saturate(1.4) brightness(0.94);\n }\n\n /* ========================================\n Hover peek: the swipe affordance\n ======================================== */\n\n /* A hovered row peeks a few pixels of its first action panel so the swipe affordance is\n discoverable without a gesture. `--_peek-x` is only consumed while `--_swipe-x` is unset\n (not revealed, not dragging, no slotted action focused), so the peek can never fight the\n real states: it is the fallback, not a competitor. Fine pointers only: touch discovers\n the gesture natively, and `hover` media guards hybrid devices. */\n @media (hover: hover) and (pointer: fine) {\n :host([data-peek='left']:hover:not([revealed])) {\n --_peek-x: var(--list-item-peek, 0.08);\n }\n\n :host([data-peek='right']:hover:not([revealed])) {\n --_peek-x: calc(var(--list-item-peek, 0.08) * -1);\n }\n }\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"list-item.css.js","names":[],"sources":["../../../src/content/list/list-item.css?inline"],"sourcesContent":["@layer refine.base {\n /* `--_gap` / `--_padding` / `--_font-size` are intentionally not emitted by any mixin in this\n component's own `styles` array — they're inherited from the parent `ore-list`'s\n `sizeVariantMixin(LIST_SIZE_PRESET)` call the same way `ore-menu-item` inherits\n `--_gap`/`--_font-size` from `ore-menu` (see `LIST_SIZE_PRESET`'s doc comment). The\n `var(..., fallback)` defaults below cover standalone use outside an `ore-list`. */\n :host {\n --_actions-width: var(--list-item-actions-width, var(--size-24));\n position: relative;\n display: block;\n overflow: hidden;\n color: var(--color-contrast-700);\n }\n\n /* ========================================\n Row\n ======================================== */\n\n .row {\n position: relative;\n z-index: 1;\n box-sizing: border-box;\n display: flex;\n gap: var(--_gap, var(--size-4));\n align-items: center;\n width: 100%;\n min-height: var(--_min-height, var(--size-4));\n padding: var(--_padding, var(--size-2-5) var(--size-4));\n padding-inline-end: var(--_padding-inline-end, var(--size-6));\n font-size: var(--_font-size, var(--text-sm));\n text-align: start;\n touch-action: pan-y;\n cursor: default;\n outline: none;\n background: var(--list-item-bg, var(--color-canvas));\n border: none;\n transform: translateX(calc(var(--_swipe-x, var(--_peek-x, 0)) * var(--_actions-width)));\n transition: var(--_motion-transition, transform var(--transition-fast), background var(--transition-fast));\n }\n\n :host([data-two-line]) .row {\n min-height: var(--_min-height-two-line, var(--size-18));\n }\n\n :host([actionable]) .row {\n cursor: pointer;\n }\n\n .leading,\n .trailing {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n }\n\n .leading[hidden],\n .trailing[hidden] {\n display: none;\n }\n\n .content {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-0-5);\n min-width: 0;\n }\n\n .title {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .description {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--text-xs);\n color: var(--color-contrast-600);\n white-space: nowrap;\n }\n\n .description:empty {\n display: none;\n }\n\n .row:hover {\n background: var(--list-item-hover-bg, var(--color-contrast-100));\n }\n\n .row:focus-visible {\n outline: var(--focus-ring);\n outline-offset: -2px;\n }\n\n /* ========================================\n Selected / Disabled States\n ======================================== */\n\n :host([selected]) .row {\n color: var(--color-primary);\n background: var(--list-item-selected-bg, color-mix(in oklch, var(--color-primary) 10%, transparent));\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.6;\n }\n\n /* ========================================\n Swipe Action Panels\n ======================================== */\n\n .actions {\n position: absolute;\n inset-block: 0;\n display: flex;\n align-items: stretch;\n width: var(--_actions-width);\n transition: var(--_motion-transition, transform var(--transition-fast));\n }\n\n /* A single slotted action button fills the whole revealed panel — the common case (one big\n tappable target, e.g. a full-height \"Delete\" button) rather than a small icon-sized hit area.\n This stretches the slotted element's own light-DOM box, which is enough for plain elements\n (a native <button>, an <a>, ...). It is NOT enough on its own for `ore-button`: its visible\n surface is an inner `[part=\"button\"]` with a fixed height from its size preset, independent\n of its own host box size — pass `fullheight` on the `ore-button` itself too (see its own\n `fullheight` prop) to actually fill this panel edge-to-edge. */\n .actions ::slotted(*) {\n flex: 1;\n height: 100%;\n }\n\n .actions-left {\n left: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) - 1) * 100%));\n }\n\n .actions-right {\n right: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) + 1) * 100%));\n }\n\n /* `:host(:has(...))` (`:has()` as `:host()`'s functional argument) is invalid — `:host()`\n only accepts a compound selector and doesn't accept `:has()` inside it. The plain `:host`\n pseudo-class chained directly with `:has()` (no parentheses) is the valid form. Kept as\n separate rules (not grouped via a comma with the `[revealed]` rules) so a selector list\n doesn't silently drop the whole rule if either half were ever invalid again. */\n :host([revealed='left']) {\n --_swipe-x: 1;\n }\n\n :host([revealed='right']) {\n --_swipe-x: -1;\n }\n\n :host:has(.actions-left:focus-within) {\n --_swipe-x: 1;\n }\n\n :host:has(.actions-right:focus-within) {\n --_swipe-x: -1;\n }\n\n /* Suppress the transition while a drag is actively updating `--_swipe-x` inline so the row\n and action panels track the pointer 1:1 instead of lagging behind on every move event. */\n :host([data-dragging]) .row,\n :host([data-dragging]) .actions-left,\n :host([data-dragging]) .actions-right {\n transition: none;\n }\n\n /* Feedback that the drag has passed into \"swipe all the way through\" territory (close to\n CONFIRM_THRESHOLD) — set by list-item.ts's onMove once past ~85% of that distance, cleared\n on release/cancel/commit. Visual-only; the confirm itself fires from JS regardless of CSS. */\n :host([data-confirming]) .actions-left,\n :host([data-confirming]) .actions-right {\n filter: saturate(1.4) brightness(0.94);\n }\n\n /* ========================================\n Hover peek — the swipe affordance\n ======================================== */\n\n /* A hovered row peeks a few pixels of its first action panel so the swipe affordance is\n discoverable without a gesture. `--_peek-x` is only consumed while `--_swipe-x` is unset\n (not revealed, not dragging, no slotted action focused), so the peek can never fight the\n real states — it is the fallback, not a competitor. Fine pointers only: touch discovers\n the gesture natively, and `hover` media guards hybrid devices. */\n @media (hover: hover) and (pointer: fine) {\n :host([data-peek='left']:hover:not([revealed])) {\n --_peek-x: var(--list-item-peek, 0.08);\n }\n\n :host([data-peek='right']:hover:not([revealed])) {\n --_peek-x: calc(var(--list-item-peek, 0.08) * -1);\n }\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"list-item.css.js","names":[],"sources":["../../../src/content/list/list-item.css?inline"],"sourcesContent":["@layer refine.base {\n /* `--_gap` / `--_padding` / `--_font-size` are intentionally not emitted by any mixin in this\n component's own `styles` array: they're inherited from the parent `ore-list`'s\n `sizeVariantMixin(LIST_SIZE_PRESET)` call the same way `ore-menu-item` inherits\n `--_gap`/`--_font-size` from `ore-menu` (see `LIST_SIZE_PRESET`'s doc comment). The\n `var(..., fallback)` defaults below cover standalone use outside an `ore-list`. */\n :host {\n --_actions-width: var(--list-item-actions-width, var(--size-24));\n position: relative;\n display: block;\n overflow: hidden;\n color: var(--color-contrast-700);\n }\n\n /* ========================================\n Row\n ======================================== */\n\n .row {\n position: relative;\n z-index: 1;\n box-sizing: border-box;\n display: flex;\n gap: var(--_gap, var(--size-4));\n align-items: center;\n width: 100%;\n min-height: var(--_min-height, var(--size-4));\n padding: var(--_padding, var(--size-2-5) var(--size-4));\n padding-inline-end: var(--_padding-inline-end, var(--size-6));\n font-size: var(--_font-size, var(--text-sm));\n text-align: start;\n touch-action: pan-y;\n cursor: default;\n outline: none;\n background: var(--list-item-bg, var(--color-canvas));\n border: none;\n transform: translateX(calc(var(--_swipe-x, var(--_peek-x, 0)) * var(--_actions-width)));\n transition: var(--_motion-transition, transform var(--transition-fast), background var(--transition-fast));\n }\n\n :host([data-two-line]) .row {\n min-height: var(--_min-height-two-line, var(--size-18));\n }\n\n :host([actionable]) .row {\n cursor: pointer;\n }\n\n .leading,\n .trailing {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n }\n\n .leading[hidden],\n .trailing[hidden] {\n display: none;\n }\n\n .content {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--size-0-5);\n min-width: 0;\n }\n\n .title {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .description {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--text-xs);\n color: var(--color-contrast-600);\n white-space: nowrap;\n }\n\n .description:empty {\n display: none;\n }\n\n .row:hover {\n background: var(--list-item-hover-bg, var(--color-contrast-100));\n }\n\n .row:focus-visible {\n outline: var(--focus-ring);\n outline-offset: -2px;\n }\n\n /* ========================================\n Selected / Disabled States\n ======================================== */\n\n :host([selected]) .row {\n color: var(--color-primary);\n background: var(--list-item-selected-bg, color-mix(in oklch, var(--color-primary) 10%, transparent));\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.6;\n }\n\n /* ========================================\n Swipe Action Panels\n ======================================== */\n\n .actions {\n position: absolute;\n inset-block: 0;\n display: flex;\n align-items: stretch;\n width: var(--_actions-width);\n transition: var(--_motion-transition, transform var(--transition-fast));\n }\n\n /* A single slotted action button fills the whole revealed panel: the common case (one big\n tappable target, e.g. a full-height \"Delete\" button) rather than a small icon-sized hit area.\n This stretches the slotted element's own light-DOM box, which is enough for plain elements\n (a native <button>, an <a>, ...). It is NOT enough on its own for `ore-button`: its visible\n surface is an inner `[part=\"button\"]` with a fixed height from its size preset, independent\n of its own host box size: pass `fullheight` on the `ore-button` itself too (see its own\n `fullheight` prop) to actually fill this panel edge-to-edge. */\n .actions ::slotted(*) {\n flex: 1;\n height: 100%;\n }\n\n .actions-left {\n left: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) - 1) * 100%));\n }\n\n .actions-right {\n right: 0;\n transform: translateX(calc((var(--_swipe-x, var(--_peek-x, 0)) + 1) * 100%));\n }\n\n /* `:host(:has(...))` (`:has()` as `:host()`'s functional argument) is invalid: `:host()`\n only accepts a compound selector and doesn't accept `:has()` inside it. The plain `:host`\n pseudo-class chained directly with `:has()` (no parentheses) is the valid form. Kept as\n separate rules (not grouped via a comma with the `[revealed]` rules) so a selector list\n doesn't silently drop the whole rule if either half were ever invalid again. */\n :host([revealed='left']) {\n --_swipe-x: 1;\n }\n\n :host([revealed='right']) {\n --_swipe-x: -1;\n }\n\n :host:has(.actions-left:focus-within) {\n --_swipe-x: 1;\n }\n\n :host:has(.actions-right:focus-within) {\n --_swipe-x: -1;\n }\n\n /* Suppress the transition while a drag is actively updating `--_swipe-x` inline so the row\n and action panels track the pointer 1:1 instead of lagging behind on every move event. */\n :host([data-dragging]) .row,\n :host([data-dragging]) .actions-left,\n :host([data-dragging]) .actions-right {\n transition: none;\n }\n\n /* Feedback that the drag has passed into \"swipe all the way through\" territory (close to\n CONFIRM_THRESHOLD): set by list-item.ts's onMove once past ~85% of that distance, cleared\n on release/cancel/commit. Visual-only; the confirm itself fires from JS regardless of CSS. */\n :host([data-confirming]) .actions-left,\n :host([data-confirming]) .actions-right {\n filter: saturate(1.4) brightness(0.94);\n }\n\n /* ========================================\n Hover peek: the swipe affordance\n ======================================== */\n\n /* A hovered row peeks a few pixels of its first action panel so the swipe affordance is\n discoverable without a gesture. `--_peek-x` is only consumed while `--_swipe-x` is unset\n (not revealed, not dragging, no slotted action focused), so the peek can never fight the\n real states: it is the fallback, not a competitor. Fine pointers only: touch discovers\n the gesture natively, and `hover` media guards hybrid devices. */\n @media (hover: hover) and (pointer: fine) {\n :host([data-peek='left']:hover:not([revealed])) {\n --_peek-x: var(--list-item-peek, 0.08);\n }\n\n :host([data-peek='right']:hover:not([revealed])) {\n --_peek-x: calc(var(--list-item-peek, 0.08) * -1);\n }\n }\n}\n"],"mappings":""}
@@ -12,7 +12,7 @@ export type OreListItemEvents = {
12
12
  item: HTMLElement;
13
13
  };
14
14
  /**
15
- * Emitted when a swipe crosses the full-swipe-through distance — the "swiped all the way"
15
+ * Emitted when a swipe crosses the full-swipe-through distance: the "swiped all the way"
16
16
  * confirm gesture. Fired just before the slotted action's own click (if any).
17
17
  */
18
18
  confirm: {
@@ -39,13 +39,13 @@ export type OreListItemEvents = {
39
39
  export type OreListItemProps = {
40
40
  /** Enable pointer and Enter/Space activation with button semantics. */
41
41
  actionable?: boolean;
42
- /** Disable this item — blocks pointer interaction, swipe actions, and selection */
42
+ /** Disable this item: blocks pointer interaction, swipe actions, and selection */
43
43
  disabled?: boolean;
44
44
  /** Which action panel is revealed: 'left' | 'right' (absent = closed). Settable programmatically. */
45
45
  revealed?: ListItemRevealSide;
46
46
  /**
47
47
  * Opaque value compared against the parent `selectable` `ore-list`'s own `value` to derive
48
- * `selected` — required for selection to work. There's no separate `selected` prop: the parent
48
+ * `selected`: required for selection to work. There's no separate `selected` prop: the parent
49
49
  * list's `value` is the single source of truth, so this item's selected state can't drift from
50
50
  * it. Also reported in `select`/`deselect`/the parent's `change` event.
51
51
  */
@@ -54,19 +54,19 @@ export type OreListItemProps = {
54
54
  /**
55
55
  * A single row inside `ore-list`. Renders `leading`/default (title)/`description`/`trailing`
56
56
  * content plus two off-canvas action panels (`actions-left`, `actions-right`) that a horizontal
57
- * pointer/touch swipe reveals — useful for mobile-style row actions (archive, delete, …). An
57
+ * pointer/touch swipe reveals: useful for mobile-style row actions (archive, delete, …). An
58
58
  * action panel only opens if it actually has slotted content; swiping the other direction is a
59
59
  * no-op. Revealed actions stay reachable from the keyboard (Tab focus on a slotted action button
60
60
  * reveals its panel via `:focus-within`, independent of any gesture).
61
61
  *
62
- * Swiping past the reveal distance snaps the panel fully open on release; swiping further still —
63
- * past the full-swipe-through distance — auto-confirms that side's action immediately (fires
62
+ * Swiping past the reveal distance snaps the panel fully open on release; swiping further still :
63
+ * past the full-swipe-through distance: auto-confirms that side's action immediately (fires
64
64
  * `confirm` and clicks the slot's first element), the same "swipe all the way" shortcut as iOS
65
65
  * Mail's delete gesture.
66
66
  *
67
67
  * Closing a revealed panel is deliberately one-directional: tap/click the row itself, tap outside
68
68
  * the item, or open a different item's panel. Reverse-swiping an already-open item is not
69
- * supported — see `ore-list`'s docs for the reasoning.
69
+ * supported: see `ore-list`'s docs for the reasoning.
70
70
  *
71
71
  * On hover-capable fine pointers, a hovered row peeks a few pixels of its first action panel
72
72
  * (`--list-item-peek`, a fraction of the panel width) so the swipe affordance is discoverable
@@ -85,7 +85,7 @@ export type OreListItemProps = {
85
85
  * @fires deselect - Item becomes deselected. detail: { item: HTMLElement, value: string | null }
86
86
  * @fires reveal - An action panel opens. detail: { item: HTMLElement, side: 'left' | 'right' }
87
87
  * @fires conceal - The revealed action panel closes. detail: { item: HTMLElement }
88
- * @fires confirm - Swiped all the way through — fires before the slotted action's own click. detail: { item: HTMLElement, side: 'left' | 'right' }
88
+ * @fires confirm - Swiped all the way through: fires before the slotted action's own click. detail: { item: HTMLElement, side: 'left' | 'right' }
89
89
  *
90
90
  * @slot leading - Content before the title (e.g. icon, avatar)
91
91
  * @slot - Item title
@@ -1 +1 @@
1
- {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../../src/content/list/list-item.ts"],"names":[],"mappings":"AAqBA,sEAAsE;AACtE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAC;AAElD,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;IACtD,qFAAqF;IACrF,OAAO,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IAC/B;;;OAGG;IACH,OAAO,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACzD,gDAAgD;IAChD,QAAQ,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;IACtD,0DAA0D;IAC1D,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACxD,iGAAiG;IACjG,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;CACrD,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,eAAO,MAAM,aAAa,EAAG,eAAwB,CAAC"}
1
+ {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../../src/content/list/list-item.ts"],"names":[],"mappings":"AAqBA,sEAAsE;AACtE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAC;AAElD,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;IACtD,qFAAqF;IACrF,OAAO,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IAC/B;;;OAGG;IACH,OAAO,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACzD,gDAAgD;IAChD,QAAQ,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;IACtD,0DAA0D;IAC1D,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACxD,iGAAiG;IACjG,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;CACrD,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,eAAO,MAAM,aAAa,EAAG,eAAwB,CAAC"}