@aceshooting/lyra-ui 14.0.0 → 14.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/CHANGELOG.md +155 -19
  2. package/custom-elements.json +1 -1
  3. package/dist/components/agent-tools/commit-card/commit-card.class.d.ts +3 -1
  4. package/dist/components/agent-tools/commit-card/commit-card.class.js +2 -2
  5. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -1
  6. package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +1 -1
  7. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +6 -2
  8. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +4 -4
  9. package/dist/components/agent-tools/result-card/result-card.class.d.ts +1 -1
  10. package/dist/components/agent-tools/result-card/result-card.class.js +1 -1
  11. package/dist/components/agent-tools/result-card/result-field.class.d.ts +1 -1
  12. package/dist/components/agent-tools/result-card/result-field.class.js +1 -1
  13. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +1 -1
  14. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
  15. package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -1
  16. package/dist/components/agent-tools/terminal/terminal.class.js +2 -2
  17. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -2
  18. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  19. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
  20. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
  21. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +4 -4
  22. package/dist/components/agent-tools/trace-tree/span.d.ts +3 -1
  23. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  24. package/dist/components/charts/chart/box-plot.class.d.ts +2 -0
  25. package/dist/components/charts/chart/box-plot.class.js +1 -1
  26. package/dist/components/charts/chart/chart.class.d.ts +6 -1
  27. package/dist/components/charts/chart/chart.class.js +1 -1
  28. package/dist/components/charts/chart/lite-chart.class.d.ts +20 -11
  29. package/dist/components/charts/chart/lite-chart.class.js +10 -8
  30. package/dist/components/conversation/chat-message/chat-message.class.d.ts +4 -3
  31. package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -3
  32. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  33. package/dist/components/conversation/code-block/code-block-shared.d.ts +3 -3
  34. package/dist/components/conversation/code-block/code-block-shared.js +2 -2
  35. package/dist/components/conversation/code-block/code-block.class.d.ts +4 -3
  36. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  37. package/dist/components/conversation/code-block/shiki-types.d.ts +2 -0
  38. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  39. package/dist/components/conversation/conversation-item/conversation-item.class.js +1 -1
  40. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  41. package/dist/components/conversation/markdown/markdown-core.class.d.ts +1 -1
  42. package/dist/components/conversation/markdown/markdown.class.d.ts +1 -1
  43. package/dist/components/conversation/message-actions/message-actions.class.d.ts +2 -0
  44. package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
  45. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +3 -1
  46. package/dist/components/conversation/message-feedback/message-feedback.class.js +2 -2
  47. package/dist/components/conversation/message-parts/message-parts.class.d.ts +3 -0
  48. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  49. package/dist/components/conversation/thread-list/thread-list.class.js +1 -1
  50. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +2 -0
  51. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  52. package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts +2 -1
  53. package/dist/components/conversation/typing-indicator/typing-indicator.class.js +1 -1
  54. package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.d.ts +3 -0
  55. package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.js +1 -0
  56. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +4 -2
  57. package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
  58. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  59. package/dist/components/conversation/widget-renderer/resolve.d.ts +4 -6
  60. package/dist/components/conversation/widget-renderer/resolve.js +1 -1
  61. package/dist/components/data/calendar/calendar.class.d.ts +6 -3
  62. package/dist/components/data/calendar/calendar.class.js +1 -1
  63. package/dist/components/data/calendar/calendar.styles.js +1 -1
  64. package/dist/components/data/condition-builder/condition-builder.class.d.ts +3 -1
  65. package/dist/components/data/condition-builder/condition-builder.class.js +15 -1
  66. package/dist/components/data/context-meter/context-meter.class.js +2 -2
  67. package/dist/components/data/data-grid/data-grid.class.d.ts +6 -2
  68. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  69. package/dist/components/data/document-library/document-library.class.d.ts +5 -2
  70. package/dist/components/data/document-library/document-library.class.js +1 -1
  71. package/dist/components/data/file-tree/file-tree.class.d.ts +2 -1
  72. package/dist/components/data/file-tree/file-tree.class.js +1 -1
  73. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +5 -2
  74. package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
  75. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  76. package/dist/components/data/flow-canvas/flow-types.d.ts +2 -1
  77. package/dist/components/data/funnel/funnel.class.d.ts +1 -0
  78. package/dist/components/data/funnel/funnel.class.js +1 -1
  79. package/dist/components/data/gauge/gauge.class.d.ts +4 -1
  80. package/dist/components/data/gauge/gauge.class.js +6 -6
  81. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +5 -2
  82. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +15 -1
  83. package/dist/components/data/heatmap/heatmap.class.d.ts +7 -4
  84. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  85. package/dist/components/data/sparkline/sparkline.class.d.ts +2 -1
  86. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  87. package/dist/components/data/stat/stat.class.d.ts +6 -2
  88. package/dist/components/data/stat/stat.class.js +1 -1
  89. package/dist/components/data/table/table.class.d.ts +5 -2
  90. package/dist/components/data/table/table.class.js +2 -2
  91. package/dist/components/data/timeline/timeline.class.d.ts +7 -2
  92. package/dist/components/data/timeline/timeline.class.js +1 -1
  93. package/dist/components/data/timeline/timeline.styles.js +1 -1
  94. package/dist/components/data/tree/tree-item.class.d.ts +3 -1
  95. package/dist/components/data/tree/tree-item.class.js +1 -1
  96. package/dist/components/data/tree/tree.class.d.ts +4 -1
  97. package/dist/components/data/tree/tree.class.js +1 -1
  98. package/dist/components/data/word-cloud/word-cloud-layout.d.ts +2 -1
  99. package/dist/components/data/word-cloud/word-cloud-layout.js +1 -1
  100. package/dist/components/data/word-cloud/word-cloud.class.d.ts +2 -1
  101. package/dist/components/forms/button/button.class.d.ts +5 -3
  102. package/dist/components/forms/button/button.class.js +1 -1
  103. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  104. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  105. package/dist/components/forms/code-editor/code-editor.class.d.ts +11 -3
  106. package/dist/components/forms/code-editor/code-editor.class.js +6 -7
  107. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  108. package/dist/components/forms/color-picker/color-picker.class.d.ts +5 -1
  109. package/dist/components/forms/color-picker/color-picker.class.js +4 -4
  110. package/dist/components/forms/combobox/combobox.class.d.ts +19 -8
  111. package/dist/components/forms/combobox/combobox.class.js +3 -3
  112. package/dist/components/forms/combobox/option.class.d.ts +4 -0
  113. package/dist/components/forms/combobox/option.class.js +2 -2
  114. package/dist/components/forms/date-picker/calendar-core.d.ts +1 -1
  115. package/dist/components/forms/date-picker/calendar-core.js +1 -1
  116. package/dist/components/forms/date-picker/date-input.class.d.ts +20 -10
  117. package/dist/components/forms/date-picker/date-input.class.js +4 -4
  118. package/dist/components/forms/date-picker/date-picker.class.d.ts +24 -13
  119. package/dist/components/forms/date-picker/date-picker.class.js +7 -7
  120. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  121. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +11 -3
  122. package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -3
  123. package/dist/components/forms/emoji-picker/emoji-types.d.ts +2 -2
  124. package/dist/components/forms/icon-button/icon-button.class.d.ts +4 -2
  125. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  126. package/dist/components/forms/input/input.class.d.ts +5 -1
  127. package/dist/components/forms/input/input.class.js +1 -1
  128. package/dist/components/forms/input/native-time-input.class.d.ts +3 -0
  129. package/dist/components/forms/input/number-input.class.d.ts +3 -0
  130. package/dist/components/forms/input/time-input.class.d.ts +3 -0
  131. package/dist/components/forms/input/time-input.class.js +1 -1
  132. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +5 -1
  133. package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
  134. package/dist/components/forms/otp-input/otp-input.class.d.ts +5 -1
  135. package/dist/components/forms/otp-input/otp-input.class.js +1 -1
  136. package/dist/components/forms/phone-input/phone-input.class.d.ts +21 -8
  137. package/dist/components/forms/phone-input/phone-input.class.js +1 -1
  138. package/dist/components/forms/radio/radio-button.class.d.ts +4 -0
  139. package/dist/components/forms/radio/radio-group.class.d.ts +4 -1
  140. package/dist/components/forms/radio/radio-group.class.js +1 -1
  141. package/dist/components/forms/radio/radio.class.d.ts +6 -2
  142. package/dist/components/forms/radio/radio.class.js +1 -1
  143. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +7 -1
  144. package/dist/components/forms/rubric-form/rubric-form.class.js +3 -3
  145. package/dist/components/forms/select/select.class.d.ts +8 -2
  146. package/dist/components/forms/select/select.class.js +2 -2
  147. package/dist/components/forms/slider/slider.class.d.ts +12 -6
  148. package/dist/components/forms/slider/slider.class.js +2 -2
  149. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +4 -0
  150. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  151. package/dist/components/forms/switch/switch.class.d.ts +5 -1
  152. package/dist/components/forms/switch/switch.class.js +1 -1
  153. package/dist/components/forms/textarea/textarea.class.d.ts +3 -0
  154. package/dist/components/forms/textarea/textarea.class.js +1 -1
  155. package/dist/components/forms/time-range/time-range.class.d.ts +3 -0
  156. package/dist/components/forms/time-range/time-range.class.js +1 -1
  157. package/dist/components/forms/token-input/token-input.class.d.ts +8 -2
  158. package/dist/components/forms/token-input/token-input.class.js +2 -2
  159. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  160. package/dist/components/layout/app-rail/app-rail.class.d.ts +3 -1
  161. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  162. package/dist/components/layout/carousel/carousel.class.d.ts +3 -2
  163. package/dist/components/layout/carousel/carousel.class.js +1 -1
  164. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  165. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +2 -0
  166. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  167. package/dist/components/layout/details/details.class.d.ts +3 -3
  168. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -1
  169. package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
  170. package/dist/components/layout/menu/menu-label.class.d.ts +3 -3
  171. package/dist/components/layout/menu/menu.class.d.ts +4 -1
  172. package/dist/components/layout/menu/menu.class.js +1 -1
  173. package/dist/components/layout/multi-split/multi-split.class.d.ts +9 -3
  174. package/dist/components/layout/multi-split/multi-split.class.js +1 -1
  175. package/dist/components/layout/multi-split/multi-split.styles.js +1 -1
  176. package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -1
  177. package/dist/components/layout/reorder-list/reorder-item.class.js +1 -1
  178. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  179. package/dist/components/layout/reorder-list/reorder-owner.js +1 -1
  180. package/dist/components/layout/split-panel/split-panel.class.d.ts +2 -1
  181. package/dist/components/layout/split-panel/split-panel.class.js +1 -1
  182. package/dist/components/layout/tab-group/tab-group.class.d.ts +3 -1
  183. package/dist/components/layout/tab-group/tab-group.class.js +1 -1
  184. package/dist/components/layout/widget/widget.class.d.ts +6 -2
  185. package/dist/components/layout/widget/widget.class.js +1 -1
  186. package/dist/components/media/animation/animation.class.d.ts +3 -2
  187. package/dist/components/media/animation/animation.class.js +1 -1
  188. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +4 -3
  189. package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
  190. package/dist/components/media/av-player/av-metadata.d.ts +3 -2
  191. package/dist/components/media/av-player/av-player.class.d.ts +4 -3
  192. package/dist/components/media/av-player/av-player.class.js +3 -3
  193. package/dist/components/media/av-player/av-player.styles.js +1 -1
  194. package/dist/components/media/avatar/avatar.class.d.ts +2 -1
  195. package/dist/components/media/avatar/avatar.class.js +1 -1
  196. package/dist/components/media/file-input/file-input.class.d.ts +4 -2
  197. package/dist/components/media/file-input/file-input.class.js +1 -1
  198. package/dist/components/media/file-input/file-input.styles.js +1 -1
  199. package/dist/components/media/image-viewer/image-viewer.class.d.ts +2 -1
  200. package/dist/components/media/image-viewer/image-viewer.class.js +1 -1
  201. package/dist/components/media/image-viewer/image-viewer.styles.js +1 -1
  202. package/dist/components/media/map/map.class.d.ts +5 -3
  203. package/dist/components/media/map/map.class.js +1 -1
  204. package/dist/components/media/map/map.styles.js +1 -1
  205. package/dist/components/media/media-card/media-card.class.d.ts +1 -1
  206. package/dist/components/media/media-card/media-card.class.js +1 -1
  207. package/dist/components/media/pan-zoom/pan-zoom.class.js +1 -1
  208. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +1 -1
  209. package/dist/components/media/sequence-playback/sequence-playback.styles.js +1 -1
  210. package/dist/components/media/video/video.class.d.ts +2 -1
  211. package/dist/components/media/video/video.styles.js +1 -1
  212. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
  213. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
  214. package/dist/components/overlays/chip/chip-group.class.d.ts +2 -0
  215. package/dist/components/overlays/chip/chip-group.class.js +1 -1
  216. package/dist/components/overlays/dialog/dialog.class.d.ts +2 -0
  217. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  218. package/dist/components/overlays/empty/empty.class.d.ts +2 -0
  219. package/dist/components/overlays/empty/empty.class.js +1 -1
  220. package/dist/components/overlays/kbd/kbd.class.d.ts +2 -0
  221. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  222. package/dist/components/overlays/overlay/popover.class.d.ts +3 -1
  223. package/dist/components/overlays/overlay/popover.class.js +1 -1
  224. package/dist/components/overlays/overlay/tooltip.class.d.ts +3 -1
  225. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  226. package/dist/components/overlays/rating/rating.class.d.ts +2 -0
  227. package/dist/components/overlays/rating/rating.class.js +1 -1
  228. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +2 -2
  229. package/dist/components/retrieval/entity-card/entity-card.class.d.ts +5 -2
  230. package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
  231. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +4 -2
  232. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  233. package/dist/components/retrieval/graph/graph-canvas.js +1 -1
  234. package/dist/components/retrieval/graph/graph.class.d.ts +9 -7
  235. package/dist/components/retrieval/graph/graph.class.js +1 -1
  236. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +1 -3
  237. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +2 -0
  238. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +1 -1
  239. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +3 -2
  240. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +7 -3
  241. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +2 -1
  242. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +1 -1
  243. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +2 -1
  244. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  245. package/dist/components/utility/format/format-number.class.d.ts +3 -1
  246. package/dist/components/utility/format/format-options.js +1 -1
  247. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -2
  248. package/dist/components/utility/json-viewer/json-viewer.class.js +2 -2
  249. package/dist/components/utility/known-date/known-date.class.d.ts +9 -5
  250. package/dist/components/utility/known-date/known-date.class.js +2 -2
  251. package/dist/components/utility/known-date/known-date.styles.js +1 -1
  252. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +3 -1
  253. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  254. package/dist/components/utility/poll-status/poll-status.class.d.ts +3 -0
  255. package/dist/components/utility/poll-status/poll-status.styles.js +1 -1
  256. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +1 -0
  257. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +1 -1
  258. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +2 -1
  259. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +1 -1
  260. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  261. package/dist/components/viewers/document-preview/document-preview.class.js +1 -1
  262. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  263. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +3 -2
  264. package/dist/components/viewers/document-viewer/document-viewer.class.js +2 -2
  265. package/dist/components/viewers/document-viewer/registry-ownership.d.ts +1 -0
  266. package/dist/components/viewers/document-viewer/registry-ownership.js +1 -0
  267. package/dist/components/viewers/document-viewer/registry.js +1 -1
  268. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +7 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  270. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +2 -1
  271. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  272. package/dist/components/viewers/include/include-resource.js +1 -1
  273. package/dist/components/viewers/include/include.class.d.ts +3 -1
  274. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +4 -2
  275. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +4 -4
  276. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +1 -1
  277. package/dist/components/viewers/passive-markup.js +1 -1
  278. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +2 -1
  279. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +1 -1
  280. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +2 -1
  281. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
  282. package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
  283. package/dist/custom-elements-jsx.d.ts +1 -1
  284. package/dist/internal/aria-reflection.js +1 -1
  285. package/dist/internal/catalog-picker.js +1 -1
  286. package/dist/internal/default-strings.generated.d.ts +1 -1
  287. package/dist/internal/default-strings.generated.js +1 -1
  288. package/dist/internal/dev-mode-attribute-warning.d.ts +3 -0
  289. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  290. package/dist/internal/form-associated.js +1 -1
  291. package/dist/internal/localization-types.d.ts +1 -1
  292. package/dist/internal/localization.js +1 -1
  293. package/dist/internal/lyra-element.js +1 -1
  294. package/dist/internal/native-control-description.d.ts +7 -0
  295. package/dist/internal/native-control-description.js +1 -0
  296. package/dist/internal/option-selection.js +1 -1
  297. package/dist/internal/overlay-order.d.ts +6 -0
  298. package/dist/internal/overlay-order.js +1 -0
  299. package/dist/internal/overlay-stack.d.ts +1 -1
  300. package/dist/internal/overlay-stack.js +1 -1
  301. package/dist/internal/package-metadata.d.ts +1 -1
  302. package/dist/internal/package-metadata.js +1 -1
  303. package/dist/internal/positioner.d.ts +5 -4
  304. package/dist/internal/reactive-property-writes.d.ts +1 -0
  305. package/dist/internal/reactive-property-writes.js +1 -0
  306. package/dist/internal/svg-title.d.ts +3 -0
  307. package/dist/internal/svg-title.js +1 -0
  308. package/dist/svelte.d.ts +1 -1
  309. package/dist/translations/ar.js +1 -1
  310. package/dist/translations/de.js +1 -1
  311. package/dist/translations/es.js +1 -1
  312. package/dist/translations/fa.js +1 -1
  313. package/dist/translations/fr.js +1 -1
  314. package/dist/translations/he.js +1 -1
  315. package/dist/translations/ja.js +1 -1
  316. package/dist/translations/pt-BR.js +1 -1
  317. package/dist/translations/ru.js +1 -1
  318. package/dist/translations/zh-CN.js +1 -1
  319. package/dist/vue.d.ts +1 -1
  320. package/llms/components/lr-accordion-item.md +4 -0
  321. package/llms/components/lr-accordion.md +4 -0
  322. package/llms/components/lr-agent-trace.md +3 -0
  323. package/llms/components/lr-animation.md +4 -0
  324. package/llms/components/lr-app-rail-item.md +4 -2
  325. package/llms/components/lr-app-rail.md +4 -2
  326. package/llms/components/lr-attachment-chip.md +6 -0
  327. package/llms/components/lr-av-player.md +14 -0
  328. package/llms/components/lr-avatar.md +4 -0
  329. package/llms/components/lr-box-plot.md +6 -0
  330. package/llms/components/lr-button.md +11 -3
  331. package/llms/components/lr-calendar-viewer.md +4 -0
  332. package/llms/components/lr-calendar.md +5 -0
  333. package/llms/components/lr-carousel.md +5 -0
  334. package/llms/components/lr-chart.md +13 -4
  335. package/llms/components/lr-chat-message.md +4 -0
  336. package/llms/components/lr-checkbox.md +3 -0
  337. package/llms/components/lr-chip-group.md +3 -0
  338. package/llms/components/lr-chip.md +3 -0
  339. package/llms/components/lr-code-block-core.md +16 -4
  340. package/llms/components/lr-code-block.md +7 -0
  341. package/llms/components/lr-code-editor.md +18 -5
  342. package/llms/components/lr-color-picker.md +9 -0
  343. package/llms/components/lr-combobox.md +35 -4
  344. package/llms/components/lr-command-palette.md +4 -0
  345. package/llms/components/lr-commit-card.md +3 -0
  346. package/llms/components/lr-compare-panel.md +7 -0
  347. package/llms/components/lr-condition-builder.md +5 -0
  348. package/llms/components/lr-conversation-item.md +3 -0
  349. package/llms/components/lr-copy-button.md +6 -0
  350. package/llms/components/lr-dashboard-grid.md +5 -0
  351. package/llms/components/lr-data-grid.md +11 -1
  352. package/llms/components/lr-dataset-viewer.md +3 -2
  353. package/llms/components/lr-date-input.md +46 -6
  354. package/llms/components/lr-date-picker.md +46 -6
  355. package/llms/components/lr-details.md +4 -0
  356. package/llms/components/lr-dialog.md +4 -0
  357. package/llms/components/lr-document-library.md +4 -0
  358. package/llms/components/lr-document-preview.md +7 -1
  359. package/llms/components/lr-document-viewer.md +9 -3
  360. package/llms/components/lr-dropdown-item.md +4 -0
  361. package/llms/components/lr-dropdown.md +3 -0
  362. package/llms/components/lr-ebook-viewer.md +4 -0
  363. package/llms/components/lr-email-viewer.md +5 -0
  364. package/llms/components/lr-emoji-picker.md +17 -3
  365. package/llms/components/lr-empty.md +3 -0
  366. package/llms/components/lr-entity-card.md +3 -0
  367. package/llms/components/lr-entity-chip.md +4 -0
  368. package/llms/components/lr-file-input.md +7 -0
  369. package/llms/components/lr-file-tree.md +5 -1
  370. package/llms/components/lr-filter-bar.md +5 -0
  371. package/llms/components/lr-flow-canvas.md +8 -1
  372. package/llms/components/lr-flow-node.md +2 -1
  373. package/llms/components/lr-flow-run-status.md +1 -1
  374. package/llms/components/lr-format-number.md +4 -0
  375. package/llms/components/lr-funnel.md +4 -0
  376. package/llms/components/lr-gauge.md +4 -0
  377. package/llms/components/lr-generation-metrics.md +5 -0
  378. package/llms/components/lr-graph-query-builder.md +6 -0
  379. package/llms/components/lr-graph.md +8 -2
  380. package/llms/components/lr-heatmap.md +13 -0
  381. package/llms/components/lr-icon-button.md +7 -0
  382. package/llms/components/lr-image-viewer.md +9 -0
  383. package/llms/components/lr-include.md +5 -0
  384. package/llms/components/lr-ingestion-queue.md +4 -0
  385. package/llms/components/lr-input.md +22 -8
  386. package/llms/components/lr-json-viewer.md +4 -0
  387. package/llms/components/lr-kbd.md +3 -0
  388. package/llms/components/lr-knowledge-graph-explorer.md +7 -0
  389. package/llms/components/lr-known-date.md +7 -0
  390. package/llms/components/lr-lite-chart.md +21 -4
  391. package/llms/components/lr-live-region.md +3 -0
  392. package/llms/components/lr-locale-picker.md +6 -0
  393. package/llms/components/lr-map.md +8 -0
  394. package/llms/components/lr-markdown-core.md +4 -0
  395. package/llms/components/lr-markdown.md +8 -4
  396. package/llms/components/lr-media-card.md +5 -2
  397. package/llms/components/lr-mention-popover.md +5 -0
  398. package/llms/components/lr-menu-item.md +4 -0
  399. package/llms/components/lr-menu-label.md +4 -3
  400. package/llms/components/lr-menu.md +4 -0
  401. package/llms/components/lr-message-actions.md +3 -0
  402. package/llms/components/lr-message-feedback.md +4 -0
  403. package/llms/components/lr-message-parts.md +3 -2
  404. package/llms/components/lr-model-select.md +8 -0
  405. package/llms/components/lr-multi-split.md +15 -6
  406. package/llms/components/lr-native-time-input.md +10 -0
  407. package/llms/components/lr-node-palette.md +3 -0
  408. package/llms/components/lr-notebook-viewer.md +4 -1
  409. package/llms/components/lr-number-input.md +12 -1
  410. package/llms/components/lr-option.md +35 -4
  411. package/llms/components/lr-otp-input.md +10 -0
  412. package/llms/components/lr-pan-zoom.md +1 -2
  413. package/llms/components/lr-phone-input.md +20 -5
  414. package/llms/components/lr-poll-status.md +4 -0
  415. package/llms/components/lr-popover.md +3 -0
  416. package/llms/components/lr-popup.md +3 -2
  417. package/llms/components/lr-prompt-studio.md +7 -0
  418. package/llms/components/lr-provenance-panel.md +3 -0
  419. package/llms/components/lr-push-to-talk.md +3 -0
  420. package/llms/components/lr-radio-button.md +13 -4
  421. package/llms/components/lr-radio-group.md +5 -0
  422. package/llms/components/lr-radio.md +9 -0
  423. package/llms/components/lr-rating.md +3 -0
  424. package/llms/components/lr-reorder-item.md +6 -0
  425. package/llms/components/lr-reorder-list.md +6 -0
  426. package/llms/components/lr-result-card.md +3 -0
  427. package/llms/components/lr-result-field.md +3 -0
  428. package/llms/components/lr-rubric-form.md +12 -0
  429. package/llms/components/lr-select.md +9 -0
  430. package/llms/components/lr-sequence-playback.md +4 -0
  431. package/llms/components/lr-slider.md +16 -4
  432. package/llms/components/lr-source-picker.md +4 -0
  433. package/llms/components/lr-span-waterfall.md +3 -0
  434. package/llms/components/lr-sparkline.md +4 -0
  435. package/llms/components/lr-split-panel.md +4 -0
  436. package/llms/components/lr-stack-trace.md +3 -0
  437. package/llms/components/lr-stat.md +10 -0
  438. package/llms/components/lr-subagent-panel.md +3 -2
  439. package/llms/components/lr-svg-viewer.md +3 -0
  440. package/llms/components/lr-swatch-picker.md +4 -0
  441. package/llms/components/lr-switch.md +6 -0
  442. package/llms/components/lr-tab-group.md +4 -0
  443. package/llms/components/lr-table.md +10 -2
  444. package/llms/components/lr-terminal.md +3 -0
  445. package/llms/components/lr-textarea.md +9 -0
  446. package/llms/components/lr-thread-list.md +6 -3
  447. package/llms/components/lr-time-input.md +3 -0
  448. package/llms/components/lr-time-range.md +5 -0
  449. package/llms/components/lr-timeline-item.md +6 -0
  450. package/llms/components/lr-timeline.md +6 -0
  451. package/llms/components/lr-token-input.md +14 -0
  452. package/llms/components/lr-tool-call-chip.md +5 -3
  453. package/llms/components/lr-tool-param-form.md +4 -0
  454. package/llms/components/lr-tool-result-dialog.md +4 -0
  455. package/llms/components/lr-tool-select-dialog.md +4 -0
  456. package/llms/components/lr-tooltip.md +6 -0
  457. package/llms/components/lr-trace-tree.md +3 -0
  458. package/llms/components/lr-transcript-feed.md +3 -0
  459. package/llms/components/lr-tree-item.md +12 -5
  460. package/llms/components/lr-tree.md +12 -5
  461. package/llms/components/lr-typing-indicator.md +3 -0
  462. package/llms/components/lr-usage-badge.md +4 -0
  463. package/llms/components/lr-video.md +8 -2
  464. package/llms/components/lr-virtual-list.md +5 -3
  465. package/llms/components/lr-voice-picker.md +8 -0
  466. package/llms/components/lr-widget-renderer.md +9 -0
  467. package/llms/components/lr-widget.md +4 -2
  468. package/llms/components/lr-word-cloud.md +4 -0
  469. package/llms/components/lr-xml-viewer.md +9 -2
  470. package/llms/components/lr-zoomable-frame.md +6 -3
  471. package/llms-full.txt +4080 -2711
  472. package/package.json +4 -4
  473. package/vscode-css-data.json +1 -1
  474. package/vscode-html-data.json +1 -1
  475. package/web-types.json +1 -1
@@ -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{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{renderInertPresentation}from"../../../internal/inert-presentation.js";import{activateOverlay,collectFocusableElements,deepActiveElement}from"../../../internal/overlay-manager.js";import{readPersistedState,writePersistedState}from"../../../internal/persisted-state.js";import{nextId}from"../../../internal/a11y.js";import{bindAccessibleTextObserver,composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{observeScrollOverflow}from"../../../internal/scroll-overflow.js";import{chevronIcon,closeIcon,expandIcon}from"../../../internal/icons.js";import{styles}from"./widget.styles.js";import{sanitizeCssInset}from"../../../internal/safe-css.js";import{LYRA_DEFAULT_widgetCollapse,LYRA_DEFAULT_widgetExitFullscreen,LYRA_DEFAULT_widgetExpand,LYRA_DEFAULT_widgetExpandToFullscreen,LYRA_DEFAULT_widgetFullscreenPanel,LYRA_DEFAULT_widgetViewGroup}from"../../../internal/default-strings.generated.js";const MAX_WIDGET_VIEWS=256;function snapshotWidgetViews(value){if(!Array.isArray(value))return Object.freeze([]);const seen=new Set,normalized=[];for(const candidate of value.slice(0,MAX_WIDGET_VIEWS))try{if(!candidate||typeof candidate!="object")continue;const record=candidate,viewId=record.viewId;if(typeof viewId!="string"||viewId.length===0||viewId!==viewId.trim()||seen.has(viewId))continue;const label=record.label,ariaLabel=record.ariaLabel,icon=record.icon;if(label!==void 0&&typeof label!="string"||ariaLabel!==void 0&&typeof ariaLabel!="string")continue;seen.add(viewId),normalized.push(Object.freeze({viewId,...label!==void 0?{label}:{},...icon!==void 0?{icon}:{},...ariaLabel!==void 0?{ariaLabel}:{}}))}catch{}return Object.freeze(normalized)}class LyraWidget extends LyraElement{constructor(){super(...arguments),this.actionsScrollOverflow=observeScrollOverflow(this,()=>this.renderRoot.querySelector('[part="actions"]')),this.viewTogglesScrollOverflow=observeScrollOverflow(this,()=>this.renderRoot.querySelector('[part="view-toggles"]')),this.label="",this.accessibleLabel=null,this.sublabel="",this.collapsible=!1,this.collapsed=!1,this.expandable=!1,this.fullscreen=!1,this.fullscreenInset="",this.backdropInset="",this.compact=!1,this.effectiveViews=Object.freeze([]),this.activeViewId="",this.activeView="",this.hasActionsSlot=!1,this.hasIconSlot=!1,this.hasLabelSlot=!1,this.hasSublabelSlot=!1,this.labelSlotObserverGeneration=0,this.ownerRealmGeneration=0,this.bodyId=nextId("widget-body"),this.persistReady=!1,this.onActionsSlotChange=e=>{this.hasActionsSlot=e.target.assignedElements({flatten:!0}).length>0},this.onIconSlotChange=e=>{this.hasIconSlot=e.target.assignedElements({flatten:!0}).length>0},this.onLabelSlotChange=e=>{const assigned=e.target.assignedElements({flatten:!0});this.syncLabelSlot(assigned)},this.onSublabelSlotChange=e=>{this.hasSublabelSlot=e.target.assignedElements({flatten:!0}).length>0},this.setActiveView=viewId=>{viewId===this.activeViewId||this.emit("lr-view-request",{viewId},{cancelable:!0}).defaultPrevented||(this.activeViewId=viewId,this.emit("lr-view-change",{viewId}))},this.toggleCollapsed=()=>{this.requestCollapse(!this.collapsed)},this.toggleFullscreen=e=>{const next=!this.fullscreen,trigger=e.currentTarget;this.requestFullscreenChange(next)&&next&&(this.explicitTrigger=trigger)},this.dismissFullscreen=()=>{this.fullscreen&&this.requestFullscreenChange(!1)},this.onBackdropClick=()=>{this.overlayHandle?.dismissBackdrop()}}static{this.defaultStrings={...super.defaultStrings,widgetCollapse:LYRA_DEFAULT_widgetCollapse,widgetExitFullscreen:LYRA_DEFAULT_widgetExitFullscreen,widgetExpand:LYRA_DEFAULT_widgetExpand,widgetExpandToFullscreen:LYRA_DEFAULT_widgetExpandToFullscreen,widgetFullscreenPanel:LYRA_DEFAULT_widgetFullscreenPanel,widgetViewGroup:LYRA_DEFAULT_widgetViewGroup}}static{this.styles=[LyraElement.styles,styles]}get views(){return this.effectiveViews}set views(value){const previous=this.effectiveViews;this.effectiveViews=snapshotWidgetViews(value),this.requestUpdate("views",previous)}get storageFullKey(){return this.storageKey?`lr-widget:${this.storageKey}`:void 0}willUpdate(changed){if(super.willUpdate(changed),!this.hasUpdated){this.hasActionsSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="actions"),this.hasIconSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="icon");const labelChildren=Array.from(this.children).filter(el=>el.getAttribute("slot")==="label");this.hasLabelSlot=labelChildren.length>0,this.labelSlotText=this.readLabelSlotText(labelChildren),this.hasSublabelSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="sublabel");const parsed=readPersistedState(this.storageFullKey,v=>typeof v=="object"&&v!==null);parsed&&typeof parsed.collapsed=="boolean"&&(this.collapsed=parsed.collapsed)}if(changed.has("fullscreen")&&(this.fullscreen?this.activateFullscreenOverlay():this.deactivateFullscreenOverlay()),changed.has("activeView")&&this.activeView!==""&&(this.activeViewId=this.activeView),changed.has("views")||changed.has("activeViewId")||changed.has("activeView")){const focused=this.renderRoot?.querySelector('[part="view-toggle"]:focus');this.focusedViewIdBeforeUpdate=focused?.dataset.viewId;const views=this.views;views.some(view=>view.viewId===this.activeViewId)||(this.activeViewId=views[0]?.viewId??"")}}updated(changed){super.updated(changed);const actionsSlot=this.renderRoot.querySelector('slot[name="actions"]');if(this.actionsScrollOverflow.observeExtra(actionsSlot?actionsSlot.assignedElements({flatten:!0}):[]),this.viewTogglesScrollOverflow.observeExtra(this.renderRoot.querySelectorAll('[part="view-toggle"]')),this.persistReady&&changed.has("collapsed")&&writePersistedState(this.storageFullKey,{collapsed:this.collapsed}),this.persistReady=!0,changed.has("fullscreen")&&this.fullscreen)this.overlayHandle?.focusInitial();else if(changed.has("collapsed")&&this.fullscreen){const panel=this.shadowRoot?.querySelector('[part="base"]'),active=deepActiveElement(this.ownerDocument);panel&&!collectFocusableElements(panel).includes(active)&&(active&&typeof active.blur=="function"&&active.blur(),this.overlayHandle?.focusInitial())}if(changed.has("views")||changed.has("activeViewId")){const focusedId=this.focusedViewIdBeforeUpdate;this.focusedViewIdBeforeUpdate=void 0,focusedId&&!this.views.some(view=>view.viewId===focusedId)&&Array.from(this.renderRoot.querySelectorAll('[part="view-toggle"]')).find(toggle=>toggle.dataset.viewId===this.activeViewId)?.focus()}}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.fullscreen&&(this.overlayHandle?.isActive()?this.overlayHandle.resume():this.activateFullscreenOverlay(),this.queueOwnerMicrotask(()=>this.overlayHandle?.focusInitial())),this.hasUpdated&&this.queueOwnerMicrotask(()=>{const slot=this.shadowRoot?.querySelector('slot[name="label"]');slot&&this.syncLabelSlot(slot.assignedElements({flatten:!0}))})}disconnectedCallback(){super.disconnectedCallback(),this.overlayHandle?.suspend(),this.resetOwnerRealmWork()}adoptedCallback(){super.adoptedCallback(),this.resetOwnerRealmWork()}resetOwnerRealmWork(){this.ownerRealmGeneration+=1,this.resetLabelSlotObserver()}queueOwnerMicrotask(callback){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||!this.isConnected)return;const generation=this.ownerRealmGeneration;ownerWindow.queueMicrotask(()=>{this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||callback()})}activateFullscreenOverlay(){this.overlayHandle=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="base"]')??null,onEscape:this.dismissFullscreen,onBackdrop:this.dismissFullscreen,restoreFocusTo:this.explicitTrigger,lockScroll:!0,suspendWhenUnrendered:!0}),this.explicitTrigger=void 0}deactivateFullscreenOverlay(){this.overlayHandle?.deactivate(),this.overlayHandle=void 0}syncLabelSlot(assigned){if(this.hasLabelSlot=assigned.length>0,this.labelSlotText=this.readLabelSlotText(assigned),this.resetLabelSlotObserver(),assigned.length===0||!this.isConnected)return;const ownerDocument=this.ownerDocument,MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const generation=this.labelSlotObserverGeneration,observer=new MutationObserverCtor(()=>{this.labelSlotObserver!==observer||this.labelSlotObserverDocument!==ownerDocument||this.labelSlotObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||(this.labelSlotText=this.readLabelSlotText(assigned))});this.labelSlotObserver=observer,this.labelSlotObserverDocument=ownerDocument,bindAccessibleTextObserver(observer,this,["alt","aria-labelledby","slot"]);for(const element of assigned)observer.observe(element,{attributes:!0,attributeFilter:["alt","aria-hidden","aria-label","aria-labelledby","class","hidden","inert","style"],childList:!0,characterData:!0,subtree:!0})}readLabelSlotText(assigned){return composedAccessibilityText(assigned).replace(/\s+/g," ").trim()||void 0}resetLabelSlotObserver(){this.labelSlotObserverGeneration+=1,this.labelSlotObserver?.disconnect(),this.labelSlotObserver=void 0,this.labelSlotObserverDocument=void 0}requestCollapse(next){this.emit("lr-collapse-request",{collapsed:next},{cancelable:!0}).defaultPrevented||(this.collapsed=next,this.emit("lr-collapse-change",{collapsed:next}))}requestFullscreenChange(next){return this.emit("lr-fullscreen-request",{fullscreen:next},{cancelable:!0}).defaultPrevented?!1:(this.fullscreen=next,this.emit("lr-fullscreen-change",{fullscreen:next}),!0)}render(){const hasLabel=this.label.length>0,hasSublabel=this.sublabel.length>0,views=this.views,fullscreenInset=sanitizeCssInset(this.fullscreenInset),backdropInset=sanitizeCssInset(this.backdropInset);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{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{renderInertPresentation}from"../../../internal/inert-presentation.js";import{activateOverlay,collectFocusableElements,deepActiveElement}from"../../../internal/overlay-manager.js";import{readPersistedState,writePersistedState}from"../../../internal/persisted-state.js";import{nextId}from"../../../internal/a11y.js";import{bindAccessibleTextObserver,composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{observeScrollOverflow}from"../../../internal/scroll-overflow.js";import{chevronIcon,closeIcon,expandIcon}from"../../../internal/icons.js";import{styles}from"./widget.styles.js";import{sanitizeCssInset}from"../../../internal/safe-css.js";import{LYRA_DEFAULT_widgetCollapse,LYRA_DEFAULT_widgetExitFullscreen,LYRA_DEFAULT_widgetExpand,LYRA_DEFAULT_widgetExpandToFullscreen,LYRA_DEFAULT_widgetFullscreenPanel,LYRA_DEFAULT_widgetViewGroup}from"../../../internal/default-strings.generated.js";const MAX_WIDGET_VIEWS=256;function snapshotWidgetViews(value){if(!Array.isArray(value))return Object.freeze([]);const seen=new Set,normalized=[];for(const candidate of value.slice(0,MAX_WIDGET_VIEWS))try{if(!candidate||typeof candidate!="object")continue;const record=candidate,viewId=record.viewId;if(typeof viewId!="string"||viewId.length===0||viewId!==viewId.trim()||seen.has(viewId))continue;const label=record.label,ariaLabel=record.ariaLabel,icon=record.icon;if(label!==void 0&&typeof label!="string"||ariaLabel!==void 0&&typeof ariaLabel!="string")continue;seen.add(viewId),normalized.push(Object.freeze({viewId,...label!==void 0?{label}:{},...icon!==void 0?{icon}:{},...ariaLabel!==void 0?{ariaLabel}:{}}))}catch{}return Object.freeze(normalized)}class LyraWidget extends LyraElement{constructor(){super(...arguments),this.actionsScrollOverflow=observeScrollOverflow(this,()=>this.renderRoot.querySelector('[part="actions"]')),this.viewTogglesScrollOverflow=observeScrollOverflow(this,()=>this.renderRoot.querySelector('[part="view-toggles"]')),this.label="",this.accessibleLabel=null,this.sublabel="",this.collapsible=!1,this.collapsed=!1,this.expandable=!1,this.fullscreen=!1,this.fullscreenInset="",this.backdropInset="",this.compact=!1,this.effectiveViews=Object.freeze([]),this.activeViewId="",this.activeView="",this.hasActionsSlot=!1,this.hasIconSlot=!1,this.hasLabelSlot=!1,this.hasSublabelSlot=!1,this.labelSlotObserverGeneration=0,this.ownerRealmGeneration=0,this.bodyId=nextId("widget-body"),this.persistReady=!1,this.onActionsSlotChange=e=>{this.hasActionsSlot=e.target.assignedElements({flatten:!0}).length>0},this.onIconSlotChange=e=>{this.hasIconSlot=e.target.assignedElements({flatten:!0}).length>0},this.onLabelSlotChange=e=>{const assigned=e.target.assignedElements({flatten:!0});this.syncLabelSlot(assigned)},this.onSublabelSlotChange=e=>{this.hasSublabelSlot=e.target.assignedElements({flatten:!0}).length>0},this.setActiveView=viewId=>{viewId===this.activeViewId||this.emit("lr-view-request",{viewId},{cancelable:!0}).defaultPrevented||(this.activeViewId=viewId,this.emit("lr-view-change",{viewId}))},this.toggleCollapsed=()=>{this.requestCollapse(!this.collapsed)},this.toggleFullscreen=e=>{const next=!this.fullscreen,trigger=e.currentTarget;this.requestFullscreenChange(next)&&next&&(this.explicitTrigger=trigger)},this.dismissFullscreen=()=>{this.fullscreen&&this.requestFullscreenChange(!1)},this.onBackdropClick=()=>{this.overlayHandle?.dismissBackdrop()}}static{this.defaultStrings={...super.defaultStrings,widgetCollapse:LYRA_DEFAULT_widgetCollapse,widgetExitFullscreen:LYRA_DEFAULT_widgetExitFullscreen,widgetExpand:LYRA_DEFAULT_widgetExpand,widgetExpandToFullscreen:LYRA_DEFAULT_widgetExpandToFullscreen,widgetFullscreenPanel:LYRA_DEFAULT_widgetFullscreenPanel,widgetViewGroup:LYRA_DEFAULT_widgetViewGroup}}static{this.styles=[LyraElement.styles,styles]}get views(){return this.effectiveViews}set views(value){const previous=this.effectiveViews;this.effectiveViews=snapshotWidgetViews(value),this.requestUpdate("views",previous)}get storageFullKey(){return this.storageKey?`lr-widget:${this.storageKey}`:void 0}willUpdate(changed){if(super.willUpdate(changed),!this.hasUpdated){this.hasActionsSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="actions"),this.hasIconSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="icon");const labelChildren=Array.from(this.children).filter(el=>el.getAttribute("slot")==="label");this.hasLabelSlot=labelChildren.length>0,this.labelSlotText=this.readLabelSlotText(labelChildren),this.hasSublabelSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="sublabel");const parsed=readPersistedState(this.storageFullKey,v=>typeof v=="object"&&v!==null);parsed&&typeof parsed.collapsed=="boolean"&&(this.collapsed=parsed.collapsed)}if(changed.has("fullscreen")&&(this.fullscreen?this.activateFullscreenOverlay():this.deactivateFullscreenOverlay()),changed.has("activeView")&&this.activeView!==""&&(this.activeViewId=this.activeView),changed.has("views")||changed.has("activeViewId")||changed.has("activeView")){const focused=this.renderRoot?.querySelector('[part="view-toggle"]:focus');this.focusedViewIdBeforeUpdate=focused?.dataset.viewId;const views=this.views;views.some(view=>view.viewId===this.activeViewId)||(this.activeViewId=views[0]?.viewId??"")}}updated(changed){super.updated(changed);const actionsSlot=this.renderRoot.querySelector('slot[name="actions"]');if(this.actionsScrollOverflow.observeExtra(actionsSlot?actionsSlot.assignedElements({flatten:!0}):[]),this.viewTogglesScrollOverflow.observeExtra(this.renderRoot.querySelectorAll('[part="view-toggle"]')),this.persistReady&&changed.has("collapsed")&&writePersistedState(this.storageFullKey,{collapsed:this.collapsed}),this.persistReady=!0,changed.has("fullscreen")&&this.fullscreen)this.overlayHandle?.focusInitial();else if(changed.has("collapsed")&&this.fullscreen){const panel=this.shadowRoot?.querySelector('[part="base"]'),active=deepActiveElement(this.ownerDocument);panel&&!collectFocusableElements(panel).includes(active)&&(active&&typeof active.blur=="function"&&active.blur(),this.overlayHandle?.focusInitial())}if(changed.has("views")||changed.has("activeViewId")){const focusedId=this.focusedViewIdBeforeUpdate;this.focusedViewIdBeforeUpdate=void 0,focusedId&&!this.views.some(view=>view.viewId===focusedId)&&Array.from(this.renderRoot.querySelectorAll('[part="view-toggle"]')).find(toggle=>toggle.dataset.viewId===this.activeViewId)?.focus()}}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.fullscreen&&(this.overlayHandle?.isActive()?this.overlayHandle.resume():this.activateFullscreenOverlay(),this.queueOwnerMicrotask(()=>this.overlayHandle?.focusInitial())),this.hasUpdated&&this.queueOwnerMicrotask(()=>{const slot=this.shadowRoot?.querySelector('slot[name="label"]');slot&&this.syncLabelSlot(slot.assignedElements({flatten:!0}))})}disconnectedCallback(){super.disconnectedCallback(),this.overlayHandle?.suspend(),this.resetOwnerRealmWork()}adoptedCallback(){super.adoptedCallback(),this.resetOwnerRealmWork()}resetOwnerRealmWork(){this.ownerRealmGeneration+=1,this.resetLabelSlotObserver()}queueOwnerMicrotask(callback){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||!this.isConnected)return;const generation=this.ownerRealmGeneration;ownerWindow.queueMicrotask(()=>{this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||callback()})}activateFullscreenOverlay(){this.overlayHandle=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="base"]')??null,onEscape:this.dismissFullscreen,onBackdrop:this.dismissFullscreen,restoreFocusTo:this.explicitTrigger,lockScroll:!0,suspendWhenUnrendered:!0}),this.explicitTrigger=void 0}deactivateFullscreenOverlay(){this.overlayHandle?.deactivate(),this.overlayHandle=void 0}syncLabelSlot(assigned){if(this.hasLabelSlot=assigned.length>0,this.labelSlotText=this.readLabelSlotText(assigned),this.resetLabelSlotObserver(),assigned.length===0||!this.isConnected)return;const ownerDocument=this.ownerDocument,MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const generation=this.labelSlotObserverGeneration,observer=new MutationObserverCtor(()=>{this.labelSlotObserver!==observer||this.labelSlotObserverDocument!==ownerDocument||this.labelSlotObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||(this.labelSlotText=this.readLabelSlotText(assigned))});this.labelSlotObserver=observer,this.labelSlotObserverDocument=ownerDocument,bindAccessibleTextObserver(observer,this,["alt","aria-labelledby","slot"]);for(const element of assigned)observer.observe(element,{attributes:!0,attributeFilter:["alt","aria-hidden","aria-label","aria-labelledby","class","hidden","inert","style"],childList:!0,characterData:!0,subtree:!0})}readLabelSlotText(assigned){return composedAccessibilityText(assigned).replace(/\s+/g," ").trim()||void 0}resetLabelSlotObserver(){this.labelSlotObserverGeneration+=1,this.labelSlotObserver?.disconnect(),this.labelSlotObserver=void 0,this.labelSlotObserverDocument=void 0}requestCollapse(next){this.emit("lr-collapse-request",{collapsed:next},{cancelable:!0}).defaultPrevented||(this.collapsed=next,this.emit("lr-collapse-change",{collapsed:next}))}requestFullscreenChange(next){return this.emit("lr-fullscreen-request",{fullscreen:next},{cancelable:!0}).defaultPrevented?!1:(this.fullscreen=next,this.emit("lr-fullscreen-change",{fullscreen:next}),!0)}render(){const hasLabel=(this.label??"").length>0,hasSublabel=(this.sublabel??"").length>0,views=this.views,fullscreenInset=sanitizeCssInset(this.fullscreenInset),backdropInset=sanitizeCssInset(this.backdropInset);return html`
2
2
  ${this.fullscreen?html`<div
3
3
  part="backdrop"
4
4
  style=${backdropInset?styleMap({"--lr-widget-backdrop-inset":backdropInset}):nothing}
@@ -12,7 +12,8 @@ export type LyraAnimationTimingPreset='custom'|'fast'|'base'|'ambient';export in
12
12
  * native Web Animations API: a small curated preset catalog (`name`) or fully
13
13
  * custom `keyframes`, explicit WAAPI timing controls, an optional
14
14
  * `playOnVisible` trigger, and a `lr-start`/`lr-finish`/`lr-cancel` event
15
- * contract.
15
+ * contract. An initial playing mount creates one animation and emits one start; later target or
16
+ * timing changes still rebuild, and replay keeps its normal lifecycle.
16
17
  *
17
18
  * `keyframes`, when set, always wins over `name`. The `iterations` default is
18
19
  * `Infinity` (mirrors the upstream Web Awesome/Shoelace animation contract
@@ -63,7 +64,7 @@ export declare class LyraAnimation extends LyraElement<LyraAnimationEventMap>{st
63
64
  /** Built-in preset or consumer-registered `animation.<name>` key. */
64
65
  name:string;keyframes:Keyframe[]|undefined;play:boolean;delay:number;direction:PlaybackDirection;duration:number;easing:string;endDelay:number;fill:FillMode;iterations:number;iterationStart:number;playbackRate:number;timingPreset:LyraAnimationTimingPreset;respectReducedMotion:boolean;playOnVisible:boolean;playOnVisibleRepeat:boolean;rootMargin:string;private _threshold;
65
66
  /** Intersection thresholds for `playOnVisible`; arrays are bounded, filtered, and frozen. */
66
- get threshold():number|readonly number[];set threshold(next:number|readonly number[]);root:Element|null;private animation?;private hasStarted;private visibilityObserver?;private motionQuery?;private motionQueryListener?;private lastTextDirection?;private get safeDelay();private get safeDuration();private get safeEndDelay();
67
+ get threshold():number|readonly number[];set threshold(next:number|readonly number[]);root:Element|null;private animation?;private animationTarget?;private hasStarted;private visibilityObserver?;private motionQuery?;private motionQueryListener?;private lastTextDirection?;private get safeDelay();private get safeDuration();private get safeEndDelay();
67
68
  /** `iterations` normalized to a finite, non-negative real -- *or* `Infinity` verbatim.
68
69
  * `Infinity` is this property's own documented default (an animation that repeats forever,
69
70
  * mirroring the upstream Web Awesome/Shoelace contract) and a legitimate, spec-sanctioned
@@ -1 +1 @@
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}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteNumber,finiteRange}from"../../../internal/numbers.js";import{getAnimation}from"../../../utilities/animation-registry.js";import{styles}from"./animation.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{resolveCatalogAnimation,resolveNamedEasing}from"./animation-catalog.js";import{animations,getAnimationNames,getEasingNames,LYRA_ANIMATION_NAMES,LYRA_EASINGS}from"./animation-catalog.js";const MAX_VISIBILITY_THRESHOLDS=1e3;function snapshotVisibilityThreshold(value){if(!Array.isArray(value)){const threshold=typeof value=="number"?finiteNumber(value,-1):-1;return threshold>=0&&threshold<=1?threshold:0}try{const count=Math.min(value.length,MAX_VISIBILITY_THRESHOLDS),thresholds=[];for(let index=0;index<count;index++)try{const candidate=value[index],threshold=typeof candidate=="number"?finiteNumber(candidate,-1):-1;threshold>=0&&threshold<=1&&thresholds.push(threshold)}catch{}return thresholds.length?Object.freeze(thresholds):0}catch{return 0}}const PRESETS={"fade-in":[{opacity:0},{opacity:1}],"fade-out":[{opacity:1},{opacity:0}],"zoom-in":[{opacity:0,transform:"scale(var(--lr-animation-zoom-scale, var(--_lr-animation-zoom-scale)))"},{opacity:1,transform:"scale(1)"}],"zoom-out":[{opacity:1,transform:"scale(1)"},{opacity:0,transform:"scale(var(--lr-animation-zoom-scale, var(--_lr-animation-zoom-scale)))"}],"slide-in-up":[{transform:"translateY(var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance)))",opacity:0},{transform:"translateY(0)",opacity:1}],"slide-in-down":[{transform:"translateY(calc(-1 * var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance))))",opacity:0},{transform:"translateY(0)",opacity:1}],bounce:[{transform:"translateY(0)",offset:0},{transform:"translateY(calc(-1 * var(--lr-animation-bounce-height, var(--_lr-animation-bounce-height))))",offset:.4},{transform:"translateY(0)",offset:.7},{transform:"translateY(calc(-0.4 * var(--lr-animation-bounce-height, var(--_lr-animation-bounce-height))))",offset:.85},{transform:"translateY(0)",offset:1}],pulse:[{transform:"scale(1)",opacity:1,offset:0},{transform:"scale(0.92)",opacity:.75,offset:.5},{transform:"scale(1)",opacity:1,offset:1}],spin:[{transform:"rotate(0deg)"},{transform:"rotate(360deg)"}],shake:[{transform:"translateX(0)",offset:0},{transform:"translateX(calc(-1 * var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance))))",offset:.2},{transform:"translateX(var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance)))",offset:.4},{transform:"translateX(calc(-1 * var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance))))",offset:.6},{transform:"translateX(var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance)))",offset:.8},{transform:"translateX(0)",offset:1}]};function slidePreset(edge,mode,dir){const offscreen=`translateX(${(dir==="ltr"?edge==="start":edge==="end")?"calc(-1 * var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance)))":"var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance))"})`,onscreen="translateX(0)";return mode==="in"?[{transform:offscreen,opacity:0},{transform:onscreen,opacity:1}]:[{transform:onscreen,opacity:1},{transform:offscreen,opacity:0}]}const DIRECTIONAL_SLIDE_NAMES=new Set(["slide-in-start","slide-in-end","slide-out-start","slide-out-end"]),PLAYBACK_DIRECTIONS=new Set(["normal","reverse","alternate","alternate-reverse"]),FILL_MODES=new Set(["none","forwards","backwards","both","auto"]);function isElementOwnedBy(value,ownerDocument){if(value===null||typeof value!="object")return!1;const candidate=value;if(candidate.nodeType!==1||candidate.ownerDocument!==ownerDocument||typeof candidate.localName!="string"||typeof candidate.getAttribute!="function")return!1;const ElementCtor=ownerDocument.defaultView?.Element;return ElementCtor&&value instanceof ElementCtor?!0:typeof candidate.matches=="function"&&typeof candidate.getRootNode=="function"}function resolveTimingToken(el,preset){const raw=el.ownerDocument.defaultView?.getComputedStyle(el).getPropertyValue(`--lr-transition-${preset}`).trim()??"",match=/^((?:\d+(?:\.\d*)?)|(?:\.\d+))(ms|s)\s+(.+)$/.exec(raw);if(!match)return{duration:1e3,easing:"linear"};const num=match[1],unit=match[2],easing=match[3],duration=(unit==="s"?1e3:1)*Number(num),resolvedEasing=easing.trim();return!Number.isFinite(duration)||!el.ownerDocument.defaultView?.CSS?.supports("animation-timing-function",resolvedEasing)?{duration:1e3,easing:"linear"}:{duration,easing:resolvedEasing}}class LyraAnimation extends LyraElement{constructor(){super(...arguments),this.name="none",this.keyframes=void 0,this.play=!1,this.delay=0,this.direction="normal",this.duration=1e3,this.easing="linear",this.endDelay=0,this.fill="auto",this.iterations=1/0,this.iterationStart=0,this.playbackRate=1,this.timingPreset="custom",this.respectReducedMotion=!0,this.playOnVisible=!1,this.playOnVisibleRepeat=!1,this.rootMargin="0px",this._threshold=0,this.root=null,this.hasStarted=!1,this.onSlotChange=()=>{this.createAnimation(),this.syncVisibilityObserver()},this.syncVisibilityObserver=()=>{if(this.disconnectVisibilityObserver(),!this.isConnected||!this.playOnVisible)return;const target=this.currentTarget();if(!target)return;const owner=this.ownerDocument.defaultView,Observer=owner?.IntersectionObserver;if(!owner||!Observer){this.play=!0;return}let observer;const callback=entries=>{if(!observer||this.visibilityObserver!==observer||!this.isConnected||this.ownerDocument.defaultView!==owner)return;const entry=entries[entries.length-1];entry&&(entry.isIntersecting?(this.play=!0,this.playOnVisibleRepeat||(observer.disconnect(),this.visibilityObserver===observer&&(this.visibilityObserver=void 0))):this.playOnVisibleRepeat&&(this.play=!1))},root=isElementOwnedBy(this.root,this.ownerDocument)?this.root:null;try{observer=new Observer(callback,{root,rootMargin:this.rootMargin,threshold:typeof this.threshold=="number"?this.threshold:[...this.threshold]})}catch{try{observer=new Observer(callback,{root,rootMargin:"0px",threshold:0})}catch{this.play=!0;return}}this.visibilityObserver=observer;try{observer.observe(target)}catch{this.disconnectVisibilityObserver(),this.play=!0}},this.createAnimation=()=>{if(this.destroyAnimation(),!this.isConnected)return;const target=this.currentTarget(),registered=this.resolveAnimation();if(!target||!registered)return;const disabled=registered.keyframes.length===0;let keyframes;try{const source=disabled?[{},{}]:registered.keyframes;if(!Array.isArray(source)||source.length>512)throw new TypeError("Invalid keyframe sequence.");keyframes=source.map(keyframe=>{if(typeof keyframe!="object"||keyframe===null)throw new TypeError("Invalid keyframe record.");return{...keyframe}})}catch{keyframes=[{},{}]}const reduced=this.respectReducedMotion&&prefersReducedMotion(this.ownerDocument.defaultView),timingPreset=this.safeTimingPreset,{duration,easing}=timingPreset==="custom"?{duration:this.safeDuration,easing:this.safeEasing(this.easing)}:resolveTimingToken(this,timingPreset),baseOptions={delay:this.safeDelay,direction:this.safeDirection,duration,easing,endDelay:this.safeEndDelay,fill:this.safeFill,iterationStart:this.safeIterationStart,iterations:reduced?Math.min(this.safeIterations,1):this.safeIterations},options={...baseOptions,...registered.options};(reduced||disabled)&&(options.delay=0,options.duration=0,options.endDelay=0,options.iterations=1);try{this.animation=target.animate(keyframes,options)}catch{try{this.animation=target.animate([{},{}],baseOptions)}catch{this.animation=void 0,this.hasStarted=!1;return}}this.animation.playbackRate=this.safePlaybackRate,this.animation.addEventListener("cancel",this.onAnimationCancel),this.animation.addEventListener("finish",this.onAnimationFinish),this.play?(this.hasStarted=!0,this.emit("lr-start",null),reduced&&this.animation.finish()):this.animation.pause()},this.applyPlayState=()=>{this.animation&&(this.play?(this.hasStarted||(this.hasStarted=!0,this.emit("lr-start",null)),this.animation.play()):this.animation.playState!=="idle"&&this.animation.pause())},this.onAnimationFinish=()=>{this.play=!1,this.hasStarted=!1,this.emit("lr-finish",null)},this.onAnimationCancel=()=>{this.play=!1,this.hasStarted=!1,this.emit("lr-cancel",null)}}static{this.styles=[LyraElement.styles,styles]}get threshold(){return this._threshold}set threshold(next){const old=this._threshold;this._threshold=snapshotVisibilityThreshold(next),this.requestUpdate("threshold",old)}get safeDelay(){return finiteNumber(this.delay,0)}get safeDuration(){return finiteRange(this.duration,1e3,0)}get safeEndDelay(){return finiteNumber(this.endDelay,0)}get safeIterations(){return this.iterations===1/0?1/0:finiteRange(this.iterations,1,0)}get safeIterationStart(){return finiteRange(this.iterationStart,0,0)}get safePlaybackRate(){return finiteNumber(this.playbackRate,1)}get safeDirection(){return PLAYBACK_DIRECTIONS.has(this.direction)?this.direction:"normal"}get safeFill(){return FILL_MODES.has(this.fill)?this.fill:"auto"}get safeTimingPreset(){return this.timingPreset==="fast"||this.timingPreset==="base"||this.timingPreset==="ambient"?this.timingPreset:"custom"}safeEasing(value){const resolved=resolveNamedEasing(value);return this.ownerDocument.defaultView?.CSS?.supports("animation-timing-function",resolved)?resolved:"linear"}connectedCallback(){super.connectedCallback(),this.bindMotionPreference(),this.scheduleAfterUpdate(()=>{this.createAnimation(),this.syncVisibilityObserver()})}disconnectedCallback(){this.destroyAnimation(),this.disconnectVisibilityObserver(),this.unbindMotionPreference(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.destroyAnimation(),this.disconnectVisibilityObserver(),this.unbindMotionPreference(),this.isConnected&&(this.bindMotionPreference(),this.scheduleAfterUpdate(()=>{this.createAnimation(),this.syncVisibilityObserver()}))}bindMotionPreference(){this.unbindMotionPreference();const owner=this.ownerDocument.defaultView,query=owner?.matchMedia?.("(prefers-reduced-motion: reduce)");if(!owner||!query)return;const listener=()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.motionQuery!==query||this.createAnimation()};this.motionQuery=query,this.motionQueryListener=listener,query.addEventListener("change",listener)}unbindMotionPreference(){this.motionQuery&&this.motionQueryListener&&this.motionQuery.removeEventListener("change",this.motionQueryListener),this.motionQuery=void 0,this.motionQueryListener=void 0}updated(changed){super.updated(changed);const rebuildKeys=["name","keyframes","delay","direction","duration","easing","endDelay","fill","iterations","iterationStart","timingPreset","respectReducedMotion"],textDirection=this.effectiveDirection,textDirectionChanged=this.lastTextDirection!==void 0&&this.lastTextDirection!==textDirection;this.lastTextDirection=textDirection,rebuildKeys.some(key=>changed.has(key))||textDirectionChanged?this.createAnimation():changed.has("play")&&this.applyPlayState(),changed.has("playbackRate")&&this.animation&&(this.animation.playbackRate=this.safePlaybackRate),["playOnVisible","playOnVisibleRepeat","rootMargin","threshold","root"].some(key=>changed.has(key))&&this.scheduleAfterUpdate(this.syncVisibilityObserver)}currentTarget(){const slot=this.renderRoot.querySelector("slot"),[first]=slot?.assignedElements({flatten:!0})??[];return isElementOwnedBy(first,this.ownerDocument)?first:void 0}resolveAnimation(){if(this.keyframes)return{keyframes:this.keyframes,options:{}};const{name}=this;if(name==="none")return;let fallback;if(DIRECTIONAL_SLIDE_NAMES.has(name)){const mode=name.startsWith("slide-in-")?"in":"out",edge=name.endsWith("-start")?"start":"end";fallback={keyframes:slidePreset(edge,mode,"ltr"),rtlKeyframes:slidePreset(edge,mode,"rtl")}}else{const keyframes=PRESETS[name]??resolveCatalogAnimation(name);keyframes&&(fallback={keyframes})}try{return getAnimation(this,`animation.${name}`,{dir:this.effectiveDirection,fallback,respectReducedMotion:!1})}catch{return fallback?{keyframes:fallback.keyframes,options:fallback.options??{}}:void 0}}disconnectVisibilityObserver(){this.visibilityObserver?.disconnect(),this.visibilityObserver=void 0}destroyAnimation(){this.animation&&(this.animation.removeEventListener("cancel",this.onAnimationCancel),this.animation.removeEventListener("finish",this.onAnimationFinish),this.animation.cancel(),this.animation=void 0,this.hasStarted=!1)}get currentTime(){return this.animation?.currentTime??0}set currentTime(value){this.animation&&(typeof value=="number"&&!Number.isFinite(value)||(this.animation.currentTime=value))}start(){this.play=!0}pause(){this.play=!1}cancel(){this.animation?.cancel()}finish(){this.animation?.finish()}render(){return html`<slot @slotchange=${this.onSlotChange}></slot>`}}__decorate([property()],LyraAnimation.prototype,"name",void 0),__decorate([property({attribute:!1})],LyraAnimation.prototype,"keyframes",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraAnimation.prototype,"play",void 0),__decorate([property({type:Number})],LyraAnimation.prototype,"delay",void 0),__decorate([property()],LyraAnimation.prototype,"direction",void 0),__decorate([property({type:Number})],LyraAnimation.prototype,"duration",void 0),__decorate([property()],LyraAnimation.prototype,"easing",void 0),__decorate([property({type:Number,attribute:"end-delay"})],LyraAnimation.prototype,"endDelay",void 0),__decorate([property()],LyraAnimation.prototype,"fill",void 0),__decorate([property({type:Number})],LyraAnimation.prototype,"iterations",void 0),__decorate([property({type:Number,attribute:"iteration-start"})],LyraAnimation.prototype,"iterationStart",void 0),__decorate([property({type:Number,attribute:"playback-rate"})],LyraAnimation.prototype,"playbackRate",void 0),__decorate([property({attribute:"timing-preset",reflect:!0})],LyraAnimation.prototype,"timingPreset",void 0),__decorate([property({type:Boolean,attribute:"respect-reduced-motion",reflect:!0,converter:trueDefaultBooleanConverter})],LyraAnimation.prototype,"respectReducedMotion",void 0),__decorate([property({type:Boolean,attribute:"play-on-visible",reflect:!0})],LyraAnimation.prototype,"playOnVisible",void 0),__decorate([property({type:Boolean,attribute:"play-on-visible-repeat",reflect:!0})],LyraAnimation.prototype,"playOnVisibleRepeat",void 0),__decorate([property({attribute:"root-margin"})],LyraAnimation.prototype,"rootMargin",void 0),__decorate([property({attribute:!1})],LyraAnimation.prototype,"threshold",null),__decorate([property({attribute:!1})],LyraAnimation.prototype,"root",void 0);export{LYRA_ANIMATION_NAMES,LYRA_EASINGS,LyraAnimation,animations,getAnimationNames,getEasingNames};
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}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteNumber,finiteRange}from"../../../internal/numbers.js";import{getAnimation}from"../../../utilities/animation-registry.js";import{styles}from"./animation.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{resolveCatalogAnimation,resolveNamedEasing}from"./animation-catalog.js";import{animations,getAnimationNames,getEasingNames,LYRA_ANIMATION_NAMES,LYRA_EASINGS}from"./animation-catalog.js";const MAX_VISIBILITY_THRESHOLDS=1e3;function snapshotVisibilityThreshold(value){if(!Array.isArray(value)){const threshold=typeof value=="number"?finiteNumber(value,-1):-1;return threshold>=0&&threshold<=1?threshold:0}try{const count=Math.min(value.length,MAX_VISIBILITY_THRESHOLDS),thresholds=[];for(let index=0;index<count;index++)try{const candidate=value[index],threshold=typeof candidate=="number"?finiteNumber(candidate,-1):-1;threshold>=0&&threshold<=1&&thresholds.push(threshold)}catch{}return thresholds.length?Object.freeze(thresholds):0}catch{return 0}}const PRESETS={"fade-in":[{opacity:0},{opacity:1}],"fade-out":[{opacity:1},{opacity:0}],"zoom-in":[{opacity:0,transform:"scale(var(--lr-animation-zoom-scale, var(--_lr-animation-zoom-scale)))"},{opacity:1,transform:"scale(1)"}],"zoom-out":[{opacity:1,transform:"scale(1)"},{opacity:0,transform:"scale(var(--lr-animation-zoom-scale, var(--_lr-animation-zoom-scale)))"}],"slide-in-up":[{transform:"translateY(var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance)))",opacity:0},{transform:"translateY(0)",opacity:1}],"slide-in-down":[{transform:"translateY(calc(-1 * var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance))))",opacity:0},{transform:"translateY(0)",opacity:1}],bounce:[{transform:"translateY(0)",offset:0},{transform:"translateY(calc(-1 * var(--lr-animation-bounce-height, var(--_lr-animation-bounce-height))))",offset:.4},{transform:"translateY(0)",offset:.7},{transform:"translateY(calc(-0.4 * var(--lr-animation-bounce-height, var(--_lr-animation-bounce-height))))",offset:.85},{transform:"translateY(0)",offset:1}],pulse:[{transform:"scale(1)",opacity:1,offset:0},{transform:"scale(0.92)",opacity:.75,offset:.5},{transform:"scale(1)",opacity:1,offset:1}],spin:[{transform:"rotate(0deg)"},{transform:"rotate(360deg)"}],shake:[{transform:"translateX(0)",offset:0},{transform:"translateX(calc(-1 * var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance))))",offset:.2},{transform:"translateX(var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance)))",offset:.4},{transform:"translateX(calc(-1 * var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance))))",offset:.6},{transform:"translateX(var(--lr-animation-shake-distance, var(--_lr-animation-shake-distance)))",offset:.8},{transform:"translateX(0)",offset:1}]};function slidePreset(edge,mode,dir){const offscreen=`translateX(${(dir==="ltr"?edge==="start":edge==="end")?"calc(-1 * var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance)))":"var(--lr-animation-slide-distance, var(--_lr-animation-slide-distance))"})`,onscreen="translateX(0)";return mode==="in"?[{transform:offscreen,opacity:0},{transform:onscreen,opacity:1}]:[{transform:onscreen,opacity:1},{transform:offscreen,opacity:0}]}const DIRECTIONAL_SLIDE_NAMES=new Set(["slide-in-start","slide-in-end","slide-out-start","slide-out-end"]),PLAYBACK_DIRECTIONS=new Set(["normal","reverse","alternate","alternate-reverse"]),FILL_MODES=new Set(["none","forwards","backwards","both","auto"]);function isElementOwnedBy(value,ownerDocument){if(value===null||typeof value!="object")return!1;const candidate=value;if(candidate.nodeType!==1||candidate.ownerDocument!==ownerDocument||typeof candidate.localName!="string"||typeof candidate.getAttribute!="function")return!1;const ElementCtor=ownerDocument.defaultView?.Element;return ElementCtor&&value instanceof ElementCtor?!0:typeof candidate.matches=="function"&&typeof candidate.getRootNode=="function"}function resolveTimingToken(el,preset){const raw=el.ownerDocument.defaultView?.getComputedStyle(el).getPropertyValue(`--lr-transition-${preset}`).trim()??"",match=/^((?:\d+(?:\.\d*)?)|(?:\.\d+))(ms|s)\s+(.+)$/.exec(raw);if(!match)return{duration:1e3,easing:"linear"};const num=match[1],unit=match[2],easing=match[3],duration=(unit==="s"?1e3:1)*Number(num),resolvedEasing=easing.trim();return!Number.isFinite(duration)||!el.ownerDocument.defaultView?.CSS?.supports("animation-timing-function",resolvedEasing)?{duration:1e3,easing:"linear"}:{duration,easing:resolvedEasing}}class LyraAnimation extends LyraElement{constructor(){super(...arguments),this.name="none",this.keyframes=void 0,this.play=!1,this.delay=0,this.direction="normal",this.duration=1e3,this.easing="linear",this.endDelay=0,this.fill="auto",this.iterations=1/0,this.iterationStart=0,this.playbackRate=1,this.timingPreset="custom",this.respectReducedMotion=!0,this.playOnVisible=!1,this.playOnVisibleRepeat=!1,this.rootMargin="0px",this._threshold=0,this.root=null,this.hasStarted=!1,this.onSlotChange=()=>{this.currentTarget()!==this.animationTarget&&this.createAnimation(),this.syncVisibilityObserver()},this.syncVisibilityObserver=()=>{if(this.disconnectVisibilityObserver(),!this.isConnected||!this.playOnVisible)return;const target=this.currentTarget();if(!target)return;const owner=this.ownerDocument.defaultView,Observer=owner?.IntersectionObserver;if(!owner||!Observer){this.play=!0;return}let observer;const callback=entries=>{if(!observer||this.visibilityObserver!==observer||!this.isConnected||this.ownerDocument.defaultView!==owner)return;const entry=entries[entries.length-1];entry&&(entry.isIntersecting?(this.play=!0,this.playOnVisibleRepeat||(observer.disconnect(),this.visibilityObserver===observer&&(this.visibilityObserver=void 0))):this.playOnVisibleRepeat&&(this.play=!1))},root=isElementOwnedBy(this.root,this.ownerDocument)?this.root:null;try{observer=new Observer(callback,{root,rootMargin:this.rootMargin,threshold:typeof this.threshold=="number"?this.threshold:[...this.threshold]})}catch{try{observer=new Observer(callback,{root,rootMargin:"0px",threshold:0})}catch{this.play=!0;return}}this.visibilityObserver=observer;try{observer.observe(target)}catch{this.disconnectVisibilityObserver(),this.play=!0}},this.createAnimation=()=>{if(this.destroyAnimation(),!this.isConnected)return;const target=this.currentTarget(),registered=this.resolveAnimation();if(!target||!registered)return;const disabled=registered.keyframes.length===0;let keyframes;try{const source=disabled?[{},{}]:registered.keyframes;if(!Array.isArray(source)||source.length>512)throw new TypeError("Invalid keyframe sequence.");keyframes=source.map(keyframe=>{if(typeof keyframe!="object"||keyframe===null)throw new TypeError("Invalid keyframe record.");return{...keyframe}})}catch{keyframes=[{},{}]}const reduced=this.respectReducedMotion&&prefersReducedMotion(this.ownerDocument.defaultView),timingPreset=this.safeTimingPreset,{duration,easing}=timingPreset==="custom"?{duration:this.safeDuration,easing:this.safeEasing(this.easing)}:resolveTimingToken(this,timingPreset),baseOptions={delay:this.safeDelay,direction:this.safeDirection,duration,easing,endDelay:this.safeEndDelay,fill:this.safeFill,iterationStart:this.safeIterationStart,iterations:reduced?Math.min(this.safeIterations,1):this.safeIterations},options={...baseOptions,...registered.options};(reduced||disabled)&&(options.delay=0,options.duration=0,options.endDelay=0,options.iterations=1);try{this.animation=target.animate(keyframes,options)}catch{try{this.animation=target.animate([{},{}],baseOptions)}catch{this.animation=void 0,this.hasStarted=!1;return}}this.animationTarget=target,this.animation.playbackRate=this.safePlaybackRate,this.animation.addEventListener("cancel",this.onAnimationCancel),this.animation.addEventListener("finish",this.onAnimationFinish),this.play?(this.hasStarted=!0,this.emit("lr-start",null),reduced&&this.animation.finish()):this.animation.pause()},this.applyPlayState=()=>{this.animation&&(this.play?(this.hasStarted||(this.hasStarted=!0,this.emit("lr-start",null)),this.animation.play()):this.animation.playState!=="idle"&&this.animation.pause())},this.onAnimationFinish=()=>{this.play=!1,this.hasStarted=!1,this.emit("lr-finish",null)},this.onAnimationCancel=()=>{this.play=!1,this.hasStarted=!1,this.emit("lr-cancel",null)}}static{this.styles=[LyraElement.styles,styles]}get threshold(){return this._threshold}set threshold(next){const old=this._threshold;this._threshold=snapshotVisibilityThreshold(next),this.requestUpdate("threshold",old)}get safeDelay(){return finiteNumber(this.delay,0)}get safeDuration(){return finiteRange(this.duration,1e3,0)}get safeEndDelay(){return finiteNumber(this.endDelay,0)}get safeIterations(){return this.iterations===1/0?1/0:finiteRange(this.iterations,1,0)}get safeIterationStart(){return finiteRange(this.iterationStart,0,0)}get safePlaybackRate(){return finiteNumber(this.playbackRate,1)}get safeDirection(){return PLAYBACK_DIRECTIONS.has(this.direction)?this.direction:"normal"}get safeFill(){return FILL_MODES.has(this.fill)?this.fill:"auto"}get safeTimingPreset(){return this.timingPreset==="fast"||this.timingPreset==="base"||this.timingPreset==="ambient"?this.timingPreset:"custom"}safeEasing(value){const resolved=resolveNamedEasing(value);return this.ownerDocument.defaultView?.CSS?.supports("animation-timing-function",resolved)?resolved:"linear"}connectedCallback(){super.connectedCallback(),this.bindMotionPreference(),this.scheduleAfterUpdate(()=>{this.animation||this.createAnimation(),this.syncVisibilityObserver()})}disconnectedCallback(){this.destroyAnimation(),this.disconnectVisibilityObserver(),this.unbindMotionPreference(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.destroyAnimation(),this.disconnectVisibilityObserver(),this.unbindMotionPreference(),this.isConnected&&(this.bindMotionPreference(),this.scheduleAfterUpdate(()=>{this.animation||this.createAnimation(),this.syncVisibilityObserver()}))}bindMotionPreference(){this.unbindMotionPreference();const owner=this.ownerDocument.defaultView,query=owner?.matchMedia?.("(prefers-reduced-motion: reduce)");if(!owner||!query)return;const listener=()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.motionQuery!==query||this.createAnimation()};this.motionQuery=query,this.motionQueryListener=listener,query.addEventListener("change",listener)}unbindMotionPreference(){this.motionQuery&&this.motionQueryListener&&this.motionQuery.removeEventListener("change",this.motionQueryListener),this.motionQuery=void 0,this.motionQueryListener=void 0}updated(changed){super.updated(changed);const rebuildKeys=["name","keyframes","delay","direction","duration","easing","endDelay","fill","iterations","iterationStart","timingPreset","respectReducedMotion"],textDirection=this.effectiveDirection,textDirectionChanged=this.lastTextDirection!==void 0&&this.lastTextDirection!==textDirection;this.lastTextDirection=textDirection,rebuildKeys.some(key=>changed.has(key))||textDirectionChanged?this.createAnimation():changed.has("play")&&this.applyPlayState(),changed.has("playbackRate")&&this.animation&&(this.animation.playbackRate=this.safePlaybackRate),["playOnVisible","playOnVisibleRepeat","rootMargin","threshold","root"].some(key=>changed.has(key))&&this.scheduleAfterUpdate(this.syncVisibilityObserver)}currentTarget(){const slot=this.renderRoot.querySelector("slot"),[first]=slot?.assignedElements({flatten:!0})??[];return isElementOwnedBy(first,this.ownerDocument)?first:void 0}resolveAnimation(){if(this.keyframes)return{keyframes:this.keyframes,options:{}};const{name}=this;if(name==="none")return;let fallback;if(DIRECTIONAL_SLIDE_NAMES.has(name)){const mode=name.startsWith("slide-in-")?"in":"out",edge=name.endsWith("-start")?"start":"end";fallback={keyframes:slidePreset(edge,mode,"ltr"),rtlKeyframes:slidePreset(edge,mode,"rtl")}}else{const keyframes=PRESETS[name]??resolveCatalogAnimation(name);keyframes&&(fallback={keyframes})}try{return getAnimation(this,`animation.${name}`,{dir:this.effectiveDirection,fallback,respectReducedMotion:!1})}catch{return fallback?{keyframes:fallback.keyframes,options:fallback.options??{}}:void 0}}disconnectVisibilityObserver(){this.visibilityObserver?.disconnect(),this.visibilityObserver=void 0}destroyAnimation(){this.animation&&(this.animation.removeEventListener("cancel",this.onAnimationCancel),this.animation.removeEventListener("finish",this.onAnimationFinish),this.animation.cancel(),this.animation=void 0,this.animationTarget=void 0,this.hasStarted=!1)}get currentTime(){return this.animation?.currentTime??0}set currentTime(value){this.animation&&(typeof value=="number"&&!Number.isFinite(value)||(this.animation.currentTime=value))}start(){this.play=!0}pause(){this.play=!1}cancel(){this.animation?.cancel()}finish(){this.animation?.finish()}render(){return html`<slot @slotchange=${this.onSlotChange}></slot>`}}__decorate([property()],LyraAnimation.prototype,"name",void 0),__decorate([property({attribute:!1})],LyraAnimation.prototype,"keyframes",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraAnimation.prototype,"play",void 0),__decorate([property({type:Number})],LyraAnimation.prototype,"delay",void 0),__decorate([property()],LyraAnimation.prototype,"direction",void 0),__decorate([property({type:Number})],LyraAnimation.prototype,"duration",void 0),__decorate([property()],LyraAnimation.prototype,"easing",void 0),__decorate([property({type:Number,attribute:"end-delay"})],LyraAnimation.prototype,"endDelay",void 0),__decorate([property()],LyraAnimation.prototype,"fill",void 0),__decorate([property({type:Number})],LyraAnimation.prototype,"iterations",void 0),__decorate([property({type:Number,attribute:"iteration-start"})],LyraAnimation.prototype,"iterationStart",void 0),__decorate([property({type:Number,attribute:"playback-rate"})],LyraAnimation.prototype,"playbackRate",void 0),__decorate([property({attribute:"timing-preset",reflect:!0})],LyraAnimation.prototype,"timingPreset",void 0),__decorate([property({type:Boolean,attribute:"respect-reduced-motion",reflect:!0,converter:trueDefaultBooleanConverter})],LyraAnimation.prototype,"respectReducedMotion",void 0),__decorate([property({type:Boolean,attribute:"play-on-visible",reflect:!0})],LyraAnimation.prototype,"playOnVisible",void 0),__decorate([property({type:Boolean,attribute:"play-on-visible-repeat",reflect:!0})],LyraAnimation.prototype,"playOnVisibleRepeat",void 0),__decorate([property({attribute:"root-margin"})],LyraAnimation.prototype,"rootMargin",void 0),__decorate([property({attribute:!1})],LyraAnimation.prototype,"threshold",null),__decorate([property({attribute:!1})],LyraAnimation.prototype,"root",void 0);export{LYRA_ANIMATION_NAMES,LYRA_EASINGS,LyraAnimation,animations,getAnimationNames,getEasingNames};
@@ -1,4 +1,4 @@
1
- import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export{FILE_SIZE_UNIT_KEYS,formatFileSize}from'./file-size.js';export type LyraAttachmentUploadStatus='pending'|'uploading'|'error'|'success';export interface LyraAttachmentIdDetail{attachmentId:string;}export interface LyraAttachmentPreviewRequestDetail extends LyraAttachmentIdDetail{name:string;mimeType:string;src:string;}export interface LyraAttachmentChipEventMap{'lr-remove':CustomEvent<LyraAttachmentIdDetail>;'lr-retry':CustomEvent<LyraAttachmentIdDetail>;'lr-preview-request':CustomEvent<LyraAttachmentPreviewRequestDetail>;}
1
+ import{type PropertyValues,type PropertyDeclaration,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export{FILE_SIZE_UNIT_KEYS,formatFileSize}from'./file-size.js';export type LyraAttachmentUploadStatus='pending'|'uploading'|'error'|'success';export interface LyraAttachmentIdDetail{attachmentId:string;}export interface LyraAttachmentPreviewRequestDetail extends LyraAttachmentIdDetail{name:string;mimeType:string;src:string;}export interface LyraAttachmentChipEventMap{'lr-remove':CustomEvent<LyraAttachmentIdDetail>;'lr-retry':CustomEvent<LyraAttachmentIdDetail>;'lr-preview-request':CustomEvent<LyraAttachmentPreviewRequestDetail>;}
2
2
  /**
3
3
  * `<lr-attachment-chip>` — a compact chip representing one file queued for
4
4
  * (or already part of) a chat message: a composer's pre-send attachment
@@ -102,7 +102,8 @@ thumbnailSrc:string;
102
102
  previewSrc:string;
103
103
  /** Shows the preview action when a `file` or `preview-src` is available. */
104
104
  previewable:boolean;
105
- /** Lifecycle state — drives the accent tint and which of `progress`/`spinner`/`retry-button` renders. */
105
+ /** Lifecycle state — drives the accent tint and which of `progress`/`spinner`/`retry-button` renders.
106
+ * Failures already present on reconnect render silently; new connected failures announce once. */
106
107
  status:LyraAttachmentUploadStatus;
107
108
  /** Upload completion, 0-100. Only meaningful while `status="uploading"`;
108
109
  * a value of 0 (the default), `NaN`, or negative falls back to the indeterminate spinner
@@ -146,7 +147,7 @@ private sink?;private readonly fallbackId;private get effectiveName();private ge
146
147
  /** Returns (creating or reusing as needed) the object URL for `file`'s
147
148
  * image thumbnail. Called from the update lifecycle, never from `render()`,
148
149
  * so rendering stays a pure projection of already-prepared state. */
149
- private ensureObjectUrl;private revokeObjectUrl;connectedCallback():void;adoptedCallback():void;private syncAnnouncementSink;private releaseAnnouncementSink;protected willUpdate(changed:PropertyValues):void;disconnectedCallback():void;
150
+ private ensureObjectUrl;private revokeObjectUrl;private connectedStatusTransition;requestUpdate(name?:PropertyKey,oldValue?:unknown,options?:PropertyDeclaration):void;connectedCallback():void;adoptedCallback():void;private syncAnnouncementSink;private releaseAnnouncementSink;protected willUpdate(changed:PropertyValues):void;disconnectedCallback():void;
150
151
  /** The localized upload-failure message. Same override-wins-verbatim rule as `untitledLabel`;
151
152
  * read both by `render()` and by the failure announcement in `willUpdate()`. */
152
153
  private get localizedUploadFailedLabel();private onRemoveClick;private onRetryClick;private onPreviewClick;private renderThumbnail;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-attachment-chip':LyraAttachmentChip;}}
@@ -11,7 +11,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
11
11
  aria-hidden="true"
12
12
  focusable="false"
13
13
  ><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg>
14
- `}function statusText(status,uploadingText,uploadFailedLabel){return status==="error"?uploadFailedLabel:status==="uploading"?uploadingText:""}class LyraAttachmentChip extends LyraElement{constructor(){super(...arguments),this.name="",this.attachmentId="",this.mimeType="",this.thumbnailSrc="",this.previewSrc="",this.previewable=!0,this.status="pending",this.progress=0,this.removable=!0,this.compact=!1,this.thumbnailOnly=!1,this.fallbackId=nextId("attachment-chip"),this.onRemoveClick=()=>{this.emit("lr-remove",{attachmentId:this.resolvedId})},this.onRetryClick=()=>{this.emit("lr-retry",{attachmentId:this.resolvedId})},this.onPreviewClick=()=>{this.effectivePreviewSrc&&this.emit("lr-preview-request",{attachmentId:this.resolvedId,name:this.effectiveName,mimeType:this.effectiveMimeType,src:this.effectivePreviewSrc})}}static{this.defaultStrings={...super.defaultStrings,attachmentPreviewFile:LYRA_DEFAULT_attachmentPreviewFile,attachmentPreviewName:LYRA_DEFAULT_attachmentPreviewName,attachmentRetryWithContext:LYRA_DEFAULT_attachmentRetryWithContext,attachmentUntitledFile:LYRA_DEFAULT_attachmentUntitledFile,attachmentUploadFailed:LYRA_DEFAULT_attachmentUploadFailed,attachmentUploadingIndeterminate:LYRA_DEFAULT_attachmentUploadingIndeterminate,attachmentUploadingProgress:LYRA_DEFAULT_attachmentUploadingProgress,attachmentUploadingWithContext:LYRA_DEFAULT_attachmentUploadingWithContext,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,fileSizeUnitB:LYRA_DEFAULT_fileSizeUnitB,fileSizeUnitGb:LYRA_DEFAULT_fileSizeUnitGb,fileSizeUnitKb:LYRA_DEFAULT_fileSizeUnitKb,fileSizeUnitMb:LYRA_DEFAULT_fileSizeUnitMb,fileSizeUnitTb:LYRA_DEFAULT_fileSizeUnitTb,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,removeWithContext:LYRA_DEFAULT_removeWithContext,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get bytes(){return this._bytes}set bytes(value){const old=this._bytes;this._bytes=typeof value=="number"&&Number.isFinite(value)&&value>=0?finiteRange(value,0,0):void 0,this.requestUpdate("bytes",old)}get effectiveName(){return this.file?this.file.name:this.name}get effectiveSize(){return this.file?Number.isFinite(this.file.size)&&this.file.size>=0?finiteRange(this.file.size,0,0):void 0:this.bytes}get effectiveMimeType(){return this.file?this.file.type:this.mimeType}get effectivePreviewSrc(){return this.file?this.objectUrl??"":this.previewSrc}get resolvedId(){return this.attachmentId.trim().length>0?this.attachmentId:this.file?`${this.file.name}:${this.file.size}:${this.file.lastModified}`:this.fallbackId}get hasNumericProgress(){return this.status==="uploading"&&this.clampedProgress>0}get clampedProgress(){return finiteRange(this.progress,0,0,100)}get effectiveStatus(){return this.status==="uploading"||this.status==="error"||this.status==="success"?this.status:"pending"}ensureObjectUrl(file){return this.objectUrlFile===file&&this.objectUrl?this.objectUrl:(this.revokeObjectUrl(),this.objectUrl=URL.createObjectURL(file),this.objectUrlFile=file,this.objectUrl)}revokeObjectUrl(){this.objectUrl&&URL.revokeObjectURL(this.objectUrl),this.objectUrl=void 0,this.objectUrlFile=void 0}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&this.requestUpdate()}adoptedCallback(){super.adoptedCallback(),this.releaseAnnouncementSink(),this.syncAnnouncementSink()}syncAnnouncementSink(){this.isConnected&&this.sink?.element.ownerDocument!==this.ownerDocument&&(this.releaseAnnouncementSink(),this.sink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this}))}releaseAnnouncementSink(){this.sink?.release(),this.sink=void 0}willUpdate(changed){super.willUpdate(changed),changed.has("status")&&this.status!==this.effectiveStatus&&(this.status=this.effectiveStatus),this.hasUpdated&&changed.has("status")&&this.status==="error"&&this.sink?.announce(this.localizedUploadFailedLabel),this.isConnected&&this.file&&(this.file.type.startsWith("image/")||this.previewable)?this.ensureObjectUrl(this.file):this.objectUrlFile&&this.revokeObjectUrl()}disconnectedCallback(){super.disconnectedCallback(),this.revokeObjectUrl(),this.releaseAnnouncementSink()}get localizedUploadFailedLabel(){return this.uploadFailedLabel??this.localize("attachmentUploadFailed")}renderThumbnail(){if(this.file){const fileImageSrc=this.objectUrl?safeMediaSrc(this.objectUrl):null;return this.effectiveMimeType.startsWith("image/")?fileImageSrc?html`<img src=${fileImageSrc} alt="" />`:html`${fileIcon()}`:html`${fileIcon()}`}const thumbnailSrc=safeMediaSrc(this.thumbnailSrc);return thumbnailSrc?html`<img src=${thumbnailSrc} alt="" />`:html`${fileIcon()}`}render(){const name=this.effectiveName,untitledLabel=this.untitledLabel??this.localize("attachmentUntitledFile"),displayName=name||untitledLabel,sizeText=this.effectiveSize!==void 0?formatFileSize(this.effectiveSize,unit=>this.localize(FILE_SIZE_UNIT_KEYS[unit]),(value,fractionDigits)=>getNumberFormat(this.effectiveLocale,{minimumFractionDigits:fractionDigits,maximumFractionDigits:fractionDigits}).format(value)):"",uploadFailedLabel=this.localizedUploadFailedLabel,progressPercent=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:0}).format(Math.round(this.clampedProgress)),uploadingText=this.uploadingLabel!==void 0?this.uploadingLabel:this.hasNumericProgress?this.localize("attachmentUploadingProgress",void 0,{percent:progressPercent}):this.localize("attachmentUploadingIndeterminate"),uploadingWithContext=this.uploadingLabel??this.localize("attachmentUploadingWithContext",void 0,{label:displayName}),retryWithContext=this.retryLabel??this.localize("attachmentRetryWithContext",void 0,{label:displayName}),removeWithContext=this.removeLabel??this.localize("removeWithContext",void 0,{label:displayName}),status=this.effectiveStatus,text=statusText(status,uploadingText,uploadFailedLabel),uploading=status==="uploading";return html`
14
+ `}function statusText(status,uploadingText,uploadFailedLabel){return status==="error"?uploadFailedLabel:status==="uploading"?uploadingText:""}class LyraAttachmentChip extends LyraElement{constructor(){super(...arguments),this.name="",this.attachmentId="",this.mimeType="",this.thumbnailSrc="",this.previewSrc="",this.previewable=!0,this.status="pending",this.progress=0,this.removable=!0,this.compact=!1,this.thumbnailOnly=!1,this.fallbackId=nextId("attachment-chip"),this.connectedStatusTransition=!1,this.onRemoveClick=()=>{this.emit("lr-remove",{attachmentId:this.resolvedId})},this.onRetryClick=()=>{this.emit("lr-retry",{attachmentId:this.resolvedId})},this.onPreviewClick=()=>{this.effectivePreviewSrc&&this.emit("lr-preview-request",{attachmentId:this.resolvedId,name:this.effectiveName,mimeType:this.effectiveMimeType,src:this.effectivePreviewSrc})}}static{this.defaultStrings={...super.defaultStrings,attachmentPreviewFile:LYRA_DEFAULT_attachmentPreviewFile,attachmentPreviewName:LYRA_DEFAULT_attachmentPreviewName,attachmentRetryWithContext:LYRA_DEFAULT_attachmentRetryWithContext,attachmentUntitledFile:LYRA_DEFAULT_attachmentUntitledFile,attachmentUploadFailed:LYRA_DEFAULT_attachmentUploadFailed,attachmentUploadingIndeterminate:LYRA_DEFAULT_attachmentUploadingIndeterminate,attachmentUploadingProgress:LYRA_DEFAULT_attachmentUploadingProgress,attachmentUploadingWithContext:LYRA_DEFAULT_attachmentUploadingWithContext,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,fileSizeUnitB:LYRA_DEFAULT_fileSizeUnitB,fileSizeUnitGb:LYRA_DEFAULT_fileSizeUnitGb,fileSizeUnitKb:LYRA_DEFAULT_fileSizeUnitKb,fileSizeUnitMb:LYRA_DEFAULT_fileSizeUnitMb,fileSizeUnitTb:LYRA_DEFAULT_fileSizeUnitTb,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,removeWithContext:LYRA_DEFAULT_removeWithContext,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get bytes(){return this._bytes}set bytes(value){const old=this._bytes;this._bytes=typeof value=="number"&&Number.isFinite(value)&&value>=0?finiteRange(value,0,0):void 0,this.requestUpdate("bytes",old)}get effectiveName(){return this.file?this.file.name:this.name}get effectiveSize(){return this.file?Number.isFinite(this.file.size)&&this.file.size>=0?finiteRange(this.file.size,0,0):void 0:this.bytes}get effectiveMimeType(){return this.file?this.file.type:this.mimeType}get effectivePreviewSrc(){return this.file?this.objectUrl??"":this.previewSrc}get resolvedId(){return this.attachmentId.trim().length>0?this.attachmentId:this.file?`${this.file.name}:${this.file.size}:${this.file.lastModified}`:this.fallbackId}get hasNumericProgress(){return this.status==="uploading"&&this.clampedProgress>0}get clampedProgress(){return finiteRange(this.progress,0,0,100)}get effectiveStatus(){return this.status==="uploading"||this.status==="error"||this.status==="success"?this.status:"pending"}ensureObjectUrl(file){return this.objectUrlFile===file&&this.objectUrl?this.objectUrl:(this.revokeObjectUrl(),this.objectUrl=URL.createObjectURL(file),this.objectUrlFile=file,this.objectUrl)}revokeObjectUrl(){this.objectUrl&&URL.revokeObjectURL(this.objectUrl),this.objectUrl=void 0,this.objectUrlFile=void 0}requestUpdate(name,oldValue,options){name==="status"&&this.isConnected&&this.hasUpdated&&oldValue!==this.status&&(this.connectedStatusTransition=!0),super.requestUpdate(name,oldValue,options)}connectedCallback(){super.connectedCallback(),this.connectedStatusTransition=!1,this.syncAnnouncementSink(),this.hasUpdated&&this.requestUpdate()}adoptedCallback(){super.adoptedCallback(),this.releaseAnnouncementSink(),this.syncAnnouncementSink()}syncAnnouncementSink(){this.isConnected&&this.sink?.element.ownerDocument!==this.ownerDocument&&(this.releaseAnnouncementSink(),this.sink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this}))}releaseAnnouncementSink(){this.sink?.release(),this.sink=void 0}willUpdate(changed){super.willUpdate(changed),changed.has("status")&&this.status!==this.effectiveStatus&&(this.status=this.effectiveStatus),this.isConnected&&this.hasUpdated&&this.connectedStatusTransition&&this.status==="error"&&this.sink?.announce(this.localizedUploadFailedLabel),this.connectedStatusTransition=!1,this.isConnected&&this.file&&(this.file.type.startsWith("image/")||this.previewable)?this.ensureObjectUrl(this.file):this.objectUrlFile&&this.revokeObjectUrl()}disconnectedCallback(){super.disconnectedCallback(),this.revokeObjectUrl(),this.releaseAnnouncementSink()}get localizedUploadFailedLabel(){return this.uploadFailedLabel??this.localize("attachmentUploadFailed")}renderThumbnail(){if(this.file){const fileImageSrc=this.objectUrl?safeMediaSrc(this.objectUrl):null;return this.effectiveMimeType.startsWith("image/")?fileImageSrc?html`<img src=${fileImageSrc} alt="" />`:html`${fileIcon()}`:html`${fileIcon()}`}const thumbnailSrc=safeMediaSrc(this.thumbnailSrc);return thumbnailSrc?html`<img src=${thumbnailSrc} alt="" />`:html`${fileIcon()}`}render(){const name=this.effectiveName,untitledLabel=this.untitledLabel??this.localize("attachmentUntitledFile"),displayName=name||untitledLabel,sizeText=this.effectiveSize!==void 0?formatFileSize(this.effectiveSize,unit=>this.localize(FILE_SIZE_UNIT_KEYS[unit]),(value,fractionDigits)=>getNumberFormat(this.effectiveLocale,{minimumFractionDigits:fractionDigits,maximumFractionDigits:fractionDigits}).format(value)):"",uploadFailedLabel=this.localizedUploadFailedLabel,progressPercent=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:0}).format(Math.round(this.clampedProgress)),uploadingText=this.uploadingLabel!==void 0?this.uploadingLabel:this.hasNumericProgress?this.localize("attachmentUploadingProgress",void 0,{percent:progressPercent}):this.localize("attachmentUploadingIndeterminate"),uploadingWithContext=this.uploadingLabel??this.localize("attachmentUploadingWithContext",void 0,{label:displayName}),retryWithContext=this.retryLabel??this.localize("attachmentRetryWithContext",void 0,{label:displayName}),removeWithContext=this.removeLabel??this.localize("removeWithContext",void 0,{label:displayName}),status=this.effectiveStatus,text=statusText(status,uploadingText,uploadFailedLabel),uploading=status==="uploading";return html`
15
15
  <div part="base">
16
16
  <span part="thumbnail" aria-hidden="true"
17
17
  >${this.renderThumbnail()}</span
@@ -1,5 +1,6 @@
1
- /** One synced transcript entry. `end` is exclusive; an omitted `end` extends to the next cue (or
2
- * forever, for the last one). Cue collections require a trimmed nonempty `cueId` and retain the
1
+ /** One synced transcript entry. `end` is exclusive; an omitted `end` extends to the next strictly chronological
2
+ * start (or forever, for the last one). Equal starts do not end one another; caller order is
3
+ * retained. The player indexes starts on assignment so playback reconciliation stays linear. Cue collections require a trimmed nonempty `cueId` and retain the
3
4
  * first occurrence when IDs repeat. */
4
5
  export interface LyraAvCue{readonly cueId:string;readonly start:number;readonly end?:number;readonly text:string;readonly speaker?:string;}
5
6
  /** A native `<track>` source (subtitles/captions/descriptions). */
@@ -119,7 +119,7 @@ name:string;
119
119
  * Unrecognized runtime or attribute values continue MIME auto-detection. */
120
120
  kind?:LyraAvKind;
121
121
  /** Drives auto-detection: an `audio/*` mime type renders `<audio>`; anything else renders
122
- * `<video>`. Ignored once `kind` is set explicitly. */
122
+ * `<video>`. Ignored once `kind` is set explicitly. Attribute removal is consumed as an absent hint. */
123
123
  mimeType:string;
124
124
  /** Poster image for `<video>`; validated with `safeMediaSrc` and omitted when unsafe. Ignored for
125
125
  * `<audio>`. */
@@ -133,9 +133,10 @@ get playbackRate():number;set playbackRate(next:number);
133
133
  * direct property writes update the current media generation without feedback duplicates. */
134
134
  get volume():number;set volume(next:number);private _rates;
135
135
  /** Selectable rates offered by `[part="rate-select"]`; snapshotted, deduplicated, bounded to 32. */
136
- get rates():readonly number[];set rates(value:readonly number[]);private _cues;
136
+ get rates():readonly number[];set rates(value:readonly number[]);private _cues;private nextCueStarts;
137
137
  /** Transcript entries, rendered as a virtualized, `currentTime`-synced list. Valid nonempty
138
- * `cueId` values are unique; the first occurrence wins. Inputs are bounded, cloned, and frozen. */
138
+ * `cueId` values are unique; the first occurrence wins. Inputs are bounded, cloned, and frozen.
139
+ * Omitted ends use indexed next chronological starts; seeks reconcile in linear work. */
139
140
  get cues():readonly LyraAvCue[];set cues(value:readonly LyraAvCue[]);private _peaks;
140
141
  /** Normalized `0..1` waveform amplitude samples. Empty renders a plain seek rail instead of a
141
142
  * canvas -- this component never decodes audio itself. */
@@ -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{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{keyed}from"lit/directives/keyed.js";import{ref}from"lit/directives/ref.js";import{LyraElement}from"../../../internal/lyra-element.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{MAX_NATIVE_PLAYBACK_RATE as MAX_PLAYBACK_RATE,MIN_NATIVE_PLAYBACK_RATE as MIN_PLAYBACK_RATE,NativeMediaController,safeNativeMediaSource as safeMediaSrc}from"../../../internal/media-controller.js";import{hostAriaLabel,srOnly}from"../../../internal/a11y.js";import{finiteNumber,finiteRange}from"../../../internal/numbers.js";import{attachInternalsSafely}from"../../../internal/form-associated.js";import{chevronIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{styles}from"./av-player.styles.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{resolveBoundedCanvasAllocation}from"../../../internal/canvas.js";import{EMPTY_LYRA_AV_CUES,EMPTY_LYRA_AV_TRACKS,snapshotLyraAvCues,snapshotLyraAvTracks}from"./av-metadata.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_avPlayerFailedToLoad,LYRA_DEFAULT_avPlayerLabel,LYRA_DEFAULT_avPlayerPlaybackRate,LYRA_DEFAULT_avPlayerPosition,LYRA_DEFAULT_avPlayerRateOption,LYRA_DEFAULT_avPlayerTimeline,LYRA_DEFAULT_avPlayerTranscript,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_viewerHighlightLabel}from"../../../internal/default-strings.generated.js";const TIME_CHANGE_THROTTLE_MS=250,MAX_AV_RATES=32,MAX_AV_PEAKS=65536,MAX_CANVAS_DIMENSION=4096,MAX_CANVAS_PIXELS=8388608,OWNED_AV_COLLECTIONS=new WeakSet,NO_REPORTED_ERROR=Symbol("no-reported-av-error");function ownedSnapshot(values){const snapshot=Object.freeze(values);return OWNED_AV_COLLECTIONS.add(snapshot),snapshot}const EMPTY_RATES=ownedSnapshot([]),DEFAULT_RATES=ownedSnapshot([.75,1,1.25,1.5,2]),EMPTY_CUES=EMPTY_LYRA_AV_CUES,EMPTY_PEAKS=ownedSnapshot([]),EMPTY_TRACKS=EMPTY_LYRA_AV_TRACKS;function normalizeArray(value,limit,normalize,fallback){try{if(!Array.isArray(value))return fallback;if(OWNED_AV_COLLECTIONS.has(value))return value;const result=[],length=Math.min(value.length,limit);for(let index=0;index<length;index++)try{const normalized=normalize(value[index],index);normalized!==void 0&&result.push(normalized)}catch{}return ownedSnapshot(result)}catch{return fallback}}function normalizeRates(value){const seen=new Set;return normalizeArray(value,MAX_AV_RATES,candidate=>{if(!(typeof candidate!="number"||!Number.isFinite(candidate)||candidate<MIN_PLAYBACK_RATE||candidate>MAX_PLAYBACK_RATE||seen.has(candidate)))return seen.add(candidate),candidate},EMPTY_RATES)}function normalizePeaks(value){return normalizeArray(value,MAX_AV_PEAKS,candidate=>typeof candidate=="number"?finiteRange(candidate,0,0,1):void 0,EMPTY_PEAKS)}function positiveFinite(value){const finite=finiteNumber(value,1);return finite>0?finite:1}function waveformPaintPeaks(peaks,maxBars){const barCount=Math.max(1,Math.floor(finiteNumber(maxBars,1)));if(peaks.length<=barCount)return peaks;const finalIndex=peaks.length-1;if(barCount===1)return[finiteRange(peaks[finalIndex],0,0,1)];const result=new Array(barCount),preEndpointBars=barCount-1;for(let barIndex=0;barIndex<preEndpointBars;barIndex+=1){const start=Math.floor(barIndex*finalIndex/preEndpointBars),end=Math.floor((barIndex+1)*finalIndex/preEndpointBars);let peak=0;for(let sampleIndex=start;sampleIndex<end;sampleIndex+=1)peak=Math.max(peak,finiteRange(peaks[sampleIndex],0,0,1));result[barIndex]=peak}return result[preEndpointBars]=finiteRange(peaks[finalIndex],0,0,1),result}function formatTime(seconds,locale){const total=Math.round(finiteRange(seconds,0,0)),h=Math.floor(total/3600),m=Math.floor(total%3600/60),s=total%60,regular=getNumberFormat(locale,{maximumFractionDigits:0,useGrouping:!1}),padded=getNumberFormat(locale,{maximumFractionDigits:0,minimumIntegerDigits:2,useGrouping:!1}),mm=(h>0?padded:regular).format(m),ss=padded.format(s);return h>0?`${regular.format(h)}:${mm}:${ss}`:`${mm}:${ss}`}class LyraAvPlayerBase extends LyraElement{}class LyraAvPlayer extends DocumentAnchorTarget(LyraAvPlayerBase){static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,avPlayerFailedToLoad:LYRA_DEFAULT_avPlayerFailedToLoad,avPlayerLabel:LYRA_DEFAULT_avPlayerLabel,avPlayerPlaybackRate:LYRA_DEFAULT_avPlayerPlaybackRate,avPlayerPosition:LYRA_DEFAULT_avPlayerPosition,avPlayerRateOption:LYRA_DEFAULT_avPlayerRateOption,avPlayerTimeline:LYRA_DEFAULT_avPlayerTimeline,avPlayerTranscript:LYRA_DEFAULT_avPlayerTranscript,fieldRequired:LYRA_DEFAULT_fieldRequired,viewerHighlightLabel:LYRA_DEFAULT_viewerHighlightLabel}}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.properties={playbackRate:{type:Number,attribute:"playback-rate",reflect:!0,noAccessor:!0},volume:{type:Number,reflect:!0,noAccessor:!0}}}get playbackRate(){return this._playbackRate}set playbackRate(next){const old=this._playbackRate;this._playbackRate=finiteRange(next,1,MIN_PLAYBACK_RATE,MAX_PLAYBACK_RATE),this.requestUpdate("playbackRate",old)}get volume(){return this._volume}set volume(next){const old=this._volume;this._volume=finiteRange(next,1,0,1),this.requestUpdate("volume",old)}get rates(){return this._rates}set rates(value){const previous=this._rates;this._rates=normalizeRates(value),this.requestUpdate("rates",previous)}get cues(){return this._cues}set cues(value){const previous=this._cues;this._cues=snapshotLyraAvCues(value),this.requestUpdate("cues",previous)}get peaks(){return this._peaks}set peaks(value){const previous=this._peaks;this._peaks=normalizePeaks(value),this.requestUpdate("peaks",previous)}get tracks(){return this._tracks}set tracks(value){const previous=this._tracks;this._tracks=snapshotLyraAvTracks(value),this.requestUpdate("tracks",previous)}constructor(){super(),this.src="",this.name="",this.mimeType="",this.poster="",this.loop=!1,this.muted=!1,this.preload="metadata",this._playbackRate=1,this._volume=1,this._rates=DEFAULT_RATES,this._cues=EMPTY_CUES,this._peaks=EMPTY_PEAKS,this._tracks=EMPTY_TRACKS,this.anchorKinds=["time-range"],this.duration=0,this.currentTimeState=0,this.activeCueId=null,this.activeCueIndex=-1,this.searchQuery="",this.searchMatches=[],this.activeSearchIndex=-1,this.metadataLoaded=!1,this.sourceError=!1,this.playbackError=!1,this.mediaController=new NativeMediaController(this,{onEvent:event=>this.onNativeMediaEvent(event)}),this.semanticInternals=attachInternalsSafely(this),this.lastTimeChangeAt=0,this.searchLocale="",this.transcriptLocale="",this.searchMatchIndices=new Set,this.cueKeys=[],this.waveformVisible=!1,this.waveformDirty=!1,this.pendingSeekEmission=null,this.lastEmittedTime=null,this.lastReportedSourceError=NO_REPORTED_ERROR,this.connectionEventBaselinePending=!0,this.onMediaFocus=event=>{relayNativeEvent(this,event)},this.onMediaBlur=event=>{relayNativeEvent(this,event)},this.onWindowResize=()=>this.drawWaveform(),this.canvasRef=el=>{if(!el){this.unbindWaveformResizeObserver();return}this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.drawWaveform()},this.mediaRef=el=>{const media=el?.localName==="audio"||el?.localName==="video"?el:void 0;this.mediaController.attach(media)},this.onPlaybackFailure=error=>{this.playbackError=!0,this.announceRenderError(),this.emit("lr-render-error",{error})},this.onHighlightActivate=(id,start)=>{this.activeHighlightId=id,this.seek(start),this.emit("lr-highlight-activate",{highlightId:id})},this.onTimelineClick=event=>{if(!this.duration)return;const rect=event.currentTarget.getBoundingClientRect();if(rect.width<=0)return;const ratio=Math.min(1,Math.max(0,(event.clientX-rect.left)/rect.width));this.seek(ratio*this.duration)},this.onTimelineKeyDown=event=>{if(!(this.duration>0))return;const delta=event.shiftKey?15:5;switch(event.key){case"ArrowLeft":event.preventDefault(),this.seek(Math.max(0,this.currentTime-delta));break;case"ArrowRight":event.preventDefault(),this.seek(Math.min(this.duration,this.currentTime+delta));break;case"Home":event.preventDefault(),this.seek(0);break;case"End":event.preventDefault(),this.seek(this.duration);break;case" ":event.preventDefault(),this.toggle();break;default:return}},this.cueKey=(_cue,index)=>this.cueKeys[index]??`index:${index}`,this.renderCue=(cue,index)=>{const c=cue,start=this.safeCueStart(c),isActive=this.activeCueIndex===index,isMatch=this.searchMatchIndices.has(index),isActiveMatch=index===this.searchMatches[this.activeSearchIndex],part=["cue",isActive?"cue-current":"",isMatch?"cue-match":"",isActiveMatch?"cue-active-match":""].filter(Boolean).join(" ");return html`<button
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,query,state}from"lit/decorators.js";import{keyed}from"lit/directives/keyed.js";import{ref}from"lit/directives/ref.js";import{LyraElement}from"../../../internal/lyra-element.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{MAX_NATIVE_PLAYBACK_RATE as MAX_PLAYBACK_RATE,MIN_NATIVE_PLAYBACK_RATE as MIN_PLAYBACK_RATE,NativeMediaController,safeNativeMediaSource as safeMediaSrc}from"../../../internal/media-controller.js";import{hostAriaLabel,srOnly}from"../../../internal/a11y.js";import{finiteNumber,finiteRange}from"../../../internal/numbers.js";import{attachInternalsSafely}from"../../../internal/form-associated.js";import{chevronIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{styles}from"./av-player.styles.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{resolveBoundedCanvasAllocation}from"../../../internal/canvas.js";import{EMPTY_LYRA_AV_CUES,EMPTY_LYRA_AV_TRACKS,snapshotLyraAvCues,snapshotLyraAvTracks}from"./av-metadata.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_avPlayerFailedToLoad,LYRA_DEFAULT_avPlayerLabel,LYRA_DEFAULT_avPlayerPlaybackRate,LYRA_DEFAULT_avPlayerPosition,LYRA_DEFAULT_avPlayerRateOption,LYRA_DEFAULT_avPlayerTimeline,LYRA_DEFAULT_avPlayerTranscript,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_viewerHighlightLabel}from"../../../internal/default-strings.generated.js";const TIME_CHANGE_THROTTLE_MS=250,MAX_AV_RATES=32,MAX_AV_PEAKS=65536,MAX_CANVAS_DIMENSION=4096,MAX_CANVAS_PIXELS=8388608,OWNED_AV_COLLECTIONS=new WeakSet,NO_REPORTED_ERROR=Symbol("no-reported-av-error");function ownedSnapshot(values){const snapshot=Object.freeze(values);return OWNED_AV_COLLECTIONS.add(snapshot),snapshot}const EMPTY_RATES=ownedSnapshot([]),DEFAULT_RATES=ownedSnapshot([.75,1,1.25,1.5,2]),EMPTY_CUES=EMPTY_LYRA_AV_CUES,EMPTY_PEAKS=ownedSnapshot([]),EMPTY_TRACKS=EMPTY_LYRA_AV_TRACKS;function normalizeArray(value,limit,normalize,fallback){try{if(!Array.isArray(value))return fallback;if(OWNED_AV_COLLECTIONS.has(value))return value;const result=[],length=Math.min(value.length,limit);for(let index=0;index<length;index++)try{const normalized=normalize(value[index],index);normalized!==void 0&&result.push(normalized)}catch{}return ownedSnapshot(result)}catch{return fallback}}function normalizeRates(value){const seen=new Set;return normalizeArray(value,MAX_AV_RATES,candidate=>{if(!(typeof candidate!="number"||!Number.isFinite(candidate)||candidate<MIN_PLAYBACK_RATE||candidate>MAX_PLAYBACK_RATE||seen.has(candidate)))return seen.add(candidate),candidate},EMPTY_RATES)}function normalizePeaks(value){return normalizeArray(value,MAX_AV_PEAKS,candidate=>typeof candidate=="number"?finiteRange(candidate,0,0,1):void 0,EMPTY_PEAKS)}function positiveFinite(value){const finite=finiteNumber(value,1);return finite>0?finite:1}function waveformPaintPeaks(peaks,maxBars){const barCount=Math.max(1,Math.floor(finiteNumber(maxBars,1)));if(peaks.length<=barCount)return peaks;const finalIndex=peaks.length-1;if(barCount===1)return[finiteRange(peaks[finalIndex],0,0,1)];const result=new Array(barCount),preEndpointBars=barCount-1;for(let barIndex=0;barIndex<preEndpointBars;barIndex+=1){const start=Math.floor(barIndex*finalIndex/preEndpointBars),end=Math.floor((barIndex+1)*finalIndex/preEndpointBars);let peak=0;for(let sampleIndex=start;sampleIndex<end;sampleIndex+=1)peak=Math.max(peak,finiteRange(peaks[sampleIndex],0,0,1));result[barIndex]=peak}return result[preEndpointBars]=finiteRange(peaks[finalIndex],0,0,1),result}function formatTime(seconds,locale){const total=Math.round(finiteRange(seconds,0,0)),h=Math.floor(total/3600),m=Math.floor(total%3600/60),s=total%60,regular=getNumberFormat(locale,{maximumFractionDigits:0,useGrouping:!1}),padded=getNumberFormat(locale,{maximumFractionDigits:0,minimumIntegerDigits:2,useGrouping:!1}),mm=(h>0?padded:regular).format(m),ss=padded.format(s);return h>0?`${regular.format(h)}:${mm}:${ss}`:`${mm}:${ss}`}class LyraAvPlayerBase extends LyraElement{}class LyraAvPlayer extends DocumentAnchorTarget(LyraAvPlayerBase){static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,avPlayerFailedToLoad:LYRA_DEFAULT_avPlayerFailedToLoad,avPlayerLabel:LYRA_DEFAULT_avPlayerLabel,avPlayerPlaybackRate:LYRA_DEFAULT_avPlayerPlaybackRate,avPlayerPosition:LYRA_DEFAULT_avPlayerPosition,avPlayerRateOption:LYRA_DEFAULT_avPlayerRateOption,avPlayerTimeline:LYRA_DEFAULT_avPlayerTimeline,avPlayerTranscript:LYRA_DEFAULT_avPlayerTranscript,fieldRequired:LYRA_DEFAULT_fieldRequired,viewerHighlightLabel:LYRA_DEFAULT_viewerHighlightLabel}}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.properties={playbackRate:{type:Number,attribute:"playback-rate",reflect:!0,noAccessor:!0},volume:{type:Number,reflect:!0,noAccessor:!0}}}get playbackRate(){return this._playbackRate}set playbackRate(next){const old=this._playbackRate;this._playbackRate=finiteRange(next,1,MIN_PLAYBACK_RATE,MAX_PLAYBACK_RATE),this.requestUpdate("playbackRate",old)}get volume(){return this._volume}set volume(next){const old=this._volume;this._volume=finiteRange(next,1,0,1),this.requestUpdate("volume",old)}get rates(){return this._rates}set rates(value){const previous=this._rates;this._rates=normalizeRates(value),this.requestUpdate("rates",previous)}get cues(){return this._cues}set cues(value){const previous=this._cues;if(this._cues=snapshotLyraAvCues(value),this._cues!==previous){const starts=[...new Set(this._cues.map(cue=>cue.start))].sort((a,b)=>a-b);this.nextCueStarts=new Map;for(let index=0;index<starts.length;index+=1)this.nextCueStarts.set(starts[index],starts[index+1]??1/0)}this.requestUpdate("cues",previous)}get peaks(){return this._peaks}set peaks(value){const previous=this._peaks;this._peaks=normalizePeaks(value),this.requestUpdate("peaks",previous)}get tracks(){return this._tracks}set tracks(value){const previous=this._tracks;this._tracks=snapshotLyraAvTracks(value),this.requestUpdate("tracks",previous)}constructor(){super(),this.src="",this.name="",this.mimeType="",this.poster="",this.loop=!1,this.muted=!1,this.preload="metadata",this._playbackRate=1,this._volume=1,this._rates=DEFAULT_RATES,this._cues=EMPTY_CUES,this.nextCueStarts=new Map,this._peaks=EMPTY_PEAKS,this._tracks=EMPTY_TRACKS,this.anchorKinds=["time-range"],this.duration=0,this.currentTimeState=0,this.activeCueId=null,this.activeCueIndex=-1,this.searchQuery="",this.searchMatches=[],this.activeSearchIndex=-1,this.metadataLoaded=!1,this.sourceError=!1,this.playbackError=!1,this.mediaController=new NativeMediaController(this,{onEvent:event=>this.onNativeMediaEvent(event)}),this.semanticInternals=attachInternalsSafely(this),this.lastTimeChangeAt=0,this.searchLocale="",this.transcriptLocale="",this.searchMatchIndices=new Set,this.cueKeys=[],this.waveformVisible=!1,this.waveformDirty=!1,this.pendingSeekEmission=null,this.lastEmittedTime=null,this.lastReportedSourceError=NO_REPORTED_ERROR,this.connectionEventBaselinePending=!0,this.onMediaFocus=event=>{relayNativeEvent(this,event)},this.onMediaBlur=event=>{relayNativeEvent(this,event)},this.onWindowResize=()=>this.drawWaveform(),this.canvasRef=el=>{if(!el){this.unbindWaveformResizeObserver();return}this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.drawWaveform()},this.mediaRef=el=>{const media=el?.localName==="audio"||el?.localName==="video"?el:void 0;this.mediaController.attach(media)},this.onPlaybackFailure=error=>{this.playbackError=!0,this.announceRenderError(),this.emit("lr-render-error",{error})},this.onHighlightActivate=(id,start)=>{this.activeHighlightId=id,this.seek(start),this.emit("lr-highlight-activate",{highlightId:id})},this.onTimelineClick=event=>{if(!this.duration)return;const rect=event.currentTarget.getBoundingClientRect();if(rect.width<=0)return;const ratio=Math.min(1,Math.max(0,(event.clientX-rect.left)/rect.width));this.seek(ratio*this.duration)},this.onTimelineKeyDown=event=>{if(!(this.duration>0))return;const delta=event.shiftKey?15:5;switch(event.key){case"ArrowLeft":event.preventDefault(),this.seek(Math.max(0,this.currentTime-delta));break;case"ArrowRight":event.preventDefault(),this.seek(Math.min(this.duration,this.currentTime+delta));break;case"Home":event.preventDefault(),this.seek(0);break;case"End":event.preventDefault(),this.seek(this.duration);break;case" ":event.preventDefault(),this.toggle();break;default:return}},this.cueKey=(_cue,index)=>this.cueKeys[index]??`index:${index}`,this.renderCue=(cue,index)=>{const c=cue,start=this.safeCueStart(c),isActive=this.activeCueIndex===index,isMatch=this.searchMatchIndices.has(index),isActiveMatch=index===this.searchMatches[this.activeSearchIndex],part=["cue",isActive?"cue-current":"",isMatch?"cue-match":"",isActiveMatch?"cue-active-match":""].filter(Boolean).join(" ");return html`<button
2
2
  part=${part}
3
3
  type="button"
4
4
  aria-current=${isActive?"true":"false"}
@@ -9,7 +9,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
9
9
  <span part="cue-time">${formatTime(start,this.effectiveLocale)}</span>
10
10
  ${c.speaker?html`<span part="cue-speaker">${c.speaker}</span>`:nothing}
11
11
  <span part="cue-text">${c.text}</span>
12
- </button>`},this.transcriptRenderItem=this.renderCue,new ThemeWatcher(this,()=>{this.peaks.length>0&&this.drawWaveform()})}get mediaEl(){return this.mediaController.element}focus(options){this.mediaEl?.focus(options)}blur(){this.mediaEl?.blur()}click(){this.mediaEl?.click()}get currentTime(){return this.mediaController.currentTime}set currentTime(value){this.mediaController.currentTime=value,this.currentTimeState=this.mediaController.currentTime}detectedKind(){return this.kind==="audio"||this.kind==="video"?this.kind:this.mimeType.startsWith("audio/")?"audio":"video"}get effectivePreload(){return this.preload==="none"||this.preload==="auto"?this.preload:"metadata"}willUpdate(changed){super.willUpdate(changed),this.semanticInternals.role=hostAriaLabel(this)!==null?"region":null;const mayEmitConnectionTransition=this.isConnected&&!this.connectionEventBaselinePending,locale=this.effectiveLocale;let refreshTranscript=!1;if(changed.has("kind")&&this.kind!==void 0&&this.kind!=="audio"&&this.kind!=="video"&&(this.kind=void 0),changed.has("preload")&&this.preload!==this.effectivePreload&&(this.preload=this.effectivePreload),changed.has("cues")&&(this.rebuildCueKeys(),this.metadataLoaded&&this.reconcileActiveCue()),this.transcriptLocale!==locale&&(this.transcriptLocale=locale,refreshTranscript=!0),this.hasUpdated&&(changed.has("src")||changed.has("kind")||changed.has("mimeType"))&&(this.duration=0,this.currentTimeState=0,this.activeCueId=null,this.activeCueIndex=-1,this.metadataLoaded=!1,this.sourceError=!1,this.playbackError=!1,this.lastTimeChangeAt=0,this.pendingSeekEmission=null,this.lastEmittedTime=null,this.lastReportedSourceError=NO_REPORTED_ERROR,this.mediaController.startGeneration(),changed.has("src")&&this.src&&!safeMediaSrc(this.src))){const error=new TypeError("The media source URL is not allowed.");mayEmitConnectionTransition&&(this.announceRenderError(),this.emit("lr-render-error",{error}))}this.searchQuery&&(changed.has("cues")||this.searchLocale!==locale)&&(this.reconcileSearchMatches(changed.get("cues")),refreshTranscript=!0),refreshTranscript&&this.refreshTranscriptRenderItem()}updated(changed){super.updated(changed),changed.has("playbackRate")&&(this.mediaController.playbackRate=this.playbackRate,changed.get("playbackRate")!==void 0&&this.emit("lr-rate-change",{rate:this.playbackRate})),changed.has("volume")&&(this.mediaController.volume=this.volume),changed.has("muted")&&(this.mediaController.muted=this.muted),changed.has("peaks")&&(this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.drawWaveform()),this.isConnected&&(this.connectionEventBaselinePending=!1)}connectedCallback(){super.connectedCallback(),this.connectionEventBaselinePending=!0,this.syncErrorAnnouncementSink(),this.mediaController.reconnect(),this.bindResizeWindow(),this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.waveformDirty&&this.drawWaveform(),this.requestUpdate()}firstUpdated(changed){super.firstUpdated(changed),this.drawWaveform()}disconnectedCallback(){this.connectionEventBaselinePending=!0,this.mediaController.disconnect(),this.releaseErrorAnnouncementSink(),this.unbindResizeWindow(),this.unbindWaveformResizeObserver(),this.cancelWaveformDrawFrame(),this.waveformDetachedObserverWindow=this.waveformObserverWindow,this.unbindWaveformVisibilityObserver(),this.waveformDirty=this.peaks.length>0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseErrorAnnouncementSink(),this.syncErrorAnnouncementSink(),this.bindResizeWindow(),this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.isConnected&&this.waveformDirty&&this.drawWaveform()}syncErrorAnnouncementSink(){this.isConnected&&this.errorAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.releaseErrorAnnouncementSink(),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this}))}releaseErrorAnnouncementSink(){this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0}announceRenderError(){this.errorAnnouncementSink?.announce(this.localize("avPlayerFailedToLoad"))}bindResizeWindow(){const nextWindow=this.isConnected?this.ownerDocument.defaultView:null;this.resizeWindow!==nextWindow&&(this.unbindResizeWindow(),this.resizeWindow=nextWindow??void 0,this.resizeWindow?.addEventListener("resize",this.onWindowResize))}unbindResizeWindow(){this.resizeWindow?.removeEventListener("resize",this.onWindowResize),this.resizeWindow=void 0}syncWaveformVisibilityObserver(){const owner=this.isConnected&&this.peaks.length>0?this.ownerDocument.defaultView:null;if(this.waveformIntersectionObserver&&this.waveformObserverWindow===owner)return;const needsFreshSameRealmVisibility=owner!==null&&this.waveformDetachedObserverWindow===owner;if(owner!==null&&(this.waveformDetachedObserverWindow=void 0),this.cancelWaveformDrawFrame(),this.unbindWaveformVisibilityObserver(),!owner)return;const IntersectionObserverCtor=owner.IntersectionObserver;if(!IntersectionObserverCtor){this.waveformVisible=!0;return}needsFreshSameRealmVisibility&&(this.waveformVisible=!1),this.waveformDirty=!0;let observer;observer=new IntersectionObserverCtor(entries=>{if(!this.isConnected||this.ownerDocument.defaultView!==owner||this.waveformIntersectionObserver!==observer)return;const entry=entries.find(candidate=>candidate.target===this);!entry||entry.isIntersecting===this.waveformVisible||(this.waveformVisible=entry.isIntersecting,this.waveformVisible?this.waveformDirty&&this.scheduleWaveformDraw():this.cancelWaveformDrawFrame())}),this.waveformObserverWindow=owner,this.waveformIntersectionObserver=observer,observer.observe(this)}unbindWaveformVisibilityObserver(){this.waveformIntersectionObserver?.disconnect(),this.waveformIntersectionObserver=void 0,this.waveformObserverWindow=void 0}syncWaveformResizeObserver(){const target=this.isConnected&&this.peaks.length>0?this.canvasEl:void 0,owner=target?.ownerDocument.defaultView;if(target&&owner&&this.waveformResizeObserver&&this.waveformResizeObserverWindow===owner&&this.waveformResizeTarget===target||(this.unbindWaveformResizeObserver(),!target||!owner||typeof owner.ResizeObserver!="function"))return;let observer;observer=new owner.ResizeObserver(entries=>{if(!this.isConnected||this.ownerDocument.defaultView!==owner||this.waveformResizeObserver!==observer||this.waveformResizeTarget!==target||!entries.some(entry=>entry.target===target))return;const width=positiveFinite(target.clientWidth),height=positiveFinite(target.clientHeight),dpr=positiveFinite(owner.devicePixelRatio),previous=this.lastWaveformAllocation;previous?.target===target&&previous.width===width&&previous.height===height&&previous.dpr===dpr||this.drawWaveform()}),this.waveformResizeObserver=observer,this.waveformResizeObserverWindow=owner,this.waveformResizeTarget=target,observer.observe(target)}unbindWaveformResizeObserver(){this.waveformResizeObserver?.disconnect(),this.waveformResizeObserver=void 0,this.waveformResizeObserverWindow=void 0,this.waveformResizeTarget=void 0,this.lastWaveformAllocation=void 0}play(){return this.mediaController.play()}pause(){this.mediaController.pause()}toggle(){const media=this.mediaEl;if(media?.paused){const generation=this.mediaController.generation;this.play().catch(error=>{!this.isConnected||!this.mediaController.isCurrentGeneration(generation,media)||this.onPlaybackFailure(error)})}else this.pause()}seek(seconds){this.currentTime=seconds,this.emitTimeChange(!0,!0),this.pendingSeekEmission=this.currentTimeState,this.reconcileActiveCue()}async applyAnchor(anchor){return anchor.kind!=="time-range"||!this.metadataLoaded?!1:(this.seek(anchor.start),!0)}onLoadedMetadata(){this.metadataLoaded=!0,this.duration=this.mediaController.duration,this.currentTimeState=this.mediaController.currentTime,this.sourceError=!1,this.playbackError=!1,this.lastReportedSourceError=NO_REPORTED_ERROR,this.reconcileActiveCue(),this.emit("lr-load",{duration:this.duration,kind:this.detectedKind()})}onPlay(){this.playbackError=!1,this.emit("lr-play",null)}onPause(){this.emit("lr-pause",null)}onMediaError(){const error=this.mediaEl?.error??null,identity=error??"native-media-error-without-detail";identity!==this.lastReportedSourceError&&(this.lastReportedSourceError=identity,this.sourceError=!0,this.playbackError=!1,this.announceRenderError(),this.emit("lr-render-error",{error:error??new Error("The media failed to load.")}))}onNativeMediaEvent(event){switch(event.type){case"loadedmetadata":this.onLoadedMetadata();break;case"durationchange":this.duration=this.mediaController.duration,this.reconcileActiveCue();break;case"play":this.onPlay();break;case"pause":this.onPause();break;case"error":this.onMediaError();break;case"volumechange":{const nextVolume=this.mediaController.volume,nextMuted=this.mediaController.muted;this.volume!==nextVolume&&(this.volume=nextVolume),this.muted!==nextMuted&&(this.muted=nextMuted);break}case"ratechange":{const nextRate=this.mediaController.playbackRate;this.playbackRate!==nextRate&&(this.playbackRate=nextRate);break}case"timeupdate":this.onTimeUpdate();break;case"seeked":this.onSeeked();break;default:break}}emitTimeChange(force,allowDuplicate=!1){const now=Date.now();if(!force&&now-this.lastTimeChangeAt<TIME_CHANGE_THROTTLE_MS)return;const nextTime=this.currentTime;this.currentTimeState=nextTime,!(!allowDuplicate&&nextTime===this.lastEmittedTime)&&(this.lastTimeChangeAt=now,this.lastEmittedTime=nextTime,this.emit("lr-time-change",{currentTime:this.currentTimeState}))}onTimeUpdate(){this.emitTimeChange(!1),this.reconcileActiveCue()}reconcileActiveCue(){const time=this.currentTime;let active,activeIndex=-1;this.cues.forEach((cue,index)=>{const start=this.safeCueStart(cue),end=this.safeCueEnd(cue,start,index);time>=start&&time<end&&(!active||start>=this.safeCueStart(active))&&(active=cue,activeIndex=index)});const nextId=active?.cueId??null;this.setActiveCue(nextId,activeIndex)}setActiveCue(nextId,activeIndex){(nextId!==this.activeCueId||activeIndex!==this.activeCueIndex)&&(this.activeCueId=nextId,this.activeCueIndex=activeIndex,this.emit("lr-cue-change",Object.freeze({cueId:nextId,index:activeIndex})))}onSeeked(){const completedTime=this.currentTime;this.pendingSeekEmission===null||completedTime!==this.pendingSeekEmission?this.emitTimeChange(!0):this.currentTimeState=completedTime,this.pendingSeekEmission=null,this.reconcileActiveCue()}async search(query2){return this.searchQuery=query2,this.reconcileSearchMatches(),this.activeSearchIndex=this.searchMatches.length?0:-1,this.refreshTranscriptRenderItem(),this.emitSearchChange(),await this.revealActiveSearchMatch(),this.searchMatches.length}reconcileSearchMatches(previousCues){const locale=this.effectiveLocale,q=this.searchQuery.trim().toLocaleLowerCase(locale),previousMatchIndex=this.searchMatches[this.activeSearchIndex],previousActiveId=previousCues&&previousMatchIndex!==void 0?previousCues[previousMatchIndex]?.cueId:void 0;if(this.searchMatches=q?this.cues.reduce((acc,cue,index)=>((cue.text.toLocaleLowerCase(locale).includes(q)||(cue.speaker??"").toLocaleLowerCase(locale).includes(q))&&acc.push(index),acc),[]):[],this.searchMatchIndices=new Set(this.searchMatches),this.searchLocale=locale,!this.searchMatches.length){this.activeSearchIndex=-1;return}const retainedPosition=previousActiveId?this.searchMatches.findIndex(index=>this.cues[index]?.cueId===previousActiveId):-1;this.activeSearchIndex=retainedPosition>=0?retainedPosition:Math.min(Math.max(0,this.activeSearchIndex),this.searchMatches.length-1)}async searchNext(){return this.searchMatches.length?(this.activeSearchIndex=(this.activeSearchIndex+1)%this.searchMatches.length,this.refreshTranscriptRenderItem(),this.emitSearchChange(),await this.revealActiveSearchMatch(),!0):!1}async searchPrevious(){return this.searchMatches.length?(this.activeSearchIndex=(this.activeSearchIndex-1+this.searchMatches.length)%this.searchMatches.length,this.refreshTranscriptRenderItem(),this.emitSearchChange(),await this.revealActiveSearchMatch(),!0):!1}clearSearch(){this.searchQuery="",this.searchMatches=[],this.searchMatchIndices=new Set,this.activeSearchIndex=-1,this.refreshTranscriptRenderItem(),this.emitSearchChange()}emitSearchChange(){this.emit("lr-search-change",{query:this.searchQuery,matchCount:this.searchMatches.length,matchCountExact:!0,activeIndex:this.activeSearchIndex})}async revealActiveSearchMatch(){await this.updateComplete;const list=this.renderRoot.querySelector("lr-virtual-list");if(!list)return;await list.updateComplete;const index=this.searchMatches[this.activeSearchIndex];index!==void 0&&list.scrollToIndex(index,{align:"auto",behavior:"auto"})}drawWaveform(){const canvas=this.canvasEl,ownerWindow=this.ownerDocument.defaultView;if(!this.peaks.length){this.waveformDirty=!1;return}if(!this.isConnected||!canvas||!ownerWindow||!this.waveformVisible){this.waveformDirty=!0;return}this.cancelWaveformDrawFrame(),this.waveformDirty=!1,this.paintWaveform()}paintWaveform(){const canvas=this.canvasEl;if(!canvas||!this.peaks.length)return;const ownerWindow=this.ownerDocument.defaultView;if(!ownerWindow)return;const dpr=positiveFinite(ownerWindow.devicePixelRatio),width=positiveFinite(canvas.clientWidth),height=positiveFinite(canvas.clientHeight),allocation=resolveBoundedCanvasAllocation({cssWidth:width,cssHeight:height,desiredScale:dpr,maxDimension:MAX_CANVAS_DIMENSION,maxPixels:MAX_CANVAS_PIXELS});this.lastWaveformAllocation={target:canvas,width,height,dpr},canvas.width=allocation.pixelWidth,canvas.height=allocation.pixelHeight;const ctx=canvas.getContext("2d");if(!ctx)return;const scaleX=allocation.scaleX,scaleY=allocation.scaleY;ctx.setTransform(scaleX,0,0,scaleY,0,0),ctx.clearRect(0,0,width,height);const computed=ownerWindow.getComputedStyle(this),tokenColor=computed.getPropertyValue("--lr-color-brand").trim(),color=ownerWindow.CSS.supports("color",tokenColor)?tokenColor:computed.color;ctx.fillStyle=color;const peaks=waveformPaintPeaks(this.peaks,canvas.width),barWidth=width/peaks.length,physicalPixel=Math.min(barWidth,finiteNumber(1/scaleX,barWidth)),paintedBarWidth=Math.max(physicalPixel,barWidth-physicalPixel);peaks.forEach((peak,i)=>{const barHeight=Math.max(1,finiteRange(peak,0,0,1)*height);ctx.fillRect(i*barWidth,(height-barHeight)/2,paintedBarWidth,barHeight)})}scheduleWaveformDraw(){if(this.waveformDrawFrame)return;const owner=this.ownerDocument.defaultView;if(!owner||!this.isConnected)return;const request={owner,handle:0};request.handle=owner.requestAnimationFrame(()=>{this.waveformDrawFrame===request&&(this.waveformDrawFrame=void 0,this.isConnected&&this.ownerDocument.defaultView===owner&&this.drawWaveform())}),this.waveformDrawFrame=request}cancelWaveformDrawFrame(){const request=this.waveformDrawFrame;request&&request.owner.cancelAnimationFrame(request.handle),this.waveformDrawFrame=void 0}renderMarkers(){if(!this.duration)return nothing;const ranged=this.highlights.filter(h=>h.anchor.kind==="time-range");return ranged.length?html`${ranged.map(h=>{const startSeconds=finiteRange(h.anchor.start,0,0,this.duration),endSeconds=h.anchor.end==null?startSeconds:finiteRange(h.anchor.end,startSeconds,startSeconds,this.duration),start=startSeconds/this.duration*100,end=endSeconds/this.duration*100;return html`<button
12
+ </button>`},this.transcriptRenderItem=this.renderCue,new ThemeWatcher(this,()=>{this.peaks.length>0&&this.drawWaveform()})}get mediaEl(){return this.mediaController.element}focus(options){this.mediaEl?.focus(options)}blur(){this.mediaEl?.blur()}click(){this.mediaEl?.click()}get currentTime(){return this.mediaController.currentTime}set currentTime(value){this.mediaController.currentTime=value,this.currentTimeState=this.mediaController.currentTime}detectedKind(){return this.kind==="audio"||this.kind==="video"?this.kind:(this.mimeType??"").startsWith("audio/")?"audio":"video"}get effectivePreload(){return this.preload==="none"||this.preload==="auto"?this.preload:"metadata"}willUpdate(changed){super.willUpdate(changed),this.semanticInternals.role=hostAriaLabel(this)!==null?"region":null;const mayEmitConnectionTransition=this.isConnected&&!this.connectionEventBaselinePending,locale=this.effectiveLocale;let refreshTranscript=!1;if(changed.has("kind")&&this.kind!==void 0&&this.kind!=="audio"&&this.kind!=="video"&&(this.kind=void 0),changed.has("preload")&&this.preload!==this.effectivePreload&&(this.preload=this.effectivePreload),changed.has("cues")&&(this.rebuildCueKeys(),this.metadataLoaded&&this.reconcileActiveCue()),this.transcriptLocale!==locale&&(this.transcriptLocale=locale,refreshTranscript=!0),this.hasUpdated&&(changed.has("src")||changed.has("kind")||changed.has("mimeType"))&&(this.duration=0,this.currentTimeState=0,this.activeCueId=null,this.activeCueIndex=-1,this.metadataLoaded=!1,this.sourceError=!1,this.playbackError=!1,this.lastTimeChangeAt=0,this.pendingSeekEmission=null,this.lastEmittedTime=null,this.lastReportedSourceError=NO_REPORTED_ERROR,this.mediaController.startGeneration(),changed.has("src")&&this.src&&!safeMediaSrc(this.src))){const error=new TypeError("The media source URL is not allowed.");mayEmitConnectionTransition&&(this.announceRenderError(),this.emit("lr-render-error",{error}))}this.searchQuery&&(changed.has("cues")||this.searchLocale!==locale)&&(this.reconcileSearchMatches(changed.get("cues")),refreshTranscript=!0),refreshTranscript&&this.refreshTranscriptRenderItem()}updated(changed){super.updated(changed),changed.has("playbackRate")&&(this.mediaController.playbackRate=this.playbackRate,changed.get("playbackRate")!==void 0&&this.emit("lr-rate-change",{rate:this.playbackRate})),changed.has("volume")&&(this.mediaController.volume=this.volume),changed.has("muted")&&(this.mediaController.muted=this.muted),changed.has("peaks")&&(this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.drawWaveform()),this.isConnected&&(this.connectionEventBaselinePending=!1)}connectedCallback(){super.connectedCallback(),this.connectionEventBaselinePending=!0,this.syncErrorAnnouncementSink(),this.mediaController.reconnect(),this.bindResizeWindow(),this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.waveformDirty&&this.drawWaveform(),this.requestUpdate()}firstUpdated(changed){super.firstUpdated(changed),this.drawWaveform()}disconnectedCallback(){this.connectionEventBaselinePending=!0,this.mediaController.disconnect(),this.releaseErrorAnnouncementSink(),this.unbindResizeWindow(),this.unbindWaveformResizeObserver(),this.cancelWaveformDrawFrame(),this.waveformDetachedObserverWindow=this.waveformObserverWindow,this.unbindWaveformVisibilityObserver(),this.waveformDirty=this.peaks.length>0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseErrorAnnouncementSink(),this.syncErrorAnnouncementSink(),this.bindResizeWindow(),this.syncWaveformVisibilityObserver(),this.syncWaveformResizeObserver(),this.isConnected&&this.waveformDirty&&this.drawWaveform()}syncErrorAnnouncementSink(){this.isConnected&&this.errorAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.releaseErrorAnnouncementSink(),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this}))}releaseErrorAnnouncementSink(){this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0}announceRenderError(){this.errorAnnouncementSink?.announce(this.localize("avPlayerFailedToLoad"))}bindResizeWindow(){const nextWindow=this.isConnected?this.ownerDocument.defaultView:null;this.resizeWindow!==nextWindow&&(this.unbindResizeWindow(),this.resizeWindow=nextWindow??void 0,this.resizeWindow?.addEventListener("resize",this.onWindowResize))}unbindResizeWindow(){this.resizeWindow?.removeEventListener("resize",this.onWindowResize),this.resizeWindow=void 0}syncWaveformVisibilityObserver(){const owner=this.isConnected&&this.peaks.length>0?this.ownerDocument.defaultView:null;if(this.waveformIntersectionObserver&&this.waveformObserverWindow===owner)return;const needsFreshSameRealmVisibility=owner!==null&&this.waveformDetachedObserverWindow===owner;if(owner!==null&&(this.waveformDetachedObserverWindow=void 0),this.cancelWaveformDrawFrame(),this.unbindWaveformVisibilityObserver(),!owner)return;const IntersectionObserverCtor=owner.IntersectionObserver;if(!IntersectionObserverCtor){this.waveformVisible=!0;return}needsFreshSameRealmVisibility&&(this.waveformVisible=!1),this.waveformDirty=!0;let observer;observer=new IntersectionObserverCtor(entries=>{if(!this.isConnected||this.ownerDocument.defaultView!==owner||this.waveformIntersectionObserver!==observer)return;const entry=entries.find(candidate=>candidate.target===this);!entry||entry.isIntersecting===this.waveformVisible||(this.waveformVisible=entry.isIntersecting,this.waveformVisible?this.waveformDirty&&this.scheduleWaveformDraw():this.cancelWaveformDrawFrame())}),this.waveformObserverWindow=owner,this.waveformIntersectionObserver=observer,observer.observe(this)}unbindWaveformVisibilityObserver(){this.waveformIntersectionObserver?.disconnect(),this.waveformIntersectionObserver=void 0,this.waveformObserverWindow=void 0}syncWaveformResizeObserver(){const target=this.isConnected&&this.peaks.length>0?this.canvasEl:void 0,owner=target?.ownerDocument.defaultView;if(target&&owner&&this.waveformResizeObserver&&this.waveformResizeObserverWindow===owner&&this.waveformResizeTarget===target||(this.unbindWaveformResizeObserver(),!target||!owner||typeof owner.ResizeObserver!="function"))return;let observer;observer=new owner.ResizeObserver(entries=>{if(!this.isConnected||this.ownerDocument.defaultView!==owner||this.waveformResizeObserver!==observer||this.waveformResizeTarget!==target||!entries.some(entry=>entry.target===target))return;const width=positiveFinite(target.clientWidth),height=positiveFinite(target.clientHeight),dpr=positiveFinite(owner.devicePixelRatio),previous=this.lastWaveformAllocation;previous?.target===target&&previous.width===width&&previous.height===height&&previous.dpr===dpr||this.drawWaveform()}),this.waveformResizeObserver=observer,this.waveformResizeObserverWindow=owner,this.waveformResizeTarget=target,observer.observe(target)}unbindWaveformResizeObserver(){this.waveformResizeObserver?.disconnect(),this.waveformResizeObserver=void 0,this.waveformResizeObserverWindow=void 0,this.waveformResizeTarget=void 0,this.lastWaveformAllocation=void 0}play(){return this.mediaController.play()}pause(){this.mediaController.pause()}toggle(){const media=this.mediaEl;if(media?.paused){const generation=this.mediaController.generation;this.play().catch(error=>{!this.isConnected||!this.mediaController.isCurrentGeneration(generation,media)||this.onPlaybackFailure(error)})}else this.pause()}seek(seconds){this.currentTime=seconds,this.emitTimeChange(!0,!0),this.pendingSeekEmission=this.currentTimeState,this.reconcileActiveCue()}async applyAnchor(anchor){return anchor.kind!=="time-range"||!this.metadataLoaded?!1:(this.seek(anchor.start),!0)}onLoadedMetadata(){this.metadataLoaded=!0,this.duration=this.mediaController.duration,this.currentTimeState=this.mediaController.currentTime,this.sourceError=!1,this.playbackError=!1,this.lastReportedSourceError=NO_REPORTED_ERROR,this.reconcileActiveCue(),this.emit("lr-load",{duration:this.duration,kind:this.detectedKind()})}onPlay(){this.playbackError=!1,this.emit("lr-play",null)}onPause(){this.emit("lr-pause",null)}onMediaError(){const error=this.mediaEl?.error??null,identity=error??"native-media-error-without-detail";identity!==this.lastReportedSourceError&&(this.lastReportedSourceError=identity,this.sourceError=!0,this.playbackError=!1,this.announceRenderError(),this.emit("lr-render-error",{error:error??new Error("The media failed to load.")}))}onNativeMediaEvent(event){switch(event.type){case"loadedmetadata":this.onLoadedMetadata();break;case"durationchange":this.duration=this.mediaController.duration,this.reconcileActiveCue();break;case"play":this.onPlay();break;case"pause":this.onPause();break;case"error":this.onMediaError();break;case"volumechange":{const nextVolume=this.mediaController.volume,nextMuted=this.mediaController.muted;this.volume!==nextVolume&&(this.volume=nextVolume),this.muted!==nextMuted&&(this.muted=nextMuted);break}case"ratechange":{const nextRate=this.mediaController.playbackRate;this.playbackRate!==nextRate&&(this.playbackRate=nextRate);break}case"timeupdate":this.onTimeUpdate();break;case"seeked":this.onSeeked();break;default:break}}emitTimeChange(force,allowDuplicate=!1){const now=Date.now();if(!force&&now-this.lastTimeChangeAt<TIME_CHANGE_THROTTLE_MS)return;const nextTime=this.currentTime;this.currentTimeState=nextTime,!(!allowDuplicate&&nextTime===this.lastEmittedTime)&&(this.lastTimeChangeAt=now,this.lastEmittedTime=nextTime,this.emit("lr-time-change",{currentTime:this.currentTimeState}))}onTimeUpdate(){this.emitTimeChange(!1),this.reconcileActiveCue()}reconcileActiveCue(){const time=this.currentTime;let active,activeIndex=-1;this.cues.forEach((cue,index)=>{const start=this.safeCueStart(cue),end=this.safeCueEnd(cue,start);time>=start&&time<end&&(!active||start>=this.safeCueStart(active))&&(active=cue,activeIndex=index)});const nextId=active?.cueId??null;this.setActiveCue(nextId,activeIndex)}setActiveCue(nextId,activeIndex){(nextId!==this.activeCueId||activeIndex!==this.activeCueIndex)&&(this.activeCueId=nextId,this.activeCueIndex=activeIndex,this.emit("lr-cue-change",Object.freeze({cueId:nextId,index:activeIndex})))}onSeeked(){const completedTime=this.currentTime;this.pendingSeekEmission===null||completedTime!==this.pendingSeekEmission?this.emitTimeChange(!0):this.currentTimeState=completedTime,this.pendingSeekEmission=null,this.reconcileActiveCue()}async search(query2){return this.searchQuery=query2,this.reconcileSearchMatches(),this.activeSearchIndex=this.searchMatches.length?0:-1,this.refreshTranscriptRenderItem(),this.emitSearchChange(),await this.revealActiveSearchMatch(),this.searchMatches.length}reconcileSearchMatches(previousCues){const locale=this.effectiveLocale,q=this.searchQuery.trim().toLocaleLowerCase(locale),previousMatchIndex=this.searchMatches[this.activeSearchIndex],previousActiveId=previousCues&&previousMatchIndex!==void 0?previousCues[previousMatchIndex]?.cueId:void 0;if(this.searchMatches=q?this.cues.reduce((acc,cue,index)=>((cue.text.toLocaleLowerCase(locale).includes(q)||(cue.speaker??"").toLocaleLowerCase(locale).includes(q))&&acc.push(index),acc),[]):[],this.searchMatchIndices=new Set(this.searchMatches),this.searchLocale=locale,!this.searchMatches.length){this.activeSearchIndex=-1;return}const retainedPosition=previousActiveId?this.searchMatches.findIndex(index=>this.cues[index]?.cueId===previousActiveId):-1;this.activeSearchIndex=retainedPosition>=0?retainedPosition:Math.min(Math.max(0,this.activeSearchIndex),this.searchMatches.length-1)}async searchNext(){return this.searchMatches.length?(this.activeSearchIndex=(this.activeSearchIndex+1)%this.searchMatches.length,this.refreshTranscriptRenderItem(),this.emitSearchChange(),await this.revealActiveSearchMatch(),!0):!1}async searchPrevious(){return this.searchMatches.length?(this.activeSearchIndex=(this.activeSearchIndex-1+this.searchMatches.length)%this.searchMatches.length,this.refreshTranscriptRenderItem(),this.emitSearchChange(),await this.revealActiveSearchMatch(),!0):!1}clearSearch(){this.searchQuery="",this.searchMatches=[],this.searchMatchIndices=new Set,this.activeSearchIndex=-1,this.refreshTranscriptRenderItem(),this.emitSearchChange()}emitSearchChange(){this.emit("lr-search-change",{query:this.searchQuery,matchCount:this.searchMatches.length,matchCountExact:!0,activeIndex:this.activeSearchIndex})}async revealActiveSearchMatch(){await this.updateComplete;const list=this.renderRoot.querySelector("lr-virtual-list");if(!list)return;await list.updateComplete;const index=this.searchMatches[this.activeSearchIndex];index!==void 0&&list.scrollToIndex(index,{align:"auto",behavior:"auto"})}drawWaveform(){const canvas=this.canvasEl,ownerWindow=this.ownerDocument.defaultView;if(!this.peaks.length){this.waveformDirty=!1;return}if(!this.isConnected||!canvas||!ownerWindow||!this.waveformVisible){this.waveformDirty=!0;return}this.cancelWaveformDrawFrame(),this.waveformDirty=!1,this.paintWaveform()}paintWaveform(){const canvas=this.canvasEl;if(!canvas||!this.peaks.length)return;const ownerWindow=this.ownerDocument.defaultView;if(!ownerWindow)return;const dpr=positiveFinite(ownerWindow.devicePixelRatio),width=positiveFinite(canvas.clientWidth),height=positiveFinite(canvas.clientHeight),allocation=resolveBoundedCanvasAllocation({cssWidth:width,cssHeight:height,desiredScale:dpr,maxDimension:MAX_CANVAS_DIMENSION,maxPixels:MAX_CANVAS_PIXELS});this.lastWaveformAllocation={target:canvas,width,height,dpr},canvas.width=allocation.pixelWidth,canvas.height=allocation.pixelHeight;const ctx=canvas.getContext("2d");if(!ctx)return;const scaleX=allocation.scaleX,scaleY=allocation.scaleY;ctx.setTransform(scaleX,0,0,scaleY,0,0),ctx.clearRect(0,0,width,height);const computed=ownerWindow.getComputedStyle(this),tokenColor=computed.getPropertyValue("--lr-color-brand").trim(),color=ownerWindow.CSS.supports("color",tokenColor)?tokenColor:computed.color;ctx.fillStyle=color;const peaks=waveformPaintPeaks(this.peaks,canvas.width),barWidth=width/peaks.length,physicalPixel=Math.min(barWidth,finiteNumber(1/scaleX,barWidth)),paintedBarWidth=Math.max(physicalPixel,barWidth-physicalPixel);peaks.forEach((peak,i)=>{const barHeight=Math.max(1,finiteRange(peak,0,0,1)*height);ctx.fillRect(i*barWidth,(height-barHeight)/2,paintedBarWidth,barHeight)})}scheduleWaveformDraw(){if(this.waveformDrawFrame)return;const owner=this.ownerDocument.defaultView;if(!owner||!this.isConnected)return;const request={owner,handle:0};request.handle=owner.requestAnimationFrame(()=>{this.waveformDrawFrame===request&&(this.waveformDrawFrame=void 0,this.isConnected&&this.ownerDocument.defaultView===owner&&this.drawWaveform())}),this.waveformDrawFrame=request}cancelWaveformDrawFrame(){const request=this.waveformDrawFrame;request&&request.owner.cancelAnimationFrame(request.handle),this.waveformDrawFrame=void 0}renderMarkers(){if(!this.duration)return nothing;const ranged=this.highlights.filter(h=>h.anchor.kind==="time-range");return ranged.length?html`${ranged.map(h=>{const startSeconds=finiteRange(h.anchor.start,0,0,this.duration),endSeconds=h.anchor.end==null?startSeconds:finiteRange(h.anchor.end,startSeconds,startSeconds,this.duration),start=startSeconds/this.duration*100,end=endSeconds/this.duration*100;return html`<button
13
13
  part="timeline-marker"
14
14
  type="button"
15
15
  data-tone=${h.tone??"accent"}
@@ -17,7 +17,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
17
17
  style="inset-inline-start:${start}%;inline-size:${Math.max(.5,end-start)}%"
18
18
  aria-label=${h.label||this.localize("viewerHighlightLabel")}
19
19
  @click=${event=>{event.stopPropagation(),this.onHighlightActivate(h.id,h.anchor.start)}}
20
- ></button>`})}`:nothing}rateOptions(){const validRates=[...new Set((Array.isArray(this.rates)?this.rates:[]).filter(rate=>Number.isFinite(rate)&&rate>=MIN_PLAYBACK_RATE&&rate<=MAX_PLAYBACK_RATE))];return validRates.includes(this.playbackRate)?validRates:[...validRates,this.playbackRate].sort((a,b)=>a-b)}safeCueStart(cue){const max=this.duration>0?this.duration:1/0;return finiteRange(cue.start,0,0,max)}safeCueEnd(cue,start,cueIndex){if(cue.end==null){let nextStart=1/0;return this.cues.forEach((candidate,index)=>{if(index===cueIndex)return;const candidateStart=this.safeCueStart(candidate);candidateStart>start&&candidateStart<nextStart&&(nextStart=candidateStart)}),nextStart}const max=this.duration>0?this.duration:1/0;return finiteRange(cue.end,start,start,max)}rebuildCueKeys(){this.cueKeys=this.cues.map(cue=>`cue:${cue.cueId.length}:${cue.cueId}`)}refreshTranscriptRenderItem(){this.transcriptRenderItem=(cue,index)=>this.renderCue(cue,index)}renderTracks(){return this.tracks.map(t=>{const trackSrc=safeMediaSrc(t.src);return trackSrc?html`<track src=${trackSrc} kind=${t.kind} srclang=${t.srclang} label=${t.label} ?default=${t.default} />`:nothing})}render(){const explicitHostLabel=hostAriaLabel(this),aggregateLabel=explicitHostLabel??(this.name||this.localize("avPlayerLabel")),safeSrc=this.src?safeMediaSrc(this.src):null,safePoster=this.poster?safeMediaSrc(this.poster):null,kind=this.detectedKind(),baseOwnsAggregate=explicitHostLabel===null&&!!(this.name||!safeSrc&&this.src),mediaLabel=explicitHostLabel===""?"":this.localize("avPlayerLabel");return!safeSrc&&this.src?html`<div
20
+ ></button>`})}`:nothing}rateOptions(){const validRates=[...new Set((Array.isArray(this.rates)?this.rates:[]).filter(rate=>Number.isFinite(rate)&&rate>=MIN_PLAYBACK_RATE&&rate<=MAX_PLAYBACK_RATE))];return validRates.includes(this.playbackRate)?validRates:[...validRates,this.playbackRate].sort((a,b)=>a-b)}safeCueStart(cue){const max=this.duration>0?this.duration:1/0;return finiteRange(cue.start,0,0,max)}safeCueEnd(cue,start){const max=this.duration>0?this.duration:1/0;if(cue.end==null){const nextStart=this.nextCueStarts.get(cue.start)??1/0;return start>=max||nextStart===1/0?1/0:Math.min(nextStart,max)}return finiteRange(cue.end,start,start,max)}rebuildCueKeys(){this.cueKeys=this.cues.map(cue=>`cue:${cue.cueId.length}:${cue.cueId}`)}refreshTranscriptRenderItem(){this.transcriptRenderItem=(cue,index)=>this.renderCue(cue,index)}renderTracks(){return this.tracks.map(t=>{const trackSrc=safeMediaSrc(t.src);return trackSrc?html`<track src=${trackSrc} kind=${t.kind} srclang=${t.srclang} label=${t.label} ?default=${t.default} />`:nothing})}render(){const explicitHostLabel=hostAriaLabel(this),aggregateLabel=explicitHostLabel??(this.name||this.localize("avPlayerLabel")),safeSrc=this.src?safeMediaSrc(this.src):null,safePoster=this.poster?safeMediaSrc(this.poster):null,kind=this.detectedKind(),baseOwnsAggregate=explicitHostLabel===null&&!!(this.name||!safeSrc&&this.src),mediaLabel=explicitHostLabel===""?"":this.localize("avPlayerLabel");return!safeSrc&&this.src?html`<div
21
21
  part="base"
22
22
  role=${baseOwnsAggregate?"region":nothing}
23
23
  aria-label=${baseOwnsAggregate?aggregateLabel:nothing}
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);--_lr-av-player-transcript-height:var(--lr-size-16rem);min-inline-size:0;display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;max-inline-size:100%;display:flex}[part=media]{border-radius:var(--lr-radius);background:var(--lr-color-surface-raised);inline-size:100%}[part=toolbar]{align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}.rate-select-wrapper{align-items:center;min-inline-size:0;max-inline-size:100%;display:inline-flex;position:relative}[part=rate-select]{appearance:none;inline-size:100%;min-inline-size:0;max-inline-size:100%;padding-inline:var(--lr-space-s) var(--lr-space-l);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}@container (inline-size<=20rem){[part=rate-select]{max-inline-size:var(--lr-size-8rem)}}[part=rate-select] option{background:var(--lr-color-surface);color:var(--lr-color-text)}[part=rate-select]:hover{background:var(--lr-color-brand-quiet)}[part=rate-select]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=rate-select]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}.rate-select-chevron{color:var(--lr-color-text-quiet);line-height:var(--lr-line-height-none);pointer-events:none;display:inline-flex;position:absolute;inset-inline-end:var(--lr-space-xs)}.rate-select-chevron svg{transform:rotate(90deg)}.timeline-positioner{min-inline-size:0;max-inline-size:100%;position:relative}[part=timeline]{block-size:var(--lr-size-3rem);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface-raised);cursor:pointer;direction:ltr}[part=timeline]:hover{border-color:var(--lr-color-brand)}[part=timeline]:active{border-color:var(--lr-color-brand);background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=timeline]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=timeline][aria-disabled=true]{cursor:default}[part=timeline] canvas{block-size:100%;inline-size:100%;display:block}[part=timeline-marker]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);cursor:pointer;--_lr-av-player-marker-fill:var(--lr-av-player-marker-bg,color-mix(in srgb, var(--lr-color-brand) 35%, transparent));background:var(--lr-av-player-marker-fill,var(--_lr-av-player-marker-fill));border:none;padding:0;position:absolute;inset-block:0}.timeline-markers{pointer-events:none;direction:ltr;position:absolute;inset:0}.timeline-markers [part=timeline-marker]{pointer-events:auto}[part=timeline-marker]:hover{background:color-mix(in oklab, var(--lr-av-player-marker-fill,var(--_lr-av-player-marker-fill)), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}[part=timeline-marker]:active{background:color-mix(in oklab, var(--lr-av-player-marker-fill,var(--_lr-av-player-marker-fill)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=timeline-marker][data-tone=success]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-success-bg,color-mix(in srgb, var(--lr-color-success) 35%, transparent))}[part=timeline-marker][data-tone=warning]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-warning-bg,color-mix(in srgb, var(--lr-color-warning) 35%, transparent))}[part=timeline-marker][data-tone=danger]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-danger-bg,color-mix(in srgb, var(--lr-color-danger) 35%, transparent))}[part=timeline-marker][data-tone=neutral]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-neutral-bg,color-mix(in srgb, var(--lr-color-text) 25%, transparent))}[part=timeline-marker][data-active]{outline:var(--lr-border-width-medium) solid var(--lr-av-player-marker-active-color,var(--lr-color-brand));outline-offset:calc(-1 * var(--lr-border-width-medium))}[part=timeline-marker]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=transcript]{--lr-virtual-list-height:var(--lr-av-player-transcript-height,var(--_lr-av-player-transcript-height))}lr-virtual-list::part(cue){text-align:start;inline-size:100%;padding:var(--lr-space-xs) var(--lr-space-s);cursor:pointer;color:var(--lr-color-text);font:inherit;overflow-wrap:anywhere;background:0 0;border:none;min-inline-size:0;max-inline-size:100%;display:block}lr-virtual-list::part(cue):hover{background:var(--lr-color-brand-quiet)}lr-virtual-list::part(cue):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}lr-virtual-list::part(cue-current){background:var(--lr-av-player-cue-current-bg,var(--lr-color-brand-quiet))}lr-virtual-list::part(cue-match){outline:var(--lr-border-width-thin) dashed var(--lr-color-warning)}lr-virtual-list::part(cue-active-match){outline:var(--lr-border-width-medium) solid var(--lr-av-player-cue-active-match-color,var(--lr-color-warning))}lr-virtual-list::part(cue):focus-visible{outline:var(--lr-focus-ring);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}lr-virtual-list::part(cue-time){color:var(--lr-color-text);font-size:var(--lr-font-size-xs);margin-inline-end:var(--lr-space-2xs)}lr-virtual-list::part(cue-speaker){font-weight:var(--lr-font-weight-semibold);margin-inline-end:var(--lr-space-2xs)}lr-virtual-list::part(cue-speaker),lr-virtual-list::part(cue-text){overflow-wrap:anywhere;min-inline-size:0}[part=error]{color:var(--lr-color-danger);padding:var(--lr-space-l);text-align:center}@media (forced-colors:active){[part=rate-select]:hover{outline:var(--lr-border-width-thin) solid Highlight;border-style:double}[part=timeline-marker]{border:var(--lr-border-width-thin) solid CanvasText;forced-color-adjust:auto}[part=timeline-marker][data-tone=success]{border-style:double}[part=timeline-marker][data-tone=warning]{border-style:dashed}[part=timeline-marker][data-tone=danger]{border-style:dotted}[part=timeline-marker][data-tone=neutral]{outline:var(--lr-border-width-thin) dashed CanvasText;outline-offset:calc(-1 * var(--lr-border-width-medium));border-style:solid}[part=timeline-marker][data-active]{outline:var(--lr-border-width-medium) solid Highlight}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);--_lr-av-player-transcript-height:var(--lr-size-16rem);min-inline-size:0;display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;max-inline-size:100%;display:flex}[part=media]{border-radius:var(--lr-radius);background:var(--lr-color-surface-raised);inline-size:100%}[part=toolbar]{align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}.rate-select-wrapper{align-items:center;min-inline-size:0;max-inline-size:100%;display:inline-flex;position:relative}[part=rate-select]{appearance:none;inline-size:100%;min-inline-size:0;max-inline-size:100%;padding-inline:var(--lr-space-s) var(--lr-space-l);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}@container (inline-size<=20rem){[part=rate-select]{max-inline-size:var(--lr-size-8rem)}}[part=rate-select] option{background:var(--lr-color-surface);color:var(--lr-color-text)}[part=rate-select]:hover{background:var(--lr-color-brand-quiet)}[part=rate-select]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=rate-select]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}.rate-select-chevron{color:var(--lr-color-text-quiet);line-height:var(--lr-line-height-none);pointer-events:none;display:inline-flex;position:absolute;inset-inline-end:var(--lr-space-xs)}.rate-select-chevron svg{transform:rotate(90deg)}.timeline-positioner{min-inline-size:0;max-inline-size:100%;position:relative}[part=timeline]{block-size:var(--lr-size-3rem);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface-raised);cursor:pointer;direction:ltr}[part=timeline]:hover:where(:not([aria-disabled=true])){border-color:var(--lr-color-brand)}[part=timeline]:active:where(:not([aria-disabled=true])){border-color:var(--lr-color-brand);background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=timeline]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=timeline][aria-disabled=true]{cursor:default}[part=timeline] canvas{block-size:100%;inline-size:100%;display:block}[part=timeline-marker]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);cursor:pointer;--_lr-av-player-marker-fill:var(--lr-av-player-marker-bg,color-mix(in srgb, var(--lr-color-brand) 35%, transparent));background:var(--lr-av-player-marker-fill,var(--_lr-av-player-marker-fill));border:none;padding:0;position:absolute;inset-block:0}.timeline-markers{pointer-events:none;direction:ltr;position:absolute;inset:0}.timeline-markers [part=timeline-marker]{pointer-events:auto}[part=timeline-marker]:hover{background:color-mix(in oklab, var(--lr-av-player-marker-fill,var(--_lr-av-player-marker-fill)), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}[part=timeline-marker]:active{background:color-mix(in oklab, var(--lr-av-player-marker-fill,var(--_lr-av-player-marker-fill)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=timeline-marker][data-tone=success]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-success-bg,color-mix(in srgb, var(--lr-color-success) 35%, transparent))}[part=timeline-marker][data-tone=warning]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-warning-bg,color-mix(in srgb, var(--lr-color-warning) 35%, transparent))}[part=timeline-marker][data-tone=danger]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-danger-bg,color-mix(in srgb, var(--lr-color-danger) 35%, transparent))}[part=timeline-marker][data-tone=neutral]{--_lr-av-player-marker-fill:var(--lr-av-player-marker-neutral-bg,color-mix(in srgb, var(--lr-color-text) 25%, transparent))}[part=timeline-marker][data-active]{outline:var(--lr-border-width-medium) solid var(--lr-av-player-marker-active-color,var(--lr-color-brand));outline-offset:calc(-1 * var(--lr-border-width-medium))}[part=timeline-marker]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=transcript]{--lr-virtual-list-height:var(--lr-av-player-transcript-height,var(--_lr-av-player-transcript-height))}lr-virtual-list::part(cue){text-align:start;inline-size:100%;padding:var(--lr-space-xs) var(--lr-space-s);cursor:pointer;color:var(--lr-color-text);font:inherit;overflow-wrap:anywhere;background:0 0;border:none;min-inline-size:0;max-inline-size:100%;display:block}lr-virtual-list::part(cue):hover{background:var(--lr-color-brand-quiet)}lr-virtual-list::part(cue):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}lr-virtual-list::part(cue-current){background:var(--lr-av-player-cue-current-bg,var(--lr-color-brand-quiet))}lr-virtual-list::part(cue-match){outline:var(--lr-border-width-thin) dashed var(--lr-color-warning)}lr-virtual-list::part(cue-active-match){outline:var(--lr-border-width-medium) solid var(--lr-av-player-cue-active-match-color,var(--lr-color-warning))}lr-virtual-list::part(cue):focus-visible{outline:var(--lr-focus-ring);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}lr-virtual-list::part(cue-time){color:var(--lr-color-text);font-size:var(--lr-font-size-xs);margin-inline-end:var(--lr-space-2xs)}lr-virtual-list::part(cue-speaker){font-weight:var(--lr-font-weight-semibold);margin-inline-end:var(--lr-space-2xs)}lr-virtual-list::part(cue-speaker),lr-virtual-list::part(cue-text){overflow-wrap:anywhere;min-inline-size:0}[part=error]{color:var(--lr-color-danger);padding:var(--lr-space-l);text-align:center}@media (forced-colors:active){[part=rate-select]:hover{outline:var(--lr-border-width-thin) solid Highlight;border-style:double}[part=timeline-marker]{border:var(--lr-border-width-thin) solid CanvasText;forced-color-adjust:auto}[part=timeline-marker][data-tone=success]{border-style:double}[part=timeline-marker][data-tone=warning]{border-style:dashed}[part=timeline-marker][data-tone=danger]{border-style:dotted}[part=timeline-marker][data-tone=neutral]{outline:var(--lr-border-width-thin) dashed CanvasText;outline-offset:calc(-1 * var(--lr-border-width-medium));border-style:solid}[part=timeline-marker][data-active]{outline:var(--lr-border-width-medium) solid Highlight}}`;export{styles};
@@ -44,7 +44,8 @@ initials:string;
44
44
  * `image` to match `wa-avatar`; it used to be `src`, which a mechanical rename left unset —
45
45
  * silently falling back to initials. */
46
46
  image:string;
47
- /** Accessible description matching the upstream avatar contract. A host `aria-label` wins. */
47
+ /** Accessible description matching the upstream avatar contract. A host `aria-label` wins.
48
+ * Attribute removal is consumed as an absent label without changing its null readback. */
48
49
  label:string;
49
50
  /** Native `<img loading>` passthrough. `'lazy'` defers the request until the avatar approaches
50
51
  * the viewport — worth setting for avatars far down a long list, never for one above the fold. */
@@ -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{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{safeMediaSrc}from"../../../internal/safe-url.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{styles}from"./avatar.styles.js";class LyraAvatar extends LyraElement{static{this.styles=[LyraElement.styles,styles]}constructor(){super(),this.initials="",this.image="",this.label="",this.loading="eager",this.size="medium",this.shape="circle",this.variant="neutral",this.hasIconSlot=!1,this.connectionEventBaselinePending=!0,this.onDecorativeGlyphFocusIn=event=>{const focusEvent=event,target=event.target;if(target===this||target?.nodeType!==1||!this.contains(target))return;const previous=focusEvent.relatedTarget;if(previous?.nodeType===1&&!this.contains(previous)&&typeof previous.focus=="function"){previous.focus();return}target.blur?.()},this.onImageError=event=>{const image=event.currentTarget,failedSrc=image?.getAttribute("src"),currentSrc=this.safeImage();!this.isConnected||!image||image!==this.renderRoot.querySelector('[part="image"]')||!failedSrc||failedSrc!==currentSrc||this.failedSrc!==failedSrc&&(this.failedSrc=failedSrc,this.emit("lr-error",{image:failedSrc}))},this.onNamedIconSlotChange=e=>{this.hasIconSlot=e.target.assignedNodes({flatten:!0}).length>0},this.addEventListener("focusin",this.onDecorativeGlyphFocusIn)}safeImage(){return safeMediaSrc(this.image,this.ownerDocument?.defaultView?.URL??URL)}hasIconSlotContent(nodes){return Array.from(nodes).some(node=>node.nodeType===1&&node.getAttribute("slot")==="icon")}willUpdate(changed){super.willUpdate(changed);const mayEmitConnectionTransition=this.isConnected&&!this.connectionEventBaselinePending;changed.has("loading")&&this.loading!=="eager"&&this.loading!=="lazy"&&(this.loading="eager"),changed.has("size")&&this.size!=="2xs"&&this.size!=="xs"&&this.size!=="s"&&this.size!=="m"&&this.size!=="l"&&this.size!=="xl"&&this.size!=="small"&&this.size!=="medium"&&this.size!=="large"&&(this.size="medium"),changed.has("shape")&&this.shape!=="circle"&&this.shape!=="rounded"&&this.shape!=="square"&&(this.shape="circle"),changed.has("variant")&&this.variant!=="neutral"&&this.variant!=="brand"&&this.variant!=="success"&&this.variant!=="warning"&&this.variant!=="danger"&&(this.variant="neutral"),changed.has("image")&&(this.failedSrc=void 0,this.hasUpdated&&this.image&&!this.safeImage()&&mayEmitConnectionTransition&&this.emit("lr-error",{image:this.image})),this.seedFirstRenderState(()=>{this.hasIconSlot=this.hasIconSlotContent(this.childNodes)})}connectedCallback(){super.connectedCallback(),this.connectionEventBaselinePending=!0,this.requestUpdate()}updated(changed){super.updated(changed),this.isConnected&&(this.connectionEventBaselinePending=!1)}disconnectedCallback(){this.connectionEventBaselinePending=!0,this.failedSrc=void 0,super.disconnectedCallback()}render(){const safeImage=this.safeImage(),showImage=!!safeImage&&safeImage!==this.failedSrc,showGlyph=!showImage&&this.hasIconSlot,showInitials=!showGlyph&&!showImage,explicitHostLabel=hostAriaLabel(this),accessibleName=explicitHostLabel??this.label,suppressFallbackSemantics=explicitHostLabel!==null||this.label.length>0,hasAccessibleFallback=(showGlyph||showInitials)&&accessibleName.length>0;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{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{safeMediaSrc}from"../../../internal/safe-url.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{styles}from"./avatar.styles.js";class LyraAvatar extends LyraElement{static{this.styles=[LyraElement.styles,styles]}constructor(){super(),this.initials="",this.image="",this.label="",this.loading="eager",this.size="medium",this.shape="circle",this.variant="neutral",this.hasIconSlot=!1,this.connectionEventBaselinePending=!0,this.onDecorativeGlyphFocusIn=event=>{const focusEvent=event,target=event.target;if(target===this||target?.nodeType!==1||!this.contains(target))return;const previous=focusEvent.relatedTarget;if(previous?.nodeType===1&&!this.contains(previous)&&typeof previous.focus=="function"){previous.focus();return}target.blur?.()},this.onImageError=event=>{const image=event.currentTarget,failedSrc=image?.getAttribute("src"),currentSrc=this.safeImage();!this.isConnected||!image||image!==this.renderRoot.querySelector('[part="image"]')||!failedSrc||failedSrc!==currentSrc||this.failedSrc!==failedSrc&&(this.failedSrc=failedSrc,this.emit("lr-error",{image:failedSrc}))},this.onNamedIconSlotChange=e=>{this.hasIconSlot=e.target.assignedNodes({flatten:!0}).length>0},this.addEventListener("focusin",this.onDecorativeGlyphFocusIn)}safeImage(){return safeMediaSrc(this.image,this.ownerDocument?.defaultView?.URL??URL)}hasIconSlotContent(nodes){return Array.from(nodes).some(node=>node.nodeType===1&&node.getAttribute("slot")==="icon")}willUpdate(changed){super.willUpdate(changed);const mayEmitConnectionTransition=this.isConnected&&!this.connectionEventBaselinePending;changed.has("loading")&&this.loading!=="eager"&&this.loading!=="lazy"&&(this.loading="eager"),changed.has("size")&&this.size!=="2xs"&&this.size!=="xs"&&this.size!=="s"&&this.size!=="m"&&this.size!=="l"&&this.size!=="xl"&&this.size!=="small"&&this.size!=="medium"&&this.size!=="large"&&(this.size="medium"),changed.has("shape")&&this.shape!=="circle"&&this.shape!=="rounded"&&this.shape!=="square"&&(this.shape="circle"),changed.has("variant")&&this.variant!=="neutral"&&this.variant!=="brand"&&this.variant!=="success"&&this.variant!=="warning"&&this.variant!=="danger"&&(this.variant="neutral"),changed.has("image")&&(this.failedSrc=void 0,this.hasUpdated&&this.image&&!this.safeImage()&&mayEmitConnectionTransition&&this.emit("lr-error",{image:this.image})),this.seedFirstRenderState(()=>{this.hasIconSlot=this.hasIconSlotContent(this.childNodes)})}connectedCallback(){super.connectedCallback(),this.connectionEventBaselinePending=!0,this.requestUpdate()}updated(changed){super.updated(changed),this.isConnected&&(this.connectionEventBaselinePending=!1)}disconnectedCallback(){this.connectionEventBaselinePending=!0,this.failedSrc=void 0,super.disconnectedCallback()}render(){const safeImage=this.safeImage(),showImage=!!safeImage&&safeImage!==this.failedSrc,showGlyph=!showImage&&this.hasIconSlot,showInitials=!showGlyph&&!showImage,explicitHostLabel=hostAriaLabel(this),label=this.label??"",accessibleName=explicitHostLabel??label,suppressFallbackSemantics=explicitHostLabel!==null||label.length>0,hasAccessibleFallback=(showGlyph||showInitials)&&accessibleName.length>0;return html`
2
2
  <span
3
3
  part="base"
4
4
  role=${hasAccessibleFallback?"img":nothing}
@@ -141,8 +141,10 @@ directory:boolean;
141
141
  /** Enables files pasted from the clipboard into the dropzone. `true`-defaulting, so a plain
142
142
  * `paste="false"` attribute (not just a `.paste=${false}` property binding) actually disables it. */
143
143
  paste:boolean;
144
- /** Form-control label. Empty leaves the localized dropzone instruction as the visible fallback. */
145
- label:string;hint:string;
144
+ /** Form-control label. Empty or removed leaves the localized dropzone instruction as the visible fallback. */
145
+ label:string;
146
+ /** Optional hint copy. Removing the attribute removes its text and description association. */
147
+ hint:string;
146
148
  /** Plain-text validation error. A custom-validity message is shown when this is empty. */
147
149
  errorText:string;
148
150
  /** SSR slot-presence hint for label content. */
@@ -13,7 +13,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
13
13
  aria-label=${this.localize("removeWithContext",void 0,{label:file.name})}
14
14
  @click=${()=>this.removeFile(index)}
15
15
  >${closeIcon()}</button>
16
- </div>`}render(){const label=this.effectiveLabel,hasLabel=this.withLabel||this.slotPresence.has("label")||this.label.length>0,explicitHostLabel=hostAriaLabel(this),explicitAccessibleLabel=this.hasAttribute("accessible-label")||this.accessibleLabel?this.accessibleLabel:null,accessibleLabel=explicitHostLabel??explicitAccessibleLabel,labelledBy=accessibleLabel==null&&hasLabel?"file-input-label":void 0,fallbackAriaLabel=accessibleLabel??(hasLabel?void 0:label),hasHint=this.withHint||this.slotPresence.has("hint")||this.hint.length>0,renderedError=this.errorText||this.customError||(this.touched?this.validationMessage:""),hasError=this.withError||this.slotPresence.has("error")||renderedError.length>0,describedBy=[hasError?"file-input-error":"",hasHint?"file-input-hint":""].filter(Boolean).join(" "),invalid=hasError||this.touched&&!this.internals.validity.valid;return html`
16
+ </div>`}render(){const label=this.effectiveLabel,hasLabel=this.withLabel||this.slotPresence.has("label")||(this.label??"").length>0,explicitHostLabel=hostAriaLabel(this),explicitAccessibleLabel=this.hasAttribute("accessible-label")||this.accessibleLabel?this.accessibleLabel:null,accessibleLabel=explicitHostLabel??explicitAccessibleLabel,labelledBy=accessibleLabel==null&&hasLabel?"file-input-label":void 0,fallbackAriaLabel=accessibleLabel??(hasLabel?void 0:label),hasHint=this.withHint||this.slotPresence.has("hint")||(this.hint??"").length>0,renderedError=this.errorText||this.customError||(this.touched?this.validationMessage:""),hasError=this.withError||this.slotPresence.has("error")||renderedError.length>0,describedBy=[hasError?"file-input-error":"",hasHint?"file-input-hint":""].filter(Boolean).join(" "),invalid=hasError||this.touched&&!this.internals.validity.valid;return html`
17
17
  <div part="form-control">
18
18
  <label
19
19
  id="file-input-label"
@@ -1 +1 @@
1
- import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";const styles=css` :host { display: block; min-inline-size: 0; max-inline-size: 100%; --_lr-file-input-font-size: var(--lr-form-control-font-size); --_lr-file-input-dropzone-font-size: var(--lr-font-size-md-sm); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-xl); --_lr-file-input-dropzone-padding: var(--lr-space-l); --_lr-file-input-detail-font-size: var(--lr-font-size-sm); } :host([size="2xs"]), :host([size="xs"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-xs); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-md-sm); --_lr-file-input-dropzone-padding: var(--lr-space-s); --_lr-file-input-detail-font-size: var(--lr-font-size-2xs); } :host([size="s"]), :host([size="small"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-sm); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-lg); --_lr-file-input-dropzone-padding: var(--lr-space-m); --_lr-file-input-detail-font-size: var(--lr-font-size-xs); } :host([size="l"]), :host([size="large"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-lg); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-2xl); --_lr-file-input-dropzone-padding: var(--lr-space-2xl); --_lr-file-input-detail-font-size: var(--lr-font-size-md-sm); } :host([size="xl"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-xl); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-3xl); --_lr-file-input-dropzone-padding: var(--lr-space-2xl); --_lr-file-input-detail-font-size: var(--lr-font-size-m); } [part="form-control"] { min-inline-size: 0; max-inline-size: 100%; block-size: 100%; } [part~="form-control-label"] { display: block; min-inline-size: 0; margin-block-end: var(--lr-space-xs); font-size: var(--lr-file-input-font-size, var(--_lr-file-input-font-size)); font-weight: var(--lr-font-weight-semibold); overflow-wrap: anywhere; } [part~="form-control-label"][hidden], [part="hint"][hidden], [part="error"][hidden] { display: none; } ${formControlRequiredMarker} .dropzone { position: relative; display: grid; min-inline-size: 0; block-size: 100%; } [part~="base"] { grid-area: 1 / 1; inline-size: 100%; block-size: 100%; min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); box-sizing: border-box; font: inherit; cursor: pointer; appearance: none; padding: var( --lr-file-input-dropzone-padding, var(--_lr-file-input-dropzone-padding) ); border: var(--lr-border-width-medium) dashed var(--lr-color-border); border-radius: var(--lr-file-input-radius, var(--lr-radius)); background: var(--lr-color-surface); color: var(--lr-color-text-quiet); font-size: var( --lr-file-input-dropzone-font-size, var(--_lr-file-input-dropzone-font-size) ); } .dropzone-content { grid-area: 1 / 1; z-index: var(--lr-layer-content); min-inline-size: 0; max-inline-size: 100%; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--lr-file-input-gap, var(--lr-space-xs)); padding: var( --lr-file-input-dropzone-padding, var(--_lr-file-input-dropzone-padding) ); color: var(--lr-color-text-quiet); text-align: center; font-size: var( --lr-file-input-dropzone-font-size, var(--_lr-file-input-dropzone-font-size) ); overflow-wrap: anywhere; pointer-events: none; } [part="dropzone-icon"] { display: inline-flex; align-items: center; justify-content: center; font-size: var( --lr-file-input-dropzone-icon-size, var(--_lr-file-input-dropzone-icon-size) ); } [part="dropzone-text"] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; } ::slotted(*) { max-inline-size: 100%; min-inline-size: 0; pointer-events: auto; } :host([compact]) [part~="base"] { padding: var(--lr-file-input-compact-padding, var(--lr-space-s)); font-size: var(--lr-file-input-compact-font-size, var(--lr-font-size-sm)); } :host([compact]) .dropzone-content { padding: var(--lr-file-input-compact-padding, var(--lr-space-s)); gap: var( --lr-file-input-compact-gap, var(--lr-file-input-gap, var(--lr-space-2xs)) ); font-size: var(--lr-file-input-compact-font-size, var(--lr-font-size-sm)); } [part~="base"][data-drag-state="accept"] { border-color: var( --lr-file-input-accept-border-color, var(--lr-color-success) ); background: var( --lr-file-input-accept-bg, color-mix(in srgb, var(--lr-color-success) 8%, transparent) ); } [part~="base"][data-drag-state="reject"] { border-color: var( --lr-file-input-reject-border-color, var(--lr-color-danger) ); background: var( --lr-file-input-reject-bg, color-mix(in srgb, var(--lr-color-danger) 8%, transparent) ); } @media (forced-colors: active) { [part~="base"][data-drag-state="accept"] { border-color: Highlight; border-style: double; outline: var(--lr-border-width-thin) solid Highlight; outline-offset: calc(-1 * var(--lr-border-width-medium)); } [part~="base"][data-drag-state="reject"] { border-color: CanvasText; border-style: dotted; outline: var(--lr-border-width-medium) double CanvasText; outline-offset: calc(-1 * var(--lr-border-width-medium)); } } :host(:not(:disabled)) [part~="base"]:hover { border-color: var(--lr-color-brand); } :host(:not(:disabled)) .dropzone:hover [part~="base"] { border-color: var(--lr-color-brand); } :host(:not(:disabled)) [part~="base"]:active { 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) ); } :host(:not(:disabled)) .dropzone:active [part~="base"] { 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~="base"]:focus-visible { outline: var(--lr-focus-ring); outline-offset: var(--lr-focus-ring-offset); } :host(:disabled) [part~="base"] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part="rejection"] { min-inline-size: 0; max-inline-size: 100%; margin-block: var(--lr-space-2xs) 0; color: var(--lr-color-danger); font-size: var(--lr-font-size-sm); text-align: start; overflow-wrap: anywhere; } [part="rejection"] ul { margin: 0; padding-inline-start: var(--lr-space-m); } [part="file-list"] { display: grid; gap: var(--lr-space-xs); margin-block-start: var(--lr-space-xs); } [part="file"] { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--lr-space-s); min-inline-size: 0; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface-raised); } [part="file-thumbnail"] { display: inline-flex; align-items: center; justify-content: center; inline-size: var(--lr-icon-button-size); block-size: var(--lr-icon-button-size); overflow: hidden; border-radius: var(--lr-radius-xs); color: var(--lr-color-text-quiet); } [part="file-image"] { inline-size: 100%; block-size: 100%; object-fit: cover; } [part="file-icon"] { display: inline-flex; font-size: var(--lr-font-size-xl); } [part="file-details"] { display: flex; flex-direction: column; min-inline-size: 0; } [part="file-name"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--lr-color-text); font-size: var(--lr-file-input-font-size, var(--_lr-file-input-font-size)); } [part="file-size"] { color: var(--lr-color-text-quiet); font-size: var( --lr-file-input-detail-font-size, var(--_lr-file-input-detail-font-size) ); } [part="remove-button"] { 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); padding: 0; border: none; border-radius: var(--lr-radius); background: transparent; color: var(--lr-color-text-quiet); font: inherit; cursor: pointer; } [part="remove-button"]:hover { background: var(--lr-color-brand-quiet); color: var(--lr-color-text); } [part="remove-button"]:active { background: color-mix( in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part="remove-button"]:focus-visible { outline: var(--lr-focus-ring); outline-offset: var(--lr-focus-ring-offset); } [part="remove-button"]:disabled { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part="hint"] { min-inline-size: 0; margin-block-start: var(--lr-space-xs); color: var(--lr-color-text-quiet); font-size: var( --lr-file-input-detail-font-size, var(--_lr-file-input-detail-font-size) ); overflow-wrap: anywhere; } [part="error"] { min-inline-size: 0; margin-block-start: var(--lr-space-xs); color: var(--lr-color-danger); font-size: var( --lr-file-input-detail-font-size, var(--_lr-file-input-detail-font-size) ); overflow-wrap: anywhere; } `;export{styles};
1
+ import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";const styles=css` :host { display: block; min-inline-size: 0; max-inline-size: 100%; --_lr-file-input-font-size: var(--lr-form-control-font-size); --_lr-file-input-dropzone-font-size: var(--lr-font-size-md-sm); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-xl); --_lr-file-input-dropzone-padding: var(--lr-space-l); --_lr-file-input-detail-font-size: var(--lr-font-size-sm); } :host([size="2xs"]), :host([size="xs"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-xs); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-md-sm); --_lr-file-input-dropzone-padding: var(--lr-space-s); --_lr-file-input-detail-font-size: var(--lr-font-size-2xs); } :host([size="s"]), :host([size="small"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-sm); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-lg); --_lr-file-input-dropzone-padding: var(--lr-space-m); --_lr-file-input-detail-font-size: var(--lr-font-size-xs); } :host([size="l"]), :host([size="large"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-lg); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-2xl); --_lr-file-input-dropzone-padding: var(--lr-space-2xl); --_lr-file-input-detail-font-size: var(--lr-font-size-md-sm); } :host([size="xl"]) { --_lr-file-input-dropzone-font-size: var(--lr-font-size-xl); --_lr-file-input-dropzone-icon-size: var(--lr-font-size-3xl); --_lr-file-input-dropzone-padding: var(--lr-space-2xl); --_lr-file-input-detail-font-size: var(--lr-font-size-m); } [part="form-control"] { min-inline-size: 0; max-inline-size: 100%; block-size: 100%; } [part~="form-control-label"] { display: block; min-inline-size: 0; margin-block-end: var(--lr-space-xs); font-size: var(--lr-file-input-font-size, var(--_lr-file-input-font-size)); font-weight: var(--lr-font-weight-semibold); overflow-wrap: anywhere; } [part~="form-control-label"][hidden], [part="hint"][hidden], [part="error"][hidden] { display: none; } ${formControlRequiredMarker} .dropzone { position: relative; display: grid; min-inline-size: 0; block-size: 100%; } [part~="base"] { grid-area: 1 / 1; inline-size: 100%; block-size: 100%; min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); box-sizing: border-box; font: inherit; cursor: pointer; appearance: none; padding: var( --lr-file-input-dropzone-padding, var(--_lr-file-input-dropzone-padding) ); border: var(--lr-border-width-medium) dashed var(--lr-color-border); border-radius: var(--lr-file-input-radius, var(--lr-radius)); background: var(--lr-color-surface); color: var(--lr-color-text-quiet); font-size: var( --lr-file-input-dropzone-font-size, var(--_lr-file-input-dropzone-font-size) ); } .dropzone-content { grid-area: 1 / 1; z-index: var(--lr-layer-content); min-inline-size: 0; max-inline-size: 100%; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--lr-file-input-gap, var(--lr-space-xs)); padding: var( --lr-file-input-dropzone-padding, var(--_lr-file-input-dropzone-padding) ); color: var(--lr-color-text-quiet); text-align: center; font-size: var( --lr-file-input-dropzone-font-size, var(--_lr-file-input-dropzone-font-size) ); overflow-wrap: anywhere; pointer-events: none; } [part="dropzone-icon"] { display: inline-flex; align-items: center; justify-content: center; font-size: var( --lr-file-input-dropzone-icon-size, var(--_lr-file-input-dropzone-icon-size) ); } [part="dropzone-text"] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; } ::slotted(*) { max-inline-size: 100%; min-inline-size: 0; pointer-events: auto; } :host([compact]) [part~="base"] { padding: var(--lr-file-input-compact-padding, var(--lr-space-s)); font-size: var(--lr-file-input-compact-font-size, var(--lr-font-size-sm)); } :host([compact]) .dropzone-content { padding: var(--lr-file-input-compact-padding, var(--lr-space-s)); gap: var( --lr-file-input-compact-gap, var(--lr-file-input-gap, var(--lr-space-2xs)) ); font-size: var(--lr-file-input-compact-font-size, var(--lr-font-size-sm)); } [part~="base"][data-drag-state="accept"] { border-color: var( --lr-file-input-accept-border-color, var(--lr-color-success) ); background: var( --lr-file-input-accept-bg, color-mix(in srgb, var(--lr-color-success) 8%, transparent) ); } [part~="base"][data-drag-state="reject"] { border-color: var( --lr-file-input-reject-border-color, var(--lr-color-danger) ); background: var( --lr-file-input-reject-bg, color-mix(in srgb, var(--lr-color-danger) 8%, transparent) ); } @media (forced-colors: active) { [part~="base"][data-drag-state="accept"] { border-color: Highlight; border-style: double; outline: var(--lr-border-width-thin) solid Highlight; outline-offset: calc(-1 * var(--lr-border-width-medium)); } [part~="base"][data-drag-state="reject"] { border-color: CanvasText; border-style: dotted; outline: var(--lr-border-width-medium) double CanvasText; outline-offset: calc(-1 * var(--lr-border-width-medium)); } } :host(:not(:disabled)) [part~="base"]:hover { border-color: var(--lr-color-brand); } :host(:not(:disabled)) .dropzone:hover [part~="base"] { border-color: var(--lr-color-brand); } :host(:not(:disabled)) [part~="base"]:active { 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) ); } :host(:not(:disabled)) .dropzone:active [part~="base"] { 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~="base"]:focus-visible { outline: var(--lr-focus-ring); outline-offset: var(--lr-focus-ring-offset); } :host(:disabled) [part~="base"] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part="rejection"] { min-inline-size: 0; max-inline-size: 100%; margin-block: var(--lr-space-2xs) 0; color: var(--lr-color-danger); font-size: var(--lr-font-size-sm); text-align: start; overflow-wrap: anywhere; } [part="rejection"] ul { margin: 0; padding-inline-start: var(--lr-space-m); } [part="file-list"] { display: grid; gap: var(--lr-space-xs); margin-block-start: var(--lr-space-xs); } [part="file"] { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--lr-space-s); min-inline-size: 0; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface-raised); } [part="file-thumbnail"] { display: inline-flex; align-items: center; justify-content: center; inline-size: var(--lr-icon-button-size); block-size: var(--lr-icon-button-size); overflow: hidden; border-radius: var(--lr-radius-xs); color: var(--lr-color-text-quiet); } [part="file-image"] { inline-size: 100%; block-size: 100%; object-fit: cover; } [part="file-icon"] { display: inline-flex; font-size: var(--lr-font-size-xl); } [part="file-details"] { display: flex; flex-direction: column; min-inline-size: 0; } [part="file-name"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--lr-color-text); font-size: var(--lr-file-input-font-size, var(--_lr-file-input-font-size)); } [part="file-size"] { color: var(--lr-color-text-quiet); font-size: var( --lr-file-input-detail-font-size, var(--_lr-file-input-detail-font-size) ); } [part="remove-button"] { 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); padding: 0; border: none; border-radius: var(--lr-radius); background: transparent; color: var(--lr-color-text-quiet); font: inherit; cursor: pointer; } [part="remove-button"]:hover:where(:not(:disabled)) { background: var(--lr-color-brand-quiet); color: var(--lr-color-text); } [part="remove-button"]:active:where(:not(:disabled)) { background: color-mix( in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part="remove-button"]:focus-visible { outline: var(--lr-focus-ring); outline-offset: var(--lr-focus-ring-offset); } [part="remove-button"]:disabled { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part="hint"] { min-inline-size: 0; margin-block-start: var(--lr-space-xs); color: var(--lr-color-text-quiet); font-size: var( --lr-file-input-detail-font-size, var(--_lr-file-input-detail-font-size) ); overflow-wrap: anywhere; } [part="error"] { min-inline-size: 0; margin-block-start: var(--lr-space-xs); color: var(--lr-color-danger); font-size: var( --lr-file-input-detail-font-size, var(--_lr-file-input-detail-font-size) ); overflow-wrap: anywhere; } `;export{styles};
@@ -116,7 +116,8 @@ maxZoom:number;
116
116
  zoomStep:number;
117
117
  /** Clockwise rotation in 90-degree steps. */
118
118
  private _rotation;get rotation():LyraImageRotation;set rotation(value:LyraImageRotation);
119
- /** Enables region drawing via pointer or keyboard. */
119
+ /** Enables region drawing via pointer or keyboard. The focused image wrapper owns drawing
120
+ * commands and shows the shared focus ring inside its clipped viewport; descendant highlights retain activation. */
120
121
  annotatable:boolean;
121
122
  /** From `DocumentAnchorTarget` — only `region` anchors resolve here. */
122
123
  readonly anchorKinds:readonly LyraAnchorKind[];private loadState;private draft;private revealTarget;private highlightFocusId;private mediaLayoutSize;private errorAnnouncementSink?;private geometryObserver?;private observedWrapper?;private geometryFrame?;private geometryFrameOwner?;private frameEl?;private liveRegion?;private wrapperEl?;