@aceshooting/lyra-ui 2.12.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/README.md +114 -28
  2. package/custom-elements.json +37406 -20015
  3. package/dist/components/attachment-chip/attachment-chip.styles.js +2 -2
  4. package/dist/components/badge/badge.class.d.ts +21 -0
  5. package/dist/components/badge/badge.class.d.ts.map +1 -0
  6. package/dist/components/badge/badge.class.js +29 -0
  7. package/dist/components/badge/badge.class.js.map +1 -0
  8. package/dist/components/badge/badge.d.ts +2 -0
  9. package/dist/components/badge/badge.d.ts.map +1 -0
  10. package/dist/components/badge/badge.js +5 -0
  11. package/dist/components/badge/badge.js.map +1 -0
  12. package/dist/components/badge/badge.styles.d.ts +2 -0
  13. package/dist/components/badge/badge.styles.d.ts.map +1 -0
  14. package/dist/components/badge/badge.styles.js +10 -0
  15. package/dist/components/badge/badge.styles.js.map +1 -0
  16. package/dist/components/badge/tag.class.d.ts +10 -0
  17. package/dist/components/badge/tag.class.d.ts.map +1 -0
  18. package/dist/components/badge/tag.class.js +5 -0
  19. package/dist/components/badge/tag.class.js.map +1 -0
  20. package/dist/components/badge/tag.d.ts +2 -0
  21. package/dist/components/badge/tag.d.ts.map +1 -0
  22. package/dist/components/badge/tag.js +5 -0
  23. package/dist/components/badge/tag.js.map +1 -0
  24. package/dist/components/breadcrumb/breadcrumb-item.class.d.ts +22 -0
  25. package/dist/components/breadcrumb/breadcrumb-item.class.d.ts.map +1 -0
  26. package/dist/components/breadcrumb/breadcrumb-item.class.js +40 -0
  27. package/dist/components/breadcrumb/breadcrumb-item.class.js.map +1 -0
  28. package/dist/components/breadcrumb/breadcrumb-item.d.ts +2 -0
  29. package/dist/components/breadcrumb/breadcrumb-item.d.ts.map +1 -0
  30. package/dist/components/breadcrumb/breadcrumb-item.js +5 -0
  31. package/dist/components/breadcrumb/breadcrumb-item.js.map +1 -0
  32. package/dist/components/breadcrumb/breadcrumb.class.d.ts +20 -0
  33. package/dist/components/breadcrumb/breadcrumb.class.d.ts.map +1 -0
  34. package/dist/components/breadcrumb/breadcrumb.class.js +29 -0
  35. package/dist/components/breadcrumb/breadcrumb.class.js.map +1 -0
  36. package/dist/components/breadcrumb/breadcrumb.d.ts +2 -0
  37. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  38. package/dist/components/breadcrumb/breadcrumb.js +5 -0
  39. package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
  40. package/dist/components/breadcrumb/breadcrumb.styles.d.ts +2 -0
  41. package/dist/components/breadcrumb/breadcrumb.styles.d.ts.map +1 -0
  42. package/dist/components/breadcrumb/breadcrumb.styles.js +8 -0
  43. package/dist/components/breadcrumb/breadcrumb.styles.js.map +1 -0
  44. package/dist/components/button/button.class.d.ts +7 -9
  45. package/dist/components/button/button.class.d.ts.map +1 -1
  46. package/dist/components/button/button.class.js +12 -14
  47. package/dist/components/button/button.class.js.map +1 -1
  48. package/dist/components/button/button.styles.d.ts.map +1 -1
  49. package/dist/components/button/button.styles.js +30 -10
  50. package/dist/components/button/button.styles.js.map +1 -1
  51. package/dist/components/button-group/button-group.class.d.ts +25 -0
  52. package/dist/components/button-group/button-group.class.d.ts.map +1 -0
  53. package/dist/components/button-group/button-group.class.js +39 -0
  54. package/dist/components/button-group/button-group.class.js.map +1 -0
  55. package/dist/components/button-group/button-group.d.ts +2 -0
  56. package/dist/components/button-group/button-group.d.ts.map +1 -0
  57. package/dist/components/button-group/button-group.js +5 -0
  58. package/dist/components/button-group/button-group.js.map +1 -0
  59. package/dist/components/button-group/button-group.styles.d.ts +2 -0
  60. package/dist/components/button-group/button-group.styles.d.ts.map +1 -0
  61. package/dist/components/button-group/button-group.styles.js +33 -0
  62. package/dist/components/button-group/button-group.styles.js.map +1 -0
  63. package/dist/components/callout/callout.class.d.ts +43 -0
  64. package/dist/components/callout/callout.class.d.ts.map +1 -0
  65. package/dist/components/callout/callout.class.js +92 -0
  66. package/dist/components/callout/callout.class.js.map +1 -0
  67. package/dist/components/callout/callout.d.ts +2 -0
  68. package/dist/components/callout/callout.d.ts.map +1 -0
  69. package/dist/components/callout/callout.js +5 -0
  70. package/dist/components/callout/callout.js.map +1 -0
  71. package/dist/components/callout/callout.styles.d.ts +2 -0
  72. package/dist/components/callout/callout.styles.d.ts.map +1 -0
  73. package/dist/components/callout/callout.styles.js +29 -0
  74. package/dist/components/callout/callout.styles.js.map +1 -0
  75. package/dist/components/carousel/carousel-item.class.d.ts +21 -0
  76. package/dist/components/carousel/carousel-item.class.d.ts.map +1 -0
  77. package/dist/components/carousel/carousel-item.class.js +19 -0
  78. package/dist/components/carousel/carousel-item.class.js.map +1 -0
  79. package/dist/components/carousel/carousel-item.d.ts +2 -0
  80. package/dist/components/carousel/carousel-item.d.ts.map +1 -0
  81. package/dist/components/carousel/carousel-item.js +5 -0
  82. package/dist/components/carousel/carousel-item.js.map +1 -0
  83. package/dist/components/carousel/carousel-item.styles.d.ts +2 -0
  84. package/dist/components/carousel/carousel-item.styles.d.ts.map +1 -0
  85. package/dist/components/carousel/carousel-item.styles.js +12 -0
  86. package/dist/components/carousel/carousel-item.styles.js.map +1 -0
  87. package/dist/components/carousel/carousel.class.d.ts +61 -0
  88. package/dist/components/carousel/carousel.class.d.ts.map +1 -0
  89. package/dist/components/carousel/carousel.class.js +223 -0
  90. package/dist/components/carousel/carousel.class.js.map +1 -0
  91. package/dist/components/carousel/carousel.d.ts +3 -0
  92. package/dist/components/carousel/carousel.d.ts.map +1 -0
  93. package/dist/components/carousel/carousel.js +5 -0
  94. package/dist/components/carousel/carousel.js.map +1 -0
  95. package/dist/components/carousel/carousel.styles.d.ts +2 -0
  96. package/dist/components/carousel/carousel.styles.d.ts.map +1 -0
  97. package/dist/components/carousel/carousel.styles.js +81 -0
  98. package/dist/components/carousel/carousel.styles.js.map +1 -0
  99. package/dist/components/chat-message/chat-message.styles.js +1 -1
  100. package/dist/components/code-block/code-block.styles.js +1 -1
  101. package/dist/components/color-picker/color-picker.class.d.ts +46 -0
  102. package/dist/components/color-picker/color-picker.class.d.ts.map +1 -0
  103. package/dist/components/color-picker/color-picker.class.js +81 -0
  104. package/dist/components/color-picker/color-picker.class.js.map +1 -0
  105. package/dist/components/color-picker/color-picker.d.ts +2 -0
  106. package/dist/components/color-picker/color-picker.d.ts.map +1 -0
  107. package/dist/components/color-picker/color-picker.js +5 -0
  108. package/dist/components/color-picker/color-picker.js.map +1 -0
  109. package/dist/components/color-picker/color-picker.styles.d.ts +2 -0
  110. package/dist/components/color-picker/color-picker.styles.d.ts.map +1 -0
  111. package/dist/components/color-picker/color-picker.styles.js +9 -0
  112. package/dist/components/color-picker/color-picker.styles.js.map +1 -0
  113. package/dist/components/date-picker/date-input.class.d.ts +4 -0
  114. package/dist/components/date-picker/date-input.class.d.ts.map +1 -1
  115. package/dist/components/date-picker/date-input.class.js +16 -0
  116. package/dist/components/date-picker/date-input.class.js.map +1 -1
  117. package/dist/components/details/accordion-item.class.d.ts +10 -0
  118. package/dist/components/details/accordion-item.class.d.ts.map +1 -0
  119. package/dist/components/details/accordion-item.class.js +5 -0
  120. package/dist/components/details/accordion-item.class.js.map +1 -0
  121. package/dist/components/details/accordion-item.d.ts +2 -0
  122. package/dist/components/details/accordion-item.d.ts.map +1 -0
  123. package/dist/components/details/accordion-item.js +5 -0
  124. package/dist/components/details/accordion-item.js.map +1 -0
  125. package/dist/components/details/accordion.class.d.ts +23 -0
  126. package/dist/components/details/accordion.class.d.ts.map +1 -0
  127. package/dist/components/details/accordion.class.js +48 -0
  128. package/dist/components/details/accordion.class.js.map +1 -0
  129. package/dist/components/details/accordion.d.ts +2 -0
  130. package/dist/components/details/accordion.d.ts.map +1 -0
  131. package/dist/components/details/accordion.js +5 -0
  132. package/dist/components/details/accordion.js.map +1 -0
  133. package/dist/components/details/details.class.d.ts +38 -0
  134. package/dist/components/details/details.class.d.ts.map +1 -0
  135. package/dist/components/details/details.class.js +83 -0
  136. package/dist/components/details/details.class.js.map +1 -0
  137. package/dist/components/details/details.d.ts +2 -0
  138. package/dist/components/details/details.d.ts.map +1 -0
  139. package/dist/components/details/details.js +5 -0
  140. package/dist/components/details/details.js.map +1 -0
  141. package/dist/components/details/details.styles.d.ts +2 -0
  142. package/dist/components/details/details.styles.d.ts.map +1 -0
  143. package/dist/components/details/details.styles.js +13 -0
  144. package/dist/components/details/details.styles.js.map +1 -0
  145. package/dist/components/dialog/dialog.styles.js +1 -1
  146. package/dist/components/divider/divider.class.d.ts +20 -0
  147. package/dist/components/divider/divider.class.d.ts.map +1 -0
  148. package/dist/components/divider/divider.class.js +28 -0
  149. package/dist/components/divider/divider.class.js.map +1 -0
  150. package/dist/components/divider/divider.d.ts +2 -0
  151. package/dist/components/divider/divider.d.ts.map +1 -0
  152. package/dist/components/divider/divider.js +5 -0
  153. package/dist/components/divider/divider.js.map +1 -0
  154. package/dist/components/divider/divider.styles.d.ts +2 -0
  155. package/dist/components/divider/divider.styles.d.ts.map +1 -0
  156. package/dist/components/divider/divider.styles.js +8 -0
  157. package/dist/components/divider/divider.styles.js.map +1 -0
  158. package/dist/components/drawer/drawer.class.d.ts +26 -0
  159. package/dist/components/drawer/drawer.class.d.ts.map +1 -0
  160. package/dist/components/drawer/drawer.class.js +34 -0
  161. package/dist/components/drawer/drawer.class.js.map +1 -0
  162. package/dist/components/drawer/drawer.d.ts +3 -0
  163. package/dist/components/drawer/drawer.d.ts.map +1 -0
  164. package/dist/components/drawer/drawer.js +5 -0
  165. package/dist/components/drawer/drawer.js.map +1 -0
  166. package/dist/components/drawer/drawer.styles.d.ts +2 -0
  167. package/dist/components/drawer/drawer.styles.d.ts.map +1 -0
  168. package/dist/components/drawer/drawer.styles.js +73 -0
  169. package/dist/components/drawer/drawer.styles.js.map +1 -0
  170. package/dist/components/format/format-bytes.class.d.ts +21 -0
  171. package/dist/components/format/format-bytes.class.d.ts.map +1 -0
  172. package/dist/components/format/format-bytes.class.js +46 -0
  173. package/dist/components/format/format-bytes.class.js.map +1 -0
  174. package/dist/components/format/format-bytes.d.ts +2 -0
  175. package/dist/components/format/format-bytes.d.ts.map +1 -0
  176. package/dist/components/format/format-bytes.js +5 -0
  177. package/dist/components/format/format-bytes.js.map +1 -0
  178. package/dist/components/format/format-date.class.d.ts +25 -0
  179. package/dist/components/format/format-date.class.d.ts.map +1 -0
  180. package/dist/components/format/format-date.class.js +59 -0
  181. package/dist/components/format/format-date.class.js.map +1 -0
  182. package/dist/components/format/format-date.d.ts +2 -0
  183. package/dist/components/format/format-date.d.ts.map +1 -0
  184. package/dist/components/format/format-date.js +5 -0
  185. package/dist/components/format/format-date.js.map +1 -0
  186. package/dist/components/format/format-number.class.d.ts +24 -0
  187. package/dist/components/format/format-number.class.d.ts.map +1 -0
  188. package/dist/components/format/format-number.class.js +58 -0
  189. package/dist/components/format/format-number.class.js.map +1 -0
  190. package/dist/components/format/format-number.d.ts +2 -0
  191. package/dist/components/format/format-number.d.ts.map +1 -0
  192. package/dist/components/format/format-number.js +5 -0
  193. package/dist/components/format/format-number.js.map +1 -0
  194. package/dist/components/format/format.styles.d.ts +2 -0
  195. package/dist/components/format/format.styles.d.ts.map +1 -0
  196. package/dist/components/format/format.styles.js +3 -0
  197. package/dist/components/format/format.styles.js.map +1 -0
  198. package/dist/components/format/relative-time.class.d.ts +29 -0
  199. package/dist/components/format/relative-time.class.d.ts.map +1 -0
  200. package/dist/components/format/relative-time.class.js +62 -0
  201. package/dist/components/format/relative-time.class.js.map +1 -0
  202. package/dist/components/format/relative-time.d.ts +2 -0
  203. package/dist/components/format/relative-time.d.ts.map +1 -0
  204. package/dist/components/format/relative-time.js +5 -0
  205. package/dist/components/format/relative-time.js.map +1 -0
  206. package/dist/components/heatmap/heatmap.class.d.ts +27 -0
  207. package/dist/components/heatmap/heatmap.class.d.ts.map +1 -1
  208. package/dist/components/heatmap/heatmap.class.js +125 -1
  209. package/dist/components/heatmap/heatmap.class.js.map +1 -1
  210. package/dist/components/heatmap/heatmap.styles.d.ts.map +1 -1
  211. package/dist/components/heatmap/heatmap.styles.js +27 -0
  212. package/dist/components/heatmap/heatmap.styles.js.map +1 -1
  213. package/dist/components/image-comparer/image-comparer.class.d.ts +43 -0
  214. package/dist/components/image-comparer/image-comparer.class.d.ts.map +1 -0
  215. package/dist/components/image-comparer/image-comparer.class.js +92 -0
  216. package/dist/components/image-comparer/image-comparer.class.js.map +1 -0
  217. package/dist/components/image-comparer/image-comparer.d.ts +3 -0
  218. package/dist/components/image-comparer/image-comparer.d.ts.map +1 -0
  219. package/dist/components/image-comparer/image-comparer.js +5 -0
  220. package/dist/components/image-comparer/image-comparer.js.map +1 -0
  221. package/dist/components/image-comparer/image-comparer.styles.d.ts +2 -0
  222. package/dist/components/image-comparer/image-comparer.styles.d.ts.map +1 -0
  223. package/dist/components/image-comparer/image-comparer.styles.js +70 -0
  224. package/dist/components/image-comparer/image-comparer.styles.js.map +1 -0
  225. package/dist/components/input/input.class.d.ts +12 -3
  226. package/dist/components/input/input.class.d.ts.map +1 -1
  227. package/dist/components/input/input.class.js +35 -2
  228. package/dist/components/input/input.class.js.map +1 -1
  229. package/dist/components/input/number-input.class.d.ts +17 -0
  230. package/dist/components/input/number-input.class.d.ts.map +1 -0
  231. package/dist/components/input/number-input.class.js +18 -0
  232. package/dist/components/input/number-input.class.js.map +1 -0
  233. package/dist/components/input/number-input.d.ts +2 -0
  234. package/dist/components/input/number-input.d.ts.map +1 -0
  235. package/dist/components/input/number-input.js +5 -0
  236. package/dist/components/input/number-input.js.map +1 -0
  237. package/dist/components/input/time-input.class.d.ts +16 -0
  238. package/dist/components/input/time-input.class.d.ts.map +1 -0
  239. package/dist/components/input/time-input.class.js +17 -0
  240. package/dist/components/input/time-input.class.js.map +1 -0
  241. package/dist/components/input/time-input.d.ts +2 -0
  242. package/dist/components/input/time-input.d.ts.map +1 -0
  243. package/dist/components/input/time-input.js +5 -0
  244. package/dist/components/input/time-input.js.map +1 -0
  245. package/dist/components/intersection-observer/intersection-observer.class.d.ts +37 -0
  246. package/dist/components/intersection-observer/intersection-observer.class.d.ts.map +1 -0
  247. package/dist/components/intersection-observer/intersection-observer.class.js +77 -0
  248. package/dist/components/intersection-observer/intersection-observer.class.js.map +1 -0
  249. package/dist/components/intersection-observer/intersection-observer.d.ts +2 -0
  250. package/dist/components/intersection-observer/intersection-observer.d.ts.map +1 -0
  251. package/dist/components/intersection-observer/intersection-observer.js +5 -0
  252. package/dist/components/intersection-observer/intersection-observer.js.map +1 -0
  253. package/dist/components/intersection-observer/intersection-observer.styles.d.ts +2 -0
  254. package/dist/components/intersection-observer/intersection-observer.styles.d.ts.map +1 -0
  255. package/dist/components/intersection-observer/intersection-observer.styles.js +8 -0
  256. package/dist/components/intersection-observer/intersection-observer.styles.js.map +1 -0
  257. package/dist/components/json-viewer/json-viewer.styles.js +1 -1
  258. package/dist/components/markdown/markdown.styles.js +1 -1
  259. package/dist/components/menu/dropdown-item.class.d.ts +18 -0
  260. package/dist/components/menu/dropdown-item.class.d.ts.map +1 -0
  261. package/dist/components/menu/dropdown-item.class.js +13 -0
  262. package/dist/components/menu/dropdown-item.class.js.map +1 -0
  263. package/dist/components/menu/dropdown-item.d.ts +2 -0
  264. package/dist/components/menu/dropdown-item.d.ts.map +1 -0
  265. package/dist/components/menu/dropdown-item.js +5 -0
  266. package/dist/components/menu/dropdown-item.js.map +1 -0
  267. package/dist/components/model-select/model-select.class.d.ts +4 -0
  268. package/dist/components/model-select/model-select.class.d.ts.map +1 -1
  269. package/dist/components/model-select/model-select.class.js +16 -1
  270. package/dist/components/model-select/model-select.class.js.map +1 -1
  271. package/dist/components/mutation-observer/mutation-observer.class.d.ts +40 -0
  272. package/dist/components/mutation-observer/mutation-observer.class.d.ts.map +1 -0
  273. package/dist/components/mutation-observer/mutation-observer.class.js +96 -0
  274. package/dist/components/mutation-observer/mutation-observer.class.js.map +1 -0
  275. package/dist/components/mutation-observer/mutation-observer.d.ts +2 -0
  276. package/dist/components/mutation-observer/mutation-observer.d.ts.map +1 -0
  277. package/dist/components/mutation-observer/mutation-observer.js +5 -0
  278. package/dist/components/mutation-observer/mutation-observer.js.map +1 -0
  279. package/dist/components/mutation-observer/mutation-observer.styles.d.ts +2 -0
  280. package/dist/components/mutation-observer/mutation-observer.styles.d.ts.map +1 -0
  281. package/dist/components/mutation-observer/mutation-observer.styles.js +8 -0
  282. package/dist/components/mutation-observer/mutation-observer.styles.js.map +1 -0
  283. package/dist/components/overlay/dropdown.class.d.ts +21 -0
  284. package/dist/components/overlay/dropdown.class.d.ts.map +1 -0
  285. package/dist/components/overlay/dropdown.class.js +18 -0
  286. package/dist/components/overlay/dropdown.class.js.map +1 -0
  287. package/dist/components/overlay/dropdown.d.ts +2 -0
  288. package/dist/components/overlay/dropdown.d.ts.map +1 -0
  289. package/dist/components/overlay/dropdown.js +5 -0
  290. package/dist/components/overlay/dropdown.js.map +1 -0
  291. package/dist/components/overlay/overlay.styles.d.ts +3 -0
  292. package/dist/components/overlay/overlay.styles.d.ts.map +1 -0
  293. package/dist/components/overlay/overlay.styles.js +39 -0
  294. package/dist/components/overlay/overlay.styles.js.map +1 -0
  295. package/dist/components/overlay/popover.class.d.ts +48 -0
  296. package/dist/components/overlay/popover.class.d.ts.map +1 -0
  297. package/dist/components/overlay/popover.class.js +132 -0
  298. package/dist/components/overlay/popover.class.js.map +1 -0
  299. package/dist/components/overlay/popover.d.ts +2 -0
  300. package/dist/components/overlay/popover.d.ts.map +1 -0
  301. package/dist/components/overlay/popover.js +5 -0
  302. package/dist/components/overlay/popover.js.map +1 -0
  303. package/dist/components/overlay/tooltip.class.d.ts +41 -0
  304. package/dist/components/overlay/tooltip.class.d.ts.map +1 -0
  305. package/dist/components/overlay/tooltip.class.js +118 -0
  306. package/dist/components/overlay/tooltip.class.js.map +1 -0
  307. package/dist/components/overlay/tooltip.d.ts +2 -0
  308. package/dist/components/overlay/tooltip.d.ts.map +1 -0
  309. package/dist/components/overlay/tooltip.js +5 -0
  310. package/dist/components/overlay/tooltip.js.map +1 -0
  311. package/dist/components/progress/progress-bar.class.d.ts +30 -0
  312. package/dist/components/progress/progress-bar.class.d.ts.map +1 -0
  313. package/dist/components/progress/progress-bar.class.js +61 -0
  314. package/dist/components/progress/progress-bar.class.js.map +1 -0
  315. package/dist/components/progress/progress-bar.d.ts +2 -0
  316. package/dist/components/progress/progress-bar.d.ts.map +1 -0
  317. package/dist/components/progress/progress-bar.js +5 -0
  318. package/dist/components/progress/progress-bar.js.map +1 -0
  319. package/dist/components/progress/progress-ring.class.d.ts +27 -0
  320. package/dist/components/progress/progress-ring.class.d.ts.map +1 -0
  321. package/dist/components/progress/progress-ring.class.js +59 -0
  322. package/dist/components/progress/progress-ring.class.js.map +1 -0
  323. package/dist/components/progress/progress-ring.d.ts +2 -0
  324. package/dist/components/progress/progress-ring.d.ts.map +1 -0
  325. package/dist/components/progress/progress-ring.js +5 -0
  326. package/dist/components/progress/progress-ring.js.map +1 -0
  327. package/dist/components/progress/progress.styles.d.ts +3 -0
  328. package/dist/components/progress/progress.styles.d.ts.map +1 -0
  329. package/dist/components/progress/progress.styles.js +23 -0
  330. package/dist/components/progress/progress.styles.js.map +1 -0
  331. package/dist/components/radio/radio-group.class.d.ts +49 -0
  332. package/dist/components/radio/radio-group.class.d.ts.map +1 -0
  333. package/dist/components/radio/radio-group.class.js +137 -0
  334. package/dist/components/radio/radio-group.class.js.map +1 -0
  335. package/dist/components/radio/radio-group.d.ts +2 -0
  336. package/dist/components/radio/radio-group.d.ts.map +1 -0
  337. package/dist/components/radio/radio-group.js +5 -0
  338. package/dist/components/radio/radio-group.js.map +1 -0
  339. package/dist/components/radio/radio-group.styles.d.ts +2 -0
  340. package/dist/components/radio/radio-group.styles.d.ts.map +1 -0
  341. package/dist/components/radio/radio-group.styles.js +11 -0
  342. package/dist/components/radio/radio-group.styles.js.map +1 -0
  343. package/dist/components/radio/radio.class.d.ts +97 -0
  344. package/dist/components/radio/radio.class.d.ts.map +1 -0
  345. package/dist/components/radio/radio.class.js +159 -0
  346. package/dist/components/radio/radio.class.js.map +1 -0
  347. package/dist/components/radio/radio.d.ts +2 -0
  348. package/dist/components/radio/radio.d.ts.map +1 -0
  349. package/dist/components/radio/radio.js +5 -0
  350. package/dist/components/radio/radio.js.map +1 -0
  351. package/dist/components/radio/radio.styles.d.ts +2 -0
  352. package/dist/components/radio/radio.styles.d.ts.map +1 -0
  353. package/dist/components/radio/radio.styles.js +57 -0
  354. package/dist/components/radio/radio.styles.js.map +1 -0
  355. package/dist/components/rating/rating.class.d.ts +34 -0
  356. package/dist/components/rating/rating.class.d.ts.map +1 -0
  357. package/dist/components/rating/rating.class.js +92 -0
  358. package/dist/components/rating/rating.class.js.map +1 -0
  359. package/dist/components/rating/rating.d.ts +2 -0
  360. package/dist/components/rating/rating.d.ts.map +1 -0
  361. package/dist/components/rating/rating.js +5 -0
  362. package/dist/components/rating/rating.js.map +1 -0
  363. package/dist/components/rating/rating.styles.d.ts +2 -0
  364. package/dist/components/rating/rating.styles.d.ts.map +1 -0
  365. package/dist/components/rating/rating.styles.js +10 -0
  366. package/dist/components/rating/rating.styles.js.map +1 -0
  367. package/dist/components/resize-observer/resize-observer.class.d.ts +37 -0
  368. package/dist/components/resize-observer/resize-observer.class.d.ts.map +1 -0
  369. package/dist/components/resize-observer/resize-observer.class.js +74 -0
  370. package/dist/components/resize-observer/resize-observer.class.js.map +1 -0
  371. package/dist/components/resize-observer/resize-observer.d.ts +2 -0
  372. package/dist/components/resize-observer/resize-observer.d.ts.map +1 -0
  373. package/dist/components/resize-observer/resize-observer.js +5 -0
  374. package/dist/components/resize-observer/resize-observer.js.map +1 -0
  375. package/dist/components/resize-observer/resize-observer.styles.d.ts +2 -0
  376. package/dist/components/resize-observer/resize-observer.styles.d.ts.map +1 -0
  377. package/dist/components/resize-observer/resize-observer.styles.js +11 -0
  378. package/dist/components/resize-observer/resize-observer.styles.js.map +1 -0
  379. package/dist/components/responsive-panel/responsive-panel.styles.js +1 -1
  380. package/dist/components/scroller/scroller.class.d.ts +54 -0
  381. package/dist/components/scroller/scroller.class.d.ts.map +1 -0
  382. package/dist/components/scroller/scroller.class.js +138 -0
  383. package/dist/components/scroller/scroller.class.js.map +1 -0
  384. package/dist/components/scroller/scroller.d.ts +2 -0
  385. package/dist/components/scroller/scroller.d.ts.map +1 -0
  386. package/dist/components/scroller/scroller.js +5 -0
  387. package/dist/components/scroller/scroller.js.map +1 -0
  388. package/dist/components/scroller/scroller.styles.d.ts +2 -0
  389. package/dist/components/scroller/scroller.styles.d.ts.map +1 -0
  390. package/dist/components/scroller/scroller.styles.js +94 -0
  391. package/dist/components/scroller/scroller.styles.js.map +1 -0
  392. package/dist/components/segmented/segmented.class.d.ts +6 -4
  393. package/dist/components/segmented/segmented.class.d.ts.map +1 -1
  394. package/dist/components/segmented/segmented.class.js +3 -2
  395. package/dist/components/segmented/segmented.class.js.map +1 -1
  396. package/dist/components/segmented/segmented.styles.js +1 -1
  397. package/dist/components/spinner/spinner.class.d.ts +24 -0
  398. package/dist/components/spinner/spinner.class.d.ts.map +1 -0
  399. package/dist/components/spinner/spinner.class.js +41 -0
  400. package/dist/components/spinner/spinner.class.js.map +1 -0
  401. package/dist/components/spinner/spinner.d.ts +2 -0
  402. package/dist/components/spinner/spinner.d.ts.map +1 -0
  403. package/dist/components/spinner/spinner.js +5 -0
  404. package/dist/components/spinner/spinner.js.map +1 -0
  405. package/dist/components/spinner/spinner.styles.d.ts +2 -0
  406. package/dist/components/spinner/spinner.styles.d.ts.map +1 -0
  407. package/dist/components/spinner/spinner.styles.js +17 -0
  408. package/dist/components/spinner/spinner.styles.js.map +1 -0
  409. package/dist/components/table/table.class.d.ts +87 -0
  410. package/dist/components/table/table.class.d.ts.map +1 -1
  411. package/dist/components/table/table.class.js +403 -113
  412. package/dist/components/table/table.class.js.map +1 -1
  413. package/dist/components/table/table.styles.d.ts.map +1 -1
  414. package/dist/components/table/table.styles.js +56 -0
  415. package/dist/components/table/table.styles.js.map +1 -1
  416. package/dist/components/textarea/textarea.class.d.ts +6 -2
  417. package/dist/components/textarea/textarea.class.d.ts.map +1 -1
  418. package/dist/components/textarea/textarea.class.js +6 -2
  419. package/dist/components/textarea/textarea.class.js.map +1 -1
  420. package/dist/components/tool-approval-dialog/tool-approval-dialog.class.d.ts +13 -6
  421. package/dist/components/tool-approval-dialog/tool-approval-dialog.class.d.ts.map +1 -1
  422. package/dist/components/tool-approval-dialog/tool-approval-dialog.class.js +48 -10
  423. package/dist/components/tool-approval-dialog/tool-approval-dialog.class.js.map +1 -1
  424. package/dist/components/tool-approval-dialog/tool-approval-dialog.styles.js +1 -1
  425. package/dist/components/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  426. package/dist/components/tool-select-dialog/tool-select-dialog.class.d.ts +7 -0
  427. package/dist/components/tool-select-dialog/tool-select-dialog.class.d.ts.map +1 -1
  428. package/dist/components/tool-select-dialog/tool-select-dialog.class.js +31 -0
  429. package/dist/components/tool-select-dialog/tool-select-dialog.class.js.map +1 -1
  430. package/dist/components/tool-select-dialog/tool-select-dialog.styles.js +1 -1
  431. package/dist/components/widget/widget.styles.js +1 -1
  432. package/dist/components/word-cloud/word-cloud.styles.js +4 -4
  433. package/dist/components/zoomable-frame/zoomable-frame.class.d.ts +48 -0
  434. package/dist/components/zoomable-frame/zoomable-frame.class.d.ts.map +1 -0
  435. package/dist/components/zoomable-frame/zoomable-frame.class.js +115 -0
  436. package/dist/components/zoomable-frame/zoomable-frame.class.js.map +1 -0
  437. package/dist/components/zoomable-frame/zoomable-frame.d.ts +3 -0
  438. package/dist/components/zoomable-frame/zoomable-frame.d.ts.map +1 -0
  439. package/dist/components/zoomable-frame/zoomable-frame.js +5 -0
  440. package/dist/components/zoomable-frame/zoomable-frame.js.map +1 -0
  441. package/dist/components/zoomable-frame/zoomable-frame.styles.d.ts +2 -0
  442. package/dist/components/zoomable-frame/zoomable-frame.styles.d.ts.map +1 -0
  443. package/dist/components/zoomable-frame/zoomable-frame.styles.js +77 -0
  444. package/dist/components/zoomable-frame/zoomable-frame.styles.js.map +1 -0
  445. package/dist/internal/localization.d.ts +1 -1
  446. package/dist/internal/localization.d.ts.map +1 -1
  447. package/dist/internal/localization.js +25 -0
  448. package/dist/internal/localization.js.map +1 -1
  449. package/dist/internal/lyra-element.d.ts +2 -2
  450. package/dist/internal/lyra-element.js +2 -2
  451. package/dist/internal/root-registration-allowlist.d.ts +1 -1
  452. package/dist/internal/root-registration-allowlist.d.ts.map +1 -1
  453. package/dist/internal/root-registration-allowlist.js +36 -0
  454. package/dist/internal/root-registration-allowlist.js.map +1 -1
  455. package/dist/internal/tokens.styles.d.ts.map +1 -1
  456. package/dist/internal/tokens.styles.js +202 -198
  457. package/dist/internal/tokens.styles.js.map +1 -1
  458. package/dist/lyra.d.ts +93 -0
  459. package/dist/lyra.d.ts.map +1 -1
  460. package/dist/lyra.js +72 -0
  461. package/dist/lyra.js.map +1 -1
  462. package/dist/testing/happy-dom-shims.d.ts +9 -3
  463. package/dist/testing/happy-dom-shims.d.ts.map +1 -1
  464. package/dist/testing/happy-dom-shims.js +13 -3
  465. package/dist/testing/happy-dom-shims.js.map +1 -1
  466. package/dist/theme.css +58 -0
  467. package/llms-full.txt +556 -39
  468. package/llms.txt +22 -8
  469. package/package.json +81 -2
package/llms-full.txt CHANGED
@@ -1,18 +1,14 @@
1
1
  # @aceshooting/lyra-ui — LLM API Reference
2
2
 
3
- `@aceshooting/lyra-ui` is a library of free, clean-room [Lit](https://lit.dev) web components — a
4
- companion to [Web Awesome](https://webawesome.com) that reimplements selected Web Awesome **Pro**
5
- components as open-source equivalents (documented compatible tag shape, attributes, slots, events,
6
- and CSS parts under a `lyra-` prefix instead of `wa-`), plus a number of extras that have no Web Awesome
7
- counterpart at all (dashboard atoms, temporal/graph widgets, chart wrappers, a map component, a
8
- file dropzone). It is **token-compatible with Web Awesome**: every component's stylesheet resolves
9
- through Web Awesome's `--wa-*` design tokens first, falling back to its own `--lyra-*` tokens, so
10
- components read as native inside a Web Awesome-themed app and are equally usable standalone with no
11
- theme at all. This document is the complete, component-by-component API reference intended for
12
- coding assistants integrating the library; for install instructions, the full component catalog, and
13
- the `<wa-*>` → `<lyra-*>` migration notes, see the package [README](./README.md) — or the shorter
14
- curated index at [`llms.txt`](./llms.txt) if you just need the shape of the library before diving in
15
- here.
3
+ `@aceshooting/lyra-ui` is a free, independent, MIT-licensed [Lit](https://lit.dev) web-component
4
+ library and an open-source alternative to Shoelace and Web Awesome. It combines accessible form
5
+ controls, layout and overlay primitives, dashboards, charts, data visualization, and Conversation &
6
+ Agent UI. Selected components retain documented Web Awesome-compatible public names under a `lyra-`
7
+ prefix to make migration easier, but Lyra has its own implementation, design tokens, localization
8
+ runtime, RTL behavior, and release surface. It has no runtime dependency on either project. This is
9
+ the complete component-by-component API reference for coding assistants integrating the library; for
10
+ installation, the full catalog, and Web Awesome/Shoelace migration notes, see the package
11
+ [README](./README.md) or the shorter curated index at [`llms.txt`](./llms.txt).
16
12
 
17
13
  Component entry points such as `components/empty/empty.js` register their custom-element tag.
18
14
  Every component also exposes a matching `.class.js` entry for subclassing or type-directed
@@ -105,21 +101,22 @@ Not a custom element itself — infrastructure every `lyra-*` component in the l
105
101
  `lyra-citation-badge`, and `lyra-menu` (which resolves its `placement` through
106
102
  `rtlAwarePlacement()` first — see `rtl.ts` below — before handing it to `place()`).
107
103
  - **`tokens.styles.ts` → `tokens`** (a `css` template prepended to every component's stylesheet) —
108
- the whole design-token layer. Every value chains through a `--wa-*` Web Awesome token first, with
109
- a hard-coded fallback, e.g. `--lyra-color-brand: var(--wa-color-brand-fill-loud, #0969da)`. Full
104
+ the whole design-token layer. Every value chains through an independent `--lyra-theme-*` custom
105
+ property and finally a hard-coded fallback, e.g. `--lyra-color-brand: var(--lyra-theme-color-brand-fill-loud, #0969da)`.
106
+ Full
110
107
  set: `--lyra-color-surface / -text / -text-quiet / -border / -brand / -brand-quiet / -success /
111
108
  -success-quiet / -warning / -warning-quiet / -danger / -danger-quiet`,
112
109
  `--lyra-color-on-brand / -on-success / -on-warning / -on-danger` (paired
113
110
  text/icon colors for content painted on the corresponding solid semantic fill; standalone light
114
- and dark fallbacks choose a contrasting foreground for each fill, while a Web Awesome theme can
115
- provide its own `*-on-loud` values), `--lyra-space-xs / -s / -m / -l`, `--lyra-radius`, `--lyra-shadow`,
111
+ and dark fallbacks choose a contrasting foreground for each fill, while a consumer's own theme
112
+ can provide its own `*-on-loud` values), `--lyra-space-xs / -s / -m / -l`, `--lyra-radius`, `--lyra-shadow`,
116
113
  `--lyra-font`, `--lyra-transition-fast` / `-base` (motion timing every animating component should
117
114
  share), `--lyra-opacity-disabled` (one shared disabled-state opacity), `--lyra-focus-ring-width` /
118
115
  `-color` / `-offset` (every `:focus-visible` rule should reference these), `--lyra-icon-button-size`
119
116
  (minimum tappable box for icon-only buttons; the glyph itself doesn't grow). Also sets
120
117
  `:host([hidden]) { display: none !important; }`, an inherited `box-sizing: border-box` reset, and
121
118
  a `prefers-color-scheme: dark` fallback that re-points the color tokens' hard-coded defaults at a
122
- dark palette (only takes effect when no real `--wa-*` theme value is present).
119
+ dark palette (only takes effect when no real `--lyra-theme-*` value is set).
123
120
  - **`prefix.ts`** — `LYRA_PREFIX = 'lyra'`; `tag(name)` → `` `lyra-${name}` ``; `defineElement(name,
124
121
  ctor)` — idempotent `customElements.define`, safe if a module is evaluated twice.
125
122
  - **`a11y.ts`** — `nextId(scope)`: monotonic id generator (e.g. `nextId('combobox-list')` →
@@ -544,6 +541,10 @@ Text field + calendar popover, **form-associated** via the shared `FormAssociate
544
541
  internal `<input>`; empty omits the attribute. Named `autoCorrect` in JS/TS (not `autocorrect`)
545
542
  to dodge a `lib.dom.d.ts` collision with `HTMLElement`'s own boolean `autocorrect` IDL member;
546
543
  the wire attribute is still the plain `autocorrect` name
544
+ - `autocomplete: string = ''`, `inputMode: string = ''` (attribute `inputmode`), and
545
+ `enterKeyHint: string = ''` (attribute `enterkeyhint`) — forwarded to the internal date input
546
+ - `autocomplete: string = ''`, `inputMode: string = ''` (`inputmode`), and `enterKeyHint: string = ''`
547
+ (`enterkeyhint`) — forwarded to the internal `<input>`.
547
548
 
548
549
  **Methods:** `show()`, `hide()`, `clear()`
549
550
 
@@ -720,15 +721,14 @@ original declarative `value`, matching native `defaultValue` behavior.
720
721
 
721
722
  ## `lyra-button`
722
723
 
723
- A generic action-button primitive, the `lyra-*` equivalent of a plain `wa-button`. Renders an
724
- internal native `<button>` (this library has no runtime dependency on Web Awesome); `type="submit"`/
724
+ A generic action-button primitive. Renders an internal native `<button>`; `type="submit"`/
725
725
  `type="reset"` are handled by the component itself via the host's own `closest('form')`, since a
726
726
  shadow-internal native button doesn't participate in an ancestor form's submission on its own.
727
727
 
728
728
  **Properties:**
729
729
  - `variant: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' = 'neutral'` (reflected)
730
730
  - `appearance: 'accent' | 'filled' | 'outlined' | 'plain' = 'filled'` (reflected) — `'accent'` is a
731
- loud, high-contrast filled tier (equivalent to `wa-button`'s own runtime-default appearance),
731
+ loud, high-contrast filled tier,
732
732
  distinct from `'filled'` for `variant="neutral"` specifically (`'filled'` reads the ambient
733
733
  surface color there; `'accent'` reads a solid neutral fill)
734
734
  - `size: 'xs' | 's' | 'm' | 'l' | 'xl' = 'm'` (reflected)
@@ -737,7 +737,11 @@ shadow-internal native button doesn't participate in an ancestor form's submissi
737
737
  clearing `disabled`
738
738
  - `disabled: boolean = false` (reflected)
739
739
 
740
- **Getters/methods:** `focus(options?)`/`blur()` forwarded to the internal native `<button>`.
740
+ The shared `m` size uses `--lyra-font-size-m`. The internal button follows the host's inline size through `--lyra-button-width` (default
741
+ `100%`), and the size scale is exposed through `--lyra-button-size-xs/-s/-m/-l/-xl`.
742
+
743
+ **Getters/methods:** `click()`, `focus(options?)`, and `blur()` — forwarded to the internal native
744
+ `<button>`; `click()` also runs the component's submit/reset behavior.
741
745
 
742
746
  **Events:** none (a plain native `click` bubbles and composes through the shadow boundary
743
747
  unmodified; disabled while `disabled` or `loading`).
@@ -746,11 +750,12 @@ unmodified; disabled while `disabled` or `loading`).
746
750
 
747
751
  **CSS parts:** `base`, `label`, `start`, `end`, `spinner` (present only while `loading`).
748
752
 
749
- **Themeable custom properties:** `--lyra-button-accent`, `--lyra-button-fill`,
753
+ **Themeable custom properties:** `--lyra-button-width`, `--lyra-button-size-xs/-s/-m/-l/-xl`,
754
+ `--lyra-button-accent`, `--lyra-button-fill`,
750
755
  `--lyra-button-on-fill`, `--lyra-button-border` (each swapped by the active `variant`, default
751
756
  `neutral` falls back to plain text/surface/border tokens), `--lyra-button-accent-fill`,
752
757
  `--lyra-button-accent-on-fill` (the `appearance="accent"` fill/foreground pair; `neutral` falls
753
- back to `--wa-color-neutral-fill-loud`/`-on-loud`, every other variant reuses that variant's own
758
+ back to `--lyra-color-neutral`/`--lyra-color-on-neutral`, every other variant reuses that variant's own
754
759
  loud fill token), `--lyra-button-hover-brightness` (default `1.08`, the `:hover` filter intensity),
755
760
  `--lyra-button-active-scale` (default `0.9875`, the `:active` press-scale, disabled under
756
761
  `prefers-reduced-motion`).
@@ -790,13 +795,17 @@ form-associated via the same `FormAssociated` mixin as `lyra-textarea`. Ships th
790
795
  - `errorText: string = ''` (attribute `error-text`)
791
796
  - `accessibleLabel: string | null = null` (attribute `aria-label`)
792
797
  - `autocomplete: string = ''`
798
+ - `spellcheck: boolean = true` — forwarded to the native input, including `spellcheck="false"`
799
+ - `autocapitalize: string = ''` / `autoCorrect: string = ''`
800
+ - `inputMode: string = ''` / `enterKeyHint: string = ''`
793
801
  - `min?: number` / `max?: number` / `step?: number` (attribute: false — `type="number"` only)
794
802
  - `passwordVisible: boolean = false` (attribute `password-visible` — `type="password"` only)
795
803
  - `name`/`disabled`/`required` (from `FormAssociated`)
796
804
 
797
- **Events:** `lyra-input` (`detail: { value }`, fired on every user-driven edit), `lyra-change`
798
- (`detail: { value }`, fired on the native `change` timing), `blur`/`focus` (re-dispatched bubbling +
799
- composed from the internal native input's own `blur`/`focus`).
805
+ **Events:** native-style composed `input` and `change`, plus `lyra-input` (`detail: { value }`,
806
+ fired on every user-driven edit) and `lyra-change` (`detail: { value }`, fired on the native
807
+ `change` timing), `blur`/`focus` (re-dispatched bubbling + composed from the internal native input's
808
+ own `blur`/`focus`).
800
809
 
801
810
  **Slots:** `label`, `hint`, `error`.
802
811
 
@@ -821,6 +830,18 @@ composed from the internal native input's own `blur`/`focus`).
821
830
  `ElementInternals` — not a second hand-rolled regex check.
822
831
  - `type="password"` always renders the `password-toggle` button; there is no separate opt-out.
823
832
 
833
+ ## `lyra-number-input`
834
+
835
+ A migration-friendly numeric alias of `lyra-input`. It forces `type="number"` while retaining the
836
+ same form association, label/hint/error chrome, native editing passthrough, input/change events,
837
+ and `min`/`max`/`step` validation. It exposes the same properties, slots, events, and CSS parts as
838
+ `lyra-input`.
839
+
840
+ ## `lyra-time-input`
841
+
842
+ A migration-friendly time alias of `lyra-input`. It forces the native `type="time"` while retaining
843
+ the same form association, chrome, native editing passthrough, events, slots, and CSS parts.
844
+
824
845
  ---
825
846
 
826
847
  ## `lyra-phone-input`
@@ -1400,8 +1421,8 @@ accent edge and value tint).
1400
1421
 
1401
1422
  ## `lyra-table`
1402
1423
 
1403
- Presentational, sort/select-aware data table. **The host owns actual sorting/filtering/pagination**
1404
- of `rows` this component only renders and emits intents.
1424
+ Sort/select-aware data table. Sorting remains consumer-controlled; optional filtering, pagination,
1425
+ and loading chrome are built in while remaining controlled at the public API boundary.
1405
1426
 
1406
1427
  **Properties:**
1407
1428
  - `columns: TableColumn<T>[] = []` (attribute: false) — `{ key, label, headerCell?, width?,
@@ -1419,7 +1440,8 @@ of `rows` — this component only renders and emits intents.
1419
1440
  `[part='foot']` (`<tfoot>`) only renders at all when at least one column defines `footer`;
1420
1441
  `cellStyle` is applied directly to the generated `<td>` via `styleMap` — e.g. a computed heat-tint
1421
1442
  background a `cell()`-returned inner element can't paint into the cell's own padding — omit it for
1422
- no per-cell style override (the default, unchanged output)
1443
+ no per-cell style override (the default, unchanged output); `editable` enables double-click
1444
+ editing, `editValue` supplies the editor value, and `editType` selects `text` or `number`
1423
1445
  - `columnsHidden: boolean = false` (attribute `columns-hidden`, reflected) — computed/read-only: true
1424
1446
  when a `priority` column is *actually* hidden right now by the `@container` breakpoints above, or
1425
1447
  `showAllColumns` force-visible mode is currently active. Measured via a `ResizeObserver` on
@@ -1437,6 +1459,31 @@ of `rows` — this component only renders and emits intents.
1437
1459
  when omitted, which is only safe while `rows` never reorders — set it whenever `rows` can be
1438
1460
  sorted/filtered/re-ordered across renders, or selection/click can silently attach to the wrong row
1439
1461
  - `selectedKey: string | number | null = null` (attribute: false) — **single**-selection only
1462
+ - `selectionMode: 'none'|'single'|'multiple' = 'none'` (attribute `selection-mode`, reflected) —
1463
+ opt-in self-managed row selection; the default remains presentational
1464
+ - `selectedKeys: Set<string | number> = new Set()` (attribute: false) — the selected raw row keys
1465
+ used by multiple selection
1466
+ - `filterable: boolean = false` (attribute `filterable`, reflected) — renders a localized search
1467
+ field above the grid
1468
+ - `filterText: string = ''` (attribute `filter-text`) — controlled filter text
1469
+ - `filter?: (row: T, text: string) => boolean` (attribute: false) — typed predicate used by the
1470
+ filter field; when omitted, rows are matched against their JSON representation
1471
+ - `filterLabel: string = ''` (attribute `filter-label`) and `filterPlaceholder: string = ''`
1472
+ (attribute `filter-placeholder`) — optional localized-label overrides
1473
+ - `loading: boolean = false` (attribute `loading`, reflected) and `loadingLabel: string = ''`
1474
+ (attribute `loading-label`) — renders a busy spinner and suppresses the grid while loading
1475
+ - `pageSize: number = 0` (attribute `page-size`) — positive values enable controlled pagination;
1476
+ zero disables the pagination footer
1477
+ - `page: number = 1` (attribute `page`, reflected) — controlled current page
1478
+ - `totalItems: number = -1` (attribute `total-items`) — server-side total item count; `-1` derives
1479
+ the total from filtered rows
1480
+ - `paginationMode: 'client'|'server' = 'client'` (attribute `pagination-mode`, reflected) — client
1481
+ mode slices rows; server mode renders the supplied page unchanged
1482
+ - Editable columns emit `lyra-cell-edit` on commit and never mutate the supplied row object.
1483
+ - `groupBy?: (row: T) => string | number` (attribute: false) — inserts a non-focusable full-width
1484
+ group row before each group
1485
+ - `groupLabel?: (key: string | number, rows: T[]) => unknown` (attribute: false) — custom group
1486
+ header content; without it, the group key is rendered as text
1440
1487
  - `expandedContent?: (row: T) => unknown` (attribute: false) — enables a leading expand toggle and
1441
1488
  renders a full-width detail row beneath expanded records
1442
1489
  - `canExpand?: (row: T) => boolean` (attribute: false) — optional per-row gate for expansion
@@ -1459,7 +1506,11 @@ of `rows` — this component only renders and emits intents.
1459
1506
  (`detail: { row }`), `lyra-load-more` (fired on the "load more" button), `lyra-columns-hidden-change`
1460
1507
  (`detail: { hidden: boolean }`, fired only on a real `columnsHidden` transition),
1461
1508
  `lyra-columns-revealed` (`detail: { revealed: boolean }`), and `lyra-row-expand-toggle`
1462
- (`detail: { row, key }`; the table does not mutate `expandedKeys`)
1509
+ (`detail: { row, key }`; the table does not mutate `expandedKeys`), and
1510
+ `lyra-selection-change` (`detail: { keys }`) when selection is enabled, `lyra-filter-change`
1511
+ (`detail: { text }`), and `lyra-page-change` (`detail: { page }`) from the controlled
1512
+ filter/pagination surfaces, and `lyra-cell-edit` (`detail: { row, key, value }`) for editable
1513
+ columns
1463
1514
 
1464
1515
  **Slots:** none — content comes entirely from `columns`/`rows`.
1465
1516
 
@@ -1467,7 +1518,8 @@ of `rows` — this component only renders and emits intents.
1467
1518
  chevron indicator shown on the active sortable header, rotated per `sortDir`), `reveal-columns-button`
1468
1519
  (shown only when `columnsHidden` is true), `foot` (the `<tfoot>`, only rendered when at least one
1469
1520
  column defines `footer`), `footer-row`, `footer-cell`, `expand-toggle-cell`, `row-expand-toggle`,
1470
- `row-expand-icon`, `expanded-row`, `expanded-cell`
1521
+ `row-expand-icon`, `expanded-row`, `expanded-cell`, `filter-label`, `filter`, `loading`, and
1522
+ `pagination`, `cell-editor`, `group-row`, and `group-cell`
1471
1523
 
1472
1524
  **Themeable custom properties:** `--lyra-table-max-height` (default `none`; controls the scrollable
1473
1525
  body's `max-block-size`).
@@ -1833,6 +1885,9 @@ itself (absent for `'wide'`/`collapse="none"`); and the `lyra-split-collapse-cha
1833
1885
  divider adjacent to the collapsed panel is drag/keyboard-disabled (`aria-disabled="true"`) while
1834
1886
  collapsed. `collapse="none"` (the default) is byte-for-byte identical to pre-collapse-feature behavior.
1835
1887
 
1888
+ `dividerLabel?: (index: number, panelCount: number) => string` (attribute: false) customizes the
1889
+ localized accessible label generated for each auto-inserted divider.
1890
+
1836
1891
  **Events:** `lyra-resize` (`detail: { sizes }`, fired on every drag step/release **and** every
1837
1892
  keyboard step), `lyra-split-collapse-change` (`detail: { state: 'wide'|'rail'|'floating' }`, fired only
1838
1893
  on a real `collapse`-state transition, never on every resize/render),
@@ -1912,6 +1967,8 @@ position) survives the transition.
1912
1967
  sidebar/toolbar visible during fullscreen
1913
1968
  - `compact: boolean = false` (reflected) — tighter header/body padding, same convention as
1914
1969
  `lyra-empty`'s `compact`
1970
+ - `backdropInset: string = ''` (attribute `backdrop-inset`) — overrides the fullscreen backdrop's
1971
+ CSS `inset` independently from `fullscreenInset`; when empty, it follows `fullscreenInset`
1915
1972
  - `views: WidgetView[] = []` (attribute: false) — named alternate views for the panel body, e.g. a
1916
1973
  chart/table toggle inside the same card chrome; `WidgetView { id: string; label: string; icon?:
1917
1974
  TemplateResult }`. Each entry gets a header toggle button (`[part='view-toggle']`) and a
@@ -1940,7 +1997,7 @@ empty), `label-group` (wrapper around the label and sublabel), `label`, `sublabe
1940
1997
  `backdrop`
1941
1998
 
1942
1999
  **Themeable custom properties:** `--lyra-widget-overlay-color` (default `rgb(0 0 0 / 0.5)` — the
1943
- fullscreen backdrop scrim color; component-specific since no shared `--wa-*`/`--lyra-*` overlay token
2000
+ fullscreen backdrop scrim color; component-specific since no shared `--lyra-*` overlay token
1944
2001
  exists), plus shared tokens (`--lyra-space-*`, `--lyra-color-border/-surface/-text-quiet`,
1945
2002
  `--lyra-radius`, `--lyra-shadow`, `--lyra-icon-button-size`, `--lyra-focus-ring-*`).
1946
2003
 
@@ -2222,10 +2279,15 @@ A Canvas-rendered heatmap with a DPR-aware, resize-aware redraw loop, in one of
2222
2279
  `"matrix"` (default — a `rowLabels` × `colLabels` grid of `values`) or `"calendar"` (a
2223
2280
  GitHub-style Sunday–Saturday × week grid built from `days`, colored by quartile bucket rather than
2224
2281
  the matrix mode's continuous ramp). Every cell is independently addressable despite being
2225
- canvas-drawn (no per-cell DOM node): a `pointermove` hit-test over the canvas shows `[part="tooltip"]`
2282
+ canvas-drawn (no per-cell DOM node by default): a `pointermove` hit-test over the canvas shows `[part="tooltip"]`
2226
2283
  with that cell's label + value; the canvas is `tabindex="0"` with arrow-key roving focus (a stroked
2227
2284
  ring redrawn over the focused cell on every draw, plus `[part="live-region"]` announcing it); and a
2228
- click, or Enter/Space on the focused cell, fires `lyra-cell-click`.
2285
+ click, or Enter/Space on the focused cell, fires `lyra-cell-click`.
2286
+
2287
+ Set `accessibleCells: true` (`accessible-cells`) to opt into a native-button overlay for each
2288
+ interactive matrix/calendar cell. The overlay uses localized `aria-label`s, explicit
2289
+ `aria-pressed="true"|"false"` from the controlled `selectedCell`, and roving tabindex/arrow-key
2290
+ focus; it continues to emit `lyra-cell-click` and leaves selection state consumer-controlled.
2229
2291
 
2230
2292
  **Properties:**
2231
2293
  - `rowLabels: string[] = []` (attribute: false — matrix mode only)
@@ -2265,6 +2327,11 @@ click, or Enter/Space on the focused cell, fires `lyra-cell-click`.
2265
2327
  announcement when the focused cell is the selection. Purely a controlled property — mirrors
2266
2328
  `<lyra-lite-chart>`'s `selectedIndex`, this component never mutates it itself. Unset (the default,
2267
2329
  `null`) reproduces today's exact output.
2330
+ - `accessibleCells: boolean = false` (attribute `accessible-cells`) — renders `[part="cells"]` with
2331
+ one `[part="cell"]` native button per interactive cell. Buttons expose localized `aria-label`s,
2332
+ explicit `aria-pressed` state from `selectedCell`, and a roving tabindex; the canvas becomes
2333
+ `aria-hidden` while this mode is enabled. The property is opt-in so the default canvas mode keeps
2334
+ its low DOM footprint.
2268
2335
  - `cellText?: (pos: MatrixCellPos | CalendarCellPos, value: number) => string` (attribute: false) —
2269
2336
  formats the per-cell hover tooltip and keyboard live-region announcement text; receives the cell
2270
2337
  position (`{ row, col }` in matrix mode, `{ week, weekday }` in calendar mode) and its value.
@@ -2323,7 +2390,8 @@ force a redraw manually.
2323
2390
 
2324
2391
  **Slots:** none.
2325
2392
 
2326
- **CSS parts:** `base`, `canvas`, `tooltip` (hover tooltip, positioned over the hovered cell),
2393
+ **CSS parts:** `base`, `canvas`, `cells` (opt-in per-cell overlay), `cell` (one opt-in native cell
2394
+ button), `tooltip` (hover tooltip, positioned over the hovered cell),
2327
2395
  `live-region` (visually-hidden `role="status" aria-live="polite"` element announcing the
2328
2396
  keyboard-focused cell), `legend`, `legend-lo`, `legend-hi`, `legend-annotation` (one per labeled
2329
2397
  `annotations` entry)
@@ -2576,6 +2644,8 @@ descendants of the treeitem, matching the WAI-ARIA treeitem pattern's containmen
2576
2644
  - `setSize: number = 1`, `posInSet: number = 1` (attribute: false) — this node's `aria-setsize`/
2577
2645
  `aria-posinset` values among its siblings, pushed down from `<lyra-tree>`; normally set internally,
2578
2646
  not by consumers
2647
+ - `hasChildren: boolean` (read-only getter) — reports whether `item.children` contains at least one
2648
+ child; leaf nodes never expose `aria-expanded` and cannot expand or collapse
2579
2649
 
2580
2650
  **Methods:** `expand()`, `collapse()` (each a no-op if already in that state, or a leaf), `select()`
2581
2651
  (fires `lyra-node-select`).
@@ -3122,6 +3192,10 @@ parsing (that's left entirely to the host).
3122
3192
  - `label: string = 'Drop files here or click to browse'`
3123
3193
  - `accessibleLabel: string = ''` (attribute `aria-label`) — overrides `label` as the internal
3124
3194
  dropzone/button accessible name without changing visible copy
3195
+ - `acceptedMessage: string = '{count} file(s) added.'` (attribute `accepted-message`) — live-region
3196
+ message after an accepted selection; `{count}` is replaced with the accepted count
3197
+ - `rejectedMessage: string = '{count} file(s) rejected.'` (attribute `rejected-message`) — live-region
3198
+ message after rejected files; `{count}` is replaced with the rejected count
3125
3199
 
3126
3200
  **Methods:** `openPicker()` programmatically opens the native file dialog; `focus(options?)`
3127
3201
  forwards to the interactive dropzone.
@@ -3181,6 +3255,219 @@ an extension-only `accept` list.
3181
3255
 
3182
3256
  ---
3183
3257
 
3258
+ ## `lyra-drawer`
3259
+
3260
+ A modal panel anchored to one edge of the viewport. It inherits the dialog overlay contract:
3261
+ focus trapping, Escape and optional backdrop dismissal, document scroll locking, overlay stacking,
3262
+ accessible naming, and the cancelable `lyra-dialog-close` event.
3263
+
3264
+ **Properties:**
3265
+ - `open: boolean = false` (attribute `open`, reflected) — controls visibility
3266
+ - `placement: 'start'|'end'|'top'|'bottom' = 'start'` (attribute `placement`, reflected)
3267
+ - `heading?: string`, `label: string`, `closable: boolean`, and `noLightDismiss: boolean` — inherited
3268
+ dialog naming and dismissal options
3269
+
3270
+ **CSS parts:** `backdrop`, `panel`, `header`, `heading`, `close-button`, `label`, `body`, `footer`.
3271
+
3272
+ **Themeable custom properties:** `--lyra-drawer-width`, `--lyra-drawer-height`, and inherited
3273
+ dialog surface/overlay tokens.
3274
+
3275
+ ```html
3276
+ <lyra-drawer open placement="end" heading="Filters" closable>
3277
+ <lyra-checkbox label="Only active"></lyra-checkbox>
3278
+ </lyra-drawer>
3279
+ ```
3280
+
3281
+ ---
3282
+
3283
+ ## `lyra-carousel`
3284
+
3285
+ Accessible carousel for arbitrary slotted slide elements. It shows one assigned element at a time,
3286
+ adds slide semantics and localized position labels, and provides keyboard, button, and indicator
3287
+ navigation.
3288
+
3289
+ **Properties:**
3290
+ - `index: number = 0` (attribute `index`, reflected) — active slide index
3291
+ - `loop: boolean = false` (attribute `loop`, reflected) — wraps navigation at either end
3292
+ - `autoplay: boolean = false` (attribute `autoplay`, reflected) and `autoplayInterval: number = 5000`
3293
+ (attribute `autoplay-interval`) — optional timed advance; autoplay is disabled under reduced motion
3294
+ - `showIndicators: boolean = true` (attribute `show-indicators`) — renders slide indicator buttons
3295
+ - `accessibleLabel: string = ''` (attribute `accessible-label`) — fallback landmark name; a host
3296
+ `aria-label` takes precedence
3297
+
3298
+ **Methods:** `next()`, `previous()`, and `goTo(index)` update the active index and emit
3299
+ `lyra-slide-change` (`detail: { index }`).
3300
+
3301
+ **CSS parts:** `base`, `viewport`, `track`, `controls`, `previous-button`, `next-button`,
3302
+ `indicators`, and `indicator`.
3303
+
3304
+ ```html
3305
+ <lyra-carousel aria-label="Screenshots">
3306
+ <img alt="Dashboard overview" src="overview.png">
3307
+ <img alt="Dashboard details" src="details.png">
3308
+ </lyra-carousel>
3309
+ ```
3310
+
3311
+ ---
3312
+
3313
+ ## `lyra-carousel-item`
3314
+
3315
+ Optional semantic wrapper for one slide in `<lyra-carousel>`. The carousel also accepts arbitrary
3316
+ slotted elements, so this element is useful when a migration needs the explicit item tag.
3317
+
3318
+ **Slots:** default slide content.
3319
+
3320
+ **CSS parts:** `base`.
3321
+
3322
+ ```html
3323
+ <lyra-carousel>
3324
+ <lyra-carousel-item>Dashboard overview</lyra-carousel-item>
3325
+ <lyra-carousel-item>Dashboard details</lyra-carousel-item>
3326
+ </lyra-carousel>
3327
+ ```
3328
+
3329
+ ---
3330
+
3331
+ ## `lyra-button-group`
3332
+
3333
+ Responsive semantic grouping primitive for related action controls. It preserves the slotted
3334
+ controls and exposes `role="group"` on its internal wrapper.
3335
+
3336
+ **Properties:**
3337
+ - `orientation: 'horizontal' | 'vertical' = 'horizontal'` (reflected)
3338
+ - `label: string = ''` — accessible group name; a host `aria-label` is used when `label` is empty
3339
+
3340
+ **Slots:** default action controls.
3341
+
3342
+ **CSS parts:** `base`.
3343
+
3344
+ ---
3345
+
3346
+ ## `lyra-image-comparer`
3347
+
3348
+ Before/after comparison surface with two named slots and a keyboard-accessible native range handle.
3349
+
3350
+ **Properties:**
3351
+ - `position: number = 50` (attribute `position`, reflected) — divider position from 0 to 100
3352
+ - `orientation: 'horizontal'|'vertical' = 'horizontal'` (attribute `orientation`, reflected)
3353
+ - `accessibleLabel: string | null` (attribute `aria-label`) — accessible name for the comparison
3354
+ and its range handle
3355
+ - `beforeLabel`/`afterLabel` — fallback text for empty named slots
3356
+
3357
+ **Events:** `lyra-position-change` (`detail: { position }`), plus composed `focus` and `blur` events
3358
+ from the internal range handle.
3359
+
3360
+ **Slots:** `before`, `after`.
3361
+
3362
+ **CSS parts:** `base`, `before`, `after`, `divider`, and `handle`.
3363
+
3364
+ ```html
3365
+ <lyra-image-comparer aria-label="Before and after">
3366
+ <img slot="before" alt="Before" src="before.png">
3367
+ <img slot="after" alt="After" src="after.png">
3368
+ </lyra-image-comparer>
3369
+ ```
3370
+
3371
+ ---
3372
+
3373
+ ## `lyra-zoomable-frame`
3374
+
3375
+ Scrollable inspection frame with bounded zoom controls and keyboard shortcuts. Scrolling provides
3376
+ panning when zoomed content exceeds the viewport.
3377
+
3378
+ **Properties:**
3379
+ - `zoom: number = 1` (attribute `zoom`, reflected), `minZoom: number = 0.5`, `maxZoom: number = 4`,
3380
+ and `zoomStep: number = 0.25` — bounded zoom configuration
3381
+ - `src: string = ''` and `alt: string = ''` — optional image source; otherwise the default slot is
3382
+ rendered
3383
+ - `accessibleLabel: string | null` (attribute `aria-label`) — host-level accessible name
3384
+
3385
+ **Methods:** `zoomIn()`, `zoomOut()`, and `resetZoom()` update the zoom and emit
3386
+ `lyra-zoom-change` (`detail: { zoom }`). The viewport also accepts `+`, `-`, and `0` keyboard
3387
+ shortcuts.
3388
+
3389
+ **CSS parts:** `base`, `viewport`, `content`, `controls`, `zoom-out`, `zoom-in`, and `reset`.
3390
+
3391
+ ```html
3392
+ <lyra-zoomable-frame src="map-preview.png" alt="Map preview" aria-label="Map preview"></lyra-zoomable-frame>
3393
+ ```
3394
+
3395
+ ---
3396
+
3397
+ ## `lyra-scroller`
3398
+
3399
+ Responsive overflow surface with optional previous/next controls. The default slot remains the
3400
+ consumer's content, and the viewport is a native scroll container that works in narrow panels as
3401
+ well as full-width layouts.
3402
+
3403
+ **Properties:**
3404
+ - `orientation: 'horizontal' | 'vertical' = 'horizontal'` (reflected)
3405
+ - `controls: boolean = false` (reflected) — show previous/next controls
3406
+ - `hideScrollbar: boolean = false` (attribute `hide-scrollbar`, reflected)
3407
+ - `scrollStep: number = 0` (attribute `scroll-step`) — custom step; zero uses 80% of the viewport
3408
+ - `label: string = ''` — accessible region name; a host `aria-label` is used when set
3409
+
3410
+ **Events:** `lyra-scroll` with `scrollStart`, `scrollEnd`, `scrollLeft`, and `scrollTop` in the
3411
+ detail object.
3412
+
3413
+ **Slots:** default scrollable content.
3414
+
3415
+ **CSS parts:** `base`, `viewport`, `content`, `previous`, and `next`.
3416
+
3417
+ ```html
3418
+ <lyra-scroller controls label="Project cards">
3419
+ <lyra-card>Solar</lyra-card>
3420
+ <lyra-card>Wind</lyra-card>
3421
+ <lyra-card>Battery</lyra-card>
3422
+ </lyra-scroller>
3423
+ ```
3424
+
3425
+ ---
3426
+
3427
+ ## `lyra-resize-observer`
3428
+
3429
+ Lifecycle-managed wrapper around the native `ResizeObserver`. It observes all element children in
3430
+ the default slot and emits a composed event, while adding no layout of its own.
3431
+
3432
+ **Properties:** `disabled: boolean = false` (reflected) and `box: 'content-box' | 'border-box' |
3433
+ 'device-pixel-content-box' = 'content-box'` (reflected).
3434
+
3435
+ **Events:** `lyra-resize` with `{ entries: ResizeObserverEntry[] }` in `detail`.
3436
+
3437
+ **Slots:** default observed elements. **CSS parts:** `base`.
3438
+
3439
+ ---
3440
+
3441
+ ## `lyra-intersection-observer`
3442
+
3443
+ Lifecycle-managed wrapper around the native `IntersectionObserver`. It observes all element children
3444
+ in the default slot and emits a composed event, while adding no layout of its own.
3445
+
3446
+ **Properties:** `disabled: boolean = false` (reflected), `rootMargin: string = '0px'` (attribute
3447
+ `root-margin`), `threshold: number | number[] = 0`, and `root: Element | null = null`.
3448
+
3449
+ **Events:** `lyra-intersection` with `{ entries: IntersectionObserverEntry[] }` in `detail`.
3450
+
3451
+ **Slots:** default observed elements. **CSS parts:** `base`.
3452
+
3453
+ ---
3454
+
3455
+ ## `lyra-mutation-observer`
3456
+
3457
+ Lifecycle-managed wrapper around the native `MutationObserver`. All element children in the default
3458
+ slot are observed and their mutation records are emitted as a composed event; the wrapper itself
3459
+ adds no layout.
3460
+
3461
+ **Properties:** `disabled: boolean = false` (reflected), `childList: boolean = true` (attribute
3462
+ `child-list`), `observeAttributes: boolean = false` (attribute `attributes`), `characterData: boolean = false` (attribute
3463
+ `character-data`), `subtree: boolean = true`, and `attributeFilter: string[] = []`.
3464
+
3465
+ **Events:** `lyra-mutation` with `{ records: MutationRecord[] }` in `detail`.
3466
+
3467
+ **Slots:** default observed elements. **CSS parts:** `base`.
3468
+
3469
+ ---
3470
+
3184
3471
  ## `lyra-dialog` / `confirm()`
3185
3472
 
3186
3473
  General-purpose modal/overlay plus a promise-based confirmation helper built on top of it.
@@ -3204,6 +3491,8 @@ hand-building that chrome isn't worth it.
3204
3491
  - `closable: boolean = false` (attribute `closable`) — renders a built-in close (X) button in the
3205
3492
  header row (creating one, with no heading text, if `heading` is unset), wired to the same
3206
3493
  `close()` path Escape/backdrop-dismiss already use, with reason `'close-button'`
3494
+ - `noLightDismiss: boolean = false` (attribute `no-light-dismiss`) — prevents a backdrop click from
3495
+ closing the dialog; Escape and explicit `close()` calls remain available
3207
3496
 
3208
3497
  Also settable as a plain `aria-label` attribute (not a public JS property): overrides the panel's
3209
3498
  computed accessible name outright, winning over every other source below (a slotted heading,
@@ -3241,7 +3530,7 @@ when no heading is slotted and `heading` is unset), `body` (wrapper around the d
3241
3530
  `footer` (wrapper around the `footer` slot)
3242
3531
 
3243
3532
  **Themeable custom properties:** `--lyra-dialog-overlay-color` (default `rgb(0 0 0 / 0.5)` — the
3244
- backdrop scrim color; component-specific since no shared `--wa-*`/`--lyra-*` overlay token exists),
3533
+ backdrop scrim color; component-specific since no shared `--lyra-*` overlay token exists),
3245
3534
  `--lyra-dialog-width` (default unset/`auto` — the panel shrink-wraps to content, unchanged; set it
3246
3535
  for an assertive width instead), `--lyra-dialog-max-width` (default `32rem` — the panel's
3247
3536
  max-inline-size cap, via `min(var(--lyra-dialog-max-width, var(--lyra-dialog-width, 32rem)), 100%)`;
@@ -3901,7 +4190,7 @@ fenced/indented `<pre>`), `link` (every rendered `<a>`), `table` (every rendered
3901
4190
 
3902
4191
  **Themeable custom properties:** `--lyra-markdown-font-mono` (default `ui-monospace, SFMono-Regular,
3903
4192
  Menlo, Consolas, monospace` — the code/code-block font; component-specific since no shared
3904
- `--wa-*`/`--lyra-*` monospace token exists), plus shared tokens `--lyra-space-xs/-s/-m/-l`,
4193
+ `--lyra-*` monospace token exists), plus shared tokens `--lyra-space-xs/-s/-m/-l`,
3905
4194
  `--lyra-color-brand-quiet`, `--lyra-color-brand`, `--lyra-color-border`, `--lyra-color-text-quiet`,
3906
4195
  `--lyra-radius`.
3907
4196
 
@@ -3983,6 +4272,8 @@ conversation-surface level).
3983
4272
  - `collapsed: boolean = false` (reflected) — whether the message body is hidden; effective whenever
3984
4273
  set, independent of `collapsible` (which only controls whether the toggle button itself is
3985
4274
  rendered) — mirrors `lyra-widget`'s identical `collapsible`/`collapsed` pair
4275
+ - `attachmentsPosition: 'before'|'after' = 'after'` (attribute `attachments-position`) — places the
4276
+ `attachments` slot before or after the message body; both the visual and reading order follow it
3986
4277
 
3987
4278
  **Events:** `lyra-retry` (no detail payload; fired by the built-in retry button, only rendered when
3988
4279
  `status="failed"`), `lyra-collapse-toggle` (`detail: boolean`, the new `collapsed` state — fired when
@@ -4615,6 +4906,8 @@ wins when both are present.
4615
4906
  indeterminate state, and filename context so translators can reorder every value
4616
4907
  - `uploadFailedLabel: string = 'Upload failed'` (attribute `upload-failed-label`) — visible status
4617
4908
  text shown for `status="error"`; override for i18n/locale
4909
+ - `untitledLabel: string = 'Untitled file'` (attribute `untitled-label`) — fallback filename and
4910
+ tooltip when neither `file` nor `name` supplies a name
4618
4911
 
4619
4912
  The component identifies *which* attachment a `lyra-remove`/`lyra-retry` event is about via the
4620
4913
  platform's own `id` attribute/property rather than a second, differently-named prop. Set `id="..."`
@@ -5109,6 +5402,11 @@ emitting `lyra-change`.
5109
5402
  `<input>`'s own `autocorrect` (Safari/WebKit-specific); empty omits the attribute. Named
5110
5403
  `autoCorrect` in JS purely to dodge a `lib.dom.d.ts` typing collision — the wire attribute is
5111
5404
  still plain `autocorrect`.
5405
+ - `autocomplete: string = 'off'`, `inputMode: string = ''` (attribute `inputmode`), and
5406
+ `enterKeyHint: string = ''` (attribute `enterkeyhint`) — forwarded to the free-text input;
5407
+ they have no effect in closed-dropdown mode
5408
+ - `autocomplete: string = 'off'`, `inputMode: string = ''` (`inputmode`), and `enterKeyHint: string = ''`
5409
+ (`enterkeyhint`) — forwarded to the free-text mode's native `<input>`.
5112
5410
  - `name: string = ''` (reflected)
5113
5411
  - `disabled: boolean = false` (reflected)
5114
5412
  - `required: boolean = false` (reflected — enforced via `internals.setValidity()`)
@@ -5313,6 +5611,9 @@ shared overlay stack. First-party invention (no Web Awesome equivalent).
5313
5611
  - `searchPlaceholder: string = 'Search tools…'` (attribute `search-placeholder`)
5314
5612
  - `filter: ToolSelectFilter | null = null` (attribute: false) — overrides the built-in
5315
5613
  case-insensitive name/description substring match.
5614
+ - `autocomplete: string = ''`, `spellcheck: boolean = true`, `autocapitalize: string = ''`,
5615
+ `autoCorrect: string = ''` (`autocorrect`), `inputMode: string = ''` (`inputmode`), and
5616
+ `enterKeyHint: string = ''` (`enterkeyhint`) — forwarded to the search `<input>`.
5316
5617
 
5317
5618
  **Methods:** `close(reason: ToolSelectDialogCloseReason = 'api'): void` — closes the dialog, emits
5318
5619
  `lyra-close` with `reason`, and returns focus to whatever had it before the dialog opened.
@@ -6326,6 +6627,8 @@ and it's what every instance renders at zero extra bytes until shiki resolves.
6326
6627
  for that language — an additive, opt-in escape hatch for a build scoped to just the languages a
6327
6628
  consumer actually needs. A `language` absent from this map (or `languages` left unset) falls back
6328
6629
  to the default dynamic-import path unchanged.
6630
+ - `languagesOnly: boolean = false` (attribute `languages-only`) — skips the default shiki loader;
6631
+ use when every requested language is supplied through `languages`
6329
6632
 
6330
6633
  **Events:** `lyra-copy` (`detail: { text: string }` — always the raw `code` value, never the
6331
6634
  highlighted HTML, and always fires regardless of whether the actual OS clipboard write succeeded),
@@ -6339,7 +6642,7 @@ button is activated, same event name/shape convention as `<lyra-thinking-panel>`
6339
6642
 
6340
6643
  **Themeable custom properties:** `--lyra-code-block-max-height` (default `none` — the consumer-tunable
6341
6644
  scroll cap; only takes effect once `max-height` is set), `--lyra-code-block-font` (default
6342
- `ui-monospace, SFMono-Regular, Menlo, Consolas, monospace` — no shared `--wa-*`/`--lyra-*` monospace
6645
+ `ui-monospace, SFMono-Regular, Menlo, Consolas, monospace` — no shared `--lyra-*` monospace
6343
6646
  token exists to resolve through), plus shared tokens `--lyra-color-border`, `--lyra-radius`,
6344
6647
  `--lyra-color-surface`, `--lyra-space-xs/-s/-m`, `--lyra-font`, `--lyra-color-text-quiet`,
6345
6648
  `--lyra-color-text`, `--lyra-color-brand`/`-brand-quiet`, `--lyra-transition-fast`,
@@ -6559,6 +6862,15 @@ renders at the start of the action row, before Deny/Edit/Approve.
6559
6862
  `false` via a PROPERTY binding, e.g. `.editable=${false}` — a `?editable=${false}`
6560
6863
  boolean-attribute binding cannot override a true default). When `false`, `args` is always shown
6561
6864
  read-only and can never be changed before approval.
6865
+ - `spellcheck: boolean = false`, `autocapitalize: string = 'off'`,
6866
+ `autoCorrect: string = 'off'` (attribute `autocorrect`), `autocomplete: string = 'off'`,
6867
+ `wrap: 'hard'|'soft'|'off' = 'soft'`, `inputMode: string = ''` (attribute `inputmode`),
6868
+ and `enterKeyHint: string = ''` (attribute `enterkeyhint`) — forwarded to the raw-JSON
6869
+ textarea; the defaults keep browser editing assistance from changing JSON text
6870
+ - `spellcheck: boolean = false`, `autocapitalize: string = 'off'`, `autoCorrect: string = 'off'`
6871
+ (`autocorrect`), `autocomplete: string = 'off'`, `wrap: 'hard'|'soft'|'off' = 'soft'`,
6872
+ `inputMode: string = ''` (`inputmode`), and `enterKeyHint: string = ''` (`enterkeyhint`) —
6873
+ forwarded to the raw-JSON `<textarea>` while editing.
6562
6874
 
6563
6875
  **Methods:** `close(reason: ToolApprovalDialogCloseReason = 'api'): void` — closes the dialog, emits
6564
6876
  `lyra-close` with `reason`, and returns focus to whatever had it before the dialog opened; a no-op if
@@ -6802,6 +7114,10 @@ menu, an avatar menu, or a history row's overflow menu. Uses the WAI-ARIA "menu
6802
7114
  a no-op for existing consumers), matching `lyra-select`/`lyra-model-select`'s
6803
7115
  `this.getAttribute('aria-label') || <computed default>` precedence
6804
7116
 
7117
+ - `closeOnEscapeAnywhere: boolean = false` (attribute `close-on-escape-anywhere`) — lets Escape
7118
+ close the menu when focus is on slotted non-menu-item content inside the popup; item activation
7119
+ remains scoped to actual menu items
7120
+
6805
7121
  **Events:** `lyra-show` (no detail — fires only when `open` transitions to `true`, not for markup
6806
7122
  that renders `open` true from the start), `lyra-hide` (same first-render guard, opposite
6807
7123
  transition), `lyra-menu-select` (`detail: { value }` — a consolidated re-fire of the activated
@@ -6869,6 +7185,21 @@ not rendered at all for `type="normal"`)
6869
7185
 
6870
7186
  **Optional peer deps:** none.
6871
7187
 
7188
+ ### `lyra-dropdown-item`
7189
+
7190
+ Compatibility naming alias for `<lyra-menu-item>`. It is a subclass of the same implementation,
7191
+ so `value`, `disabled`, `destructive`, `type`, `checked`, `select()`, checkbox events, and menu
7192
+ roving focus behave identically.
7193
+
7194
+ **Slots:** default label content and optional `icon`.
7195
+
7196
+ ```html
7197
+ <lyra-menu>
7198
+ <button slot="trigger">Actions</button>
7199
+ <lyra-dropdown-item value="archive">Archive</lyra-dropdown-item>
7200
+ </lyra-menu>
7201
+ ```
7202
+
6872
7203
  ```html
6873
7204
  <lyra-menu label="Row actions">
6874
7205
  <button slot="trigger" aria-label="More actions">⋮</button>
@@ -7568,6 +7899,8 @@ capability as a row.
7568
7899
  `'Attach files'`); only affects the single-capability button (`[part='trigger']`) — the
7569
7900
  multi-capability menu's own trigger keeps its fixed `'Add attachment'` label regardless. Unset
7570
7901
  (the default) keeps the built-in English default.
7902
+ - `triggerTitle?: string` (attribute `trigger-title`) — forwards a sighted-user hover tooltip to
7903
+ both the single-capability and multi-capability trigger buttons
7571
7904
 
7572
7905
  **Events:** `lyra-pick` (`detail: { capability: 'files' | 'image'; files: FileList }`) — fired once a
7573
7906
  file-backed capability's hidden input produces a real selection. The `FileList` is an independent
@@ -7860,10 +8193,194 @@ the `footer` slot, hidden entirely when empty).
7860
8193
 
7861
8194
  ---
7862
8195
 
8196
+ ## `lyra-radio`
8197
+
8198
+ A form-associated single-choice control. Use it alone or inside `lyra-radio-group`.
8199
+
8200
+ **Properties:** `checked`, `disabled`, `required`, `name`, and `value` (all reflected where
8201
+ applicable). A selected radio submits its value through `ElementInternals`.
8202
+
8203
+ **Events:** native-style composed `input` and `change`, plus `lyra-change` with
8204
+ `{ checked, value }`.
8205
+
8206
+ **Slots:** default label content.
8207
+
8208
+ **CSS parts:** `base`, `circle`, `dot`, `label`.
8209
+
8210
+ ```html
8211
+ <lyra-radio name="format" value="json">JSON</lyra-radio>
8212
+ ```
8213
+
8214
+ ## `lyra-popover`
8215
+
8216
+ A click-triggered, light-dismiss floating surface positioned with the shared Floating UI positioner.
8217
+
8218
+ **Properties:** `open`, `placement`, `distance`, `accessibleLabel` (`aria-label`), and `popupRole` (`popup-role`).
8219
+ **Events:** `lyra-show`, `lyra-hide`. **Slots:** `trigger`, default content. **CSS parts:** `trigger`,
8220
+ `popup`, `content`.
8221
+
8222
+ ## `lyra-tooltip`
8223
+
8224
+ A hover/focus tooltip positioned with the shared Floating UI positioner.
8225
+
8226
+ **Properties:** `open`, `manual`, `delay`, `placement`, `distance`, `content`, and
8227
+ `accessibleLabel` (`aria-label`). **Slots:** `trigger`, default content. **CSS parts:**
8228
+ `trigger`, `popup`.
8229
+
8230
+ ## `lyra-dropdown`
8231
+
8232
+ A menu-role popover for consumer-supplied action content. Compose `lyra-menu` when full roving
8233
+ menu-item behavior is needed.
8234
+
8235
+ **Properties:** `open`, `placement`, `distance`, `accessibleLabel` (`aria-label`), and `popupRole` (`popup-role`).
8236
+ **Slots:** `trigger`, default menu content. **CSS parts:** `trigger`, `popup`, `content`.
8237
+
8238
+ ## `lyra-radio-group`
8239
+
8240
+ A labeled, keyboard-navigable group of `lyra-radio` controls. Arrow keys, Home, and End move
8241
+ focus; arrow navigation selects the next enabled radio.
8242
+
8243
+ **Properties:** `label`, `hint`, `errorText` (`error-text`), `name`, `required`, `disabled`, and
8244
+ `aria-label` (through `accessibleLabel`).
8245
+
8246
+ **Events:** `lyra-change` with `{ value, radio }`.
8247
+
8248
+ **Slots:** default radios, `label`, `hint`, `error`.
8249
+
8250
+ **CSS parts:** `base`, `label`, `hint`, `error`.
8251
+
8252
+ ## `lyra-spinner`
8253
+
8254
+ An indeterminate busy indicator with a localized `role="status"` name.
8255
+
8256
+ **Properties:** `labelPlacement` (`label-placement`): `'none' | 'after'` and `accessibleLabel`
8257
+ (`accessible-label`).
8258
+
8259
+ **Slots:** default optional visible label. **CSS parts:** `base`, `spinner`, `label`.
8260
+
8261
+ ## `lyra-progress-bar`
8262
+
8263
+ A determinate or indeterminate progress bar.
8264
+
8265
+ **Properties:** `value`, `max`, `indeterminate`, `variant`, `showValue` (`show-value`), and
8266
+ `accessibleLabel` (`accessible-label`).
8267
+ The rendered progressbar exposes `aria-valuemin`, `aria-valuemax`, and `aria-valuenow` when
8268
+ determinate.
8269
+
8270
+ **Slots:** `label`. **CSS parts:** `base`, `track`, `indicator`, `label`.
8271
+
8272
+ ## `lyra-progress-ring`
8273
+
8274
+ A circular progress indicator with the same value contract as `lyra-progress-bar`.
8275
+
8276
+ **Properties:** `value`, `max`, `indeterminate`, and `accessibleLabel` (`accessible-label`).
8277
+ **Slots:** default center label. **CSS parts:** `base`, `track`, `indicator`, `label`.
8278
+
8279
+ ## `lyra-badge` and `lyra-tag`
8280
+
8281
+ Compact status labels. Both expose `variant: 'neutral' | 'brand' | 'success' | 'warning' | 'danger'`.
8282
+ The two tags share the same visual contract; `lyra-tag` is a semantic alias for migration-friendly
8283
+ markup.
8284
+
8285
+ **Slots:** default content. **CSS parts:** `base`.
8286
+
8287
+ ## `lyra-callout`
8288
+
8289
+ An inline status, warning, or error surface. Set `inline` for lightweight reactive form or mutation
8290
+ errors without panel chrome.
8291
+
8292
+ **Properties:** `variant`, `heading`, `closable`, `inline`, `open`, and `accessibleLabel`
8293
+ (`accessible-label`).
8294
+
8295
+ **Events:** cancelable `lyra-close`; the callout hides after the event unless a listener calls
8296
+ `preventDefault()`.
8297
+
8298
+ **Slots:** default message, `heading`, `icon`. **CSS parts:** `base`, `icon`, `content`, `heading`,
8299
+ `close-button`.
8300
+
8301
+ ## `lyra-details`, `lyra-accordion`, and `lyra-accordion-item`
8302
+
8303
+ `lyra-details` is a native-semantics disclosure panel. `lyra-accordion` coordinates slotted
8304
+ details panels and closes siblings unless `multiple` is true. `lyra-accordion-item` is an
8305
+ accordion-compatible alias.
8306
+
8307
+ **Properties:** `open`, `disabled`, and `summary` on details/items; `multiple` on accordion.
8308
+ **Events:** `lyra-toggle` with `{ open }` from details/items. **Slots:** `summary` and default
8309
+ content on details/items; default panels on accordion. **CSS parts:** `base`, `summary`, `content`
8310
+ on details/items; `base` on accordion.
8311
+
8312
+ ## `lyra-divider`
8313
+
8314
+ A semantic separator with `orientation: 'horizontal' | 'vertical'`. **CSS part:** `base`.
8315
+
8316
+ ## `lyra-breadcrumb` and `lyra-breadcrumb-item`
8317
+
8318
+ Responsive navigation trail primitives. Breadcrumb has `accessibleLabel` (`accessible-label`);
8319
+ items have `href` and `current`. Breadcrumb slots default items; item slots default label content.
8320
+ Breadcrumb exposes `base`; item exposes `base`.
8321
+
8322
+ ## `lyra-format-number`
8323
+
8324
+ Locale-aware `Intl.NumberFormat` output. **Properties:** `value`, `locale`, `currency`, `notation`,
8325
+ `minimumFractionDigits`, and `maximumFractionDigits`. Default slot is fallback content for a
8326
+ non-finite value.
8327
+
8328
+ ## `lyra-format-date`
8329
+
8330
+ Locale-aware `Intl.DateTimeFormat` output. **Properties:** `date`, `locale`, `year`, `month`, `day`,
8331
+ `dateStyle`, and `timeStyle`. Default slot is fallback content for an invalid date.
8332
+
8333
+ ## `lyra-format-bytes`
8334
+
8335
+ Locale-aware byte-size output. **Properties:** `value`, `locale`, `unitStep` (`unit-step`), and
8336
+ `decimals`.
8337
+
8338
+ ## `lyra-relative-time`
8339
+
8340
+ Locale-aware relative time output. **Properties:** `date`, `locale`, `unit`, `numeric`, and `sync`.
8341
+ When `sync` is true the displayed value refreshes periodically.
8342
+
8343
+ ## `lyra-rating`
8344
+
8345
+ A keyboard-accessible star rating control with slider semantics. **Properties:** `value`, `max`,
8346
+ `precision`, `readonly`, `disabled`, and `accessibleLabel` (`aria-label`). **Events:**
8347
+ `lyra-change` with `{ value }`. **CSS parts:** `base`, `star`.
8348
+
8349
+ ## `lyra-color-picker`
8350
+
8351
+ A form-associated native color picker with label and hint chrome. **Properties:** the shared form
8352
+ properties `name`, `value`, `disabled`, and `required`, plus `label`, `hint`, and `accessibleLabel`
8353
+ (`aria-label`). **Slots:** `label`, `hint`. **Events:** composed `input` and `change`, plus
8354
+ `lyra-change` with `{ value }`. **CSS parts:** `form-control`, `label`, `input`, `hint`.
8355
+
7863
8356
  ## Cross-cutting notes
7864
8357
 
7865
8358
  These apply across the whole library rather than to any one component:
7866
8359
 
8360
+ - **Independence and migration.** Lyra has no runtime, theme, or design-token dependency on
8361
+ Shoelace or Web Awesome. The documented `wa-*` comparisons are migration references only; Lyra's
8362
+ own `lyra-*` tokens, events, localization runtime, and implementation are the source of truth.
8363
+ For a staged Web Awesome migration, map existing `--wa-*` values to `--lyra-theme-*` explicitly
8364
+ in application CSS instead of relying on an implicit compatibility layer.
8365
+
8366
+ - **Internationalization.** Built-in UI copy, accessible names, descriptions, validation messages,
8367
+ status announcements, and empty/loading states resolve through `localize()` and the locale runtime.
8368
+ Register an application catalog with `registerLyraLocale()` or override one instance with
8369
+ `.strings`; locale fallback is exact locale, base language, then English. Date, number, byte,
8370
+ relative-time, and calendar output uses `Intl`. Consumer data and slotted content are never
8371
+ translated automatically.
8372
+
8373
+ - **RTL and direction.** Direction is inherited from `dir`/`lang`; components do not force their own
8374
+ direction. CSS logical properties mirror layout, while directional keyboard and pointer math
8375
+ consults the effective direction. Test both LTR and RTL for any component with horizontal order,
8376
+ start/end placement, drag deltas, or previous/next navigation.
8377
+
8378
+ - **Accessibility and responsive behavior.** Semantic roles live on the shadow-DOM element that owns
8379
+ them, with explicit false states for toggle/selection/expansion ARIA attributes and deliberate
8380
+ host-name forwarding. Form-associated controls preserve `ElementInternals`, reset, validity,
8381
+ focus, and native editing behavior. Reusable layouts respond to their allocated container, and
8382
+ decorative/infinite motion simplifies under `prefers-reduced-motion: reduce`.
8383
+
7867
8384
  - **Packaging.** `custom-elements.json` is now in `package.json`'s `files` allowlist and
7868
8385
  regenerated by a `prepack` script (`pnpm run manifest`) before publish, so a manifest-driven IDE/
7869
8386
  tooling integration (e.g. custom-elements-manifest-based autocomplete) does see an up-to-date copy