@aceshooting/lyra-ui 13.0.1 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
  6. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
  9. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  10. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
  11. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  12. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
  13. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
  14. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
  15. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
  17. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  18. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
  19. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  20. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  21. package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
  22. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  23. package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
  24. package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
  25. package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
  26. package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
  27. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  28. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  29. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  32. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
  33. package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
  34. package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
  35. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
  41. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
  42. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  44. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  45. package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
  46. package/dist/components/charts/chart/box-plot.class.js +9 -9
  47. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  48. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart-preload.d.ts +1 -1
  51. package/dist/components/charts/chart/chart-preload.js +1 -1
  52. package/dist/components/charts/chart/chart.class.d.ts +27 -9
  53. package/dist/components/charts/chart/chart.class.js +23 -14
  54. package/dist/components/charts/chart/chart.styles.js +1 -1
  55. package/dist/components/charts/chart/histogram-bin.js +1 -1
  56. package/dist/components/charts/chart/lite-chart.class.js +7 -3
  57. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
  60. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
  61. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  62. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  63. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  64. package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
  65. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
  66. package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
  67. package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
  68. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  69. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  70. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
  71. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  73. package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  76. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  77. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
  78. package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
  79. package/dist/components/conversation/markdown/katex-loader.js +1 -1
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
  82. package/dist/components/conversation/markdown/markdown-loader.js +1 -1
  83. package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
  84. package/dist/components/conversation/markdown/markdown-shared.js +5 -4
  85. package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
  86. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  87. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  88. package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
  89. package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
  90. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
  91. package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
  92. package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
  93. package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
  94. package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
  95. package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
  96. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
  97. package/dist/components/conversation/model-select/model-select.class.js +5 -2
  98. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
  99. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  100. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
  101. package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
  102. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  103. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
  104. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  105. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  106. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
  107. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  108. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
  109. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
  112. package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
  113. package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
  114. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  115. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  116. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
  117. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
  118. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  119. package/dist/components/data/calendar/calendar.class.d.ts +12 -4
  120. package/dist/components/data/calendar/calendar.class.js +2 -2
  121. package/dist/components/data/calendar/calendar.styles.js +1 -1
  122. package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
  123. package/dist/components/data/context-meter/context-meter.class.js +3 -3
  124. package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
  125. package/dist/components/data/data-grid/data-grid.class.js +25 -11
  126. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  127. package/dist/components/data/document-library/document-library.class.js +1 -1
  128. package/dist/components/data/env-list/env-list.class.js +1 -1
  129. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
  130. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
  131. package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
  132. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  133. package/dist/components/data/gauge/gauge.class.js +1 -1
  134. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  135. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  136. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  137. package/dist/components/data/stat/stat.class.js +1 -1
  138. package/dist/components/data/table/table.class.d.ts +10 -14
  139. package/dist/components/data/table/table.class.js +4 -3
  140. package/dist/components/data/table/table.styles.js +1 -1
  141. package/dist/components/data/timeline/timeline.class.js +1 -1
  142. package/dist/components/data/tree/tree-item.styles.js +1 -1
  143. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  144. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
  145. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  146. package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
  147. package/dist/components/forms/code-editor/code-editor.class.js +16 -5
  148. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
  150. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  151. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  152. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
  154. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  155. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  156. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  157. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  158. package/dist/components/forms/input/input.class.d.ts +11 -4
  159. package/dist/components/forms/input/input.class.js +7 -1
  160. package/dist/components/forms/input/time-input.class.d.ts +8 -2
  161. package/dist/components/forms/input/time-input.class.js +1 -1
  162. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  163. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  164. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  165. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  166. package/dist/components/forms/select/select.styles.js +1 -1
  167. package/dist/components/forms/slider/slider.class.js +1 -1
  168. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  169. package/dist/components/forms/token-input/token-input.class.js +1 -1
  170. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  171. package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
  172. package/dist/components/layout/app-rail/app-rail.class.js +4 -3
  173. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  174. package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
  175. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  176. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  177. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  178. package/dist/components/layout/details/details.class.d.ts +13 -12
  179. package/dist/components/layout/details/details.class.js +43 -34
  180. package/dist/components/layout/details/details.styles.js +1 -1
  181. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
  182. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
  183. package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
  184. package/dist/components/layout/menu/menu-item.class.js +2 -2
  185. package/dist/components/layout/menu/menu.class.js +1 -1
  186. package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
  187. package/dist/components/layout/multi-split/multi-split.class.js +2 -1
  188. package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
  189. package/dist/components/layout/scroller/scroller.styles.js +1 -1
  190. package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
  191. package/dist/components/layout/split-panel/split-panel.class.js +3 -2
  192. package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
  193. package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
  194. package/dist/components/layout/widget/widget.styles.js +1 -1
  195. package/dist/components/media/file-input/file-input.styles.js +1 -1
  196. package/dist/components/media/flag/flag.class.js +1 -1
  197. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  198. package/dist/components/media/map/map-loader.js +1 -1
  199. package/dist/components/media/map/map.class.d.ts +17 -31
  200. package/dist/components/media/map/map.class.js +1 -1
  201. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  202. package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
  203. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  204. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
  205. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  206. package/dist/components/overlays/alert/alert.styles.js +1 -1
  207. package/dist/components/overlays/callout/callout.styles.js +1 -1
  208. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  209. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  210. package/dist/components/overlays/overlay/popover.class.js +1 -1
  211. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  212. package/dist/components/overlays/rating/rating.class.js +1 -1
  213. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  214. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
  215. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
  216. package/dist/components/retrieval/graph/graph-loader.js +1 -1
  217. package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
  218. package/dist/components/retrieval/graph/graph.class.js +10 -10
  219. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
  220. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  221. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
  222. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
  223. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
  224. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
  225. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
  227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  229. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
  230. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  231. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  232. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  233. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
  234. package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
  235. package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
  236. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  237. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
  238. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
  239. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  240. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  241. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
  242. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  243. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
  244. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  245. package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
  246. package/dist/components/utility/export-button/export-button.class.js +1 -1
  247. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  248. package/dist/components/utility/format/format-date.class.js +1 -1
  249. package/dist/components/utility/format/relative-time.class.js +1 -1
  250. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  251. package/dist/components/utility/icon/icon-library.js +1 -1
  252. package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
  253. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
  254. package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
  255. package/dist/components/utility/known-date/known-date.class.js +1 -1
  256. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
  257. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  258. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  259. package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
  260. package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
  261. package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
  262. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  263. package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
  264. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  265. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
  266. package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
  267. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  268. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
  271. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  272. package/dist/components/viewers/email-viewer/email-loader.js +1 -1
  273. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  274. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  275. package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
  276. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  278. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  279. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
  280. package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
  281. package/dist/components/viewers/viewer-loading.js +1 -1
  282. package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
  283. package/dist/components/viewers/viewer-search-limits.js +1 -1
  284. package/dist/custom-elements-jsx.d.ts +1 -1
  285. package/dist/events.d.ts +13 -6
  286. package/dist/internal/aria-controls.d.ts +16 -13
  287. package/dist/internal/aria-controls.js +1 -1
  288. package/dist/internal/aria-reflection.js +1 -1
  289. package/dist/internal/catalog-picker.d.ts +2 -2
  290. package/dist/internal/catalog-picker.js +1 -1
  291. package/dist/internal/chart-annotation-registration.d.ts +1 -0
  292. package/dist/internal/chart-annotation-registration.js +1 -0
  293. package/dist/internal/data-descriptors.d.ts +13 -0
  294. package/dist/internal/data-descriptors.js +1 -0
  295. package/dist/internal/default-strings.generated.d.ts +1 -1
  296. package/dist/internal/default-strings.generated.js +2 -2
  297. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  298. package/dist/internal/element-internals.d.ts +4 -3
  299. package/dist/internal/element-internals.js +1 -1
  300. package/dist/internal/highlight-collection.d.ts +2 -0
  301. package/dist/internal/highlight-collection.js +1 -1
  302. package/dist/internal/localization-types.d.ts +1 -1
  303. package/dist/internal/localization.js +2 -2
  304. package/dist/internal/lyra-element.d.ts +10 -1
  305. package/dist/internal/lyra-element.js +2 -1
  306. package/dist/internal/package-metadata.d.ts +1 -1
  307. package/dist/internal/package-metadata.js +1 -1
  308. package/dist/internal/papaparse-loader.js +1 -1
  309. package/dist/internal/pseudo-localization.js +1 -1
  310. package/dist/internal/safe-css.js +1 -1
  311. package/dist/internal/step-value.d.ts +6 -0
  312. package/dist/internal/step-value.js +1 -0
  313. package/dist/internal/text-quote.js +1 -1
  314. package/dist/lyra.d.ts +1 -1
  315. package/dist/svelte.d.ts +1 -1
  316. package/dist/translations/ar.js +2 -2
  317. package/dist/translations/de.js +2 -2
  318. package/dist/translations/es.js +2 -2
  319. package/dist/translations/fa.js +2 -2
  320. package/dist/translations/fr.js +2 -2
  321. package/dist/translations/he.js +2 -2
  322. package/dist/translations/ja.js +2 -2
  323. package/dist/translations/pseudo/ar-XB.js +1 -1
  324. package/dist/translations/pt-BR.js +2 -2
  325. package/dist/translations/ru.js +2 -2
  326. package/dist/translations/zh-CN.js +2 -2
  327. package/dist/vue.d.ts +1 -1
  328. package/llms/components/lr-accordion-item.md +6 -5
  329. package/llms/components/lr-accordion.md +6 -5
  330. package/llms/components/lr-activity-feed.md +6 -5
  331. package/llms/components/lr-agent-run.md +1 -1
  332. package/llms/components/lr-agent-workspace.md +3 -2
  333. package/llms/components/lr-attachment-chip.md +2 -3
  334. package/llms/components/lr-audio-visualizer.md +9 -6
  335. package/llms/components/lr-bar-chart.md +2 -2
  336. package/llms/components/lr-box-plot.md +9 -6
  337. package/llms/components/lr-bubble-chart.md +2 -2
  338. package/llms/components/lr-calendar.md +10 -4
  339. package/llms/components/lr-chart.md +11 -5
  340. package/llms/components/lr-chat-composer.md +2 -1
  341. package/llms/components/lr-chunk-inspector.md +2 -2
  342. package/llms/components/lr-code-block-core.md +4 -4
  343. package/llms/components/lr-code-block.md +10 -14
  344. package/llms/components/lr-code-editor.md +2 -0
  345. package/llms/components/lr-copy-button.md +4 -1
  346. package/llms/components/lr-data-grid.md +11 -2
  347. package/llms/components/lr-date-input.md +4 -0
  348. package/llms/components/lr-date-picker.md +5 -1
  349. package/llms/components/lr-details.md +6 -5
  350. package/llms/components/lr-diff-view.md +6 -0
  351. package/llms/components/lr-document-compare.md +6 -2
  352. package/llms/components/lr-document-preview.md +11 -3
  353. package/llms/components/lr-document-viewer.md +5 -1
  354. package/llms/components/lr-docx-viewer.md +6 -0
  355. package/llms/components/lr-doughnut-chart.md +2 -2
  356. package/llms/components/lr-ebook-viewer.md +8 -3
  357. package/llms/components/lr-email-viewer.md +5 -0
  358. package/llms/components/lr-eval-dataset.md +2 -2
  359. package/llms/components/lr-export-button.md +9 -0
  360. package/llms/components/lr-file-input.md +5 -8
  361. package/llms/components/lr-format-date.md +3 -1
  362. package/llms/components/lr-graph-legend.md +4 -2
  363. package/llms/components/lr-grounding-summary.md +8 -8
  364. package/llms/components/lr-histogram.md +2 -2
  365. package/llms/components/lr-ingestion-queue.md +1 -1
  366. package/llms/components/lr-intersection-observer.md +9 -0
  367. package/llms/components/lr-json-viewer.md +6 -1
  368. package/llms/components/lr-knowledge-base.md +10 -1
  369. package/llms/components/lr-line-chart.md +2 -2
  370. package/llms/components/lr-lite-chart.md +8 -5
  371. package/llms/components/lr-locale-picker.md +6 -0
  372. package/llms/components/lr-map.md +15 -5
  373. package/llms/components/lr-markdown.md +7 -4
  374. package/llms/components/lr-media-card.md +0 -6
  375. package/llms/components/lr-mention-popover.md +12 -10
  376. package/llms/components/lr-message-actions.md +10 -3
  377. package/llms/components/lr-message-feedback.md +20 -7
  378. package/llms/components/lr-message-parts.md +3 -1
  379. package/llms/components/lr-model-select.md +5 -2
  380. package/llms/components/lr-multi-split.md +5 -1
  381. package/llms/components/lr-mutation-observer.md +8 -0
  382. package/llms/components/lr-node-palette.md +5 -2
  383. package/llms/components/lr-pie-chart.md +2 -2
  384. package/llms/components/lr-polar-area-chart.md +2 -2
  385. package/llms/components/lr-prompt-input.md +7 -3
  386. package/llms/components/lr-prompt-queue.md +6 -0
  387. package/llms/components/lr-push-to-talk.md +5 -0
  388. package/llms/components/lr-qr-code.md +6 -0
  389. package/llms/components/lr-radar-chart.md +2 -2
  390. package/llms/components/lr-rating.md +5 -0
  391. package/llms/components/lr-relative-time.md +2 -0
  392. package/llms/components/lr-result-card.md +3 -3
  393. package/llms/components/lr-result-field.md +3 -3
  394. package/llms/components/lr-retrieval-results.md +1 -1
  395. package/llms/components/lr-scatter-chart.md +2 -2
  396. package/llms/components/lr-scroller.md +5 -5
  397. package/llms/components/lr-sequence-playback.md +1 -2
  398. package/llms/components/lr-slider.md +3 -1
  399. package/llms/components/lr-streaming-text.md +2 -3
  400. package/llms/components/lr-terminal.md +14 -5
  401. package/llms/components/lr-thinking-panel.md +3 -1
  402. package/llms/components/lr-thread-list.md +20 -1
  403. package/llms/components/lr-tool-call-chip.md +2 -2
  404. package/llms/components/lr-tool-param-form.md +2 -2
  405. package/llms/components/lr-tool-result-view.md +2 -3
  406. package/llms/components/lr-tool-select-dialog.md +2 -2
  407. package/llms/components/lr-voice-picker.md +7 -2
  408. package/llms/components/lr-widget-renderer.md +12 -13
  409. package/llms/peers.md +5 -5
  410. package/llms/shared.md +74 -63
  411. package/llms-full.txt +629 -247
  412. package/package.json +18 -13
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -1,4 +1,4 @@
1
- import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';
1
+ import{type PropertyDeclaration,type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';
2
2
  /** One candidate row — an `@`-mentionable person/entity, or a `/`-command. */
3
3
  export interface LyraMentionItem{
4
4
  /** Stable business id. Duplicate ids remain distinguishable through the selection index. */
@@ -15,20 +15,19 @@ export type LyraMentionFilter=(item:LyraMentionItem,query:string)=>boolean;expor
15
15
  readonly index:number;readonly label:string;}
16
16
  /** Guards an asynchronous same-tree focus transfer against stale caller ownership. */
17
17
  export interface LyraMentionFocusOptions{
18
- /** Re-evaluated immediately before focus moves and during later fallback-owned navigation. */
18
+ /** Re-evaluated immediately before focus moves and during later popover-owned navigation. */
19
19
  readonly ownsFocus?:()=>boolean;}export interface LyraMentionPopoverEventMap{'lr-mention-select':CustomEvent<LyraMentionSelectDetail>;'lr-mention-close':CustomEvent<null>;}
20
20
  /**
21
21
  * `<lr-mention-popover>` — a caret-anchored, keyboard-navigable popover for
22
22
  * `@`-mention and `/`-slash-command autocomplete inside a plain-text
23
23
  * `<textarea>`/`<input>` the host owns (e.g. `<lr-chat-composer>`'s own
24
24
  * textarea, though this component has no dependency on that or any other
25
- * specific input). On platforms that support cross-root ARIA element
26
- * reflection, focus stays in the host input while
27
- * `ariaActiveDescendantElement` conveys the active row. Where the platform
28
- * rejects that reference, the explicit `focusActiveOption()` fallback moves
29
- * real focus into this component's shadow listbox so focus ownership and
30
- * options share one tree scope. A string `aria-activedescendant` cannot
31
- * resolve from the host document into this component's shadow root.
25
+ * specific input). A textarea session keeps the native textarea's implicit
26
+ * textbox semantics: it snapshots and temporarily clears any authored role,
27
+ * expanded state, controls/active-descendant IDREF, or ARIA element reflection
28
+ * across shadow roots, leaving only autocomplete/haspopup while open. Its
29
+ * first consumed arrow key moves real focus to the active option,
30
+ * so the focus owner and option share this component's shadow tree.
32
31
  *
33
32
  * Integration contract (entirely the host's responsibility — this component
34
33
  * never inspects the text control's value or listens to it directly):
@@ -47,15 +46,13 @@ readonly ownsFocus?:()=>boolean;}export interface LyraMentionPopoverEventMap{'lr
47
46
  * leaving both the input and this popover) — `lr-mention-close` fires
48
47
  * automatically from that (see below), there is no separate "tell it to
49
48
  * close" call needed.
50
- * 5. The component automatically projects the open combobox relationship and active option onto
51
- * a text-control `anchor`, using cross-root ARIA element reflection for controls/active
52
- * descendant. When `syncActiveDescendant()` returns `false`, call `focusActiveOption()` after
53
- * the first consumed navigation key. Pass an `ownsFocus` predicate if the host tracks a
54
- * suggestion generation or disabled/focus-exit state; it must remain true while either the
55
- * anchor or this popover owns that live session. That fallback moves real focus into the shadow
56
- * listbox, where each option and its focus owner share one tree scope; a host blur handler must
57
- * therefore keep the popover open when `relatedTarget` is this component. Author-provided ARIA
58
- * is restored atomically on close, anchor replacement, disconnect, or adoption.
49
+ * 5. For a textarea anchor, the component temporarily sets only
50
+ * `aria-autocomplete="list"` and `aria-haspopup="listbox"`, restoring all authored ARIA/AOM
51
+ * values it changes on close, anchor replacement, disconnect, or adoption. Call
52
+ * `focusActiveOption()` after the first consumed navigation key. Pass an `ownsFocus` predicate
53
+ * if the host tracks a suggestion generation or disabled/focus-exit state; it must remain true
54
+ * while either the anchor or this popover owns that live session. A host blur handler must
55
+ * therefore keep the popover open when `relatedTarget` is this component.
59
56
  *
60
57
  * Positioning: when `anchor` is a plain `<textarea>` or single-line text
61
58
  * `<input>`, this component measures exactly where the caret currently
@@ -96,7 +93,10 @@ readonly ownsFocus?:()=>boolean;}export interface LyraMentionPopoverEventMap{'lr
96
93
  * const popover = document.getElementById('mentions');
97
94
  *
98
95
  * textarea.addEventListener('keydown', (e) => {
99
- * if (popover.open && popover.handleKeyDown(e)) return; // consumed
96
+ * if (popover.open && popover.handleKeyDown(e)) {
97
+ * if (e.key === 'ArrowUp' || e.key === 'ArrowDown') void popover.focusActiveOption();
98
+ * return; // consumed
99
+ * }
100
100
  * // ...the host's own Enter-to-send handling, etc.
101
101
  * });
102
102
  * textarea.addEventListener('input', () => {
@@ -113,16 +113,6 @@ readonly ownsFocus?:()=>boolean;}export interface LyraMentionPopoverEventMap{'lr
113
113
  * popover.addEventListener('lr-mention-select', (e) => {
114
114
  * // splice `${e.detail.label}` into the textarea at the trigger offset
115
115
  * });
116
- * popover.addEventListener('lr-mention-close', () => {
117
- * popover.syncActiveDescendant(textarea);
118
- * });
119
- *
120
- * // Whenever the popover re-renders its active row (e.g. after every
121
- * // ArrowUp/ArrowDown handleKeyDown() call above), sync the host's own
122
- * // input so assistive tech announces the current candidate:
123
- * const syncActiveDescendant = () => {
124
- * popover.syncActiveDescendant(textarea);
125
- * };
126
116
  * </script>
127
117
  * ```
128
118
  *
@@ -143,7 +133,7 @@ readonly ownsFocus?:()=>boolean;}export interface LyraMentionPopoverEventMap{'lr
143
133
  * @status stable
144
134
  * @since 4.0.0
145
135
  */
146
- export declare class LyraMentionPopover extends LyraElement<LyraMentionPopoverEventMap>{static styles:import("lit").CSSResultGroup[];static properties:{items:{attribute:boolean;noAccessor:boolean;};};
136
+ export declare class LyraMentionPopover extends LyraElement<LyraMentionPopoverEventMap>{static styles:import("lit").CSSResultGroup[];static properties:{items:{attribute:boolean;noAccessor:boolean;};};private _textareaFocusSessionGeneration;requestUpdate(name?:PropertyKey,oldValue?:unknown,options?:PropertyDeclaration):void;private hasTextareaFocusSession;
147
137
  /** The element to position the popup relative to. When this is a plain
148
138
  * `<textarea>`/single-line text `<input>`, positioning is caret-precise
149
139
  * (see the class doc); any other element anchors the whole popup under
@@ -168,28 +158,23 @@ emptyText?:string;
168
158
  * a plain `aria-label` attribute on `<lr-mention-popover>` itself, which takes precedence over
169
159
  * this property when present -- matches `<lr-combobox>`'s/`<lr-table>`'s identical host
170
160
  * `aria-label` fallback. */
171
- label?:string;private activeIndex;private readonly _listId;private cleanup?;private virtualAnchor;private _isFirstUpdate;private _silentClose;private _ownsFocus;private _focusOwnerPredicate?;private _focusTransferGeneration;private anchorRelationship?;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;adoptedCallback():void;private snapshotAttribute;private restoreAttribute;private attachAnchorRelationship;private detachAnchorRelationship;private syncAnchorRelationship;
161
+ label?:string;private activeIndex;private readonly _listId;private cleanup?;private virtualAnchor;private _isFirstUpdate;private _silentClose;private _ownsFocus;private _focusOwnerPredicate?;private _focusTransferGeneration;private anchorRelationship?;private announcementSink?;private announcedResultCount?;private announcedResultPosition?;connectedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;adoptedCallback():void;private syncAnnouncementSink;private resetResultAnnouncements;private announceResultState;private snapshotAttribute;private restoreAttribute;private captureAnchorCaret;private restoreRelationshipFocus;private restoreAnchorFocus;private attachAnchorRelationship;private detachAnchorRelationship;private syncAnchorRelationship;
172
162
  /** The current candidate set: runtime rows without a string `label` are omitted, then the
173
163
  * remaining `items` are filtered by `query` via `filter` (or the built-in default). */
174
164
  get filteredItems():readonly Readonly<LyraMentionItem>[];
175
- /** The internal `id` of the currently-highlighted row. This remains useful
176
- * for diagnostics and same-tree consumers, but must not be assigned as a
177
- * string `aria-activedescendant` from outside this shadow root. Use
178
- * `activeDescendantElement` or `syncActiveDescendant()` instead. */
165
+ /** The internal id of the currently highlighted row, for same-tree consumers only. */
179
166
  get activeDescendantId():string|null;
180
- /** The currently-highlighted shadow option for ARIA element reflection. */
167
+ /** The currently highlighted shadow option. */
181
168
  get activeDescendantElement():HTMLElement|null;
182
169
  /**
183
- * Synchronizes a host-owned control with the active option through the
184
- * platform's element-reference ARIA API. Returns `false` when that API is
185
- * unavailable or rejects a cross-root reference; in that case the host
186
- * must use a listbox/focus owner in the control's own tree scope.
170
+ * A textarea's active option always receives real focus; it does not use a
171
+ * string IDREF or AOM element reflection. The established single-line input
172
+ * route retains its existing element-reference behavior.
187
173
  */
188
- syncActiveDescendant(control:HTMLElement):boolean;
174
+ syncActiveDescendant(_control:HTMLElement):boolean;
189
175
  /**
190
- * Same-tree fallback for platforms that reject cross-shadow ARIA element reflection. Moves real
191
- * focus to the active option and returns whether it succeeded. `options.ownsFocus`, when given,
192
- * is checked before and immediately after the awaited render, then retained while the fallback
176
+ * Moves real focus to the active option and returns whether it succeeded. `options.ownsFocus`, when given,
177
+ * is checked before and immediately after the awaited render, then retained while the popover
193
178
  * owns navigation. A close, candidate/query/filter/anchor change, disconnect/adoption, newer
194
179
  * transfer, or failed ownership check makes the pending transfer resolve `false` without moving
195
180
  * focus. Once active, the popover handles its own navigation keys and restores focus to `anchor`
@@ -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{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{styles}from"./mention-popover.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_mentionSuggestions,LYRA_DEFAULT_noMatches}from"../../../internal/default-strings.generated.js";function isTextControl(el){const view=el.ownerDocument.defaultView;return view?el instanceof view.HTMLTextAreaElement?!0:el instanceof view.HTMLInputElement&&(el.type==="text"||el.type==="search"):!1}const MIRROR_CSS_PROPS=["box-sizing","width","padding-top","padding-right","padding-bottom","padding-left","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","font-family","font-size","font-style","font-variant","font-weight","font-stretch","letter-spacing","word-spacing","line-height","text-align","text-indent","text-transform","tab-size","direction"];function caretClientRect(el){const owner=el.ownerDocument,view=owner.defaultView;if(!view)return null;const elRect=el.getBoundingClientRect();if(elRect.width===0||elRect.height===0)return null;const computed=view.getComputedStyle(el),mirror=owner.createElement("div");mirror.style.position="absolute",mirror.style.visibility="hidden",mirror.style.top="0",mirror.style.left="-9999px",mirror.style.whiteSpace=el instanceof view.HTMLTextAreaElement?"pre-wrap":"pre",mirror.style.overflowWrap="break-word";for(const prop of MIRROR_CSS_PROPS)mirror.style.setProperty(prop,computed.getPropertyValue(prop));const index=el.selectionStart??el.value.length;mirror.append(owner.createTextNode(el.value.slice(0,index)));const marker=owner.createElement("span");marker.textContent=el.value.slice(index)||"\u200B",mirror.appendChild(marker),owner.body.appendChild(mirror);const mirrorRect=mirror.getBoundingClientRect(),markerRect=marker.getBoundingClientRect();mirror.remove();const lineHeight=parseFloat(computed.lineHeight)||markerRect.height||16;return new view.DOMRect(elRect.left+(markerRect.left-mirrorRect.left)-el.scrollLeft,elRect.top+(markerRect.top-mirrorRect.top)-el.scrollTop,1,lineHeight)}class LyraMentionPopover extends LyraElement{constructor(){super(...arguments),this._items=Object.freeze([]),this.query="",this.open=!1,this.filter=null,this.activeIndex=0,this._listId=nextId("mention-popover-listbox"),this.virtualAnchor=null,this._isFirstUpdate=!0,this._silentClose=!1,this._ownsFocus=!1,this._focusTransferGeneration=0,this.onListboxMouseDown=e=>{e.target.closest('[part="option"]')&&e.preventDefault()},this.onListboxClick=e=>{const optionEl=e.target.closest('[part="option"]'),index=Number(optionEl?.dataset.index);if(!Number.isInteger(index)||index<0)return;const item=this.filteredItems[index];item&&this.commit(item)},this.onListboxKeyDown=e=>{this._ownsFocus&&this.handleKeyDown(e)&&this.open&&this.focusActiveOption()}}static{this.defaultStrings={...super.defaultStrings,mentionSuggestions:LYRA_DEFAULT_mentionSuggestions,noMatches:LYRA_DEFAULT_noMatches}}static{this.styles=[LyraElement.styles,styles]}static{this.properties={items:{attribute:!1,noAccessor:!0}}}get items(){return this._items}set items(next){const previous=this._items,source=Array.isArray(next)?next:[];this._items=Object.freeze(source.map(item=>Object.freeze({...item}))),this.requestUpdate("items",previous)}willUpdate(changed){super.willUpdate(changed),this._isFirstUpdate=!this.hasUpdated,this._ownsFocus&&!this.fallbackFocusIsStillOwned()&&(this._ownsFocus=!1,this._focusOwnerPredicate=void 0),(changed.has("query")||changed.has("items")||changed.has("filter"))&&(this.activeIndex=0);const candidatesChanged=changed.has("query")||changed.has("items")||changed.has("filter");this._ownsFocus&&changed.has("open")&&!this.open?(this._ownsFocus=!1,this.anchor?.isConnected&&this.anchor.focus({preventScroll:!0})):this._ownsFocus&&this.open&&candidatesChanged&&this.filteredItems.length===0&&this.anchor?.isConnected&&(this._ownsFocus=!1,this.anchor.focus({preventScroll:!0}))}updated(changed){if(super.updated(changed),changed.has("open")?this.open?this.reposition():(this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),!this._isFirstUpdate&&!this._silentClose&&this.emit("lr-mention-close"),this._silentClose=!1):this.open&&(changed.has("anchor")||changed.has("query"))&&this.reposition(),changed.has("activeIndex")||changed.has("query")||changed.has("items")||changed.has("filter")){const active=this.renderRoot.querySelector('[part="option"][data-active]');active?.scrollIntoView({block:"nearest"}),this._ownsFocus&&(!active&&this.anchor?.isConnected?this.restoreFocus():this.restoreFocus(!0))}this.syncAnchorRelationship()}disconnectedCallback(){this._focusTransferGeneration+=1,this.detachAnchorRelationship(),super.disconnectedCallback(),this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.anchor?.isConnected&&this.anchor.focus({preventScroll:!0}),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.open=!1}adoptedCallback(){super.adoptedCallback(),this._focusTransferGeneration+=1,this.detachAnchorRelationship(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.open=!1}snapshotAttribute(control,name){return{present:control.hasAttribute(name),value:control.getAttribute(name)}}restoreAttribute(control,name,snapshot){snapshot.present?control.setAttribute(name,snapshot.value??""):control.removeAttribute(name)}attachAnchorRelationship(control){const reflected=control,relationship={control,attributes:new Map(["role","aria-expanded","aria-haspopup","aria-controls","aria-activedescendant"].map(name=>[name,this.snapshotAttribute(control,name)])),activeElement:"ariaActiveDescendantElement"in control?reflected.ariaActiveDescendantElement??null:void 0,controlsElements:"ariaControlsElements"in control?reflected.ariaControlsElements??null:void 0};return this.anchorRelationship=relationship,relationship}detachAnchorRelationship(){const relationship=this.anchorRelationship;if(!relationship)return;this.anchorRelationship=void 0;const reflected=relationship.control;try{relationship.activeElement!==void 0&&(reflected.ariaActiveDescendantElement=relationship.activeElement),relationship.controlsElements!==void 0&&(reflected.ariaControlsElements=relationship.controlsElements)}catch{}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot)}syncAnchorRelationship(){const next=this.open&&this.anchor&&isTextControl(this.anchor)?this.anchor:void 0;if(this.anchorRelationship?.control!==next&&this.detachAnchorRelationship(),!next)return;const relationship=this.anchorRelationship??this.attachAnchorRelationship(next),control=relationship.control;relationship.attributes.get("role")?.present||control.setAttribute("role","combobox"),control.setAttribute("aria-expanded","true"),control.setAttribute("aria-haspopup","listbox");const listbox=this.renderRoot.querySelector('[part="listbox"]'),reflected=control;if(listbox&&"ariaControlsElements"in control)try{control.removeAttribute("aria-controls"),reflected.ariaControlsElements=[listbox],reflected.ariaControlsElements?.[0]!==listbox&&(reflected.ariaControlsElements=[this],reflected.ariaControlsElements?.[0]!==this&&control.removeAttribute("aria-controls"))}catch{control.removeAttribute("aria-controls")}else control.removeAttribute("aria-controls");control.removeAttribute("aria-activedescendant"),this.syncActiveDescendant(control)}get filteredItems(){const locale=this.effectiveLocale,q=this.query.trim().toLocaleLowerCase(locale);return this.items.filter(item=>typeof item.label!="string"?!1:q?this.filter?this.filter(item,q):item.label.toLocaleLowerCase(locale).includes(q)||(typeof item.description=="string"?item.description:"").toLocaleLowerCase(locale).includes(q):!0)}get activeDescendantId(){if(!this.open)return null;const idx=this.clampedIndex(this.filteredItems);return idx>=0?this.rowId(idx):null}get activeDescendantElement(){const id=this.activeDescendantId,escape=this.ownerDocument.defaultView?.CSS.escape;return id&&escape?this.renderRoot.querySelector(`#${escape(id)}`):null}syncActiveDescendant(control){if(control.removeAttribute("aria-activedescendant"),!("ariaActiveDescendantElement"in control))return!1;const active=this.activeDescendantElement;try{const reflected=control;reflected.ariaActiveDescendantElement=active;const accepted=reflected.ariaActiveDescendantElement===active;return accepted||(reflected.ariaActiveDescendantElement=null,control.removeAttribute("aria-activedescendant")),accepted}catch{return control.removeAttribute("aria-activedescendant"),!1}}async focusActiveOption(options={}){const ownsFocus=options.ownsFocus??(this._ownsFocus?this._focusOwnerPredicate:void 0);if(!this.open||!this.isConnected||!this.activeDescendantElement||!this.callFocusOwner(ownsFocus))return!1;const generation=++this._focusTransferGeneration,snapshot={ownerDocument:this.ownerDocument,anchor:this.anchor,items:this.items,query:this.query,filter:this.filter,activeIndex:this.activeIndex};if(await this.updateComplete,await this.cleanup?.ready===!1||generation!==this._focusTransferGeneration||!this.isConnected||!this.open||this.ownerDocument!==snapshot.ownerDocument||this.anchor!==snapshot.anchor||this.items!==snapshot.items||this.query!==snapshot.query||this.filter!==snapshot.filter||this.activeIndex!==snapshot.activeIndex||!this.callFocusOwner(ownsFocus))return!1;const active=this.activeDescendantElement;return!active?.isConnected||!this.callFocusOwner(ownsFocus)||(active.focus({preventScroll:!0}),activeElementIn(this.shadowRoot)!==active)?!1:(this._focusOwnerPredicate=ownsFocus,this._ownsFocus=!0,this.requestUpdate(),!0)}async restoreFocus(waitForPlacement=!1){if(waitForPlacement&&(await this.cleanup?.ready===!1||!this._ownsFocus||!this.open))return;const active=this.renderRoot.querySelector('[part="option"][data-active]');active?active.focus({preventScroll:!0}):this.anchor?.isConnected?(this.renderRoot.querySelector('[part="listbox"]')?.setAttribute("tabindex","-1"),this.anchor.focus({preventScroll:!0}),this.scheduleAfterUpdate(()=>{this._ownsFocus=!1})):this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0})}callFocusOwner(predicate){try{return predicate?.()??!0}catch{return!1}}fallbackFocusIsStillOwned(){return this.callFocusOwner(this._focusOwnerPredicate)&&activeElementIn(this.shadowRoot)!==null}get listboxId(){return this._listId}handleKeyDown(e){if(!this.open)return!1;const rows=this.filteredItems;switch(e.key){case"ArrowDown":return rows.length?(e.preventDefault(),this.activeIndex=Math.min(rows.length-1,this.clampedIndex(rows)+1),!0):!1;case"ArrowUp":return rows.length?(e.preventDefault(),this.activeIndex=Math.max(0,this.clampedIndex(rows)-1),!0):!1;case"Enter":case"Tab":{const idx=this.clampedIndex(rows);return idx<0?!1:(e.preventDefault(),this.commit(rows[idx]),!0)}case"Escape":return e.preventDefault(),this.open=!1,!0;default:return!1}}clampedIndex(rows){return rows.length?Math.min(Math.max(this.activeIndex,0),rows.length-1):-1}rowId(index){return`${this._listId}-opt-${index}`}commit(item){const index=this.items.indexOf(item);index<0||(this.emit("lr-mention-select",Object.freeze({suggestionId:item.suggestionId,index,label:item.label})),this._silentClose=!0,this.open=!1)}reposition(){this.cleanup?.(),this.cleanup=void 0;const anchorEl=this.resolveAnchorElement(),popup=this.renderRoot.querySelector('[part="listbox"]');if(anchorEl&&popup){const placement=place(anchorEl,popup,{placement:"bottom-start"});this.cleanup=placement,placement.ready.then(positioned=>{positioned||this.cleanup!==placement||!this.open||(this._silentClose=!0,this.open=!1)})}}resolveAnchorElement(){const anchor=this.anchor;if(!anchor)return null;if(isTextControl(anchor)){const rect=caretClientRect(anchor);if(rect){const owner=anchor.ownerDocument;this.virtualAnchor&&this.virtualAnchor.ownerDocument!==owner&&(this.virtualAnchor.remove(),this.virtualAnchor=null);const virtual=this.virtualAnchor??(this.virtualAnchor=owner.createElement("div"));return virtual.style.position="fixed",virtual.style.left=`${rect.left}px`,virtual.style.top=`${rect.top}px`,virtual.style.width="0",virtual.style.height=`${rect.height}px`,virtual.style.pointerEvents="none",virtual.isConnected||owner.body.appendChild(virtual),virtual}}return anchor}get effectiveEmptyText(){return this.emptyText===void 0?this.localize("noMatches"):this.emptyText}get effectiveLabel(){return hostAriaLabel(this)??(this.label===void 0?this.localize("mentionSuggestions"):this.label)}renderRow(item,index,activeId){const id=this.rowId(index),active=id===activeId;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{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{styles}from"./mention-popover.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_mentionResultCount,LYRA_DEFAULT_mentionResultPosition,LYRA_DEFAULT_mentionSuggestions,LYRA_DEFAULT_noMatches}from"../../../internal/default-strings.generated.js";function isTextControl(el){const view=el.ownerDocument.defaultView;return view?el instanceof view.HTMLTextAreaElement?!0:el instanceof view.HTMLInputElement&&(el.type==="text"||el.type==="search"):!1}function isTextareaAnchor(el){const view=el.ownerDocument.defaultView;return!!(view&&el instanceof view.HTMLTextAreaElement)}const MIRROR_CSS_PROPS=["box-sizing","width","padding-top","padding-right","padding-bottom","padding-left","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","font-family","font-size","font-style","font-variant","font-weight","font-stretch","letter-spacing","word-spacing","line-height","text-align","text-indent","text-transform","tab-size","direction"];function caretClientRect(el){const owner=el.ownerDocument,view=owner.defaultView;if(!view)return null;const elRect=el.getBoundingClientRect();if(elRect.width===0||elRect.height===0)return null;const computed=view.getComputedStyle(el),mirror=owner.createElement("div");mirror.style.position="absolute",mirror.style.visibility="hidden",mirror.style.top="0",mirror.style.left="-9999px",mirror.style.whiteSpace=el instanceof view.HTMLTextAreaElement?"pre-wrap":"pre",mirror.style.overflowWrap="break-word";for(const prop of MIRROR_CSS_PROPS)mirror.style.setProperty(prop,computed.getPropertyValue(prop));const index=el.selectionStart??el.value.length;mirror.append(owner.createTextNode(el.value.slice(0,index)));const marker=owner.createElement("span");marker.textContent=el.value.slice(index)||"​",mirror.appendChild(marker),owner.body.appendChild(mirror);const mirrorRect=mirror.getBoundingClientRect(),markerRect=marker.getBoundingClientRect();mirror.remove();const lineHeight=parseFloat(computed.lineHeight)||markerRect.height||16;return new view.DOMRect(elRect.left+(markerRect.left-mirrorRect.left)-el.scrollLeft,elRect.top+(markerRect.top-mirrorRect.top)-el.scrollTop,1,lineHeight)}class LyraMentionPopover extends LyraElement{constructor(){super(...arguments),this._textareaFocusSessionGeneration=0,this._items=Object.freeze([]),this.query="",this.open=!1,this.filter=null,this.activeIndex=0,this._listId=nextId("mention-popover-listbox"),this.virtualAnchor=null,this._isFirstUpdate=!0,this._silentClose=!1,this._ownsFocus=!1,this._focusTransferGeneration=0,this.onListboxMouseDown=e=>{e.target.closest('[part="option"]')&&e.preventDefault()},this.onListboxClick=e=>{const optionEl=e.target.closest('[part="option"]'),index=Number(optionEl?.dataset.index);if(!Number.isInteger(index)||index<0)return;const item=this.filteredItems[index];item&&this.commit(item)},this.onListboxKeyDown=e=>{e.defaultPrevented||!this._ownsFocus||this.handleKeyDown(e)&&this.open&&this.focusActiveOption()}}static{this.defaultStrings={...super.defaultStrings,mentionResultCount:LYRA_DEFAULT_mentionResultCount,mentionResultPosition:LYRA_DEFAULT_mentionResultPosition,mentionSuggestions:LYRA_DEFAULT_mentionSuggestions,noMatches:LYRA_DEFAULT_noMatches}}static{this.styles=[LyraElement.styles,styles]}static{this.properties={items:{attribute:!1,noAccessor:!0}}}requestUpdate(name,oldValue,options){(name==="open"||name==="anchor"||name==="query"||name==="items"||name==="filter")&&this.hasTextareaFocusSession()&&(this._textareaFocusSessionGeneration+=1),super.requestUpdate(name,oldValue,options)}hasTextareaFocusSession(){const relationshipControl=this.anchorRelationship?.control;return this.anchor!==void 0&&isTextareaAnchor(this.anchor)||relationshipControl!==void 0&&isTextareaAnchor(relationshipControl)}get items(){return this._items}set items(next){const previous=this._items,source=Array.isArray(next)?next:[];this._items=Object.freeze(source.map(item=>Object.freeze({...item}))),this.requestUpdate("items",previous)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.announceResultState()}willUpdate(changed){super.willUpdate(changed),this._isFirstUpdate=!this.hasUpdated,this._ownsFocus&&!this.fallbackFocusIsStillOwned()&&(this._ownsFocus=!1,this._focusOwnerPredicate=void 0),(changed.has("query")||changed.has("items")||changed.has("filter"))&&(this.activeIndex=0);const candidatesChanged=changed.has("query")||changed.has("items")||changed.has("filter");this._ownsFocus&&changed.has("open")&&!this.open?(this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0):this._ownsFocus&&this.open&&candidatesChanged&&this.filteredItems.length===0&&(this.anchor?.isConnected?this.restoreAnchorFocus():this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0}),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),this._ownsFocus&&changed.has("anchor")&&this.anchorRelationship?.control!==this.anchor&&this.detachAnchorRelationship()}updated(changed){if(super.updated(changed),changed.has("open"))if(this.open)this.reposition();else{this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove();const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),!this._isFirstUpdate&&!this._silentClose&&queueMicrotask(()=>this.emit("lr-mention-close")),this._silentClose=!1}else this.open&&(changed.has("anchor")||changed.has("query"))&&this.reposition();if(changed.has("activeIndex")||changed.has("query")||changed.has("items")||changed.has("filter")){const active=this.renderRoot.querySelector('[part="option"][data-active]');active?.scrollIntoView({block:"nearest"}),this._ownsFocus&&(!active&&this.anchor?.isConnected?this.restoreFocus():this.restoreFocus(!0))}this.syncAnchorRelationship(),this.open?this.announceResultState():this.resetResultAnnouncements()}disconnectedCallback(){this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.announcementSink?.release(),this.announcementSink=void 0,this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),super.disconnectedCallback(),this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this.open=!1}adoptedCallback(){super.adoptedCallback(),this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.syncAnnouncementSink(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),this.open=!1}syncAnnouncementSink(){this.announcementSink?.element?.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=this.isConnected?acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}):void 0)}resetResultAnnouncements(){this.announcedResultCount=void 0,this.announcedResultPosition=void 0}announceResultState(){if(!this.open||!this.announcementSink)return;const rows=this.filteredItems,resultState=rows.length===0?this.localize("noMatches"):this.localize("mentionResultCount",void 0,{count:rows.length}),index=this.clampedIndex(rows),position=index<0?void 0:this.localize("mentionResultPosition",void 0,{current:index+1,total:rows.length});if(this._isFirstUpdate){this.announcedResultCount=resultState,this.announcedResultPosition=position;return}if(resultState!==this.announcedResultCount&&(this.announcementSink.announce(resultState),this.announcedResultCount=resultState),position===void 0){this.announcedResultPosition=void 0;return}position!==this.announcedResultPosition&&(this.announcementSink.announce(position),this.announcedResultPosition=position)}snapshotAttribute(control,name){return{present:control.hasAttribute(name),value:control.getAttribute(name)}}restoreAttribute(control,name,snapshot){snapshot.present?control.setAttribute(name,snapshot.value??""):control.removeAttribute(name)}captureAnchorCaret(relationship=this.anchorRelationship){if(!relationship||!isTextareaAnchor(relationship.control))return;const{control}=relationship;relationship.selectionStart=control.selectionStart,relationship.selectionEnd=control.selectionEnd,relationship.selectionDirection=control.selectionDirection}restoreRelationshipFocus(relationship){const{control}=relationship;if(control.isConnected)try{control.focus({preventScroll:!0}),isTextareaAnchor(control)&&relationship.selectionStart!==null&&relationship.selectionStart!==void 0&&relationship.selectionEnd!==null&&relationship.selectionEnd!==void 0&&control.setSelectionRange(relationship.selectionStart,relationship.selectionEnd,relationship.selectionDirection??void 0)}catch{}}restoreAnchorFocus(){const relationship=this.anchorRelationship;if(relationship){this.restoreRelationshipFocus(relationship);return}const anchor=this.anchor;if(anchor?.isConnected)try{anchor.focus({preventScroll:!0})}catch{}}attachAnchorRelationship(control){const reflected=control,textarea=isTextareaAnchor(control),attributes=new Map((textarea?["role","aria-expanded","aria-haspopup","aria-autocomplete","aria-controls","aria-activedescendant"]:["role","aria-expanded","aria-haspopup","aria-controls","aria-activedescendant"]).map(name=>[name,this.snapshotAttribute(control,name)])),activeElement="ariaActiveDescendantElement"in control?reflected.ariaActiveDescendantElement??null:void 0,controlsElements="ariaControlsElements"in control?reflected.ariaControlsElements??null:void 0,capturedTextareaActiveElement=textarea&&attributes.get("aria-activedescendant")?.present&&attributes.get("aria-activedescendant")?.value===""?activeElement??void 0:void 0,capturedTextareaControlsElements=textarea&&attributes.get("aria-controls")?.present&&attributes.get("aria-controls")?.value===""&&controlsElements?.length?controlsElements:void 0,relationship={control,attributes,activeElement:textarea?capturedTextareaActiveElement:activeElement,controlsElements:textarea?capturedTextareaControlsElements:controlsElements,selectionStart:textarea?control.selectionStart:void 0,selectionEnd:textarea?control.selectionEnd:void 0,selectionDirection:textarea?control.selectionDirection:void 0};return this.anchorRelationship=relationship,relationship}detachAnchorRelationship(){const relationship=this.anchorRelationship;if(!relationship)return;if(this.anchorRelationship=void 0,this._ownsFocus&&(this.restoreRelationshipFocus(relationship),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),!isTextareaAnchor(relationship.control)){const reflected2=relationship.control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=relationship.controlsElements}catch{}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);return}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);const reflected=relationship.control;if(relationship.activeElement!==void 0)try{reflected.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected.ariaControlsElements=relationship.controlsElements}catch{}}syncAnchorRelationship(){const next=this.open&&this.anchor&&isTextControl(this.anchor)?this.anchor:void 0;if(this.anchorRelationship?.control!==next&&this.detachAnchorRelationship(),!next)return;const relationship=this.anchorRelationship??this.attachAnchorRelationship(next),control=relationship.control;if(isTextareaAnchor(control)){control.removeAttribute("role"),control.removeAttribute("aria-expanded"),control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant");const reflected2=control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=null}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=null}catch{}control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant"),control.setAttribute("aria-haspopup","listbox"),control.setAttribute("aria-autocomplete","list");return}relationship.attributes.get("role")?.present||control.setAttribute("role","combobox"),control.setAttribute("aria-expanded","true"),control.setAttribute("aria-haspopup","listbox");const listbox=this.renderRoot.querySelector('[part="listbox"]'),reflected=control;if(listbox&&"ariaControlsElements"in control)try{control.removeAttribute("aria-controls"),reflected.ariaControlsElements=[listbox],reflected.ariaControlsElements?.[0]!==listbox&&(reflected.ariaControlsElements=[this],reflected.ariaControlsElements?.[0]!==this&&control.removeAttribute("aria-controls"))}catch{control.removeAttribute("aria-controls")}else control.removeAttribute("aria-controls");control.removeAttribute("aria-activedescendant"),this.syncActiveDescendant(control)}get filteredItems(){const locale=this.effectiveLocale,q=this.query.trim().toLocaleLowerCase(locale);return this.items.filter(item=>typeof item.label!="string"?!1:q?this.filter?this.filter(item,q):item.label.toLocaleLowerCase(locale).includes(q)||(typeof item.description=="string"?item.description:"").toLocaleLowerCase(locale).includes(q):!0)}get activeDescendantId(){if(!this.open)return null;const idx=this.clampedIndex(this.filteredItems);return idx>=0?this.rowId(idx):null}get activeDescendantElement(){const id=this.activeDescendantId,escape=this.ownerDocument.defaultView?.CSS.escape;return id&&escape?this.renderRoot.querySelector(`#${escape(id)}`):null}syncActiveDescendant(_control){if(isTextareaAnchor(_control)||(_control.removeAttribute("aria-activedescendant"),!("ariaActiveDescendantElement"in _control)))return!1;const active=this.activeDescendantElement;try{const reflected=_control;reflected.ariaActiveDescendantElement=active;const accepted=reflected.ariaActiveDescendantElement===active;return accepted||(reflected.ariaActiveDescendantElement=null,_control.removeAttribute("aria-activedescendant")),accepted}catch{return _control.removeAttribute("aria-activedescendant"),!1}}async focusActiveOption(options={}){const ownsFocus=options.ownsFocus??(this._ownsFocus?this._focusOwnerPredicate:void 0);if(!this.open||!this.isConnected||!this.activeDescendantElement||!this.callFocusOwner(ownsFocus))return!1;const generation=++this._focusTransferGeneration,textareaSession=this.anchor!==void 0&&isTextareaAnchor(this.anchor),textareaSessionGeneration=this._textareaFocusSessionGeneration,snapshot={ownerDocument:this.ownerDocument,anchor:this.anchor,items:this.items,query:this.query,filter:this.filter,activeIndex:this.activeIndex};if(await this.updateComplete,await this.cleanup?.ready===!1||generation!==this._focusTransferGeneration||textareaSession&&textareaSessionGeneration!==this._textareaFocusSessionGeneration||!this.isConnected||!this.open||this.ownerDocument!==snapshot.ownerDocument||this.anchor!==snapshot.anchor||this.items!==snapshot.items||this.query!==snapshot.query||this.filter!==snapshot.filter||this.activeIndex!==snapshot.activeIndex||!this.callFocusOwner(ownsFocus))return!1;const active=this.activeDescendantElement;return!active?.isConnected||!this.callFocusOwner(ownsFocus)||(this.captureAnchorCaret(),active.focus({preventScroll:!0}),activeElementIn(this.shadowRoot)!==active)?!1:(this._focusOwnerPredicate=ownsFocus,this._ownsFocus=!0,!0)}async restoreFocus(waitForPlacement=!1){if(waitForPlacement){if(await this.cleanup?.ready===!1||!this._ownsFocus||!this.open)return;if(this.hasTextareaFocusSession()&&!this.fallbackFocusIsStillOwned()){this._ownsFocus=!1,this._focusOwnerPredicate=void 0;return}}const active=this.renderRoot.querySelector('[part="option"][data-active]');active?active.focus({preventScroll:!0}):this.anchor?.isConnected?(this.renderRoot.querySelector('[part="listbox"]')?.setAttribute("tabindex","-1"),this.restoreAnchorFocus(),this.scheduleAfterUpdate(()=>{this._ownsFocus=!1,this._focusOwnerPredicate=void 0})):this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0})}callFocusOwner(predicate){try{return predicate?.()??!0}catch{return!1}}fallbackFocusIsStillOwned(){return this.callFocusOwner(this._focusOwnerPredicate)&&activeElementIn(this.shadowRoot)!==null}get listboxId(){return this._listId}handleKeyDown(e){if(!this.open)return!1;const rows=this.filteredItems;switch(e.key){case"ArrowDown":return rows.length?(e.preventDefault(),this.activeIndex=Math.min(rows.length-1,this.clampedIndex(rows)+1),!0):!1;case"ArrowUp":return rows.length?(e.preventDefault(),this.activeIndex=Math.max(0,this.clampedIndex(rows)-1),!0):!1;case"Enter":case"Tab":{const idx=this.clampedIndex(rows);return idx<0?!1:(e.preventDefault(),this.commit(rows[idx]),!0)}case"Escape":return e.preventDefault(),this.open=!1,!0;default:return!1}}clampedIndex(rows){return rows.length?Math.min(Math.max(this.activeIndex,0),rows.length-1):-1}rowId(index){return`${this._listId}-opt-${index}`}commit(item){const index=this.items.indexOf(item);if(index<0)return;const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),this.emit("lr-mention-select",Object.freeze({suggestionId:item.suggestionId,index,label:item.label})),this._silentClose=!0,this.open=!1}reposition(){this.cleanup?.(),this.cleanup=void 0;const anchorEl=this.resolveAnchorElement(),popup=this.renderRoot.querySelector('[part="listbox"]');if(anchorEl&&popup){const placement=place(anchorEl,popup,{placement:"bottom-start"});this.cleanup=placement,placement.ready.then(positioned=>{positioned||this.cleanup!==placement||!this.open||(this._silentClose=!0,this.open=!1)})}}resolveAnchorElement(){const anchor=this.anchor;if(!anchor)return null;if(isTextControl(anchor)){const rect=caretClientRect(anchor);if(rect){const owner=anchor.ownerDocument;this.virtualAnchor&&this.virtualAnchor.ownerDocument!==owner&&(this.virtualAnchor.remove(),this.virtualAnchor=null);const virtual=this.virtualAnchor??(this.virtualAnchor=owner.createElement("div"));return virtual.style.position="fixed",virtual.style.left=`${rect.left}px`,virtual.style.top=`${rect.top}px`,virtual.style.width="0",virtual.style.height=`${rect.height}px`,virtual.style.pointerEvents="none",virtual.isConnected||owner.body.appendChild(virtual),virtual}}return anchor}get effectiveEmptyText(){return this.emptyText===void 0?this.localize("noMatches"):this.emptyText}get effectiveLabel(){return hostAriaLabel(this)??(this.label===void 0?this.localize("mentionSuggestions"):this.label)}renderRow(item,index,activeId){const id=this.rowId(index),active=id===activeId;return html`
2
2
  <div
3
3
  part="option"
4
4
  id=${id}
@@ -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{styles}from"./mutation-observer.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{disconnectObserver,slottedElementTargets}from"../../../internal/slotted-observer.js";class LyraMutationObserver extends LyraElement{constructor(){super(...arguments),this.disabled=!1,this.childList=!1,this.attr=null,this.attrOldValue=!1,this.charData=!1,this.charDataOldValue=!1,this.observeAttributes=!1,this.characterData=!1,this.subtree=!0,this.attributeFilter=[],this.observerGeneration=0,this.onSlotChange=()=>this.observeTargets(),this.observeTargets=()=>{this.disconnect();const ownerDocument=this.ownerDocument,MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(this.disabled||!this.isConnected||!MutationObserverCtor)return;const targets=slottedElementTargets(this.renderRoot),attr=this.attr?.trim()??null,attrTokens=(attr??"").split(/\s+/).filter(Boolean),observesAttributes=attr==="*"||attrTokens.length>0||this.attrOldValue||this.observeAttributes||this.attributeFilter.length>0,observesCharacterData=this.charData||this.charDataOldValue||this.characterData;if(targets.length===0||!this.childList&&!observesAttributes&&!observesCharacterData)return;const options={childList:this.childList,attributes:observesAttributes,characterData:observesCharacterData,subtree:this.subtree},attributeFilter=attr===null?this.attributeFilter:attr==="*"?[]:attrTokens;attributeFilter.length>0&&(options.attributeFilter=attributeFilter),this.attrOldValue&&observesAttributes&&(options.attributeOldValue=!0),this.charDataOldValue&&observesCharacterData&&(options.characterDataOldValue=!0);const generation=this.observerGeneration,observer=new MutationObserverCtor(records=>{if(this.observer!==observer||this.observerDocument!==ownerDocument||this.observerGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument)return;const mutationList=Object.freeze([...records]);this.emit("lr-mutation",{records:mutationList,mutationList})});this.observer=observer,this.observerDocument=ownerDocument;for(const target of targets)observer.observe(target,options)}}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-mutation"])}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-mutation":Object.freeze(["records","mutationList"])})}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.scheduleAfterUpdate(this.observeTargets)}disconnectedCallback(){this.disconnect(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.disconnect()}updated(changed){super.updated(changed),["disabled","childList","attr","attrOldValue","charData","charDataOldValue","observeAttributes","characterData","subtree","attributeFilter"].some(key=>changed.has(key))&&this.scheduleAfterUpdate(this.observeTargets)}disconnect(){this.observerGeneration+=1,this.observer=disconnectObserver(this.observer),this.observerDocument=void 0}render(){return html`<span part="base"><slot @slotchange=${this.onSlotChange}></slot></span>`}}__decorate([property({type:Boolean,reflect:!0})],LyraMutationObserver.prototype,"disabled",void 0),__decorate([property({type:Boolean,attribute:"child-list",reflect:!0})],LyraMutationObserver.prototype,"childList",void 0),__decorate([property({reflect:!0})],LyraMutationObserver.prototype,"attr",void 0),__decorate([property({type:Boolean,attribute:"attr-old-value",reflect:!0})],LyraMutationObserver.prototype,"attrOldValue",void 0),__decorate([property({type:Boolean,attribute:"char-data",reflect:!0})],LyraMutationObserver.prototype,"charData",void 0),__decorate([property({type:Boolean,attribute:"char-data-old-value",reflect:!0})],LyraMutationObserver.prototype,"charDataOldValue",void 0),__decorate([property({type:Boolean,attribute:"attributes",reflect:!0})],LyraMutationObserver.prototype,"observeAttributes",void 0),__decorate([property({type:Boolean,attribute:"character-data",reflect:!0})],LyraMutationObserver.prototype,"characterData",void 0),__decorate([property({type:Boolean,converter:trueDefaultBooleanConverter})],LyraMutationObserver.prototype,"subtree",void 0),__decorate([property({attribute:!1})],LyraMutationObserver.prototype,"attributeFilter",void 0);export{LyraMutationObserver};
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{styles}from"./mutation-observer.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{disconnectObserver,slottedElementTargets}from"../../../internal/slotted-observer.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";const MAX_OBSERVER_ATTRIBUTE_FILTERS=1e4;function normalizedAttributeFilter(value){try{if(!Array.isArray(value))return Object.freeze([]);const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return Object.freeze([]);const values=[];for(let index=0;index<Math.min(length.value,MAX_OBSERVER_ATTRIBUTE_FILTERS);index+=1){const entry=getOwnDataDescriptor(value,String(index));entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR||typeof entry.value!="string"||values.push(entry.value)}return Object.freeze(values)}catch{return Object.freeze([])}}class LyraMutationObserver extends LyraElement{constructor(){super(...arguments),this.disabled=!1,this.childList=!1,this.attr=null,this.attrOldValue=!1,this.charData=!1,this.charDataOldValue=!1,this.observeAttributes=!1,this.characterData=!1,this.subtree=!0,this.attributeFilter=[],this.observerGeneration=0,this.onSlotChange=()=>this.observeTargets(),this.observeTargets=()=>{this.disconnect();const ownerDocument=this.ownerDocument;let MutationObserverCtor;try{MutationObserverCtor=ownerDocument.defaultView?.MutationObserver}catch{return}const disabled=this.disabled===!0,childList=this.childList===!0,attrValue=this.attr,attr=typeof attrValue=="string"?attrValue.trim():null,attrTokens=(attr??"").split(/\s+/).filter(Boolean),mappedAttributes=attr==="*"||attrTokens.length>0,attrOldValue=this.attrOldValue===!0,charData=this.charData===!0,charDataOldValue=this.charDataOldValue===!0,observeAttributes=this.observeAttributes===!0,characterData=this.characterData===!0,subtree=this.subtree===!0,attributeFilter=attr===null?normalizedAttributeFilter(this.attributeFilter):Object.freeze([]),observesAttributes=mappedAttributes||attrOldValue||observeAttributes||attributeFilter.length>0,observesCharacterData=charData||charDataOldValue||characterData;if(disabled||!this.isConnected||!MutationObserverCtor)return;let targets;try{targets=slottedElementTargets(this.renderRoot)}catch{return}if(targets.length===0||!childList&&!observesAttributes&&!observesCharacterData)return;const options={childList,attributes:observesAttributes,characterData:observesCharacterData,subtree},mappedFilter=Object.freeze(attr==="*"?[]:attrTokens),effectiveFilter=attr===null?attributeFilter:mappedFilter;effectiveFilter.length>0&&(options.attributeFilter=[...effectiveFilter]),attrOldValue&&observesAttributes&&(options.attributeOldValue=!0),charDataOldValue&&observesCharacterData&&(options.characterDataOldValue=!0);const generation=this.observerGeneration;let observer;try{observer=new MutationObserverCtor(records=>{if(this.observer!==observer||this.observerDocument!==ownerDocument||this.observerGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument)return;let mutationList;try{mutationList=Object.freeze([...records])}catch{return}this.emit("lr-mutation",{records:mutationList,mutationList})})}catch{return}this.observer=observer,this.observerDocument=ownerDocument;let observed=!1;for(const target of targets)try{observer.observe(target,options),observed=!0}catch{}observed||this.disconnect()}}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-mutation"])}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-mutation":Object.freeze(["records","mutationList"])})}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.scheduleAfterUpdate(this.observeTargets)}disconnectedCallback(){this.disconnect(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.disconnect()}updated(changed){super.updated(changed),["disabled","childList","attr","attrOldValue","charData","charDataOldValue","observeAttributes","characterData","subtree","attributeFilter"].some(key=>changed.has(key))&&this.scheduleAfterUpdate(this.observeTargets)}disconnect(){this.observerGeneration+=1;const observer=this.observer;this.observer=void 0,this.observerDocument=void 0;try{disconnectObserver(observer)}catch{}}render(){return html`<span part="base"><slot @slotchange=${this.onSlotChange}></slot></span>`}}__decorate([property({type:Boolean,reflect:!0})],LyraMutationObserver.prototype,"disabled",void 0),__decorate([property({type:Boolean,attribute:"child-list",reflect:!0})],LyraMutationObserver.prototype,"childList",void 0),__decorate([property({reflect:!0})],LyraMutationObserver.prototype,"attr",void 0),__decorate([property({type:Boolean,attribute:"attr-old-value",reflect:!0})],LyraMutationObserver.prototype,"attrOldValue",void 0),__decorate([property({type:Boolean,attribute:"char-data",reflect:!0})],LyraMutationObserver.prototype,"charData",void 0),__decorate([property({type:Boolean,attribute:"char-data-old-value",reflect:!0})],LyraMutationObserver.prototype,"charDataOldValue",void 0),__decorate([property({type:Boolean,attribute:"attributes",reflect:!0})],LyraMutationObserver.prototype,"observeAttributes",void 0),__decorate([property({type:Boolean,attribute:"character-data",reflect:!0})],LyraMutationObserver.prototype,"characterData",void 0),__decorate([property({type:Boolean,converter:trueDefaultBooleanConverter})],LyraMutationObserver.prototype,"subtree",void 0),__decorate([property({attribute:!1})],LyraMutationObserver.prototype,"attributeFilter",void 0);export{LyraMutationObserver};
@@ -1 +1 @@
1
- import{resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";function isIcalApi(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&"parse"in value&&typeof value.parse=="function"&&"Component"in value&&typeof value.Component=="function"&&"Event"in value&&typeof value.Event=="function"}let cached;async function loadIcalDeps(importIcal=()=>import("ical.js")){try{return resolveOptionalPeerCapability(await importIcal(),isIcalApi)}catch(error){return console.warn("<lr-calendar-viewer> needs the optional peer dependency `ical.js` to parse .ics calendars \u2014 install it with `pnpm add ical.js`:",error),null}}function loadIcal(){return cached||(cached=loadIcalDeps()),cached}function clearIcalCache(){cached=void 0}export{clearIcalCache,loadIcal,loadIcalDeps};
1
+ import{resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";const CALENDAR_ICAL_WARNING_KEY="lyra-calendar-viewer-ical-unavailable",CALENDAR_ICAL_WARNING="<lr-calendar-viewer> could not load its optional ical.js peer.";function isIcalApi(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&"parse"in value&&typeof value.parse=="function"&&"Component"in value&&typeof value.Component=="function"&&"Event"in value&&typeof value.Event=="function"}let cached;async function loadIcalDeps(importIcal=()=>import("ical.js")){try{return resolveOptionalPeerCapability(await importIcal(),isIcalApi)}catch{return devWarnOnce(CALENDAR_ICAL_WARNING_KEY,CALENDAR_ICAL_WARNING),null}}function loadIcal(){return cached||(cached=loadIcalDeps()),cached}function clearIcalCache(){cached=void 0}export{clearIcalCache,loadIcal,loadIcalDeps};
@@ -95,18 +95,21 @@ export declare class LyraDocumentCompare extends LyraElement<LyraDocumentCompare
95
95
  * independently-scrollable `<lr-document-preview>` panes -- see the class doc's "Synchronized
96
96
  * anchors" section for how the two panes are kept in sync. Unsupported values normalize to
97
97
  * reflected `diff`. */
98
- private _view;get view():LyraDocumentCompareView;set view(next:LyraDocumentCompareView);
99
- /** The "before" version. */
100
- oldVersion?:DocumentCompareVersion;
101
- /** The "after" version. */
102
- newVersion?:DocumentCompareVersion;
98
+ private _view;get view():LyraDocumentCompareView;set view(next:LyraDocumentCompareView);private _oldVersion?;
99
+ /** The "before" version. Display fields are copied through own data descriptors at assignment,
100
+ * while invalid records render as an unset pane. */
101
+ get oldVersion():DocumentCompareVersion|undefined;set oldVersion(value:DocumentCompareVersion|undefined);private _newVersion?;
102
+ /** The "after" version. Display fields are copied through own data descriptors at assignment,
103
+ * while invalid records render as an unset pane. */
104
+ get newVersion():DocumentCompareVersion|undefined;set newVersion(value:DocumentCompareVersion|undefined);
103
105
  /** Forwarded to the internal `<lr-diff-view>`'s own `layout` property while `view="diff"`;
104
106
  * unsupported values normalize to reflected `unified`. */
105
107
  private _diffLayout;get diffLayout():LyraDiffViewLayout;set diffLayout(next:LyraDiffViewLayout);
106
108
  /** Forwarded to the internal `<lr-diff-view>`'s own `copyable` property while `view="diff"`. */
107
- copyable:boolean;
108
- /** Forwarded to the internal `<lr-diff-view>`'s own `language` property while `view="diff"`. */
109
- language:string;
109
+ copyable:boolean;private _language;
110
+ /** Forwarded to the internal `<lr-diff-view>`'s own `language` property while `view="diff"`.
111
+ * Runtime values outside the documented string contract fall back to no highlighting. */
112
+ get language():string;set language(value:string);
110
113
  /** Forwarded to the internal `<lr-diff-view>`'s own `languages` property while `view="diff"`. */
111
114
  languages?:Readonly<Record<string,ShikiLanguageInput>>;
112
115
  /** Whether scrolling one `view="side-by-side"` pane proportionally scrolls the other. See the
@@ -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}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{styles}from"./document-compare.styles.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_documentCompareLabel,LYRA_DEFAULT_documentCompareNewVersion,LYRA_DEFAULT_documentCompareNoVersion,LYRA_DEFAULT_documentCompareOldVersion,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";const DOCUMENT_COMPARE_VIEW=literalSetConverter(["diff","side-by-side"],"diff"),DOCUMENT_COMPARE_DIFF_LAYOUT=literalSetConverter(["unified","split"],"unified");function versionSourceIdentity(version){return version?JSON.stringify([version.id??"",version.uri??"",version.version??"",version.mimeType??"",version.name??""]):""}class LyraDocumentCompare extends LyraElement{constructor(){super(...arguments),this._view="diff",this._diffLayout="unified",this.copyable=!1,this.language="",this.syncScroll=!0,this.anchor=null,this.suppressSync=!1,this.onPaneScroll=source=>()=>{if(!this.syncScroll||this.suppressSync)return;const from=source==="old"?this.paneOldEl:this.paneNewEl,to=source==="old"?this.paneNewEl:this.paneOldEl;if(!from||!to)return;const fromMax=from.scrollHeight-from.clientHeight,toMax=to.scrollHeight-to.clientHeight;if(fromMax<=0)return;const fraction=from.scrollTop/fromMax;this.suppressSync=!0,to.scrollTop=fraction*toMax,this.scheduleSyncRelease()}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,documentCompareLabel:LYRA_DEFAULT_documentCompareLabel,documentCompareNewVersion:LYRA_DEFAULT_documentCompareNewVersion,documentCompareNoVersion:LYRA_DEFAULT_documentCompareNoVersion,documentCompareOldVersion:LYRA_DEFAULT_documentCompareOldVersion,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get view(){return this._view}set view(next){const normalized=DOCUMENT_COMPARE_VIEW.normalizeReflected(this,"view",next),old=this._view;old!==normalized&&(this._view=normalized,this.requestUpdate("view",old))}get diffLayout(){return this._diffLayout}set diffLayout(next){const normalized=DOCUMENT_COMPARE_DIFF_LAYOUT.normalizeReflected(this,"diff-layout",next),old=this._diffLayout;old!==normalized&&(this._diffLayout=normalized,this.requestUpdate("diffLayout",old))}disconnectedCallback(){this.cancelSyncRelease(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.cancelSyncRelease()}cancelSyncRelease(){this.syncReleaseFrame!==void 0&&this.syncReleaseView?.cancelAnimationFrame(this.syncReleaseFrame),this.syncReleaseFrame=void 0,this.syncReleaseView=void 0,this.suppressSync=!1}scheduleSyncRelease(){const view=this.ownerDocument.defaultView;if(!view){this.suppressSync=!1;return}const frame=view.requestAnimationFrame(()=>{this.syncReleaseView!==view||this.syncReleaseFrame!==frame||(this.syncReleaseFrame=void 0,this.syncReleaseView=void 0,this.suppressSync=!1)});this.syncReleaseView=view,this.syncReleaseFrame=frame}updated(changed){super.updated(changed);const anchor=this.anchor,sourceChanged=property2=>changed.has(property2)&&versionSourceIdentity(changed.get(property2))!==versionSourceIdentity(this[property2]),oldSourceChanged=sourceChanged("oldVersion"),newSourceChanged=sourceChanged("newVersion");if(anchor!=null){(changed.has("anchor")||this.view==="side-by-side"&&(changed.has("view")||changed.has("oldVersion")||changed.has("newVersion")))&&(this.previewOldEl?.scrollToAnchor(anchor),this.previewNewEl?.scrollToAnchor(anchor));return}this.view!=="side-by-side"||!oldSourceChanged&&!newSourceChanged||(this.cancelSyncRelease(),(this.syncScroll||oldSourceChanged)&&this.paneOldEl&&(this.paneOldEl.scrollTop=0),(this.syncScroll||newSourceChanged)&&this.paneNewEl&&(this.paneNewEl.scrollTop=0))}onHighlightActivate(side,event){const{highlightId}=event.detail,otherPreview=side==="old"?this.previewNewEl:this.previewOldEl;otherPreview?.highlights.some(highlight=>highlight.id===highlightId)&&otherPreview?.scrollToAnchor(highlightId)}versionLabel(version,fallbackKey){return version?.name||version?.version||this.localize(fallbackKey)}renderDiff(){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,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{styles}from"./document-compare.styles.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{snapshotLyraHighlights}from"../../../internal/highlight-collection.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_documentCompareLabel,LYRA_DEFAULT_documentCompareNewVersion,LYRA_DEFAULT_documentCompareNoVersion,LYRA_DEFAULT_documentCompareOldVersion,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";const DOCUMENT_COMPARE_VIEW=literalSetConverter(["diff","side-by-side"],"diff"),DOCUMENT_COMPARE_DIFF_LAYOUT=literalSetConverter(["unified","split"],"unified"),DOCUMENT_COMPARE_VERSION_FIELDS=["id","name","mimeType","uri","version","text","highlights"];function projectDocumentCompareVersion(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const descriptors=new Map;for(const field of DOCUMENT_COMPARE_VERSION_FIELDS)descriptors.set(field,getOwnDataDescriptor(value,field));const fieldValue=field=>{const descriptor=descriptors.get(field);if(!(descriptor===void 0||descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return descriptor.value},idDescriptor=descriptors.get("id"),nameDescriptor=descriptors.get("name");if(idDescriptor===void 0||idDescriptor===MISSING_OWN_DATA_DESCRIPTOR||idDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||nameDescriptor===void 0||nameDescriptor===MISSING_OWN_DATA_DESCRIPTOR||nameDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR)return;const id=fieldValue("id"),name=fieldValue("name");if(typeof id!="string"||typeof name!="string")return;const mimeType=fieldValue("mimeType"),uri=fieldValue("uri"),version=fieldValue("version"),text=fieldValue("text"),highlights=fieldValue("highlights");return Object.freeze({id,name,...typeof mimeType=="string"?{mimeType}:{},...typeof uri=="string"?{uri}:{},...typeof version=="string"?{version}:{},...typeof text=="string"?{text}:{},...highlights===void 0?{}:{highlights:snapshotLyraHighlights(highlights)}})}catch{return}}function versionSourceIdentity(version){return version?JSON.stringify([version.id??"",version.uri??"",version.version??"",version.mimeType??"",version.name??""]):""}class LyraDocumentCompare extends LyraElement{constructor(){super(...arguments),this._view="diff",this._diffLayout="unified",this.copyable=!1,this._language="",this.syncScroll=!0,this.anchor=null,this.suppressSync=!1,this.onPaneScroll=source=>()=>{if(!this.syncScroll||this.suppressSync)return;const from=source==="old"?this.paneOldEl:this.paneNewEl,to=source==="old"?this.paneNewEl:this.paneOldEl;if(!from||!to)return;const fromMax=from.scrollHeight-from.clientHeight,toMax=to.scrollHeight-to.clientHeight;if(fromMax<=0)return;const fraction=from.scrollTop/fromMax;this.suppressSync=!0,to.scrollTop=fraction*toMax,this.scheduleSyncRelease()}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,documentCompareLabel:LYRA_DEFAULT_documentCompareLabel,documentCompareNewVersion:LYRA_DEFAULT_documentCompareNewVersion,documentCompareNoVersion:LYRA_DEFAULT_documentCompareNoVersion,documentCompareOldVersion:LYRA_DEFAULT_documentCompareOldVersion,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get view(){return this._view}set view(next){const normalized=DOCUMENT_COMPARE_VIEW.normalizeReflected(this,"view",next),old=this._view;old!==normalized&&(this._view=normalized,this.requestUpdate("view",old))}get oldVersion(){return this._oldVersion}set oldVersion(value){const previous=this._oldVersion;this._oldVersion=projectDocumentCompareVersion(value),this.requestUpdate("oldVersion",previous)}get newVersion(){return this._newVersion}set newVersion(value){const previous=this._newVersion;this._newVersion=projectDocumentCompareVersion(value),this.requestUpdate("newVersion",previous)}get diffLayout(){return this._diffLayout}set diffLayout(next){const normalized=DOCUMENT_COMPARE_DIFF_LAYOUT.normalizeReflected(this,"diff-layout",next),old=this._diffLayout;old!==normalized&&(this._diffLayout=normalized,this.requestUpdate("diffLayout",old))}get language(){return this._language}set language(value){const normalized=typeof value=="string"?value:"",previous=this._language;previous!==normalized&&(this._language=normalized,this.requestUpdate("language",previous))}disconnectedCallback(){this.cancelSyncRelease(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.cancelSyncRelease()}cancelSyncRelease(){this.syncReleaseFrame!==void 0&&this.syncReleaseView?.cancelAnimationFrame(this.syncReleaseFrame),this.syncReleaseFrame=void 0,this.syncReleaseView=void 0,this.suppressSync=!1}scheduleSyncRelease(){const view=this.ownerDocument.defaultView;if(!view){this.suppressSync=!1;return}const frame=view.requestAnimationFrame(()=>{this.syncReleaseView!==view||this.syncReleaseFrame!==frame||(this.syncReleaseFrame=void 0,this.syncReleaseView=void 0,this.suppressSync=!1)});this.syncReleaseView=view,this.syncReleaseFrame=frame}updated(changed){super.updated(changed);const anchor=this.anchor,sourceChanged=property2=>changed.has(property2)&&versionSourceIdentity(changed.get(property2))!==versionSourceIdentity(this[property2]),oldSourceChanged=sourceChanged("oldVersion"),newSourceChanged=sourceChanged("newVersion");if(anchor!=null){(changed.has("anchor")||this.view==="side-by-side"&&(changed.has("view")||changed.has("oldVersion")||changed.has("newVersion")))&&(this.previewOldEl?.scrollToAnchor(anchor),this.previewNewEl?.scrollToAnchor(anchor));return}this.view!=="side-by-side"||!oldSourceChanged&&!newSourceChanged||(this.cancelSyncRelease(),(this.syncScroll||oldSourceChanged)&&this.paneOldEl&&(this.paneOldEl.scrollTop=0),(this.syncScroll||newSourceChanged)&&this.paneNewEl&&(this.paneNewEl.scrollTop=0))}onHighlightActivate(side,event){const{highlightId}=event.detail,otherPreview=side==="old"?this.previewNewEl:this.previewOldEl;otherPreview?.highlights.some(highlight=>highlight.id===highlightId)&&otherPreview?.scrollToAnchor(highlightId)}versionLabel(version,fallbackKey){return version?.name||version?.version||this.localize(fallbackKey)}renderDiff(){return html`
2
2
  <lr-diff-view
3
3
  part="diff"
4
4
  .oldText=${this.oldVersion?.text??""}
@@ -31,4 +31,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
31
31
  <div part="base" role=${viewerSemanticRole(this,"group")??nothing} aria-label=${viewerSemanticLabel(this,this.localize("documentCompareLabel"))??nothing}>
32
32
  ${this.view==="side-by-side"?this.renderSideBySide():this.renderDiff()}
33
33
  </div>
34
- `}}__decorate([property({reflect:!0,converter:DOCUMENT_COMPARE_VIEW})],LyraDocumentCompare.prototype,"view",null),__decorate([property({attribute:!1})],LyraDocumentCompare.prototype,"oldVersion",void 0),__decorate([property({attribute:!1})],LyraDocumentCompare.prototype,"newVersion",void 0),__decorate([property({attribute:"diff-layout",reflect:!0,converter:DOCUMENT_COMPARE_DIFF_LAYOUT})],LyraDocumentCompare.prototype,"diffLayout",null),__decorate([property({type:Boolean})],LyraDocumentCompare.prototype,"copyable",void 0),__decorate([property()],LyraDocumentCompare.prototype,"language",void 0),__decorate([property({attribute:!1})],LyraDocumentCompare.prototype,"languages",void 0),__decorate([property({attribute:"sync-scroll",converter:trueDefaultBooleanConverter})],LyraDocumentCompare.prototype,"syncScroll",void 0),__decorate([property({attribute:!1,hasChanged:()=>!0})],LyraDocumentCompare.prototype,"anchor",void 0),__decorate([query('[part="pane-old"]')],LyraDocumentCompare.prototype,"paneOldEl",void 0),__decorate([query('[part="pane-new"]')],LyraDocumentCompare.prototype,"paneNewEl",void 0),__decorate([query('[part="pane-old"] lr-document-preview')],LyraDocumentCompare.prototype,"previewOldEl",void 0),__decorate([query('[part="pane-new"] lr-document-preview')],LyraDocumentCompare.prototype,"previewNewEl",void 0);export{LyraDocumentCompare};
34
+ `}}__decorate([property({reflect:!0,converter:DOCUMENT_COMPARE_VIEW})],LyraDocumentCompare.prototype,"view",null),__decorate([property({attribute:!1})],LyraDocumentCompare.prototype,"oldVersion",null),__decorate([property({attribute:!1})],LyraDocumentCompare.prototype,"newVersion",null),__decorate([property({attribute:"diff-layout",reflect:!0,converter:DOCUMENT_COMPARE_DIFF_LAYOUT})],LyraDocumentCompare.prototype,"diffLayout",null),__decorate([property({type:Boolean})],LyraDocumentCompare.prototype,"copyable",void 0),__decorate([property()],LyraDocumentCompare.prototype,"language",null),__decorate([property({attribute:!1})],LyraDocumentCompare.prototype,"languages",void 0),__decorate([property({attribute:"sync-scroll",converter:trueDefaultBooleanConverter})],LyraDocumentCompare.prototype,"syncScroll",void 0),__decorate([property({attribute:!1,hasChanged:()=>!0})],LyraDocumentCompare.prototype,"anchor",void 0),__decorate([query('[part="pane-old"]')],LyraDocumentCompare.prototype,"paneOldEl",void 0),__decorate([query('[part="pane-new"]')],LyraDocumentCompare.prototype,"paneNewEl",void 0),__decorate([query('[part="pane-old"] lr-document-preview')],LyraDocumentCompare.prototype,"previewOldEl",void 0),__decorate([query('[part="pane-new"] lr-document-preview')],LyraDocumentCompare.prototype,"previewNewEl",void 0);export{LyraDocumentCompare};
@@ -91,6 +91,8 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
91
91
  * @csspart region-highlight-action - One action in the non-overlapping highlight action list.
92
92
  * @cssprop [--lr-document-preview-max-height=none] - Maximum body block size before the preview scrolls internally.
93
93
  * @cssprop [--lr-document-preview-font=var(--lr-font-mono)] - Font used for plain-text previews.
94
+ * @cssprop [--lr-document-preview-download-link-hover-bg=color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))] - Hover background of the generic download link.
95
+ * @cssprop [--lr-document-preview-download-link-active-bg=color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))] - Pressed background of the generic download link.
94
96
  * @cssprop [--lr-document-preview-spin-duration=var(--lr-transition-ambient)] - Timing of one
95
97
  * indeterminate loading-indicator rotation.
96
98
  * @cssprop [--lr-document-preview-progress=0] - Unitless 0-100 completion of the determinate
@@ -143,7 +145,7 @@ maxHeight:string;
143
145
  zoomable:boolean;
144
146
  /** Omits the generic fallback's download action when a composing shell owns that action.
145
147
  * Property-only: this is a composition control rather than author-facing markup state. */
146
- suppressDownload:boolean;private _highlights;
148
+ suppressDownload:boolean;private _highlights;private _regionHighlights;
147
149
  /** Display-only region highlights over the image-format preview (see the class doc's format-
148
150
  * dispatch scope -- text/generic formats never render these). IDs are trimmed and must be
149
151
  * nonempty; the first record for an ID is retained and blank or later duplicates are ignored. */
@@ -159,7 +161,7 @@ private renderSpinner;private renderError;private renderTextPreview;private rend
159
161
  * (plus the highlight layer, which needs the same relatively-positioned sibling context either
160
162
  * way) unwrapped, preserving pre-`zoomable` DOM exactly. Mirrors `<lr-svg-viewer>`'s identical
161
163
  * helper. */
162
- private renderZoomableWrapper;private regionHighlights;private highlightActionLabel;private renderHighlightLayer;private renderHighlightActions;
164
+ private renderZoomableWrapper;private projectRegionHighlights;private regionHighlights;private highlightActionLabel;private renderHighlightLayer;private renderHighlightActions;
163
165
  /** Scrolls a `region` highlight into view (image format only). See `<lr-svg-viewer>`'s
164
166
  * identical method for the id/anchor-reference resolution and no-retry-loop rationale. */
165
167
  scrollToAnchor(target:LyraAnchor|string):Promise<boolean>;private renderDownloadFallback;
@@ -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,svg}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{fileIcon}from"../../../internal/icons.js";import{srOnly}from"../../../internal/a11y.js";import{safeDownloadHref,safeFetchUrl,safeMediaSrc}from"../../../internal/safe-url.js";import{isAbortError,isResourceLimitError,LyraUserFacingError,readResponseText,resolveOwnerFetchTarget}from"../../../internal/resource-loader.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./document-preview.styles.js";import{sanitizeCssLength,sanitizePercentRect}from"../../../internal/safe-css.js";import{ViewerAnnouncementController}from"../viewer-announcements.js";import{snapshotLyraHighlights}from"../../../internal/highlight-collection.js";import{LYRA_DEFAULT_convertingDocument,LYRA_DEFAULT_documentPreviewAlt,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewGenericError,LYRA_DEFAULT_documentPreviewGenericFile,LYRA_DEFAULT_documentPreviewNotAvailable,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeDocument,LYRA_DEFAULT_documentPreviewTypeImage,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_download,LYRA_DEFAULT_highlightOfTotal,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings.generated.js";const IDLE_TEXT_FETCH={kind:"idle"};function classifyFormat(mimeType){const mt=mimeType.trim().toLowerCase();return mt.startsWith("text/")||mt==="application/json"?"text":mt.startsWith("image/")?"image":"generic"}function sameRegionAnchor(a,b){return a.kind!=="region"||b.kind!=="region"?!1:a.page===b.page&&a.rect.x===b.rect.x&&a.rect.y===b.rect.y&&a.rect.width===b.rect.width&&a.rect.height===b.rect.height}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function downloadIcon(){return icon(svg`
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,svg}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{fileIcon}from"../../../internal/icons.js";import{srOnly}from"../../../internal/a11y.js";import{safeDownloadHref,safeFetchUrl,safeMediaSrc}from"../../../internal/safe-url.js";import{isAbortError,isResourceLimitError,LyraUserFacingError,readResponseText,resolveOwnerFetchTarget}from"../../../internal/resource-loader.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./document-preview.styles.js";import{sanitizeCssLength,sanitizePercentRect}from"../../../internal/safe-css.js";import{ViewerAnnouncementController}from"../viewer-announcements.js";import{snapshotLyraHighlightAnchorKind,snapshotLyraHighlights}from"../../../internal/highlight-collection.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{LYRA_DEFAULT_convertingDocument,LYRA_DEFAULT_documentPreviewAlt,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewGenericError,LYRA_DEFAULT_documentPreviewGenericFile,LYRA_DEFAULT_documentPreviewNotAvailable,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeDocument,LYRA_DEFAULT_documentPreviewTypeImage,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_download,LYRA_DEFAULT_highlightOfTotal,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings.generated.js";const IDLE_TEXT_FETCH={kind:"idle"};function classifyFormat(mimeType){const mt=mimeType.trim().toLowerCase();return mt.startsWith("text/")||mt==="application/json"?"text":mt.startsWith("image/")?"image":"generic"}const EMPTY_REGION_HIGHLIGHTS=Object.freeze([]);function projectRegionAnchor(value,knownRegionKind=!1){try{if(value===null||typeof value!="object"||Array.isArray(value))return;if(!knownRegionKind){const kind=getOwnDataDescriptor(value,"kind");if(kind===MISSING_OWN_DATA_DESCRIPTOR||kind===UNSAFE_OWN_DATA_DESCRIPTOR||kind.value!=="region")return}const rectDescriptor=getOwnDataDescriptor(value,"rect");if(rectDescriptor===MISSING_OWN_DATA_DESCRIPTOR||rectDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR)return;const rect=sanitizePercentRect(rectDescriptor.value);if(!rect)return;const pageDescriptor=getOwnDataDescriptor(value,"page"),page=pageDescriptor===MISSING_OWN_DATA_DESCRIPTOR||pageDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:pageDescriptor.value;return Object.freeze({rect,...typeof page=="number"&&Number.isFinite(page)?{page}:{}})}catch{return}}function sameRegionAnchor(a,b){return a.page===b.page&&a.rect.x===b.rect.x&&a.rect.y===b.rect.y&&a.rect.width===b.rect.width&&a.rect.height===b.rect.height}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function downloadIcon(){return icon(svg`
2
2
  <path d="M12 3v12"></path>
3
3
  <polyline points="7 11 12 16 17 11"></polyline>
4
4
  <path d="M4 18v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2"></path>
@@ -15,7 +15,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
15
15
  aria-hidden="true"
16
16
  focusable="false"
17
17
  >${paths}</svg>
18
- `}class LyraDocumentPreview extends LyraElement{constructor(){super(...arguments),this.src="",this.mimeType="",this.filename="",this.status="idle",this.errorText="",this.maxHeight="",this.zoomable=!1,this.suppressDownload=!1,this._highlights=snapshotLyraHighlights([]),this.activeHighlightId=null,this.anchorKinds=["region"],this.hasUnsupportedSlot=!1,this.textFetch=IDLE_TEXT_FETCH,this.generation=0,this.invalidUrlReportedFor=null,this.announcements=new ViewerAnnouncementController(this),this.onUnsupportedSlotChange=e=>{this.hasUnsupportedSlot=e.target.assignedElements({flatten:!0}).length>0},this.onDownloadClick=()=>{this.emit("lr-download",{src:this.src,filename:this.filename})}}static{this.defaultStrings={...super.defaultStrings,convertingDocument:LYRA_DEFAULT_convertingDocument,documentPreviewAlt:LYRA_DEFAULT_documentPreviewAlt,documentPreviewEmpty:LYRA_DEFAULT_documentPreviewEmpty,documentPreviewFailedToLoad:LYRA_DEFAULT_documentPreviewFailedToLoad,documentPreviewGenericError:LYRA_DEFAULT_documentPreviewGenericError,documentPreviewGenericFile:LYRA_DEFAULT_documentPreviewGenericFile,documentPreviewNotAvailable:LYRA_DEFAULT_documentPreviewNotAvailable,documentPreviewResourceTooLarge:LYRA_DEFAULT_documentPreviewResourceTooLarge,documentPreviewTypeDocument:LYRA_DEFAULT_documentPreviewTypeDocument,documentPreviewTypeImage:LYRA_DEFAULT_documentPreviewTypeImage,documentPreviewUrlNotAllowed:LYRA_DEFAULT_documentPreviewUrlNotAllowed,download:LYRA_DEFAULT_download,highlightOfTotal:LYRA_DEFAULT_highlightOfTotal,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,loadingDocument:LYRA_DEFAULT_loadingDocument}}static{this.styles=[LyraElement.styles,styles,srOnly]}get highlights(){return this._highlights}set highlights(value){const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this.requestUpdate("highlights",previous)}connectedCallback(){super.connectedCallback(),this.announcements.connect(),this.hasUpdated&&this.src&&classifyFormat(this.mimeType)==="text"&&(this.textFetch=IDLE_TEXT_FETCH,this.scheduleAfterUpdate(()=>{const url=safeFetchUrl(this.src);url&&this.status!=="converting"&&this.status!=="error"&&this.fetchText(url)}))}disconnectedCallback(){this.generation++,this.beginAbortableLoad(),this.textFetch=IDLE_TEXT_FETCH,this.announcements.disconnect(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted()}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasUnsupportedSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="unsupported"))}updated(changed){super.updated(changed),this.syncAnnouncementState();const safeTextSrc=safeFetchUrl(this.src);classifyFormat(this.mimeType)==="text"&&safeTextSrc!==null&&this.status!=="converting"&&this.status!=="error"?(changed.has("src")||changed.has("mimeType")||changed.has("status")&&this.textFetch.kind==="idle")&&this.scheduleAfterUpdate(()=>{this.fetchText(safeTextSrc)}):this.textFetch.kind!=="idle"&&(this.generation++,this.beginAbortableLoad(),this.textFetch=IDLE_TEXT_FETCH)}syncAnnouncementState(){if(this.status==="converting"){if(this.progress!=null&&Number.isFinite(this.progress)){this.announcements.transition("preview","progress");return}this.announcements.transition("preview","loading",this.localize("convertingDocument"));return}if(this.status==="error"){this.announcements.transition("preview","error",this.errorText||this.localize("documentPreviewGenericError"));return}if(classifyFormat(this.mimeType)!=="text"||this.src===""){this.announcements.transition("preview","idle");return}if(safeFetchUrl(this.src)===null){this.announcements.transition("preview","error",this.localize("documentPreviewUrlNotAllowed"));return}if(this.textFetch.kind==="error"){this.announcements.transition("preview","error",this.textFetch.message);return}if(this.textFetch.kind==="loaded"){this.announcements.transition("preview","loaded");return}this.announcements.transition("preview","loading",this.localize("loadingDocument"))}async fetchText(url){const generation=++this.generation,signal=this.beginAbortableLoad(),fetchTarget=resolveOwnerFetchTarget(this,url);if(!fetchTarget){const error=new LyraUserFacingError(this.localize("documentPreviewUrlNotAllowed"));this.textFetch={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}this.textFetch={kind:"loading"};try{const response=await fetchTarget.view.fetch(fetchTarget.url,signal?{signal}:void 0);if(!this.isConnected||generation!==this.generation)return;if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);const text=await readResponseText(response);if(!this.isConnected||generation!==this.generation)return;this.textFetch={kind:"loaded",text}}catch(error){if(isAbortError(error)||!this.isConnected||generation!==this.generation)return;const message=this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad");this.textFetch={kind:"error",message},this.emit("lr-render-error",{error})}}renderSpinner(label,progressValue){if(progressValue!=null&&Number.isFinite(progressValue)){const clamped=finiteRange(progressValue,0,0,100),rounded=Math.round(clamped),formatted=getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:0}).format(clamped/100);return html`
18
+ `}class LyraDocumentPreview extends LyraElement{constructor(){super(...arguments),this.src="",this.mimeType="",this.filename="",this.status="idle",this.errorText="",this.maxHeight="",this.zoomable=!1,this.suppressDownload=!1,this._highlights=snapshotLyraHighlights([]),this._regionHighlights=EMPTY_REGION_HIGHLIGHTS,this.activeHighlightId=null,this.anchorKinds=["region"],this.hasUnsupportedSlot=!1,this.textFetch=IDLE_TEXT_FETCH,this.generation=0,this.invalidUrlReportedFor=null,this.announcements=new ViewerAnnouncementController(this),this.onUnsupportedSlotChange=e=>{this.hasUnsupportedSlot=e.target.assignedElements({flatten:!0}).length>0},this.onDownloadClick=()=>{this.emit("lr-download",{src:this.src,filename:this.filename})}}static{this.defaultStrings={...super.defaultStrings,convertingDocument:LYRA_DEFAULT_convertingDocument,documentPreviewAlt:LYRA_DEFAULT_documentPreviewAlt,documentPreviewEmpty:LYRA_DEFAULT_documentPreviewEmpty,documentPreviewFailedToLoad:LYRA_DEFAULT_documentPreviewFailedToLoad,documentPreviewGenericError:LYRA_DEFAULT_documentPreviewGenericError,documentPreviewGenericFile:LYRA_DEFAULT_documentPreviewGenericFile,documentPreviewNotAvailable:LYRA_DEFAULT_documentPreviewNotAvailable,documentPreviewResourceTooLarge:LYRA_DEFAULT_documentPreviewResourceTooLarge,documentPreviewTypeDocument:LYRA_DEFAULT_documentPreviewTypeDocument,documentPreviewTypeImage:LYRA_DEFAULT_documentPreviewTypeImage,documentPreviewUrlNotAllowed:LYRA_DEFAULT_documentPreviewUrlNotAllowed,download:LYRA_DEFAULT_download,highlightOfTotal:LYRA_DEFAULT_highlightOfTotal,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,loadingDocument:LYRA_DEFAULT_loadingDocument}}static{this.styles=[LyraElement.styles,styles,srOnly]}get highlights(){return this._highlights}set highlights(value){const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this._regionHighlights=this.projectRegionHighlights(this._highlights),this.requestUpdate("highlights",previous)}connectedCallback(){super.connectedCallback(),this.announcements.connect(),this.hasUpdated&&this.src&&classifyFormat(this.mimeType)==="text"&&(this.textFetch=IDLE_TEXT_FETCH,this.scheduleAfterUpdate(()=>{const url=safeFetchUrl(this.src);url&&this.status!=="converting"&&this.status!=="error"&&this.fetchText(url)}))}disconnectedCallback(){this.generation++,this.beginAbortableLoad(),this.textFetch=IDLE_TEXT_FETCH,this.announcements.disconnect(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted()}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasUnsupportedSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="unsupported"))}updated(changed){super.updated(changed),this.syncAnnouncementState();const safeTextSrc=safeFetchUrl(this.src);classifyFormat(this.mimeType)==="text"&&safeTextSrc!==null&&this.status!=="converting"&&this.status!=="error"?(changed.has("src")||changed.has("mimeType")||changed.has("status")&&this.textFetch.kind==="idle")&&this.scheduleAfterUpdate(()=>{this.fetchText(safeTextSrc)}):this.textFetch.kind!=="idle"&&(this.generation++,this.beginAbortableLoad(),this.textFetch=IDLE_TEXT_FETCH)}syncAnnouncementState(){if(this.status==="converting"){if(this.progress!=null&&Number.isFinite(this.progress)){this.announcements.transition("preview","progress");return}this.announcements.transition("preview","loading",this.localize("convertingDocument"));return}if(this.status==="error"){this.announcements.transition("preview","error",this.errorText||this.localize("documentPreviewGenericError"));return}if(classifyFormat(this.mimeType)!=="text"||this.src===""){this.announcements.transition("preview","idle");return}if(safeFetchUrl(this.src)===null){this.announcements.transition("preview","error",this.localize("documentPreviewUrlNotAllowed"));return}if(this.textFetch.kind==="error"){this.announcements.transition("preview","error",this.textFetch.message);return}if(this.textFetch.kind==="loaded"){this.announcements.transition("preview","loaded");return}this.announcements.transition("preview","loading",this.localize("loadingDocument"))}async fetchText(url){const generation=++this.generation,signal=this.beginAbortableLoad(),fetchTarget=resolveOwnerFetchTarget(this,url);if(!fetchTarget){const error=new LyraUserFacingError(this.localize("documentPreviewUrlNotAllowed"));this.textFetch={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}this.textFetch={kind:"loading"};try{const response=await fetchTarget.view.fetch(fetchTarget.url,signal?{signal}:void 0);if(!this.isConnected||generation!==this.generation)return;if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);const text=await readResponseText(response);if(!this.isConnected||generation!==this.generation)return;this.textFetch={kind:"loaded",text}}catch(error){if(isAbortError(error)||!this.isConnected||generation!==this.generation)return;const message=this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad");this.textFetch={kind:"error",message},this.emit("lr-render-error",{error})}}renderSpinner(label,progressValue){if(progressValue!=null&&Number.isFinite(progressValue)){const clamped=finiteRange(progressValue,0,0,100),rounded=Math.round(clamped),formatted=getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:0}).format(clamped/100);return html`
19
19
  <div
20
20
  part="spinner"
21
21
  role="progressbar"
@@ -37,7 +37,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
37
37
  </div>`,frame=this.zoomable?html`<lr-pan-zoom
38
38
  exportparts="viewport:frame-viewport, content:frame-content, controls:frame-controls, zoom-in:frame-zoom-in, zoom-out:frame-zoom-out, reset:frame-reset"
39
39
  @lr-zoom-change=${this.stopPanZoomEvent}
40
- >${inner}</lr-pan-zoom>`:inner;return html`${frame}${this.renderHighlightActions(regionHighlights)}`}regionHighlights(){return this.highlights.flatMap(highlight=>{if(highlight.anchor.kind!=="region")return[];const rect=sanitizePercentRect(highlight.anchor.rect);return rect?[{...highlight,anchor:{...highlight.anchor,rect}}]:[]})}highlightActionLabel(highlight,index,total){if(highlight.label)return this.localize("highlightWithLabel",void 0,{label:highlight.label});const numberFormat=getNumberFormat(this.effectiveLocale);return this.localize("highlightOfTotal",void 0,{index:numberFormat.format(index+1),total:numberFormat.format(total)})}renderHighlightLayer(regionHighlights,interactive){return regionHighlights.length?html`<div part="highlight-layer">
40
+ >${inner}</lr-pan-zoom>`:inner;return html`${frame}${this.renderHighlightActions(regionHighlights)}`}projectRegionHighlights(highlights){const regions=[];for(const highlight of highlights){if(snapshotLyraHighlightAnchorKind(highlight)!=="region")continue;const anchor=projectRegionAnchor(highlight.anchor,!0);anchor&&regions.push(Object.freeze({id:highlight.id,...typeof highlight.label=="string"?{label:highlight.label}:{},...highlight.tone===void 0?{}:{tone:highlight.tone},anchor}))}return Object.freeze(regions)}regionHighlights(){return this._regionHighlights}highlightActionLabel(highlight,index,total){if(highlight.label)return this.localize("highlightWithLabel",void 0,{label:highlight.label});const numberFormat=getNumberFormat(this.effectiveLocale);return this.localize("highlightOfTotal",void 0,{index:numberFormat.format(index+1),total:numberFormat.format(total)})}renderHighlightLayer(regionHighlights,interactive){return regionHighlights.length?html`<div part="highlight-layer">
41
41
  ${regionHighlights.map((h,index)=>html`
42
42
  ${interactive?html`<button
43
43
  part="region-highlight-target"
@@ -69,7 +69,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
69
69
  ${highlight.label||label}
70
70
  </button>
71
71
  `})}
72
- </div>`}async scrollToAnchor(target){const highlight=typeof target=="string"?this.highlights.find(h=>h.id===target):this.highlights.find(h=>h.anchor===target||sameRegionAnchor(h.anchor,target)),anchor=highlight?.anchor,ready=classifyFormat(this.mimeType)==="image"&&safeMediaSrc(this.src)!==null;if(!highlight||!anchor||anchor.kind!=="region"||!ready)return!1;await this.updateComplete;const region=[...this.renderRoot.querySelectorAll('[part~="region-highlight"][data-id]')].find(candidate=>candidate.getAttribute("data-id")===highlight.id);if(!region)return!1;const behavior=prefersReducedMotion(this.ownerDocument.defaultView)?"auto":"smooth";return region.scrollIntoView({behavior,block:"center",inline:"center"}),!0}renderDownloadFallback(){const label=this.filename||this.localize("documentPreviewGenericFile"),href=safeDownloadHref(this.src);return html`
72
+ </div>`}async scrollToAnchor(target){let region;if(typeof target=="string")region=this._regionHighlights.find(highlight=>highlight.id===target);else{const directHighlight=this.highlights.find(highlight=>highlight.anchor===target);if(directHighlight)region=this._regionHighlights.find(highlight=>highlight.id===directHighlight.id);else{const targetRegion=projectRegionAnchor(target);targetRegion&&(region=this._regionHighlights.find(highlight=>sameRegionAnchor(highlight.anchor,targetRegion)))}}const ready=classifyFormat(this.mimeType)==="image"&&safeMediaSrc(this.src)!==null;if(!region||!ready)return!1;await this.updateComplete;const regionElement=[...this.renderRoot.querySelectorAll('[part~="region-highlight"][data-id]')].find(candidate=>candidate.getAttribute("data-id")===region.id);if(!regionElement)return!1;const behavior=prefersReducedMotion(this.ownerDocument.defaultView)?"auto":"smooth";return regionElement.scrollIntoView({behavior,block:"center",inline:"center"}),!0}renderDownloadFallback(){const label=this.filename||this.localize("documentPreviewGenericFile"),href=safeDownloadHref(this.src);return html`
73
73
  <div class="fallback">
74
74
  <span class="fallback-icon" aria-hidden="true">${fileIcon()}</span>
75
75
  <p class="fallback-text">${this.localize("documentPreviewNotAvailable",void 0,{label})}</p>
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{--_lr-document-preview-max-height:none;--_lr-document-preview-font:var(--lr-font-mono);--_lr-document-preview-spin-duration:var(--lr-transition-ambient);display:block}[part=base]{box-sizing:border-box;border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;display:flex;overflow:hidden}[part=header]{align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-s) var(--lr-space-m);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);background:var(--lr-color-surface);display:flex}[part=header][hidden]{display:none}[part=filename]{text-overflow:ellipsis;white-space:nowrap;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-md-sm);color:var(--lr-color-text);overflow:hidden}[part=body]{min-block-size:var(--lr-size-10rem);max-block-size:var(--lr-document-preview-max-height,var(--_lr-document-preview-max-height));box-sizing:border-box;flex-direction:column;flex:auto;justify-content:center;align-items:center;display:flex;overflow:auto}pre.text{box-sizing:border-box;padding:var(--lr-space-m);font-family:var(--lr-document-preview-font,var(--_lr-document-preview-font));font-size:var(--lr-font-size-sm);line-height:var(--lr-line-height-loose);white-space:pre;color:var(--lr-color-text);align-self:stretch;margin:0;overflow:auto}[part=body] img{object-fit:contain;max-block-size:100%;max-inline-size:100%;display:block}.zoom-content{position:relative}[part=highlight-layer]{pointer-events:none;position:absolute;inset:0}[part=region-highlight]{--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-accent-color,var(--lr-color-brand));pointer-events:none;border:var(--lr-border-width-thick) solid var(--_lr-document-preview-highlight-color);border-radius:var(--lr-radius-xs);position:absolute}[part=region-highlight-target]{z-index:var(--lr-layer-content);box-sizing:border-box;pointer-events:auto;cursor:pointer;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);background:0 0;border:0;position:absolute;transform:translate(-50%,-50%)}[part=region-highlight]:where([data-tone=success]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-success-color,var(--lr-color-success))}[part=region-highlight]:where([data-tone=warning]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-warning-color,var(--lr-color-warning))}[part=region-highlight]:where([data-tone=danger]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-danger-color,var(--lr-color-danger))}[part=region-highlight]:where([data-tone=neutral]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-neutral-color,var(--lr-color-neutral))}[part=region-highlight]:where([data-active]){border-color:var(--lr-document-preview-active-border,var(--lr-color-warning,var(--lr-color-brand)))}[part=region-highlight-target]:hover+[part=region-highlight]{background:color-mix(in srgb, var(--_lr-document-preview-highlight-color) 20%, transparent)}[part=region-highlight-target]:active+[part=region-highlight]{background:color-mix(in oklab, color-mix(in srgb, var(--_lr-document-preview-highlight-color) 20%, transparent), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=region-highlight-target]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=highlight-actions]{gap:var(--lr-space-xs);box-sizing:border-box;inline-size:100%;padding:var(--lr-space-xs);display:grid}[part=region-highlight-action]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius-xs);color:var(--lr-color-text);background:var(--lr-color-surface);cursor:pointer}[part=region-highlight-action]:hover{background:var(--lr-color-surface-raised)}[part=region-highlight-action]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=region-highlight-action]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}.empty-note{padding:var(--lr-space-m);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);margin:0}.fallback{align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-l);text-align:center;flex-direction:column;display:flex}.fallback-icon{font-size:var(--lr-font-size-3xl);color:var(--lr-color-text-quiet);display:inline-flex}.fallback-icon svg{display:block}.fallback-text{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);margin:0}[part=download-link]{align-items:center;gap:var(--lr-space-xs);padding:var(--lr-space-xs) var(--lr-space-m);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font:inherit;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-sm);cursor:pointer;transition:background-color var(--lr-transition-fast);text-decoration:none;display:inline-flex}[part=download-link]:hover{background:color-mix(in srgb, var(--lr-color-brand) 85%, var(--lr-color-shadow))}[part=download-link]:active{background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-shadow) var(--lr-color-mix-active))}[part=download-link]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=download-link] svg{display:block}[part=spinner]{align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-l);flex-direction:column;display:flex}.ring{inline-size:var(--lr-size-2rem);block-size:var(--lr-size-2rem);border:var(--lr-border-width-thick) solid var(--lr-color-border);border-block-start-color:var(--lr-color-brand);animation:lr-document-preview-spin var(--lr-document-preview-spin-duration,var(--_lr-document-preview-spin-duration)) infinite;border-radius:50%;display:inline-block}.ring.determinate{background:conic-gradient(var(--lr-color-brand) calc(var(--lr-document-preview-progress,0) * 1%), var(--lr-color-border) 0);-webkit-mask:radial-gradient(farthest-side, transparent calc(100% - var(--lr-size-3px)), var(--lr-mask-opaque) calc(100% - var(--lr-size-3px)));mask:radial-gradient(farthest-side, transparent calc(100% - var(--lr-size-3px)), var(--lr-mask-opaque) calc(100% - var(--lr-size-3px)));border-color:#0000;animation:none}.spinner-text{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);font-variant-numeric:tabular-nums}@keyframes lr-document-preview-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.ring{animation:none!important}}[part=error]{padding:var(--lr-space-l);color:var(--lr-color-danger);font-size:var(--lr-font-size-md-sm);text-align:center;margin:0}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{--_lr-document-preview-max-height:none;--_lr-document-preview-font:var(--lr-font-mono);--_lr-document-preview-spin-duration:var(--lr-transition-ambient);--_lr-document-preview-download-link-hover-bg:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover));--_lr-document-preview-download-link-active-bg:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active));display:block}[part=base]{box-sizing:border-box;border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;display:flex;overflow:hidden}[part=header]{align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-s) var(--lr-space-m);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);background:var(--lr-color-surface);display:flex}[part=header][hidden]{display:none}[part=filename]{text-overflow:ellipsis;white-space:nowrap;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-md-sm);color:var(--lr-color-text);overflow:hidden}[part=body]{min-block-size:var(--lr-size-10rem);max-block-size:var(--lr-document-preview-max-height,var(--_lr-document-preview-max-height));box-sizing:border-box;flex-direction:column;flex:auto;justify-content:center;align-items:center;display:flex;overflow:auto}pre.text{box-sizing:border-box;padding:var(--lr-space-m);font-family:var(--lr-document-preview-font,var(--_lr-document-preview-font));font-size:var(--lr-font-size-sm);line-height:var(--lr-line-height-loose);white-space:pre;color:var(--lr-color-text);align-self:stretch;margin:0;overflow:auto}[part=body] img{object-fit:contain;max-block-size:100%;max-inline-size:100%;display:block}.zoom-content{position:relative}[part=highlight-layer]{pointer-events:none;position:absolute;inset:0}[part=region-highlight]{--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-accent-color,var(--lr-color-brand));pointer-events:none;border:var(--lr-border-width-thick) solid var(--_lr-document-preview-highlight-color);border-radius:var(--lr-radius-xs);position:absolute}[part=region-highlight-target]{z-index:var(--lr-layer-content);box-sizing:border-box;pointer-events:auto;cursor:pointer;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);background:0 0;border:0;position:absolute;transform:translate(-50%,-50%)}[part=region-highlight]:where([data-tone=success]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-success-color,var(--lr-color-success))}[part=region-highlight]:where([data-tone=warning]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-warning-color,var(--lr-color-warning))}[part=region-highlight]:where([data-tone=danger]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-danger-color,var(--lr-color-danger))}[part=region-highlight]:where([data-tone=neutral]){--_lr-document-preview-highlight-color:var(--lr-document-preview-highlight-neutral-color,var(--lr-color-neutral))}[part=region-highlight]:where([data-active]){border-color:var(--lr-document-preview-active-border,var(--lr-color-warning,var(--lr-color-brand)))}[part=region-highlight-target]:hover+[part=region-highlight]{background:color-mix(in srgb, var(--_lr-document-preview-highlight-color) 20%, transparent)}[part=region-highlight-target]:active+[part=region-highlight]{background:color-mix(in oklab, color-mix(in srgb, var(--_lr-document-preview-highlight-color) 20%, transparent), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=region-highlight-target]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=highlight-actions]{gap:var(--lr-space-xs);box-sizing:border-box;inline-size:100%;padding:var(--lr-space-xs);display:grid}[part=region-highlight-action]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius-xs);color:var(--lr-color-text);background:var(--lr-color-surface);cursor:pointer}[part=region-highlight-action]:hover{background:var(--lr-color-surface-raised)}[part=region-highlight-action]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=region-highlight-action]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}.empty-note{padding:var(--lr-space-m);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);margin:0}.fallback{align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-l);text-align:center;flex-direction:column;display:flex}.fallback-icon{font-size:var(--lr-font-size-3xl);color:var(--lr-color-text-quiet);display:inline-flex}.fallback-icon svg{display:block}.fallback-text{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);margin:0}[part=download-link]{align-items:center;gap:var(--lr-space-xs);padding:var(--lr-space-xs) var(--lr-space-m);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font:inherit;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-sm);cursor:pointer;transition:background-color var(--lr-transition-fast);text-decoration:none;display:inline-flex}[part=download-link]:hover{background:var(--lr-document-preview-download-link-hover-bg,var(--_lr-document-preview-download-link-hover-bg))}[part=download-link]:active{background:var(--lr-document-preview-download-link-active-bg,var(--_lr-document-preview-download-link-active-bg))}[part=download-link]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}[part=download-link] svg{display:block}[part=spinner]{align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-l);flex-direction:column;display:flex}.ring{inline-size:var(--lr-size-2rem);block-size:var(--lr-size-2rem);border:var(--lr-border-width-thick) solid var(--lr-color-border);border-block-start-color:var(--lr-color-brand);animation:lr-document-preview-spin var(--lr-document-preview-spin-duration,var(--_lr-document-preview-spin-duration)) infinite;border-radius:50%;display:inline-block}.ring.determinate{background:conic-gradient(var(--lr-color-brand) calc(var(--lr-document-preview-progress,0) * 1%), var(--lr-color-border) 0);-webkit-mask:radial-gradient(farthest-side, transparent calc(100% - var(--lr-size-3px)), var(--lr-mask-opaque) calc(100% - var(--lr-size-3px)));mask:radial-gradient(farthest-side, transparent calc(100% - var(--lr-size-3px)), var(--lr-mask-opaque) calc(100% - var(--lr-size-3px)));border-color:#0000;animation:none}.spinner-text{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);font-variant-numeric:tabular-nums}@keyframes lr-document-preview-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.ring{animation:none!important}}[part=error]{padding:var(--lr-space-l);color:var(--lr-color-danger);font-size:var(--lr-font-size-md-sm);text-align:center;margin:0}`;export{styles};
@@ -32,6 +32,8 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
32
32
  * the shared document-level polite/assertive sinks.
33
33
  * @csspart download-link - The native download action shown when `src` is safe.
34
34
  * @cssprop [--lr-document-viewer-max-height=70vh] - Maximum block size of the dialog body before it scrolls internally.
35
+ * @cssprop [--lr-document-viewer-download-link-hover-bg=color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))] - Hover background of the download link.
36
+ * @cssprop [--lr-document-viewer-download-link-active-bg=color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))] - Pressed background of the download link.
35
37
  * @status stable
36
38
  * @since 4.0.0
37
39
  */
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{--_lr-document-viewer-max-height:70vh;display:contents}[part=body]{min-block-size:var(--lr-size-12rem);max-block-size:var(--lr-document-viewer-max-height,var(--_lr-document-viewer-max-height));padding-inline:var(--lr-space-l);padding-block:var(--lr-space-l);flex-direction:column;min-inline-size:0;display:flex;overflow:auto}[part=body] img{block-size:auto;max-inline-size:100%}[part=download-link]{min-block-size:var(--lr-size-2rem);padding-inline:var(--lr-space-m);border:var(--lr-border-width-thin) solid var(--lr-color-brand);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font:inherit;font-weight:var(--lr-font-weight-semibold);justify-content:center;align-items:center;text-decoration:none;display:inline-flex}[part=download-link]:hover{background:color-mix(in srgb, var(--lr-color-brand) 85%, var(--lr-color-shadow))}[part=download-link]:active{background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-shadow) var(--lr-color-mix-active))}[part=download-link]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{--_lr-document-viewer-max-height:70vh;--_lr-document-viewer-download-link-hover-bg:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover));--_lr-document-viewer-download-link-active-bg:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active));display:contents}[part=body]{min-block-size:var(--lr-size-12rem);max-block-size:var(--lr-document-viewer-max-height,var(--_lr-document-viewer-max-height));padding-inline:var(--lr-space-l);padding-block:var(--lr-space-l);flex-direction:column;min-inline-size:0;display:flex;overflow:auto}[part=body] img{block-size:auto;max-inline-size:100%}[part=download-link]{min-block-size:var(--lr-size-2rem);padding-inline:var(--lr-space-m);border:var(--lr-border-width-thin) solid var(--lr-color-brand);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font:inherit;font-weight:var(--lr-font-weight-semibold);justify-content:center;align-items:center;text-decoration:none;display:inline-flex}[part=download-link]:hover{background:var(--lr-document-viewer-download-link-hover-bg,var(--_lr-document-viewer-download-link-hover-bg))}[part=download-link]:active{background:var(--lr-document-viewer-download-link-active-bg,var(--_lr-document-viewer-download-link-active-bg))}[part=download-link]:focus-visible{outline:var(--lr-focus-ring);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
@@ -1 +1 @@
1
- import{isHtmlSanitizer,resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";let depsPromise,resolvedDeps;function isMammothApi(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&"convertToHtml"in value&&typeof value.convertToHtml=="function"}async function loadMammothAndSanitizer(importMammoth=()=>import("mammoth/mammoth.browser.js"),importDompurify=()=>import("dompurify")){let mammoth;try{mammoth=resolveOptionalPeerCapability(await importMammoth(),isMammothApi)??void 0}catch(error){console.warn("<lr-docx-viewer> needs the optional peer dependency `mammoth` to convert DOCX documents \u2014 install it with `pnpm add mammoth`:",error)}let DOMPurify;try{DOMPurify=resolveOptionalPeerCapability(await importDompurify(),isHtmlSanitizer)??void 0}catch(error){console.warn("<lr-docx-viewer> needs the optional peer dependency `dompurify` to sanitize converted HTML \u2014 install it with `pnpm add dompurify`:",error)}return{mammoth,DOMPurify}}function loadDocxDeps(){return depsPromise||(depsPromise=loadMammothAndSanitizer().then(resolved=>(resolvedDeps=resolved,resolved))),depsPromise}function getDocxDepsIfLoaded(){return resolvedDeps}function clearDocxDepsCache(){depsPromise=void 0,resolvedDeps=void 0}export{clearDocxDepsCache,getDocxDepsIfLoaded,loadDocxDeps,loadMammothAndSanitizer};
1
+ import{isHtmlSanitizer,resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";let depsPromise,resolvedDeps;function isMammothApi(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&"convertToHtml"in value&&typeof value.convertToHtml=="function"}async function loadMammothAndSanitizer(importMammoth=()=>import("mammoth/mammoth.browser.js"),importDompurify=()=>import("dompurify")){let mammoth;try{mammoth=resolveOptionalPeerCapability(await importMammoth(),isMammothApi)??void 0}catch(error){console.warn("<lr-docx-viewer> needs the optional peer dependency `mammoth` to convert DOCX documents install it with `pnpm add mammoth`:",error)}let DOMPurify;try{DOMPurify=resolveOptionalPeerCapability(await importDompurify(),isHtmlSanitizer)??void 0}catch(error){console.warn("<lr-docx-viewer> needs the optional peer dependency `dompurify` to sanitize converted HTML install it with `pnpm add dompurify`:",error)}return{mammoth,DOMPurify}}function loadDocxDeps(){return depsPromise||(depsPromise=loadMammothAndSanitizer().then(resolved=>(resolvedDeps=resolved,resolved))),depsPromise}function getDocxDepsIfLoaded(){return resolvedDeps}function clearDocxDepsCache(){depsPromise=void 0,resolvedDeps=void 0}export{clearDocxDepsCache,getDocxDepsIfLoaded,loadDocxDeps,loadMammothAndSanitizer};