@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
@@ -13,6 +13,8 @@ import { isRtl } from '../../internal/rtl.js';
13
13
  import { styles } from './table.styles.js';
14
14
  import { chevronIcon } from '../../internal/icons.js';
15
15
  import '../empty/empty.class.js';
16
+ import '../pagination/pagination.js';
17
+ import '../spinner/spinner.js';
16
18
  /** Interactive elements a nested `cell()` template may render (e.g. an
17
19
  * actions-column button). Clicks/keydowns landing on one of these — or
18
20
  * bubbling up through one — must not be re-interpreted as row/column
@@ -103,6 +105,24 @@ function closestInteractive(target, boundary) {
103
105
  * on activation, mirroring `sortKey`/`selectedKey`'s existing
104
106
  * presentational-only convention.
105
107
  *
108
+ * Selection is opt-in through the `selectionMode` property. Use `single` or
109
+ * `multiple` to self-manage row selection; the default `none` remains
110
+ * presentational. `selectedKeys` contains the raw keys selected in multiple
111
+ * mode.
112
+ *
113
+ * `filterable` adds a compact search field above the grid. `filterText` is
114
+ * controlled and emits `lyra-filter-change`; `filter` can provide a typed
115
+ * predicate, otherwise the row is matched against its JSON representation.
116
+ * `pageSize` enables controlled pagination through the existing
117
+ * `<lyra-pagination>` primitive. Client mode slices `rows`; server mode
118
+ * renders the supplied page unchanged while using `totalItems` for the
119
+ * navigation summary. `loading` keeps the table shell busy and renders an
120
+ * indeterminate spinner.
121
+ * Columns with `editable: true` open a native text/number editor on
122
+ * double-click and emit `lyra-cell-edit`; row mutation remains consumer-owned.
123
+ * `groupBy` inserts non-focusable group header rows before each group; use
124
+ * `groupLabel` when the raw group key needs custom content.
125
+ *
106
126
  * @customElement lyra-table
107
127
  * @event lyra-sort - A sortable header was activated. `detail: { key }`.
108
128
  * @event lyra-row-click - A row was activated. `detail: { row }`.
@@ -117,6 +137,10 @@ function closestInteractive(target, boundary) {
117
137
  * `detail: { row, key }`. Fired only when `expandedContent` is set and
118
138
  * the row passes `canExpand`; does not itself mutate `expandedKeys` — the
119
139
  * consumer updates it and passes the new value back in.
140
+ * @event lyra-selection-change - Opt-in row selection changed. `detail: { keys }`.
141
+ * @event lyra-filter-change - The filter field changed. `detail: { text }`.
142
+ * @event lyra-page-change - A pagination control requested a page. `detail: { page }`.
143
+ * @event lyra-cell-edit - An inline editor committed a value. `detail: { row, key, value }`.
120
144
  * @csspart base - The root wrapper around the `<table>` and its footer controls.
121
145
  * @csspart table - The `<table role="grid">` element.
122
146
  * @csspart head - The `<thead>` element.
@@ -126,6 +150,9 @@ function closestInteractive(target, boundary) {
126
150
  * @csspart foot - The `<tfoot>`, only rendered when at least one column defines `footer`.
127
151
  * @csspart footer-row - The single footer row.
128
152
  * @csspart footer-cell - A single footer cell.
153
+ * @csspart cell-editor - The native inline cell editor, shown after a double-click on an editable cell.
154
+ * @csspart group-row - A non-focusable group header row.
155
+ * @csspart group-cell - The group header cell.
129
156
  * @csspart more-button - The "load more" control, shown when `hasMore` is true.
130
157
  * @csspart sort-icon - The chevron shown in the active sortable column's header cell.
131
158
  * @csspart reveal-columns-button - The button that toggles `priority`-hidden columns back into view.
@@ -138,6 +165,11 @@ function closestInteractive(target, boundary) {
138
165
  * row whose key is in `expandedKeys`.
139
166
  * @csspart expanded-cell - The single `colspan`-spanning `<td>` inside
140
167
  * `expanded-row`, containing `expandedContent(row)`.
168
+ * @csspart group-row - A non-focusable group header row.
169
+ * @csspart group-cell - The full-width group header cell.
170
+ * @csspart filter - The optional row-filter input.
171
+ * @csspart loading - The loading-state wrapper.
172
+ * @csspart pagination - The optional pagination component.
141
173
  */
142
174
  export class LyraTable extends LyraElement {
143
175
  constructor() {
@@ -147,6 +179,21 @@ export class LyraTable extends LyraElement {
147
179
  this.sortKey = '';
148
180
  this.sortDir = 'asc';
149
181
  this.selectedKey = null;
182
+ this.selectionMode = 'none';
183
+ this.selectedKeys = new Set();
184
+ this.filterable = false;
185
+ this.filterText = '';
186
+ this.filterLabel = '';
187
+ this.filterPlaceholder = '';
188
+ this.loading = false;
189
+ this.loadingLabel = '';
190
+ /** Set to a positive value to enable the controlled pagination footer. */
191
+ this.pageSize = 0;
192
+ /** Controlled current page used when `pageSize` is positive. */
193
+ this.page = 1;
194
+ /** Total item count for server pagination; `-1` derives it from filtered rows. */
195
+ this.totalItems = -1;
196
+ this.paginationMode = 'client';
150
197
  /** Consumer-owned open/closed state, keyed the same way as `rowKey`/
151
198
  * `selectedKey`. The table never mutates this itself — it only reads it
152
199
  * to decide which rows currently render `expandedContent`; toggle it in
@@ -188,9 +235,41 @@ export class LyraTable extends LyraElement {
188
235
  * clicked/navigated to, at which point `focusedRowKey()` falls back to
189
236
  * `selectedKey` (if it matches a row) or the first row. */
190
237
  this.activeRowKey = null;
238
+ this.editingCell = null;
191
239
  this.rowsByKey = new Map();
192
240
  this.columnsByKey = new Map();
193
241
  this.observedHeaders = new Set();
242
+ this.onFilterInput = (event) => {
243
+ const input = event.currentTarget;
244
+ this.filterText = input.value;
245
+ this.emit('lyra-filter-change', { text: this.filterText });
246
+ };
247
+ this.onPaginationChange = (event) => {
248
+ event.stopPropagation();
249
+ this.emit('lyra-page-change', event.detail);
250
+ };
251
+ this.onEditorKeyDown = (event, rowKey, columnKey) => {
252
+ event.stopPropagation();
253
+ if (event.key === 'Enter') {
254
+ event.preventDefault();
255
+ this.commitEdit(event, rowKey, columnKey);
256
+ }
257
+ else if (event.key === 'Escape') {
258
+ event.preventDefault();
259
+ this.editingCell = null;
260
+ }
261
+ };
262
+ this.onTableDoubleClick = (event) => {
263
+ const target = event.target;
264
+ const table = event.currentTarget;
265
+ if (closestInteractive(target, table))
266
+ return;
267
+ const cell = target.closest('[part="cell"][data-col-key]');
268
+ const row = target.closest('[data-row-key]');
269
+ if (cell && row?.dataset.rowKey && cell.dataset.colKey) {
270
+ this.startEditing(row.dataset.rowKey, cell.dataset.colKey);
271
+ }
272
+ };
194
273
  this.toggleColumns = () => {
195
274
  this.showAllColumns = !this.showAllColumns;
196
275
  this.emit('lyra-columns-revealed', { revealed: this.showAllColumns });
@@ -310,6 +389,43 @@ export class LyraTable extends LyraElement {
310
389
  keyOf(row, index) {
311
390
  return this.rowKey ? this.rowKey(row) : index;
312
391
  }
392
+ matchingEntries() {
393
+ const text = this.filterText.trim();
394
+ if (text === '')
395
+ return this.rows.map((row, index) => ({ row, index }));
396
+ const normalized = text.toLocaleLowerCase(this.effectiveLocale);
397
+ return this.rows.flatMap((row, index) => {
398
+ const matches = this.filter
399
+ ? this.filter(row, text)
400
+ : JSON.stringify(row).toLocaleLowerCase(this.effectiveLocale).includes(normalized);
401
+ return matches ? [{ row, index }] : [];
402
+ });
403
+ }
404
+ get normalizedPageSize() {
405
+ return Number.isFinite(this.pageSize) ? Math.max(0, Math.trunc(this.pageSize)) : 0;
406
+ }
407
+ get matchingTotalItems() {
408
+ if (Number.isFinite(this.totalItems) && this.totalItems >= 0)
409
+ return Math.trunc(this.totalItems);
410
+ return this.matchingEntries().length;
411
+ }
412
+ get pageCount() {
413
+ const pageSize = this.normalizedPageSize;
414
+ return pageSize > 0 ? Math.ceil(this.matchingTotalItems / pageSize) : 0;
415
+ }
416
+ get appliedPage() {
417
+ if (this.pageCount === 0)
418
+ return 1;
419
+ const page = Number.isFinite(this.page) ? Math.trunc(this.page) : 1;
420
+ return Math.min(this.pageCount, Math.max(1, page));
421
+ }
422
+ renderedEntries() {
423
+ const entries = this.matchingEntries();
424
+ if (this.normalizedPageSize === 0 || this.paginationMode === 'server')
425
+ return entries;
426
+ const start = (this.appliedPage - 1) * this.normalizedPageSize;
427
+ return entries.slice(start, start + this.normalizedPageSize);
428
+ }
313
429
  /** The header cell that currently owns `tabindex="0"`. */
314
430
  focusedColKey() {
315
431
  const visible = this.visibleHeaders();
@@ -330,11 +446,22 @@ export class LyraTable extends LyraElement {
330
446
  if (this.rowsByKey.has(selected))
331
447
  return selected;
332
448
  }
333
- return this.rows.length > 0 ? encodeKey(this.keyOf(this.rows[0], 0)) : null;
449
+ const first = this.renderedEntries()[0];
450
+ return first ? encodeKey(this.keyOf(first.row, first.index)) : null;
334
451
  }
335
452
  willUpdate(changed) {
336
- if (changed.has('rows') || changed.has('rowKey')) {
337
- this.rowsByKey = new Map(this.rows.map((row, i) => [encodeKey(this.keyOf(row, i)), row]));
453
+ if (changed.has('rows') ||
454
+ changed.has('rowKey') ||
455
+ changed.has('filterText') ||
456
+ changed.has('filter') ||
457
+ changed.has('page') ||
458
+ changed.has('pageSize') ||
459
+ changed.has('paginationMode') ||
460
+ changed.has('totalItems')) {
461
+ this.rowsByKey = new Map(this.renderedEntries().map((entry) => [
462
+ encodeKey(this.keyOf(entry.row, entry.index)),
463
+ entry,
464
+ ]));
338
465
  }
339
466
  if (changed.has('columns')) {
340
467
  this.columnsByKey = new Map(this.columns.map((c) => [c.key, c]));
@@ -411,6 +538,11 @@ export class LyraTable extends LyraElement {
411
538
  if (base)
412
539
  this.observeBase(base);
413
540
  this.observeHeaders();
541
+ if (changed.has('editingCell') && this.editingCell) {
542
+ queueMicrotask(() => {
543
+ this.renderRoot.querySelector('[part="cell-editor"]')?.focus();
544
+ });
545
+ }
414
546
  // Deferred to a microtask rather than called synchronously here: a real
415
547
  // priority-hidden transition mutates the reactive `columnsHidden`
416
548
  // property, and doing that from inside this same updated() call stack
@@ -429,14 +561,50 @@ export class LyraTable extends LyraElement {
429
561
  }
430
562
  activateRow(key) {
431
563
  this.activeRowKey = key;
432
- const row = this.rowsByKey.get(key);
433
- if (row !== undefined)
434
- this.emit('lyra-row-click', { row });
564
+ const entry = this.rowsByKey.get(key);
565
+ if (entry === undefined)
566
+ return;
567
+ const { row, index } = entry;
568
+ this.emit('lyra-row-click', { row });
569
+ if (this.selectionMode === 'single') {
570
+ this.selectedKey = this.keyOf(row, index);
571
+ this.emit('lyra-selection-change', { keys: this.selectedKey === null ? [] : [this.selectedKey] });
572
+ }
573
+ else if (this.selectionMode === 'multiple') {
574
+ const rawKey = this.keyOf(row, index);
575
+ const next = new Set(this.selectedKeys);
576
+ if (next.has(rawKey))
577
+ next.delete(rawKey);
578
+ else
579
+ next.add(rawKey);
580
+ this.selectedKeys = next;
581
+ this.emit('lyra-selection-change', { keys: [...next] });
582
+ }
583
+ }
584
+ editorValue(row, column) {
585
+ const value = column.editValue?.(row) ?? row[column.key] ?? '';
586
+ return String(value);
587
+ }
588
+ startEditing(rowKey, columnKey) {
589
+ const column = this.columnsByKey.get(columnKey);
590
+ if (!column?.editable || !this.rowsByKey.has(rowKey))
591
+ return;
592
+ this.editingCell = { rowKey, columnKey };
593
+ }
594
+ commitEdit(event, rowKey, columnKey) {
595
+ const input = event.currentTarget;
596
+ const entry = this.rowsByKey.get(rowKey);
597
+ const column = this.columnsByKey.get(columnKey);
598
+ if (!entry || !column?.editable)
599
+ return;
600
+ const value = column.editType === 'number' && input.value !== '' ? Number(input.value) : input.value;
601
+ this.emit('lyra-cell-edit', { row: entry.row, key: columnKey, value });
602
+ this.editingCell = null;
435
603
  }
436
604
  activateExpandToggle(key) {
437
- const row = this.rowsByKey.get(encodeKey(key));
438
- if (row !== undefined)
439
- this.emit('lyra-row-expand-toggle', { row, key });
605
+ const entry = this.rowsByKey.get(encodeKey(key));
606
+ if (entry !== undefined)
607
+ this.emit('lyra-row-expand-toggle', { row: entry.row, key });
440
608
  }
441
609
  /** Header cells currently in the tab sequence — excludes columns hidden by
442
610
  * a `priority`-driven `@container` rule (table.styles.ts), so Left/Right/
@@ -548,7 +716,17 @@ export class LyraTable extends LyraElement {
548
716
  description=${this.noColumnsDescription}
549
717
  ></lyra-empty>`;
550
718
  }
551
- if (this.rows.length === 0) {
719
+ if (this.loading) {
720
+ return html `<div part="base" aria-busy="true">
721
+ <div part="loading" role="status" aria-live="polite">
722
+ <lyra-spinner label-placement="after" accessible-label=${this.localize('tableLoading', this.loadingLabel || undefined)}>
723
+ ${this.localize('tableLoading', this.loadingLabel || undefined)}
724
+ </lyra-spinner>
725
+ </div>
726
+ </div>`;
727
+ }
728
+ const matchingEntries = this.matchingEntries();
729
+ if (this.rows.length === 0 && !this.filterable && this.normalizedPageSize === 0) {
552
730
  return html `<lyra-empty
553
731
  heading=${this.localize('noData', this.emptyHeading || undefined)}
554
732
  description=${this.emptyDescription}
@@ -558,114 +736,167 @@ export class LyraTable extends LyraElement {
558
736
  const focusedRow = this.focusedRowKey();
559
737
  const hasColumnWidths = this.columns.some((col) => col.width);
560
738
  const hasExpand = Boolean(this.expandedContent);
561
- return html `
562
- <div part="base" ?data-force-visible=${this.showAllColumns}>
563
- <table
564
- part="table"
565
- role="grid"
566
- aria-label=${this.getAttribute('aria-label') || nothing}
567
- ?data-has-column-widths=${hasColumnWidths}
568
- @click=${this.onTableClick}
569
- @keydown=${this.onTableKeyDown}
570
- >
571
- <colgroup>
572
- ${hasExpand ? html `<col style=${styleMap({ 'inline-size': '2.5rem' })} />` : nothing}
573
- ${this.columns.map((col) => html `<col style=${styleMap({ 'inline-size': col.width, 'min-inline-size': col.minWidth })} />`)}
574
- </colgroup>
575
- <thead part="head">
576
- <tr role="row">
577
- ${hasExpand
578
- ? html `<th part="header-cell" data-row-expand-toggle aria-hidden="true"></th>`
579
- : nothing}
580
- ${this.columns.map((col) => {
581
- const active = Boolean(col.sortable) && this.sortKey === col.key;
582
- const ariaSort = active ? (this.sortDir === 'asc' ? 'ascending' : 'descending') : 'none';
583
- return html `<th
584
- part="header-cell"
585
- role="columnheader"
586
- scope="col"
587
- data-col-key=${col.key}
588
- data-align=${col.align ?? 'start'}
589
- data-priority=${col.priority ?? nothing}
590
- data-sticky=${stickyDirection(col.sticky) ?? nothing}
591
- ?data-sortable=${col.sortable}
592
- aria-sort=${col.sortable ? ariaSort : nothing}
593
- tabindex=${col.key === focusedCol ? '0' : '-1'}
594
- >
595
- ${col.headerCell ? col.headerCell(col) : col.label}
596
- ${active
597
- ? html `<span part="sort-icon" data-dir=${this.sortDir} aria-hidden="true"
598
- >${chevronIcon()}</span
599
- >`
739
+ const renderedEntries = this.renderedEntries();
740
+ const hasPagination = this.normalizedPageSize > 0;
741
+ const filterLabel = this.localize('tableFilterLabel', this.filterLabel || undefined);
742
+ const filterPlaceholder = this.localize('tableFilterPlaceholder', this.filterPlaceholder || undefined);
743
+ const tableContent = renderedEntries.length === 0
744
+ ? html `<lyra-empty
745
+ compact
746
+ heading=${this.localize('noData', this.emptyHeading || undefined)}
747
+ description=${this.emptyDescription}
748
+ ></lyra-empty>`
749
+ : html `<table
750
+ part="table"
751
+ role="grid"
752
+ aria-label=${this.getAttribute('aria-label') || nothing}
753
+ ?data-has-column-widths=${hasColumnWidths}
754
+ @click=${this.onTableClick}
755
+ @keydown=${this.onTableKeyDown}
756
+ @dblclick=${this.onTableDoubleClick}
757
+ >
758
+ <colgroup>
759
+ ${hasExpand ? html `<col style=${styleMap({ 'inline-size': '2.5rem' })} />` : nothing}
760
+ ${this.columns.map((col) => html `<col style=${styleMap({ 'inline-size': col.width, 'min-inline-size': col.minWidth })} />`)}
761
+ </colgroup>
762
+ <thead part="head">
763
+ <tr role="row">
764
+ ${hasExpand
765
+ ? html `<th part="header-cell" data-row-expand-toggle aria-hidden="true"></th>`
600
766
  : nothing}
601
- </th>`;
602
- })}
603
- </tr>
604
- </thead>
605
- <tbody>
606
- ${repeat(this.rows, (row, i) => this.keyOf(row, i), (row, i) => {
607
- const key = this.keyOf(row, i);
608
- const selected = this.selectedKey !== null && this.selectedKey === key;
609
- const canExpandRow = hasExpand && (this.canExpand ? this.canExpand(row) : true);
610
- const rowExpanded = canExpandRow && this.expandedKeys.has(key);
611
- return [
612
- html `<tr
613
- part="row"
614
- role="row"
615
- data-row-key=${encodeKey(key)}
616
- aria-selected=${selected ? 'true' : 'false'}
617
- tabindex=${encodeKey(key) === focusedRow ? '0' : '-1'}
767
+ ${this.columns.map((col) => {
768
+ const active = Boolean(col.sortable) && this.sortKey === col.key;
769
+ const ariaSort = active ? (this.sortDir === 'asc' ? 'ascending' : 'descending') : 'none';
770
+ return html `<th
771
+ part="header-cell"
772
+ role="columnheader"
773
+ scope="col"
774
+ data-col-key=${col.key}
775
+ data-align=${col.align ?? 'start'}
776
+ data-priority=${col.priority ?? nothing}
777
+ data-sticky=${stickyDirection(col.sticky) ?? nothing}
778
+ ?data-sortable=${col.sortable}
779
+ aria-sort=${col.sortable ? ariaSort : nothing}
780
+ tabindex=${col.key === focusedCol ? '0' : '-1'}
618
781
  >
619
- ${hasExpand
620
- ? html `<td part="expand-toggle-cell">
621
- ${canExpandRow
622
- ? html `<button
623
- type="button"
624
- part="row-expand-toggle"
625
- aria-expanded=${String(rowExpanded)}
626
- aria-label=${this.localize(rowExpanded ? 'collapse' : 'expand')}
627
- @click=${() => this.activateExpandToggle(key)}
628
- >
629
- <span part="row-expand-icon" aria-hidden="true">${chevronIcon()}</span>
630
- </button>`
631
- : nothing}
632
- </td>`
782
+ ${col.headerCell ? col.headerCell(col) : col.label}
783
+ ${active
784
+ ? html `<span part="sort-icon" data-dir=${this.sortDir} aria-hidden="true"
785
+ >${chevronIcon()}</span
786
+ >`
633
787
  : nothing}
788
+ </th>`;
789
+ })}
790
+ </tr>
791
+ </thead>
792
+ <tbody>
793
+ ${repeat(renderedEntries, (entry) => this.keyOf(entry.row, entry.index), (entry, entryIndex) => {
794
+ const { row, index } = entry;
795
+ const key = this.keyOf(row, index);
796
+ const selected = (this.selectedKey !== null && this.selectedKey === key) || this.selectedKeys.has(key);
797
+ const canExpandRow = hasExpand && (this.canExpand ? this.canExpand(row) : true);
798
+ const rowExpanded = canExpandRow && this.expandedKeys.has(key);
799
+ const groupKey = this.groupBy?.(row);
800
+ const previousGroupKey = entryIndex > 0 ? this.groupBy?.(renderedEntries[entryIndex - 1].row) : undefined;
801
+ const isNewGroup = this.groupBy !== undefined && (entryIndex === 0 || groupKey !== previousGroupKey);
802
+ return [
803
+ isNewGroup
804
+ ? html `<tr part="group-row" role="row">
805
+ <td
806
+ part="group-cell"
807
+ role="gridcell"
808
+ colspan=${this.columns.length + (hasExpand ? 1 : 0)}
809
+ >
810
+ ${this.groupLabel
811
+ ? this.groupLabel(groupKey, renderedEntries
812
+ .filter((candidate) => this.groupBy?.(candidate.row) === groupKey)
813
+ .map((candidate) => candidate.row))
814
+ : String(groupKey)}
815
+ </td>
816
+ </tr>`
817
+ : nothing,
818
+ html `<tr
819
+ part="row"
820
+ role="row"
821
+ data-row-key=${encodeKey(key)}
822
+ aria-selected=${selected ? 'true' : 'false'}
823
+ tabindex=${encodeKey(key) === focusedRow ? '0' : '-1'}
824
+ >
825
+ ${hasExpand
826
+ ? html `<td part="expand-toggle-cell">
827
+ ${canExpandRow
828
+ ? html `<button
829
+ type="button"
830
+ part="row-expand-toggle"
831
+ aria-expanded=${String(rowExpanded)}
832
+ aria-label=${this.localize(rowExpanded ? 'collapse' : 'expand')}
833
+ @click=${() => this.activateExpandToggle(key)}
834
+ >
835
+ <span part="row-expand-icon" aria-hidden="true">${chevronIcon()}</span>
836
+ </button>`
837
+ : nothing}
838
+ </td>`
839
+ : nothing}
840
+ ${this.columns.map((col) => html `<td
841
+ part="cell"
842
+ role="gridcell"
843
+ data-col-key=${col.key}
844
+ data-align=${col.align ?? 'start'}
845
+ data-priority=${col.priority ?? nothing}
846
+ data-sticky=${stickyDirection(col.sticky) ?? nothing}
847
+ style=${col.cellStyle ? styleMap(col.cellStyle(row) ?? {}) : nothing}
848
+ >
849
+ ${this.editingCell?.rowKey === encodeKey(key) && this.editingCell.columnKey === col.key
850
+ ? html `<input
851
+ part="cell-editor"
852
+ type=${col.editType ?? 'text'}
853
+ .value=${this.editorValue(row, col)}
854
+ aria-label=${this.localize('tableEditCell', undefined, { column: col.label })}
855
+ @change=${(event) => this.commitEdit(event, encodeKey(key), col.key)}
856
+ @keydown=${(event) => this.onEditorKeyDown(event, encodeKey(key), col.key)}
857
+ />`
858
+ : col.cell(row)}
859
+ </td>`)}
860
+ </tr>`,
861
+ rowExpanded
862
+ ? html `<tr part="expanded-row" role="row">
863
+ <td part="expanded-cell" role="gridcell" colspan=${this.columns.length + (hasExpand ? 1 : 0)}>
864
+ ${this.expandedContent?.(row)}
865
+ </td>
866
+ </tr>`
867
+ : nothing,
868
+ ];
869
+ })}
870
+ </tbody>
871
+ ${this.columns.some((c) => c.footer)
872
+ ? html `<tfoot part="foot">
873
+ <tr part="footer-row">
874
+ ${hasExpand ? html `<td part="footer-cell" aria-hidden="true"></td>` : nothing}
634
875
  ${this.columns.map((col) => html `<td
635
- part="cell"
636
- role="gridcell"
637
- data-col-key=${col.key}
638
- data-align=${col.align ?? 'start'}
639
- data-priority=${col.priority ?? nothing}
640
- data-sticky=${stickyDirection(col.sticky) ?? nothing}
641
- style=${col.cellStyle ? styleMap(col.cellStyle(row) ?? {}) : nothing}
642
- >
643
- ${col.cell(row)}
644
- </td>`)}
645
- </tr>`,
646
- rowExpanded
647
- ? html `<tr part="expanded-row" role="row">
648
- <td part="expanded-cell" role="gridcell" colspan=${this.columns.length + 1}>
649
- ${this.expandedContent?.(row)}
650
- </td>
651
- </tr>`
652
- : nothing,
653
- ];
654
- })}
655
- </tbody>
656
- ${this.columns.some((c) => c.footer)
657
- ? html `<tfoot part="foot">
658
- <tr part="footer-row">
659
- ${hasExpand ? html `<td part="footer-cell" aria-hidden="true"></td>` : nothing}
660
- ${this.columns.map((col) => html `<td
661
- part="footer-cell"
662
- data-col-key=${col.key}
663
- data-align=${col.align ?? 'start'}
664
- >${col.footer?.(this.rows) ?? ''}</td>`)}
665
- </tr>
666
- </tfoot>`
876
+ part="footer-cell"
877
+ data-col-key=${col.key}
878
+ data-align=${col.align ?? 'start'}
879
+ >${col.footer?.(matchingEntries.map((entry) => entry.row)) ?? ''}</td>`)}
880
+ </tr>
881
+ </tfoot>`
882
+ : nothing}
883
+ </table>`;
884
+ return html `
885
+ <div part="base" ?data-force-visible=${this.showAllColumns} aria-busy="false">
886
+ ${this.filterable
887
+ ? html `<label part="filter-label">
888
+ ${filterLabel}
889
+ <input
890
+ part="filter"
891
+ type="search"
892
+ .value=${this.filterText}
893
+ placeholder=${filterPlaceholder}
894
+ aria-label=${filterLabel}
895
+ @input=${this.onFilterInput}
896
+ />
897
+ </label>`
667
898
  : nothing}
668
- </table>
899
+ ${tableContent}
669
900
  ${this.columnsHidden
670
901
  ? html `<button
671
902
  part="reveal-columns-button"
@@ -687,6 +918,17 @@ export class LyraTable extends LyraElement {
687
918
  ${this.localize('loadMore', this.moreLabel || undefined)}
688
919
  </button>`
689
920
  : nothing}
921
+ ${hasPagination
922
+ ? html `<lyra-pagination
923
+ part="pagination"
924
+ .page=${this.page}
925
+ .pageSize=${this.normalizedPageSize}
926
+ .totalItems=${this.matchingTotalItems}
927
+ .strings=${this.strings}
928
+ hide-summary
929
+ @lyra-page-change=${this.onPaginationChange}
930
+ ></lyra-pagination>`
931
+ : nothing}
690
932
  </div>
691
933
  `;
692
934
  }
@@ -709,6 +951,51 @@ __decorate([
709
951
  __decorate([
710
952
  property({ attribute: false })
711
953
  ], LyraTable.prototype, "selectedKey", void 0);
954
+ __decorate([
955
+ property({ reflect: true, attribute: 'selection-mode' })
956
+ ], LyraTable.prototype, "selectionMode", void 0);
957
+ __decorate([
958
+ property({ attribute: false })
959
+ ], LyraTable.prototype, "selectedKeys", void 0);
960
+ __decorate([
961
+ property({ type: Boolean, reflect: true })
962
+ ], LyraTable.prototype, "filterable", void 0);
963
+ __decorate([
964
+ property({ attribute: 'filter-text' })
965
+ ], LyraTable.prototype, "filterText", void 0);
966
+ __decorate([
967
+ property({ attribute: false })
968
+ ], LyraTable.prototype, "filter", void 0);
969
+ __decorate([
970
+ property({ attribute: 'filter-label' })
971
+ ], LyraTable.prototype, "filterLabel", void 0);
972
+ __decorate([
973
+ property({ attribute: 'filter-placeholder' })
974
+ ], LyraTable.prototype, "filterPlaceholder", void 0);
975
+ __decorate([
976
+ property({ type: Boolean, reflect: true })
977
+ ], LyraTable.prototype, "loading", void 0);
978
+ __decorate([
979
+ property({ attribute: 'loading-label' })
980
+ ], LyraTable.prototype, "loadingLabel", void 0);
981
+ __decorate([
982
+ property({ attribute: false })
983
+ ], LyraTable.prototype, "groupBy", void 0);
984
+ __decorate([
985
+ property({ attribute: false })
986
+ ], LyraTable.prototype, "groupLabel", void 0);
987
+ __decorate([
988
+ property({ type: Number, attribute: 'page-size' })
989
+ ], LyraTable.prototype, "pageSize", void 0);
990
+ __decorate([
991
+ property({ type: Number, reflect: true })
992
+ ], LyraTable.prototype, "page", void 0);
993
+ __decorate([
994
+ property({ type: Number, attribute: 'total-items' })
995
+ ], LyraTable.prototype, "totalItems", void 0);
996
+ __decorate([
997
+ property({ reflect: true, attribute: 'pagination-mode' })
998
+ ], LyraTable.prototype, "paginationMode", void 0);
712
999
  __decorate([
713
1000
  property({ attribute: false })
714
1001
  ], LyraTable.prototype, "expandedContent", void 0);
@@ -754,4 +1041,7 @@ __decorate([
754
1041
  __decorate([
755
1042
  state()
756
1043
  ], LyraTable.prototype, "activeRowKey", void 0);
1044
+ __decorate([
1045
+ state()
1046
+ ], LyraTable.prototype, "editingCell", void 0);
757
1047
  //# sourceMappingURL=table.class.js.map