@aceshooting/lyra-ui 16.0.0 → 18.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 (358) hide show
  1. package/CHANGELOG.md +758 -0
  2. package/README.md +2 -2
  3. package/custom-elements.json +1 -1
  4. package/dist/cli/migration-contract.json +1 -1
  5. package/dist/components/agent-tools/browser-frame/browser-frame.class.d.ts +3 -3
  6. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +2 -2
  7. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -2
  8. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +3 -3
  9. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts +37 -13
  10. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  11. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  12. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +4 -0
  13. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  14. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +3 -3
  15. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
  16. package/dist/components/charts/chart/chart.class.d.ts +117 -17
  17. package/dist/components/charts/chart/chart.class.js +3 -3
  18. package/dist/components/charts/chart/histogram-bin.d.ts +5 -1
  19. package/dist/components/charts/chart/histogram-bin.js +1 -1
  20. package/dist/components/charts/chart/lite-chart.class.d.ts +9 -0
  21. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  22. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  23. package/dist/components/conversation/model-select/model-select.class.d.ts +13 -4
  24. package/dist/components/conversation/model-select/model-select.class.js +2 -1
  25. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  26. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +40 -2
  27. package/dist/components/conversation/streaming-text/streaming-text-base.class.js +2 -2
  28. package/dist/components/conversation/streaming-text/streaming-text-core.class.d.ts +27 -3
  29. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +11 -0
  30. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +31 -3
  31. package/dist/components/conversation/streaming-text/streaming-text.class.js +11 -0
  32. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.d.ts +30 -2
  33. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.js +4 -3
  34. package/dist/components/conversation/suggestion-chips/suggestion-chips.styles.js +1 -1
  35. package/dist/components/conversation/thread-list/thread-list.class.js +1 -1
  36. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  37. package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.js +1 -1
  38. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +4 -0
  39. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +16 -4
  40. package/dist/components/conversation/voice-picker/voice-picker.class.js +2 -1
  41. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  42. package/dist/components/data/context-meter/context-meter.class.d.ts +23 -4
  43. package/dist/components/data/context-meter/context-meter.class.js +10 -7
  44. package/dist/components/data/context-meter/context-meter.styles.js +1 -1
  45. package/dist/components/data/data-grid/data-grid.class.d.ts +5 -2
  46. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  47. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +32 -5
  48. package/dist/components/data/flow-canvas/flow-canvas.class.js +3 -1
  49. package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
  50. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  51. package/dist/components/data/flow-canvas/flow-types.d.ts +10 -1
  52. package/dist/components/data/gauge/gauge.class.d.ts +15 -2
  53. package/dist/components/data/gauge/gauge.class.js +20 -20
  54. package/dist/components/data/gauge/gauge.styles.js +1 -1
  55. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +14 -5
  56. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +2 -2
  57. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +28 -2
  58. package/dist/components/data/sequence-strip/sequence-strip.class.js +3 -2
  59. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  60. package/dist/components/data/table/table.class.d.ts +155 -30
  61. package/dist/components/data/table/table.class.js +6 -4
  62. package/dist/components/data/table/table.styles.js +1 -1
  63. package/dist/components/data/timeline/timeline-item.class.d.ts +9 -1
  64. package/dist/components/data/timeline/timeline-item.class.js +2 -2
  65. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  66. package/dist/components/data/word-cloud/word-cloud.styles.js +1 -1
  67. package/dist/components/forms/button/button.class.d.ts +30 -1
  68. package/dist/components/forms/button/button.class.js +2 -2
  69. package/dist/components/forms/checkbox/checkbox.class.d.ts +8 -6
  70. package/dist/components/forms/checkbox/checkbox.class.js +2 -2
  71. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -5
  72. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  73. package/dist/components/forms/color-picker/color-picker.class.d.ts +16 -2
  74. package/dist/components/forms/color-picker/color-picker.class.js +2 -2
  75. package/dist/components/forms/color-picker/color-picker.styles.js +1 -1
  76. package/dist/components/forms/combobox/combobox.class.d.ts +52 -7
  77. package/dist/components/forms/combobox/combobox.class.js +2 -2
  78. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  79. package/dist/components/forms/date-picker/date-input.class.d.ts +4 -0
  80. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  81. package/dist/components/forms/icon-button/icon-button.class.d.ts +20 -3
  82. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  83. package/dist/components/forms/icon-button/icon-button.styles.js +1 -1
  84. package/dist/components/forms/input/input.class.d.ts +5 -2
  85. package/dist/components/forms/input/input.class.js +1 -1
  86. package/dist/components/forms/input/time-input.class.d.ts +4 -0
  87. package/dist/components/forms/input/time-input.class.js +1 -1
  88. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +11 -5
  89. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  90. package/dist/components/forms/otp-input/otp-input.class.d.ts +7 -2
  91. package/dist/components/forms/otp-input/otp-input.class.js +2 -2
  92. package/dist/components/forms/radio/radio-button.class.d.ts +2 -1
  93. package/dist/components/forms/radio/radio-group.class.d.ts +9 -4
  94. package/dist/components/forms/radio/radio-group.class.js +1 -1
  95. package/dist/components/forms/radio/radio.class.d.ts +13 -7
  96. package/dist/components/forms/radio/radio.class.js +1 -1
  97. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +16 -6
  98. package/dist/components/forms/rubric-form/rubric-form.class.js +2 -2
  99. package/dist/components/forms/select/select.class.d.ts +50 -13
  100. package/dist/components/forms/select/select.class.js +2 -2
  101. package/dist/components/forms/slider/slider.class.d.ts +4 -2
  102. package/dist/components/forms/slider/slider.class.js +1 -1
  103. package/dist/components/forms/switch/switch.class.d.ts +8 -6
  104. package/dist/components/forms/switch/switch.class.js +1 -1
  105. package/dist/components/forms/textarea/textarea.class.d.ts +5 -3
  106. package/dist/components/forms/textarea/textarea.class.js +1 -1
  107. package/dist/components/forms/time-range/time-range.class.d.ts +12 -7
  108. package/dist/components/forms/time-range/time-range.class.js +1 -1
  109. package/dist/components/forms/time-range/time-range.styles.js +1 -1
  110. package/dist/components/forms/token-input/token-input.class.d.ts +6 -4
  111. package/dist/components/forms/token-input/token-input.class.js +1 -1
  112. package/dist/components/layout/app-rail/app-rail-item.class.d.ts +109 -4
  113. package/dist/components/layout/app-rail/app-rail-item.class.js +34 -29
  114. package/dist/components/layout/app-rail/app-rail-item.styles.js +1 -1
  115. package/dist/components/layout/app-rail/app-rail.class.d.ts +25 -3
  116. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  117. package/dist/components/layout/app-rail-group/app-rail-group.class.d.ts +2 -2
  118. package/dist/components/layout/app-rail-group/app-rail-group.class.js +2 -2
  119. package/dist/components/layout/carousel/carousel.class.d.ts +1 -1
  120. package/dist/components/layout/carousel/carousel.class.js +1 -1
  121. package/dist/components/layout/details/accordion.class.d.ts +2 -2
  122. package/dist/components/layout/details/accordion.class.js +2 -2
  123. package/dist/components/layout/filter-bar/filter-bar-register.d.ts +1 -0
  124. package/dist/components/layout/filter-bar/filter-bar-register.js +1 -0
  125. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +153 -16
  126. package/dist/components/layout/filter-bar/filter-bar.class.js +8 -5
  127. package/dist/components/layout/menu/menu-item.class.d.ts +3 -3
  128. package/dist/components/layout/menu/menu-item.class.js +3 -3
  129. package/dist/components/layout/menu/menu.class.d.ts +5 -1
  130. package/dist/components/layout/menu/menu.class.js +2 -2
  131. package/dist/components/layout/reorder-list/reorder-item.styles.js +1 -1
  132. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  133. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +107 -2
  134. package/dist/components/layout/virtual-list/virtual-list.class.js +12 -7
  135. package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +1 -1
  136. package/dist/components/media/avatar-group/avatar-group.class.d.ts +12 -1
  137. package/dist/components/media/avatar-group/avatar-group.class.js +2 -2
  138. package/dist/components/media/drop-zone/drop-zone.class.d.ts +32 -11
  139. package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
  140. package/dist/components/media/file-input/file-input.class.d.ts +40 -19
  141. package/dist/components/media/file-input/file-input.class.js +2 -2
  142. package/dist/components/media/map/map.class.d.ts +138 -12
  143. package/dist/components/media/map/map.class.js +25 -20
  144. package/dist/components/media/map/map.styles.js +1 -1
  145. package/dist/components/overlays/callout/callout.styles.js +1 -1
  146. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  147. package/dist/components/overlays/overlay/dropdown.class.d.ts +13 -3
  148. package/dist/components/overlays/overlay/dropdown.class.js +2 -2
  149. package/dist/components/overlays/overlay/popover.class.d.ts +12 -3
  150. package/dist/components/overlays/overlay/popover.class.js +2 -2
  151. package/dist/components/overlays/rating/rating.class.d.ts +9 -7
  152. package/dist/components/overlays/rating/rating.class.js +1 -1
  153. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +5 -1
  154. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  155. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +1 -1
  156. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +5 -1
  157. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  158. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +1 -1
  159. package/dist/components/retrieval/retrieval-value-format.js +1 -1
  160. package/dist/components/retrieval/source-list/source-list.styles.js +1 -1
  161. package/dist/components/utility/copy-button/copy-button.class.d.ts +23 -11
  162. package/dist/components/utility/copy-button/copy-button.class.js +2 -2
  163. package/dist/components/utility/copy-button/copy-button.styles.js +1 -1
  164. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  165. package/dist/components/utility/export-button/export-button.class.d.ts +4 -0
  166. package/dist/components/utility/export-button/export-button.class.js +1 -1
  167. package/dist/components/utility/json-viewer/json-viewer.styles.js +1 -1
  168. package/dist/components/utility/known-date/known-date.class.js +1 -1
  169. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +38 -3
  170. package/dist/components/utility/mention-popover/mention-popover.class.js +2 -1
  171. package/dist/components/utility/mention-popover/mention-popover.styles.js +1 -1
  172. package/dist/components/utility/poll-status/poll-status.styles.js +1 -1
  173. package/dist/components/utility/tour/tour.class.d.ts +4 -0
  174. package/dist/components/utility/tour/tour.class.js +1 -1
  175. package/dist/components/utility/tour/tour.styles.js +1 -1
  176. package/dist/components/viewers/document-preview/document-preview.class.js +2 -2
  177. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +2 -2
  178. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +2 -2
  179. package/dist/components/viewers/highlight-layer/highlight-layer.class.js +2 -2
  180. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +2 -2
  181. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +2 -2
  182. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +2 -2
  183. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +2 -2
  184. package/dist/custom-elements-jsx.d.ts +2 -2
  185. package/dist/events.d.ts +20 -13
  186. package/dist/internal/aggregate-file-limits.d.ts +33 -0
  187. package/dist/internal/aggregate-file-limits.js +1 -0
  188. package/dist/internal/catalog-picker.d.ts +15 -2
  189. package/dist/internal/catalog-picker.js +1 -1
  190. package/dist/internal/debounce-controller.d.ts +14 -0
  191. package/dist/internal/debounce-controller.js +1 -1
  192. package/dist/internal/default-strings.generated.d.ts +1 -1
  193. package/dist/internal/default-strings.generated.js +2 -2
  194. package/dist/internal/focus-navigation.d.ts +45 -0
  195. package/dist/internal/focus-navigation.js +1 -1
  196. package/dist/internal/form-associated.js +1 -1
  197. package/dist/internal/initial-slot-collection.d.ts +30 -0
  198. package/dist/internal/initial-slot-collection.js +1 -0
  199. package/dist/internal/intl-cache.js +1 -1
  200. package/dist/internal/invalid-event-alias.d.ts +46 -0
  201. package/dist/internal/invalid-event-alias.js +1 -1
  202. package/dist/internal/localization-runtime.d.ts +24 -0
  203. package/dist/internal/localization-runtime.js +1 -1
  204. package/dist/internal/localization-types.d.ts +1 -1
  205. package/dist/internal/localization.js +1 -1
  206. package/dist/internal/package-metadata.d.ts +1 -1
  207. package/dist/internal/package-metadata.js +1 -1
  208. package/dist/internal/positioning-strategy.d.ts +3 -1
  209. package/dist/internal/state-part.d.ts +49 -0
  210. package/dist/internal/state-part.js +1 -0
  211. package/dist/internal/variants.styles.js +1 -1
  212. package/dist/lyra.d.ts +1 -1
  213. package/dist/lyra.js +1 -1
  214. package/dist/svelte.d.ts +2 -2
  215. package/dist/testing/index.d.ts +1 -1
  216. package/dist/testing/index.js +1 -1
  217. package/dist/testing/lyra-tag-event-map.d.ts +2 -2
  218. package/dist/testing/lyra-tag-event-map.js +1 -1
  219. package/dist/testing/wait-for-mount.d.ts +46 -0
  220. package/dist/testing/wait-for-mount.js +1 -0
  221. package/dist/theme/theme-bootstrap.js +1 -1
  222. package/dist/theme/theme.d.ts +11 -2
  223. package/dist/theme/theme.js +1 -1
  224. package/dist/translations/ar/layout.js +1 -1
  225. package/dist/translations/ar/retrieval.js +1 -1
  226. package/dist/translations/ar/shared.js +1 -1
  227. package/dist/translations/de/layout.js +1 -1
  228. package/dist/translations/de/retrieval.js +1 -1
  229. package/dist/translations/de/shared.js +1 -1
  230. package/dist/translations/es/layout.js +1 -1
  231. package/dist/translations/es/retrieval.js +1 -1
  232. package/dist/translations/es/shared.js +1 -1
  233. package/dist/translations/fa/layout.js +1 -1
  234. package/dist/translations/fa/retrieval.js +1 -1
  235. package/dist/translations/fa/shared.js +1 -1
  236. package/dist/translations/fr/layout.js +1 -1
  237. package/dist/translations/fr/retrieval.js +1 -1
  238. package/dist/translations/fr/shared.js +1 -1
  239. package/dist/translations/he/layout.js +1 -1
  240. package/dist/translations/he/retrieval.js +1 -1
  241. package/dist/translations/he/shared.js +1 -1
  242. package/dist/translations/it/layout.js +1 -1
  243. package/dist/translations/it/retrieval.js +1 -1
  244. package/dist/translations/it/shared.js +1 -1
  245. package/dist/translations/ja/layout.js +1 -1
  246. package/dist/translations/ja/retrieval.js +1 -1
  247. package/dist/translations/ja/shared.js +1 -1
  248. package/dist/translations/pt-BR/layout.js +1 -1
  249. package/dist/translations/pt-BR/retrieval.js +1 -1
  250. package/dist/translations/pt-BR/shared.js +1 -1
  251. package/dist/translations/ro/agent-tools.d.ts +1 -0
  252. package/dist/translations/ro/agent-tools.js +1 -0
  253. package/dist/translations/ro/charts.d.ts +1 -0
  254. package/dist/translations/ro/charts.js +1 -0
  255. package/dist/translations/ro/conversation.d.ts +1 -0
  256. package/dist/translations/ro/conversation.js +1 -0
  257. package/dist/translations/ro/data.d.ts +1 -0
  258. package/dist/translations/ro/data.js +1 -0
  259. package/dist/translations/ro/forms.d.ts +1 -0
  260. package/dist/translations/ro/forms.js +1 -0
  261. package/dist/translations/ro/layout.d.ts +1 -0
  262. package/dist/translations/ro/layout.js +1 -0
  263. package/dist/translations/ro/media.d.ts +1 -0
  264. package/dist/translations/ro/media.js +1 -0
  265. package/dist/translations/ro/overlays.d.ts +1 -0
  266. package/dist/translations/ro/overlays.js +1 -0
  267. package/dist/translations/ro/retrieval.d.ts +1 -0
  268. package/dist/translations/ro/retrieval.js +1 -0
  269. package/dist/translations/ro/shared.d.ts +1 -0
  270. package/dist/translations/ro/shared.js +1 -0
  271. package/dist/translations/ro/utility.d.ts +1 -0
  272. package/dist/translations/ro/utility.js +1 -0
  273. package/dist/translations/ro/viewers.d.ts +1 -0
  274. package/dist/translations/ro/viewers.js +5 -0
  275. package/dist/translations/ro.d.ts +1 -0
  276. package/dist/translations/ro.js +1 -0
  277. package/dist/translations/ru/layout.js +1 -1
  278. package/dist/translations/ru/retrieval.js +1 -1
  279. package/dist/translations/ru/shared.js +1 -1
  280. package/dist/translations/zh-CN/layout.js +1 -1
  281. package/dist/translations/zh-CN/retrieval.js +1 -1
  282. package/dist/translations/zh-CN/shared.js +1 -1
  283. package/dist/utilities/format.d.ts +17 -0
  284. package/dist/utilities/format.js +1 -1
  285. package/dist/vue.d.ts +2 -2
  286. package/llms/components/lr-app-rail-group.md +87 -10
  287. package/llms/components/lr-app-rail-item.md +88 -11
  288. package/llms/components/lr-app-rail.md +88 -11
  289. package/llms/components/lr-attachment-trigger.md +21 -0
  290. package/llms/components/lr-bar-chart.md +3 -2
  291. package/llms/components/lr-bubble-chart.md +3 -2
  292. package/llms/components/lr-button.md +5 -4
  293. package/llms/components/lr-callout.md +10 -0
  294. package/llms/components/lr-card.md +2 -1
  295. package/llms/components/lr-chart.md +43 -12
  296. package/llms/components/lr-citation-badge.md +7 -1
  297. package/llms/components/lr-code-block.md +21 -0
  298. package/llms/components/lr-color-picker.md +12 -7
  299. package/llms/components/lr-combobox.md +20 -1
  300. package/llms/components/lr-confirm-bar.md +36 -7
  301. package/llms/components/lr-context-meter.md +17 -4
  302. package/llms/components/lr-date-input.md +7 -1
  303. package/llms/components/lr-date-picker.md +6 -0
  304. package/llms/components/lr-dialog.md +21 -0
  305. package/llms/components/lr-doughnut-chart.md +3 -2
  306. package/llms/components/lr-drawer.md +10 -0
  307. package/llms/components/lr-drop-zone.md +16 -7
  308. package/llms/components/lr-dropdown-item.md +7 -0
  309. package/llms/components/lr-entity-chip.md +7 -1
  310. package/llms/components/lr-export-button.md +7 -1
  311. package/llms/components/lr-file-input.md +21 -10
  312. package/llms/components/lr-filter-bar.md +177 -18
  313. package/llms/components/lr-flow-canvas.md +16 -9
  314. package/llms/components/lr-gauge.md +22 -2
  315. package/llms/components/lr-histogram.md +7 -2
  316. package/llms/components/lr-icon-button.md +17 -8
  317. package/llms/components/lr-input.md +3 -1
  318. package/llms/components/lr-line-chart.md +3 -2
  319. package/llms/components/lr-lite-chart.md +13 -0
  320. package/llms/components/lr-locale-picker.md +7 -1
  321. package/llms/components/lr-map.md +63 -6
  322. package/llms/components/lr-mention-popover.md +16 -3
  323. package/llms/components/lr-menu-item.md +7 -0
  324. package/llms/components/lr-menu.md +8 -1
  325. package/llms/components/lr-message-actions.md +10 -0
  326. package/llms/components/lr-model-select.md +8 -3
  327. package/llms/components/lr-native-time-input.md +8 -1
  328. package/llms/components/lr-number-input.md +8 -1
  329. package/llms/components/lr-option.md +19 -0
  330. package/llms/components/lr-otp-input.md +6 -0
  331. package/llms/components/lr-pie-chart.md +3 -2
  332. package/llms/components/lr-polar-area-chart.md +3 -2
  333. package/llms/components/lr-prompt-input.md +2 -2
  334. package/llms/components/lr-radar-chart.md +3 -2
  335. package/llms/components/lr-reorder-item.md +12 -0
  336. package/llms/components/lr-reorder-list.md +12 -0
  337. package/llms/components/lr-scatter-chart.md +3 -2
  338. package/llms/components/lr-select.md +19 -2
  339. package/llms/components/lr-sequence-strip.md +10 -4
  340. package/llms/components/lr-streaming-text-core.md +28 -11
  341. package/llms/components/lr-streaming-text.md +41 -6
  342. package/llms/components/lr-suggestion-chips.md +8 -4
  343. package/llms/components/lr-table.md +47 -10
  344. package/llms/components/lr-textarea.md +1 -1
  345. package/llms/components/lr-time-input.md +7 -1
  346. package/llms/components/lr-tool-call-chip.md +7 -1
  347. package/llms/components/lr-tour.md +7 -1
  348. package/llms/components/lr-usage-badge.md +7 -1
  349. package/llms/components/lr-virtual-list.md +53 -0
  350. package/llms/components/lr-voice-picker.md +7 -3
  351. package/llms/shared.md +175 -19
  352. package/llms/tokens.md +17 -1
  353. package/llms-full.txt +1214 -169
  354. package/package.json +43 -3
  355. package/registrations.json +1 -1
  356. package/vscode-css-data.json +1 -1
  357. package/vscode-html-data.json +1 -1
  358. package/web-types.json +1 -1
@@ -45,6 +45,14 @@ export type LyraVoicePickerSelectionDirection=LyraSelectionDirection;export inte
45
45
  * Catalog assignments become bounded, clone-owned, frozen snapshots. Create and reassign a new
46
46
  * catalog array after changing its rows; mutating an assigned source does not update the picker.
47
47
  *
48
+ * A catalog row may also set `disabled`, marking it non-actionable exactly like `lr-model-select`'s
49
+ * own catalog rows: `aria-disabled="true"` replaces its selected/active affordances, activating it
50
+ * (click or keyboard) commits nothing and changes no state, and arrow-key/Home/End
51
+ * active-descendant navigation steps past it instead of landing on it. It does not affect that
52
+ * row's own `[part="option-preview"]`, a separate affordance -- a disabled voice remains
53
+ * previewable so a listener can hear why it is excluded. Omitted or `false` renders the row exactly
54
+ * as before this field existed.
55
+ *
48
56
  * @customElement lr-voice-picker
49
57
  * @slot label - Custom visible label content.
50
58
  * @slot hint - Custom hint content.
@@ -56,7 +64,8 @@ export type LyraVoicePickerSelectionDirection=LyraSelectionDirection;export inte
56
64
  * @cssstate invalid - Matches while it does not — from the very first render, before the user has
57
65
  * touched anything.
58
66
  * @cssstate user-valid - `valid`, but only after the user has interacted: a blur of the
59
- * trigger/combobox, or a `reportValidity()` call (which is what a submit attempt runs).
67
+ * trigger/combobox, `reportValidity()`, or a submission attempt. Not after a silent
68
+ * `checkValidity()` alone.
60
69
  * @cssstate user-invalid - `invalid` after that same interaction. Style validation errors with this
61
70
  * rather than `invalid`: a pristine required picker is genuinely invalid, but colouring it red
62
71
  * before the user has done anything is hostile.
@@ -130,6 +139,8 @@ export type LyraVoicePickerSelectionDirection=LyraSelectionDirection;export inte
130
139
  * of a synthetic stale-value option row.
131
140
  * @cssprop [--lr-voice-picker-option-synthetic-font-style=italic] - Font style of a synthetic
132
141
  * stale-value option label.
142
+ * @cssprop [--lr-voice-picker-option-disabled-opacity=0.5] - Opacity of an option row whose catalog
143
+ * entry sets `disabled`.
133
144
  * @cssprop [--lr-voice-picker-preview-hover-bg=var(--lr-color-brand-quiet)] - Shared hover/press
134
145
  * fill for the standalone and row preview actions.
135
146
  * @cssprop [--lr-voice-picker-preview-hover-color=var(--lr-color-brand)] - Shared hover/press
@@ -226,9 +237,10 @@ private updateValidity;
226
237
  * can move -- {@linkcode updateValidity}, `reportValidity()`, and `updated()` -- because this
227
238
  * control drives `ElementInternals` directly rather than through the `FormAssociated` mixin,
228
239
  * which does this for the controls that do use it. `touched` is the interaction flag: it flips
229
- * on the trigger's/input's first blur, and on a `reportValidity()` call, which is what a submit
230
- * attempt runs. */
231
- private publishValidityStates;formResetCallback():void;formStateRestoreCallback(state:string|File|FormData|null,_mode?:'restore'|'autocomplete'):void;formDisabledCallback(disabled:boolean):void;checkValidity():boolean;reportValidity():boolean;
240
+ * on the trigger's/input's first blur, and on interactive validation -- `reportValidity()` and
241
+ * a submission attempt alike, via `installInteractionOnInvalid()`. A silent `checkValidity()`
242
+ * alone never counts. */
243
+ private publishValidityStates;formResetCallback():void;formStateRestoreCallback(state:string|File|FormData|null,_mode?:'restore'|'autocomplete'):void;formDisabledCallback(disabled:boolean):void;private markInteracted;checkValidity():boolean;reportValidity():boolean;
232
244
  /**
233
245
  * Sets or clears a consumer-supplied validation error — the standard channel for a server-side
234
246
  * rejection ("that voice is not enabled for your account") that no client-side constraint can
@@ -1,10 +1,11 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";installFormControlLabelSupport();import{sizes}from"../../../internal/sizes.styles.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{chevronIcon,playIcon,pauseIcon}from"../../../internal/icons.js";import{AnchoredValidityController,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInvalidEventAlias}from"../../../internal/invalid-event-alias.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{safeMediaSrc}from"../../../internal/safe-url.js";import{styles}from"./voice-picker.styles.js";import{trueDefaultBooleanConverter,trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{CatalogPickerController}from"../../../internal/catalog-picker.js";import{activeElementIn}from"../../../internal/active-element.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_noMatches,LYRA_DEFAULT_notInCatalog,LYRA_DEFAULT_voice,LYRA_DEFAULT_voicePickerNoVoices,LYRA_DEFAULT_voicePickerPreview,LYRA_DEFAULT_voicePickerRequired,LYRA_DEFAULT_voicePickerStopPreview}from"../../../internal/default-strings.generated.js";const MAX_VOICE_CATALOG_ENTRIES=1e4;function ownString(value,key){try{const descriptor=Object.getOwnPropertyDescriptor(value,key);return descriptor&&"value"in descriptor&&typeof descriptor.value=="string"?descriptor.value:void 0}catch{return}}function snapshotVoiceCatalog(value){if(!Array.isArray(value))return;const stringSnapshot=[],entrySnapshot=[];let objectCatalog=!1,length=0;try{length=Math.min(value.length,MAX_VOICE_CATALOG_ENTRIES)}catch{return Object.freeze(stringSnapshot)}for(let index=0;index<length;index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{continue}if(!descriptor||!("value"in descriptor))continue;const candidate=descriptor.value;if(typeof candidate=="string"){objectCatalog?entrySnapshot.push(Object.freeze({id:candidate,label:candidate})):stringSnapshot.push(candidate);continue}if(candidate===null||typeof candidate!="object")continue;const id=ownString(candidate,"id"),label=ownString(candidate,"label");if(id===void 0||label===void 0)continue;objectCatalog||(entrySnapshot.push(...stringSnapshot.map(entry=>Object.freeze({id:entry,label:entry}))),objectCatalog=!0);const language=ownString(candidate,"language"),description=ownString(candidate,"description"),previewUrl=ownString(candidate,"previewUrl");entrySnapshot.push(Object.freeze({id,label,...language===void 0?{}:{language},...description===void 0?{}:{description},...previewUrl===void 0?{}:{previewUrl}}))}return Object.freeze(objectCatalog?entrySnapshot:stringSnapshot)}class LyraVoicePicker extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,noMatches:LYRA_DEFAULT_noMatches,notInCatalog:LYRA_DEFAULT_notInCatalog,voice:LYRA_DEFAULT_voice,voicePickerNoVoices:LYRA_DEFAULT_voicePickerNoVoices,voicePickerPreview:LYRA_DEFAULT_voicePickerPreview,voicePickerRequired:LYRA_DEFAULT_voicePickerRequired,voicePickerStopPreview:LYRA_DEFAULT_voicePickerStopPreview}}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0},required:{type:Boolean,reflect:!0,noAccessor:!0},value:{attribute:!1,noAccessor:!0},defaultValue:{attribute:"value",reflect:!1,useDefault:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0}}}get catalog(){return this._catalog}set catalog(next){const old=this._catalog;next!==old&&(this.internalPreviewTargetId!==null&&this.stopInternalPreview(),this._catalog=snapshotVoiceCatalog(next),this.requestUpdate("catalog",old))}get open(){return this.catalogPicker.open}set open(next){this.catalogPicker.setOpen(next)}get activeIndex(){return this.catalogPicker.activeIndex}get query(){return this.catalogPicker.query}constructor(){super(),this.provider="",this.allowCustom=!1,this.readonly=!1,this.preview=!0,this.label="",this.hint="",this.errorText="",this.placeholder="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.autocomplete="off",this.inputMode="",this.enterKeyHint="",this.size="m",this.touched=!1,this.slotPresence=new SlotPresenceController(this),this.previewingId=null,this.listId=nextId("voice-picker-list"),this.controlId=nextId("voice-picker-control"),this.pendingPreviewId=null,this.previewGeneration=0,this._fieldsetDisabled=!1,this._name="",this._disabled=!1,this._required=!1,this.transferControlFocus=!1,this.catalogPicker=new CatalogPickerController(this,{catalog:()=>this.catalog,allowCustom:()=>this.allowCustom,isReadonly:()=>this.readonly,locale:()=>this.effectiveLocale,searchableFields:entry=>[entry.id,entry.label,entry.language??"",entry.description??""],emitChange:detail=>this.emit("lr-change",detail),beforeValueChange:value=>{const previewTarget=this.internalPreviewTargetId;previewTarget!==null&&previewTarget!==value&&this.stopInternalPreview()},beforeActiveIndexChange:next=>this.reconcilePreviewForActiveIndex(next),afterQueryChange:()=>this.reconcilePreviewVisibility(this.open,this.catalogPicker.filteredEntries),onValueChange:(value,oldValue)=>{this.internals.setFormValue(value),this.updateValidity(),this.requestUpdate("value",oldValue)},onDefaultValueChange:(_value,oldValue)=>this.requestUpdate("defaultValue",oldValue),onStateChange:(state2,oldValue)=>{state2==="open"?(this.catalogPicker.open||this.reconcilePreviewVisibility(!1,[]),this.requestUpdate("open",oldValue)):this.requestUpdate()},onControlBlur:()=>{this.effectiveDisabled||(this.touched=!0)}}),this.onAudioEnded=event=>{event.currentTarget===this.audioEl&&this.stopInternalPreview()},this.onAudioLoadFailure=eventOrAudio=>{const direct=eventOrAudio,isDomErrorEvent=direct.localName!=="audio",audioLike=direct.localName==="audio"?eventOrAudio:eventOrAudio.currentTarget,failedAudio=audioLike?.localName==="audio"&&typeof audioLike.pause=="function"&&typeof audioLike.removeEventListener=="function"?audioLike:void 0;if(!failedAudio||(failedAudio.removeEventListener("ended",this.onAudioEnded),failedAudio.removeEventListener("error",this.onAudioLoadFailure),failedAudio.pause(),failedAudio!==this.audioEl))return;const pendingVoiceId=this.pendingPreviewId;this.previewGeneration++,this.audioEl=void 0,this.pendingPreviewId=null,isDomErrorEvent&&this.previewingId===null&&pendingVoiceId!==null&&(this.previewingId=pendingVoiceId,this.emit("lr-preview-change",{voiceId:pendingVoiceId})),this.previewingId!==null&&(this.previewingId=null,this.emit("lr-preview-change",{voiceId:null}))},this.onPreviewButtonClick=()=>{const candidate=this.previewCandidateId;candidate&&(this.internalPreviewTargetId===candidate?this.stopInternalPreview():this.requestPreview(candidate))},this.onOptionPreviewClick=(e,entry)=>{e.stopPropagation(),this.internalPreviewTargetId===entry.id?this.stopInternalPreview():this.requestPreview(entry.id)},this.onTriggerClick=()=>{this.effectiveDisabled||(this.open?this.hide():this.show())},this.onControlBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onControlFocus=event=>{this.catalogPicker.handleControlFocus(event)},this.onTriggerKeyDown=e=>{this.catalogPicker.handleTriggerKeyDown(e)},this.onComboMouseDown=e=>{this.catalogPicker.handleComboMouseDown(e)},this.onInputFocus=event=>{this.catalogPicker.handleInputFocus(event)},this.onInput=e=>{this.catalogPicker.handleInput(e)},this.onInputKeyDown=e=>{this.catalogPicker.handleInputKeyDown(e)},this.onListboxMouseDown=e=>{this.catalogPicker.handleListboxMouseDown(e)},this.onListboxClick=e=>{this.catalogPicker.handleListboxClick(e)},this.internals=attachInternalsSafely(this),this.validityController=new AnchoredValidityController(this,this.internals,()=>this[VALIDITY_ANCHOR]()),installCustomErrorProperty(this,()=>this.validityController.customValidityMessage),installInvalidEventAlias(this,init=>this.emit("lr-invalid",null,init)),this.internals.setFormValue("")}get form(){return getFormOwner(this.internals)}set form(owner){setFormOwner(this,owner)}getForm(){return getFormOwner(this.internals)}get labels(){return this.internals.labels}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}get willValidate(){return this.internals.willValidate}[VALIDITY_ANCHOR](){return this.renderRoot?.querySelector('[part="trigger"], [part="combobox-input"]')??null}click(){this.catalogPicker.click()}focus(options){this.catalogPicker.focus(options)}blur(){this.catalogPicker.blur()}get input(){return this.catalogPicker.input}get selectionStart(){return this.input?.selectionStart??null}set selectionStart(value){this.input&&(this.input.selectionStart=value)}get selectionEnd(){return this.input?.selectionEnd??null}set selectionEnd(value){this.input&&(this.input.selectionEnd=value)}get selectionDirection(){return this.input?.selectionDirection??null}set selectionDirection(value){this.input&&(this.input.selectionDirection=value)}select(){this.catalogPicker.select()}setSelectionRange(start,end,direction){this.catalogPicker.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){this.catalogPicker.setRangeText(replacement,start,end,selectMode)}connectedCallback(){super.connectedCallback(),this.updateValidity(),this.catalogPicker.connected(this.hasUpdated)}willUpdate(changed){if(super.willUpdate(changed),this.hasUpdated){const switchingMode=this.renderRoot.querySelector('[part="trigger"]')!==null!==this.closedMode,focused=activeElementIn(this.shadowRoot??this.ownerDocument);this.catalogPicker.suppressControlEvents=switchingMode,this.transferControlFocus=switchingMode&&focused?.nodeType===1&&focused.matches('[part="trigger"], [part="combobox-input"]')}if(this.hasUpdated&&(changed.has("catalog")||changed.has("allowCustom")||changed.has("value"))){const activeValue=this.renderRoot.querySelector('[part="option"][data-active]')?.dataset.value,rows=this.closedMode?this.effectiveEntries:this.filteredEntries;this.catalogPicker.reconcileRows(activeValue,!1),this.reconcilePreviewVisibility(this.open,rows)}changed.has("preview")&&!this.preview&&this.stopInternalPreview()}disconnectedCallback(){super.disconnectedCallback(),this.stopInternalPreview(),this.catalogPicker.disconnected()}adoptedCallback(){super.adoptedCallback(),this.stopInternalPreview(),this.catalogPicker.adopted()}get value(){return this.catalogPicker.value}set value(next){this.catalogPicker.value=next}get defaultValue(){return this.catalogPicker.defaultValue}set defaultValue(next){this.catalogPicker.defaultValue=next}get name(){return this._name}set name(next){const old=this._name;this._name=next??"",this._name?this.setAttribute("name",this._name):this.removeAttribute("name"),this.requestUpdate("name",old)}get disabled(){return this._disabled}set disabled(next){const old=this._disabled;this._disabled=!!next,this.toggleAttribute("disabled",this._disabled),this._disabled&&(this.hide(),this.stopInternalPreview()),this.updateValidity(),this.requestUpdate("disabled",old)}get required(){return this._required}set required(next){const old=this._required;this._required=!!next,this.toggleAttribute("required",this._required),this.updateValidity(),this.requestUpdate("required",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}updateValidity(){this.barredFromValidation?this.validityController.setValidity({}):this.required&&!this.value?this.validityController.setValidity({valueMissing:!0},this.localize("voicePickerRequired")):this.validityController.setValidity({}),this.publishValidityStates()}publishValidityStates(){syncValidityStates(this.internals,{required:this.required,hasInteracted:this.touched,barred:this.barredFromValidation})}formResetCallback(){this.touched=!1,this.catalogPicker.resetValue()}formStateRestoreCallback(state2,_mode){this.catalogPicker.restoreState(state2)}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,disabled&&(this.hide(),this.stopInternalPreview()),this.updateValidity(),this.requestUpdate()}checkValidity(){return this.internals.checkValidity()}reportValidity(){return this.touched=!0,this.publishValidityStates(),this.internals.reportValidity()}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.publishValidityStates()}get closedMode(){return this.catalogPicker.closedMode}get effectiveEntries(){return this.catalogPicker.effectiveEntries}get filteredEntries(){return this.catalogPicker.filteredEntries}get malformedCatalogEntries(){const raw=this.catalog;if(!raw||raw.length===0)return[];const out=[];for(const item of raw){const record=typeof item=="string"?{id:item,label:item}:item;typeof record?.id=="string"&&record.id.trim()!==""||out.push({...record,id:"",synthetic:!1})}return out}labelFor(id){return this.catalogPicker.labelFor(id)}show(){this.catalogPicker.show()}hide(){this.catalogPicker.hide()}updated(changed){super.updated(changed);const reposition=changed.has("open")||this.open&&(changed.has("catalog")||changed.has("allowCustom"));this.catalogPicker.updated(reposition),(changed.has("required")||changed.has("readonly")||changed.has("touched")||changed.has("value"))&&(changed.has("readonly")&&this.updateValidity(),this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid)),this.publishValidityStates(),this.transferControlFocus&&(this.transferControlFocus=!1,this.renderRoot.querySelector('[part="trigger"], [part="combobox-input"]')?.focus()),this.catalogPicker.suppressControlEvents=!1}get internalPreviewTargetId(){return this.pendingPreviewId??this.previewingId}reconcilePreviewVisibility(open,rows){const target=this.internalPreviewTargetId;if(target===null)return;const standaloneCandidate=open&&this.activeIndex>=0?rows[this.activeIndex]?.id??this.value:this.value,hasVisibleRow=open&&rows.some(entry=>entry.id===target&&!!entry.previewUrl);target!==standaloneCandidate&&!hasVisibleRow&&this.stopInternalPreview()}reconcilePreviewForActiveIndex(next){const target=this.internalPreviewTargetId;if(target!==null){const rows=this.closedMode?this.effectiveEntries:this.filteredEntries,nextCandidate=this.open&&next>=0?rows[next]?.id??this.value:this.value;target!==nextCandidate&&this.stopInternalPreview()}}get previewCandidateId(){return this.open&&this.activeIndex>=0?(this.closedMode?this.effectiveEntries:this.filteredEntries)[this.activeIndex]?.id??this.value:this.value}requestPreview(voiceId){if(!voiceId)return;const currentTarget=this.internalPreviewTargetId;currentTarget!==null&&currentTarget!==voiceId&&this.stopInternalPreview();const previewUrl=this.effectiveEntries.find(e=>e.id===voiceId)?.previewUrl;!this.emit("lr-preview-request",{voiceId,previewUrl},{cancelable:!0}).defaultPrevented&&previewUrl&&this.playInternal(voiceId,previewUrl)}playInternal(voiceId,url){const safe=safeMediaSrc(url);if(!safe)return;this.stopInternalPreview();const audio=this.ownerDocument.createElement("audio");audio.src=safe,audio.addEventListener("ended",this.onAudioEnded),audio.addEventListener("error",this.onAudioLoadFailure);const generation=++this.previewGeneration;this.audioEl=audio,this.pendingPreviewId=voiceId;let playResult;try{playResult=audio.play()}catch{this.onAudioLoadFailure(audio);return}Promise.resolve(playResult).then(()=>{generation!==this.previewGeneration||audio!==this.audioEl||this.pendingPreviewId!==voiceId||(this.pendingPreviewId=null,this.previewingId=voiceId,this.emit("lr-preview-change",{voiceId}))},()=>this.onAudioLoadFailure(audio))}stopInternalPreview(){const hadTarget=this.internalPreviewTargetId!==null||this.audioEl!==void 0;this.audioEl&&(this.audioEl.removeEventListener("ended",this.onAudioEnded),this.audioEl.removeEventListener("error",this.onAudioLoadFailure),this.audioEl.pause(),this.audioEl=void 0),hadTarget&&this.previewGeneration++,this.pendingPreviewId=null,this.previewingId!==null&&(this.previewingId=null,this.emit("lr-preview-change",{voiceId:null}))}get previewButtonLabel(){const candidate=this.previewCandidateId,playing=this.previewingId!==null&&this.previewingId===candidate,name=this.labelFor(candidate)||candidate;return playing?this.localize("voicePickerStopPreview"):this.localize("voicePickerPreview",void 0,{name})}renderRows(rows,activeId){return rows.map((entry,i)=>{const id=`${this.listId}-opt-${i}`,selected=entry.id!==""&&entry.id===this.value,meta=[entry.language,entry.description].filter(Boolean).join(" · ");return html`<div
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";installFormControlLabelSupport();import{sizes}from"../../../internal/sizes.styles.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{chevronIcon,playIcon,pauseIcon}from"../../../internal/icons.js";import{AnchoredValidityController,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInteractionOnInvalid,installInvalidEventAlias,withStaticValidityCheck}from"../../../internal/invalid-event-alias.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{safeMediaSrc}from"../../../internal/safe-url.js";import{styles}from"./voice-picker.styles.js";import{trueDefaultBooleanConverter,trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{CatalogPickerController}from"../../../internal/catalog-picker.js";import{activeElementIn}from"../../../internal/active-element.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_noMatches,LYRA_DEFAULT_notInCatalog,LYRA_DEFAULT_voice,LYRA_DEFAULT_voicePickerNoVoices,LYRA_DEFAULT_voicePickerPreview,LYRA_DEFAULT_voicePickerRequired,LYRA_DEFAULT_voicePickerStopPreview}from"../../../internal/default-strings.generated.js";const MAX_VOICE_CATALOG_ENTRIES=1e4;function ownString(value,key){try{const descriptor=Object.getOwnPropertyDescriptor(value,key);return descriptor&&"value"in descriptor&&typeof descriptor.value=="string"?descriptor.value:void 0}catch{return}}function ownBoolean(value,key){try{const descriptor=Object.getOwnPropertyDescriptor(value,key);return descriptor&&"value"in descriptor&&typeof descriptor.value=="boolean"?descriptor.value:void 0}catch{return}}function snapshotVoiceCatalog(value){if(!Array.isArray(value))return;const stringSnapshot=[],entrySnapshot=[];let objectCatalog=!1,length=0;try{length=Math.min(value.length,MAX_VOICE_CATALOG_ENTRIES)}catch{return Object.freeze(stringSnapshot)}for(let index=0;index<length;index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{continue}if(!descriptor||!("value"in descriptor))continue;const candidate=descriptor.value;if(typeof candidate=="string"){objectCatalog?entrySnapshot.push(Object.freeze({id:candidate,label:candidate})):stringSnapshot.push(candidate);continue}if(candidate===null||typeof candidate!="object")continue;const id=ownString(candidate,"id"),label=ownString(candidate,"label");if(id===void 0||label===void 0)continue;objectCatalog||(entrySnapshot.push(...stringSnapshot.map(entry=>Object.freeze({id:entry,label:entry}))),objectCatalog=!0);const language=ownString(candidate,"language"),description=ownString(candidate,"description"),previewUrl=ownString(candidate,"previewUrl"),disabled=ownBoolean(candidate,"disabled");entrySnapshot.push(Object.freeze({id,label,...language===void 0?{}:{language},...description===void 0?{}:{description},...previewUrl===void 0?{}:{previewUrl},...disabled===void 0?{}:{disabled}}))}return Object.freeze(objectCatalog?entrySnapshot:stringSnapshot)}class LyraVoicePicker extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,noMatches:LYRA_DEFAULT_noMatches,notInCatalog:LYRA_DEFAULT_notInCatalog,voice:LYRA_DEFAULT_voice,voicePickerNoVoices:LYRA_DEFAULT_voicePickerNoVoices,voicePickerPreview:LYRA_DEFAULT_voicePickerPreview,voicePickerRequired:LYRA_DEFAULT_voicePickerRequired,voicePickerStopPreview:LYRA_DEFAULT_voicePickerStopPreview}}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0},required:{type:Boolean,reflect:!0,noAccessor:!0},value:{attribute:!1,noAccessor:!0},defaultValue:{attribute:"value",reflect:!1,useDefault:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0}}}get catalog(){return this._catalog}set catalog(next){const old=this._catalog;next!==old&&(this.internalPreviewTargetId!==null&&this.stopInternalPreview(),this._catalog=snapshotVoiceCatalog(next),this.requestUpdate("catalog",old))}get open(){return this.catalogPicker.open}set open(next){this.catalogPicker.setOpen(next)}get activeIndex(){return this.catalogPicker.activeIndex}get query(){return this.catalogPicker.query}constructor(){super(),this.provider="",this.allowCustom=!1,this.readonly=!1,this.preview=!0,this.label="",this.hint="",this.errorText="",this.placeholder="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.autocomplete="off",this.inputMode="",this.enterKeyHint="",this.size="m",this.touched=!1,this.slotPresence=new SlotPresenceController(this),this.previewingId=null,this.listId=nextId("voice-picker-list"),this.controlId=nextId("voice-picker-control"),this.pendingPreviewId=null,this.previewGeneration=0,this._fieldsetDisabled=!1,this._name="",this._disabled=!1,this._required=!1,this.transferControlFocus=!1,this.catalogPicker=new CatalogPickerController(this,{catalog:()=>this.catalog,allowCustom:()=>this.allowCustom,isReadonly:()=>this.readonly,locale:()=>this.effectiveLocale,searchableFields:entry=>[entry.id,entry.label,entry.language??"",entry.description??""],emitChange:detail=>this.emit("lr-change",detail),beforeValueChange:value=>{const previewTarget=this.internalPreviewTargetId;previewTarget!==null&&previewTarget!==value&&this.stopInternalPreview()},beforeActiveIndexChange:next=>this.reconcilePreviewForActiveIndex(next),afterQueryChange:()=>this.reconcilePreviewVisibility(this.open,this.catalogPicker.filteredEntries),onValueChange:(value,oldValue)=>{this.internals.setFormValue(value),this.updateValidity(),this.requestUpdate("value",oldValue)},onDefaultValueChange:(_value,oldValue)=>this.requestUpdate("defaultValue",oldValue),onStateChange:(state2,oldValue)=>{state2==="open"?(this.catalogPicker.open||this.reconcilePreviewVisibility(!1,[]),this.requestUpdate("open",oldValue)):this.requestUpdate()},onControlBlur:()=>{this.effectiveDisabled||(this.touched=!0)}}),this.markInteracted=()=>{this.touched||(this.touched=!0,this.publishValidityStates())},this.onAudioEnded=event=>{event.currentTarget===this.audioEl&&this.stopInternalPreview()},this.onAudioLoadFailure=eventOrAudio=>{const direct=eventOrAudio,isDomErrorEvent=direct.localName!=="audio",audioLike=direct.localName==="audio"?eventOrAudio:eventOrAudio.currentTarget,failedAudio=audioLike?.localName==="audio"&&typeof audioLike.pause=="function"&&typeof audioLike.removeEventListener=="function"?audioLike:void 0;if(!failedAudio||(failedAudio.removeEventListener("ended",this.onAudioEnded),failedAudio.removeEventListener("error",this.onAudioLoadFailure),failedAudio.pause(),failedAudio!==this.audioEl))return;const pendingVoiceId=this.pendingPreviewId;this.previewGeneration++,this.audioEl=void 0,this.pendingPreviewId=null,isDomErrorEvent&&this.previewingId===null&&pendingVoiceId!==null&&(this.previewingId=pendingVoiceId,this.emit("lr-preview-change",{voiceId:pendingVoiceId})),this.previewingId!==null&&(this.previewingId=null,this.emit("lr-preview-change",{voiceId:null}))},this.onPreviewButtonClick=()=>{const candidate=this.previewCandidateId;candidate&&(this.internalPreviewTargetId===candidate?this.stopInternalPreview():this.requestPreview(candidate))},this.onOptionPreviewClick=(e,entry)=>{e.stopPropagation(),this.internalPreviewTargetId===entry.id?this.stopInternalPreview():this.requestPreview(entry.id)},this.onTriggerClick=()=>{this.effectiveDisabled||(this.open?this.hide():this.show())},this.onControlBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onControlFocus=event=>{this.catalogPicker.handleControlFocus(event)},this.onTriggerKeyDown=e=>{this.catalogPicker.handleTriggerKeyDown(e)},this.onComboMouseDown=e=>{this.catalogPicker.handleComboMouseDown(e)},this.onInputFocus=event=>{this.catalogPicker.handleInputFocus(event)},this.onInput=e=>{this.catalogPicker.handleInput(e)},this.onInputKeyDown=e=>{this.catalogPicker.handleInputKeyDown(e)},this.onListboxMouseDown=e=>{this.catalogPicker.handleListboxMouseDown(e)},this.onListboxClick=e=>{this.catalogPicker.handleListboxClick(e)},this.internals=attachInternalsSafely(this),this.validityController=new AnchoredValidityController(this,this.internals,()=>this[VALIDITY_ANCHOR]()),installCustomErrorProperty(this,()=>this.validityController.customValidityMessage),installInvalidEventAlias(this,init=>this.emit("lr-invalid",null,init)),installInteractionOnInvalid(this,this.markInteracted),this.internals.setFormValue("")}get form(){return getFormOwner(this.internals)}set form(owner){setFormOwner(this,owner)}getForm(){return getFormOwner(this.internals)}get labels(){return this.internals.labels}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}get willValidate(){return this.internals.willValidate}[VALIDITY_ANCHOR](){return this.renderRoot?.querySelector('[part="trigger"], [part="combobox-input"]')??null}click(){this.catalogPicker.click()}focus(options){this.catalogPicker.focus(options)}blur(){this.catalogPicker.blur()}get input(){return this.catalogPicker.input}get selectionStart(){return this.input?.selectionStart??null}set selectionStart(value){this.input&&(this.input.selectionStart=value)}get selectionEnd(){return this.input?.selectionEnd??null}set selectionEnd(value){this.input&&(this.input.selectionEnd=value)}get selectionDirection(){return this.input?.selectionDirection??null}set selectionDirection(value){this.input&&(this.input.selectionDirection=value)}select(){this.catalogPicker.select()}setSelectionRange(start,end,direction){this.catalogPicker.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){this.catalogPicker.setRangeText(replacement,start,end,selectMode)}connectedCallback(){super.connectedCallback(),this.updateValidity(),this.catalogPicker.connected(this.hasUpdated)}willUpdate(changed){if(super.willUpdate(changed),this.hasUpdated){const switchingMode=this.renderRoot.querySelector('[part="trigger"]')!==null!==this.closedMode,focused=activeElementIn(this.shadowRoot??this.ownerDocument);this.catalogPicker.suppressControlEvents=switchingMode,this.transferControlFocus=switchingMode&&focused?.nodeType===1&&focused.matches('[part="trigger"], [part="combobox-input"]')}if(this.hasUpdated&&(changed.has("catalog")||changed.has("allowCustom")||changed.has("value"))){const activeValue=this.renderRoot.querySelector('[part="option"][data-active]')?.dataset.value,rows=this.closedMode?this.effectiveEntries:this.filteredEntries;this.catalogPicker.reconcileRows(activeValue,!1),this.reconcilePreviewVisibility(this.open,rows)}changed.has("preview")&&!this.preview&&this.stopInternalPreview()}disconnectedCallback(){super.disconnectedCallback(),this.stopInternalPreview(),this.catalogPicker.disconnected()}adoptedCallback(){super.adoptedCallback(),this.stopInternalPreview(),this.catalogPicker.adopted()}get value(){return this.catalogPicker.value}set value(next){this.catalogPicker.value=next}get defaultValue(){return this.catalogPicker.defaultValue}set defaultValue(next){this.catalogPicker.defaultValue=next}get name(){return this._name}set name(next){const old=this._name;this._name=next??"",this._name?this.setAttribute("name",this._name):this.removeAttribute("name"),this.requestUpdate("name",old)}get disabled(){return this._disabled}set disabled(next){const old=this._disabled;this._disabled=!!next,this.toggleAttribute("disabled",this._disabled),this._disabled&&(this.hide(),this.stopInternalPreview()),this.updateValidity(),this.requestUpdate("disabled",old)}get required(){return this._required}set required(next){const old=this._required;this._required=!!next,this.toggleAttribute("required",this._required),this.updateValidity(),this.requestUpdate("required",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}updateValidity(){this.barredFromValidation?this.validityController.setValidity({}):this.required&&!this.value?this.validityController.setValidity({valueMissing:!0},this.localize("voicePickerRequired")):this.validityController.setValidity({}),this.publishValidityStates()}publishValidityStates(){syncValidityStates(this.internals,{required:this.required,hasInteracted:this.touched,barred:this.barredFromValidation})}formResetCallback(){this.touched=!1,this.catalogPicker.resetValue()}formStateRestoreCallback(state2,_mode){this.catalogPicker.restoreState(state2)}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,disabled&&(this.hide(),this.stopInternalPreview()),this.updateValidity(),this.requestUpdate()}checkValidity(){return withStaticValidityCheck(this,()=>this.internals.checkValidity())}reportValidity(){return this.touched=!0,this.publishValidityStates(),this.internals.reportValidity()}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.publishValidityStates()}get closedMode(){return this.catalogPicker.closedMode}get effectiveEntries(){return this.catalogPicker.effectiveEntries}get filteredEntries(){return this.catalogPicker.filteredEntries}get malformedCatalogEntries(){const raw=this.catalog;if(!raw||raw.length===0)return[];const out=[];for(const item of raw){const record=typeof item=="string"?{id:item,label:item}:item;typeof record?.id=="string"&&record.id.trim()!==""||out.push({...record,id:"",synthetic:!1})}return out}labelFor(id){return this.catalogPicker.labelFor(id)}show(){this.catalogPicker.show()}hide(){this.catalogPicker.hide()}updated(changed){super.updated(changed);const reposition=changed.has("open")||this.open&&(changed.has("catalog")||changed.has("allowCustom"));this.catalogPicker.updated(reposition),(changed.has("required")||changed.has("readonly")||changed.has("touched")||changed.has("value"))&&(changed.has("readonly")&&this.updateValidity(),this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid)),this.publishValidityStates(),this.transferControlFocus&&(this.transferControlFocus=!1,this.renderRoot.querySelector('[part="trigger"], [part="combobox-input"]')?.focus()),this.catalogPicker.suppressControlEvents=!1}get internalPreviewTargetId(){return this.pendingPreviewId??this.previewingId}reconcilePreviewVisibility(open,rows){const target=this.internalPreviewTargetId;if(target===null)return;const standaloneCandidate=open&&this.activeIndex>=0?rows[this.activeIndex]?.id??this.value:this.value,hasVisibleRow=open&&rows.some(entry=>entry.id===target&&!!entry.previewUrl);target!==standaloneCandidate&&!hasVisibleRow&&this.stopInternalPreview()}reconcilePreviewForActiveIndex(next){const target=this.internalPreviewTargetId;if(target!==null){const rows=this.closedMode?this.effectiveEntries:this.filteredEntries,nextCandidate=this.open&&next>=0?rows[next]?.id??this.value:this.value;target!==nextCandidate&&this.stopInternalPreview()}}get previewCandidateId(){return this.open&&this.activeIndex>=0?(this.closedMode?this.effectiveEntries:this.filteredEntries)[this.activeIndex]?.id??this.value:this.value}requestPreview(voiceId){if(!voiceId)return;const currentTarget=this.internalPreviewTargetId;currentTarget!==null&&currentTarget!==voiceId&&this.stopInternalPreview();const previewUrl=this.effectiveEntries.find(e=>e.id===voiceId)?.previewUrl;!this.emit("lr-preview-request",{voiceId,previewUrl},{cancelable:!0}).defaultPrevented&&previewUrl&&this.playInternal(voiceId,previewUrl)}playInternal(voiceId,url){const safe=safeMediaSrc(url);if(!safe)return;this.stopInternalPreview();const audio=this.ownerDocument.createElement("audio");audio.src=safe,audio.addEventListener("ended",this.onAudioEnded),audio.addEventListener("error",this.onAudioLoadFailure);const generation=++this.previewGeneration;this.audioEl=audio,this.pendingPreviewId=voiceId;let playResult;try{playResult=audio.play()}catch{this.onAudioLoadFailure(audio);return}Promise.resolve(playResult).then(()=>{generation!==this.previewGeneration||audio!==this.audioEl||this.pendingPreviewId!==voiceId||(this.pendingPreviewId=null,this.previewingId=voiceId,this.emit("lr-preview-change",{voiceId}))},()=>this.onAudioLoadFailure(audio))}stopInternalPreview(){const hadTarget=this.internalPreviewTargetId!==null||this.audioEl!==void 0;this.audioEl&&(this.audioEl.removeEventListener("ended",this.onAudioEnded),this.audioEl.removeEventListener("error",this.onAudioLoadFailure),this.audioEl.pause(),this.audioEl=void 0),hadTarget&&this.previewGeneration++,this.pendingPreviewId=null,this.previewingId!==null&&(this.previewingId=null,this.emit("lr-preview-change",{voiceId:null}))}get previewButtonLabel(){const candidate=this.previewCandidateId,playing=this.previewingId!==null&&this.previewingId===candidate,name=this.labelFor(candidate)||candidate;return playing?this.localize("voicePickerStopPreview"):this.localize("voicePickerPreview",void 0,{name})}renderRows(rows,activeId){return rows.map((entry,i)=>{const id=`${this.listId}-opt-${i}`,selected=entry.id!==""&&entry.id===this.value,meta=[entry.language,entry.description].filter(Boolean).join(" · ");return html`<div
2
2
  part="option"
3
3
  id=${id}
4
4
  role="option"
5
5
  data-value=${entry.id}
6
6
  ?data-synthetic=${entry.synthetic}
7
7
  aria-selected=${selected?"true":"false"}
8
+ aria-disabled=${entry.disabled===!0?"true":nothing}
8
9
  ?data-active=${id===activeId}
9
10
  >
10
11
  <span part="option-label">
@@ -1 +1 @@
1
- import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";import{overlaySurfaceFill}from"../../../internal/overlay-surface.styles.js";const styles=css` :host { position: relative; display: inline-block; inline-size: 100%; min-inline-size: 0; max-inline-size: var(--lr-voice-picker-max-inline-size, var(--lr-size-24rem)); --_lr-voice-picker-gap-default: var(--lr-space-xs); --_lr-voice-picker-radius-default: var(--lr-form-control-radius); --_lr-voice-picker-trigger-min-height-default: var(--lr-form-control-height); } :host(:disabled) { cursor: not-allowed; } [part='form-control-label'] { display: block; margin-block-end: var(--lr-space-xs); overflow-wrap: anywhere; font-size: var(--lr-font-size-md-sm); font-weight: var(--lr-font-weight-semibold); } [part='form-control-label'][hidden] { display: none; } ${formControlRequiredMarker} .control-row { display: flex; align-items: stretch; gap: var(--lr-voice-picker-gap, var(--_lr-voice-picker-gap-default)); } [part='trigger'], [part='combobox'] { display: flex; align-items: center; gap: var(--lr-voice-picker-gap, var(--_lr-voice-picker-gap-default)); flex: 1 1 auto; min-inline-size: 0; min-block-size: var( --lr-voice-picker-trigger-height, var( --lr-voice-picker-trigger-min-height, var(--_lr-voice-picker-trigger-min-height-default) ) ); block-size: var(--lr-voice-picker-trigger-height, auto); box-sizing: border-box; padding: var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline); border: var(--lr-border-width-thin) solid var(--lr-voice-picker-trigger-border-color, var(--lr-color-border)); border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); background: var(--lr-voice-picker-trigger-fill, var(--lr-color-surface)); color: inherit; font: inherit; font-size: var(--lr-form-control-font-size); } [part='trigger'] { cursor: pointer; text-align: start; } [part='combobox'] { cursor: text; } [part='trigger']:hover:not(:disabled) { border-color: var(--lr-color-brand); } [part='trigger']:active:not(:disabled) { border-color: var(--lr-color-brand); background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='trigger']:focus-visible, [part='combobox']:focus-within { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } :host([open]) [part='trigger'] { border-color: var(--lr-voice-picker-open-border-color, var(--lr-color-brand)); } :host(:disabled) [part='trigger'], :host(:disabled) [part='combobox'] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='provider-badge'] { flex: 0 1 auto; min-inline-size: 0; max-inline-size: 40%; overflow: hidden; text-overflow: ellipsis; padding-inline-end: var(--lr-space-xs); margin-inline-end: var(--lr-space-xs); border-inline-end: var(--lr-border-width-thin) solid var(--lr-color-border); font-size: var(--lr-size-0-6875rem); font-weight: var(--lr-font-weight-bold); text-transform: uppercase; letter-spacing: var(--lr-size-0-04em); color: var(--lr-color-text-quiet); white-space: nowrap; } .trigger-label { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .trigger-label[data-placeholder] { color: var(--lr-color-text-quiet); } [part='combobox-input'] { flex: 1 1 auto; min-inline-size: 0; border: none; outline: none; background: transparent; color: inherit; font: inherit; } [part='combobox-input']::placeholder { color: var(--lr-color-text-quiet); } [part='expand-icon'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--lr-color-text-quiet); min-inline-size: min(var(--lr-icon-button-size), var(--lr-form-control-height)); min-block-size: min(var(--lr-icon-button-size), var(--lr-form-control-height)); line-height: var(--lr-line-height-none); } [part='expand-icon'] svg { transform: rotate(90deg); } [part='preview-button'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; inline-size: max(var(--lr-icon-button-size), var(--lr-form-control-height)); block-size: var( --lr-voice-picker-trigger-height, var( --lr-voice-picker-trigger-min-height, max(var(--lr-icon-button-size), var(--lr-form-control-height)) ) ); min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; cursor: pointer; } [part='preview-button']:hover:not(:disabled) { background: var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='preview-button']:active:not(:disabled) { background: color-mix( in oklab, var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='preview-button']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } [part='preview-button']:disabled { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='preview-button'][aria-pressed='true'] { border-color: var(--lr-voice-picker-preview-active-border, var(--lr-color-brand)); color: var(--lr-voice-picker-preview-active-color, var(--lr-color-brand)); } [part='listbox'] { position: fixed; z-index: var(--lr-layer-dropdown); box-sizing: border-box; max-block-size: min(var(--lr-size-18rem), var(--lr-positioner-available-block-size, var(--lr-size-18rem))); overflow-y: auto; overflow-x: hidden; inline-size: max-content; min-inline-size: min(var(--lr-size-12rem), var(--lr-positioner-available-inline-size, var(--lr-size-12rem))); max-inline-size: min(var(--lr-popover-viewport-clamp), var(--lr-size-28rem), var(--lr-positioner-available-inline-size, 100vw)); padding: var(--lr-space-xs); ${overlaySurfaceFill} border-radius: var( --lr-voice-picker-radius, var(--lr-overlay-radius, var(--_lr-voice-picker-radius-default)) ); box-shadow: var(--lr-overlay-shadow-anchored, var(--lr-shadow-m)); visibility: hidden; opacity: 0; transform: translateY(var(--lr-size-neg-0-25rem)); transition: opacity var(--lr-transition-fast), transform var(--lr-transition-fast), visibility var(--lr-transition-fast); } :host([open]) [part='listbox'] { visibility: visible; opacity: 1; transform: translateY(0); } @media (prefers-reduced-motion: reduce) { [part='listbox'] { transition: none !important; } } [part='option'] { display: flex; align-items: center; gap: var(--lr-voice-picker-gap, var(--_lr-voice-picker-gap-default)); inline-size: 100%; box-sizing: border-box; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid transparent; border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; } [part='option'][aria-selected='true'] { border-color: var(--lr-voice-picker-option-selected-border, var(--lr-color-brand)); color: var(--lr-voice-picker-option-selected-color, var(--lr-color-brand)); background: var(--lr-voice-picker-option-selected-bg, transparent); font-weight: var( --lr-voice-picker-option-selected-font-weight, var(--lr-font-weight-semibold) ); } [part='option']:hover, [part='option'][data-active] { background: var(--lr-voice-picker-option-active-bg, var(--lr-color-brand-quiet)); } [part='option']:active { background: color-mix( in oklab, var(--lr-voice-picker-option-active-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part='option-label'] { flex: 1 1 auto; min-inline-size: 0; display: flex; flex-direction: column; overflow: hidden; } [part='option-label'] > :first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part='option-meta'] { font-size: var(--lr-size-0-6875rem); color: var(--lr-color-text-quiet); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part='option']:hover [part='option-meta'], [part='option'][data-active] [part='option-meta'] { color: var(--lr-color-text); } [part='option'][data-synthetic] { border-style: var(--lr-voice-picker-option-synthetic-border-style, dashed); border-color: var(--lr-voice-picker-option-synthetic-border-color, var(--lr-color-border)); } [part='option'][data-synthetic] [part='option-label'] { font-style: var(--lr-voice-picker-option-synthetic-font-style, italic); } [part='option-badge'] { flex: 0 0 auto; font-size: var(--lr-size-0-6875rem); font-style: normal; font-weight: var(--lr-font-weight-normal); color: var(--lr-color-text-quiet); white-space: nowrap; } [part='option-preview'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); color: var(--lr-color-text-quiet); cursor: pointer; } [part='option-preview']:hover { background: var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='option-preview']:active { background: color-mix( in oklab, var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='empty'] { padding: var(--lr-space-m); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-md-sm); } [part='hint'] { margin-block-start: var(--lr-space-xs); overflow-wrap: anywhere; font-size: var(--lr-font-size-sm); color: var(--lr-color-text-quiet); } [part='hint'][hidden] { display: none; } [part='error'] { margin-block-start: var(--lr-space-xs); overflow-wrap: anywhere; font-size: var(--lr-font-size-sm); color: var(--lr-color-danger); } [part='error'][hidden] { display: none; } `;export{styles};
1
+ import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";import{overlaySurfaceFill}from"../../../internal/overlay-surface.styles.js";const styles=css` :host { position: relative; display: inline-block; inline-size: 100%; min-inline-size: 0; max-inline-size: var(--lr-voice-picker-max-inline-size, var(--lr-size-24rem)); --_lr-voice-picker-gap-default: var(--lr-space-xs); --_lr-voice-picker-radius-default: var(--lr-form-control-radius); --_lr-voice-picker-trigger-min-height-default: var(--lr-form-control-height); } :host(:disabled) { cursor: not-allowed; } [part='form-control-label'] { display: block; margin-block-end: var(--lr-space-xs); overflow-wrap: anywhere; font-size: var(--lr-font-size-md-sm); font-weight: var(--lr-font-weight-semibold); } [part='form-control-label'][hidden] { display: none; } ${formControlRequiredMarker} .control-row { display: flex; align-items: stretch; gap: var(--lr-voice-picker-gap, var(--_lr-voice-picker-gap-default)); } [part='trigger'], [part='combobox'] { display: flex; align-items: center; gap: var(--lr-voice-picker-gap, var(--_lr-voice-picker-gap-default)); flex: 1 1 auto; min-inline-size: 0; min-block-size: var( --lr-voice-picker-trigger-height, var( --lr-voice-picker-trigger-min-height, var(--_lr-voice-picker-trigger-min-height-default) ) ); block-size: var(--lr-voice-picker-trigger-height, auto); box-sizing: border-box; padding: var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline); border: var(--lr-border-width-thin) solid var(--lr-voice-picker-trigger-border-color, var(--lr-color-border)); border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); background: var(--lr-voice-picker-trigger-fill, var(--lr-color-surface)); color: inherit; font: inherit; font-size: var(--lr-form-control-font-size); } [part='trigger'] { cursor: pointer; text-align: start; } [part='combobox'] { cursor: text; } [part='trigger']:hover:not(:disabled) { border-color: var(--lr-color-brand); } [part='trigger']:active:not(:disabled) { border-color: var(--lr-color-brand); background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='trigger']:focus-visible, [part='combobox']:focus-within { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } :host([open]) [part='trigger'] { border-color: var(--lr-voice-picker-open-border-color, var(--lr-color-brand)); } :host(:disabled) [part='trigger'], :host(:disabled) [part='combobox'] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='provider-badge'] { flex: 0 1 auto; min-inline-size: 0; max-inline-size: 40%; overflow: hidden; text-overflow: ellipsis; padding-inline-end: var(--lr-space-xs); margin-inline-end: var(--lr-space-xs); border-inline-end: var(--lr-border-width-thin) solid var(--lr-color-border); font-size: var(--lr-size-0-6875rem); font-weight: var(--lr-font-weight-bold); text-transform: uppercase; letter-spacing: var(--lr-size-0-04em); color: var(--lr-color-text-quiet); white-space: nowrap; } .trigger-label { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .trigger-label[data-placeholder] { color: var(--lr-color-text-quiet); } [part='combobox-input'] { flex: 1 1 auto; min-inline-size: 0; border: none; outline: none; background: transparent; color: inherit; font: inherit; } [part='combobox-input']::placeholder { color: var(--lr-color-text-quiet); } [part='expand-icon'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--lr-color-text-quiet); min-inline-size: min(var(--lr-icon-button-size), var(--lr-form-control-height)); min-block-size: min(var(--lr-icon-button-size), var(--lr-form-control-height)); line-height: var(--lr-line-height-none); } [part='expand-icon'] svg { transform: rotate(90deg); } [part='preview-button'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; inline-size: max(var(--lr-icon-button-size), var(--lr-form-control-height)); block-size: var( --lr-voice-picker-trigger-height, var( --lr-voice-picker-trigger-min-height, max(var(--lr-icon-button-size), var(--lr-form-control-height)) ) ); min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; cursor: pointer; } [part='preview-button']:hover:not(:disabled) { background: var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='preview-button']:active:not(:disabled) { background: color-mix( in oklab, var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='preview-button']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } [part='preview-button']:disabled { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='preview-button'][aria-pressed='true'] { border-color: var(--lr-voice-picker-preview-active-border, var(--lr-color-brand)); color: var(--lr-voice-picker-preview-active-color, var(--lr-color-brand)); } [part='listbox'] { position: fixed; z-index: var(--lr-layer-dropdown); box-sizing: border-box; max-block-size: min(var(--lr-size-18rem), var(--lr-positioner-available-block-size, var(--lr-size-18rem))); overflow-y: auto; overflow-x: hidden; inline-size: max-content; min-inline-size: min(var(--lr-size-12rem), var(--lr-positioner-available-inline-size, var(--lr-size-12rem))); max-inline-size: min(var(--lr-popover-viewport-clamp), var(--lr-size-28rem), var(--lr-positioner-available-inline-size, 100vw)); padding: var(--lr-space-xs); ${overlaySurfaceFill} border-radius: var( --lr-voice-picker-radius, var(--lr-overlay-radius, var(--_lr-voice-picker-radius-default)) ); box-shadow: var(--lr-overlay-shadow-anchored, var(--lr-shadow-m)); visibility: hidden; opacity: 0; transform: translateY(var(--lr-size-neg-0-25rem)); transition: opacity var(--lr-transition-fast), transform var(--lr-transition-fast), visibility var(--lr-transition-fast); } :host([open]) [part='listbox'] { visibility: visible; opacity: 1; transform: translateY(0); } @media (prefers-reduced-motion: reduce) { [part='listbox'] { transition: none !important; } } [part='option'] { display: flex; align-items: center; gap: var(--lr-voice-picker-gap, var(--_lr-voice-picker-gap-default)); inline-size: 100%; box-sizing: border-box; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid transparent; border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; } [part='option'][aria-selected='true'] { border-color: var(--lr-voice-picker-option-selected-border, var(--lr-color-brand)); color: var(--lr-voice-picker-option-selected-color, var(--lr-color-brand)); background: var(--lr-voice-picker-option-selected-bg, transparent); font-weight: var( --lr-voice-picker-option-selected-font-weight, var(--lr-font-weight-semibold) ); } [part='option']:where(:not([aria-disabled='true'])):hover, [part='option'][data-active] { background: var(--lr-voice-picker-option-active-bg, var(--lr-color-brand-quiet)); } [part='option']:where(:not([aria-disabled='true'])):active { background: color-mix( in oklab, var(--lr-voice-picker-option-active-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part='option'][aria-disabled='true'] { cursor: default; opacity: var(--lr-voice-picker-option-disabled-opacity, 0.5); } [part='option-label'] { flex: 1 1 auto; min-inline-size: 0; display: flex; flex-direction: column; overflow: hidden; } [part='option-label'] > :first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part='option-meta'] { font-size: var(--lr-size-0-6875rem); color: var(--lr-color-text-quiet); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part='option']:where(:not([aria-disabled='true'])):hover [part='option-meta'], [part='option'][data-active] [part='option-meta'] { color: var(--lr-color-text); } [part='option'][data-synthetic] { border-style: var(--lr-voice-picker-option-synthetic-border-style, dashed); border-color: var(--lr-voice-picker-option-synthetic-border-color, var(--lr-color-border)); } [part='option'][data-synthetic] [part='option-label'] { font-style: var(--lr-voice-picker-option-synthetic-font-style, italic); } [part='option-badge'] { flex: 0 0 auto; font-size: var(--lr-size-0-6875rem); font-style: normal; font-weight: var(--lr-font-weight-normal); color: var(--lr-color-text-quiet); white-space: nowrap; } [part='option-preview'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); border-radius: var(--lr-voice-picker-radius, var(--_lr-voice-picker-radius-default)); color: var(--lr-color-text-quiet); cursor: pointer; } [part='option-preview']:hover { background: var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='option-preview']:active { background: color-mix( in oklab, var(--lr-voice-picker-preview-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); color: var(--lr-voice-picker-preview-hover-color, var(--lr-color-brand)); } [part='empty'] { padding: var(--lr-space-m); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-md-sm); } [part='hint'] { margin-block-start: var(--lr-space-xs); overflow-wrap: anywhere; font-size: var(--lr-font-size-sm); color: var(--lr-color-text-quiet); } [part='hint'][hidden] { display: none; } [part='error'] { margin-block-start: var(--lr-space-xs); overflow-wrap: anywhere; font-size: var(--lr-font-size-sm); color: var(--lr-color-danger); } [part='error'][hidden] { display: none; } `;export{styles};
@@ -20,7 +20,17 @@ readonly value:number;}export interface LyraContextMeterEventMap{'lr-segment-act
20
20
  /** Absolute quantity (e.g. tokens), not a pre-computed percentage. */
21
21
  value:number;tone?:ContextMeterTone;
22
22
  /** Optional arbitrary CSS color. When set, it takes precedence over `tone`. */
23
- color?:string;}
23
+ color?:string;
24
+ /**
25
+ * Marks this band non-actionable while `interactive` is set: its control renders genuinely
26
+ * disabled (no tab stop, no hover/press affordance) and activating it emits no
27
+ * `lr-segment-activate`.
28
+ *
29
+ * Deliberately NOT inferred from `value === 0`. A zero band is legitimately clickable in a
30
+ * budget meter -- the original use for this component -- so inertness is declared, never
31
+ * guessed. For the derived signal, style the `segment-empty`/`legend-item-empty` part instead.
32
+ */
33
+ disabled?:boolean;}
24
34
  /**
25
35
  * `<lr-context-meter>` — a segmented occupancy meter (bar or ring) for
26
36
  * showing how a fixed capacity (a model's context window, a token budget,
@@ -42,6 +52,11 @@ color?:string;}
42
52
  * `--lr-context-meter-segment-color` when `color` is set. While `interactive` is set it is a
43
53
  * `<button>` (bar) or a `role="button"` arc (ring) carrying `aria-pressed`, and a second
44
54
  * `segment-selected` part token while its index is in `selectedIndices`.
55
+ * @csspart segment-empty - A band whose `value` is 0. Derived, not declared, and carries no
56
+ * built-in treatment: it is the hook for a consumer's own "nothing in this bucket" styling. A
57
+ * zero band stays actionable unless its entry also sets `disabled`.
58
+ * @csspart segment-disabled - A band whose `segments` entry sets `disabled`. The control is
59
+ * genuinely disabled: no tab stop, no hover/press affordance, and activating it emits nothing.
45
60
  * @csspart label - The visible caption, when `label` is set.
46
61
  * @csspart semantic - The visually-hidden meter/group carrying aggregate range semantics.
47
62
  * @csspart segment-list - The visually-hidden list exposing the segment breakdown.
@@ -50,6 +65,9 @@ color?:string;}
50
65
  * `aria-hidden` in the default presentational mode, because `segment-list` already exposes the
51
66
  * same names to assistive technology; reachable while `interactive` is set, where its rows are
52
67
  * the filter controls themselves.
68
+ * @csspart legend-item-empty - The legend row of a band whose `value` is 0. Derived; no built-in
69
+ * treatment, exactly like `segment-empty`.
70
+ * @csspart legend-item-disabled - The legend row of a band whose entry sets `disabled`.
53
71
  * @csspart legend-item - One swatch + label pair in the legend, one per `segments` entry. A
54
72
  * `<button>` carrying `aria-pressed` while `interactive` is set, a plain `<span>` otherwise.
55
73
  * @csspart legend-value - One legend row's absolute count, rendered by `legendDisplay`'s
@@ -67,6 +85,7 @@ color?:string;}
67
85
  * @cssprop [--lr-context-meter-segment-seam-color=var(--lr-color-surface)] - Color of the hairline seam painted between adjacent `bar`-shape segments.
68
86
  * @cssprop [--lr-context-meter-selected-ring-color=var(--lr-color-text)] - Colour of the inset ring marking a `bar`-shape band or a legend row whose index is in `selectedIndices`. Painted inside the shadow root because the state lives in the part name, and as a ring rather than an outline so it composes with the hover/press/focus outlines instead of being replaced by them.
69
87
  * @cssprop [--lr-context-meter-selected-ring-width=var(--lr-border-width-thick)] - Width of that selected ring.
88
+ * @cssprop [--lr-context-meter-disabled-opacity=var(--lr-opacity-disabled)] - Opacity of a band or legend row whose `segments` entry sets `disabled`. The band keeps its own colour -- it is still the datum it always was -- and loses only the affordances that promise activation.
70
89
  * @cssprop [--lr-context-meter-selected-arc-stroke=16] - Stroke width, in this component's `0 0 100 100` viewBox units, of a selected `ring`-shape arc. Arcs share one bounding box, so a selected arc reports itself by thickening in place rather than by an outline that would trace the whole ring.
71
90
  * @event lr-segment-activate - A band or its legend row was activated while `interactive` is set.
72
91
  * `detail: { index, label, value }`. Cancelable: the default action is this component toggling
@@ -173,9 +192,9 @@ private formatShare;
173
192
  private activateSegment;
174
193
  /** Enter/Space on the ring's `role="button"` arcs, which get none of a native button's keys. */
175
194
  private onArcKeyDown;
176
- /** The part token list for a band or legend row, carrying its selected state in the name --
177
- * `::part(segment)[data-selected]` is invalid CSS, so the state has to live in the part name. */
178
- private statePart;private renderSemantics;private renderBar;private renderRing;
195
+ /** The part token list for a band or legend row. `::part(segment)[data-selected]` is invalid
196
+ * CSS, so every state a consumer may need to style has to live in the part name itself. */
197
+ private segmentPart;private renderSemantics;private renderBar;private renderRing;
179
198
  /** The visible category key. It repeats, in sighted form, exactly the label/count pairs the
180
199
  * visually-hidden `segment-list` already exposes, so the whole subtree is `aria-hidden` — a
181
200
  * screen reader announcing the same scheme twice is worse than not announcing the duplicate at
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{nativeSvgTitle}from"../../../internal/svg-title.js";import{html,svg,nothing}from"lit";import{property}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteNumber}from"../../../internal/numbers.js";import{getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{requestThenCommit}from"../../../internal/request-commit.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{srOnly}from"../../../internal/a11y.js";import{styles}from"./context-meter.styles.js";import{LYRA_DEFAULT_contextMeterLabeledSummary,LYRA_DEFAULT_contextMeterSegmentLabel,LYRA_DEFAULT_contextMeterUsed,LYRA_DEFAULT_contextMeterUsedOfTotal}from"../../../internal/default-strings.generated.js";const CONTEXT_METER_LEGEND_DISPLAYS=Object.freeze(["label","label-value","label-percent","label-value-percent"]);function normalizeContextMeterLegendDisplay(value){return CONTEXT_METER_LEGEND_DISPLAYS.includes(value)?value:"label"}const RADIUS=40,CENTER=50,STROKE=12,CIRCUMFERENCE=2*Math.PI*RADIUS,MAX_CONTEXT_METER_SEGMENTS=1e4,EMPTY_CONTEXT_METER_SEGMENTS=Object.freeze([]);function projectContextMeterSegments(value){try{if(!Array.isArray(value))return EMPTY_CONTEXT_METER_SEGMENTS;const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return EMPTY_CONTEXT_METER_SEGMENTS;const segments=[];for(let index=0;index<Math.min(length.value,MAX_CONTEXT_METER_SEGMENTS);index+=1){const entry=getOwnDataDescriptor(value,String(index));if(entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR||entry.value===null||typeof entry.value!="object"||Array.isArray(entry.value))continue;const label=getOwnDataDescriptor(entry.value,"label"),segmentValue=getOwnDataDescriptor(entry.value,"value"),tone=getOwnDataDescriptor(entry.value,"tone"),color=getOwnDataDescriptor(entry.value,"color");if(label===MISSING_OWN_DATA_DESCRIPTOR||label===UNSAFE_OWN_DATA_DESCRIPTOR||segmentValue===MISSING_OWN_DATA_DESCRIPTOR||segmentValue===UNSAFE_OWN_DATA_DESCRIPTOR||tone===UNSAFE_OWN_DATA_DESCRIPTOR||color===UNSAFE_OWN_DATA_DESCRIPTOR||typeof label.value!="string"||typeof segmentValue.value!="number"||tone!==MISSING_OWN_DATA_DESCRIPTOR&&typeof tone.value!="string"||color!==MISSING_OWN_DATA_DESCRIPTOR&&typeof color.value!="string")continue;const toneValue=tone===MISSING_OWN_DATA_DESCRIPTOR?void 0:tone.value,colorValue=color===MISSING_OWN_DATA_DESCRIPTOR?void 0:color.value;segments.push(Object.freeze({label:label.value,value:segmentValue.value,...toneValue===void 0?{}:{tone:toneValue},...colorValue===void 0?{}:{color:colorValue}}))}return Object.freeze(segments)}catch{return EMPTY_CONTEXT_METER_SEGMENTS}}function formatCount(n,locale){return Math.round(finiteNumber(n,0)).toLocaleString(resolveIntlLocale(locale))}class LyraContextMeter extends LyraElement{constructor(){super(...arguments),this.segments=[],this.total=0,this._shape="bar",this.label="",this.showLegend=!1,this.legendDisplay="label",this.interactive=!1,this.selectedIndices=[],this.projectedSegments=EMPTY_CONTEXT_METER_SEGMENTS}static{this.defaultStrings={...super.defaultStrings,contextMeterLabeledSummary:LYRA_DEFAULT_contextMeterLabeledSummary,contextMeterSegmentLabel:LYRA_DEFAULT_contextMeterSegmentLabel,contextMeterUsed:LYRA_DEFAULT_contextMeterUsed,contextMeterUsedOfTotal:LYRA_DEFAULT_contextMeterUsedOfTotal}}static{this.ownedCollectionProperties=Object.freeze(["segments","selectedIndices"])}static{this.immutableEventDetails=Object.freeze(["lr-segment-activate"])}static{this.styles=[LyraElement.styles,srOnly,styles]}get shape(){return this._shape}set shape(value){const normalized=value==="ring"?"ring":"bar",previous=this._shape;if(previous===normalized){value!==normalized&&this.requestUpdate("shape",previous);return}this._shape=normalized,this.requestUpdate("shape",previous)}get effectiveSegments(){const source=this.segments;return source!==this.projectedSegmentsSource&&(this.projectedSegmentsSource=source,this.projectedSegments=projectContextMeterSegments(source)),this.projectedSegments}normalizedSegmentValue(segment){return Math.max(0,finiteNumber(segment.value,0))}get usedTotal(){return this.effectiveSegments.reduce((sum,segment)=>{const next=sum+this.normalizedSegmentValue(segment);return finiteNumber(next,Number.MAX_VALUE)},0)}ratios(){const total=Math.max(0,finiteNumber(this.total,0));if(total<=0)return[];const out=[];let cumulative=0;for(const segment of this.effectiveSegments){const raw=this.normalizedSegmentValue(segment),available=Math.max(0,1-cumulative),ratio=Math.min(raw/total,available);cumulative+=ratio,out.push({segment,value:raw,ratio})}return out}get clampedUsedTotal(){const total=Math.max(0,finiteNumber(this.total,0));return{used:total>0?Math.min(this.usedTotal,total):this.usedTotal,total}}get summary(){const{used:usedForSummary,total:totalValue}=this.clampedUsedTotal,used=formatCount(usedForSummary,this.effectiveLocale),phrase=totalValue>0?this.localize("contextMeterUsedOfTotal",void 0,{used,total:formatCount(totalValue,this.effectiveLocale)}):this.localize("contextMeterUsed",void 0,{used});return this.label?this.localize("contextMeterLabeledSummary",void 0,{label:this.label,summary:phrase}):phrase}segmentTitle(segment,value=this.normalizedSegmentValue(segment)){return this.localize("contextMeterSegmentLabel",void 0,{label:segment.label,count:formatCount(value,this.effectiveLocale)})}segmentColor(segment){return segment.color?sanitizeCssColor(segment.color):void 0}canonicalSelectedIndices(){const count=this.effectiveSegments.length;return[...new Set(this.selectedIndices.filter(candidate=>typeof candidate=="number"&&Number.isInteger(candidate)&&candidate>=0&&candidate<count))].sort((left,right)=>left-right)}isSelected(index){return this.canonicalSelectedIndices().includes(index)}formatShare(ratio){return getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(ratio)}activateSegment(index){if(!this.interactive)return;const segment=this.effectiveSegments[index];segment&&requestThenCommit({requestDetail:{index,label:segment.label,value:this.normalizedSegmentValue(segment)},emitRequest:(detail,init)=>this.emit("lr-segment-activate",detail,init),commit:()=>{const selected=this.canonicalSelectedIndices();this.selectedIndices=selected.includes(index)?selected.filter(candidate=>candidate!==index):[...selected,index].sort((left,right)=>left-right)}})}onArcKeyDown(event,index){event.key!=="Enter"&&event.key!==" "||(event.preventDefault(),this.activateSegment(index))}statePart(base,selected){return selected?`${base} ${base}-selected`:base}renderSemantics(){const{used,total}=this.clampedUsedTotal,accessibleName=this.summary;return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{nativeSvgTitle}from"../../../internal/svg-title.js";import{html,svg,nothing}from"lit";import{property}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteNumber}from"../../../internal/numbers.js";import{getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{requestThenCommit}from"../../../internal/request-commit.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{srOnly}from"../../../internal/a11y.js";import{statePart}from"../../../internal/state-part.js";import{styles}from"./context-meter.styles.js";import{LYRA_DEFAULT_contextMeterLabeledSummary,LYRA_DEFAULT_contextMeterSegmentLabel,LYRA_DEFAULT_contextMeterUsed,LYRA_DEFAULT_contextMeterUsedOfTotal}from"../../../internal/default-strings.generated.js";const CONTEXT_METER_LEGEND_DISPLAYS=Object.freeze(["label","label-value","label-percent","label-value-percent"]);function normalizeContextMeterLegendDisplay(value){return CONTEXT_METER_LEGEND_DISPLAYS.includes(value)?value:"label"}const RADIUS=40,CENTER=50,STROKE=12,CIRCUMFERENCE=2*Math.PI*RADIUS,MAX_CONTEXT_METER_SEGMENTS=1e4,EMPTY_CONTEXT_METER_SEGMENTS=Object.freeze([]);function projectContextMeterSegments(value){try{if(!Array.isArray(value))return EMPTY_CONTEXT_METER_SEGMENTS;const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return EMPTY_CONTEXT_METER_SEGMENTS;const segments=[];for(let index=0;index<Math.min(length.value,MAX_CONTEXT_METER_SEGMENTS);index+=1){const entry=getOwnDataDescriptor(value,String(index));if(entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR||entry.value===null||typeof entry.value!="object"||Array.isArray(entry.value))continue;const label=getOwnDataDescriptor(entry.value,"label"),segmentValue=getOwnDataDescriptor(entry.value,"value"),tone=getOwnDataDescriptor(entry.value,"tone"),color=getOwnDataDescriptor(entry.value,"color"),disabled=getOwnDataDescriptor(entry.value,"disabled");if(label===MISSING_OWN_DATA_DESCRIPTOR||label===UNSAFE_OWN_DATA_DESCRIPTOR||segmentValue===MISSING_OWN_DATA_DESCRIPTOR||segmentValue===UNSAFE_OWN_DATA_DESCRIPTOR||tone===UNSAFE_OWN_DATA_DESCRIPTOR||color===UNSAFE_OWN_DATA_DESCRIPTOR||disabled===UNSAFE_OWN_DATA_DESCRIPTOR||typeof label.value!="string"||typeof segmentValue.value!="number"||tone!==MISSING_OWN_DATA_DESCRIPTOR&&typeof tone.value!="string"||color!==MISSING_OWN_DATA_DESCRIPTOR&&typeof color.value!="string"||disabled!==MISSING_OWN_DATA_DESCRIPTOR&&typeof disabled.value!="boolean")continue;const toneValue=tone===MISSING_OWN_DATA_DESCRIPTOR?void 0:tone.value,colorValue=color===MISSING_OWN_DATA_DESCRIPTOR?void 0:color.value,disabledValue=disabled===MISSING_OWN_DATA_DESCRIPTOR?void 0:disabled.value;segments.push(Object.freeze({label:label.value,value:segmentValue.value,...toneValue===void 0?{}:{tone:toneValue},...colorValue===void 0?{}:{color:colorValue},...disabledValue===void 0?{}:{disabled:disabledValue}}))}return Object.freeze(segments)}catch{return EMPTY_CONTEXT_METER_SEGMENTS}}function formatCount(n,locale){return Math.round(finiteNumber(n,0)).toLocaleString(resolveIntlLocale(locale))}class LyraContextMeter extends LyraElement{constructor(){super(...arguments),this.segments=[],this.total=0,this._shape="bar",this.label="",this.showLegend=!1,this.legendDisplay="label",this.interactive=!1,this.selectedIndices=[],this.projectedSegments=EMPTY_CONTEXT_METER_SEGMENTS}static{this.defaultStrings={...super.defaultStrings,contextMeterLabeledSummary:LYRA_DEFAULT_contextMeterLabeledSummary,contextMeterSegmentLabel:LYRA_DEFAULT_contextMeterSegmentLabel,contextMeterUsed:LYRA_DEFAULT_contextMeterUsed,contextMeterUsedOfTotal:LYRA_DEFAULT_contextMeterUsedOfTotal}}static{this.ownedCollectionProperties=Object.freeze(["segments","selectedIndices"])}static{this.immutableEventDetails=Object.freeze(["lr-segment-activate"])}static{this.styles=[LyraElement.styles,srOnly,styles]}get shape(){return this._shape}set shape(value){const normalized=value==="ring"?"ring":"bar",previous=this._shape;if(previous===normalized){value!==normalized&&this.requestUpdate("shape",previous);return}this._shape=normalized,this.requestUpdate("shape",previous)}get effectiveSegments(){const source=this.segments;return source!==this.projectedSegmentsSource&&(this.projectedSegmentsSource=source,this.projectedSegments=projectContextMeterSegments(source)),this.projectedSegments}normalizedSegmentValue(segment){return Math.max(0,finiteNumber(segment.value,0))}get usedTotal(){return this.effectiveSegments.reduce((sum,segment)=>{const next=sum+this.normalizedSegmentValue(segment);return finiteNumber(next,Number.MAX_VALUE)},0)}ratios(){const total=Math.max(0,finiteNumber(this.total,0));if(total<=0)return[];const out=[];let cumulative=0;for(const segment of this.effectiveSegments){const raw=this.normalizedSegmentValue(segment),available=Math.max(0,1-cumulative),ratio=Math.min(raw/total,available);cumulative+=ratio,out.push({segment,value:raw,ratio})}return out}get clampedUsedTotal(){const total=Math.max(0,finiteNumber(this.total,0));return{used:total>0?Math.min(this.usedTotal,total):this.usedTotal,total}}get summary(){const{used:usedForSummary,total:totalValue}=this.clampedUsedTotal,used=formatCount(usedForSummary,this.effectiveLocale),phrase=totalValue>0?this.localize("contextMeterUsedOfTotal",void 0,{used,total:formatCount(totalValue,this.effectiveLocale)}):this.localize("contextMeterUsed",void 0,{used});return this.label?this.localize("contextMeterLabeledSummary",void 0,{label:this.label,summary:phrase}):phrase}segmentTitle(segment,value=this.normalizedSegmentValue(segment)){return this.localize("contextMeterSegmentLabel",void 0,{label:segment.label,count:formatCount(value,this.effectiveLocale)})}segmentColor(segment){return segment.color?sanitizeCssColor(segment.color):void 0}canonicalSelectedIndices(){const count=this.effectiveSegments.length;return[...new Set(this.selectedIndices.filter(candidate=>typeof candidate=="number"&&Number.isInteger(candidate)&&candidate>=0&&candidate<count))].sort((left,right)=>left-right)}isSelected(index){return this.canonicalSelectedIndices().includes(index)}formatShare(ratio){return getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(ratio)}activateSegment(index){if(!this.interactive)return;const segment=this.effectiveSegments[index];!segment||segment.disabled||requestThenCommit({requestDetail:{index,label:segment.label,value:this.normalizedSegmentValue(segment)},emitRequest:(detail,init)=>this.emit("lr-segment-activate",detail,init),commit:()=>{const selected=this.canonicalSelectedIndices();this.selectedIndices=selected.includes(index)?selected.filter(candidate=>candidate!==index):[...selected,index].sort((left,right)=>left-right)}})}onArcKeyDown(event,index){event.key!=="Enter"&&event.key!==" "||(event.preventDefault(),this.activateSegment(index))}segmentPart(base,index,segment){return statePart(base,{selected:this.isSelected(index),empty:this.normalizedSegmentValue(segment)===0,disabled:segment.disabled===!0})}renderSemantics(){const{used,total}=this.clampedUsedTotal,accessibleName=this.summary;return html`
2
2
  <div
3
3
  part="semantic"
4
4
  class="sr-only"
@@ -16,9 +16,10 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
16
16
  ${this.label?html`<div part="label" aria-hidden="true">${this.label}</div>`:nothing}
17
17
  <div part="track" aria-hidden=${this.interactive?nothing:"true"}>
18
18
  ${ratios.map(({segment,value,ratio},index)=>{const title=this.segmentTitle(segment,value),selected=this.isSelected(index),style=styleMap({flexBasis:`${(ratio*100).toFixed(4)}%`,...this.segmentColor(segment)?{"--lr-context-meter-segment-color":this.segmentColor(segment)}:{}});return this.interactive?html`<button
19
- part=${this.statePart("segment",selected)}
19
+ part=${this.segmentPart("segment",index,segment)}
20
20
  type="button"
21
21
  data-tone=${segment.tone??"neutral"}
22
+ ?disabled=${segment.disabled===!0}
22
23
  aria-pressed=${selected?"true":"false"}
23
24
  aria-label=${title}
24
25
  title=${title}
@@ -34,14 +35,15 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
34
35
  </div>
35
36
  `}renderRing(){const ratios=this.ratios();let cumulative=0;const arcs=ratios.map(({segment,value,ratio},index)=>{const segLen=ratio*CIRCUMFERENCE,dashoffset=-cumulative*CIRCUMFERENCE;cumulative+=ratio;const title=this.segmentTitle(segment,value),selected=this.isSelected(index);return svg`
36
37
  <circle
37
- part=${this.interactive?this.statePart("segment",selected):"segment"}
38
+ part=${this.interactive?this.segmentPart("segment",index,segment):"segment"}
38
39
  data-tone=${segment.tone??"neutral"}
39
40
  role=${this.interactive?"button":nothing}
40
- tabindex=${this.interactive?"0":nothing}
41
+ tabindex=${this.interactive&&!segment.disabled?"0":nothing}
42
+ aria-disabled=${this.interactive&&segment.disabled?"true":nothing}
41
43
  aria-pressed=${this.interactive?selected?"true":"false":nothing}
42
44
  aria-label=${this.interactive?title:nothing}
43
- @click=${this.interactive?()=>this.activateSegment(index):nothing}
44
- @keydown=${this.interactive?event=>this.onArcKeyDown(event,index):nothing}
45
+ @click=${this.interactive&&!segment.disabled?()=>this.activateSegment(index):nothing}
46
+ @keydown=${this.interactive&&!segment.disabled?event=>this.onArcKeyDown(event,index):nothing}
45
47
  style=${styleMap(this.segmentColor(segment)?{"--lr-context-meter-segment-color":this.segmentColor(segment)}:{})}
46
48
  cx=${CENTER}
47
49
  cy=${CENTER}
@@ -75,8 +77,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
75
77
  ${showsPercent?html`<span part="legend-percent"
76
78
  >${this.formatShare(ratios[index]?.ratio??0)}</span
77
79
  >`:nothing}`;return this.interactive?html`<button
78
- part=${this.statePart("legend-item",selected)}
80
+ part=${this.segmentPart("legend-item",index,segment)}
79
81
  type="button"
82
+ ?disabled=${segment.disabled===!0}
80
83
  aria-pressed=${selected?"true":"false"}
81
84
  @click=${()=>this.activateSegment(index)}
82
85
  >
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{inline-size:100%;min-inline-size:0;display:block}:host([shape=ring]){inline-size:var(--lr-size-8em);block-size:var(--lr-size-8em);display:inline-block}[part=base]{gap:var(--lr-space-xs);flex-direction:column;display:flex}:host([shape=ring]) [part=base]{block-size:100%;inline-size:100%}[part=label]{overflow-wrap:anywhere;min-inline-size:0;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);font-family:var(--lr-font)}[part=track]{block-size:var(--lr-context-meter-track-size,var(--lr-size-0-5rem));border-radius:var(--lr-context-meter-track-radius,calc(var(--lr-radius) * .5));background:var(--lr-context-meter-track-bg,color-mix(in srgb, var(--lr-color-border) 30%, transparent));align-items:stretch;display:flex;position:relative;overflow:hidden}[part~=segment]{min-inline-size:calc(var(--lr-border-width-thin) * 2);background:var(--lr-color-border);block-size:100%;transition:flex-basis var(--lr-transition-base);flex:none;display:block}[part~=segment]:not(:first-of-type){border-inline-start:var(--lr-border-width-thin) solid var(--lr-context-meter-segment-seam-color,var(--lr-color-surface))}[part~=segment][data-tone=brand]{background:var(--lr-color-brand)}[part~=segment][data-tone=success]{background:var(--lr-color-success)}[part~=segment][data-tone=warning]{background:var(--lr-color-warning)}[part~=segment][data-tone=danger]{background:var(--lr-color-danger)}[part~=segment][style*=--lr-context-meter-segment-color]{background:var(--lr-context-meter-segment-color)}[part=legend]{align-items:center;gap:var(--lr-space-2xs) var(--lr-space-s);font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);flex-wrap:wrap;margin-block-start:var(--lr-space-xs);display:flex}[part~=legend-item]{align-items:center;gap:var(--lr-space-2xs);min-inline-size:0;display:inline-flex}[part=legend-swatch]{inline-size:var(--lr-context-meter-legend-swatch-size,var(--lr-size-0-625rem));block-size:var(--lr-context-meter-legend-swatch-size,var(--lr-size-0-625rem));border-radius:var(--lr-radius-xs);background:var(--lr-color-border);flex:none}[part=legend-swatch][data-tone=brand]{background:var(--lr-color-brand)}[part=legend-swatch][data-tone=success]{background:var(--lr-color-success)}[part=legend-swatch][data-tone=warning]{background:var(--lr-color-warning)}[part=legend-swatch][data-tone=danger]{background:var(--lr-color-danger)}[part=legend-swatch][style*=--lr-context-meter-segment-color]{background:var(--lr-context-meter-segment-color)}[part=legend-label]{overflow-wrap:anywhere;min-inline-size:0}button[part~=segment]{appearance:none;font:inherit;color:inherit;cursor:pointer;border:0;padding:0}button[part~=segment]:where(:hover){outline:var(--lr-border-width-thin) solid var(--lr-color-text-quiet);outline-offset:calc(var(--lr-border-width-thin) * -1)}button[part~=segment]:where(:active){outline-color:var(--lr-color-text)}button[part~=segment]:where(:focus-visible){outline:var(--lr-focus-ring);outline-offset:calc(var(--lr-focus-ring-width) * -1)}:host([shape=ring]) [part~=segment]:where(:hover){opacity:.8}:host([shape=ring]) [part~=segment]:where(:active){opacity:.6}:host([shape=ring]) [part~=segment]:where(:focus-visible){opacity:.8;outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}button[part~=legend-item]{appearance:none;padding:var(--lr-space-2xs);border-radius:var(--lr-radius-xs);font:inherit;color:inherit;text-align:start;cursor:pointer;transition:var(--lr-transition-interactive);background:0 0;border:0}button[part~=legend-item]:where(:hover){background:var(--lr-color-brand-quiet)}button[part~=legend-item]:where(:active){background:var(--lr-color-border)}button[part~=legend-item]:where(:focus-visible){outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}button[part~=segment-selected],button[part~=legend-item-selected]{box-shadow:inset 0 0 0 var(--lr-context-meter-selected-ring-width,var(--lr-border-width-thick)) var(--lr-context-meter-selected-ring-color,var(--lr-color-text))}:host([shape=ring]) [part~=segment-selected]{stroke-width:var(--lr-context-meter-selected-arc-stroke,16)}:host([shape=ring][show-legend]){block-size:auto}:host([shape=ring][show-legend]) svg[part=base]{inline-size:var(--lr-size-8em);block-size:var(--lr-size-8em)}:host([shape=ring]) svg[part=base]{display:block;overflow:visible}:host([shape=ring]) [part=track]{fill:none;stroke:color-mix(in srgb, var(--lr-color-border) 30%, transparent)}:host([shape=ring]) [part~=segment]{fill:none;stroke:var(--lr-color-border);stroke-linecap:butt;transition:stroke-dasharray var(--lr-transition-base), stroke-dashoffset var(--lr-transition-base)}:host([shape=ring]) [part~=segment][data-tone=brand]{stroke:var(--lr-color-brand)}:host([shape=ring]) [part~=segment][data-tone=success]{stroke:var(--lr-color-success)}:host([shape=ring]) [part~=segment][data-tone=warning]{stroke:var(--lr-color-warning)}:host([shape=ring]) [part~=segment][data-tone=danger]{stroke:var(--lr-color-danger)}:host([shape=ring]) [part~=segment][style*=--lr-context-meter-segment-color]{stroke:var(--lr-context-meter-segment-color)}:host([shape=ring]) [part=label]{overflow:hidden}:host([shape=ring]) .ring-label{overflow-wrap:anywhere;block-size:100%;inline-size:100%;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-2xs);line-height:var(--lr-line-height-compact);text-align:center;text-transform:uppercase;justify-content:center;align-items:center;display:flex;overflow:hidden}@media (forced-colors:active){[part~=segment],[part=legend-swatch]{forced-color-adjust:none;border:var(--lr-border-width-thin) solid Canvas;background:canvastext}[part~=segment][data-tone=success],[part=legend-swatch][data-tone=success]{border-style:dashed}[part~=segment][data-tone=warning],[part=legend-swatch][data-tone=warning]{border-style:dotted}[part~=segment][data-tone=danger],[part=legend-swatch][data-tone=danger]{border-style:double}:host([shape=ring]) [part~=segment]{fill:none;stroke:canvastext}:host([shape=ring]) [part~=segment][data-tone=success]{stroke-dasharray:8 3}:host([shape=ring]) [part~=segment][data-tone=warning]{stroke-dasharray:2 3}:host([shape=ring]) [part~=segment][data-tone=danger]{stroke-dasharray:8 2 2 2}button[part~=segment-selected]{box-shadow:inset 0 0 0 var(--lr-border-width-thick) Highlight}button[part~=legend-item-selected]{outline:var(--lr-border-width-thick) solid Highlight;outline-offset:calc(var(--lr-border-width-thick) * -1)}:host([shape=ring]) [part~=segment-selected]{stroke:highlight}}@media (prefers-reduced-motion:reduce){[part~=segment],button[part~=legend-item]{transition:none!important}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{inline-size:100%;min-inline-size:0;display:block}:host([shape=ring]){inline-size:var(--lr-size-8em);block-size:var(--lr-size-8em);display:inline-block}[part=base]{gap:var(--lr-space-xs);flex-direction:column;display:flex}:host([shape=ring]) [part=base]{block-size:100%;inline-size:100%}[part=label]{overflow-wrap:anywhere;min-inline-size:0;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);font-family:var(--lr-font)}[part=track]{block-size:var(--lr-context-meter-track-size,var(--lr-size-0-5rem));border-radius:var(--lr-context-meter-track-radius,calc(var(--lr-radius) * .5));background:var(--lr-context-meter-track-bg,color-mix(in srgb, var(--lr-color-border) 30%, transparent));align-items:stretch;display:flex;position:relative;overflow:hidden}[part~=segment]{min-inline-size:calc(var(--lr-border-width-thin) * 2);background:var(--lr-color-border);block-size:100%;transition:flex-basis var(--lr-transition-base);flex:none;display:block}[part~=segment]:not(:first-of-type){border-inline-start:var(--lr-border-width-thin) solid var(--lr-context-meter-segment-seam-color,var(--lr-color-surface))}[part~=segment][data-tone=brand]{background:var(--lr-color-brand)}[part~=segment][data-tone=success]{background:var(--lr-color-success)}[part~=segment][data-tone=warning]{background:var(--lr-color-warning)}[part~=segment][data-tone=danger]{background:var(--lr-color-danger)}[part~=segment][style*=--lr-context-meter-segment-color]{background:var(--lr-context-meter-segment-color)}[part=legend]{align-items:center;gap:var(--lr-space-2xs) var(--lr-space-s);font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);flex-wrap:wrap;margin-block-start:var(--lr-space-xs);display:flex}[part~=legend-item]{align-items:center;gap:var(--lr-space-2xs);min-inline-size:0;display:inline-flex}[part=legend-swatch]{inline-size:var(--lr-context-meter-legend-swatch-size,var(--lr-size-0-625rem));block-size:var(--lr-context-meter-legend-swatch-size,var(--lr-size-0-625rem));border-radius:var(--lr-radius-xs);background:var(--lr-color-border);flex:none}[part=legend-swatch][data-tone=brand]{background:var(--lr-color-brand)}[part=legend-swatch][data-tone=success]{background:var(--lr-color-success)}[part=legend-swatch][data-tone=warning]{background:var(--lr-color-warning)}[part=legend-swatch][data-tone=danger]{background:var(--lr-color-danger)}[part=legend-swatch][style*=--lr-context-meter-segment-color]{background:var(--lr-context-meter-segment-color)}[part=legend-label]{overflow-wrap:anywhere;min-inline-size:0}button[part~=segment]{appearance:none;font:inherit;color:inherit;cursor:pointer;border:0;padding:0}button[part~=segment]:where(:not(:disabled)):where(:hover){outline:var(--lr-border-width-thin) solid var(--lr-color-text-quiet);outline-offset:calc(var(--lr-border-width-thin) * -1)}button[part~=segment]:where(:not(:disabled)):where(:active){outline-color:var(--lr-color-text)}button[part~=segment]:where(:focus-visible){outline:var(--lr-focus-ring);outline-offset:calc(var(--lr-focus-ring-width) * -1)}:host([shape=ring]) [part~=segment]:where(:not([aria-disabled=true])):where(:hover){opacity:.8}:host([shape=ring]) [part~=segment]:where(:not([aria-disabled=true])):where(:active){opacity:.6}:host([shape=ring]) [part~=segment]:where(:focus-visible){opacity:.8;outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}button[part~=legend-item]{appearance:none;padding:var(--lr-space-2xs);border-radius:var(--lr-radius-xs);font:inherit;color:inherit;text-align:start;cursor:pointer;transition:var(--lr-transition-interactive);background:0 0;border:0}button[part~=legend-item]:where(:not(:disabled)):where(:hover){background:var(--lr-color-brand-quiet)}button[part~=legend-item]:where(:not(:disabled)):where(:active){background:var(--lr-color-border)}button[part~=legend-item]:where(:focus-visible){outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}button[part~=segment-selected],button[part~=legend-item-selected]{box-shadow:inset 0 0 0 var(--lr-context-meter-selected-ring-width,var(--lr-border-width-thick)) var(--lr-context-meter-selected-ring-color,var(--lr-color-text))}:host([shape=ring]) [part~=segment-selected]{stroke-width:var(--lr-context-meter-selected-arc-stroke,16)}button[part~=segment]:where(:disabled),button[part~=legend-item]:where(:disabled),:host([shape=ring]) [part~=segment]:where([aria-disabled=true]){cursor:default;opacity:var(--lr-context-meter-disabled-opacity,var(--lr-opacity-disabled))}:host([shape=ring][show-legend]){block-size:auto}:host([shape=ring][show-legend]) svg[part=base]{inline-size:var(--lr-size-8em);block-size:var(--lr-size-8em)}:host([shape=ring]) svg[part=base]{display:block;overflow:visible}:host([shape=ring]) [part=track]{fill:none;stroke:color-mix(in srgb, var(--lr-color-border) 30%, transparent)}:host([shape=ring]) [part~=segment]{fill:none;stroke:var(--lr-color-border);stroke-linecap:butt;transition:stroke-dasharray var(--lr-transition-base), stroke-dashoffset var(--lr-transition-base)}:host([shape=ring]) [part~=segment][data-tone=brand]{stroke:var(--lr-color-brand)}:host([shape=ring]) [part~=segment][data-tone=success]{stroke:var(--lr-color-success)}:host([shape=ring]) [part~=segment][data-tone=warning]{stroke:var(--lr-color-warning)}:host([shape=ring]) [part~=segment][data-tone=danger]{stroke:var(--lr-color-danger)}:host([shape=ring]) [part~=segment][style*=--lr-context-meter-segment-color]{stroke:var(--lr-context-meter-segment-color)}:host([shape=ring]) [part=label]{font-size:var(--lr-size-1em);overflow:hidden}:host([shape=ring]) .ring-label{overflow-wrap:anywhere;block-size:100%;inline-size:100%;color:var(--lr-color-text-quiet);font-size:calc(var(--lr-size-1em) * .625);line-height:var(--lr-line-height-compact);text-align:center;text-transform:uppercase;justify-content:center;align-items:center;display:flex;overflow:hidden}@media (forced-colors:active){[part~=segment],[part=legend-swatch]{forced-color-adjust:none;border:var(--lr-border-width-thin) solid Canvas;background:canvastext}[part~=segment][data-tone=success],[part=legend-swatch][data-tone=success]{border-style:dashed}[part~=segment][data-tone=warning],[part=legend-swatch][data-tone=warning]{border-style:dotted}[part~=segment][data-tone=danger],[part=legend-swatch][data-tone=danger]{border-style:double}:host([shape=ring]) [part~=segment]{fill:none;stroke:canvastext}:host([shape=ring]) [part~=segment][data-tone=success]{stroke-dasharray:8 3}:host([shape=ring]) [part~=segment][data-tone=warning]{stroke-dasharray:2 3}:host([shape=ring]) [part~=segment][data-tone=danger]{stroke-dasharray:8 2 2 2}button[part~=segment-selected]{box-shadow:inset 0 0 0 var(--lr-border-width-thick) Highlight}button[part~=legend-item-selected]{outline:var(--lr-border-width-thick) solid Highlight;outline-offset:calc(var(--lr-border-width-thick) * -1)}:host([shape=ring]) [part~=segment-selected]{stroke:highlight}}@media (prefers-reduced-motion:reduce){[part~=segment],button[part~=legend-item]{transition:none!important}}`;export{styles};
@@ -219,7 +219,9 @@ filterDebounce:number;
219
219
  get filteredCount():number;
220
220
  /** Keeps matching descendants and their ancestors during tree filtering. */
221
221
  filterFromLeafRows:boolean;private _filters;
222
- /** Clone-owned controlled per-column filters. */
222
+ /** Clone-owned controlled per-column filters. Re-binding an equal value is not a change: the
223
+ * held value and its reference survive, nothing re-renders, and no server request is
224
+ * rescheduled, so a host that re-binds on every render cannot postpone the request forever. */
223
225
  get filters():readonly DataGridFilter[];set filters(value:readonly DataGridFilter[]);private _groupBy;
224
226
  /** One or more field/column identifiers used to group client rows.
225
227
  * @default null */
@@ -295,7 +297,8 @@ get selectedRows():readonly Row[];set selectedRows(next:readonly Row[]);private
295
297
  server:boolean;
296
298
  /** Density on the shared Lyra size ladder. */
297
299
  size:DataGridSize;private _sort;
298
- /** Clone-owned controlled multi-column sorting state. */
300
+ /** Clone-owned controlled multi-column sorting state. Like `filters`, re-binding an equal value
301
+ * is not a change and reschedules nothing. */
299
302
  get sort():SortingState;set sort(value:SortingState);
300
303
  /** Starts new sort cycles descending. */
301
304
  sortDescFirst:boolean;