@aceshooting/lyra-ui 26.0.0 → 28.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 (1677) hide show
  1. package/CHANGELOG.md +55 -675
  2. package/README.md +285 -1130
  3. package/design-tokens.json +1 -1
  4. package/dist/ai/types.d.ts +5 -5
  5. package/dist/autoloader.js +1 -1
  6. package/dist/cli/agent-registry.mjs +1 -0
  7. package/dist/cli/component-inventory.mjs +1 -1
  8. package/dist/cli/css-declarations.mjs +1 -0
  9. package/dist/cli/init-agents.mjs +40 -0
  10. package/dist/cli/is-main-module.mjs +1 -0
  11. package/dist/cli/lyra-rename-ledger.mjs +1 -1
  12. package/dist/cli/lyra-ui.mjs +11 -0
  13. package/dist/cli/migrate-wa.mjs +12 -5
  14. package/dist/cli/migration-contract.json +1 -1
  15. package/dist/cli/migration-renames.mjs +2 -2
  16. package/dist/cli/migration-theme-scopes.mjs +3 -0
  17. package/dist/cli/theme-scope-vocabulary.generated.mjs +1 -0
  18. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -1
  19. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts +1 -1
  20. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +2 -2
  21. package/dist/components/agent-tools/agent-question/agent-question.class.js +1 -1
  22. package/dist/components/agent-tools/agent-run/agent-run.class.js +1 -1
  23. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +1 -1
  24. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  25. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.js +1 -1
  26. package/dist/components/agent-tools/background-runs/background-runs.class.js +1 -1
  27. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +1 -1
  28. package/dist/components/agent-tools/budget-meter/budget-meter.class.js +1 -1
  29. package/dist/components/agent-tools/change-review/change-review.class.js +1 -1
  30. package/dist/components/agent-tools/commit-card/commit-card.class.js +1 -1
  31. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +1 -1
  32. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts +2 -2
  33. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  34. package/dist/components/agent-tools/connector-manager/connector-manager.class.d.ts +4 -2
  35. package/dist/components/agent-tools/connector-manager/connector-manager.class.js +6 -3
  36. package/dist/components/agent-tools/connector-manager/connector-manager.d.ts +1 -1
  37. package/dist/components/agent-tools/connector-manager/connector-manager.js +1 -1
  38. package/dist/components/agent-tools/connector-manager/connector-manager.styles.js +1 -1
  39. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +2 -2
  40. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +6 -6
  41. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +8 -33
  42. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +27 -4
  43. package/dist/components/agent-tools/eval-dataset/eval-dataset.d.ts +1 -1
  44. package/dist/components/agent-tools/eval-dataset/eval-dataset.js +1 -1
  45. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +1 -1
  46. package/dist/components/agent-tools/eval-result/eval-result.class.js +1 -1
  47. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +1 -1
  48. package/dist/components/agent-tools/mcp-app/mcp-app.class.js +1 -1
  49. package/dist/components/agent-tools/permission-grant/permission-grant.class.d.ts +4 -2
  50. package/dist/components/agent-tools/permission-grant/permission-grant.class.js +6 -3
  51. package/dist/components/agent-tools/permission-grant/permission-grant.d.ts +1 -1
  52. package/dist/components/agent-tools/permission-grant/permission-grant.js +1 -1
  53. package/dist/components/agent-tools/permission-grant/permission-grant.styles.js +1 -1
  54. package/dist/components/agent-tools/permission-rules/permission-rules.class.js +1 -1
  55. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +1 -1
  56. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  57. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +2 -2
  58. package/dist/components/agent-tools/result-card/result-field.class.js +1 -1
  59. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +3 -1
  60. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +1 -1
  61. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +1 -1
  62. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
  63. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +2 -2
  64. package/dist/components/agent-tools/task-list/task-list.class.d.ts +2 -2
  65. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  66. package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -1
  67. package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
  68. package/dist/components/agent-tools/test-results/test-results.class.js +1 -1
  69. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +1 -1
  70. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts +15 -9
  71. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  72. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.d.ts +2 -2
  73. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.js +1 -1
  74. package/dist/components/agent-tools/tool-call-block/tool-call-block.styles.js +1 -1
  75. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -7
  76. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  77. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +1 -1
  78. package/dist/components/agent-tools/tool-param-form/tool-param-constraints.js +1 -1
  79. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +3 -5
  80. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
  81. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts +2 -5
  82. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +1 -1
  83. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  84. package/dist/components/agent-tools/tool-result-view/registry.d.ts +4 -12
  85. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +2 -2
  86. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  87. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +1 -1
  88. package/dist/components/agent-tools/tool-status.d.ts +7 -0
  89. package/dist/components/agent-tools/tool-status.styles.js +1 -0
  90. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  91. package/dist/components/agent-tools/tool-timeline/tool-timeline.d.ts +1 -1
  92. package/dist/components/agent-tools/tool-timeline/tool-timeline.js +1 -1
  93. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +2 -2
  94. package/dist/components/charts/chart/box-plot.class.d.ts +1 -1
  95. package/dist/components/charts/chart/box-plot.class.js +1 -1
  96. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  97. package/dist/components/charts/chart/chart-surface-shared.js +1 -0
  98. package/dist/components/charts/chart/chart-surface.styles.js +1 -1
  99. package/dist/components/charts/chart/chart-table-sampling.js +1 -1
  100. package/dist/components/charts/chart/chart-token-cache.js +2 -2
  101. package/dist/components/charts/chart/chart.class.d.ts +3 -3
  102. package/dist/components/charts/chart/chart.class.js +3 -3
  103. package/dist/components/charts/chart/chart.styles.js +1 -1
  104. package/dist/components/charts/chart/histogram.class.js +1 -1
  105. package/dist/components/charts/chart/lite-chart.class.d.ts +1 -1
  106. package/dist/components/charts/chart/lite-chart.class.js +4 -4
  107. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +1 -1
  108. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  109. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  110. package/dist/components/conversation/catalog-picker-element.d.ts +28 -13
  111. package/dist/components/conversation/catalog-picker-element.js +1 -1
  112. package/dist/components/conversation/catalog-picker-trigger.styles.js +1 -0
  113. package/dist/components/conversation/chat-composer/chat-composer.class.js +1 -1
  114. package/dist/components/conversation/chat-message/chat-message.class.js +1 -1
  115. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  116. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +1 -1
  117. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  118. package/dist/components/conversation/checkpoint/checkpoint.class.js +1 -1
  119. package/dist/components/conversation/code-block/code-block-base.class.js +1 -1
  120. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  121. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  122. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  123. package/dist/components/conversation/conversation-item/conversation-item.class.js +1 -1
  124. package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
  125. package/dist/components/conversation/handoff-divider/handoff-divider.class.js +1 -1
  126. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  127. package/dist/components/conversation/markdown/markdown-code-header.js +1 -1
  128. package/dist/components/conversation/markdown/markdown-core.class.js +1 -1
  129. package/dist/components/conversation/markdown/markdown.class.js +1 -1
  130. package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
  131. package/dist/components/conversation/message-feedback/message-feedback.class.js +1 -1
  132. package/dist/components/conversation/message-parts/message-parts.class.js +1 -1
  133. package/dist/components/conversation/model-select/model-select.class.d.ts +7 -34
  134. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  135. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  136. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +1 -1
  137. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +7 -2
  138. package/dist/components/conversation/prompt-input/prompt-input.class.js +5 -2
  139. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  140. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  141. package/dist/components/conversation/realtime-session/realtime-session.class.js +1 -1
  142. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  143. package/dist/components/conversation/stream-status/stream-status.class.js +1 -1
  144. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.js +1 -1
  145. package/dist/components/conversation/thread-list/thread-list.class.js +1 -1
  146. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  147. package/dist/components/conversation/typing-indicator/typing-indicator.class.js +1 -1
  148. package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
  149. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +10 -27
  150. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  151. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  152. package/dist/components/data/calendar/calendar.class.js +1 -1
  153. package/dist/components/data/condition-builder/condition-builder.class.js +1 -1
  154. package/dist/components/data/context-meter/context-meter.class.js +1 -1
  155. package/dist/components/data/data-grid/data-grid.class.d.ts +2 -2
  156. package/dist/components/data/data-grid/data-grid.class.js +3 -3
  157. package/dist/components/data/document-library/document-library.class.d.ts +2 -2
  158. package/dist/components/data/document-library/document-library.class.js +2 -2
  159. package/dist/components/data/env-list/env-list.class.js +1 -1
  160. package/dist/components/data/file-tree/file-tree.class.d.ts +2 -2
  161. package/dist/components/data/file-tree/file-tree.class.js +1 -1
  162. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -1
  163. package/dist/components/data/flow-controls/flow-controls.class.js +1 -1
  164. package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
  165. package/dist/components/data/flow-node/flow-node.class.js +1 -1
  166. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  167. package/dist/components/data/funnel/funnel.class.js +1 -1
  168. package/dist/components/data/gauge/gauge.class.js +1 -1
  169. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +3 -3
  170. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
  171. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  172. package/dist/components/data/pagination/pagination.class.d.ts +2 -0
  173. package/dist/components/data/pagination/pagination.class.js +1 -1
  174. package/dist/components/data/pagination/pagination.styles.js +1 -1
  175. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +1 -1
  176. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  177. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  178. package/dist/components/data/stat/stat.class.js +1 -1
  179. package/dist/components/data/table/table.class.d.ts +33 -197
  180. package/dist/components/data/table/table.class.js +6 -4
  181. package/dist/components/data/table/table.styles.js +1 -1
  182. package/dist/components/data/timeline/timeline.class.js +1 -1
  183. package/dist/components/data/tree/tree.class.js +1 -1
  184. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  185. package/dist/components/forms/button/button.class.d.ts +3 -3
  186. package/dist/components/forms/button/button.class.js +1 -1
  187. package/dist/components/forms/catalog-picker-base.js +1 -1
  188. package/dist/components/forms/checkbox/checkbox.class.d.ts +13 -34
  189. package/dist/components/forms/checkbox/checkbox.class.js +3 -3
  190. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +3 -3
  191. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  192. package/dist/components/forms/code-editor/code-editor.class.js +1 -1
  193. package/dist/components/forms/color-picker/color-picker.class.d.ts +8 -4
  194. package/dist/components/forms/color-picker/color-picker.class.js +2 -2
  195. package/dist/components/forms/combobox/combobox.class.d.ts +6 -6
  196. package/dist/components/forms/combobox/combobox.class.js +3 -2
  197. package/dist/components/forms/combobox/option.class.d.ts +3 -0
  198. package/dist/components/forms/combobox/option.class.js +2 -2
  199. package/dist/components/forms/country-picker/country-picker.class.js +1 -1
  200. package/dist/components/forms/currency-picker/currency-picker.class.js +1 -1
  201. package/dist/components/forms/date-picker/date-input.class.d.ts +10 -11
  202. package/dist/components/forms/date-picker/date-input.class.js +4 -3
  203. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  204. package/dist/components/forms/date-picker/date-picker.class.d.ts +6 -0
  205. package/dist/components/forms/date-picker/date-picker.class.js +1 -1
  206. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  207. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  208. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +7 -4
  209. package/dist/components/forms/emoji-picker/emoji-picker.class.js +5 -5
  210. package/dist/components/forms/icon-button/icon-button.class.d.ts +4 -0
  211. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  212. package/dist/components/forms/icon-button/icon-button.styles.js +1 -1
  213. package/dist/components/forms/input/input-shared.js +1 -1
  214. package/dist/components/forms/input/input.class.js +1 -1
  215. package/dist/components/forms/input/input.styles.js +1 -1
  216. package/dist/components/forms/input/native-time-input.class.js +1 -1
  217. package/dist/components/forms/input/number-input.class.js +1 -1
  218. package/dist/components/forms/input/time-input.class.d.ts +1 -1
  219. package/dist/components/forms/input/time-input.class.js +1 -1
  220. package/dist/components/forms/input/time-input.styles.js +1 -1
  221. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +5 -5
  222. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  223. package/dist/components/forms/otp-input/otp-input.class.js +2 -1
  224. package/dist/components/forms/phone-input/phone-input.class.d.ts +7 -9
  225. package/dist/components/forms/phone-input/phone-input.class.js +6 -5
  226. package/dist/components/forms/phone-input/phone-input.styles.js +1 -1
  227. package/dist/components/forms/radio/radio-group.class.d.ts +4 -4
  228. package/dist/components/forms/radio/radio-group.class.js +1 -1
  229. package/dist/components/forms/radio/radio.class.d.ts +11 -19
  230. package/dist/components/forms/radio/radio.class.js +2 -2
  231. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +3 -5
  232. package/dist/components/forms/rubric-form/rubric-form.class.js +4 -4
  233. package/dist/components/forms/select/select.class.d.ts +5 -7
  234. package/dist/components/forms/select/select.class.js +3 -2
  235. package/dist/components/forms/signature-pad/signature-pad.class.js +1 -1
  236. package/dist/components/forms/slider/slider.class.d.ts +3 -3
  237. package/dist/components/forms/slider/slider.class.js +1 -1
  238. package/dist/components/forms/slider/slider.styles.js +1 -1
  239. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  240. package/dist/components/forms/switch/switch.class.d.ts +11 -36
  241. package/dist/components/forms/switch/switch.class.js +2 -2
  242. package/dist/components/forms/textarea/textarea.class.js +2 -1
  243. package/dist/components/forms/textarea/textarea.styles.js +1 -1
  244. package/dist/components/forms/time-range/time-range.class.d.ts +5 -3
  245. package/dist/components/forms/time-range/time-range.class.js +1 -1
  246. package/dist/components/forms/time-range/time-range.styles.js +1 -1
  247. package/dist/components/forms/time-zone-picker/time-zone-picker.class.js +1 -1
  248. package/dist/components/forms/toggle-group/toggle-group.class.d.ts +2 -2
  249. package/dist/components/forms/toggle-group/toggle-group.class.js +1 -1
  250. package/dist/components/forms/token-input/token-input.class.d.ts +3 -3
  251. package/dist/components/forms/token-input/token-input.class.js +1 -1
  252. package/dist/components/forms/unit-picker/unit-picker.class.js +1 -1
  253. package/dist/components/layout/app-rail/app-rail-item.class.js +1 -1
  254. package/dist/components/layout/app-rail/app-rail.class.d.ts +71 -8
  255. package/dist/components/layout/app-rail/app-rail.class.js +16 -4
  256. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  257. package/dist/components/layout/app-rail-group/app-rail-group.class.js +1 -1
  258. package/dist/components/layout/breadcrumb/breadcrumb-item.class.js +1 -1
  259. package/dist/components/layout/breadcrumb/breadcrumb.class.js +1 -1
  260. package/dist/components/layout/card/card.class.js +1 -1
  261. package/dist/components/layout/carousel/carousel.class.js +1 -1
  262. package/dist/components/layout/command-palette/command-palette.class.d.ts +6 -2
  263. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  264. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  265. package/dist/components/layout/details/accordion-item.class.js +1 -1
  266. package/dist/components/layout/details/accordion.class.js +1 -1
  267. package/dist/components/layout/details/details.class.js +1 -1
  268. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +1 -1
  269. package/dist/components/layout/dock-panel/dock-panel.class.js +1 -1
  270. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
  271. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -2
  272. package/dist/components/layout/filter-bar/filter-bar.class.js +18 -15
  273. package/dist/components/layout/filter-bar/filter-bar.styles.js +1 -1
  274. package/dist/components/layout/menu/menu.class.d.ts +1 -1
  275. package/dist/components/layout/menu/menu.class.js +1 -1
  276. package/dist/components/layout/menubar/menubar.class.js +1 -1
  277. package/dist/components/layout/multi-split/multi-split.class.d.ts +1 -1
  278. package/dist/components/layout/multi-split/multi-split.class.js +1 -1
  279. package/dist/components/layout/navigation-menu/navigation-menu.class.js +1 -1
  280. package/dist/components/layout/navigation-menu-item/navigation-menu-item.class.js +1 -1
  281. package/dist/components/layout/page/page.class.d.ts +1 -1
  282. package/dist/components/layout/page/page.class.js +1 -1
  283. package/dist/components/layout/reorder-list/reorder-item.class.js +1 -1
  284. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  285. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts +1 -1
  286. package/dist/components/layout/responsive-panel/responsive-panel.class.js +1 -1
  287. package/dist/components/layout/scroller/scroller.class.js +1 -1
  288. package/dist/components/layout/segmented/segmented.class.d.ts +7 -4
  289. package/dist/components/layout/segmented/segmented.class.js +1 -1
  290. package/dist/components/layout/segmented/segmented.styles.js +1 -1
  291. package/dist/components/layout/split-panel/split-panel.class.js +1 -1
  292. package/dist/components/layout/stepper/stepper.class.js +2 -2
  293. package/dist/components/layout/tab-group/tab-group.class.js +1 -1
  294. package/dist/components/layout/tab-group/tab.class.js +1 -1
  295. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +1 -1
  296. package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
  297. package/dist/components/layout/virtual-list/virtual-list.styles.js +1 -1
  298. package/dist/components/layout/widget/widget.class.d.ts +1 -1
  299. package/dist/components/layout/widget/widget.class.js +3 -3
  300. package/dist/components/media/animated-image/animated-image.class.js +1 -1
  301. package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
  302. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +2 -2
  303. package/dist/components/media/av-player/av-player.class.js +1 -1
  304. package/dist/components/media/avatar-group/avatar-group.class.js +1 -1
  305. package/dist/components/media/drop-zone/drop-zone.class.d.ts +10 -0
  306. package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
  307. package/dist/components/media/file-icon/file-icon.class.js +1 -1
  308. package/dist/components/media/file-input/file-input.class.d.ts +3 -3
  309. package/dist/components/media/file-input/file-input.class.js +2 -2
  310. package/dist/components/media/file-input/file-intake.d.ts +5 -1
  311. package/dist/components/media/file-input/file-intake.js +1 -1
  312. package/dist/components/media/flag/flag.class.js +1 -1
  313. package/dist/components/media/image-comparer/image-comparer.class.js +1 -1
  314. package/dist/components/media/image-viewer/image-viewer.class.d.ts +2 -1
  315. package/dist/components/media/image-viewer/image-viewer.class.js +4 -2
  316. package/dist/components/media/image-viewer/image-viewer.styles.js +1 -1
  317. package/dist/components/media/lightbox/lightbox.class.js +1 -1
  318. package/dist/components/media/map/map.class.js +2 -2
  319. package/dist/components/media/media-card/media-card.class.js +1 -1
  320. package/dist/components/media/pan-zoom/pan-zoom.class.js +1 -1
  321. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  322. package/dist/components/media/qr-code/qr-code.class.d.ts +2 -2
  323. package/dist/components/media/qr-code/qr-code.class.js +1 -1
  324. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  325. package/dist/components/media/video/video.class.js +3 -3
  326. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  327. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +2 -2
  328. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +1 -1
  329. package/dist/components/overlays/alert/alert.class.d.ts +3 -3
  330. package/dist/components/overlays/alert/alert.class.js +1 -1
  331. package/dist/components/overlays/badge/badge.class.d.ts +2 -2
  332. package/dist/components/overlays/badge/badge.class.js +1 -1
  333. package/dist/components/overlays/badge/tag.class.d.ts +3 -1
  334. package/dist/components/overlays/badge/tag.class.js +3 -2
  335. package/dist/components/overlays/badge/tag.styles.js +1 -1
  336. package/dist/components/overlays/callout/callout.class.d.ts +2 -2
  337. package/dist/components/overlays/callout/callout.class.js +1 -1
  338. package/dist/components/overlays/chip/chip-group.class.js +1 -1
  339. package/dist/components/overlays/chip/chip.class.d.ts +4 -2
  340. package/dist/components/overlays/chip/chip.class.js +2 -2
  341. package/dist/components/overlays/context-menu/context-menu.class.js +1 -1
  342. package/dist/components/overlays/dialog/confirm.js +1 -1
  343. package/dist/components/overlays/dialog/dialog.class.d.ts +1 -1
  344. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  345. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  346. package/dist/components/overlays/overlay/overlay-shared.d.ts +9 -0
  347. package/dist/components/overlays/overlay/overlay-shared.js +1 -1
  348. package/dist/components/overlays/overlay/popover.class.d.ts +2 -2
  349. package/dist/components/overlays/overlay/popover.class.js +1 -1
  350. package/dist/components/overlays/overlay/tooltip.class.d.ts +1 -1
  351. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  352. package/dist/components/overlays/progress/progress-bar.class.d.ts +5 -22
  353. package/dist/components/overlays/progress/progress-bar.class.js +4 -4
  354. package/dist/components/overlays/progress/progress-base.d.ts +25 -0
  355. package/dist/components/overlays/progress/progress-base.js +1 -0
  356. package/dist/components/overlays/progress/progress-ring.class.d.ts +3 -24
  357. package/dist/components/overlays/progress/progress-ring.class.js +4 -4
  358. package/dist/components/overlays/rating/rating.class.d.ts +3 -3
  359. package/dist/components/overlays/rating/rating.class.js +1 -1
  360. package/dist/components/overlays/skeleton/skeleton.class.js +1 -1
  361. package/dist/components/overlays/spinner/spinner.class.js +1 -1
  362. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  363. package/dist/components/overlays/toast/toast.class.js +1 -1
  364. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts +4 -2
  365. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js +4 -4
  366. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  367. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +1 -1
  368. package/dist/components/retrieval/community-card/community-card.class.js +1 -1
  369. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +1 -1
  370. package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
  371. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  372. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +1 -1
  373. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +1 -1
  374. package/dist/components/retrieval/graph/graph-canvas.js +1 -1
  375. package/dist/components/retrieval/graph/graph-model.js +1 -1
  376. package/dist/components/retrieval/graph/graph.class.d.ts +1 -3
  377. package/dist/components/retrieval/graph/graph.class.js +1 -1
  378. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  379. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +1 -1
  380. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +2 -2
  381. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +1 -1
  382. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +1 -1
  383. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +2 -2
  384. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +1 -1
  385. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +1 -0
  386. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  387. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -2
  388. package/dist/components/retrieval/memory-panel/memory-panel.class.js +2 -2
  389. package/dist/components/retrieval/memory-panel/memory-panel.styles.js +1 -1
  390. package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
  391. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  392. package/dist/components/retrieval/node-palette/node-palette.class.js +1 -1
  393. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  394. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +1 -1
  395. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +1 -1
  396. package/dist/components/retrieval/rag-answer/rag-answer.class.js +1 -1
  397. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +1 -1
  398. package/dist/components/retrieval/research-progress/research-progress.class.d.ts +5 -1
  399. package/dist/components/retrieval/research-progress/research-progress.class.js +3 -3
  400. package/dist/components/retrieval/research-progress/research-progress.d.ts +1 -1
  401. package/dist/components/retrieval/research-progress/research-progress.js +1 -1
  402. package/dist/components/retrieval/research-progress/research-progress.styles.js +1 -1
  403. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +6 -2
  404. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +2 -2
  405. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  406. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +2 -2
  407. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +3 -2
  408. package/dist/components/retrieval/retrieval-search/retrieval-search.class.js +3 -3
  409. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts +6 -2
  410. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +2 -2
  411. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +1 -1
  412. package/dist/components/retrieval/source-card/source-card.class.js +1 -1
  413. package/dist/components/retrieval/source-list/source-list.class.js +1 -1
  414. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  415. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  416. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  417. package/dist/components/utility/export-button/export-button.class.d.ts +1 -1
  418. package/dist/components/utility/export-button/export-button.class.js +1 -1
  419. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  420. package/dist/components/utility/icon/icon.class.js +1 -1
  421. package/dist/components/utility/json-viewer/json-viewer.class.js +2 -2
  422. package/dist/components/utility/known-date/known-date.class.js +1 -1
  423. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  424. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  425. package/dist/components/utility/poll-status/poll-status.class.js +1 -1
  426. package/dist/components/utility/random-content/random-content.class.d.ts +1 -1
  427. package/dist/components/utility/random-content/random-content.class.js +1 -1
  428. package/dist/components/utility/tour/tour.class.d.ts +1 -1
  429. package/dist/components/utility/tour/tour.class.js +1 -1
  430. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  431. package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +1 -1
  432. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +3 -1
  433. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +1 -1
  434. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts +3 -1
  435. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +2 -2
  436. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +2 -2
  437. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +4 -18
  438. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +1 -1
  439. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +2 -2
  440. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +4 -18
  441. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +1 -1
  442. package/dist/components/viewers/document-compare/document-compare.class.js +1 -1
  443. package/dist/components/viewers/document-preview/document-preview.class.d.ts +1 -1
  444. package/dist/components/viewers/document-preview/document-preview.class.js +3 -16
  445. package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -1
  446. package/dist/components/viewers/document-viewer/ooxml-part-guard.js +1 -0
  447. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  448. package/dist/components/viewers/docx-viewer/docx-resource-guard.js +1 -1
  449. package/dist/components/viewers/docx-viewer/docx-viewer.class.d.ts +3 -3
  450. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +3 -3
  451. package/dist/components/viewers/ebook-viewer/ebook-loader.js +1 -1
  452. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +1 -1
  453. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +2 -1
  454. package/dist/components/viewers/ebook-viewer/epub-resource-guard.js +1 -1
  455. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  456. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  457. package/dist/components/viewers/geojson-view/geojson-view.class.js +1 -1
  458. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +1 -4
  459. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +1 -1
  460. package/dist/components/viewers/highlight-layer/highlight-layer.class.js +1 -1
  461. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +3 -1
  462. package/dist/components/viewers/html-viewer/html-viewer.class.js +1 -1
  463. package/dist/components/viewers/html-viewer/html-viewer.styles.js +1 -1
  464. package/dist/components/viewers/include/include.class.js +1 -1
  465. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  466. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +2 -2
  467. package/dist/components/viewers/page-rail/page-rail.class.d.ts +1 -1
  468. package/dist/components/viewers/page-rail/page-rail.class.js +3 -3
  469. package/dist/components/viewers/passive-markup.js +1 -1
  470. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  471. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +3 -3
  472. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
  473. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  474. package/dist/components/viewers/pptx-viewer/pptx-resource-guard.js +1 -1
  475. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +1 -1
  476. package/dist/components/viewers/region-highlight-layer.js +15 -2
  477. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +2 -2
  478. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +4 -18
  479. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +1 -1
  480. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +1 -1
  481. package/dist/components/viewers/svg-viewer/svg-viewer.class.js +2 -15
  482. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +1 -1
  483. package/dist/components/viewers/table-viewer-shared.js +15 -1
  484. package/dist/components/viewers/table-viewer-shared.styles.js +1 -0
  485. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
  486. package/dist/events.d.ts +25 -19
  487. package/dist/framework-types.d.ts +1 -1
  488. package/dist/internal/accessibility-visibility.d.ts +3 -1
  489. package/dist/internal/accessibility-visibility.js +1 -1
  490. package/dist/internal/accessible-text-controller.js +1 -1
  491. package/dist/internal/active-element.d.ts +11 -0
  492. package/dist/internal/active-element.js +1 -1
  493. package/dist/internal/adjacent-runs.js +1 -1
  494. package/dist/internal/approval-wait-until.d.ts +7 -0
  495. package/dist/internal/approval-wait-until.js +1 -0
  496. package/dist/internal/aria-controls.js +1 -1
  497. package/dist/internal/catalog-picker.d.ts +2 -2
  498. package/dist/internal/catalog-picker.js +1 -1
  499. package/dist/internal/collection-snapshot.js +1 -1
  500. package/dist/internal/composed-tree.d.ts +18 -0
  501. package/dist/internal/composed-tree.js +1 -1
  502. package/dist/internal/copy-feedback.js +1 -0
  503. package/dist/internal/css-length.js +1 -1
  504. package/dist/internal/css-motion-time.js +1 -1
  505. package/dist/internal/css-number.js +1 -0
  506. package/dist/internal/default-strings/agent-tools.generated.js +1 -0
  507. package/dist/internal/default-strings/charts.generated.js +1 -0
  508. package/dist/internal/default-strings/conversation.generated.js +1 -0
  509. package/dist/internal/default-strings/data.generated.js +1 -0
  510. package/dist/internal/default-strings/forms.generated.js +1 -0
  511. package/dist/internal/default-strings/layout.generated.js +1 -0
  512. package/dist/internal/default-strings/media.generated.js +1 -0
  513. package/dist/internal/default-strings/overlays.generated.js +1 -0
  514. package/dist/internal/default-strings/retrieval.generated.js +1 -0
  515. package/dist/internal/default-strings/shared.generated.js +1 -0
  516. package/dist/internal/default-strings/utility.generated.js +1 -0
  517. package/dist/internal/default-strings/viewers.generated.js +5 -0
  518. package/dist/internal/deferred-focus-return.d.ts +33 -0
  519. package/dist/internal/deferred-focus-return.js +1 -1
  520. package/dist/internal/dev-mode-attribute-warning.development.js +1 -1
  521. package/dist/internal/dev-mode-attribute-warning.production.js +1 -1
  522. package/dist/internal/document-tokens.d.ts +11 -0
  523. package/dist/internal/document-tokens.generated.js +15 -0
  524. package/dist/internal/document-tokens.js +3 -0
  525. package/dist/internal/fixed-containing-block.js +1 -1
  526. package/dist/internal/form-associated.d.ts +39 -3
  527. package/dist/internal/form-associated.js +1 -1
  528. package/dist/internal/form-control-element.d.ts +13 -0
  529. package/dist/internal/form-control-element.js +1 -0
  530. package/dist/internal/form-control.styles.js +1 -1
  531. package/dist/internal/glass-surface.styles.js +1 -1
  532. package/dist/internal/host-tokens.styles.js +1 -0
  533. package/dist/internal/image-zoom.js +1 -0
  534. package/dist/internal/inherited-attribute-hub.js +1 -1
  535. package/dist/internal/intl-cache.js +1 -1
  536. package/dist/internal/locale-loaders.generated.js +1 -1
  537. package/dist/internal/localization-types.d.ts +1 -1
  538. package/dist/internal/localization.js +2 -2
  539. package/dist/internal/lyra-element.d.ts +4 -2
  540. package/dist/internal/lyra-element.js +2 -2
  541. package/dist/internal/modal-surface-controller.js +1 -1
  542. package/dist/internal/object-guards.js +1 -1
  543. package/dist/internal/opaque-content-border.styles.js +1 -1
  544. package/dist/internal/open-overlay-raise.styles.js +1 -0
  545. package/dist/internal/optional-peer-capabilities.d.ts +3 -1
  546. package/dist/internal/optional-peer-capabilities.js +1 -1
  547. package/dist/internal/optional-peer-failure.js +1 -0
  548. package/dist/internal/orientation-breakpoint.js +1 -1
  549. package/dist/internal/overlay-manager.d.ts +6 -1
  550. package/dist/internal/overlay-manager.js +1 -1
  551. package/dist/internal/overlay-stack.d.ts +7 -3
  552. package/dist/internal/overlay-stack.js +1 -1
  553. package/dist/internal/package-metadata.js +1 -1
  554. package/dist/internal/persisted-restore.js +1 -1
  555. package/dist/internal/popup-controller.js +1 -0
  556. package/dist/internal/prefix.js +1 -1
  557. package/dist/internal/rendered-tree-traversal.d.ts +3 -1
  558. package/dist/internal/rendered-tree-traversal.js +1 -1
  559. package/dist/internal/retry-forwarder.js +1 -0
  560. package/dist/internal/roving-toolbar.js +1 -1
  561. package/dist/internal/scoped-definitions.generated.js +1 -1
  562. package/dist/internal/score-tiers.d.ts +4 -0
  563. package/dist/internal/score-tiers.js +1 -0
  564. package/dist/internal/semantic-variant.d.ts +7 -0
  565. package/dist/internal/semantic-variant.js +1 -0
  566. package/dist/internal/shared-unions.d.ts +1 -1
  567. package/dist/internal/specialist-host-tokens.styles.js +1 -0
  568. package/dist/internal/specialist-tokens.generated.js +2 -0
  569. package/dist/internal/step-value.js +1 -1
  570. package/dist/internal/theme-observation.js +1 -1
  571. package/dist/internal/theme-scopes.d.ts +11 -0
  572. package/dist/internal/theme-scopes.js +1 -0
  573. package/dist/internal/viewer-search.js +1 -1
  574. package/dist/looks/shadcn.css +1 -1
  575. package/dist/lyra.d.ts +1 -1
  576. package/dist/lyra.js +1 -1
  577. package/dist/styles/design-tokens.css +1 -1
  578. package/dist/styles/tokens-root.css +1 -1
  579. package/dist/surfaces/glass.css +1 -1
  580. package/dist/testing/happy-dom-shims.d.ts +37 -0
  581. package/dist/testing/happy-dom-shims.js +1 -1
  582. package/dist/testing/index.d.ts +1 -1
  583. package/dist/testing/index.js +1 -1
  584. package/dist/testing/interaction-drivers.d.ts +66 -7
  585. package/dist/testing/interaction-drivers.js +1 -1
  586. package/dist/testing/jsdom-shims.d.ts +70 -0
  587. package/dist/testing/jsdom-shims.js +1 -0
  588. package/dist/theme/look-inputs.d.ts +1 -1
  589. package/dist/theme/look-inputs.js +37 -41
  590. package/dist/theme/theme.d.ts +13 -0
  591. package/dist/theme/theme.js +1 -1
  592. package/dist/theme.css +1 -1
  593. package/dist/utilities/index.d.ts +1 -1
  594. package/dist/utilities/index.js +1 -1
  595. package/dist/utilities/scoped-registry.d.ts +3 -0
  596. package/dist/utilities/scoped-registry.js +1 -1
  597. package/dist/utilities/theme-scopes.d.ts +1 -0
  598. package/dist/utilities/theme-scopes.js +1 -0
  599. package/dist/utilities/tokens.d.ts +1 -0
  600. package/dist/utilities/tokens.js +1 -0
  601. package/llms/components/lr-accordion-item.md +1 -1
  602. package/llms/components/lr-accordion.md +1 -1
  603. package/llms/components/lr-alert.md +2 -2
  604. package/llms/components/lr-app-rail-group.md +1 -1
  605. package/llms/components/lr-app-rail-item.md +1 -1
  606. package/llms/components/lr-app-rail.md +52 -5
  607. package/llms/components/lr-attachment-chip.md +1 -10
  608. package/llms/components/lr-attachment-trigger.md +0 -10
  609. package/llms/components/lr-avatar.md +4 -8
  610. package/llms/components/lr-badge.md +16 -20
  611. package/llms/components/lr-box-plot.md +1 -1
  612. package/llms/components/lr-breadcrumb-item.md +1 -1
  613. package/llms/components/lr-breadcrumb.md +1 -1
  614. package/llms/components/lr-button-group.md +1 -1
  615. package/llms/components/lr-button.md +1 -1
  616. package/llms/components/lr-calendar.md +1 -1
  617. package/llms/components/lr-callout.md +3 -13
  618. package/llms/components/lr-card.md +1 -1
  619. package/llms/components/lr-carousel-item.md +1 -1
  620. package/llms/components/lr-carousel.md +1 -1
  621. package/llms/components/lr-chart.md +5 -7
  622. package/llms/components/lr-checkbox-group.md +1 -1
  623. package/llms/components/lr-checkbox.md +2 -1
  624. package/llms/components/lr-chip.md +3 -17
  625. package/llms/components/lr-chunk-inspector.md +2 -1
  626. package/llms/components/lr-citation-badge.md +2 -2
  627. package/llms/components/lr-code-block.md +0 -10
  628. package/llms/components/lr-code-editor.md +1 -1
  629. package/llms/components/lr-color-picker.md +1 -1
  630. package/llms/components/lr-combobox.md +6 -3
  631. package/llms/components/lr-command-palette.md +5 -2
  632. package/llms/components/lr-commit-card.md +1 -3
  633. package/llms/components/lr-condition-builder.md +1 -1
  634. package/llms/components/lr-confirm-bar.md +7 -13
  635. package/llms/components/lr-connector-manager.md +3 -1
  636. package/llms/components/lr-context-inspector.md +1 -1
  637. package/llms/components/lr-context-meter.md +1 -1
  638. package/llms/components/lr-control-group.md +1 -1
  639. package/llms/components/lr-copy-button.md +8 -10
  640. package/llms/components/lr-country-picker.md +1 -1
  641. package/llms/components/lr-currency-picker.md +1 -1
  642. package/llms/components/lr-dashboard-grid.md +1 -1
  643. package/llms/components/lr-data-grid.md +1 -1
  644. package/llms/components/lr-date-input.md +1 -1
  645. package/llms/components/lr-date-picker.md +11 -4
  646. package/llms/components/lr-details.md +1 -1
  647. package/llms/components/lr-dialog.md +8 -31
  648. package/llms/components/lr-diff-view.md +1 -1
  649. package/llms/components/lr-divider.md +1 -1
  650. package/llms/components/lr-dock-panel.md +1 -1
  651. package/llms/components/lr-document-library.md +1 -1
  652. package/llms/components/lr-drawer.md +1 -13
  653. package/llms/components/lr-drilldown-panel.md +1 -1
  654. package/llms/components/lr-drop-zone.md +4 -0
  655. package/llms/components/lr-dropdown-item.md +1 -1
  656. package/llms/components/lr-ebook-viewer.md +4 -3
  657. package/llms/components/lr-emoji-picker.md +14 -9
  658. package/llms/components/lr-entity-chip.md +2 -2
  659. package/llms/components/lr-env-list.md +1 -1
  660. package/llms/components/lr-eval-dataset.md +4 -19
  661. package/llms/components/lr-export-button.md +3 -3
  662. package/llms/components/lr-file-icon.md +0 -5
  663. package/llms/components/lr-file-input.md +3 -5
  664. package/llms/components/lr-file-tree.md +1 -1
  665. package/llms/components/lr-filter-bar.md +5 -1
  666. package/llms/components/lr-flag.md +1 -2
  667. package/llms/components/lr-flow-canvas.md +1 -1
  668. package/llms/components/lr-flow-controls.md +1 -1
  669. package/llms/components/lr-flow-minimap.md +2 -2
  670. package/llms/components/lr-flow-node.md +1 -1
  671. package/llms/components/lr-flow-run-status.md +1 -1
  672. package/llms/components/lr-format-bytes.md +2 -3
  673. package/llms/components/lr-format-date.md +2 -3
  674. package/llms/components/lr-format-number.md +1 -1
  675. package/llms/components/lr-funnel.md +1 -1
  676. package/llms/components/lr-gauge.md +1 -1
  677. package/llms/components/lr-generation-metrics.md +1 -1
  678. package/llms/components/lr-graph-query-builder.md +1 -1
  679. package/llms/components/lr-heatmap.md +1 -1
  680. package/llms/components/lr-icon-button.md +14 -2
  681. package/llms/components/lr-icon.md +1 -1
  682. package/llms/components/lr-image-viewer.md +8 -0
  683. package/llms/components/lr-input.md +1 -1
  684. package/llms/components/lr-intersection-observer.md +1 -1
  685. package/llms/components/lr-json-viewer.md +1 -1
  686. package/llms/components/lr-knowledge-graph-explorer.md +2 -2
  687. package/llms/components/lr-known-date.md +1 -1
  688. package/llms/components/lr-lite-chart.md +3 -4
  689. package/llms/components/lr-live-region.md +1 -1
  690. package/llms/components/lr-locale-picker.md +1 -1
  691. package/llms/components/lr-map.md +1 -3
  692. package/llms/components/lr-media-card.md +1 -10
  693. package/llms/components/lr-memory-panel.md +2 -0
  694. package/llms/components/lr-mention-popover.md +3 -3
  695. package/llms/components/lr-menu-item.md +1 -1
  696. package/llms/components/lr-menu-label.md +1 -1
  697. package/llms/components/lr-menu.md +1 -1
  698. package/llms/components/lr-menubar-item.md +1 -1
  699. package/llms/components/lr-menubar.md +1 -1
  700. package/llms/components/lr-message-actions.md +1 -11
  701. package/llms/components/lr-message-parts.md +3 -5
  702. package/llms/components/lr-model-select.md +2 -4
  703. package/llms/components/lr-multi-split.md +1 -1
  704. package/llms/components/lr-mutation-observer.md +2 -2
  705. package/llms/components/lr-native-time-input.md +1 -1
  706. package/llms/components/lr-navigation-menu-item.md +1 -1
  707. package/llms/components/lr-navigation-menu.md +1 -1
  708. package/llms/components/lr-number-input.md +1 -1
  709. package/llms/components/lr-option.md +1 -1
  710. package/llms/components/lr-otp-input.md +1 -1
  711. package/llms/components/lr-page.md +1 -1
  712. package/llms/components/lr-pagination.md +5 -3
  713. package/llms/components/lr-pan-zoom.md +1 -3
  714. package/llms/components/lr-permission-grant.md +3 -1
  715. package/llms/components/lr-phone-input.md +7 -5
  716. package/llms/components/lr-poll-status.md +1 -1
  717. package/llms/components/lr-popover.md +5 -9
  718. package/llms/components/lr-popup.md +1 -3
  719. package/llms/components/lr-progress-bar.md +2 -1
  720. package/llms/components/lr-progress-ring.md +4 -8
  721. package/llms/components/lr-prompt-input.md +3 -1
  722. package/llms/components/lr-prompt-studio.md +4 -4
  723. package/llms/components/lr-radio-button.md +2 -2
  724. package/llms/components/lr-radio-group.md +1 -1
  725. package/llms/components/lr-radio.md +3 -2
  726. package/llms/components/lr-random-content.md +1 -1
  727. package/llms/components/lr-rating.md +2 -3
  728. package/llms/components/lr-relative-time.md +2 -3
  729. package/llms/components/lr-reorder-item.md +1 -1
  730. package/llms/components/lr-reorder-list.md +1 -1
  731. package/llms/components/lr-research-progress.md +2 -0
  732. package/llms/components/lr-resize-observer.md +1 -1
  733. package/llms/components/lr-responsive-panel.md +1 -1
  734. package/llms/components/lr-retrieval-compare.md +2 -0
  735. package/llms/components/lr-retrieval-trace.md +2 -0
  736. package/llms/components/lr-rubric-form.md +1 -1
  737. package/llms/components/lr-scroller.md +1 -1
  738. package/llms/components/lr-segmented.md +8 -4
  739. package/llms/components/lr-select.md +1 -1
  740. package/llms/components/lr-sequence-playback.md +1 -2
  741. package/llms/components/lr-sequence-strip.md +1 -1
  742. package/llms/components/lr-signature-pad.md +1 -1
  743. package/llms/components/lr-skeleton.md +2 -4
  744. package/llms/components/lr-slider.md +1 -1
  745. package/llms/components/lr-sparkline.md +1 -1
  746. package/llms/components/lr-split-panel.md +1 -1
  747. package/llms/components/lr-stat.md +1 -1
  748. package/llms/components/lr-stepper.md +1 -1
  749. package/llms/components/lr-swatch-picker.md +1 -1
  750. package/llms/components/lr-switch.md +2 -1
  751. package/llms/components/lr-tab-group.md +1 -1
  752. package/llms/components/lr-tab-panel.md +1 -1
  753. package/llms/components/lr-tab.md +1 -1
  754. package/llms/components/lr-table.md +16 -14
  755. package/llms/components/lr-task-list.md +3 -3
  756. package/llms/components/lr-test-results.md +2 -4
  757. package/llms/components/lr-textarea.md +1 -1
  758. package/llms/components/lr-thread-list.md +4 -3
  759. package/llms/components/lr-time-input.md +1 -1
  760. package/llms/components/lr-time-range.md +5 -4
  761. package/llms/components/lr-time-zone-picker.md +1 -1
  762. package/llms/components/lr-timeline-item.md +1 -1
  763. package/llms/components/lr-timeline.md +1 -1
  764. package/llms/components/lr-toggle-group.md +1 -1
  765. package/llms/components/lr-toggle.md +1 -1
  766. package/llms/components/lr-token-input.md +1 -1
  767. package/llms/components/lr-tool-approval-dialog.md +12 -10
  768. package/llms/components/lr-tool-call-block.md +1 -1
  769. package/llms/components/lr-tool-call-chip.md +1 -3
  770. package/llms/components/lr-tool-result-view.md +3 -3
  771. package/llms/components/lr-tool-timeline.md +2 -2
  772. package/llms/components/lr-tooltip.md +8 -11
  773. package/llms/components/lr-tour.md +2 -2
  774. package/llms/components/lr-tree-item.md +1 -1
  775. package/llms/components/lr-tree.md +1 -1
  776. package/llms/components/lr-unit-picker.md +1 -1
  777. package/llms/components/lr-usage-badge.md +1 -3
  778. package/llms/components/lr-video.md +1 -2
  779. package/llms/components/lr-virtual-list.md +1 -1
  780. package/llms/components/lr-visually-hidden.md +1 -1
  781. package/llms/components/lr-voice-picker.md +1 -1
  782. package/llms/components/lr-widget.md +1 -1
  783. package/llms/components/lr-word-cloud.md +1 -1
  784. package/llms/components/lr-zoomable-frame.md +1 -6
  785. package/llms/migration.md +105 -2
  786. package/llms/peers.md +3 -2
  787. package/llms/shared/ai-and-peers.md +2 -2
  788. package/llms/shared/events-and-types.md +45 -1
  789. package/llms/shared/frameworks-and-ssr.md +16 -0
  790. package/llms/shared/imports-and-registration.md +6 -5
  791. package/llms/shared/localization-and-rtl.md +18 -18
  792. package/llms/shared/native-styles-and-utilities.md +38 -3
  793. package/llms/shared/styles-and-tokens.md +243 -103
  794. package/llms/shared/testing-and-utilities.md +134 -49
  795. package/llms/shared.md +502 -181
  796. package/llms/tokens.md +31 -49
  797. package/llms.txt +14 -12
  798. package/locales.json +1002 -1002
  799. package/package.json +28 -6884
  800. package/registrations.json +1 -1
  801. package/skills/compose-lyra-interfaces/SKILL.md +60 -0
  802. package/skills/compose-lyra-interfaces/agents/openai.yaml +4 -0
  803. package/skills/compose-lyra-interfaces/references/composition-patterns.md +77 -0
  804. package/skills/lyra-ui/SKILL.md +145 -0
  805. package/skills/lyra-ui/commands/frontend.md +37 -0
  806. package/skills/lyra-ui/commands/migrate.md +44 -0
  807. package/skills/lyra-ui/commands/new-component.md +19 -0
  808. package/skills/lyra-ui/commands/review.md +247 -0
  809. package/skills/lyra-ui/commands/update.md +30 -0
  810. package/skills/lyra-ui/reporting.md +137 -0
  811. package/custom-elements.json +0 -1
  812. package/dist/internal/default-strings.generated.js +0 -5
  813. package/dist/internal/side-effect-only.d.ts +0 -1
  814. package/dist/internal/specialist-tokens.styles.js +0 -1
  815. package/dist/internal/tokens/palette.styles.js +0 -1
  816. package/dist/internal/tokens.styles.js +0 -1
  817. package/dist/translations/am/agent-tools.js +0 -1
  818. package/dist/translations/am/charts.js +0 -1
  819. package/dist/translations/am/conversation.js +0 -1
  820. package/dist/translations/am/data.js +0 -1
  821. package/dist/translations/am/forms.js +0 -1
  822. package/dist/translations/am/layout.js +0 -1
  823. package/dist/translations/am/media.js +0 -1
  824. package/dist/translations/am/overlays.js +0 -1
  825. package/dist/translations/am/retrieval.js +0 -1
  826. package/dist/translations/am/shared.js +0 -1
  827. package/dist/translations/am/utility.js +0 -1
  828. package/dist/translations/am/viewers.js +0 -5
  829. package/dist/translations/am.js +0 -1
  830. package/dist/translations/ar/agent-tools.js +0 -1
  831. package/dist/translations/ar/charts.js +0 -1
  832. package/dist/translations/ar/conversation.js +0 -1
  833. package/dist/translations/ar/data.js +0 -1
  834. package/dist/translations/ar/forms.js +0 -1
  835. package/dist/translations/ar/layout.js +0 -1
  836. package/dist/translations/ar/media.js +0 -1
  837. package/dist/translations/ar/overlays.js +0 -1
  838. package/dist/translations/ar/retrieval.js +0 -1
  839. package/dist/translations/ar/shared.js +0 -1
  840. package/dist/translations/ar/utility.js +0 -1
  841. package/dist/translations/ar/viewers.js +0 -5
  842. package/dist/translations/ar.js +0 -1
  843. package/dist/translations/bho/agent-tools.js +0 -1
  844. package/dist/translations/bho/charts.js +0 -1
  845. package/dist/translations/bho/conversation.js +0 -1
  846. package/dist/translations/bho/data.js +0 -1
  847. package/dist/translations/bho/forms.js +0 -1
  848. package/dist/translations/bho/layout.js +0 -1
  849. package/dist/translations/bho/media.js +0 -1
  850. package/dist/translations/bho/overlays.js +0 -1
  851. package/dist/translations/bho/retrieval.js +0 -1
  852. package/dist/translations/bho/shared.js +0 -1
  853. package/dist/translations/bho/utility.js +0 -1
  854. package/dist/translations/bho/viewers.js +0 -5
  855. package/dist/translations/bho.js +0 -1
  856. package/dist/translations/bn/agent-tools.js +0 -1
  857. package/dist/translations/bn/charts.js +0 -1
  858. package/dist/translations/bn/conversation.js +0 -1
  859. package/dist/translations/bn/data.js +0 -1
  860. package/dist/translations/bn/forms.js +0 -1
  861. package/dist/translations/bn/layout.js +0 -1
  862. package/dist/translations/bn/media.js +0 -1
  863. package/dist/translations/bn/overlays.js +0 -1
  864. package/dist/translations/bn/retrieval.js +0 -1
  865. package/dist/translations/bn/shared.js +0 -1
  866. package/dist/translations/bn/utility.js +0 -1
  867. package/dist/translations/bn/viewers.js +0 -5
  868. package/dist/translations/bn.js +0 -1
  869. package/dist/translations/cs/agent-tools.js +0 -1
  870. package/dist/translations/cs/charts.js +0 -1
  871. package/dist/translations/cs/conversation.js +0 -1
  872. package/dist/translations/cs/data.js +0 -1
  873. package/dist/translations/cs/forms.js +0 -1
  874. package/dist/translations/cs/layout.js +0 -1
  875. package/dist/translations/cs/media.js +0 -1
  876. package/dist/translations/cs/overlays.js +0 -1
  877. package/dist/translations/cs/retrieval.js +0 -1
  878. package/dist/translations/cs/shared.js +0 -1
  879. package/dist/translations/cs/utility.js +0 -1
  880. package/dist/translations/cs/viewers.js +0 -5
  881. package/dist/translations/cs.js +0 -1
  882. package/dist/translations/da/agent-tools.js +0 -1
  883. package/dist/translations/da/charts.js +0 -1
  884. package/dist/translations/da/conversation.js +0 -1
  885. package/dist/translations/da/data.js +0 -1
  886. package/dist/translations/da/forms.js +0 -1
  887. package/dist/translations/da/layout.js +0 -1
  888. package/dist/translations/da/media.js +0 -1
  889. package/dist/translations/da/overlays.js +0 -1
  890. package/dist/translations/da/retrieval.js +0 -1
  891. package/dist/translations/da/shared.js +0 -1
  892. package/dist/translations/da/utility.js +0 -1
  893. package/dist/translations/da/viewers.js +0 -5
  894. package/dist/translations/da.js +0 -1
  895. package/dist/translations/de/agent-tools.js +0 -1
  896. package/dist/translations/de/charts.js +0 -1
  897. package/dist/translations/de/conversation.js +0 -1
  898. package/dist/translations/de/data.js +0 -1
  899. package/dist/translations/de/forms.js +0 -1
  900. package/dist/translations/de/layout.js +0 -1
  901. package/dist/translations/de/media.js +0 -1
  902. package/dist/translations/de/overlays.js +0 -1
  903. package/dist/translations/de/retrieval.js +0 -1
  904. package/dist/translations/de/shared.js +0 -1
  905. package/dist/translations/de/utility.js +0 -1
  906. package/dist/translations/de/viewers.js +0 -5
  907. package/dist/translations/de-CH/agent-tools.js +0 -1
  908. package/dist/translations/de-CH/charts.js +0 -1
  909. package/dist/translations/de-CH/conversation.js +0 -1
  910. package/dist/translations/de-CH/data.js +0 -1
  911. package/dist/translations/de-CH/forms.js +0 -1
  912. package/dist/translations/de-CH/layout.js +0 -1
  913. package/dist/translations/de-CH/media.js +0 -1
  914. package/dist/translations/de-CH/overlays.js +0 -1
  915. package/dist/translations/de-CH/retrieval.js +0 -1
  916. package/dist/translations/de-CH/shared.js +0 -1
  917. package/dist/translations/de-CH/utility.js +0 -1
  918. package/dist/translations/de-CH/viewers.js +0 -1
  919. package/dist/translations/de-CH.js +0 -1
  920. package/dist/translations/de.js +0 -1
  921. package/dist/translations/el/agent-tools.js +0 -1
  922. package/dist/translations/el/charts.js +0 -1
  923. package/dist/translations/el/conversation.js +0 -1
  924. package/dist/translations/el/data.js +0 -1
  925. package/dist/translations/el/forms.js +0 -1
  926. package/dist/translations/el/layout.js +0 -1
  927. package/dist/translations/el/media.js +0 -1
  928. package/dist/translations/el/overlays.js +0 -1
  929. package/dist/translations/el/retrieval.js +0 -1
  930. package/dist/translations/el/shared.js +0 -1
  931. package/dist/translations/el/utility.js +0 -1
  932. package/dist/translations/el/viewers.js +0 -5
  933. package/dist/translations/el.js +0 -1
  934. package/dist/translations/es/agent-tools.js +0 -1
  935. package/dist/translations/es/charts.js +0 -1
  936. package/dist/translations/es/conversation.js +0 -1
  937. package/dist/translations/es/data.js +0 -1
  938. package/dist/translations/es/forms.js +0 -1
  939. package/dist/translations/es/layout.js +0 -1
  940. package/dist/translations/es/media.js +0 -1
  941. package/dist/translations/es/overlays.js +0 -1
  942. package/dist/translations/es/retrieval.js +0 -1
  943. package/dist/translations/es/shared.js +0 -1
  944. package/dist/translations/es/utility.js +0 -1
  945. package/dist/translations/es/viewers.js +0 -5
  946. package/dist/translations/es.js +0 -1
  947. package/dist/translations/fa/agent-tools.js +0 -1
  948. package/dist/translations/fa/charts.js +0 -1
  949. package/dist/translations/fa/conversation.js +0 -1
  950. package/dist/translations/fa/data.js +0 -1
  951. package/dist/translations/fa/forms.js +0 -1
  952. package/dist/translations/fa/layout.js +0 -1
  953. package/dist/translations/fa/media.js +0 -1
  954. package/dist/translations/fa/overlays.js +0 -1
  955. package/dist/translations/fa/retrieval.js +0 -1
  956. package/dist/translations/fa/shared.js +0 -1
  957. package/dist/translations/fa/utility.js +0 -1
  958. package/dist/translations/fa/viewers.js +0 -5
  959. package/dist/translations/fa-AF/agent-tools.js +0 -1
  960. package/dist/translations/fa-AF/charts.js +0 -1
  961. package/dist/translations/fa-AF/conversation.js +0 -1
  962. package/dist/translations/fa-AF/data.js +0 -1
  963. package/dist/translations/fa-AF/forms.js +0 -1
  964. package/dist/translations/fa-AF/layout.js +0 -1
  965. package/dist/translations/fa-AF/media.js +0 -1
  966. package/dist/translations/fa-AF/overlays.js +0 -1
  967. package/dist/translations/fa-AF/retrieval.js +0 -1
  968. package/dist/translations/fa-AF/shared.js +0 -1
  969. package/dist/translations/fa-AF/utility.js +0 -1
  970. package/dist/translations/fa-AF/viewers.js +0 -5
  971. package/dist/translations/fa-AF.js +0 -1
  972. package/dist/translations/fa.js +0 -1
  973. package/dist/translations/fi/agent-tools.js +0 -1
  974. package/dist/translations/fi/charts.js +0 -1
  975. package/dist/translations/fi/conversation.js +0 -1
  976. package/dist/translations/fi/data.js +0 -1
  977. package/dist/translations/fi/forms.js +0 -1
  978. package/dist/translations/fi/layout.js +0 -1
  979. package/dist/translations/fi/media.js +0 -1
  980. package/dist/translations/fi/overlays.js +0 -1
  981. package/dist/translations/fi/retrieval.js +0 -1
  982. package/dist/translations/fi/shared.js +0 -1
  983. package/dist/translations/fi/utility.js +0 -1
  984. package/dist/translations/fi/viewers.js +0 -5
  985. package/dist/translations/fi.js +0 -1
  986. package/dist/translations/fr/agent-tools.js +0 -1
  987. package/dist/translations/fr/charts.js +0 -1
  988. package/dist/translations/fr/conversation.js +0 -1
  989. package/dist/translations/fr/data.js +0 -1
  990. package/dist/translations/fr/forms.js +0 -1
  991. package/dist/translations/fr/layout.js +0 -1
  992. package/dist/translations/fr/media.js +0 -1
  993. package/dist/translations/fr/overlays.js +0 -1
  994. package/dist/translations/fr/retrieval.js +0 -1
  995. package/dist/translations/fr/shared.js +0 -1
  996. package/dist/translations/fr/utility.js +0 -1
  997. package/dist/translations/fr/viewers.js +0 -5
  998. package/dist/translations/fr.js +0 -1
  999. package/dist/translations/gu/agent-tools.js +0 -1
  1000. package/dist/translations/gu/charts.js +0 -1
  1001. package/dist/translations/gu/conversation.js +0 -1
  1002. package/dist/translations/gu/data.js +0 -1
  1003. package/dist/translations/gu/forms.js +0 -1
  1004. package/dist/translations/gu/layout.js +0 -1
  1005. package/dist/translations/gu/media.js +0 -1
  1006. package/dist/translations/gu/overlays.js +0 -1
  1007. package/dist/translations/gu/retrieval.js +0 -1
  1008. package/dist/translations/gu/shared.js +0 -1
  1009. package/dist/translations/gu/utility.js +0 -1
  1010. package/dist/translations/gu/viewers.js +0 -5
  1011. package/dist/translations/gu.js +0 -1
  1012. package/dist/translations/ha/agent-tools.js +0 -1
  1013. package/dist/translations/ha/charts.js +0 -1
  1014. package/dist/translations/ha/conversation.js +0 -1
  1015. package/dist/translations/ha/data.js +0 -1
  1016. package/dist/translations/ha/forms.js +0 -1
  1017. package/dist/translations/ha/layout.js +0 -1
  1018. package/dist/translations/ha/media.js +0 -1
  1019. package/dist/translations/ha/overlays.js +0 -1
  1020. package/dist/translations/ha/retrieval.js +0 -1
  1021. package/dist/translations/ha/shared.js +0 -1
  1022. package/dist/translations/ha/utility.js +0 -1
  1023. package/dist/translations/ha/viewers.js +0 -5
  1024. package/dist/translations/ha.js +0 -1
  1025. package/dist/translations/he/agent-tools.js +0 -1
  1026. package/dist/translations/he/charts.js +0 -1
  1027. package/dist/translations/he/conversation.js +0 -1
  1028. package/dist/translations/he/data.js +0 -1
  1029. package/dist/translations/he/forms.js +0 -1
  1030. package/dist/translations/he/layout.js +0 -1
  1031. package/dist/translations/he/media.js +0 -1
  1032. package/dist/translations/he/overlays.js +0 -1
  1033. package/dist/translations/he/retrieval.js +0 -1
  1034. package/dist/translations/he/shared.js +0 -1
  1035. package/dist/translations/he/utility.js +0 -1
  1036. package/dist/translations/he/viewers.js +0 -5
  1037. package/dist/translations/he.js +0 -1
  1038. package/dist/translations/hi/agent-tools.js +0 -1
  1039. package/dist/translations/hi/charts.js +0 -1
  1040. package/dist/translations/hi/conversation.js +0 -1
  1041. package/dist/translations/hi/data.js +0 -1
  1042. package/dist/translations/hi/forms.js +0 -1
  1043. package/dist/translations/hi/layout.js +0 -1
  1044. package/dist/translations/hi/media.js +0 -1
  1045. package/dist/translations/hi/overlays.js +0 -1
  1046. package/dist/translations/hi/retrieval.js +0 -1
  1047. package/dist/translations/hi/shared.js +0 -1
  1048. package/dist/translations/hi/utility.js +0 -1
  1049. package/dist/translations/hi/viewers.js +0 -5
  1050. package/dist/translations/hi.js +0 -1
  1051. package/dist/translations/hr/agent-tools.js +0 -1
  1052. package/dist/translations/hr/charts.js +0 -1
  1053. package/dist/translations/hr/conversation.js +0 -1
  1054. package/dist/translations/hr/data.js +0 -1
  1055. package/dist/translations/hr/forms.js +0 -1
  1056. package/dist/translations/hr/layout.js +0 -1
  1057. package/dist/translations/hr/media.js +0 -1
  1058. package/dist/translations/hr/overlays.js +0 -1
  1059. package/dist/translations/hr/retrieval.js +0 -1
  1060. package/dist/translations/hr/shared.js +0 -1
  1061. package/dist/translations/hr/utility.js +0 -1
  1062. package/dist/translations/hr/viewers.js +0 -5
  1063. package/dist/translations/hr.js +0 -1
  1064. package/dist/translations/hu/agent-tools.js +0 -1
  1065. package/dist/translations/hu/charts.js +0 -1
  1066. package/dist/translations/hu/conversation.js +0 -1
  1067. package/dist/translations/hu/data.js +0 -1
  1068. package/dist/translations/hu/forms.js +0 -1
  1069. package/dist/translations/hu/layout.js +0 -1
  1070. package/dist/translations/hu/media.js +0 -1
  1071. package/dist/translations/hu/overlays.js +0 -1
  1072. package/dist/translations/hu/retrieval.js +0 -1
  1073. package/dist/translations/hu/shared.js +0 -1
  1074. package/dist/translations/hu/utility.js +0 -1
  1075. package/dist/translations/hu/viewers.js +0 -5
  1076. package/dist/translations/hu.js +0 -1
  1077. package/dist/translations/id/agent-tools.js +0 -1
  1078. package/dist/translations/id/charts.js +0 -1
  1079. package/dist/translations/id/conversation.js +0 -1
  1080. package/dist/translations/id/data.js +0 -1
  1081. package/dist/translations/id/forms.js +0 -1
  1082. package/dist/translations/id/layout.js +0 -1
  1083. package/dist/translations/id/media.js +0 -1
  1084. package/dist/translations/id/overlays.js +0 -1
  1085. package/dist/translations/id/retrieval.js +0 -1
  1086. package/dist/translations/id/shared.js +0 -1
  1087. package/dist/translations/id/utility.js +0 -1
  1088. package/dist/translations/id/viewers.js +0 -5
  1089. package/dist/translations/id.js +0 -1
  1090. package/dist/translations/ig/agent-tools.js +0 -1
  1091. package/dist/translations/ig/charts.js +0 -1
  1092. package/dist/translations/ig/conversation.js +0 -1
  1093. package/dist/translations/ig/data.js +0 -1
  1094. package/dist/translations/ig/forms.js +0 -1
  1095. package/dist/translations/ig/layout.js +0 -1
  1096. package/dist/translations/ig/media.js +0 -1
  1097. package/dist/translations/ig/overlays.js +0 -1
  1098. package/dist/translations/ig/retrieval.js +0 -1
  1099. package/dist/translations/ig/shared.js +0 -1
  1100. package/dist/translations/ig/utility.js +0 -1
  1101. package/dist/translations/ig/viewers.js +0 -5
  1102. package/dist/translations/ig.js +0 -1
  1103. package/dist/translations/it/agent-tools.js +0 -1
  1104. package/dist/translations/it/charts.js +0 -1
  1105. package/dist/translations/it/conversation.js +0 -1
  1106. package/dist/translations/it/data.js +0 -1
  1107. package/dist/translations/it/forms.js +0 -1
  1108. package/dist/translations/it/layout.js +0 -1
  1109. package/dist/translations/it/media.js +0 -1
  1110. package/dist/translations/it/overlays.js +0 -1
  1111. package/dist/translations/it/retrieval.js +0 -1
  1112. package/dist/translations/it/shared.js +0 -1
  1113. package/dist/translations/it/utility.js +0 -1
  1114. package/dist/translations/it/viewers.js +0 -5
  1115. package/dist/translations/it.js +0 -1
  1116. package/dist/translations/ja/agent-tools.js +0 -1
  1117. package/dist/translations/ja/charts.js +0 -1
  1118. package/dist/translations/ja/conversation.js +0 -1
  1119. package/dist/translations/ja/data.js +0 -1
  1120. package/dist/translations/ja/forms.js +0 -1
  1121. package/dist/translations/ja/layout.js +0 -1
  1122. package/dist/translations/ja/media.js +0 -1
  1123. package/dist/translations/ja/overlays.js +0 -1
  1124. package/dist/translations/ja/retrieval.js +0 -1
  1125. package/dist/translations/ja/shared.js +0 -1
  1126. package/dist/translations/ja/utility.js +0 -1
  1127. package/dist/translations/ja/viewers.js +0 -4
  1128. package/dist/translations/ja.js +0 -1
  1129. package/dist/translations/jv/agent-tools.js +0 -1
  1130. package/dist/translations/jv/charts.js +0 -1
  1131. package/dist/translations/jv/conversation.js +0 -1
  1132. package/dist/translations/jv/data.js +0 -1
  1133. package/dist/translations/jv/forms.js +0 -1
  1134. package/dist/translations/jv/layout.js +0 -1
  1135. package/dist/translations/jv/media.js +0 -1
  1136. package/dist/translations/jv/overlays.js +0 -1
  1137. package/dist/translations/jv/retrieval.js +0 -1
  1138. package/dist/translations/jv/shared.js +0 -1
  1139. package/dist/translations/jv/utility.js +0 -1
  1140. package/dist/translations/jv/viewers.js +0 -5
  1141. package/dist/translations/jv.js +0 -1
  1142. package/dist/translations/kk/agent-tools.js +0 -1
  1143. package/dist/translations/kk/charts.js +0 -1
  1144. package/dist/translations/kk/conversation.js +0 -1
  1145. package/dist/translations/kk/data.js +0 -1
  1146. package/dist/translations/kk/forms.js +0 -1
  1147. package/dist/translations/kk/layout.js +0 -1
  1148. package/dist/translations/kk/media.js +0 -1
  1149. package/dist/translations/kk/overlays.js +0 -1
  1150. package/dist/translations/kk/retrieval.js +0 -1
  1151. package/dist/translations/kk/shared.js +0 -1
  1152. package/dist/translations/kk/utility.js +0 -1
  1153. package/dist/translations/kk/viewers.js +0 -5
  1154. package/dist/translations/kk.js +0 -1
  1155. package/dist/translations/kn/agent-tools.js +0 -1
  1156. package/dist/translations/kn/charts.js +0 -1
  1157. package/dist/translations/kn/conversation.js +0 -1
  1158. package/dist/translations/kn/data.js +0 -1
  1159. package/dist/translations/kn/forms.js +0 -1
  1160. package/dist/translations/kn/layout.js +0 -1
  1161. package/dist/translations/kn/media.js +0 -1
  1162. package/dist/translations/kn/overlays.js +0 -1
  1163. package/dist/translations/kn/retrieval.js +0 -1
  1164. package/dist/translations/kn/shared.js +0 -1
  1165. package/dist/translations/kn/utility.js +0 -1
  1166. package/dist/translations/kn/viewers.js +0 -5
  1167. package/dist/translations/kn.js +0 -1
  1168. package/dist/translations/ko/agent-tools.js +0 -1
  1169. package/dist/translations/ko/charts.js +0 -1
  1170. package/dist/translations/ko/conversation.js +0 -1
  1171. package/dist/translations/ko/data.js +0 -1
  1172. package/dist/translations/ko/forms.js +0 -1
  1173. package/dist/translations/ko/layout.js +0 -1
  1174. package/dist/translations/ko/media.js +0 -1
  1175. package/dist/translations/ko/overlays.js +0 -1
  1176. package/dist/translations/ko/retrieval.js +0 -1
  1177. package/dist/translations/ko/shared.js +0 -1
  1178. package/dist/translations/ko/utility.js +0 -1
  1179. package/dist/translations/ko/viewers.js +0 -5
  1180. package/dist/translations/ko.js +0 -1
  1181. package/dist/translations/ln/agent-tools.js +0 -1
  1182. package/dist/translations/ln/charts.js +0 -1
  1183. package/dist/translations/ln/conversation.js +0 -1
  1184. package/dist/translations/ln/data.js +0 -1
  1185. package/dist/translations/ln/forms.js +0 -1
  1186. package/dist/translations/ln/layout.js +0 -1
  1187. package/dist/translations/ln/media.js +0 -1
  1188. package/dist/translations/ln/overlays.js +0 -1
  1189. package/dist/translations/ln/retrieval.js +0 -1
  1190. package/dist/translations/ln/shared.js +0 -1
  1191. package/dist/translations/ln/utility.js +0 -1
  1192. package/dist/translations/ln/viewers.js +0 -5
  1193. package/dist/translations/ln.js +0 -1
  1194. package/dist/translations/ml/agent-tools.js +0 -1
  1195. package/dist/translations/ml/charts.js +0 -1
  1196. package/dist/translations/ml/conversation.js +0 -1
  1197. package/dist/translations/ml/data.js +0 -1
  1198. package/dist/translations/ml/forms.js +0 -1
  1199. package/dist/translations/ml/layout.js +0 -1
  1200. package/dist/translations/ml/media.js +0 -1
  1201. package/dist/translations/ml/overlays.js +0 -1
  1202. package/dist/translations/ml/retrieval.js +0 -1
  1203. package/dist/translations/ml/shared.js +0 -1
  1204. package/dist/translations/ml/utility.js +0 -1
  1205. package/dist/translations/ml/viewers.js +0 -5
  1206. package/dist/translations/ml.js +0 -1
  1207. package/dist/translations/mr/agent-tools.js +0 -1
  1208. package/dist/translations/mr/charts.js +0 -1
  1209. package/dist/translations/mr/conversation.js +0 -1
  1210. package/dist/translations/mr/data.js +0 -1
  1211. package/dist/translations/mr/forms.js +0 -1
  1212. package/dist/translations/mr/layout.js +0 -1
  1213. package/dist/translations/mr/media.js +0 -1
  1214. package/dist/translations/mr/overlays.js +0 -1
  1215. package/dist/translations/mr/retrieval.js +0 -1
  1216. package/dist/translations/mr/shared.js +0 -1
  1217. package/dist/translations/mr/utility.js +0 -1
  1218. package/dist/translations/mr/viewers.js +0 -5
  1219. package/dist/translations/mr.js +0 -1
  1220. package/dist/translations/ms/agent-tools.js +0 -1
  1221. package/dist/translations/ms/charts.js +0 -1
  1222. package/dist/translations/ms/conversation.js +0 -1
  1223. package/dist/translations/ms/data.js +0 -1
  1224. package/dist/translations/ms/forms.js +0 -1
  1225. package/dist/translations/ms/layout.js +0 -1
  1226. package/dist/translations/ms/media.js +0 -1
  1227. package/dist/translations/ms/overlays.js +0 -1
  1228. package/dist/translations/ms/retrieval.js +0 -1
  1229. package/dist/translations/ms/shared.js +0 -1
  1230. package/dist/translations/ms/utility.js +0 -1
  1231. package/dist/translations/ms/viewers.js +0 -5
  1232. package/dist/translations/ms.js +0 -1
  1233. package/dist/translations/my/agent-tools.js +0 -1
  1234. package/dist/translations/my/charts.js +0 -1
  1235. package/dist/translations/my/conversation.js +0 -1
  1236. package/dist/translations/my/data.js +0 -1
  1237. package/dist/translations/my/forms.js +0 -1
  1238. package/dist/translations/my/layout.js +0 -1
  1239. package/dist/translations/my/media.js +0 -1
  1240. package/dist/translations/my/overlays.js +0 -1
  1241. package/dist/translations/my/retrieval.js +0 -1
  1242. package/dist/translations/my/shared.js +0 -1
  1243. package/dist/translations/my/utility.js +0 -1
  1244. package/dist/translations/my/viewers.js +0 -5
  1245. package/dist/translations/my.js +0 -1
  1246. package/dist/translations/nb/agent-tools.js +0 -1
  1247. package/dist/translations/nb/charts.js +0 -1
  1248. package/dist/translations/nb/conversation.js +0 -1
  1249. package/dist/translations/nb/data.js +0 -1
  1250. package/dist/translations/nb/forms.js +0 -1
  1251. package/dist/translations/nb/layout.js +0 -1
  1252. package/dist/translations/nb/media.js +0 -1
  1253. package/dist/translations/nb/overlays.js +0 -1
  1254. package/dist/translations/nb/retrieval.js +0 -1
  1255. package/dist/translations/nb/shared.js +0 -1
  1256. package/dist/translations/nb/utility.js +0 -1
  1257. package/dist/translations/nb/viewers.js +0 -5
  1258. package/dist/translations/nb.js +0 -1
  1259. package/dist/translations/ne/agent-tools.js +0 -1
  1260. package/dist/translations/ne/charts.js +0 -1
  1261. package/dist/translations/ne/conversation.js +0 -1
  1262. package/dist/translations/ne/data.js +0 -1
  1263. package/dist/translations/ne/forms.js +0 -1
  1264. package/dist/translations/ne/layout.js +0 -1
  1265. package/dist/translations/ne/media.js +0 -1
  1266. package/dist/translations/ne/overlays.js +0 -1
  1267. package/dist/translations/ne/retrieval.js +0 -1
  1268. package/dist/translations/ne/shared.js +0 -1
  1269. package/dist/translations/ne/utility.js +0 -1
  1270. package/dist/translations/ne/viewers.js +0 -5
  1271. package/dist/translations/ne.js +0 -1
  1272. package/dist/translations/nl/agent-tools.js +0 -1
  1273. package/dist/translations/nl/charts.js +0 -1
  1274. package/dist/translations/nl/conversation.js +0 -1
  1275. package/dist/translations/nl/data.js +0 -1
  1276. package/dist/translations/nl/forms.js +0 -1
  1277. package/dist/translations/nl/layout.js +0 -1
  1278. package/dist/translations/nl/media.js +0 -1
  1279. package/dist/translations/nl/overlays.js +0 -1
  1280. package/dist/translations/nl/retrieval.js +0 -1
  1281. package/dist/translations/nl/shared.js +0 -1
  1282. package/dist/translations/nl/utility.js +0 -1
  1283. package/dist/translations/nl/viewers.js +0 -5
  1284. package/dist/translations/nl.js +0 -1
  1285. package/dist/translations/nn/agent-tools.js +0 -1
  1286. package/dist/translations/nn/charts.js +0 -1
  1287. package/dist/translations/nn/conversation.js +0 -1
  1288. package/dist/translations/nn/data.js +0 -1
  1289. package/dist/translations/nn/forms.js +0 -1
  1290. package/dist/translations/nn/layout.js +0 -1
  1291. package/dist/translations/nn/media.js +0 -1
  1292. package/dist/translations/nn/overlays.js +0 -1
  1293. package/dist/translations/nn/retrieval.js +0 -1
  1294. package/dist/translations/nn/shared.js +0 -1
  1295. package/dist/translations/nn/utility.js +0 -1
  1296. package/dist/translations/nn/viewers.js +0 -5
  1297. package/dist/translations/nn.js +0 -1
  1298. package/dist/translations/om/agent-tools.js +0 -1
  1299. package/dist/translations/om/charts.js +0 -1
  1300. package/dist/translations/om/conversation.js +0 -1
  1301. package/dist/translations/om/data.js +0 -1
  1302. package/dist/translations/om/forms.js +0 -1
  1303. package/dist/translations/om/layout.js +0 -1
  1304. package/dist/translations/om/media.js +0 -1
  1305. package/dist/translations/om/overlays.js +0 -1
  1306. package/dist/translations/om/retrieval.js +0 -1
  1307. package/dist/translations/om/shared.js +0 -1
  1308. package/dist/translations/om/utility.js +0 -1
  1309. package/dist/translations/om/viewers.js +0 -5
  1310. package/dist/translations/om.js +0 -1
  1311. package/dist/translations/or/agent-tools.js +0 -1
  1312. package/dist/translations/or/charts.js +0 -1
  1313. package/dist/translations/or/conversation.js +0 -1
  1314. package/dist/translations/or/data.js +0 -1
  1315. package/dist/translations/or/forms.js +0 -1
  1316. package/dist/translations/or/layout.js +0 -1
  1317. package/dist/translations/or/media.js +0 -1
  1318. package/dist/translations/or/overlays.js +0 -1
  1319. package/dist/translations/or/retrieval.js +0 -1
  1320. package/dist/translations/or/shared.js +0 -1
  1321. package/dist/translations/or/utility.js +0 -1
  1322. package/dist/translations/or/viewers.js +0 -5
  1323. package/dist/translations/or.js +0 -1
  1324. package/dist/translations/pa/agent-tools.js +0 -1
  1325. package/dist/translations/pa/charts.js +0 -1
  1326. package/dist/translations/pa/conversation.js +0 -1
  1327. package/dist/translations/pa/data.js +0 -1
  1328. package/dist/translations/pa/forms.js +0 -1
  1329. package/dist/translations/pa/layout.js +0 -1
  1330. package/dist/translations/pa/media.js +0 -1
  1331. package/dist/translations/pa/overlays.js +0 -1
  1332. package/dist/translations/pa/retrieval.js +0 -1
  1333. package/dist/translations/pa/shared.js +0 -1
  1334. package/dist/translations/pa/utility.js +0 -1
  1335. package/dist/translations/pa/viewers.js +0 -5
  1336. package/dist/translations/pa.js +0 -1
  1337. package/dist/translations/pcm/agent-tools.js +0 -1
  1338. package/dist/translations/pcm/charts.js +0 -1
  1339. package/dist/translations/pcm/conversation.js +0 -1
  1340. package/dist/translations/pcm/data.js +0 -1
  1341. package/dist/translations/pcm/forms.js +0 -1
  1342. package/dist/translations/pcm/layout.js +0 -1
  1343. package/dist/translations/pcm/media.js +0 -1
  1344. package/dist/translations/pcm/overlays.js +0 -1
  1345. package/dist/translations/pcm/retrieval.js +0 -1
  1346. package/dist/translations/pcm/shared.js +0 -1
  1347. package/dist/translations/pcm/utility.js +0 -1
  1348. package/dist/translations/pcm/viewers.js +0 -5
  1349. package/dist/translations/pcm.js +0 -1
  1350. package/dist/translations/pl/agent-tools.js +0 -1
  1351. package/dist/translations/pl/charts.js +0 -1
  1352. package/dist/translations/pl/conversation.js +0 -1
  1353. package/dist/translations/pl/data.js +0 -1
  1354. package/dist/translations/pl/forms.js +0 -1
  1355. package/dist/translations/pl/layout.js +0 -1
  1356. package/dist/translations/pl/media.js +0 -1
  1357. package/dist/translations/pl/overlays.js +0 -1
  1358. package/dist/translations/pl/retrieval.js +0 -1
  1359. package/dist/translations/pl/shared.js +0 -1
  1360. package/dist/translations/pl/utility.js +0 -1
  1361. package/dist/translations/pl/viewers.js +0 -5
  1362. package/dist/translations/pl.js +0 -1
  1363. package/dist/translations/pnb/agent-tools.js +0 -1
  1364. package/dist/translations/pnb/charts.js +0 -1
  1365. package/dist/translations/pnb/conversation.js +0 -1
  1366. package/dist/translations/pnb/data.js +0 -1
  1367. package/dist/translations/pnb/forms.js +0 -1
  1368. package/dist/translations/pnb/layout.js +0 -1
  1369. package/dist/translations/pnb/media.js +0 -1
  1370. package/dist/translations/pnb/overlays.js +0 -1
  1371. package/dist/translations/pnb/retrieval.js +0 -1
  1372. package/dist/translations/pnb/shared.js +0 -1
  1373. package/dist/translations/pnb/utility.js +0 -1
  1374. package/dist/translations/pnb/viewers.js +0 -5
  1375. package/dist/translations/pnb.js +0 -1
  1376. package/dist/translations/ps/agent-tools.js +0 -1
  1377. package/dist/translations/ps/charts.js +0 -1
  1378. package/dist/translations/ps/conversation.js +0 -1
  1379. package/dist/translations/ps/data.js +0 -1
  1380. package/dist/translations/ps/forms.js +0 -1
  1381. package/dist/translations/ps/layout.js +0 -1
  1382. package/dist/translations/ps/media.js +0 -1
  1383. package/dist/translations/ps/overlays.js +0 -1
  1384. package/dist/translations/ps/retrieval.js +0 -1
  1385. package/dist/translations/ps/shared.js +0 -1
  1386. package/dist/translations/ps/utility.js +0 -1
  1387. package/dist/translations/ps/viewers.js +0 -5
  1388. package/dist/translations/ps.js +0 -1
  1389. package/dist/translations/pt-BR/agent-tools.js +0 -1
  1390. package/dist/translations/pt-BR/charts.js +0 -1
  1391. package/dist/translations/pt-BR/conversation.js +0 -1
  1392. package/dist/translations/pt-BR/data.js +0 -1
  1393. package/dist/translations/pt-BR/forms.js +0 -1
  1394. package/dist/translations/pt-BR/layout.js +0 -1
  1395. package/dist/translations/pt-BR/media.js +0 -1
  1396. package/dist/translations/pt-BR/overlays.js +0 -1
  1397. package/dist/translations/pt-BR/retrieval.js +0 -1
  1398. package/dist/translations/pt-BR/shared.js +0 -1
  1399. package/dist/translations/pt-BR/utility.js +0 -1
  1400. package/dist/translations/pt-BR/viewers.js +0 -5
  1401. package/dist/translations/pt-BR.js +0 -1
  1402. package/dist/translations/pt-PT/agent-tools.js +0 -1
  1403. package/dist/translations/pt-PT/charts.js +0 -1
  1404. package/dist/translations/pt-PT/conversation.js +0 -1
  1405. package/dist/translations/pt-PT/data.js +0 -1
  1406. package/dist/translations/pt-PT/forms.js +0 -1
  1407. package/dist/translations/pt-PT/layout.js +0 -1
  1408. package/dist/translations/pt-PT/media.js +0 -1
  1409. package/dist/translations/pt-PT/overlays.js +0 -1
  1410. package/dist/translations/pt-PT/retrieval.js +0 -1
  1411. package/dist/translations/pt-PT/shared.js +0 -1
  1412. package/dist/translations/pt-PT/utility.js +0 -1
  1413. package/dist/translations/pt-PT/viewers.js +0 -5
  1414. package/dist/translations/pt-PT.js +0 -1
  1415. package/dist/translations/ro/agent-tools.js +0 -1
  1416. package/dist/translations/ro/charts.js +0 -1
  1417. package/dist/translations/ro/conversation.js +0 -1
  1418. package/dist/translations/ro/data.js +0 -1
  1419. package/dist/translations/ro/forms.js +0 -1
  1420. package/dist/translations/ro/layout.js +0 -1
  1421. package/dist/translations/ro/media.js +0 -1
  1422. package/dist/translations/ro/overlays.js +0 -1
  1423. package/dist/translations/ro/retrieval.js +0 -1
  1424. package/dist/translations/ro/shared.js +0 -1
  1425. package/dist/translations/ro/utility.js +0 -1
  1426. package/dist/translations/ro/viewers.js +0 -5
  1427. package/dist/translations/ro.js +0 -1
  1428. package/dist/translations/ru/agent-tools.js +0 -1
  1429. package/dist/translations/ru/charts.js +0 -1
  1430. package/dist/translations/ru/conversation.js +0 -1
  1431. package/dist/translations/ru/data.js +0 -1
  1432. package/dist/translations/ru/forms.js +0 -1
  1433. package/dist/translations/ru/layout.js +0 -1
  1434. package/dist/translations/ru/media.js +0 -1
  1435. package/dist/translations/ru/overlays.js +0 -1
  1436. package/dist/translations/ru/retrieval.js +0 -1
  1437. package/dist/translations/ru/shared.js +0 -1
  1438. package/dist/translations/ru/utility.js +0 -1
  1439. package/dist/translations/ru/viewers.js +0 -5
  1440. package/dist/translations/ru.js +0 -1
  1441. package/dist/translations/sd/agent-tools.js +0 -1
  1442. package/dist/translations/sd/charts.js +0 -1
  1443. package/dist/translations/sd/conversation.js +0 -1
  1444. package/dist/translations/sd/data.js +0 -1
  1445. package/dist/translations/sd/forms.js +0 -1
  1446. package/dist/translations/sd/layout.js +0 -1
  1447. package/dist/translations/sd/media.js +0 -1
  1448. package/dist/translations/sd/overlays.js +0 -1
  1449. package/dist/translations/sd/retrieval.js +0 -1
  1450. package/dist/translations/sd/shared.js +0 -1
  1451. package/dist/translations/sd/utility.js +0 -1
  1452. package/dist/translations/sd/viewers.js +0 -5
  1453. package/dist/translations/sd.js +0 -1
  1454. package/dist/translations/sl/agent-tools.js +0 -1
  1455. package/dist/translations/sl/charts.js +0 -1
  1456. package/dist/translations/sl/conversation.js +0 -1
  1457. package/dist/translations/sl/data.js +0 -1
  1458. package/dist/translations/sl/forms.js +0 -1
  1459. package/dist/translations/sl/layout.js +0 -1
  1460. package/dist/translations/sl/media.js +0 -1
  1461. package/dist/translations/sl/overlays.js +0 -1
  1462. package/dist/translations/sl/retrieval.js +0 -1
  1463. package/dist/translations/sl/shared.js +0 -1
  1464. package/dist/translations/sl/utility.js +0 -1
  1465. package/dist/translations/sl/viewers.js +0 -5
  1466. package/dist/translations/sl.js +0 -1
  1467. package/dist/translations/su/agent-tools.js +0 -1
  1468. package/dist/translations/su/charts.js +0 -1
  1469. package/dist/translations/su/conversation.js +0 -1
  1470. package/dist/translations/su/data.js +0 -1
  1471. package/dist/translations/su/forms.js +0 -1
  1472. package/dist/translations/su/layout.js +0 -1
  1473. package/dist/translations/su/media.js +0 -1
  1474. package/dist/translations/su/overlays.js +0 -1
  1475. package/dist/translations/su/retrieval.js +0 -1
  1476. package/dist/translations/su/shared.js +0 -1
  1477. package/dist/translations/su/utility.js +0 -1
  1478. package/dist/translations/su/viewers.js +0 -5
  1479. package/dist/translations/su.js +0 -1
  1480. package/dist/translations/sv/agent-tools.js +0 -1
  1481. package/dist/translations/sv/charts.js +0 -1
  1482. package/dist/translations/sv/conversation.js +0 -1
  1483. package/dist/translations/sv/data.js +0 -1
  1484. package/dist/translations/sv/forms.js +0 -1
  1485. package/dist/translations/sv/layout.js +0 -1
  1486. package/dist/translations/sv/media.js +0 -1
  1487. package/dist/translations/sv/overlays.js +0 -1
  1488. package/dist/translations/sv/retrieval.js +0 -1
  1489. package/dist/translations/sv/shared.js +0 -1
  1490. package/dist/translations/sv/utility.js +0 -1
  1491. package/dist/translations/sv/viewers.js +0 -5
  1492. package/dist/translations/sv.js +0 -1
  1493. package/dist/translations/sw/agent-tools.js +0 -1
  1494. package/dist/translations/sw/charts.js +0 -1
  1495. package/dist/translations/sw/conversation.js +0 -1
  1496. package/dist/translations/sw/data.js +0 -1
  1497. package/dist/translations/sw/forms.js +0 -1
  1498. package/dist/translations/sw/layout.js +0 -1
  1499. package/dist/translations/sw/media.js +0 -1
  1500. package/dist/translations/sw/overlays.js +0 -1
  1501. package/dist/translations/sw/retrieval.js +0 -1
  1502. package/dist/translations/sw/shared.js +0 -1
  1503. package/dist/translations/sw/utility.js +0 -1
  1504. package/dist/translations/sw/viewers.js +0 -5
  1505. package/dist/translations/sw.js +0 -1
  1506. package/dist/translations/ta/agent-tools.js +0 -1
  1507. package/dist/translations/ta/charts.js +0 -1
  1508. package/dist/translations/ta/conversation.js +0 -1
  1509. package/dist/translations/ta/data.js +0 -1
  1510. package/dist/translations/ta/forms.js +0 -1
  1511. package/dist/translations/ta/layout.js +0 -1
  1512. package/dist/translations/ta/media.js +0 -1
  1513. package/dist/translations/ta/overlays.js +0 -1
  1514. package/dist/translations/ta/retrieval.js +0 -1
  1515. package/dist/translations/ta/shared.js +0 -1
  1516. package/dist/translations/ta/utility.js +0 -1
  1517. package/dist/translations/ta/viewers.js +0 -5
  1518. package/dist/translations/ta.js +0 -1
  1519. package/dist/translations/te/agent-tools.js +0 -1
  1520. package/dist/translations/te/charts.js +0 -1
  1521. package/dist/translations/te/conversation.js +0 -1
  1522. package/dist/translations/te/data.js +0 -1
  1523. package/dist/translations/te/forms.js +0 -1
  1524. package/dist/translations/te/layout.js +0 -1
  1525. package/dist/translations/te/media.js +0 -1
  1526. package/dist/translations/te/overlays.js +0 -1
  1527. package/dist/translations/te/retrieval.js +0 -1
  1528. package/dist/translations/te/shared.js +0 -1
  1529. package/dist/translations/te/utility.js +0 -1
  1530. package/dist/translations/te/viewers.js +0 -5
  1531. package/dist/translations/te.js +0 -1
  1532. package/dist/translations/th/agent-tools.js +0 -1
  1533. package/dist/translations/th/charts.js +0 -1
  1534. package/dist/translations/th/conversation.js +0 -1
  1535. package/dist/translations/th/data.js +0 -1
  1536. package/dist/translations/th/forms.js +0 -1
  1537. package/dist/translations/th/layout.js +0 -1
  1538. package/dist/translations/th/media.js +0 -1
  1539. package/dist/translations/th/overlays.js +0 -1
  1540. package/dist/translations/th/retrieval.js +0 -1
  1541. package/dist/translations/th/shared.js +0 -1
  1542. package/dist/translations/th/utility.js +0 -1
  1543. package/dist/translations/th/viewers.js +0 -5
  1544. package/dist/translations/th.js +0 -1
  1545. package/dist/translations/tl/agent-tools.js +0 -1
  1546. package/dist/translations/tl/charts.js +0 -1
  1547. package/dist/translations/tl/conversation.js +0 -1
  1548. package/dist/translations/tl/data.js +0 -1
  1549. package/dist/translations/tl/forms.js +0 -1
  1550. package/dist/translations/tl/layout.js +0 -1
  1551. package/dist/translations/tl/media.js +0 -1
  1552. package/dist/translations/tl/overlays.js +0 -1
  1553. package/dist/translations/tl/retrieval.js +0 -1
  1554. package/dist/translations/tl/shared.js +0 -1
  1555. package/dist/translations/tl/utility.js +0 -1
  1556. package/dist/translations/tl/viewers.js +0 -5
  1557. package/dist/translations/tl.js +0 -1
  1558. package/dist/translations/tr/agent-tools.js +0 -1
  1559. package/dist/translations/tr/charts.js +0 -1
  1560. package/dist/translations/tr/conversation.js +0 -1
  1561. package/dist/translations/tr/data.js +0 -1
  1562. package/dist/translations/tr/forms.js +0 -1
  1563. package/dist/translations/tr/layout.js +0 -1
  1564. package/dist/translations/tr/media.js +0 -1
  1565. package/dist/translations/tr/overlays.js +0 -1
  1566. package/dist/translations/tr/retrieval.js +0 -1
  1567. package/dist/translations/tr/shared.js +0 -1
  1568. package/dist/translations/tr/utility.js +0 -1
  1569. package/dist/translations/tr/viewers.js +0 -5
  1570. package/dist/translations/tr.js +0 -1
  1571. package/dist/translations/uk/agent-tools.js +0 -1
  1572. package/dist/translations/uk/charts.js +0 -1
  1573. package/dist/translations/uk/conversation.js +0 -1
  1574. package/dist/translations/uk/data.js +0 -1
  1575. package/dist/translations/uk/forms.js +0 -1
  1576. package/dist/translations/uk/layout.js +0 -1
  1577. package/dist/translations/uk/media.js +0 -1
  1578. package/dist/translations/uk/overlays.js +0 -1
  1579. package/dist/translations/uk/retrieval.js +0 -1
  1580. package/dist/translations/uk/shared.js +0 -1
  1581. package/dist/translations/uk/utility.js +0 -1
  1582. package/dist/translations/uk/viewers.js +0 -5
  1583. package/dist/translations/uk.js +0 -1
  1584. package/dist/translations/ur/agent-tools.js +0 -1
  1585. package/dist/translations/ur/charts.js +0 -1
  1586. package/dist/translations/ur/conversation.js +0 -1
  1587. package/dist/translations/ur/data.js +0 -1
  1588. package/dist/translations/ur/forms.js +0 -1
  1589. package/dist/translations/ur/layout.js +0 -1
  1590. package/dist/translations/ur/media.js +0 -1
  1591. package/dist/translations/ur/overlays.js +0 -1
  1592. package/dist/translations/ur/retrieval.js +0 -1
  1593. package/dist/translations/ur/shared.js +0 -1
  1594. package/dist/translations/ur/utility.js +0 -1
  1595. package/dist/translations/ur/viewers.js +0 -5
  1596. package/dist/translations/ur.js +0 -1
  1597. package/dist/translations/uz/agent-tools.js +0 -1
  1598. package/dist/translations/uz/charts.js +0 -1
  1599. package/dist/translations/uz/conversation.js +0 -1
  1600. package/dist/translations/uz/data.js +0 -1
  1601. package/dist/translations/uz/forms.js +0 -1
  1602. package/dist/translations/uz/layout.js +0 -1
  1603. package/dist/translations/uz/media.js +0 -1
  1604. package/dist/translations/uz/overlays.js +0 -1
  1605. package/dist/translations/uz/retrieval.js +0 -1
  1606. package/dist/translations/uz/shared.js +0 -1
  1607. package/dist/translations/uz/utility.js +0 -1
  1608. package/dist/translations/uz/viewers.js +0 -5
  1609. package/dist/translations/uz.js +0 -1
  1610. package/dist/translations/vi/agent-tools.js +0 -1
  1611. package/dist/translations/vi/charts.js +0 -1
  1612. package/dist/translations/vi/conversation.js +0 -1
  1613. package/dist/translations/vi/data.js +0 -1
  1614. package/dist/translations/vi/forms.js +0 -1
  1615. package/dist/translations/vi/layout.js +0 -1
  1616. package/dist/translations/vi/media.js +0 -1
  1617. package/dist/translations/vi/overlays.js +0 -1
  1618. package/dist/translations/vi/retrieval.js +0 -1
  1619. package/dist/translations/vi/shared.js +0 -1
  1620. package/dist/translations/vi/utility.js +0 -1
  1621. package/dist/translations/vi/viewers.js +0 -5
  1622. package/dist/translations/vi.js +0 -1
  1623. package/dist/translations/yo/agent-tools.js +0 -1
  1624. package/dist/translations/yo/charts.js +0 -1
  1625. package/dist/translations/yo/conversation.js +0 -1
  1626. package/dist/translations/yo/data.js +0 -1
  1627. package/dist/translations/yo/forms.js +0 -1
  1628. package/dist/translations/yo/layout.js +0 -1
  1629. package/dist/translations/yo/media.js +0 -1
  1630. package/dist/translations/yo/overlays.js +0 -1
  1631. package/dist/translations/yo/retrieval.js +0 -1
  1632. package/dist/translations/yo/shared.js +0 -1
  1633. package/dist/translations/yo/utility.js +0 -1
  1634. package/dist/translations/yo/viewers.js +0 -5
  1635. package/dist/translations/yo.js +0 -1
  1636. package/dist/translations/zh-CN/agent-tools.js +0 -1
  1637. package/dist/translations/zh-CN/charts.js +0 -1
  1638. package/dist/translations/zh-CN/conversation.js +0 -1
  1639. package/dist/translations/zh-CN/data.js +0 -1
  1640. package/dist/translations/zh-CN/forms.js +0 -1
  1641. package/dist/translations/zh-CN/layout.js +0 -1
  1642. package/dist/translations/zh-CN/media.js +0 -1
  1643. package/dist/translations/zh-CN/overlays.js +0 -1
  1644. package/dist/translations/zh-CN/retrieval.js +0 -1
  1645. package/dist/translations/zh-CN/shared.js +0 -1
  1646. package/dist/translations/zh-CN/utility.js +0 -1
  1647. package/dist/translations/zh-CN/viewers.js +0 -5
  1648. package/dist/translations/zh-CN.js +0 -1
  1649. package/dist/translations/zh-TW/agent-tools.js +0 -1
  1650. package/dist/translations/zh-TW/charts.js +0 -1
  1651. package/dist/translations/zh-TW/conversation.js +0 -1
  1652. package/dist/translations/zh-TW/data.js +0 -1
  1653. package/dist/translations/zh-TW/forms.js +0 -1
  1654. package/dist/translations/zh-TW/layout.js +0 -1
  1655. package/dist/translations/zh-TW/media.js +0 -1
  1656. package/dist/translations/zh-TW/overlays.js +0 -1
  1657. package/dist/translations/zh-TW/retrieval.js +0 -1
  1658. package/dist/translations/zh-TW/shared.js +0 -1
  1659. package/dist/translations/zh-TW/utility.js +0 -1
  1660. package/dist/translations/zh-TW/viewers.js +0 -5
  1661. package/dist/translations/zh-TW.js +0 -1
  1662. package/dist/translations/zu/agent-tools.js +0 -1
  1663. package/dist/translations/zu/charts.js +0 -1
  1664. package/dist/translations/zu/conversation.js +0 -1
  1665. package/dist/translations/zu/data.js +0 -1
  1666. package/dist/translations/zu/forms.js +0 -1
  1667. package/dist/translations/zu/layout.js +0 -1
  1668. package/dist/translations/zu/media.js +0 -1
  1669. package/dist/translations/zu/overlays.js +0 -1
  1670. package/dist/translations/zu/retrieval.js +0 -1
  1671. package/dist/translations/zu/shared.js +0 -1
  1672. package/dist/translations/zu/utility.js +0 -1
  1673. package/dist/translations/zu/viewers.js +0 -5
  1674. package/dist/translations/zu.js +0 -1
  1675. package/vscode-css-data.json +0 -1
  1676. package/vscode-html-data.json +0 -1
  1677. package/web-types.json +0 -1
@@ -1,4 +1,4 @@
1
- import{VOID_HTML_TAGS,camelCase,commentRanges,finalizeEdits,findTagEnd,kebabCase,lineStarts,localMigrationKey,locationAt,memberStyle,moduleSpecifierContext,parseNamedModuleBindings,parseTagAttributes,regexEscape,reportEntry,scanAllOpeningTags,scanLocalMigrationHazards,serializeLocalDefault,skipBalanced}from"./migration-analysis.mjs";import{invariant}from"./migration-contract.mjs";import{htmlCommentEnd}from"./html-comments.mjs";const RENAME_REVIEW="RENAME_REVIEW",RENAME_TARGET_SHARED_REVIEW="RENAME_TARGET_SHARED_REVIEW",NAME_GAINED_OWNER_REVIEW="NAME_GAINED_OWNER_REVIEW",POLARITY_REVIEW="POLARITY_REVIEW",DETAIL_SHAPE_REVIEW="DETAIL_SHAPE_REVIEW",DETAIL_FIELD_REVIEW="DETAIL_FIELD_REVIEW",DEPRECATED_MEMBER_REVIEW="DEPRECATED_MEMBER_REVIEW",DEPRECATED_CONTENT_REVIEW="DEPRECATED_CONTENT_REVIEW",RENAME_CONFLICT_REVIEW="RENAME_CONFLICT_REVIEW",UNUSED_ACKNOWLEDGEMENT="UNUSED_ACKNOWLEDGEMENT",REVIEW_ACKNOWLEDGEMENT=/lyra-migrate-reviewed:\s*([^\n]*)/g,ACKNOWLEDGEMENT_TOKEN=/^([A-Z][A-Z0-9_]*):(\S+)$/,DEFAULT_SLOT_LABEL="#default",LISTENER_CALL_BEFORE=/(?:\b(?:add|remove)EventListener|\bHostListener)\s*\(\s*$/,LISTENER_RECEIVER_BEFORE=/([A-Za-z_$][\w$]*(?:\s*(?:\?\.|\.)\s*#?[A-Za-z_$][\w$]*|\s*\([^()\n]*\)|\s*!(?!=))*)\s*(?:\?\.|\.)\s*(?:add|remove)EventListener\s*\(\s*$/,LISTENER_HANDLER_AFTER=/^\s*,\s*([A-Za-z_$][\w$]*(?:\s*(?:\?\.|\.)\s*#?[A-Za-z_$][\w$]*)*)\s*[,)]/,EVENT_CONSTRUCTION=/\bnew\s+(?:CustomEvent|Event)\s*(?:<[^>\n]+>)?\(\s*(['"`])(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1/g,TAG_API_CALL_BEFORE=/(?:\b(?:createElement|querySelector(?:All)?|closest|matches|unsafeStatic|literal)|\bcustomElements\s*\.\s*(?:get|whenDefined|define))\s*(?:<[^>\n]+>)?\(\s*$/,ANCHORED_MEMBER=/\b(?:querySelector|closest|createElement)\s*(?:<[^>\n]+>)?\(\s*(['"`])(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1\s*\)\s*!?\s*(?:\?\.|\.)\s*([A-Za-z_$][\w$]*)/g,ATTRIBUTE_METHODS=new Set(["setAttribute","getAttribute","hasAttribute","removeAttribute","toggleAttribute"]),LISTENER_METHODS=new Set(["addEventListener","removeEventListener"]),STYLESHEET_FILE=/\.(?:css|scss|sass|less|pcss|styl)$/i,MARKUP_FILE=/\.(?:html?|xhtml|md|markdown|vue|svelte)$/i,ATTRIBUTE_SEMANTICS_FILE=/\.(?:html?|xhtml|md|markdown)$/i,LIT_TEMPLATE_FILE=/\.(?:[cm]?[jt]s)$/i,SELECTOR_LOOKBEHIND=256,ackName=member=>member===""?DEFAULT_SLOT_LABEL:String(member);function mergeRanges(ranges){const merged=[];for(const[start,end]of[...ranges].sort((left,right)=>left[0]-right[0])){const last=merged.at(-1);last&&start<=last[1]?last[1]=Math.max(last[1],end):merged.push([start,end])}return merged}function rangeTester(merged){return offset=>{let low=0,high=merged.length-1;for(;low<=high;){const middle=low+high>>1;if(merged[middle][1]<=offset)low=middle+1;else if(merged[middle][0]>offset)high=middle-1;else return!0}return!1}}function templateLiteralEnd(text,open){let index=open+1;for(;index<text.length;){const character=text[index];if(character==="\\")index+=2;else{if(character==="`")return index+1;character==="$"&&text[index+1]==="{"?index=templateExpressionEnd(text,index+2):index+=1}}return text.length}function templateExpressionEnd(text,index){let depth=1;for(;index<text.length;){const character=text[index];if(character==="`"){index=templateLiteralEnd(text,index);continue}if(character==='"'||character==="'"){for(index+=1;index<text.length&&text[index]!==character&&text[index]!==`
1
+ import{VOID_HTML_TAGS,camelCase,commentRanges,finalizeEdits,findTagEnd,kebabCase,lineStarts,localMigrationKey,locationAt,memberStyle,moduleSpecifierContext,parseNamedModuleBindings,parseTagAttributes,regexEscape,reportEntry,scanAllOpeningTags,scanLocalMigrationHazards,serializeLocalDefault,skipBalanced}from"./migration-analysis.mjs";import{invariant}from"./migration-contract.mjs";import{htmlCommentEnd}from"./html-comments.mjs";import{analyzeThemeScopes}from"./migration-theme-scopes.mjs";const RENAME_REVIEW="RENAME_REVIEW",RENAME_TARGET_SHARED_REVIEW="RENAME_TARGET_SHARED_REVIEW",NAME_GAINED_OWNER_REVIEW="NAME_GAINED_OWNER_REVIEW",POLARITY_REVIEW="POLARITY_REVIEW",DETAIL_SHAPE_REVIEW="DETAIL_SHAPE_REVIEW",DETAIL_FIELD_REVIEW="DETAIL_FIELD_REVIEW",DEPRECATED_MEMBER_REVIEW="DEPRECATED_MEMBER_REVIEW",DEPRECATED_CONTENT_REVIEW="DEPRECATED_CONTENT_REVIEW",RENAME_CONFLICT_REVIEW="RENAME_CONFLICT_REVIEW",UNUSED_ACKNOWLEDGEMENT="UNUSED_ACKNOWLEDGEMENT",REVIEW_ACKNOWLEDGEMENT=/lyra-migrate-reviewed:\s*([^\n]*)/g,ACKNOWLEDGEMENT_TOKEN=/^([A-Z][A-Z0-9_]*):(\S+)$/,DEFAULT_SLOT_LABEL="#default",LISTENER_CALL_BEFORE=/(?:\b(?:add|remove)EventListener|\bHostListener)\s*\(\s*$/,LISTENER_RECEIVER_BEFORE=/([A-Za-z_$][\w$]*(?:\s*(?:\?\.|\.)\s*#?[A-Za-z_$][\w$]*|\s*\([^()\n]*\)|\s*!(?!=))*)\s*(?:\?\.|\.)\s*(?:add|remove)EventListener\s*\(\s*$/,LISTENER_HANDLER_AFTER=/^\s*,\s*([A-Za-z_$][\w$]*(?:\s*(?:\?\.|\.)\s*#?[A-Za-z_$][\w$]*)*)\s*[,)]/,EVENT_CONSTRUCTION=/\bnew\s+(?:CustomEvent|Event)\s*(?:<[^>\n]+>)?\(\s*(['"`])(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1/g,TAG_API_CALL_BEFORE=/(?:\b(?:createElement|querySelector(?:All)?|closest|matches|unsafeStatic|literal)|\bcustomElements\s*\.\s*(?:get|whenDefined|define))\s*(?:<[^>\n]+>)?\(\s*$/,ANCHORED_MEMBER=/\b(?:querySelector|closest|createElement)\s*(?:<[^>\n]+>)?\(\s*(['"`])(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1\s*\)\s*!?\s*(?:\?\.|\.)\s*([A-Za-z_$][\w$]*)/g,ATTRIBUTE_METHODS=new Set(["setAttribute","getAttribute","hasAttribute","removeAttribute","toggleAttribute"]),LISTENER_METHODS=new Set(["addEventListener","removeEventListener"]),STYLESHEET_FILE=/\.(?:css|scss|sass|less|pcss|styl)$/i,MARKUP_FILE=/\.(?:html?|xhtml|md|markdown|vue|svelte)$/i,ATTRIBUTE_SEMANTICS_FILE=/\.(?:html?|xhtml|md|markdown)$/i,LIT_TEMPLATE_FILE=/\.(?:[cm]?[jt]s)$/i,SELECTOR_LOOKBEHIND=256,ackName=member=>member===""?DEFAULT_SLOT_LABEL:String(member);function mergeRanges(ranges){const merged=[];for(const[start,end]of[...ranges].sort((left,right)=>left[0]-right[0])){const last=merged.at(-1);last&&start<=last[1]?last[1]=Math.max(last[1],end):merged.push([start,end])}return merged}function rangeTester(merged){return offset=>{let low=0,high=merged.length-1;for(;low<=high;){const middle=low+high>>1;if(merged[middle][1]<=offset)low=middle+1;else if(merged[middle][0]>offset)high=middle-1;else return!0}return!1}}function templateLiteralEnd(text,open){let index=open+1;for(;index<text.length;){const character=text[index];if(character==="\\")index+=2;else{if(character==="`")return index+1;character==="$"&&text[index+1]==="{"?index=templateExpressionEnd(text,index+2):index+=1}}return text.length}function templateExpressionEnd(text,index){let depth=1;for(;index<text.length;){const character=text[index];if(character==="`"){index=templateLiteralEnd(text,index);continue}if(character==='"'||character==="'"){for(index+=1;index<text.length&&text[index]!==character&&text[index]!==`
2
2
  `;)index+=text[index]==="\\"?2:1;index+=1;continue}if(character==="{")depth+=1;else if(character==="}"&&--depth===0)return index+1;index+=1}return text.length}function templateLiteralRanges(text,inComment){const ranges=[];let index=0;for(;index<text.length;){const character=text[index];if(inComment(index))index+=1;else if(character==="`"){const end=templateLiteralEnd(text,index);ranges.push([index,end]),index=end}else if(character==='"'||character==="'"){for(index+=1;index<text.length&&text[index]!==character&&text[index]!==`
3
3
  `;)index+=text[index]==="\\"?2:1;index+=1}else index+=1}return ranges}function taggedTemplateRanges(text,tags,inComment){const ranges=[];for(const match of text.matchAll(new RegExp(`\\b(?:${tags.join("|")})\\s*\``,"g"))){if(inComment(match.index))continue;const open=match.index+match[0].length-1;ranges.push([open,templateLiteralEnd(text,open)])}return mergeRanges(ranges)}function renameIgnoredRanges(text,file){const base=mergeRanges(commentRanges(text)),inBase=rangeTester(base),extra=[],addHtmlComments=(start,end)=>{let index=text.indexOf("<!--",start);for(;index>=0&&index<end;){const finish=htmlCommentEnd(text,index,end);inBase(index)||extra.push([index,finish]),index=text.indexOf("<!--",finish)}};if(MARKUP_FILE.test(file))addHtmlComments(0,text.length);else if(!STYLESHEET_FILE.test(file))for(const[start,end]of templateLiteralRanges(text,inBase))addHtmlComments(start,end);return mergeRanges([...base,...extra])}function scanReviewAcknowledgements(text,ignoredRanges,starts,openingTokens){const tokenAt=new Map(openingTokens.map(token=>[token.start,token])),records=[],byLine=new Map,cover=(line,record)=>{const list=byLine.get(line)??[];list.includes(record)||list.push(record),byLine.set(line,list)};for(const[start,end]of ignoredRanges){const body=text.slice(start,end);if(!body.includes("lyra-migrate-reviewed:"))continue;const firstLine=locationAt(starts,start).line,lastLine=locationAt(starts,Math.max(start,end-1)).line;let next=end;for(;next<text.length&&/[\s}]/.test(text[next]);)next+=1;const followingTag=tokenAt.get(next),standalone=/^\s*\{?\s*$/.test(text.slice(starts[firstLine-1],start));for(const match of body.matchAll(REVIEW_ACKNOWLEDGEMENT)){const tokens=match[1].replace(/(?:\*\/|--!?>)[\s\S]*$/,"").split(/[\s,]+/).filter(Boolean),record={offset:start+match.index,entries:tokens.map(token=>{const parsed=ACKNOWLEDGEMENT_TOKEN.exec(token);return{token,code:parsed?.[1]??null,name:parsed?.[2]??null,used:!1}})};records.push(record);for(let line=firstLine;line<=lastLine;line+=1)cover(line,record);if(standalone&&cover(lastLine+1,record),followingTag){const tagLast=locationAt(starts,followingTag.end).line;for(let line=locationAt(starts,followingTag.start).line;line<=tagLast;line+=1)cover(line,record)}}}return{consume(line,code,member){const name=ackName(member);for(const record of byLine.get(line)??[]){const entry=record.entries.find(candidate=>candidate.code===code&&candidate.name===name);if(entry)return entry.used=!0,!0}return!1},unused:()=>records.flatMap(record=>record.entries.filter(entry=>!entry.used).map(entry=>({offset:record.offset,entry})))}}function quotedStringRanges(text,inComment){const ranges=[];let index=0;for(;index<text.length;){const quote=text[index];if(inComment(index)||quote!=='"'&&quote!=="'"&&quote!=="`"){index+=1;continue}const start=index;for(index+=1;index<text.length&&text[index]!==quote&&(quote==="`"||text[index]!==`
4
- `);)text[index]==="\\"&&(index+=1),index+=1;index+=1,quote!=="`"&&ranges.push([start,index])}return ranges}function stylesheetRanges(text,file,inComment){if(STYLESHEET_FILE.test(file))return[[0,text.length]];const ranges=[];for(const match of text.matchAll(/<style(?:\s[^>]*)?>[\s\S]*?<\/style\s*>/gi))ranges.push([match.index,match.index+match[0].length]);return mergeRanges([...ranges,...taggedTemplateRanges(text,["css"],inComment)])}function compoundTypeBefore(text,index){let start=index,brackets=0,parens=0;const limit=Math.max(0,index-SELECTOR_LOOKBEHIND);for(;start>limit;){const character=text[start-1];if(character==="]")brackets+=1;else if(character==="["){if(brackets===0)break;brackets-=1}else if(character===")")parens+=1;else if(character==="("){if(parens===0)break;parens-=1}else if(brackets===0&&parens===0&&/[\s,>+~{};'"`]/.test(character))break;start-=1}if(start===limit&&limit>0)return null;const compound=text.slice(start,index);return(/^:global\(\s*([A-Za-z][\w-]*)\s*\)$/.exec(compound)??/^([A-Za-z][\w-]*)/.exec(compound))?.[1].toLowerCase()??null}function mentionedTags(text,tags,inComment){const found=new Set;for(const tag of tags)for(const match of text.matchAll(new RegExp(`(?<![\\w-])${tag}(?![\\w-])`,"g")))if(!inComment(match.index)){found.add(tag);break}return found}function elementPairs(text,tag,inComment){const pairs=[],stack=[];for(const match of text.matchAll(new RegExp(`<(/)?${tag}(?=[\\s/>])`,"g"))){if(inComment(match.index))continue;const end=findTagEnd(text,match.index+match[0].length);if(!(end<0))if(match[1]){const opening=stack.pop();opening&&pairs.push({opening,closingStart:match.index})}else/\/\s*>$/.test(text.slice(match.index,end+1))||stack.push({start:match.index,end})}return pairs}function directChildTokens(text,start,end,inComment){const children=[],stack=[],pattern=/<(\/)?([A-Za-z][\w.:-]*)(?=[\s/>])/g;pattern.lastIndex=start;for(let match=pattern.exec(text);match&&match.index<end;match=pattern.exec(text)){if(inComment(match.index))continue;const tokenEnd=findTagEnd(text,match.index+match[0].length);if(tokenEnd<0||tokenEnd>=end)break;const name=match[2].toLowerCase();if(match[1]){const index=stack.lastIndexOf(name);index>=0&&(stack.length=index)}else{const nameStart=match.index+1;stack.length===0&&children.push({tag:name,start:match.index,nameStart,nameEnd:nameStart+match[2].length,end:tokenEnd}),!/\/\s*>$/.test(text.slice(match.index,tokenEnd+1))&&!VOID_HTML_TAGS.has(name)&&stack.push(name)}pattern.lastIndex=tokenEnd+1}return children}function openingTagBraceGroups(text,token){const groups=[];let index=token.nameEnd,quote=null;for(;index<token.end;){const character=text[index];if(quote){character==="\\"?index+=1:character===quote&&(quote=null),index+=1;continue}if(character==='"'||character==="'")quote=character;else if(character==="{"){const end=skipBalanced(text,index,"{","}");!/=\s*$/.test(text.slice(token.nameEnd,index))&&text[index-1]!=="$"&&groups.push({start:index,end,body:text.slice(index+1,end-1).trim()}),index=end;continue}index+=1}return groups}function markupEventName(rawName){if(/^\(lr-[a-z0-9-]+\)$/.test(rawName))return{name:rawName.slice(1,-1),offset:1};if(/^onlr-/.test(rawName))return{name:rawName.slice(2).replace(/Capture$/,""),offset:2};for(const[prefix,separator]of[["@","."],["v-on:","."],["on:","|"]])if(rawName.startsWith(prefix))return{name:rawName.slice(prefix.length).split(separator)[0],offset:prefix.length};return null}function markupMemberBinding(attribute){const raw=attribute.rawName;let match;if(raw.startsWith("?"))return{form:"attribute",offset:1,name:raw.slice(1),dynamic:!0};if(match=/^\[attr\.([^\]]+)\]$/.exec(raw))return{form:"attribute",offset:6,name:match[1],dynamic:!0};if(match=/^\[([A-Za-z_$][\w$]*)\]$/.exec(raw))return{form:"property",offset:1,name:match[1],dynamic:!0};if(raw.startsWith("."))return{form:"property",offset:1,name:raw.slice(1),dynamic:!0};if(raw.startsWith("bind:"))return{form:"property",offset:5,name:raw.slice(5).split("|")[0],dynamic:!0};for(const prefix of["v-bind:",":"])if(raw.startsWith(prefix))return{form:"member",offset:prefix.length,name:raw.slice(prefix.length).split(".")[0],dynamic:!0};if(!/^[A-Za-z][\w-]*$/.test(raw)||/^onlr-/.test(raw))return null;const dynamic=attribute.valueKind==="expression"||/\$\{|\{\{/.test(attribute.value??"");return{form:/[A-Z]/.test(raw)?"property":"attribute",offset:0,name:raw,dynamic}}function attributeEnd(text,attribute){if(attribute.valueEnd===null)return attribute.nameEnd;const quote=text[attribute.valueStart-1];return(quote==='"'||quote==="'")&&text[attribute.valueEnd]===quote?attribute.valueEnd+1:attribute.valueEnd}function boundMemberNames(attributes){const names=new Set;for(const attribute of attributes){const binding=markupMemberBinding(attribute);binding&&names.add(kebabCase(binding.name))}return names}function sortReportEntries(entries,codeKey){return entries.sort((left,right)=>left.line-right.line||left.column-right.column||String(left[codeKey]).localeCompare(String(right[codeKey])))}function reportModuleReviews(text,file,reviews,openingTokens,inComment,warn){if(!reviews.length)return;const packageName="@aceshooting/lyra-ui",specifierOf=subpath=>`${packageName}${subpath.slice(1)}`,named=reviews.filter(entry=>["function","type","constant","class"].includes(entry.kind)),report=(offset,review,context="")=>warn(offset,{member:review.name,code:"DEPRECATED_MODULE_REVIEW",target:review.replacement,message:`${context}${review.kind} ${review.module?`${review.module}#`:""}${review.name} ${review.removedIn?`was removed in ${review.removedIn}`:`is deprecated and scheduled for removal in ${review.removalNotBefore}`}; review ${review.replacement}.`}),namedFor=specifier=>named.filter(entry=>specifier===packageName||specifier===specifierOf(entry.module)),strings=quotedStringRanges(text,inComment),templates=templateLiteralRanges(text,inComment),stringStarts=new Set([...strings,...templates.filter(([start,end])=>!text.slice(start,end).includes("${"))].map(([start])=>start)),inString=rangeTester(strings),inLiteral=rangeTester(mergeRanges([...strings,...templates])),inCss=rangeTester(stylesheetRanges(text,file,inComment)),inMarkup=offset=>openingTokens.some(token=>offset>=token.nameEnd&&offset<token.end),opaque=(offset,specifier,entries)=>{entries.length&&warn(offset,{member:specifier,code:"MODULE_NAMESPACE_REVIEW",target:[...new Set(entries.map(entry=>entry.replacement))].join("; "),message:`Review the namespace or dynamic import of ${specifier} for deprecated exports ${entries.map(entry=>entry.name).join(", ")}. They cannot be safely renamed through aliases; the earliest removal is ${entries.map(entry=>entry.removalNotBefore).sort()[0]}.`})},bindings=/\b(?:import|export)\s+(?:type\s+)?(?:[$A-Z_a-z][$\w]*\s*,\s*)?\{(?<bindings>[^{};]*)\}\s*from\s*(?<quote>['"])(?<source>@aceshooting\/lyra-ui(?:\/[^'"\s]+)?)\k<quote>/g,handledSpecifiers=new Set;for(const match of text.matchAll(bindings)){if(inComment(match.index)||inLiteral(match.index))continue;const available=namedFor(match.groups.source),bodyStart=match.index+match[0].indexOf("{")+1;for(const binding of parseNamedModuleBindings(match.groups.bindings)){const review=available.find(entry=>entry.name===binding.imported);if(!review)continue;const member=[...match.groups.bindings.matchAll(new RegExp(`(?<![$\\w])${regexEscape(binding.imported)}(?![$\\w])`,"g"))].find(candidate=>!inComment(bodyStart+candidate.index));member&&report(bodyStart+member.index,review)}handledSpecifiers.add(match.index+match[0].lastIndexOf(match.groups.source)-1)}for(const match of text.matchAll(/(['"])(@aceshooting\/lyra-ui(?:\/[^'"\s]+)?)\1/g)){if(inComment(match.index))continue;const markup=inMarkup(match.index),css=inCss(match.index);if(!stringStarts.has(match.index)&&!markup&&!css)continue;const before=text.slice(Math.max(0,match.index-500),match.index),context=moduleSpecifierContext(text,match.index),cssImport=css&&/@import\s+(?:url\(\s*)?$/.test(before),resource=markup&&/\b(?:href|src)\s*=\s*$/.test(before);if(!context&&!cssImport&&!resource)continue;const specifier=match[2];for(const review of reviews)(review.kind==="entry-point"||review.kind==="stylesheet")&&specifier===specifierOf(review.name)&&report(match.index+1,review);if(handledSpecifiers.has(match.index)||!context||context.sideEffect)continue;const available=namedFor(specifier);if(context.kind==="binding"&&/\bexport\s+(?:type\s+)?\*\s*(?:as\s+[$A-Z_a-z][$\w]*\s*)?from\s*$/.test(before))for(const review of available)report(match.index+1,review,"This re-export includes ");else opaque(match.index+1,specifier,available)}for(const match of text.matchAll(/@import\s+url\(\s*(@aceshooting\/lyra-ui\/[^\s)'";]+)\s*\)/g))if(!(inComment(match.index)||!inCss(match.index)))for(const review of reviews)review.kind==="stylesheet"&&match[1]===specifierOf(review.name)&&report(match.index+match[0].indexOf(match[1]),review);for(const review of reviews)if(review.kind==="window-event")for(const match of text.matchAll(new RegExp(`(['"\\x60])(${regexEscape(review.name)})\\1`,"g"))){if(inComment(match.index))continue;const before=text.slice(Math.max(0,match.index-200),match.index);(LISTENER_CALL_BEFORE.test(before)||/\bnew\s+(?:CustomEvent|Event)\s*(?:<[^>\n]+>)?\(\s*$/.test(before))&&stringStarts.has(match.index)&&report(match.index+1,review)}else if(review.kind==="root-attribute"){const attributeOffsets=new Set;for(const token of openingTokens)for(const attribute of parseTagAttributes(text,token))attribute.rawName.replace(/^\[attr\.(.+)\]$/,"$1").replace(/^(?:v-bind:|bind:|[?:])/,"")===review.name&&!inString(attribute.nameStart)&&attributeOffsets.add(attribute.nameStart+attribute.rawName.indexOf(review.name));for(const match of text.matchAll(new RegExp(`(?<![\\w-])${regexEscape(review.name)}(?![\\w-])`,"g"))){if(inComment(match.index))continue;const offset=match.index,before=text.slice(Math.max(0,offset-180),offset),after=text.slice(offset+review.name.length),literalApi=/\b(?:getAttribute|setAttribute|hasAttribute|removeAttribute|toggleAttribute)\s*\(\s*['"`]$/.test(before),selector=/\[\s*$/.test(before)&&/^\s*(?:[~|^$*]?=|\])/.test(after),markup=attributeOffsets.has(offset);(literalApi&&stringStarts.has(offset-1)||selector&&(inCss(offset)||inString(offset))||markup)&&report(offset,review)}const datasetName=review.name.slice(5).replace(/-([a-z])/g,(_match,letter)=>letter.toUpperCase()),dataset=new RegExp(`\\bdataset\\s*(?:\\.\\s*${regexEscape(datasetName)}\\b|\\[\\s*(['"])${regexEscape(datasetName)}\\1\\s*\\])`,"g");for(const match of text.matchAll(dataset))!inComment(match.index)&&!inLiteral(match.index)&&report(match.index,review)}}function migrateRenameText(original,contract,options){const file=options.file??"<memory>",origin=options.origin,profile=contract.renameProfiles.get(origin);invariant(profile,`unknown migration origin ${String(origin)}`);const result={content:original,changes:[],warnings:[],acknowledged:0,usage:{webawesome:{automatic:0,manual:0},shoelace:{automatic:0,manual:0}},blockedMappings:new Set,blockedEcosystems:new Set,bareImportEcosystems:new Set,blockedLocalMigrations:new Set,constructedEvents:new Set};if(profile.isEmpty)return result;const starts=lineStarts(original),ignoredRanges=renameIgnoredRanges(original,file),inComment=rangeTester(ignoredRanges),openingTokens=scanAllOpeningTags(original,ignoredRanges,inComment),acknowledgements=scanReviewAcknowledgements(original,ignoredRanges,starts,openingTokens),litTemplates=LIT_TEMPLATE_FILE.test(file)?rangeTester(taggedTemplateRanges(original,["html","svg"],inComment)):()=>!1,inLiteral=rangeTester(mergeRanges([...quotedStringRanges(original,inComment),...templateLiteralRanges(original,inComment)])),inCss=rangeTester(stylesheetRanges(original,file,inComment)),attributeSemantics=offset=>ATTRIBUTE_SEMANTICS_FILE.test(file)||litTemplates(offset),release=`Lyra ${profile.toMajor}`,removal=`${profile.aliasRemovalMajor}.0.0`;for(const match of original.matchAll(EVENT_CONSTRUCTION))!inComment(match.index)&&profile.renamesNamed("event",match[2]).length&&result.constructedEvents.add(match[2]);const constructedEvents=new Set([...options.constructedEvents??[],...result.constructedEvents]),listenerIdentity=(quote,name)=>{const receiver=LISTENER_RECEIVER_BEFORE.exec(original.slice(Math.max(0,quote-200),quote))?.[1],handler=LISTENER_HANDLER_AFTER.exec(original.slice(quote+name.length+2,quote+name.length+202))?.[1];return receiver&&handler?`${receiver.replace(/\s+/g,"")}\0${handler.replace(/\s+/g,"")}`:null},listenedNames=new Map;if(profile.data.renames.some(entry=>entry.kind==="event"))for(const match of original.matchAll(/(['"`])(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1/g)){if(inComment(match.index)||!LISTENER_CALL_BEFORE.test(original.slice(Math.max(0,match.index-120),match.index)))continue;const identity=listenerIdentity(match.index,match[2]);identity&&listenedNames.set(identity,new Set([...listenedNames.get(identity)??[],match[2]]))}const sameHandlerListens=(quote,name)=>{if(!listenedNames.size)return!1;const names=listenedNames.get(listenerIdentity(quote,name));return!!names&&profile.renamesNamed("event",name).some(entry=>names.has(entry.to))},edits=[],seenWarnings=new Set,handledStrings=new Set,handledMembers=new Set,unique=values=>[...new Set(values)],list=values=>unique(values).join(", "),soleTag=entries=>unique(entries.map(entry=>entry.tag)).length===1?entries[0].tag:null,hint=(code,member)=>`After review, mark the site with a "lyra-migrate-reviewed: ${code}:${ackName(member)}" comment.`,rewrite=(start,end,replacement,{tag,member,action,target,message})=>{edits.push({start,end,replacement}),result.changes.push(reportEntry({textStarts:starts,file,offset:start,origin,upstreamTag:tag,upstreamMember:member,action,target,message}))},warn=(offset,{tag=null,member,code,target=null,message})=>{const key=`${offset}:${code}:${member}`;if(!seenWarnings.has(key)){if(seenWarnings.add(key),acknowledgements.consume(locationAt(starts,offset).line,code,member)){result.acknowledged+=1;return}result.warnings.push(reportEntry({textStarts:starts,file,offset,origin,upstreamTag:tag,upstreamMember:member,action:"manual-review",target,warningCode:code,message:`${message} ${hint(code,member)}`}))}},reviewMessage=review=>`${review.kind==="component"?`<${review.tag}>`:review.kind==="slot"&&review.name===""?`Content in the default slot of ${review.tag}`:`The ${review.tag} ${review.kind} ${review.name}`} ${review.removedIn?`was removed in ${review.removedIn}`:`is deprecated and scheduled for removal in ${review.removalNotBefore}`}; migrate to ${review.replacement} by hand.`,reportReview=(offset,review)=>warn(offset,{tag:review.tag,member:review.name,code:DEPRECATED_MEMBER_REVIEW,target:review.replacement,message:reviewMessage(review)}),reportPropertyChange=(offset,entry)=>warn(offset,{tag:entry.tag,member:entry.property,code:"PROPERTY_CHANGE_REVIEW",target:entry.property,message:`Review ${entry.tag}.${entry.property} for ${release}: ${entry.summary}`});reportModuleReviews(original,file,profile.data.moduleReviews,openingTokens,inComment,warn);const unownedReviews=(kind,name,offset,owner)=>{const own=owner?profile.reviewFor(owner,kind,name):null;if(own)reportReview(offset,own);else if(!profile.exposes(kind,name,owner))for(const review of profile.reviewsNamed(kind,name))reportReview(offset,review)},label=kind=>kind==="css-property"?"custom property":kind,detailNote=name=>{const details=profile.detailsNamed(name);return details.length?` Its ${release} detail also changed: ${details.map(entry=>`${entry.tag}: ${entry.summary}`).join(" ")}`:""},unownedMove=({kind,name,start,context,rewritable,action})=>{const renames=profile.renamesNamed(kind,name),targets=unique(renames.map(entry=>entry.to)),constructed=kind==="event"&&constructedEvents.has(name);if(rewritable&&!constructed&&profile.isGlobal(kind,name))return rewrite(start,start+name.length,targets[0],{tag:soleTag(renames),member:name,action,target:targets[0],message:`Rename ${name} to ${targets[0]}; every component exposing it renamed it, and no other component uses ${targets[0]}.`}),targets[0];const sourceKeepers=unique(targets.flatMap(to=>profile.sourceKeepers(kind,name,to))).filter(tag=>!renames.some(entry=>entry.tag===tag)),targetKeepers=unique(targets.flatMap(to=>profile.targetKeepers(kind,name,to))),shared=targets.length===1&&!sourceKeepers.length&&targetKeepers.length>0&&!renames.some(entry=>entry.polarity);return warn(start,{tag:soleTag(renames),member:name,code:shared?RENAME_TARGET_SHARED_REVIEW:RENAME_REVIEW,target:targets.join(" | "),message:(kind==="css-property"?"Custom properties inherit into nested components. ":context==="listener"?"This listener does not prove which element it listens to. ":"This string may name an event of any component. ")+`${list(renames.map(entry=>entry.tag))} renamed the ${label(kind)} ${name} to ${targets.join(" or ")}`+(sourceKeepers.length?`, while ${list(sourceKeepers)} still ${sourceKeepers.length===1?"uses":"use"} ${name}`:"")+(targetKeepers.length?`; ${list(targetKeepers)} already ${targetKeepers.length===1?"uses":"use"} ${targets.join(" and ")}, which this site would start reaching`:"")+(constructed?`; the scanned code also dispatches ${name} itself, so its listeners and dispatches must move together`:"")+`. Update it by hand for the components it is meant for; ${name} keeps working until ${removal}.`+(kind==="event"?detailNote(targets[0]):"")}),null},eventMove=(name,owner,rewritable=!0)=>{if(constructedEvents.has(name))return null;const own=owner?profile.renameFor(owner,"event",name):null;return own?profile.targetKeepers("event",name,own.to).length?null:own.to:!rewritable||!profile.renamesNamed("event",name).length||profile.exposes("event",name,owner)?null:profile.isGlobal("event",name)?profile.renamesNamed("event",name)[0].to:null},conflictMessage=(conflict,subject,to)=>conflict==="same-handler"?`${subject} already listens to ${to} with this same handler; renamed, the two identical registrations would collapse into one, so the handler would run once per activation instead of twice. Rename or remove this call, and its add or remove counterpart, together by hand.`:`${subject} already listens to ${to}; merge the two handlers by hand.`,eventSite=({name,start,owner,context,rewritable=!0,conflict=!1})=>{const retired=owner?profile.retiredEventFor(owner,name):null,retiredCandidates=retired?[retired]:profile.exposes("event",name,owner)?[]:profile.retiredEventsNamed(name);retiredCandidates.length&&warn(start,{tag:retired?owner:soleTag(retiredCandidates),member:name,code:"RETIRED_EVENT_REVIEW",target:unique(retiredCandidates.map(entry=>entry.replacement)).join(", "),message:`${name} is no longer dispatched by ${list(retiredCandidates.map(entry=>entry.tag))} in ${release}. `+retiredCandidates.map(entry=>`${entry.tag}: use ${entry.replacement}. ${entry.summary}`).join(" ")+" Review this listener and its matching removal together; keep unrelated events with the same spelling, check nested event targets, and merge any existing canonical listener without dropping or duplicating handler calls."});const own=owner?profile.renameFor(owner,"event",name):null;let current=name;if(own){const keepers=profile.targetKeepers("event",name,own.to);if(constructedEvents.has(name))warn(start,{tag:owner,member:name,code:RENAME_REVIEW,target:own.to,message:`Not renamed: the scanned code dispatches ${name} itself, so this listener would stop hearing it. Rename the dispatch and its listeners to ${own.to} together; ${name} keeps working until ${removal}.${detailNote(own.to)}`});else if(keepers.length)warn(start,{tag:owner,member:name,code:RENAME_TARGET_SHARED_REVIEW,target:own.to,message:`Not renamed: ${list(keepers)} also ${keepers.length===1?"dispatches":"dispatch"} ${own.to}, so this listener would start receiving their events when they are nested inside this ${owner}. Rename it by hand and ignore events whose target is not this ${owner}; ${name} keeps working until ${removal}.${detailNote(own.to)}`});else if(conflict)warn(start,{tag:owner,member:name,code:RENAME_CONFLICT_REVIEW,target:own.to,message:`${conflictMessage(conflict,`This ${owner}`,own.to)} ${name} keeps working until ${removal}.`});else{const narrowed=profile.sourceKeepers("event",name,own.to).filter(tag=>tag!==owner);rewrite(start,start+name.length,own.to,{tag:owner,member:name,action:"rewrite-event",target:own.to,message:`Rename the ${owner} event ${name} to ${own.to}.`+(narrowed.length?` ${list(narrowed)} still ${narrowed.length===1?"dispatches":"dispatch"} ${name}; this listener stops hearing theirs from nested elements.`:"")}),current=own.to}}else profile.renamesNamed("event",name).length&&!profile.exposes("event",name,owner)&&(conflict?warn(start,{tag:soleTag(profile.renamesNamed("event",name)),member:name,code:RENAME_CONFLICT_REVIEW,target:profile.renamesNamed("event",name)[0].to,message:conflictMessage(conflict,conflict==="same-handler"?"This receiver":"This element",profile.renamesNamed("event",name)[0].to)}):current=unownedMove({kind:"event",name,start,context,rewritable,action:"rewrite-event"})??name);const details=profile.detailsNamed(current),ownDetail=owner?profile.detailFor(owner,current):null;if(ownDetail||details.length&&!profile.exposes("event",current,owner)){const affected=ownDetail?[ownDetail]:details;warn(start,{tag:ownDetail?owner:soleTag(affected),member:current,code:DETAIL_SHAPE_REVIEW,target:current,message:`The ${current} event detail changed in ${release} and cannot be aliased: `+affected.map(entry=>`${entry.tag}: ${entry.summary}`).join(" ")+` Update this handler if it reads the detail of ${ownDetail?`the ${owner} event`:"one of these components"}.`})}const gained=current===name?profile.gainedOwners("event",name):[];gained.length&&!profile.exposes("event",name,owner)&&warn(start,{tag:soleTag(gained.map(tag=>({tag}))),member:name,code:NAME_GAINED_OWNER_REVIEW,target:name,message:`In ${release}, ${list(gained)} also ${gained.length===1?"dispatches":"dispatch"} ${name}. This ${context} does not prove which element it listens to, so it may start receiving those events; ignore them by event target if it should not.`}),unownedReviews("event",name,start,owner)},reportedDetailFieldOffsets=new Set,detailFieldAccess=/\b([A-Za-z_$][\w$]*)\s*(?:\?\.|\.)\s*detail\s*(?:\?\.|\.)\s*(open|collapsed)\b/g,reportDetailField=(field,start,owner=null,event=null)=>{if(reportedDetailFieldOffsets.has(start))return;const exact=owner&&event?profile.detailFieldFor(owner,event):null;if(exact&&exact.field===field){const target=exact.relation==="equal"?"detail.expanded":"!detail.expanded",relation=exact.relation==="equal"?"carries the same value as":"is the inverse of",removal2=exact.removedIn?` It was removed in ${exact.removedIn}.`:" This notice does not assert that the field was removed.";warn(start,{tag:owner,member:field,code:DETAIL_FIELD_REVIEW,target,message:`The ${owner} ${event} detail field ${field} is deprecated: it ${relation} detail.expanded (${exact.notice}). Read ${target} in this handler by hand; no field rewrite was applied.${removal2}`}),reportedDetailFieldOffsets.add(start);return}const candidates=event?profile.detailFieldsNamed(event).filter(entry=>entry.field===field):[],possible=candidates.length?candidates:(profile.data.detailFields??[]).filter(entry=>entry.field===field);if(!possible.length)return;const possibilities=[...new Set(possible.map(entry=>`${entry.tag}/${entry.event} (${entry.relation})`))];warn(start,{tag:null,member:field,code:DETAIL_FIELD_REVIEW,target:null,message:`This detail.${field} read has no proven Lyra tag and event. Matching published field contracts are ${possibilities.join(", ")}; identify the runtime detail type and migrate it by hand. No field rewrite was applied.`}),reportedDetailFieldOffsets.add(start)},inspectMarkupDetailFields=(owner,event,attribute)=>{if(attribute.valueStart===null||attribute.valueEnd===null)return;const value=original.slice(attribute.valueStart,attribute.valueEnd);for(const match of value.matchAll(detailFieldAccess)){const start=attribute.valueStart+match.index+match[0].lastIndexOf(match[2]);reportDetailField(match[2],start,owner,event)}};for(const token of openingTokens){const owner=token.tag.toLowerCase();for(const attribute of parseTagAttributes(original,token)){const event=markupEventName(attribute.rawName);event&&/^lr-/u.test(event.name)&&inspectMarkupDetailFields(owner,event.name,attribute)}}const memberSite=({owner,kind,name,start,forms,dynamic,removal:removalRange})=>{const propertyChange=forms.filter(([candidateKind])=>candidateKind==="property").map(([,candidate])=>profile.propertyChangeFor(owner,candidate)).find(Boolean);propertyChange&&reportPropertyChange(start,propertyChange);const review=forms.map(([candidateKind,candidate])=>profile.reviewFor(owner,candidateKind,candidate)).find(Boolean);review&&reportReview(start,review);const rule=forms.map(([candidateKind,candidate])=>profile.renameFor(owner,candidateKind,candidate)).find(Boolean);if(!rule)return null;if(rule.polarity==="inverted"&&(dynamic||!removalRange)){const target=kind==="binding"?memberStyle(name,rule.to):rule.to;return warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${target} is the inverse of ${name} on ${owner}, and this ${kind==="binding"?"binding":kind==="property"?"property access":"attribute binding"} is not a static attribute. Bind the negated value to ${target} by hand; ${name} keeps working until ${removal}.`}),null}return rule},renamedMembers=owner=>unique([...profile.data.renames.filter(entry=>entry.tag===owner&&["attribute","property","event"].includes(entry.kind)).map(entry=>entry.from),...profile.data.reviews.filter(entry=>entry.tag===owner&&["attribute","property","event"].includes(entry.kind)).map(entry=>entry.name),...profile.data.retiredEvents.filter(entry=>entry.tag===owner).map(entry=>entry.event),...profile.data.propertyChanges.filter(entry=>entry.tag===owner).map(entry=>entry.property)]),defaultTokens=[];for(const token of openingTokens){const owner=token.tag.toLowerCase(),attributes=parseTagAttributes(original,token),lyraOwner=profile.tags.has(owner),bound=lyraOwner?boundMemberNames(attributes):null,finalNames=new Map,planned=attributes.map(attribute=>{const event=markupEventName(attribute.rawName);let finalRaw=attribute.rawName;if(event&&/^lr-/.test(event.name)){const to=eventMove(event.name,owner);to&&(finalRaw=attribute.rawName.slice(0,event.offset)+to+attribute.rawName.slice(event.offset+event.name.length))}else if(lyraOwner){const binding=markupMemberBinding(attribute),rule=binding&&!binding.form.startsWith("member")&&profile.renameFor(owner,binding.form,binding.name);rule&&!rule.polarity&&(finalRaw=attribute.rawName.slice(0,binding.offset)+rule.to+attribute.rawName.slice(binding.offset+binding.name.length))}const key=finalRaw.toLowerCase();return finalNames.set(key,(finalNames.get(key)??0)+1),{attribute,event,key,renamed:finalRaw!==attribute.rawName}});if(lyraOwner&&renamedMembers(owner).length)for(const group of openingTagBraceGroups(original,token)){const shorthand=/^[A-Za-z_$][\w$]*$/.exec(group.body)?.[0];if(!shorthand){warn(group.start,{tag:owner,member:owner,code:"DYNAMIC_VALUE_REVIEW",target:null,message:`This spread on ${owner} may carry renamed or deprecated members (${list(renamedMembers(owner))}); rename them where the object is built.`});continue}const forms=[["property",camelCase(shorthand)],["attribute",kebabCase(shorthand)]],review=forms.map(([kind,name])=>profile.reviewFor(owner,kind,name)).find(Boolean);review&&reportReview(group.start+1,review);const propertyChange=profile.propertyChangeFor(owner,camelCase(shorthand));propertyChange&&reportPropertyChange(group.start+1,propertyChange);const rule=forms.map(([kind,name])=>profile.renameFor(owner,kind,name)).find(Boolean);rule&&warn(group.start+1,{tag:owner,member:rule.from,code:rule.polarity?POLARITY_REVIEW:RENAME_REVIEW,target:rule.to,message:`The shorthand {${shorthand}} binds the deprecated ${owner} ${rule.kind} ${rule.from}; write ${memberStyle(shorthand,rule.to)}={${rule.polarity?`!${shorthand}`:shorthand}} by hand.`})}for(const{attribute,event,key,renamed}of planned){if(event){/^lr-/.test(event.name)&&(inspectMarkupDetailFields(owner,event.name,attribute),eventSite({name:event.name,start:attribute.nameStart+event.offset,owner,context:"listener",conflict:renamed&&finalNames.get(key)>1}));continue}if(!lyraOwner)continue;if(/^v-(?:bind|on)$/.test(attribute.rawName)||attribute.rawName.startsWith("${")&&!/^\$\{\s*ref\s*\(/.test(attribute.rawName)){renamedMembers(owner).length&&warn(attribute.nameStart,{tag:owner,member:owner,code:"DYNAMIC_VALUE_REVIEW",target:null,message:`This object binding on ${owner} may carry renamed or deprecated members (${list(renamedMembers(owner))}); rename them where the object is built.`});continue}if(attribute.rawName==="exportparts"){if(attribute.valueKind!=="literal"||/\$\{|\{\{/.test(attribute.value??""))continue;for(const match of(attribute.value??"").matchAll(/([^,\s:]+)(\s*:\s*[^,\s]+)?/g)){const inner=match[1],start2=attribute.valueStart+match.index,review=profile.reviewFor(owner,"part",inner);review&&reportReview(start2,review);const rule2=profile.renameFor(owner,"part",inner);rule2&&rewrite(start2,start2+inner.length,match[2]?rule2.to:`${rule2.to}:${inner}`,{tag:owner,member:inner,action:"rewrite-part",target:rule2.to,message:match[2]?`Forward the renamed ${owner} part ${rule2.to} under the same exported name.`:`Forward the renamed ${owner} part ${rule2.to} under its previous exported name ${inner}.`})}continue}const binding=markupMemberBinding(attribute);if(!binding)continue;const forms=binding.form==="member"?[["property",camelCase(binding.name)],["attribute",kebabCase(binding.name)]]:[[binding.form,binding.name]],start=attribute.nameStart+binding.offset,staticAttribute=binding.form==="attribute"&&binding.offset===0&&!binding.dynamic,rule=memberSite({owner,kind:binding.form==="member"?"binding":binding.form,name:binding.name,start,forms,dynamic:binding.dynamic,removal:staticAttribute});if(!rule)continue;if(bound.has(kebabCase(rule.to))||renamed&&finalNames.get(key)>1){warn(start,{tag:owner,member:rule.from,code:RENAME_CONFLICT_REVIEW,target:rule.to,message:`This ${owner} already binds ${rule.to}; remove the deprecated ${rule.from} binding by hand.`});continue}if(rule.polarity==="inverted"){if(!attributeSemantics(token.start)){warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${rule.to} is the inverse of ${rule.from}. In this template syntax a static value may be assigned to the ${camelCase(rule.from)} property as a string, where "false" is truthy, so set ${rule.to} by hand.`});continue}if(profile.preservedDefaultsFor(owner).some(entry=>entry.attribute===rule.to&&entry.value===!0)){warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${rule.from} has a preserved absent default, so removing an explicit attribute would let a later run insert ${rule.to}. Review this value using the old converter (a presence boolean treats even "false" as true), then migrate it by hand after the default migration is complete.`});continue}const value=attribute.value??"",end=attributeEnd(original,attribute);if(value===""||value==="true"||value===rule.from){let removeFrom=attribute.nameStart;for(;removeFrom>0&&/\s/.test(original[removeFrom-1]);)removeFrom-=1;rewrite(removeFrom,end,"",{tag:owner,member:rule.from,action:"remove-attribute",target:rule.to,message:`Remove ${rule.from}: it restated the ${owner} default, and ${rule.to} is off by default.`})}else value==="false"?rewrite(attribute.nameStart,end,rule.to,{tag:owner,member:rule.from,action:"rewrite-attribute",target:rule.to,message:`Replace ${rule.from}="false" with the presence of ${rule.to}.`}):warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${rule.from}="${attribute.value}" is not a boolean literal; set ${rule.to} to its inverse by hand.`});continue}const target=binding.form==="member"?memberStyle(binding.name,rule.to):rule.to;rewrite(start,start+binding.name.length,target,{tag:owner,member:rule.from,action:`rewrite-${rule.kind}`,target:rule.to,message:`Rename the ${owner} ${rule.kind} ${rule.from} to ${rule.to}.`})}lyraOwner&&profile.defaultsFor(owner).length&&defaultTokens.push({token,owner,bound})}const slotTags=[...profile.tags].filter(tag=>profile.slotContentFor(tag).length||[...profile.data.renames,...profile.data.reviews].some(entry=>entry.tag===tag&&entry.kind==="slot"));for(const tag of slotTags)for(const pair of elementPairs(original,tag,inComment))for(const child of directChildTokens(original,pair.opening.end+1,pair.closingStart,inComment)){let slot="",start=child.nameStart;for(const attribute of parseTagAttributes(original,child))if(attribute.rawName==="slot")slot=attribute.valueKind==="literal"?attribute.value??"":null,start=attribute.valueStart??attribute.nameStart;else if(attribute.rawName==="v-slot")slot="";else{const prefix=["v-slot:","#"].find(candidate=>attribute.rawName.startsWith(candidate));prefix&&(slot=attribute.rawName.slice(prefix.length),start=attribute.nameStart+prefix.length,slot==="default"&&(slot=""))}if(slot===null)continue;const review=profile.reviewFor(tag,"slot",slot);review&&reportReview(start,review);const rule=slot===""?null:profile.renameFor(tag,"slot",slot);if(rule&&rewrite(start,start+slot.length,rule.to,{tag,member:slot,action:"rewrite-slot",target:rule.to,message:`Rename the ${tag} slot ${slot} to ${rule.to}.`}),child.tag!=="template")for(const content of profile.slotContentFor(tag)){if(content.slot!==slot)continue;const listed=(content.report??content.allow).includes(child.tag);(content.report?!listed:listed)||warn(child.nameStart,{tag,member:child.tag,code:DEPRECATED_CONTENT_REVIEW,target:null,message:`<${child.tag}> in ${slot===""?"the default slot":`the ${slot} slot`} of ${tag}: ${content.summary}`})}}for(const match of original.matchAll(/::part\(([^)]*)\)/g)){if(inComment(match.index))continue;const owner=compoundTypeBefore(original,match.index),listStart=match.index+7;for(const nameMatch of match[1].matchAll(/\S+/g)){const name=nameMatch[0],start=listStart+nameMatch.index,own=owner?profile.renameFor(owner,"part",name):null;if(own)rewrite(start,start+name.length,own.to,{tag:owner,member:name,action:"rewrite-part",target:own.to,message:`Rename the ${owner} part ${name} to ${own.to}.`});else if(profile.renamesNamed("part",name).length&&!profile.exposes("part",name,owner)){const renames=profile.renamesNamed("part",name),keepers=profile.exposers("part",name).filter(tag=>!renames.some(entry=>entry.tag===tag));warn(start,{tag:soleTag(renames),member:name,code:RENAME_REVIEW,target:list(renames.map(entry=>entry.to)),message:`This ::part() selector does not name the component that owns the part. ${list(renames.map(entry=>entry.tag))} renamed the part ${name} to ${list(renames.map(entry=>entry.to))}`+(keepers.length?`, while ${list(keepers)} still ${keepers.length===1?"exposes":"expose"} ${name}`:"")+". Rename it where the selector reaches a renamed component directly; a part forwarded through exportparts keeps its exported name."})}else if(profile.gainedOwners("part",name).length&&!owner?.startsWith("lr-")){const gained=profile.gainedOwners("part",name);warn(start,{tag:soleTag(gained.map(tag=>({tag}))),member:name,code:NAME_GAINED_OWNER_REVIEW,target:name,message:`In ${release}, ${list(gained)} also ${gained.length===1?"exposes":"expose"} the part ${name}, so this selector may start matching it.`})}unownedReviews("part",name,start,owner)}}const cssNames=new Set([...profile.data.renames.filter(entry=>entry.kind==="css-property").flatMap(entry=>[entry.from,entry.to]),...profile.data.reviews.filter(entry=>entry.kind==="css-property").map(entry=>entry.name)]);if(cssNames.size)for(const match of original.matchAll(/(?<![\w-])--[A-Za-z0-9_-]+/g)){const name=match[0];if(!cssNames.has(name)||inComment(match.index))continue;profile.renamesNamed("css-property",name).length&&unownedMove({kind:"css-property",name,start:match.index,context:"custom property",rewritable:!0,action:"rewrite-css-property"});const declaration=/^\s*['"]?\s*:/.test(original.slice(match.index+name.length,match.index+name.length+16))||/setProperty\s*\(\s*['"`]$/.test(original.slice(Math.max(0,match.index-24),match.index)),gained=profile.gainedOwners("css-property",name);declaration&&gained.length&&warn(match.index,{tag:soleTag(gained.map(tag=>({tag}))),member:name,code:NAME_GAINED_OWNER_REVIEW,target:name,message:`In ${release}, ${list(gained)} also ${gained.length===1?"reads":"read"} ${name}, so this declaration now reaches them when they are nested below it.`});for(const review of profile.reviewsNamed("css-property",name))reportReview(match.index,review)}for(const match of original.matchAll(/\[\s*([A-Za-z_][\w-]*)(?=\s*(?:[~|^$*]?=|\]))/g)){if(inComment(match.index))continue;const owner=compoundTypeBefore(original,match.index);if(!owner||!profile.tags.has(owner))continue;const name=match[1],start=match.index+match[0].length-name.length,review=profile.reviewFor(owner,"attribute",name);review&&reportReview(start,review);const rule=profile.renameFor(owner,"attribute",name);if(rule){if(rule.polarity==="inverted"){warn(start,{tag:owner,member:name,code:POLARITY_REVIEW,target:rule.to,message:`${rule.to} is the inverse of ${name}; rewrite this ${owner} selector to test the opposite state (for example :not([${rule.to}])).`});continue}if(!rule.reflects){warn(start,{tag:owner,member:name,code:RENAME_REVIEW,target:rule.to,message:`${owner} does not reflect ${rule.to}, so [${rule.to}] matches only where markup sets it. Rename this selector once every place that sets ${name} (markup, setAttribute) sets ${rule.to} instead.`});continue}rewrite(start,start+name.length,rule.to,{tag:owner,member:name,action:"rewrite-attribute",target:rule.to,message:`Rename the ${owner} attribute selector [${name}] to [${rule.to}]; ${owner} reflects ${rule.to}.`})}}for(const match of original.matchAll(/:state\(\s*([a-z][a-z0-9-]*)\s*\)/g)){if(inComment(match.index))continue;const owner=compoundTypeBefore(original,match.index),review=owner?profile.reviewFor(owner,"css-state",match[1]):null;review&&reportReview(match.index+match[0].indexOf(match[1]),review)}for(const review of profile.data.reviews.filter(entry=>entry.kind==="component"))for(const match of original.matchAll(new RegExp(`(?<![\\w-])${review.tag}(?![\\w-])`,"g")))inComment(match.index)||original.slice(match.index-2,match.index)==="</"||reportReview(match.index,review);const anchoredDetailListener=/(?:document\.)?querySelector\(\s*(['"])(lr-[a-z0-9-]+)\1\s*\)\s*!?\s*\.\s*addEventListener\(\s*(['"])(lr-[a-z0-9-]+)\3\s*,/g,unownedDetailListener=/[A-Za-z_$][\w$]*\s*\.\s*addEventListener\(\s*(['"])(lr-[a-z0-9-]+)\1\s*,/g,scriptListenerAt=offset=>{const start=Math.max(0,offset-4096),prefix=original.slice(start,offset);let result2=null;for(const pattern of[anchoredDetailListener,unownedDetailListener]){pattern.lastIndex=0;for(const match of prefix.matchAll(pattern)){const event=pattern===anchoredDetailListener?match[4]:match[2],callbackStart=match.index+match[0].length,callback=prefix.slice(callbackStart);!/=>|\bfunction\b/u.test(callback)||/\)\s*;/u.test(callback)||(!result2||match.index>=result2.index)&&(result2={owner:pattern===anchoredDetailListener?match[2]:null,event,index:match.index})}}return result2};for(const match of original.matchAll(detailFieldAccess)){const offset=match.index+match[0].lastIndexOf(match[2]);if(reportedDetailFieldOffsets.has(offset)||inComment(offset)||inLiteral(offset)||inCss(offset))continue;const listener=scriptListenerAt(offset);reportDetailField(match[2],offset,listener?.owner??null,listener?.event??null)}for(const match of original.matchAll(ANCHORED_MEMBER)){if(inComment(match.index))continue;const owner=match[2],member=match[3],start=match.index+match[0].length-member.length,after=start+member.length;if(handledMembers.add(start),LISTENER_METHODS.has(member)||ATTRIBUTE_METHODS.has(member)){const call=/^\s*\(\s*(['"`])([^'"`\n]+)\1/.exec(original.slice(after,after+200));if(!call)continue;const valueStart=after+call[0].length-1-call[2].length;if(handledStrings.add(valueStart-1),LISTENER_METHODS.has(member)){eventSite({name:call[2],start:valueStart,owner,context:"listener",conflict:sameHandlerListens(valueStart-1,call[2])&&"same-handler"});continue}const rule2=memberSite({owner,kind:"attribute",name:call[2],start:valueStart,forms:[["attribute",call[2]]],dynamic:!0});rule2&&rewrite(valueStart,valueStart+call[2].length,rule2.to,{tag:owner,member:rule2.from,action:"rewrite-attribute",target:rule2.to,message:`Rename the ${owner} attribute ${rule2.from} to ${rule2.to}.`});continue}if(!profile.tags.has(owner))continue;if(/^\s*\(/.test(original.slice(after,after+64))){const review=profile.reviewFor(owner,"method",member);review&&reportReview(start,review);continue}const rule=memberSite({owner,kind:"property",name:member,start,forms:[["property",member]],dynamic:!0});rule&&rewrite(start,after,rule.to,{tag:owner,member:rule.from,action:"rewrite-property",target:rule.to,message:`Rename the ${owner} property ${rule.from} to ${rule.to}.`})}const eventNameMatters=name=>profile.renamesNamed("event",name).length||profile.detailsNamed(name).length||profile.retiredEventsNamed(name).length||profile.reviewsNamed("event",name).length||profile.gainedOwners("event",name).length;for(const match of original.matchAll(/(['"`])(?:(window|document|body):)?(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1/g)){const name=match[3];if(handledStrings.has(match.index)||inComment(match.index)||!eventNameMatters(name))continue;const before=original.slice(Math.max(0,match.index-120),match.index);if(!match[2]&&TAG_API_CALL_BEFORE.test(before))continue;const listener=LISTENER_CALL_BEFORE.test(before);eventSite({name,start:match.index+1+(match[2]?match[2].length+1:0),owner:null,context:listener?"listener":"event name string",rewritable:listener,conflict:listener&&!match[2]&&sameHandlerListens(match.index,name)&&"same-handler"})}const mentioned=mentionedTags(original,profile.tags,inComment),accessRules=new Map,addAccess=(name,candidate)=>accessRules.set(name,[...accessRules.get(name)??[],candidate]);for(const entry of profile.data.renames)entry.kind==="property"&&mentioned.has(entry.tag)&&addAccess(entry.from,{tag:entry.tag,rule:entry,call:!1});for(const entry of profile.data.reviews)(entry.kind==="property"||entry.kind==="method")&&mentioned.has(entry.tag)&&addAccess(entry.name,{tag:entry.tag,review:entry,call:entry.kind==="method"});for(const entry of profile.data.propertyChanges)mentioned.has(entry.tag)&&addAccess(entry.property,{tag:entry.tag,propertyChange:entry,call:!1});if(accessRules.size){const inString=rangeTester(mergeRanges(quotedStringRanges(original,inComment))),inStylesheet=rangeTester(stylesheetRanges(original,file,inComment)),inToken=rangeTester(mergeRanges(openingTokens.map(token=>[token.start+1,token.end])));for(const match of original.matchAll(/(?<=[\w$)\]])\s*(?:\?\.|!?\.)\s*([A-Za-z_$][\w$]*)/g)){const name=match[1],candidates=accessRules.get(name);if(!candidates)continue;const start=match.index+match[0].length-name.length;if(handledMembers.has(start)||reportedDetailFieldOffsets.has(start)||inComment(start)||inString(start)||inStylesheet(start)||inToken(start))continue;const call=/^\s*\(/.test(original.slice(start+name.length,start+name.length+64));for(const candidate of candidates){if(candidate.call!==call)continue;if(candidate.propertyChange){reportPropertyChange(start,candidate.propertyChange);continue}if(candidate.review){reportReview(start,candidate.review);continue}const{rule}=candidate;warn(start,{tag:rule.tag,member:name,code:rule.polarity?POLARITY_REVIEW:RENAME_REVIEW,target:rule.to,message:`If this reads or writes an ${rule.tag}, ${rule.polarity?`use the inverse property .${rule.to}`:`rename .${name} to .${rule.to}`}; .${name} keeps working until ${removal}.`})}}}for(const match of original.matchAll(/\.\s*(?:set|get|has|remove|toggle)Attribute\s*\(\s*(['"`])([a-z][a-z0-9-]*)\1/g)){const name=match[2],start=match.index+match[0].length-1-name.length;if(!(handledStrings.has(start-1)||inComment(match.index)))for(const tag of mentioned){const review=profile.reviewFor(tag,"attribute",name);review&&reportReview(start,review);const rule=profile.renameFor(tag,"attribute",name);rule&&warn(start,{tag,member:name,code:rule.polarity?POLARITY_REVIEW:RENAME_REVIEW,target:rule.to,message:`If this element is an ${tag}, ${rule.polarity?`use the inverse attribute ${rule.to}`:`rename ${name} to ${rule.to}`}; ${name} keeps working until ${removal}.`})}}if(profile.data.defaults.length){const defaultProfiles=new Map([...new Set(profile.data.defaults.map(entry=>entry.tag))].map(tag=>[tag,{origin,tag,defaults:profile.defaultsFor(tag).map(entry=>({member:entry.attribute,value:entry.value}))}])),hazards=scanLocalMigrationHazards(original,defaultProfiles,ignoredRanges,defaultTokens.map(({token})=>({...token,tag:token.tag.toLowerCase()}))),blocked=new Set([...options.blockedLocalMigrations??[],...hazards.blocked]);result.blockedLocalMigrations=hazards.blocked;for(const use of hazards.uses)warn(use.offset,{tag:use.tag,member:use.tag,code:use.warningCode,target:use.tag,message:use.message});for(const{token,owner,bound}of defaultTokens){const missing=profile.defaultsFor(owner).filter(entry=>!profile.defaultAliasesFor(owner,entry.attribute).some(name=>bound.has(name)));if(!missing.length)continue;if(blocked.has(localMigrationKey(origin,owner))){warn(token.nameStart,{tag:owner,member:owner,code:"MAPPING_REVIEW_BLOCKED",target:owner,message:`${owner} did not receive its Lyra ${profile.fromMajor} defaults (${missing.map(entry=>`${entry.attribute}=${String(entry.value)}`).join(", ")}) because the scanned target set accesses it through a DOM alias or an opaque attribute spread. Add them by hand where the previous default matters.`});continue}const insertions=[];for(const entry of missing)insertions.push(serializeLocalDefault({member:entry.attribute,value:entry.value})),result.changes.push(reportEntry({textStarts:starts,file,offset:token.end,origin,upstreamTag:owner,upstreamMember:entry.attribute,action:"insert-default",target:`${entry.attribute}=${String(entry.value)}`,message:`Insert ${entry.attribute} to preserve the Lyra ${profile.fromMajor} default.`}));if(insertions.length){const insertionOffset=original[token.end-1]==="/"?token.end-1:token.end,replacement=/\s/.test(original[insertionOffset-1])?`${insertions.join(" ")} `:` ${insertions.join(" ")}`;edits.push({start:insertionOffset,end:insertionOffset,replacement})}}}if(!profile.skipped.length)for(const{offset,entry}of acknowledgements.unused()){const key=`${offset}:${UNUSED_ACKNOWLEDGEMENT}:${entry.token}`;seenWarnings.has(key)||(seenWarnings.add(key),result.warnings.push(reportEntry({textStarts:starts,file,offset,origin,upstreamTag:null,upstreamMember:entry.token,action:"manual-review",target:null,warningCode:UNUSED_ACKNOWLEDGEMENT,message:entry.code?`The acknowledgement ${entry.token} matches no report on the lines it covers; remove it.`:`The acknowledgement ${entry.token} is not of the form CODE:name, for example DETAIL_SHAPE_REVIEW:lr-close.`})))}return result.content=finalizeEdits(original,edits),sortReportEntries(result.changes,"action"),sortReportEntries(result.warnings,"warningCode"),result}export{migrateRenameText};
4
+ `);)text[index]==="\\"&&(index+=1),index+=1;index+=1,quote!=="`"&&ranges.push([start,index])}return ranges}function stylesheetRanges(text,file,inComment){if(STYLESHEET_FILE.test(file))return[[0,text.length]];const ranges=[];for(const match of text.matchAll(/<style(?:\s[^>]*)?>[\s\S]*?<\/style\s*>/gi))ranges.push([match.index,match.index+match[0].length]);return mergeRanges([...ranges,...taggedTemplateRanges(text,["css"],inComment)])}function compoundTypeBefore(text,index){let start=index,brackets=0,parens=0;const limit=Math.max(0,index-SELECTOR_LOOKBEHIND);for(;start>limit;){const character=text[start-1];if(character==="]")brackets+=1;else if(character==="["){if(brackets===0)break;brackets-=1}else if(character===")")parens+=1;else if(character==="("){if(parens===0)break;parens-=1}else if(brackets===0&&parens===0&&/[\s,>+~{};'"`]/.test(character))break;start-=1}if(start===limit&&limit>0)return null;const compound=text.slice(start,index);return(/^:global\(\s*([A-Za-z][\w-]*)\s*\)$/.exec(compound)??/^([A-Za-z][\w-]*)/.exec(compound))?.[1].toLowerCase()??null}function mentionedTags(text,tags,inComment){const found=new Set;for(const tag of tags)for(const match of text.matchAll(new RegExp(`(?<![\\w-])${tag}(?![\\w-])`,"g")))if(!inComment(match.index)){found.add(tag);break}return found}function elementPairs(text,tag,inComment){const pairs=[],stack=[];for(const match of text.matchAll(new RegExp(`<(/)?${tag}(?=[\\s/>])`,"g"))){if(inComment(match.index))continue;const end=findTagEnd(text,match.index+match[0].length);if(!(end<0))if(match[1]){const opening=stack.pop();opening&&pairs.push({opening,closingStart:match.index})}else/\/\s*>$/.test(text.slice(match.index,end+1))||stack.push({start:match.index,end})}return pairs}function directChildTokens(text,start,end,inComment){const children=[],stack=[],pattern=/<(\/)?([A-Za-z][\w.:-]*)(?=[\s/>])/g;pattern.lastIndex=start;for(let match=pattern.exec(text);match&&match.index<end;match=pattern.exec(text)){if(inComment(match.index))continue;const tokenEnd=findTagEnd(text,match.index+match[0].length);if(tokenEnd<0||tokenEnd>=end)break;const name=match[2].toLowerCase();if(match[1]){const index=stack.lastIndexOf(name);index>=0&&(stack.length=index)}else{const nameStart=match.index+1;stack.length===0&&children.push({tag:name,start:match.index,nameStart,nameEnd:nameStart+match[2].length,end:tokenEnd}),!/\/\s*>$/.test(text.slice(match.index,tokenEnd+1))&&!VOID_HTML_TAGS.has(name)&&stack.push(name)}pattern.lastIndex=tokenEnd+1}return children}function openingTagBraceGroups(text,token){const groups=[];let index=token.nameEnd,quote=null;for(;index<token.end;){const character=text[index];if(quote){character==="\\"?index+=1:character===quote&&(quote=null),index+=1;continue}if(character==='"'||character==="'")quote=character;else if(character==="{"){const end=skipBalanced(text,index,"{","}");!/=\s*$/.test(text.slice(token.nameEnd,index))&&text[index-1]!=="$"&&groups.push({start:index,end,body:text.slice(index+1,end-1).trim()}),index=end;continue}index+=1}return groups}function markupEventName(rawName){if(/^\(lr-[a-z0-9-]+\)$/.test(rawName))return{name:rawName.slice(1,-1),offset:1};if(/^onlr-/.test(rawName))return{name:rawName.slice(2).replace(/Capture$/,""),offset:2};for(const[prefix,separator]of[["@","."],["v-on:","."],["on:","|"]])if(rawName.startsWith(prefix))return{name:rawName.slice(prefix.length).split(separator)[0],offset:prefix.length};return null}function markupMemberBinding(attribute){const raw=attribute.rawName;let match;if(raw.startsWith("?"))return{form:"attribute",offset:1,name:raw.slice(1),dynamic:!0};if(match=/^\[attr\.([^\]]+)\]$/.exec(raw))return{form:"attribute",offset:6,name:match[1],dynamic:!0};if(match=/^\[([A-Za-z_$][\w$]*)\]$/.exec(raw))return{form:"property",offset:1,name:match[1],dynamic:!0};if(raw.startsWith("."))return{form:"property",offset:1,name:raw.slice(1),dynamic:!0};if(raw.startsWith("bind:"))return{form:"property",offset:5,name:raw.slice(5).split("|")[0],dynamic:!0};for(const prefix of["v-bind:",":"])if(raw.startsWith(prefix))return{form:"member",offset:prefix.length,name:raw.slice(prefix.length).split(".")[0],dynamic:!0};if(!/^[A-Za-z][\w-]*$/.test(raw)||/^onlr-/.test(raw))return null;const dynamic=attribute.valueKind==="expression"||/\$\{|\{\{/.test(attribute.value??"");return{form:/[A-Z]/.test(raw)?"property":"attribute",offset:0,name:raw,dynamic}}function attributeEnd(text,attribute){if(attribute.valueEnd===null)return attribute.nameEnd;const quote=text[attribute.valueStart-1];return(quote==='"'||quote==="'")&&text[attribute.valueEnd]===quote?attribute.valueEnd+1:attribute.valueEnd}function boundMemberNames(attributes){const names=new Set;for(const attribute of attributes){const binding=markupMemberBinding(attribute);binding&&names.add(kebabCase(binding.name))}return names}function sortReportEntries(entries,codeKey){return entries.sort((left,right)=>left.line-right.line||left.column-right.column||String(left[codeKey]).localeCompare(String(right[codeKey])))}function reportModuleReviews(text,file,reviews,openingTokens,inComment,warn){if(!reviews.length)return;const packageName="@aceshooting/lyra-ui",specifierOf=subpath=>`${packageName}${subpath.slice(1)}`,named=reviews.filter(entry=>["function","type","constant","class"].includes(entry.kind)),report=(offset,review,context="")=>warn(offset,{member:review.name,code:"DEPRECATED_MODULE_REVIEW",target:review.replacement,message:`${context}${review.kind} ${review.module?`${review.module}#`:""}${review.name} ${review.removedIn?`was removed in ${review.removedIn}`:`is deprecated and scheduled for removal in ${review.removalNotBefore}`}; review ${review.replacement}.`}),namedFor=specifier=>named.filter(entry=>specifier===packageName||specifier===specifierOf(entry.module)),strings=quotedStringRanges(text,inComment),templates=templateLiteralRanges(text,inComment),stringStarts=new Set([...strings,...templates.filter(([start,end])=>!text.slice(start,end).includes("${"))].map(([start])=>start)),inString=rangeTester(strings),inLiteral=rangeTester(mergeRanges([...strings,...templates])),inCss=rangeTester(stylesheetRanges(text,file,inComment)),inMarkup=offset=>openingTokens.some(token=>offset>=token.nameEnd&&offset<token.end),opaque=(offset,specifier,entries)=>{entries.length&&warn(offset,{member:specifier,code:"MODULE_NAMESPACE_REVIEW",target:[...new Set(entries.map(entry=>entry.replacement))].join("; "),message:`Review the namespace or dynamic import of ${specifier} for deprecated exports ${entries.map(entry=>entry.name).join(", ")}. They cannot be safely renamed through aliases; the earliest removal is ${entries.map(entry=>entry.removalNotBefore).sort()[0]}.`})},bindings=/\b(?:import|export)\s+(?:type\s+)?(?:[$A-Z_a-z][$\w]*\s*,\s*)?\{(?<bindings>[^{};]*)\}\s*from\s*(?<quote>['"])(?<source>@aceshooting\/lyra-ui(?:\/[^'"\s]+)?)\k<quote>/g,handledSpecifiers=new Set;for(const match of text.matchAll(bindings)){if(inComment(match.index)||inLiteral(match.index))continue;const available=namedFor(match.groups.source),bodyStart=match.index+match[0].indexOf("{")+1;for(const binding of parseNamedModuleBindings(match.groups.bindings)){const review=available.find(entry=>entry.name===binding.imported);if(!review)continue;const member=[...match.groups.bindings.matchAll(new RegExp(`(?<![$\\w])${regexEscape(binding.imported)}(?![$\\w])`,"g"))].find(candidate=>!inComment(bodyStart+candidate.index));member&&report(bodyStart+member.index,review)}handledSpecifiers.add(match.index+match[0].lastIndexOf(match.groups.source)-1)}for(const match of text.matchAll(/(['"])(@aceshooting\/lyra-ui(?:\/[^'"\s]+)?)\1/g)){if(inComment(match.index))continue;const markup=inMarkup(match.index),css=inCss(match.index);if(!stringStarts.has(match.index)&&!markup&&!css)continue;const before=text.slice(Math.max(0,match.index-500),match.index),context=moduleSpecifierContext(text,match.index),cssImport=css&&/@import\s+(?:url\(\s*)?$/.test(before),resource=markup&&/\b(?:href|src)\s*=\s*$/.test(before);if(!context&&!cssImport&&!resource)continue;const specifier=match[2];for(const review of reviews)(review.kind==="entry-point"||review.kind==="stylesheet")&&specifier===specifierOf(review.name)&&report(match.index+1,review);if(handledSpecifiers.has(match.index)||!context||context.sideEffect)continue;const available=namedFor(specifier);if(context.kind==="binding"&&/\bexport\s+(?:type\s+)?\*\s*(?:as\s+[$A-Z_a-z][$\w]*\s*)?from\s*$/.test(before))for(const review of available)report(match.index+1,review,"This re-export includes ");else opaque(match.index+1,specifier,available)}for(const match of text.matchAll(/@import\s+url\(\s*(@aceshooting\/lyra-ui\/[^\s)'";]+)\s*\)/g))if(!(inComment(match.index)||!inCss(match.index)))for(const review of reviews)review.kind==="stylesheet"&&match[1]===specifierOf(review.name)&&report(match.index+match[0].indexOf(match[1]),review);for(const review of reviews)if(review.kind==="window-event")for(const match of text.matchAll(new RegExp(`(['"\\x60])(${regexEscape(review.name)})\\1`,"g"))){if(inComment(match.index))continue;const before=text.slice(Math.max(0,match.index-200),match.index);(LISTENER_CALL_BEFORE.test(before)||/\bnew\s+(?:CustomEvent|Event)\s*(?:<[^>\n]+>)?\(\s*$/.test(before))&&stringStarts.has(match.index)&&report(match.index+1,review)}else if(review.kind==="root-attribute"){const attributeOffsets=new Set;for(const token of openingTokens)for(const attribute of parseTagAttributes(text,token))attribute.rawName.replace(/^\[attr\.(.+)\]$/,"$1").replace(/^(?:v-bind:|bind:|[?:])/,"")===review.name&&!inString(attribute.nameStart)&&attributeOffsets.add(attribute.nameStart+attribute.rawName.indexOf(review.name));for(const match of text.matchAll(new RegExp(`(?<![\\w-])${regexEscape(review.name)}(?![\\w-])`,"g"))){if(inComment(match.index))continue;const offset=match.index,before=text.slice(Math.max(0,offset-180),offset),after=text.slice(offset+review.name.length),literalApi=/\b(?:getAttribute|setAttribute|hasAttribute|removeAttribute|toggleAttribute)\s*\(\s*['"`]$/.test(before),selector=/\[\s*$/.test(before)&&/^\s*(?:[~|^$*]?=|\])/.test(after),markup=attributeOffsets.has(offset);(literalApi&&stringStarts.has(offset-1)||selector&&(inCss(offset)||inString(offset))||markup)&&report(offset,review)}const datasetName=review.name.slice(5).replace(/-([a-z])/g,(_match,letter)=>letter.toUpperCase()),dataset=new RegExp(`\\bdataset\\s*(?:\\.\\s*${regexEscape(datasetName)}\\b|\\[\\s*(['"])${regexEscape(datasetName)}\\1\\s*\\])`,"g");for(const match of text.matchAll(dataset))!inComment(match.index)&&!inLiteral(match.index)&&report(match.index,review)}}const GLOBAL_REVIEW="GLOBAL_REVIEW",LYRA_PACKAGE="@aceshooting/lyra-ui",NODE_MODULES_LEAD=/(?:^|\/)node_modules\/$/,JSON_FILE=/\.json$/i,IDENTIFIER="[$A-Za-z_][$\\w]*";function applyGlobals(text,file,entries,{inComment,inCss,openingTokens,rewrite,warn}){const modules=entries.filter(entry=>entry.kind==="module"),exported=entries.filter(entry=>entry.kind==="export"),localeKeys=entries.filter(entry=>entry.kind==="locale-key"),review=(offset,entry,member,message)=>warn(offset,{member,code:GLOBAL_REVIEW,target:entry.to,message});if(modules.length){const inMarkup=offset=>openingTokens.some(token=>offset>=token.nameEnd&&offset<token.end),handle=(entry,specifierStart,specifier,safe)=>{safe?rewrite(specifierStart,specifierStart+entry.from.length,entry.to,{tag:null,member:specifier,action:"rewrite-module",target:entry.to,message:`Rewrite ${entry.from} to ${entry.to}: ${entry.summary}`}):review(specifierStart,entry,specifier,`${specifier} is not provably a module specifier here (or is computed): ${entry.summary} Use ${entry.to}${entry.prefix?"...":""} instead.`)},entryFor=specifier=>modules.find(entry=>entry.prefix?specifier.startsWith(entry.from)&&!(entry.except??[]).some(prefix=>specifier.startsWith(prefix)):specifier===entry.from);for(const match of text.matchAll(/(['"`])([^'"`\n]*?@aceshooting\/lyra-ui\/[^'"`\n]*)\1/g)){if(inComment(match.index))continue;const at=match[2].indexOf("@aceshooting/"),lead=match[2].slice(0,at);if(lead&&!NODE_MODULES_LEAD.test(lead))continue;const specifier=match[2].slice(at),entry=entryFor(specifier);if(!entry)continue;const specifierStart=match.index+1+at,before=text.slice(Math.max(0,match.index-500),match.index),context=moduleSpecifierContext(text,match.index),cssImport=inCss(match.index)&&/@import\s+(?:url\(\s*)?$/.test(before),resource=inMarkup(match.index)&&/\b(?:href|src)\s*=\s*$/.test(before),safe=!specifier.includes("${")&&!!(lead||JSON_FILE.test(file)||context||cssImport||resource);handle(entry,specifierStart,specifier,safe)}for(const match of text.matchAll(/@import\s+url\(\s*(@aceshooting\/lyra-ui\/[^\s)'";]+)\s*\)/g)){const entry=entryFor(match[1]);inComment(match.index)||!inCss(match.index)||!entry||handle(entry,match.index+match[0].indexOf(match[1]),match[1],!0)}}if(exported.length){const bindingsPattern=new RegExp(`\\b(?:import|export)\\s+(?:type\\s+)?(?:${IDENTIFIER}\\s*,\\s*)?\\{(?<body>[^{};]*)\\}\\s*from\\s*(?<quote>['"])(?<source>${regexEscape(LYRA_PACKAGE)}(?:\\/[^'"\\s]+)?)\\k<quote>`,"g"),segment=new RegExp(`^(\\s*(?:type\\s+)?)(${IDENTIFIER})(\\s+as\\s+${IDENTIFIER})?\\s*$`,"d");for(const match of text.matchAll(bindingsPattern)){if(inComment(match.index))continue;const bodyStart=match.index+match[0].indexOf("{")+1;for(const part of match.groups.body.matchAll(/[^,]+/g)){const parsed=segment.exec(part[0]),entry=parsed&&exported.find(candidate=>candidate.from===parsed[2]);if(!entry)continue;const nameStart=bodyStart+part.index+parsed.indices[2][0];inComment(nameStart)||(match.groups.source===LYRA_PACKAGE?rewrite(nameStart,nameStart+entry.from.length,parsed[3]?entry.to:`${entry.to} as ${entry.from}`,{tag:null,member:entry.from,action:"rewrite-export",target:entry.to,message:`${entry.from} no longer exists; import ${entry.to}${parsed[3]?"":` as ${entry.from}`}: ${entry.summary}`}):review(nameStart,entry,entry.from,`${entry.from} is not exported by ${match.groups.source} any more: ${entry.summary} Import ${entry.to} from ${LYRA_PACKAGE}.`))}}const receivers=[...[...text.matchAll(new RegExp(`import\\s+(?:type\\s+)?\\*\\s+as\\s+(${IDENTIFIER})\\s+from\\s*(['"])${regexEscape(LYRA_PACKAGE)}\\2`,"g"))].map(match=>match[1]).map(regexEscape),`import\\(\\s*['"]${regexEscape(LYRA_PACKAGE)}['"]\\s*\\)`];for(const entry of exported)for(const match of text.matchAll(new RegExp(`(?<![$\\w.])(?:${receivers.join("|")})\\s*\\.\\s*${entry.from}(?![$\\w])`,"g")))inComment(match.index)||review(match.index+match[0].lastIndexOf(entry.from),entry,entry.from,`${entry.from} no longer exists: ${entry.summary} Use ${entry.to}.`)}for(const entry of entries.filter(candidate=>candidate.kind==="css-property")){const pattern=new RegExp(`${regexEscape(entry.from)}${entry.prefix?"[\\w-]*":"(?![\\w-])"}`,"g");for(const match of text.matchAll(pattern))inComment(match.index)||review(match.index,entry,match[0],`The custom property ${match[0]} was removed: ${entry.summary} Use ${entry.to}.`)}const parts=entries.filter(candidate=>candidate.kind==="part");if(parts.length)for(const match of text.matchAll(/::part\(([^)]*)\)/g)){if(inComment(match.index))continue;const names=match[1].trim().split(/\s+/),type=compoundTypeBefore(text,match.index);for(const entry of parts)!names.includes(entry.from)||!(type===entry.tag||!type&&text.includes(entry.tag))||review(match.index+match[0].indexOf(entry.from),entry,entry.from,`The ${entry.tag} part ${entry.from} changed: ${entry.summary} ${entry.to}`)}if(localeKeys.length&&/registerLyraLocale|bridgeLyraLocale|\.strings\b|@aceshooting\/lyra-ui/.test(text))for(const entry of localeKeys)for(const match of text.matchAll(new RegExp(`(?<![$\\w.-])${entry.from}(?![$\\w-])`,"g"))){const before=text[match.index-1]??"",after=text.slice(match.index+entry.from.length,match.index+entry.from.length+12),quoted=/['"`]/.test(before)&&/^['"`]/.test(after);inComment(match.index)||!(quoted||/^\s*:/.test(after))||review(match.index,entry,entry.from,`The localization key ${entry.from} was removed; use ${entry.to}: ${entry.summary}`)}}function migrateRenameText(original,contract,options){const file=options.file??"<memory>",origin=options.origin,profile=contract.renameProfiles.get(origin);invariant(profile,`unknown migration origin ${String(origin)}`);const result={content:original,changes:[],warnings:[],acknowledged:0,usage:{webawesome:{automatic:0,manual:0},shoelace:{automatic:0,manual:0}},blockedMappings:new Set,blockedEcosystems:new Set,bareImportEcosystems:new Set,blockedLocalMigrations:new Set,constructedEvents:new Set};if(profile.isEmpty)return result;const starts=lineStarts(original),ignoredRanges=renameIgnoredRanges(original,file),inComment=rangeTester(ignoredRanges),openingTokens=scanAllOpeningTags(original,ignoredRanges,inComment),acknowledgements=scanReviewAcknowledgements(original,ignoredRanges,starts,openingTokens),litTemplates=LIT_TEMPLATE_FILE.test(file)?rangeTester(taggedTemplateRanges(original,["html","svg"],inComment)):()=>!1,inLiteral=rangeTester(mergeRanges([...quotedStringRanges(original,inComment),...templateLiteralRanges(original,inComment)])),inCss=rangeTester(stylesheetRanges(original,file,inComment)),attributeSemantics=offset=>ATTRIBUTE_SEMANTICS_FILE.test(file)||litTemplates(offset),release=`Lyra ${profile.toMajor}`,removal=`${profile.aliasRemovalMajor}.0.0`;for(const match of original.matchAll(EVENT_CONSTRUCTION))!inComment(match.index)&&profile.renamesNamed("event",match[2]).length&&result.constructedEvents.add(match[2]);const constructedEvents=new Set([...options.constructedEvents??[],...result.constructedEvents]),listenerIdentity=(quote,name)=>{const receiver=LISTENER_RECEIVER_BEFORE.exec(original.slice(Math.max(0,quote-200),quote))?.[1],handler=LISTENER_HANDLER_AFTER.exec(original.slice(quote+name.length+2,quote+name.length+202))?.[1];return receiver&&handler?`${receiver.replace(/\s+/g,"")}\0${handler.replace(/\s+/g,"")}`:null},listenedNames=new Map;if(profile.data.renames.some(entry=>entry.kind==="event"))for(const match of original.matchAll(/(['"`])(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1/g)){if(inComment(match.index)||!LISTENER_CALL_BEFORE.test(original.slice(Math.max(0,match.index-120),match.index)))continue;const identity=listenerIdentity(match.index,match[2]);identity&&listenedNames.set(identity,new Set([...listenedNames.get(identity)??[],match[2]]))}const sameHandlerListens=(quote,name)=>{if(!listenedNames.size)return!1;const names=listenedNames.get(listenerIdentity(quote,name));return!!names&&profile.renamesNamed("event",name).some(entry=>names.has(entry.to))},edits=[],seenWarnings=new Set,handledStrings=new Set,handledMembers=new Set,unique=values=>[...new Set(values)],list=values=>unique(values).join(", "),soleTag=entries=>unique(entries.map(entry=>entry.tag)).length===1?entries[0].tag:null,hint=(code,member)=>`After review, mark the site with a "lyra-migrate-reviewed: ${code}:${ackName(member)}" comment.`,rewrite=(start,end,replacement,{tag,member,action,target,message})=>{edits.push({start,end,replacement}),result.changes.push(reportEntry({textStarts:starts,file,offset:start,origin,upstreamTag:tag,upstreamMember:member,action,target,message}))},warn=(offset,{tag=null,member,code,target=null,message})=>{const key=`${offset}:${code}:${member}`;if(!seenWarnings.has(key)){if(seenWarnings.add(key),acknowledgements.consume(locationAt(starts,offset).line,code,member)){result.acknowledged+=1;return}result.warnings.push(reportEntry({textStarts:starts,file,offset,origin,upstreamTag:tag,upstreamMember:member,action:"manual-review",target,warningCode:code,message:`${message} ${hint(code,member)}`}))}},reviewMessage=review=>`${review.kind==="component"?`<${review.tag}>`:review.kind==="slot"&&review.name===""?`Content in the default slot of ${review.tag}`:`The ${review.tag} ${review.kind} ${review.name}`} ${review.removedIn?`was removed in ${review.removedIn}`:`is deprecated and scheduled for removal in ${review.removalNotBefore}`}; migrate to ${review.replacement} by hand.`,reportReview=(offset,review)=>warn(offset,{tag:review.tag,member:review.name,code:DEPRECATED_MEMBER_REVIEW,target:review.replacement,message:reviewMessage(review)}),reportPropertyChange=(offset,entry)=>warn(offset,{tag:entry.tag,member:entry.property,code:"PROPERTY_CHANGE_REVIEW",target:entry.property,message:`Review ${entry.tag}.${entry.property} for ${release}: ${entry.summary}`});if(reportModuleReviews(original,file,profile.data.moduleReviews,openingTokens,inComment,warn),applyGlobals(original,file,profile.data.globals,{inComment,inCss,openingTokens,rewrite,warn}),profile.data.rules.includes("theme-scopes")){const analysis=analyzeThemeScopes(original,{file});for(const{offset,change}of analysis.insertions)rewrite(offset,offset,analysis.marker,{tag:change.upstreamTag,member:change.upstreamMember,action:change.action,target:change.target,message:change.message});for(const entry of analysis.warnings)warn(starts[entry.line-1]+entry.column-1,{tag:entry.upstreamTag,member:entry.upstreamMember??entry.upstreamTag??entry.target,code:entry.warningCode,target:entry.target,message:entry.message})}const unownedReviews=(kind,name,offset,owner)=>{const own=owner?profile.reviewFor(owner,kind,name):null;if(own)reportReview(offset,own);else if(!profile.exposes(kind,name,owner))for(const review of profile.reviewsNamed(kind,name))reportReview(offset,review)},label=kind=>kind==="css-property"?"custom property":kind,detailNote=name=>{const details=profile.detailsNamed(name);return details.length?` Its ${release} detail also changed: ${details.map(entry=>`${entry.tag}: ${entry.summary}`).join(" ")}`:""},unownedMove=({kind,name,start,context,rewritable,action})=>{const renames=profile.renamesNamed(kind,name),targets=unique(renames.map(entry=>entry.to)),constructed=kind==="event"&&constructedEvents.has(name);if(rewritable&&!constructed&&profile.isGlobal(kind,name))return rewrite(start,start+name.length,targets[0],{tag:soleTag(renames),member:name,action,target:targets[0],message:`Rename ${name} to ${targets[0]}; every component exposing it renamed it, and no other component uses ${targets[0]}.`}),targets[0];const sourceKeepers=unique(targets.flatMap(to=>profile.sourceKeepers(kind,name,to))).filter(tag=>!renames.some(entry=>entry.tag===tag)),targetKeepers=unique(targets.flatMap(to=>profile.targetKeepers(kind,name,to))),shared=targets.length===1&&!sourceKeepers.length&&targetKeepers.length>0&&!renames.some(entry=>entry.polarity);return warn(start,{tag:soleTag(renames),member:name,code:shared?RENAME_TARGET_SHARED_REVIEW:RENAME_REVIEW,target:targets.join(" | "),message:(kind==="css-property"?"Custom properties inherit into nested components. ":context==="listener"?"This listener does not prove which element it listens to. ":"This string may name an event of any component. ")+`${list(renames.map(entry=>entry.tag))} renamed the ${label(kind)} ${name} to ${targets.join(" or ")}`+(sourceKeepers.length?`, while ${list(sourceKeepers)} still ${sourceKeepers.length===1?"uses":"use"} ${name}`:"")+(targetKeepers.length?`; ${list(targetKeepers)} already ${targetKeepers.length===1?"uses":"use"} ${targets.join(" and ")}, which this site would start reaching`:"")+(constructed?`; the scanned code also dispatches ${name} itself, so its listeners and dispatches must move together`:"")+`. Update it by hand for the components it is meant for; ${name} keeps working until ${removal}.`+(kind==="event"?detailNote(targets[0]):"")}),null},eventMove=(name,owner,rewritable=!0)=>{if(constructedEvents.has(name))return null;const own=owner?profile.renameFor(owner,"event",name):null;return own?profile.targetKeepers("event",name,own.to).length?null:own.to:!rewritable||!profile.renamesNamed("event",name).length||profile.exposes("event",name,owner)?null:profile.isGlobal("event",name)?profile.renamesNamed("event",name)[0].to:null},conflictMessage=(conflict,subject,to)=>conflict==="same-handler"?`${subject} already listens to ${to} with this same handler; renamed, the two identical registrations would collapse into one, so the handler would run once per activation instead of twice. Rename or remove this call, and its add or remove counterpart, together by hand.`:`${subject} already listens to ${to}; merge the two handlers by hand.`,eventSite=({name,start,owner,context,rewritable=!0,conflict=!1})=>{const retired=owner?profile.retiredEventFor(owner,name):null,retiredCandidates=retired?[retired]:profile.exposes("event",name,owner)?[]:profile.retiredEventsNamed(name);retiredCandidates.length&&warn(start,{tag:retired?owner:soleTag(retiredCandidates),member:name,code:"RETIRED_EVENT_REVIEW",target:unique(retiredCandidates.map(entry=>entry.replacement)).join(", "),message:`${name} is no longer dispatched by ${list(retiredCandidates.map(entry=>entry.tag))} in ${release}. `+retiredCandidates.map(entry=>`${entry.tag}: use ${entry.replacement}. ${entry.summary}`).join(" ")+" Review this listener and its matching removal together; keep unrelated events with the same spelling, check nested event targets, and merge any existing canonical listener without dropping or duplicating handler calls."});const own=owner?profile.renameFor(owner,"event",name):null;let current=name;if(own){const keepers=profile.targetKeepers("event",name,own.to);if(constructedEvents.has(name))warn(start,{tag:owner,member:name,code:RENAME_REVIEW,target:own.to,message:`Not renamed: the scanned code dispatches ${name} itself, so this listener would stop hearing it. Rename the dispatch and its listeners to ${own.to} together; ${name} keeps working until ${removal}.${detailNote(own.to)}`});else if(keepers.length)warn(start,{tag:owner,member:name,code:RENAME_TARGET_SHARED_REVIEW,target:own.to,message:`Not renamed: ${list(keepers)} also ${keepers.length===1?"dispatches":"dispatch"} ${own.to}, so this listener would start receiving their events when they are nested inside this ${owner}. Rename it by hand and ignore events whose target is not this ${owner}; ${name} keeps working until ${removal}.${detailNote(own.to)}`});else if(conflict)warn(start,{tag:owner,member:name,code:RENAME_CONFLICT_REVIEW,target:own.to,message:`${conflictMessage(conflict,`This ${owner}`,own.to)} ${name} keeps working until ${removal}.`});else{const narrowed=profile.sourceKeepers("event",name,own.to).filter(tag=>tag!==owner);rewrite(start,start+name.length,own.to,{tag:owner,member:name,action:"rewrite-event",target:own.to,message:`Rename the ${owner} event ${name} to ${own.to}.`+(narrowed.length?` ${list(narrowed)} still ${narrowed.length===1?"dispatches":"dispatch"} ${name}; this listener stops hearing theirs from nested elements.`:"")}),current=own.to}}else profile.renamesNamed("event",name).length&&!profile.exposes("event",name,owner)&&(conflict?warn(start,{tag:soleTag(profile.renamesNamed("event",name)),member:name,code:RENAME_CONFLICT_REVIEW,target:profile.renamesNamed("event",name)[0].to,message:conflictMessage(conflict,conflict==="same-handler"?"This receiver":"This element",profile.renamesNamed("event",name)[0].to)}):current=unownedMove({kind:"event",name,start,context,rewritable,action:"rewrite-event"})??name);const details=profile.detailsNamed(current),ownDetail=owner?profile.detailFor(owner,current):null;if(ownDetail||details.length&&!profile.exposes("event",current,owner)){const affected=ownDetail?[ownDetail]:details;warn(start,{tag:ownDetail?owner:soleTag(affected),member:current,code:DETAIL_SHAPE_REVIEW,target:current,message:`The ${current} event detail changed in ${release} and cannot be aliased: `+affected.map(entry=>`${entry.tag}: ${entry.summary}`).join(" ")+` Update this handler if it reads the detail of ${ownDetail?`the ${owner} event`:"one of these components"}.`})}const gained=current===name?profile.gainedOwners("event",name):[];gained.length&&!profile.exposes("event",name,owner)&&warn(start,{tag:soleTag(gained.map(tag=>({tag}))),member:name,code:NAME_GAINED_OWNER_REVIEW,target:name,message:`In ${release}, ${list(gained)} also ${gained.length===1?"dispatches":"dispatch"} ${name}. This ${context} does not prove which element it listens to, so it may start receiving those events; ignore them by event target if it should not.`}),unownedReviews("event",name,start,owner)},reportedDetailFieldOffsets=new Set,detailFieldAccess=/\b([A-Za-z_$][\w$]*)\s*(?:\?\.|\.)\s*detail\s*(?:\?\.|\.)\s*(open|collapsed)\b/g,reportDetailField=(field,start,owner=null,event=null)=>{if(reportedDetailFieldOffsets.has(start))return;const exact=owner&&event?profile.detailFieldFor(owner,event):null;if(exact&&exact.field===field){const target=exact.relation==="equal"?"detail.expanded":"!detail.expanded",relation=exact.relation==="equal"?"carries the same value as":"is the inverse of",removal2=exact.removedIn?` It was removed in ${exact.removedIn}.`:" This notice does not assert that the field was removed.";warn(start,{tag:owner,member:field,code:DETAIL_FIELD_REVIEW,target,message:`The ${owner} ${event} detail field ${field} is deprecated: it ${relation} detail.expanded (${exact.notice}). Read ${target} in this handler by hand; no field rewrite was applied.${removal2}`}),reportedDetailFieldOffsets.add(start);return}const candidates=event?profile.detailFieldsNamed(event).filter(entry=>entry.field===field):[],possible=candidates.length?candidates:(profile.data.detailFields??[]).filter(entry=>entry.field===field);if(!possible.length)return;const possibilities=[...new Set(possible.map(entry=>`${entry.tag}/${entry.event} (${entry.relation})`))];warn(start,{tag:null,member:field,code:DETAIL_FIELD_REVIEW,target:null,message:`This detail.${field} read has no proven Lyra tag and event. Matching published field contracts are ${possibilities.join(", ")}; identify the runtime detail type and migrate it by hand. No field rewrite was applied.`}),reportedDetailFieldOffsets.add(start)},inspectMarkupDetailFields=(owner,event,attribute)=>{if(attribute.valueStart===null||attribute.valueEnd===null)return;const value=original.slice(attribute.valueStart,attribute.valueEnd);for(const match of value.matchAll(detailFieldAccess)){const start=attribute.valueStart+match.index+match[0].lastIndexOf(match[2]);reportDetailField(match[2],start,owner,event)}};for(const token of openingTokens){const owner=token.tag.toLowerCase();for(const attribute of parseTagAttributes(original,token)){const event=markupEventName(attribute.rawName);event&&/^lr-/u.test(event.name)&&inspectMarkupDetailFields(owner,event.name,attribute)}}const memberSite=({owner,kind,name,start,forms,dynamic,removal:removalRange})=>{const propertyChange=forms.filter(([candidateKind])=>candidateKind==="property").map(([,candidate])=>profile.propertyChangeFor(owner,candidate)).find(Boolean);propertyChange&&reportPropertyChange(start,propertyChange);const review=forms.map(([candidateKind,candidate])=>profile.reviewFor(owner,candidateKind,candidate)).find(Boolean);review&&reportReview(start,review);const rule=forms.map(([candidateKind,candidate])=>profile.renameFor(owner,candidateKind,candidate)).find(Boolean);if(!rule)return null;if(rule.polarity==="inverted"&&(dynamic||!removalRange)){const target=kind==="binding"?memberStyle(name,rule.to):rule.to;return warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${target} is the inverse of ${name} on ${owner}, and this ${kind==="binding"?"binding":kind==="property"?"property access":"attribute binding"} is not a static attribute. Bind the negated value to ${target} by hand; ${name} keeps working until ${removal}.`}),null}return rule},renamedMembers=owner=>unique([...profile.data.renames.filter(entry=>entry.tag===owner&&["attribute","property","event"].includes(entry.kind)).map(entry=>entry.from),...profile.data.reviews.filter(entry=>entry.tag===owner&&["attribute","property","event"].includes(entry.kind)).map(entry=>entry.name),...profile.data.retiredEvents.filter(entry=>entry.tag===owner).map(entry=>entry.event),...profile.data.propertyChanges.filter(entry=>entry.tag===owner).flatMap(entry=>[entry.property,...entry.former?[entry.former]:[]])]),defaultTokens=[];for(const token of openingTokens){const owner=token.tag.toLowerCase(),attributes=parseTagAttributes(original,token),lyraOwner=profile.tags.has(owner),bound=lyraOwner?boundMemberNames(attributes):null,finalNames=new Map,planned=attributes.map(attribute=>{const event=markupEventName(attribute.rawName);let finalRaw=attribute.rawName;if(event&&/^lr-/.test(event.name)){const to=eventMove(event.name,owner);to&&(finalRaw=attribute.rawName.slice(0,event.offset)+to+attribute.rawName.slice(event.offset+event.name.length))}else if(lyraOwner){const binding=markupMemberBinding(attribute),rule=binding&&!binding.form.startsWith("member")&&profile.renameFor(owner,binding.form,binding.name);rule&&!rule.polarity&&(finalRaw=attribute.rawName.slice(0,binding.offset)+rule.to+attribute.rawName.slice(binding.offset+binding.name.length))}const key=finalRaw.toLowerCase();return finalNames.set(key,(finalNames.get(key)??0)+1),{attribute,event,key,renamed:finalRaw!==attribute.rawName}});if(lyraOwner&&renamedMembers(owner).length)for(const group of openingTagBraceGroups(original,token)){const shorthand=/^[A-Za-z_$][\w$]*$/.exec(group.body)?.[0];if(!shorthand){warn(group.start,{tag:owner,member:owner,code:"DYNAMIC_VALUE_REVIEW",target:null,message:`This spread on ${owner} may carry renamed or deprecated members (${list(renamedMembers(owner))}); rename them where the object is built.`});continue}const forms=[["property",camelCase(shorthand)],["attribute",kebabCase(shorthand)]],review=forms.map(([kind,name])=>profile.reviewFor(owner,kind,name)).find(Boolean);review&&reportReview(group.start+1,review);const propertyChange=profile.propertyChangeFor(owner,camelCase(shorthand));propertyChange&&reportPropertyChange(group.start+1,propertyChange);const rule=forms.map(([kind,name])=>profile.renameFor(owner,kind,name)).find(Boolean);rule&&warn(group.start+1,{tag:owner,member:rule.from,code:rule.polarity?POLARITY_REVIEW:RENAME_REVIEW,target:rule.to,message:`The shorthand {${shorthand}} binds the deprecated ${owner} ${rule.kind} ${rule.from}; write ${memberStyle(shorthand,rule.to)}={${rule.polarity?`!${shorthand}`:shorthand}} by hand.`})}for(const{attribute,event,key,renamed}of planned){if(event){/^lr-/.test(event.name)&&(inspectMarkupDetailFields(owner,event.name,attribute),eventSite({name:event.name,start:attribute.nameStart+event.offset,owner,context:"listener",conflict:renamed&&finalNames.get(key)>1}));continue}if(!lyraOwner)continue;if(/^v-(?:bind|on)$/.test(attribute.rawName)||attribute.rawName.startsWith("${")&&!/^\$\{\s*ref\s*\(/.test(attribute.rawName)){renamedMembers(owner).length&&warn(attribute.nameStart,{tag:owner,member:owner,code:"DYNAMIC_VALUE_REVIEW",target:null,message:`This object binding on ${owner} may carry renamed or deprecated members (${list(renamedMembers(owner))}); rename them where the object is built.`});continue}if(attribute.rawName==="exportparts"){if(attribute.valueKind!=="literal"||/\$\{|\{\{/.test(attribute.value??""))continue;for(const match of(attribute.value??"").matchAll(/([^,\s:]+)(\s*:\s*[^,\s]+)?/g)){const inner=match[1],start2=attribute.valueStart+match.index,review=profile.reviewFor(owner,"part",inner);review&&reportReview(start2,review);const rule2=profile.renameFor(owner,"part",inner);rule2&&rewrite(start2,start2+inner.length,match[2]?rule2.to:`${rule2.to}:${inner}`,{tag:owner,member:inner,action:"rewrite-part",target:rule2.to,message:match[2]?`Forward the renamed ${owner} part ${rule2.to} under the same exported name.`:`Forward the renamed ${owner} part ${rule2.to} under its previous exported name ${inner}.`})}continue}const binding=markupMemberBinding(attribute);if(!binding)continue;const forms=binding.form==="member"?[["property",camelCase(binding.name)],["attribute",kebabCase(binding.name)]]:[[binding.form,binding.name]],start=attribute.nameStart+binding.offset,staticAttribute=binding.form==="attribute"&&binding.offset===0&&!binding.dynamic,rule=memberSite({owner,kind:binding.form==="member"?"binding":binding.form,name:binding.name,start,forms,dynamic:binding.dynamic,removal:staticAttribute});if(!rule)continue;if(bound.has(kebabCase(rule.to))||renamed&&finalNames.get(key)>1){warn(start,{tag:owner,member:rule.from,code:RENAME_CONFLICT_REVIEW,target:rule.to,message:`This ${owner} already binds ${rule.to}; remove the deprecated ${rule.from} binding by hand.`});continue}if(rule.polarity==="inverted"){if(!attributeSemantics(token.start)){warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${rule.to} is the inverse of ${rule.from}. In this template syntax a static value may be assigned to the ${camelCase(rule.from)} property as a string, where "false" is truthy, so set ${rule.to} by hand.`});continue}if(profile.preservedDefaultsFor(owner).some(entry=>entry.attribute===rule.to&&entry.value===!0)){warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${rule.from} has a preserved absent default, so removing an explicit attribute would let a later run insert ${rule.to}. Review this value using the old converter (a presence boolean treats even "false" as true), then migrate it by hand after the default migration is complete.`});continue}const value=attribute.value??"",end=attributeEnd(original,attribute);if(value===""||value==="true"||value===rule.from){let removeFrom=attribute.nameStart;for(;removeFrom>0&&/\s/.test(original[removeFrom-1]);)removeFrom-=1;rewrite(removeFrom,end,"",{tag:owner,member:rule.from,action:"remove-attribute",target:rule.to,message:`Remove ${rule.from}: it restated the ${owner} default, and ${rule.to} is off by default.`})}else value==="false"?rewrite(attribute.nameStart,end,rule.to,{tag:owner,member:rule.from,action:"rewrite-attribute",target:rule.to,message:`Replace ${rule.from}="false" with the presence of ${rule.to}.`}):warn(start,{tag:owner,member:rule.from,code:POLARITY_REVIEW,target:rule.to,message:`${rule.from}="${attribute.value}" is not a boolean literal; set ${rule.to} to its inverse by hand.`});continue}const target=binding.form==="member"?memberStyle(binding.name,rule.to):rule.to;rewrite(start,start+binding.name.length,target,{tag:owner,member:rule.from,action:`rewrite-${rule.kind}`,target:rule.to,message:`Rename the ${owner} ${rule.kind} ${rule.from} to ${rule.to}.`})}lyraOwner&&profile.defaultsFor(owner).length&&defaultTokens.push({token,owner,bound})}const slotTags=[...profile.tags].filter(tag=>profile.slotContentFor(tag).length||[...profile.data.renames,...profile.data.reviews].some(entry=>entry.tag===tag&&entry.kind==="slot"));for(const tag of slotTags)for(const pair of elementPairs(original,tag,inComment))for(const child of directChildTokens(original,pair.opening.end+1,pair.closingStart,inComment)){let slot="",start=child.nameStart;for(const attribute of parseTagAttributes(original,child))if(attribute.rawName==="slot")slot=attribute.valueKind==="literal"?attribute.value??"":null,start=attribute.valueStart??attribute.nameStart;else if(attribute.rawName==="v-slot")slot="";else{const prefix=["v-slot:","#"].find(candidate=>attribute.rawName.startsWith(candidate));prefix&&(slot=attribute.rawName.slice(prefix.length),start=attribute.nameStart+prefix.length,slot==="default"&&(slot=""))}if(slot===null)continue;const review=profile.reviewFor(tag,"slot",slot);review&&reportReview(start,review);const rule=slot===""?null:profile.renameFor(tag,"slot",slot);if(rule&&rewrite(start,start+slot.length,rule.to,{tag,member:slot,action:"rewrite-slot",target:rule.to,message:`Rename the ${tag} slot ${slot} to ${rule.to}.`}),child.tag!=="template")for(const content of profile.slotContentFor(tag)){if(content.slot!==slot)continue;const listed=(content.report??content.allow).includes(child.tag);(content.report?!listed:listed)||warn(child.nameStart,{tag,member:child.tag,code:DEPRECATED_CONTENT_REVIEW,target:null,message:`<${child.tag}> in ${slot===""?"the default slot":`the ${slot} slot`} of ${tag}: ${content.summary}`})}}for(const match of original.matchAll(/::part\(([^)]*)\)/g)){if(inComment(match.index))continue;const owner=compoundTypeBefore(original,match.index),listStart=match.index+7;for(const nameMatch of match[1].matchAll(/\S+/g)){const name=nameMatch[0],start=listStart+nameMatch.index,own=owner?profile.renameFor(owner,"part",name):null;if(own)rewrite(start,start+name.length,own.to,{tag:owner,member:name,action:"rewrite-part",target:own.to,message:`Rename the ${owner} part ${name} to ${own.to}.`});else if(profile.renamesNamed("part",name).length&&!profile.exposes("part",name,owner)){const renames=profile.renamesNamed("part",name),keepers=profile.exposers("part",name).filter(tag=>!renames.some(entry=>entry.tag===tag));warn(start,{tag:soleTag(renames),member:name,code:RENAME_REVIEW,target:list(renames.map(entry=>entry.to)),message:`This ::part() selector does not name the component that owns the part. ${list(renames.map(entry=>entry.tag))} renamed the part ${name} to ${list(renames.map(entry=>entry.to))}`+(keepers.length?`, while ${list(keepers)} still ${keepers.length===1?"exposes":"expose"} ${name}`:"")+". Rename it where the selector reaches a renamed component directly; a part forwarded through exportparts keeps its exported name."})}else if(profile.gainedOwners("part",name).length&&!owner?.startsWith("lr-")){const gained=profile.gainedOwners("part",name);warn(start,{tag:soleTag(gained.map(tag=>({tag}))),member:name,code:NAME_GAINED_OWNER_REVIEW,target:name,message:`In ${release}, ${list(gained)} also ${gained.length===1?"exposes":"expose"} the part ${name}, so this selector may start matching it.`})}unownedReviews("part",name,start,owner)}}const cssNames=new Set([...profile.data.renames.filter(entry=>entry.kind==="css-property").flatMap(entry=>[entry.from,entry.to]),...profile.data.reviews.filter(entry=>entry.kind==="css-property").map(entry=>entry.name)]);if(cssNames.size)for(const match of original.matchAll(/(?<![\w-])--[A-Za-z0-9_-]+/g)){const name=match[0];if(!cssNames.has(name)||inComment(match.index))continue;profile.renamesNamed("css-property",name).length&&unownedMove({kind:"css-property",name,start:match.index,context:"custom property",rewritable:!0,action:"rewrite-css-property"});const declaration=/^\s*['"]?\s*:/.test(original.slice(match.index+name.length,match.index+name.length+16))||/setProperty\s*\(\s*['"`]$/.test(original.slice(Math.max(0,match.index-24),match.index)),gained=profile.gainedOwners("css-property",name);declaration&&gained.length&&warn(match.index,{tag:soleTag(gained.map(tag=>({tag}))),member:name,code:NAME_GAINED_OWNER_REVIEW,target:name,message:`In ${release}, ${list(gained)} also ${gained.length===1?"reads":"read"} ${name}, so this declaration now reaches them when they are nested below it.`});for(const review of profile.reviewsNamed("css-property",name))reportReview(match.index,review)}for(const match of original.matchAll(/\[\s*([A-Za-z_][\w-]*)(?=\s*(?:[~|^$*]?=|\]))/g)){if(inComment(match.index))continue;const owner=compoundTypeBefore(original,match.index);if(!owner||!profile.tags.has(owner))continue;const name=match[1],start=match.index+match[0].length-name.length,review=profile.reviewFor(owner,"attribute",name);review&&reportReview(start,review);const rule=profile.renameFor(owner,"attribute",name);if(rule){if(rule.polarity==="inverted"){warn(start,{tag:owner,member:name,code:POLARITY_REVIEW,target:rule.to,message:`${rule.to} is the inverse of ${name}; rewrite this ${owner} selector to test the opposite state (for example :not([${rule.to}])).`});continue}if(!rule.reflects){warn(start,{tag:owner,member:name,code:RENAME_REVIEW,target:rule.to,message:`${owner} does not reflect ${rule.to}, so [${rule.to}] matches only where markup sets it. Rename this selector once every place that sets ${name} (markup, setAttribute) sets ${rule.to} instead.`});continue}rewrite(start,start+name.length,rule.to,{tag:owner,member:name,action:"rewrite-attribute",target:rule.to,message:`Rename the ${owner} attribute selector [${name}] to [${rule.to}]; ${owner} reflects ${rule.to}.`})}}for(const match of original.matchAll(/:state\(\s*([a-z][a-z0-9-]*)\s*\)/g)){if(inComment(match.index))continue;const owner=compoundTypeBefore(original,match.index),review=owner?profile.reviewFor(owner,"css-state",match[1]):null;review&&reportReview(match.index+match[0].indexOf(match[1]),review)}for(const review of profile.data.reviews.filter(entry=>entry.kind==="component"))for(const match of original.matchAll(new RegExp(`(?<![\\w-])${review.tag}(?![\\w-])`,"g")))inComment(match.index)||original.slice(match.index-2,match.index)==="</"||reportReview(match.index,review);const anchoredDetailListener=/(?:document\.)?querySelector\(\s*(['"])(lr-[a-z0-9-]+)\1\s*\)\s*!?\s*\.\s*addEventListener\(\s*(['"])(lr-[a-z0-9-]+)\3\s*,/g,unownedDetailListener=/[A-Za-z_$][\w$]*\s*\.\s*addEventListener\(\s*(['"])(lr-[a-z0-9-]+)\1\s*,/g,scriptListenerAt=offset=>{const start=Math.max(0,offset-4096),prefix=original.slice(start,offset);let result2=null;for(const pattern of[anchoredDetailListener,unownedDetailListener]){pattern.lastIndex=0;for(const match of prefix.matchAll(pattern)){const event=pattern===anchoredDetailListener?match[4]:match[2],callbackStart=match.index+match[0].length,callback=prefix.slice(callbackStart);!/=>|\bfunction\b/u.test(callback)||/\)\s*;/u.test(callback)||(!result2||match.index>=result2.index)&&(result2={owner:pattern===anchoredDetailListener?match[2]:null,event,index:match.index})}}return result2};for(const match of original.matchAll(detailFieldAccess)){const offset=match.index+match[0].lastIndexOf(match[2]);if(reportedDetailFieldOffsets.has(offset)||inComment(offset)||inLiteral(offset)||inCss(offset))continue;const listener=scriptListenerAt(offset);reportDetailField(match[2],offset,listener?.owner??null,listener?.event??null)}for(const match of original.matchAll(ANCHORED_MEMBER)){if(inComment(match.index))continue;const owner=match[2],member=match[3],start=match.index+match[0].length-member.length,after=start+member.length;if(handledMembers.add(start),LISTENER_METHODS.has(member)||ATTRIBUTE_METHODS.has(member)){const call=/^\s*\(\s*(['"`])([^'"`\n]+)\1/.exec(original.slice(after,after+200));if(!call)continue;const valueStart=after+call[0].length-1-call[2].length;if(handledStrings.add(valueStart-1),LISTENER_METHODS.has(member)){eventSite({name:call[2],start:valueStart,owner,context:"listener",conflict:sameHandlerListens(valueStart-1,call[2])&&"same-handler"});continue}const rule2=memberSite({owner,kind:"attribute",name:call[2],start:valueStart,forms:[["attribute",call[2]]],dynamic:!0});rule2&&rewrite(valueStart,valueStart+call[2].length,rule2.to,{tag:owner,member:rule2.from,action:"rewrite-attribute",target:rule2.to,message:`Rename the ${owner} attribute ${rule2.from} to ${rule2.to}.`});continue}if(!profile.tags.has(owner))continue;if(/^\s*\(/.test(original.slice(after,after+64))){const review=profile.reviewFor(owner,"method",member);review&&reportReview(start,review);continue}const rule=memberSite({owner,kind:"property",name:member,start,forms:[["property",member]],dynamic:!0});rule&&rewrite(start,after,rule.to,{tag:owner,member:rule.from,action:"rewrite-property",target:rule.to,message:`Rename the ${owner} property ${rule.from} to ${rule.to}.`})}const eventNameMatters=name=>profile.renamesNamed("event",name).length||profile.detailsNamed(name).length||profile.retiredEventsNamed(name).length||profile.reviewsNamed("event",name).length||profile.gainedOwners("event",name).length;for(const match of original.matchAll(/(['"`])(?:(window|document|body):)?(lr-[a-z0-9]+(?:-[a-z0-9]+)*)\1/g)){const name=match[3];if(handledStrings.has(match.index)||inComment(match.index)||!eventNameMatters(name))continue;const before=original.slice(Math.max(0,match.index-120),match.index);if(!match[2]&&TAG_API_CALL_BEFORE.test(before))continue;const listener=LISTENER_CALL_BEFORE.test(before);eventSite({name,start:match.index+1+(match[2]?match[2].length+1:0),owner:null,context:listener?"listener":"event name string",rewritable:listener,conflict:listener&&!match[2]&&sameHandlerListens(match.index,name)&&"same-handler"})}const mentioned=mentionedTags(original,profile.tags,inComment),accessRules=new Map,addAccess=(name,candidate)=>accessRules.set(name,[...accessRules.get(name)??[],candidate]);for(const entry of profile.data.renames)entry.kind==="property"&&mentioned.has(entry.tag)&&addAccess(entry.from,{tag:entry.tag,rule:entry,call:!1});for(const entry of profile.data.reviews)(entry.kind==="property"||entry.kind==="method")&&mentioned.has(entry.tag)&&addAccess(entry.name,{tag:entry.tag,review:entry,call:entry.kind==="method"});for(const entry of profile.data.propertyChanges)if(mentioned.has(entry.tag))for(const name of[entry.property,...entry.former?[entry.former]:[]])addAccess(name,{tag:entry.tag,propertyChange:entry,call:!1});if(accessRules.size){const inString=rangeTester(mergeRanges(quotedStringRanges(original,inComment))),inStylesheet=rangeTester(stylesheetRanges(original,file,inComment)),inToken=rangeTester(mergeRanges(openingTokens.map(token=>[token.start+1,token.end])));for(const match of original.matchAll(/(?<=[\w$)\]])\s*(?:\?\.|!?\.)\s*([A-Za-z_$][\w$]*)/g)){const name=match[1],candidates=accessRules.get(name);if(!candidates)continue;const start=match.index+match[0].length-name.length;if(handledMembers.has(start)||reportedDetailFieldOffsets.has(start)||inComment(start)||inString(start)||inStylesheet(start)||inToken(start))continue;const call=/^\s*\(/.test(original.slice(start+name.length,start+name.length+64));for(const candidate of candidates){if(candidate.call!==call)continue;if(candidate.propertyChange){reportPropertyChange(start,candidate.propertyChange);continue}if(candidate.review){reportReview(start,candidate.review);continue}const{rule}=candidate;warn(start,{tag:rule.tag,member:name,code:rule.polarity?POLARITY_REVIEW:RENAME_REVIEW,target:rule.to,message:`If this reads or writes an ${rule.tag}, ${rule.polarity?`use the inverse property .${rule.to}`:`rename .${name} to .${rule.to}`}; .${name} keeps working until ${removal}.`})}}}for(const match of original.matchAll(/\.\s*(?:set|get|has|remove|toggle)Attribute\s*\(\s*(['"`])([a-z][a-z0-9-]*)\1/g)){const name=match[2],start=match.index+match[0].length-1-name.length;if(!(handledStrings.has(start-1)||inComment(match.index)))for(const tag of mentioned){const review=profile.reviewFor(tag,"attribute",name);review&&reportReview(start,review);const rule=profile.renameFor(tag,"attribute",name);rule&&warn(start,{tag,member:name,code:rule.polarity?POLARITY_REVIEW:RENAME_REVIEW,target:rule.to,message:`If this element is an ${tag}, ${rule.polarity?`use the inverse attribute ${rule.to}`:`rename ${name} to ${rule.to}`}; ${name} keeps working until ${removal}.`})}}if(profile.data.defaults.length){const defaultProfiles=new Map([...new Set(profile.data.defaults.map(entry=>entry.tag))].map(tag=>[tag,{origin,tag,defaults:profile.defaultsFor(tag).map(entry=>({member:entry.attribute,value:entry.value}))}])),hazards=scanLocalMigrationHazards(original,defaultProfiles,ignoredRanges,defaultTokens.map(({token})=>({...token,tag:token.tag.toLowerCase()}))),blocked=new Set([...options.blockedLocalMigrations??[],...hazards.blocked]);result.blockedLocalMigrations=hazards.blocked;for(const use of hazards.uses)warn(use.offset,{tag:use.tag,member:use.tag,code:use.warningCode,target:use.tag,message:use.message});for(const{token,owner,bound}of defaultTokens){const missing=profile.defaultsFor(owner).filter(entry=>!profile.defaultAliasesFor(owner,entry.attribute).some(name=>bound.has(name)));if(!missing.length)continue;if(blocked.has(localMigrationKey(origin,owner))){warn(token.nameStart,{tag:owner,member:owner,code:"MAPPING_REVIEW_BLOCKED",target:owner,message:`${owner} did not receive its Lyra ${profile.fromMajor} defaults (${missing.map(entry=>`${entry.attribute}=${String(entry.value)}`).join(", ")}) because the scanned target set accesses it through a DOM alias or an opaque attribute spread. Add them by hand where the previous default matters.`});continue}const insertions=[];for(const entry of missing)insertions.push(serializeLocalDefault({member:entry.attribute,value:entry.value})),result.changes.push(reportEntry({textStarts:starts,file,offset:token.end,origin,upstreamTag:owner,upstreamMember:entry.attribute,action:"insert-default",target:`${entry.attribute}=${String(entry.value)}`,message:`Insert ${entry.attribute} to preserve the Lyra ${profile.fromMajor} default.`}));if(insertions.length){const insertionOffset=original[token.end-1]==="/"?token.end-1:token.end,replacement=/\s/.test(original[insertionOffset-1])?`${insertions.join(" ")} `:` ${insertions.join(" ")}`;edits.push({start:insertionOffset,end:insertionOffset,replacement})}}}if(!profile.skipped.length)for(const{offset,entry}of acknowledgements.unused()){const key=`${offset}:${UNUSED_ACKNOWLEDGEMENT}:${entry.token}`;seenWarnings.has(key)||(seenWarnings.add(key),result.warnings.push(reportEntry({textStarts:starts,file,offset,origin,upstreamTag:null,upstreamMember:entry.token,action:"manual-review",target:null,warningCode:UNUSED_ACKNOWLEDGEMENT,message:entry.code?`The acknowledgement ${entry.token} matches no report on the lines it covers; remove it.`:`The acknowledgement ${entry.token} is not of the form CODE:name, for example DETAIL_SHAPE_REVIEW:lr-close.`})))}return result.content=finalizeEdits(original,edits),sortReportEntries(result.changes,"action"),sortReportEntries(result.warnings,"warningCode"),result}export{migrateRenameText};
@@ -0,0 +1,3 @@
1
+ import{THEME_SCOPE_VOCABULARY}from"./theme-scope-vocabulary.generated.mjs";import{readDeclarations,splitTopLevel}from"./css-declarations.mjs";const THEME_SCOPE_RULE="theme-scopes",THEME_SCOPE_MARKER="data-lr-theme-scope",CONSUMED=new Set(THEME_SCOPE_VOCABULARY.consumedInputs),OUTPUTS=new Set(THEME_SCOPE_VOCABULARY.outputs),FEEDING=new Set(THEME_SCOPE_VOCABULARY.feedingOutputs),SCOPE_ATTRIBUTE=new RegExp(`(?:^|[\\s/])[?.:@]?(?:${THEME_SCOPE_VOCABULARY.scopeAttributes.join("|")})(?=[\\s=/>]|$)`),SCOPE_CLASS=new RegExp(`(?:^|[\\s"'\`{])(?:${THEME_SCOPE_VOCABULARY.scopeClasses.join("|")})(?=[\\s"'\`}]|$)`),MARKUP_EXTENSIONS=new Set(["html","htm","js","mjs","cjs","ts","mts","cts","jsx","tsx","vue","svelte","astro"]),CSS_EXTENSIONS=new Set(["css","scss","less","pcss","postcss"]),JSX_EXTENSIONS=new Set(["jsx","tsx"]),extensionOf=file=>/\.([a-z0-9]+)$/i.exec(file)?.[1]?.toLowerCase()??"";function lineColumn(text,offset){let line=1,lineStart=0;for(let index=text.indexOf(`
2
+ `);index!==-1&&index<offset;index=text.indexOf(`
3
+ `,index+1))line+=1,lineStart=index+1;return{line,column:offset-lineStart+1}}function*startTags(text){let index=0;for(;(index=text.indexOf("<",index))!==-1;){const name=/^<([a-zA-Z][\w:-]*)/.exec(text.slice(index,index+80));if(!name){index+=1;continue}let end=index+name[0].length,quote="",braces=0;for(;end<text.length;end++){const character=text[end];if(quote){character==="\\"?end+=1:character===quote&&(quote="");continue}if(braces){character==="{"?braces+=1:character==="}"?braces-=1:(character==='"'||character==="'"||character==="`")&&(quote=character);continue}if(character==='"'||character==="'")quote=character;else if(character==="{")braces=1;else if(character===">"||character==="<")break}if(text[end]!==">"){index+=1;continue}yield{start:index,tag:name[1],attributesStart:index+name[0].length,attributes:text.slice(index+name[0].length,end)},index=end+1}}function styleValue(attributes){const match=/(?:^|\s)[.:]?style\s*=\s*/.exec(attributes);if(!match)return null;const rest=attributes.slice(match.index+match[0].length),opener=rest[0];if(opener==='"'||opener==="'")return rest.slice(1,rest.indexOf(opener,1)===-1?void 0:rest.indexOf(opener,1));const start=opener==="$"&&rest[1]==="{"?2:opener==="{"?1:-1;if(start<0)return rest.split(/\s/)[0];let depth=1;for(let index=start;index<rest.length;index++)if(rest[index]==="{")depth+=1;else if(rest[index]==="}"&&--depth===0)return rest.slice(start,index);return rest.slice(start)}const declaredIn=value=>[...value.matchAll(/(--lr-(?:theme-)?[a-z0-9-]+)\s*['"`]?\s*:/g)].map(match=>match[1]),consumedIn=value=>[...new Set(declaredIn(value).filter(name=>CONSUMED.has(name)))],feedingIn=value=>[...new Set(declaredIn(value).filter(name=>FEEDING.has(name)))];function insideRepeat(text,offset){const before=text.slice(Math.max(0,offset-600),offset);return/\.map\(\s*(?:\([^)]*\)|[\w$]+)\s*=>|\brepeat\(|\bv-for=|\*ngFor=|\{#each\b|\.forEach\(/.test(before)}function selectorIsScope(selector){return isThemeScopeSelector(selector)}function withoutNegations(selector){let output="";for(let index=0;index<selector.length;index++){if(selector.startsWith(":not(",index)){let depth=0;for(index+=4;index<selector.length;index++)if(selector[index]==="(")depth+=1;else if(selector[index]===")"&&--depth===0)break;continue}output+=selector[index]}return output}function subjectCompound(selector){let depth=0,start=0;for(let index=0;index<selector.length;index++){const character=selector[index];character==="("||character==="["?depth+=1:character===")"||character==="]"?depth-=1:depth===0&&/[\s>+~]/.test(character)&&(start=index+1)}return selector.slice(start)}const SCOPE_FRAGMENTS=[":root","html",...THEME_SCOPE_VOCABULARY.scopeClasses.map(name=>`.${name}`),...THEME_SCOPE_VOCABULARY.scopeAttributes.map(name=>`[${name}`)];function isThemeScopeSelector(selector){const trimmed=withoutNegations(selector.trim()),subject=subjectCompound(trimmed);return SCOPE_FRAGMENTS.some(fragment=>subject.includes(fragment))?!0:/\.(?:light|dark)\b/.test(subject)&&trimmed.includes("[data-lr-look")}function cssReports(css,offset,text,file,warn){for(const declaration of readDeclarationsWithOffsets(css)){if(!declaration.selector)continue;const selectors=splitTopLevel(declaration.selector,",").map(selector=>selector.trim()).filter(selector=>!selectorIsScope(selector));if(!selectors.length)continue;const position=lineColumn(text,offset+declaration.offset);CONSUMED.has(declaration.property)?warn(position,{code:"THEME_SCOPE_CSS_INPUT_REVIEW",member:declaration.property,target:THEME_SCOPE_MARKER,message:`${selectors.join(", ")} sets ${declaration.property}, which the Lyra token layer consumes, but is not a theme scope: mark the matched elements with ${THEME_SCOPE_MARKER} (a :host or ::slotted() rule means the host or slotted element).`}):OUTPUTS.has(declaration.property)&&warn(position,{code:"THEME_SCOPE_OUTPUT_REVIEW",member:declaration.property,target:THEME_SCOPE_MARKER,message:FEEDING.has(declaration.property)?`${selectors.join(", ")} sets the shared output ${declaration.property}: it now reaches deeper (until the next theme scope), and the outputs derived from it no longer follow it. Set its --lr-theme-* input on a theme scope, or mark the element with ${THEME_SCOPE_MARKER}.`:`${selectors.join(", ")} sets the shared output ${declaration.property}: it now reaches deeper, until the next theme scope, instead of stopping at the first Lyra component.`})}}function readDeclarationsWithOffsets(css){const declarations=readDeclarations(css);let cursor=0;return declarations.map(declaration=>{const found=css.indexOf(declaration.property,cursor),offset=found===-1?cursor:found;return cursor=found===-1?cursor:found+declaration.property.length,{...declaration,offset}})}function analyzeThemeScopes(text,{file="input"}={}){const extension=extensionOf(file),warnings=[],marker=JSX_EXTENSIONS.has(extension)?` ${THEME_SCOPE_MARKER}=""`:` ${THEME_SCOPE_MARKER}`,warn=(position,{code,tag=null,member=null,target=null,message})=>warnings.push({file,...position,rule:THEME_SCOPE_RULE,upstreamTag:tag,upstreamMember:member,action:"manual-review",target,warningCode:code,message}),theme=/@aceshooting\/lyra-ui\/(?:dist\/)?theme\.css/.exec(text),tokensRoot=/@aceshooting\/lyra-ui\/(?:dist\/)?(?:styles\/)?tokens-root\.css/.exec(text);if(theme&&tokensRoot&&warn(lineColumn(text,tokensRoot.index),{code:"THEME_SCOPE_DOUBLE_LAYER_REVIEW",member:"tokens-root.css",message:"theme.css already carries the Lyra document token layer: remove the tokens-root.css import (it is the same layer alone, for pages without theme.css)."}),CSS_EXTENSIONS.has(extension))return cssReports(text,0,text,file,warn),{insertions:[],warnings,marker};if(!MARKUP_EXTENSIONS.has(extension)&&extension!=="")return{insertions:[],warnings,marker};const insertions=[];for(const tag of startTags(text)){const value=styleValue(tag.attributes);if(value===null)continue;const inputs=consumedIn(value),feeding=feedingIn(value);if(!inputs.length&&!feeding.length){/\.\.\.\s*[\w$.]+/.test(value)&&/style/.test(tag.attributes)&&warn(lineColumn(text,tag.start),{code:"THEME_SCOPE_DYNAMIC_INPUT_REVIEW",target:THEME_SCOPE_MARKER,message:`<${tag.tag}> spreads a style object; if it can carry a --lr-theme-* input the Lyra token layer consumes, mark the element with ${THEME_SCOPE_MARKER}.`});continue}if(/\sdata-lr-not-a-scope(?=[\s=>]|$)/.test(tag.attributes)||tag.tag.toLowerCase()==="html"||SCOPE_ATTRIBUTE.test(tag.attributes)||SCOPE_CLASS.test(classValue(tag.attributes)))continue;const position=lineColumn(text,tag.start),members=[...inputs,...feeding];insertions.push({offset:tag.attributesStart,change:{file,...position,rule:THEME_SCOPE_RULE,upstreamTag:tag.tag,upstreamMember:members.join(" "),action:"insert-theme-scope",target:THEME_SCOPE_MARKER,message:inputs.length?`Mark <${tag.tag}> with ${THEME_SCOPE_MARKER}: its inline ${inputs.join(", ")} must re-derive the Lyra token layer for the components below it.`:`Mark <${tag.tag}> with ${THEME_SCOPE_MARKER}: other shared outputs derive from its inline ${feeding.join(", ")}, and only a theme scope re-derives them.`}}),insideRepeat(text,tag.start)&&warn(position,{code:"THEME_SCOPE_REPEATED_REVIEW",tag:tag.tag,target:THEME_SCOPE_MARKER,message:`<${tag.tag}> is rendered in a loop: each instance is now a theme scope that re-derives the whole token layer. Prefer setting ${members.join(", ")} once on a common ancestor scope.`})}for(const match of text.matchAll(/\.setProperty\(\s*(['"`])(--lr-[a-z0-9-]+)\1/g))!CONSUMED.has(match[2])&&!FEEDING.has(match[2])||warn(lineColumn(text,match.index),{code:"THEME_SCOPE_DYNAMIC_INPUT_REVIEW",member:match[2],target:THEME_SCOPE_MARKER,message:CONSUMED.has(match[2])?`setProperty('${match[2]}') sets an input the Lyra token layer consumes: make sure the element is a theme scope (${THEME_SCOPE_MARKER}).`:`setProperty('${match[2]}') sets a shared output that other outputs derive from: they follow it only on a theme scope (${THEME_SCOPE_MARKER}).`});for(const match of text.matchAll(/\bcss`([^`]*)`/g))cssReports(match[1],match.index+4,text,file,warn);if(extension==="html"||extension==="htm"||extension==="vue"||extension==="svelte"||extension==="astro")for(const match of text.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi))cssReports(match[1],match.index+match[0].indexOf(">")+1,text,file,warn);return{insertions,warnings,marker}}function migrateThemeScopes(text,{file="input"}={}){const{insertions,warnings,marker}=analyzeThemeScopes(text,{file});let content=text;for(const{offset}of[...insertions].sort((left,right)=>right.offset-left.offset))content=`${content.slice(0,offset)}${marker}${content.slice(offset)}`;return{content,changes:insertions.map(({change})=>change),warnings}}function classValue(attributes){const match=/(?:^|\s)[.:]?(?:class|className)\s*=\s*/.exec(attributes);return match?attributes.slice(match.index+match[0].length,match.index+match[0].length+400):""}export{THEME_SCOPE_RULE,analyzeThemeScopes,isThemeScopeSelector,migrateThemeScopes};
@@ -0,0 +1 @@
1
+ const THEME_SCOPE_VOCABULARY=Object.freeze({consumedInputs:["--lr-theme-border-radius-container","--lr-theme-border-radius-m","--lr-theme-border-radius-pill","--lr-theme-border-radius-xs","--lr-theme-border-width-medium","--lr-theme-border-width-thick","--lr-theme-border-width-thin","--lr-theme-color-border-strong","--lr-theme-color-brand-border-loud","--lr-theme-color-brand-border-normal","--lr-theme-color-brand-border-quiet","--lr-theme-color-brand-fill-loud","--lr-theme-color-brand-fill-normal","--lr-theme-color-brand-fill-quiet","--lr-theme-color-brand-on-loud","--lr-theme-color-brand-on-normal","--lr-theme-color-brand-on-quiet","--lr-theme-color-danger-border-loud","--lr-theme-color-danger-border-normal","--lr-theme-color-danger-border-quiet","--lr-theme-color-danger-fill-loud","--lr-theme-color-danger-fill-normal","--lr-theme-color-danger-fill-quiet","--lr-theme-color-danger-on-loud","--lr-theme-color-danger-on-normal","--lr-theme-color-danger-on-quiet","--lr-theme-color-focus","--lr-theme-color-mix-active","--lr-theme-color-mix-hover","--lr-theme-color-mix-partner","--lr-theme-color-neutral-border-loud","--lr-theme-color-neutral-border-normal","--lr-theme-color-neutral-border-quiet","--lr-theme-color-neutral-fill-loud","--lr-theme-color-neutral-fill-normal","--lr-theme-color-neutral-fill-quiet","--lr-theme-color-neutral-on-loud","--lr-theme-color-neutral-on-normal","--lr-theme-color-neutral-on-quiet","--lr-theme-color-no-data","--lr-theme-color-on-strong-overlay","--lr-theme-color-overlay","--lr-theme-color-overlay-strong","--lr-theme-color-shadow","--lr-theme-color-success-border-loud","--lr-theme-color-success-border-normal","--lr-theme-color-success-border-quiet","--lr-theme-color-success-fill-loud","--lr-theme-color-success-fill-normal","--lr-theme-color-success-fill-quiet","--lr-theme-color-success-on-loud","--lr-theme-color-success-on-normal","--lr-theme-color-success-on-quiet","--lr-theme-color-surface-border","--lr-theme-color-surface-border-subtle","--lr-theme-color-surface-container","--lr-theme-color-surface-container-high","--lr-theme-color-surface-container-highest","--lr-theme-color-surface-container-low","--lr-theme-color-surface-container-lowest","--lr-theme-color-surface-default","--lr-theme-color-surface-overlay","--lr-theme-color-surface-raised","--lr-theme-color-text-normal","--lr-theme-color-text-quiet","--lr-theme-color-warning-border-loud","--lr-theme-color-warning-border-normal","--lr-theme-color-warning-border-quiet","--lr-theme-color-warning-fill-loud","--lr-theme-color-warning-fill-normal","--lr-theme-color-warning-fill-quiet","--lr-theme-color-warning-on-loud","--lr-theme-color-warning-on-normal","--lr-theme-color-warning-on-quiet","--lr-theme-duration-fast","--lr-theme-duration-icon","--lr-theme-duration-normal","--lr-theme-duration-slow","--lr-theme-easing-emphasized","--lr-theme-easing-linear","--lr-theme-easing-standard","--lr-theme-focus-ring-offset","--lr-theme-focus-ring-width","--lr-theme-font-family-body","--lr-theme-font-family-heading","--lr-theme-font-family-mono","--lr-theme-font-size-2xl","--lr-theme-font-size-2xs","--lr-theme-font-size-3xl","--lr-theme-font-size-3xs","--lr-theme-font-size-lg","--lr-theme-font-size-m","--lr-theme-font-size-md-sm","--lr-theme-font-size-sm","--lr-theme-font-size-xl","--lr-theme-font-size-xs","--lr-theme-font-weight-bold","--lr-theme-font-weight-medium","--lr-theme-font-weight-normal","--lr-theme-font-weight-semibold","--lr-theme-hover-brightness","--lr-theme-line-break","--lr-theme-line-height-1-4","--lr-theme-line-height-compact","--lr-theme-line-height-loose","--lr-theme-line-height-none","--lr-theme-line-height-normal","--lr-theme-line-height-snug","--lr-theme-opacity-disabled","--lr-theme-opacity-muted","--lr-theme-otp-input-segment-size","--lr-theme-popover-viewport-clamp","--lr-theme-scroll-fade-size","--lr-theme-shadow-color","--lr-theme-shadow-l","--lr-theme-shadow-m","--lr-theme-shadow-s","--lr-theme-shadow-xl","--lr-theme-shadow-xs","--lr-theme-size-0-02em","--lr-theme-size-0-03em","--lr-theme-size-0-04em","--lr-theme-size-0-05rem","--lr-theme-size-0-0625rem","--lr-theme-size-0-09375rem","--lr-theme-size-0-125rem","--lr-theme-size-0-15rem","--lr-theme-size-0-1875rem","--lr-theme-size-0-1rem","--lr-theme-size-0-25rem","--lr-theme-size-0-3125rem","--lr-theme-size-0-35em","--lr-theme-size-0-375rem","--lr-theme-size-0-3em","--lr-theme-size-0-4375rem","--lr-theme-size-0-4em","--lr-theme-size-0-4rem","--lr-theme-size-0-5em","--lr-theme-size-0-5rem","--lr-theme-size-0-625rem","--lr-theme-size-0-6875rem","--lr-theme-size-0-6rem","--lr-theme-size-0-75em","--lr-theme-size-0-75rem","--lr-theme-size-0-7em","--lr-theme-size-0-875em","--lr-theme-size-0-8rem","--lr-theme-size-0-9375rem","--lr-theme-size-1-0625rem","--lr-theme-size-1-1rem","--lr-theme-size-1-25rem","--lr-theme-size-1-5em","--lr-theme-size-1-5rem","--lr-theme-size-1-75rem","--lr-theme-size-10px","--lr-theme-size-10rem","--lr-theme-size-12em","--lr-theme-size-12rem","--lr-theme-size-14px","--lr-theme-size-14rem","--lr-theme-size-15rem","--lr-theme-size-16px","--lr-theme-size-16rem","--lr-theme-size-18rem","--lr-theme-size-1em","--lr-theme-size-1px","--lr-theme-size-1rem","--lr-theme-size-2-25rem","--lr-theme-size-2-5ch","--lr-theme-size-2-5rem","--lr-theme-size-20rem","--lr-theme-size-22rem","--lr-theme-size-24px","--lr-theme-size-24rem","--lr-theme-size-280px","--lr-theme-size-28px","--lr-theme-size-28rem","--lr-theme-size-2px","--lr-theme-size-2rem","--lr-theme-size-3-5em","--lr-theme-size-3-5rem","--lr-theme-size-30rem","--lr-theme-size-32rem","--lr-theme-size-36rem","--lr-theme-size-38rem","--lr-theme-size-3ch","--lr-theme-size-3px","--lr-theme-size-3rem","--lr-theme-size-48rem","--lr-theme-size-4ch","--lr-theme-size-4px","--lr-theme-size-4rem","--lr-theme-size-5em","--lr-theme-size-5rem","--lr-theme-size-6ch","--lr-theme-size-6em","--lr-theme-size-6px","--lr-theme-size-6rem","--lr-theme-size-7rem","--lr-theme-size-8em","--lr-theme-size-8rem","--lr-theme-size-neg-0-15rem","--lr-theme-size-neg-0-25rem","--lr-theme-size-neg-1px","--lr-theme-size-neg-4px","--lr-theme-size-neg-6px","--lr-theme-size-neg-8px","--lr-theme-space-2xl","--lr-theme-space-2xs","--lr-theme-space-l","--lr-theme-space-m","--lr-theme-space-s","--lr-theme-space-xs","--lr-theme-table-row-height","--lr-theme-transition-fast","--lr-theme-transition-normal","--lr-theme-transition-slow","--lr-theme-word-break","--lr-theme-z-index-base","--lr-theme-z-index-content","--lr-theme-z-index-dropdown","--lr-theme-z-index-modal","--lr-theme-z-index-popover","--lr-theme-z-index-toast"],outputs:["--lr-border-width-medium","--lr-border-width-thick","--lr-border-width-thin","--lr-color-border","--lr-color-border-strong","--lr-color-border-subtle","--lr-color-brand","--lr-color-brand-border-loud","--lr-color-brand-border-normal","--lr-color-brand-border-quiet","--lr-color-brand-fill-loud","--lr-color-brand-fill-normal","--lr-color-brand-fill-quiet","--lr-color-brand-on-loud","--lr-color-brand-on-normal","--lr-color-brand-on-quiet","--lr-color-brand-quiet","--lr-color-danger","--lr-color-danger-border-loud","--lr-color-danger-border-normal","--lr-color-danger-border-quiet","--lr-color-danger-fill-loud","--lr-color-danger-fill-normal","--lr-color-danger-fill-quiet","--lr-color-danger-on-loud","--lr-color-danger-on-normal","--lr-color-danger-on-quiet","--lr-color-danger-quiet","--lr-color-mix-active","--lr-color-mix-hover","--lr-color-mix-partner","--lr-color-neutral","--lr-color-neutral-border-loud","--lr-color-neutral-border-normal","--lr-color-neutral-border-quiet","--lr-color-neutral-fill-loud","--lr-color-neutral-fill-normal","--lr-color-neutral-fill-quiet","--lr-color-neutral-on-loud","--lr-color-neutral-on-normal","--lr-color-neutral-on-quiet","--lr-color-no-data","--lr-color-on-brand","--lr-color-on-danger","--lr-color-on-neutral","--lr-color-on-strong-overlay","--lr-color-on-success","--lr-color-on-warning","--lr-color-overlay","--lr-color-overlay-strong","--lr-color-shadow","--lr-color-success","--lr-color-success-border-loud","--lr-color-success-border-normal","--lr-color-success-border-quiet","--lr-color-success-fill-loud","--lr-color-success-fill-normal","--lr-color-success-fill-quiet","--lr-color-success-on-loud","--lr-color-success-on-normal","--lr-color-success-on-quiet","--lr-color-success-quiet","--lr-color-surface","--lr-color-surface-container","--lr-color-surface-container-high","--lr-color-surface-container-highest","--lr-color-surface-container-low","--lr-color-surface-container-lowest","--lr-color-surface-overlay","--lr-color-surface-raised","--lr-color-text","--lr-color-text-quiet","--lr-color-warning","--lr-color-warning-border-loud","--lr-color-warning-border-normal","--lr-color-warning-border-quiet","--lr-color-warning-fill-loud","--lr-color-warning-fill-normal","--lr-color-warning-fill-quiet","--lr-color-warning-on-loud","--lr-color-warning-on-normal","--lr-color-warning-on-quiet","--lr-color-warning-quiet","--lr-duration-ambient","--lr-duration-base","--lr-duration-fast","--lr-duration-icon","--lr-easing-emphasized","--lr-easing-linear","--lr-easing-standard","--lr-focus-ring","--lr-focus-ring-color","--lr-focus-ring-offset","--lr-focus-ring-width","--lr-font","--lr-font-heading","--lr-font-mono","--lr-font-size-2xl","--lr-font-size-2xs","--lr-font-size-3xl","--lr-font-size-3xs","--lr-font-size-lg","--lr-font-size-m","--lr-font-size-md-sm","--lr-font-size-sm","--lr-font-size-xl","--lr-font-size-xs","--lr-font-weight-bold","--lr-font-weight-medium","--lr-font-weight-normal","--lr-font-weight-semibold","--lr-hover-brightness","--lr-layer-base","--lr-layer-content","--lr-layer-dropdown","--lr-layer-modal","--lr-layer-popover","--lr-layer-toast","--lr-line-break","--lr-line-height-1-4","--lr-line-height-compact","--lr-line-height-loose","--lr-line-height-none","--lr-line-height-normal","--lr-line-height-snug","--lr-mask-opaque","--lr-opacity-disabled","--lr-opacity-muted","--lr-otp-input-segment-size","--lr-popover-viewport-clamp","--lr-radius","--lr-radius-container","--lr-radius-pill","--lr-radius-xs","--lr-safe-area-bottom","--lr-safe-area-top","--lr-scroll-fade-size","--lr-shadow","--lr-shadow-color","--lr-shadow-l","--lr-shadow-m","--lr-shadow-s","--lr-shadow-xl","--lr-shadow-xs","--lr-size-0-02em","--lr-size-0-03em","--lr-size-0-04em","--lr-size-0-05rem","--lr-size-0-0625rem","--lr-size-0-09375rem","--lr-size-0-125rem","--lr-size-0-15rem","--lr-size-0-1875rem","--lr-size-0-1rem","--lr-size-0-25rem","--lr-size-0-3125rem","--lr-size-0-35em","--lr-size-0-375rem","--lr-size-0-3em","--lr-size-0-4375rem","--lr-size-0-4em","--lr-size-0-4rem","--lr-size-0-5em","--lr-size-0-5rem","--lr-size-0-625rem","--lr-size-0-6875rem","--lr-size-0-6rem","--lr-size-0-75em","--lr-size-0-75rem","--lr-size-0-7em","--lr-size-0-875em","--lr-size-0-8rem","--lr-size-0-9375rem","--lr-size-1-0625rem","--lr-size-1-1rem","--lr-size-1-25rem","--lr-size-1-5em","--lr-size-1-5rem","--lr-size-1-75rem","--lr-size-10px","--lr-size-10rem","--lr-size-12em","--lr-size-12rem","--lr-size-14px","--lr-size-14rem","--lr-size-15rem","--lr-size-16px","--lr-size-16rem","--lr-size-18rem","--lr-size-1em","--lr-size-1px","--lr-size-1rem","--lr-size-2-25rem","--lr-size-2-5ch","--lr-size-2-5rem","--lr-size-20rem","--lr-size-22rem","--lr-size-24px","--lr-size-24rem","--lr-size-280px","--lr-size-28px","--lr-size-28rem","--lr-size-2px","--lr-size-2rem","--lr-size-3-5em","--lr-size-3-5rem","--lr-size-30rem","--lr-size-32rem","--lr-size-36rem","--lr-size-38rem","--lr-size-3ch","--lr-size-3px","--lr-size-3rem","--lr-size-48rem","--lr-size-4ch","--lr-size-4px","--lr-size-4rem","--lr-size-5em","--lr-size-5rem","--lr-size-6ch","--lr-size-6em","--lr-size-6px","--lr-size-6rem","--lr-size-7rem","--lr-size-8em","--lr-size-8rem","--lr-size-neg-0-15rem","--lr-size-neg-0-25rem","--lr-size-neg-1px","--lr-size-neg-4px","--lr-size-neg-6px","--lr-size-neg-8px","--lr-space-2xl","--lr-space-2xs","--lr-space-l","--lr-space-m","--lr-space-s","--lr-space-xs","--lr-table-row-min-height","--lr-transition-ambient","--lr-transition-base","--lr-transition-fast","--lr-transition-interactive","--lr-word-break"],feedingOutputs:["--lr-color-border","--lr-color-brand","--lr-color-brand-fill-loud","--lr-color-brand-fill-quiet","--lr-color-brand-on-loud","--lr-color-danger","--lr-color-danger-fill-loud","--lr-color-danger-fill-quiet","--lr-color-danger-on-loud","--lr-color-neutral-fill-loud","--lr-color-neutral-on-loud","--lr-color-success-fill-loud","--lr-color-success-fill-quiet","--lr-color-success-on-loud","--lr-color-surface","--lr-color-surface-overlay","--lr-color-surface-raised","--lr-color-text","--lr-color-warning-fill-loud","--lr-color-warning-fill-quiet","--lr-color-warning-on-loud","--lr-focus-ring-color","--lr-focus-ring-width","--lr-radius","--lr-shadow-m","--lr-transition-fast"],scopeAttributes:["data-lr-theme","data-lr-theme-scope","data-lr-mode","data-lr-look","data-lr-accent","data-lr-density","data-lr-contrast","data-lr-motion","data-lr-design-token-mode"],scopeClasses:["lr-light","lr-dark","lr-token-light","lr-token-dark"]});export{THEME_SCOPE_VOCABULARY};
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,query}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{applyComposedFocusRepair,captureComposedFocusRepair,repairComposedFocus}from"../../../internal/focus-navigation.js";import{chevronIcon}from"../../../internal/icons.js";import{formatTimeOfDay,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{styles}from"./activity-feed.styles.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{firstByIdentityMemo}from"../collection-identity.js";import{LYRA_DEFAULT_activityFeedCompletedSteps,LYRA_DEFAULT_activityFeedLabel}from"../../../internal/default-strings.generated.js";const ACTIVITY_FEED_MODE=literalSetConverter(["live","post-hoc"],"live"),NEAR_BOTTOM_PX=48,entryId=entry=>entry.id;function variantDotPart(variant){return variant==="brand"?"variant-dot variant-dot-brand":variant==="success"?"variant-dot variant-dot-success":variant==="warning"?"variant-dot variant-dot-warning":variant==="danger"?"variant-dot variant-dot-danger":"variant-dot variant-dot-neutral"}class LyraActivityFeed extends LyraElement{constructor(){super(...arguments),this.entries=[],this._mode="live",this.follow=!0,this.expanded=!1,this.size="m",this.frame="card",this.withTimestamps=!1,this.virtualizeAt=199,this.headerId=nextId("activity-feed-header"),this.bodyId=nextId("activity-feed-body"),this.activityEntryKey=item=>item.id,this.isMounting=!0,this.anchoringVirtualTail=!1,this.ownerRealmGeneration=0,this.virtualAnchorRequest=0,this.relationshipSyncRequest=0,this.entryFocusRepairRequest=0,this.toggle=()=>{const expanded=!this.expanded;this.emit("lr-toggle-request",{expanded},{cancelable:!0}).defaultPrevented||(this.expanded=expanded,this.emit("lr-toggle",{expanded}))},this.onBodyScroll=e=>{if(this.isVirtualized||this.mode!=="live")return;const body=e.currentTarget,nearBottom=body.scrollHeight-body.scrollTop-body.clientHeight<=NEAR_BOTTOM_PX;this.setFollowFromUser(nearBottom)},this.onVirtualListRangeChanged=e=>{if(e.stopPropagation(),this.mode!=="live"||this.anchoringVirtualTail)return;const entries=this.normalizedEntries,atBottom=entries.length>0&&e.detail.end>=entries.length-1;this.setFollowFromUser(atBottom)},this.stopOwnedEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,activityFeedCompletedSteps:LYRA_DEFAULT_activityFeedCompletedSteps,activityFeedLabel:LYRA_DEFAULT_activityFeedLabel}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.identityCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get mode(){return this._mode}set mode(next){const normalized=ACTIVITY_FEED_MODE.normalizeReflected(this,"mode",next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.syncListRelationships(),this.scheduleListRelationshipSync()),this.hasUpdated&&this.shouldFollowLiveTail&&this.scrollToLatest()}disconnectedCallback(){this.releaseListRelationships(),this.resetOwnerRealmWork(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseListRelationships(),this.resetOwnerRealmWork(),this.isConnected&&this.hasUpdated&&(this.syncListRelationships(),this.scheduleListRelationshipSync()),this.isConnected&&this.shouldFollowLiveTail&&this.scrollToLatest()}get effectiveVirtualizeAt(){return finiteCount(this.virtualizeAt,199)}get normalizedEntries(){return firstByIdentityMemo(Array.isArray(this.entries)?this.entries:[],entryId)}get isVirtualized(){return this.normalizedEntries.length>this.effectiveVirtualizeAt}get shouldFollowLiveTail(){return this.expanded&&this.mode==="live"&&this.follow}cancelScrollFrame(){this.scrollRafId!==void 0&&this.scrollRafOwner?.cancelAnimationFrame(this.scrollRafId),this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0}cancelVirtualAnchorReleaseFrame(){this.virtualAnchorReleaseRafId!==void 0&&this.virtualAnchorReleaseRafOwner?.cancelAnimationFrame(this.virtualAnchorReleaseRafId),this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0}resetOwnerRealmWork(){this.ownerRealmGeneration+=1,this.virtualAnchorRequest+=1,this.relationshipSyncRequest+=1,this.entryFocusRepairRequest+=1,this.pendingEntryFocusRepair=void 0,this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1}willUpdate(changed){super.willUpdate(changed),(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live"&&(this.follow=!0),changed.has("expanded")&&changed.get("expanded")===!0&&!this.expanded&&this.repairFocusOnCollapse(),changed.has("entries")&&this.captureEntryFocusRepair()}updated(changed){super.updated(changed),this.syncListRelationships(),this.scheduleListRelationshipSync();const wasMounting=this.isMounting;if(this.isMounting=!1,!wasMounting&&changed.has("mode")&&changed.get("mode")==="live"&&this.mode==="post-hoc"){const region=this.liveRegion;region&&(region.mode="polite",region.announce(this.completedStepsSummary(this.normalizedEntries.length),{force:!0}))}const justAnchored=(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live",followingChangedRenderPath=changed.has("virtualizeAt")&&this.expanded&&this.mode==="live"&&this.follow;(justAnchored||followingChangedRenderPath||changed.has("entries")&&this.expanded&&this.mode==="live"&&this.follow)&&this.scrollToLatest(),changed.has("entries")&&this.pendingEntryFocusRepair&&this.settleEntryFocusRepair()}get headerElement(){return this.hasUpdated?this.renderRoot?.querySelector('[part="header"]')??null:null}repairFocusOnCollapse(){repairComposedFocus(this,()=>this.headerElement)}captureEntryFocusRepair(){this.pendingEntryFocusRepair=captureComposedFocusRepair(this,this.headerElement)??void 0}settleEntryFocusRepair(){const pending=this.pendingEntryFocusRepair;if(this.pendingEntryFocusRepair=void 0,!pending)return;const request=++this.entryFocusRepairRequest,generation=this.ownerRealmGeneration,settle=()=>{request!==this.entryFocusRepairRequest||generation!==this.ownerRealmGeneration||!this.isConnected||pending.activeElement.isConnected||applyComposedFocusRepair(pending,()=>this.headerElement)},list=this.virtualListEl;list?list.updateComplete.then(settle):settle()}scrollToLatest(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||!this.isConnected||!this.shouldFollowLiveTail)return;const generation=this.ownerRealmGeneration;if(this.isVirtualized){this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!0;const request=++this.virtualAnchorRequest;this.updateComplete.then(()=>{const list=this.virtualListEl;if(request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||this.ownerDocument!==ownerDocument||!this.isConnected)return;if(!list||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}list.scrollToIndex(this.normalizedEntries.length-1,{align:"end",behavior:"auto"});const firstHandle=ownerWindow.requestAnimationFrame(()=>{if(this.virtualAnchorReleaseRafId!==firstHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument)return;if(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,!this.anchoringVirtualTail||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}const secondHandle=ownerWindow.requestAnimationFrame(()=>{this.virtualAnchorReleaseRafId!==secondHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,this.anchoringVirtualTail=!1)});this.virtualAnchorReleaseRafId=secondHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});this.virtualAnchorReleaseRafId=firstHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});return}if(this.virtualAnchorRequest+=1,this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1,this.scrollRafId!==void 0)return;const handle=ownerWindow.requestAnimationFrame(()=>{if(this.scrollRafId!==handle||this.scrollRafOwner!==ownerWindow||this.scrollRafDocument!==ownerDocument||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0,!this.shouldFollowLiveTail||this.isVirtualized))return;const body=this.renderRoot.querySelector('[part="body"]');body&&(body.scrollTop=body.scrollHeight)});this.scrollRafId=handle,this.scrollRafOwner=ownerWindow,this.scrollRafDocument=ownerDocument}completedStepsSummary(count){return this.localize("activityFeedCompletedSteps",void 0,{count:getNumberFormat(this.effectiveLocale).format(count),pluralCount:count})}get listSemanticOwner(){return this.isVirtualized?this.virtualListEl?.scrollContainer??null:this.renderRoot.querySelector('[part="body"][role="list"]')}syncListRelationships(){const target=this.listSemanticOwner;if(!target){this.releaseListRelationships();return}this.externalLabelledByLease?this.externalLabelledByLease.update(target):this.externalLabelledByLease=acquireResolvedAriaRelationship(this,target,"aria-labelledby"),this.externalDescribedByLease?this.externalDescribedByLease.update(target):this.externalDescribedByLease=acquireResolvedAriaRelationship(this,target,"aria-describedby")}scheduleListRelationshipSync(){const list=this.virtualListEl;if(!this.isVirtualized||!list||!this.isConnected){this.relationshipSyncRequest+=1;return}const request=++this.relationshipSyncRequest,ownerDocument=this.ownerDocument,generation=this.ownerRealmGeneration;list.updateComplete.then(()=>{request!==this.relationshipSyncRequest||generation!==this.ownerRealmGeneration||this.ownerDocument!==ownerDocument||!this.isConnected||!this.isVirtualized||this.virtualListEl!==list||this.syncListRelationships()})}releaseListRelationships(){this.externalLabelledByLease?.release(),this.externalLabelledByLease=void 0,this.externalDescribedByLease?.release(),this.externalDescribedByLease=void 0}setFollowFromUser(following){following!==this.follow&&(this.follow=following,this.emit("lr-follow-change",{following}))}normalizedTimestamp(value){if(value===void 0)return;const date=value instanceof Date?value:new Date(value);return Number.isNaN(date.getTime())?void 0:date}entryTemplate(entry,ownRole){const ts=this.normalizedTimestamp(entry.timestamp),formatter=this.formatTimestamp??(date=>formatTimeOfDay(date,this.effectiveLocale)),variant=entry.variant??"neutral",dotPart=variantDotPart(variant);return html`
1
+ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,query}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{applyComposedFocusRepair,captureComposedFocusRepair,repairComposedFocus}from"../../../internal/focus-navigation.js";import{chevronIcon}from"../../../internal/icons.js";import{formatTimeOfDay,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{styles}from"./activity-feed.styles.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{firstByIdentityMemo}from"../collection-identity.js";import{LYRA_DEFAULT_activityFeedCompletedSteps,LYRA_DEFAULT_activityFeedLabel}from"../../../internal/default-strings/agent-tools.generated.js";const ACTIVITY_FEED_MODE=literalSetConverter(["live","post-hoc"],"live"),NEAR_BOTTOM_PX=48,entryId=entry=>entry.id;function variantDotPart(variant){return variant==="brand"?"variant-dot variant-dot-brand":variant==="success"?"variant-dot variant-dot-success":variant==="warning"?"variant-dot variant-dot-warning":variant==="danger"?"variant-dot variant-dot-danger":"variant-dot variant-dot-neutral"}class LyraActivityFeed extends LyraElement{constructor(){super(...arguments),this.entries=[],this._mode="live",this.follow=!0,this.expanded=!1,this.size="m",this.frame="card",this.withTimestamps=!1,this.virtualizeAt=199,this.headerId=nextId("activity-feed-header"),this.bodyId=nextId("activity-feed-body"),this.activityEntryKey=item=>item.id,this.isMounting=!0,this.anchoringVirtualTail=!1,this.ownerRealmGeneration=0,this.virtualAnchorRequest=0,this.relationshipSyncRequest=0,this.entryFocusRepairRequest=0,this.toggle=()=>{const expanded=!this.expanded;this.emit("lr-toggle-request",{expanded},{cancelable:!0}).defaultPrevented||(this.expanded=expanded,this.emit("lr-toggle",{expanded}))},this.onBodyScroll=e=>{if(this.isVirtualized||this.mode!=="live")return;const body=e.currentTarget,nearBottom=body.scrollHeight-body.scrollTop-body.clientHeight<=NEAR_BOTTOM_PX;this.setFollowFromUser(nearBottom)},this.onVirtualListRangeChanged=e=>{if(e.stopPropagation(),this.mode!=="live"||this.anchoringVirtualTail)return;const entries=this.normalizedEntries,atBottom=entries.length>0&&e.detail.end>=entries.length-1;this.setFollowFromUser(atBottom)},this.stopOwnedEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,activityFeedCompletedSteps:LYRA_DEFAULT_activityFeedCompletedSteps,activityFeedLabel:LYRA_DEFAULT_activityFeedLabel}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.identityCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get mode(){return this._mode}set mode(next){const normalized=ACTIVITY_FEED_MODE.normalizeReflected(this,"mode",next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.syncListRelationships(),this.scheduleListRelationshipSync()),this.hasUpdated&&this.shouldFollowLiveTail&&this.scrollToLatest()}disconnectedCallback(){this.releaseListRelationships(),this.resetOwnerRealmWork(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseListRelationships(),this.resetOwnerRealmWork(),this.isConnected&&this.hasUpdated&&(this.syncListRelationships(),this.scheduleListRelationshipSync()),this.isConnected&&this.shouldFollowLiveTail&&this.scrollToLatest()}get effectiveVirtualizeAt(){return finiteCount(this.virtualizeAt,199)}get normalizedEntries(){return firstByIdentityMemo(Array.isArray(this.entries)?this.entries:[],entryId)}get isVirtualized(){return this.normalizedEntries.length>this.effectiveVirtualizeAt}get shouldFollowLiveTail(){return this.expanded&&this.mode==="live"&&this.follow}cancelScrollFrame(){this.scrollRafId!==void 0&&this.scrollRafOwner?.cancelAnimationFrame(this.scrollRafId),this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0}cancelVirtualAnchorReleaseFrame(){this.virtualAnchorReleaseRafId!==void 0&&this.virtualAnchorReleaseRafOwner?.cancelAnimationFrame(this.virtualAnchorReleaseRafId),this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0}resetOwnerRealmWork(){this.ownerRealmGeneration+=1,this.virtualAnchorRequest+=1,this.relationshipSyncRequest+=1,this.entryFocusRepairRequest+=1,this.pendingEntryFocusRepair=void 0,this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1}willUpdate(changed){super.willUpdate(changed),(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live"&&(this.follow=!0),changed.has("expanded")&&changed.get("expanded")===!0&&!this.expanded&&this.repairFocusOnCollapse(),changed.has("entries")&&this.captureEntryFocusRepair()}updated(changed){super.updated(changed),this.syncListRelationships(),this.scheduleListRelationshipSync();const wasMounting=this.isMounting;if(this.isMounting=!1,!wasMounting&&changed.has("mode")&&changed.get("mode")==="live"&&this.mode==="post-hoc"){const region=this.liveRegion;region&&(region.mode="polite",region.announce(this.completedStepsSummary(this.normalizedEntries.length),{force:!0}))}const justAnchored=(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live",followingChangedRenderPath=changed.has("virtualizeAt")&&this.expanded&&this.mode==="live"&&this.follow;(justAnchored||followingChangedRenderPath||changed.has("entries")&&this.expanded&&this.mode==="live"&&this.follow)&&this.scrollToLatest(),changed.has("entries")&&this.pendingEntryFocusRepair&&this.settleEntryFocusRepair()}get headerElement(){return this.hasUpdated?this.renderRoot?.querySelector('[part="header"]')??null:null}repairFocusOnCollapse(){repairComposedFocus(this,()=>this.headerElement)}captureEntryFocusRepair(){this.pendingEntryFocusRepair=captureComposedFocusRepair(this,this.headerElement)??void 0}settleEntryFocusRepair(){const pending=this.pendingEntryFocusRepair;if(this.pendingEntryFocusRepair=void 0,!pending)return;const request=++this.entryFocusRepairRequest,generation=this.ownerRealmGeneration,settle=()=>{request!==this.entryFocusRepairRequest||generation!==this.ownerRealmGeneration||!this.isConnected||pending.activeElement.isConnected||applyComposedFocusRepair(pending,()=>this.headerElement)},list=this.virtualListEl;list?list.updateComplete.then(settle):settle()}scrollToLatest(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||!this.isConnected||!this.shouldFollowLiveTail)return;const generation=this.ownerRealmGeneration;if(this.isVirtualized){this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!0;const request=++this.virtualAnchorRequest;this.updateComplete.then(()=>{const list=this.virtualListEl;if(request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||this.ownerDocument!==ownerDocument||!this.isConnected)return;if(!list||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}list.scrollToIndex(this.normalizedEntries.length-1,{align:"end",behavior:"auto"});const firstHandle=ownerWindow.requestAnimationFrame(()=>{if(this.virtualAnchorReleaseRafId!==firstHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument)return;if(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,!this.anchoringVirtualTail||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}const secondHandle=ownerWindow.requestAnimationFrame(()=>{this.virtualAnchorReleaseRafId!==secondHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,this.anchoringVirtualTail=!1)});this.virtualAnchorReleaseRafId=secondHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});this.virtualAnchorReleaseRafId=firstHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});return}if(this.virtualAnchorRequest+=1,this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1,this.scrollRafId!==void 0)return;const handle=ownerWindow.requestAnimationFrame(()=>{if(this.scrollRafId!==handle||this.scrollRafOwner!==ownerWindow||this.scrollRafDocument!==ownerDocument||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0,!this.shouldFollowLiveTail||this.isVirtualized))return;const body=this.renderRoot.querySelector('[part="body"]');body&&(body.scrollTop=body.scrollHeight)});this.scrollRafId=handle,this.scrollRafOwner=ownerWindow,this.scrollRafDocument=ownerDocument}completedStepsSummary(count){return this.localize("activityFeedCompletedSteps",void 0,{count:getNumberFormat(this.effectiveLocale).format(count),pluralCount:count})}get listSemanticOwner(){return this.isVirtualized?this.virtualListEl?.scrollContainer??null:this.renderRoot.querySelector('[part="body"][role="list"]')}syncListRelationships(){const target=this.listSemanticOwner;if(!target){this.releaseListRelationships();return}this.externalLabelledByLease?this.externalLabelledByLease.update(target):this.externalLabelledByLease=acquireResolvedAriaRelationship(this,target,"aria-labelledby"),this.externalDescribedByLease?this.externalDescribedByLease.update(target):this.externalDescribedByLease=acquireResolvedAriaRelationship(this,target,"aria-describedby")}scheduleListRelationshipSync(){const list=this.virtualListEl;if(!this.isVirtualized||!list||!this.isConnected){this.relationshipSyncRequest+=1;return}const request=++this.relationshipSyncRequest,ownerDocument=this.ownerDocument,generation=this.ownerRealmGeneration;list.updateComplete.then(()=>{request!==this.relationshipSyncRequest||generation!==this.ownerRealmGeneration||this.ownerDocument!==ownerDocument||!this.isConnected||!this.isVirtualized||this.virtualListEl!==list||this.syncListRelationships()})}releaseListRelationships(){this.externalLabelledByLease?.release(),this.externalLabelledByLease=void 0,this.externalDescribedByLease?.release(),this.externalDescribedByLease=void 0}setFollowFromUser(following){following!==this.follow&&(this.follow=following,this.emit("lr-follow-change",{following}))}normalizedTimestamp(value){if(value===void 0)return;const date=value instanceof Date?value:new Date(value);return Number.isNaN(date.getTime())?void 0:date}entryTemplate(entry,ownRole){const ts=this.normalizedTimestamp(entry.timestamp),formatter=this.formatTimestamp??(date=>formatTimeOfDay(date,this.effectiveLocale)),variant=entry.variant??"neutral",dotPart=variantDotPart(variant);return html`
2
2
  <div part="entry" role=${ownRole?"listitem":nothing} data-variant=${variant}>
3
3
  <span part="entry-icon" aria-hidden="true"
4
4
  >${entry.icon?entry.icon:html`<span part=${dotPart} data-variant=${variant}></span>`}</span
@@ -53,4 +53,4 @@ headingLevel:LyraHeadingLevel;
53
53
  withoutChart:boolean;chartHeight:string;
54
54
  /** Maximum history entries rendered into both the run list and trend chart. Clamped to 1–500. The
55
55
  * first N runs in input order are kept, so pass newest-first history to chart the most recent runs. */
56
- maxRenderedRuns:number;private get normalizedMetrics();private get normalizedRuns();private get activeMetric();private statusLabel;private formatMetric;private renderRuns;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-agent-eval-dashboard':LyraAgentEvalDashboard;}}
56
+ maxRenderedRuns:number;private metricsFor?;private metricsCache;private runsFor?;private runsCache;private get normalizedMetrics();private get normalizedRuns();private slicedFor?;private chartFor?;private chartCache;private chartInputs;private get activeMetric();private statusLabel;private formatMetric;private renderRuns;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-agent-eval-dashboard':LyraAgentEvalDashboard;}}
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{formatShortDuration}from"../../../internal/duration.js";import{AGENT_STATUS_VARIANTS}from"../../../internal/agent-status-variants.js";import{styles}from"./agent-eval-dashboard.styles.js";import{finiteCount}from"../../../internal/numbers.js";import{agentStatusKind,agentStatusLabel,agentStatusMessage,agentStatusVariant}from"../agent-status-presentation.js";import{agentStatusText}from"../../../internal/agent-status-text.js";import{overallSemanticLabel}from"../semantic-owner.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{firstByIdentity}from"../collection-identity.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput,LYRA_DEFAULT_chartValueLabel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_evaluationDashboardLabel,LYRA_DEFAULT_evaluationDashboardNoRuns,LYRA_DEFAULT_evaluationDashboardRunsLabel,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_ragEvalDashboardRunsLimit,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning}from"../../../internal/default-strings.generated.js";class LyraAgentEvalDashboard extends LyraElement{constructor(){super(...arguments),this.limitAnnouncements=new AnnouncementSinkController(this,{eager:["polite"]}),this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.projectedRunsTruncated=!1,this.metrics=[],this.runs=[],this.metricId=null,this.currency="USD",this.headingLevel="2",this.withoutChart=!1,this.chartHeight="220px",this.maxRenderedRuns=100}static{this.defaultStrings={...super.defaultStrings,agentRunStatusCancelled:LYRA_DEFAULT_agentRunStatusCancelled,agentRunStatusCollecting:LYRA_DEFAULT_agentRunStatusCollecting,agentRunStatusDone:LYRA_DEFAULT_agentRunStatusDone,agentRunStatusIdle:LYRA_DEFAULT_agentRunStatusIdle,agentRunStatusQueued:LYRA_DEFAULT_agentRunStatusQueued,agentRunStatusWaitingApproval:LYRA_DEFAULT_agentRunStatusWaitingApproval,agentRunStatusWaitingInput:LYRA_DEFAULT_agentRunStatusWaitingInput,chartValueLabel:LYRA_DEFAULT_chartValueLabel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,evaluationDashboardLabel:LYRA_DEFAULT_evaluationDashboardLabel,evaluationDashboardNoRuns:LYRA_DEFAULT_evaluationDashboardNoRuns,evaluationDashboardRunsLabel:LYRA_DEFAULT_evaluationDashboardRunsLabel,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,ragEvalDashboardRunsLimit:LYRA_DEFAULT_ragEvalDashboardRunsLimit,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["metrics","runs"])}static{this.immutableEventDetails=Object.freeze(["lr-run-activate"])}static{this.styles=[LyraElement.styles,styles]}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncements.adopted()}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.projectedRunsTruncated&&!this.previouslyTruncated&&this.limitAnnouncements.announcePolite(this.localize("ragEvalDashboardRunsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(Math.max(1,finiteCount(this.maxRenderedRuns,100,500)))})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectedRunsTruncated}get normalizedMetrics(){return firstByIdentity(Array.isArray(this.metrics)?this.metrics:[],metric=>metric.id)}get normalizedRuns(){return firstByIdentity(Array.isArray(this.runs)?this.runs:[],run=>run.id)}get activeMetric(){const metrics=this.normalizedMetrics;return this.metricId===null?metrics[0]:metrics.find(metric=>metric.id===this.metricId)??metrics[0]}statusLabel(status){return agentStatusLabel(status)??agentStatusText(this.localize.bind(this),agentStatusKind(status))}formatMetric(metric,value=metric.value){const safe=Number.isFinite(value)?value:0;switch(metric.format){case"percent":return getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(safe);case"milliseconds":return formatShortDuration(this.localize.bind(this),this.effectiveLocale,safe);case"currency":try{return getNumberFormat(this.effectiveLocale,{style:"currency",currency:this.currency,maximumFractionDigits:2}).format(safe)}catch{return getNumberFormat(this.effectiveLocale,{style:"currency",currency:"USD",maximumFractionDigits:2}).format(safe)}default:return getNumberFormat(this.effectiveLocale,{maximumFractionDigits:2}).format(safe)}}renderRuns(runs){if(!runs.length)return html`<p part="empty">${this.localize("evaluationDashboardNoRuns")}</p>`;const active=this.activeMetric,level=resolveHeadingLevel(this.headingLevel??"2"),runsLevel=level&&String(Math.min(6,Number(level)+1));return html`<section part="runs" aria-label=${this.localize("evaluationDashboardRunsLabel")}><div part="runs-heading" role=${runsLevel?"heading":nothing} aria-level=${runsLevel||nothing}>${this.localize("evaluationDashboardRunsLabel")}</div>${repeat(runs,run=>run.id,run=>{const kind=agentStatusKind(run.status),message=agentStatusMessage(run.status);return html`<button part="run" type="button" @click=${()=>this.emit("lr-run-activate",{runId:run.id,run})}><span part="run-label">${run.label}</span><span part="run-meta"><lr-badge part="run-status" variant=${agentStatusVariant(run.status,AGENT_STATUS_VARIANTS[kind]??"neutral")}>${this.statusLabel(run.status)}</lr-badge>${message!==void 0?html`<span part="run-status-message">${message}</span>`:nothing}${active&&run.metrics?.[active.id]!=null?html`<span>${this.formatMetric(active,run.metrics[active.id])}</span>`:nothing}</span></button>`})}</section>`}render(){const label=this.label==null?this.localize("evaluationDashboardLabel"):this.label,semanticLabel=overallSemanticLabel(this,label),active=this.activeMetric,allRuns=this.normalizedRuns,runs=allRuns.slice(0,Math.max(1,finiteCount(this.maxRenderedRuns,100,500)));this.projectedRunsTruncated=allRuns.length>runs.length;const metrics=this.normalizedMetrics,values=runs.map(run=>{const value=active?run.metrics?.[active.id]:void 0;return value!=null&&Number.isFinite(value)?value:null}),level=resolveHeadingLevel(this.headingLevel??"2");return html`<section part="base" aria-label=${semanticLabel??nothing}>
1
+ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{formatShortDuration}from"../../../internal/duration.js";import{AGENT_STATUS_VARIANTS}from"../../../internal/agent-status-variants.js";import{styles}from"./agent-eval-dashboard.styles.js";import{finiteCount}from"../../../internal/numbers.js";import{agentStatusKind,agentStatusLabel,agentStatusMessage,agentStatusVariant}from"../agent-status-presentation.js";import{agentStatusText}from"../../../internal/agent-status-text.js";import{overallSemanticLabel}from"../semantic-owner.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{firstByIdentity}from"../collection-identity.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput,LYRA_DEFAULT_evaluationDashboardLabel,LYRA_DEFAULT_evaluationDashboardNoRuns,LYRA_DEFAULT_evaluationDashboardRunsLabel}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_chartValueLabel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_ragEvalDashboardRunsLimit,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning}from"../../../internal/default-strings/shared.generated.js";class LyraAgentEvalDashboard extends LyraElement{constructor(){super(...arguments),this.limitAnnouncements=new AnnouncementSinkController(this,{eager:["polite"]}),this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.projectedRunsTruncated=!1,this.metrics=[],this.runs=[],this.metricId=null,this.currency="USD",this.headingLevel="2",this.withoutChart=!1,this.chartHeight="220px",this.maxRenderedRuns=100,this.metricsCache=[],this.runsCache=[],this.chartCache={labels:[],datasets:[]}}static{this.defaultStrings={...super.defaultStrings,agentRunStatusCancelled:LYRA_DEFAULT_agentRunStatusCancelled,agentRunStatusCollecting:LYRA_DEFAULT_agentRunStatusCollecting,agentRunStatusDone:LYRA_DEFAULT_agentRunStatusDone,agentRunStatusIdle:LYRA_DEFAULT_agentRunStatusIdle,agentRunStatusQueued:LYRA_DEFAULT_agentRunStatusQueued,agentRunStatusWaitingApproval:LYRA_DEFAULT_agentRunStatusWaitingApproval,agentRunStatusWaitingInput:LYRA_DEFAULT_agentRunStatusWaitingInput,chartValueLabel:LYRA_DEFAULT_chartValueLabel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,evaluationDashboardLabel:LYRA_DEFAULT_evaluationDashboardLabel,evaluationDashboardNoRuns:LYRA_DEFAULT_evaluationDashboardNoRuns,evaluationDashboardRunsLabel:LYRA_DEFAULT_evaluationDashboardRunsLabel,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,ragEvalDashboardRunsLimit:LYRA_DEFAULT_ragEvalDashboardRunsLimit,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["metrics","runs"])}static{this.immutableEventDetails=Object.freeze(["lr-run-activate"])}static{this.styles=[LyraElement.styles,styles]}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncements.adopted()}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.projectedRunsTruncated&&!this.previouslyTruncated&&this.limitAnnouncements.announcePolite(this.localize("ragEvalDashboardRunsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(Math.max(1,finiteCount(this.maxRenderedRuns,100,500)))})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectedRunsTruncated}get normalizedMetrics(){return this.metricsFor!==this.metrics&&(this.metricsFor=this.metrics,this.metricsCache=firstByIdentity(Array.isArray(this.metrics)?this.metrics:[],metric=>metric.id)),this.metricsCache}get normalizedRuns(){return this.runsFor!==this.runs&&(this.runsFor=this.runs,this.runsCache=firstByIdentity(Array.isArray(this.runs)?this.runs:[],run=>run.id)),this.runsCache}chartInputs(runs,active){if(this.chartFor?.runs!==runs||this.chartFor.active!==active){this.chartFor={runs,active};const values=runs.map(run=>{const value=active?run.metrics?.[active.id]:void 0;return value!=null&&Number.isFinite(value)?value:null});this.chartCache={labels:runs.map(run=>run.label),datasets:active?[{label:active.label,data:values}]:[]}}return this.chartCache}get activeMetric(){const metrics=this.normalizedMetrics;return this.metricId===null?metrics[0]:metrics.find(metric=>metric.id===this.metricId)??metrics[0]}statusLabel(status){return agentStatusLabel(status)??agentStatusText(this.localize.bind(this),agentStatusKind(status))}formatMetric(metric,value=metric.value){const safe=Number.isFinite(value)?value:0;switch(metric.format){case"percent":return getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(safe);case"milliseconds":return formatShortDuration(this.localize.bind(this),this.effectiveLocale,safe);case"currency":try{return getNumberFormat(this.effectiveLocale,{style:"currency",currency:this.currency,maximumFractionDigits:2}).format(safe)}catch{return getNumberFormat(this.effectiveLocale,{style:"currency",currency:"USD",maximumFractionDigits:2}).format(safe)}default:return getNumberFormat(this.effectiveLocale,{maximumFractionDigits:2}).format(safe)}}renderRuns(runs){if(!runs.length)return html`<p part="empty">${this.localize("evaluationDashboardNoRuns")}</p>`;const active=this.activeMetric,level=resolveHeadingLevel(this.headingLevel??"2"),runsLevel=level&&String(Math.min(6,Number(level)+1));return html`<section part="runs" aria-label=${this.localize("evaluationDashboardRunsLabel")}><div part="runs-heading" role=${runsLevel?"heading":nothing} aria-level=${runsLevel||nothing}>${this.localize("evaluationDashboardRunsLabel")}</div>${repeat(runs,run=>run.id,run=>{const kind=agentStatusKind(run.status),message=agentStatusMessage(run.status);return html`<button part="run" type="button" @click=${()=>this.emit("lr-run-activate",{runId:run.id,run})}><span part="run-label">${run.label}</span><span part="run-meta"><lr-badge part="run-status" variant=${agentStatusVariant(run.status,AGENT_STATUS_VARIANTS[kind]??"neutral")}>${this.statusLabel(run.status)}</lr-badge>${message!==void 0?html`<span part="run-status-message">${message}</span>`:nothing}${active&&run.metrics?.[active.id]!=null?html`<span>${this.formatMetric(active,run.metrics[active.id])}</span>`:nothing}</span></button>`})}</section>`}render(){const label=this.label==null?this.localize("evaluationDashboardLabel"):this.label,semanticLabel=overallSemanticLabel(this,label),active=this.activeMetric,allRuns=this.normalizedRuns,limit=Math.max(1,finiteCount(this.maxRenderedRuns,100,500));(this.slicedFor?.source!==allRuns||this.slicedFor.limit!==limit)&&(this.slicedFor={source:allRuns,limit,runs:allRuns.slice(0,limit)});const runs=this.slicedFor.runs;this.projectedRunsTruncated=allRuns.length>runs.length;const metrics=this.normalizedMetrics,level=resolveHeadingLevel(this.headingLevel??"2");return html`<section part="base" aria-label=${semanticLabel??nothing}>
2
2
  ${label===""?nothing:html`<div part="heading" role=${level?"heading":nothing} aria-level=${level??nothing}>${label}</div>`}
3
3
  ${metrics.length?html`<div part="metrics">${repeat(metrics,metric=>metric.id,metric=>{const value=this.formatMetric(metric);return html`<button
4
4
  part="metric"
@@ -8,7 +8,7 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
8
8
  aria-label=${this.localize("chartValueLabel",void 0,{label:metric.label,value})}
9
9
  @click=${()=>{this.emit("lr-metric-change-request",{metricId:metric.id}),this.emit("lr-metric-change",{metricId:metric.id})}}
10
10
  ><lr-stat frame="plain" .label=${metric.label} .value=${value}></lr-stat></button>`})}</div>`:nothing}
11
- ${!this.withoutChart&&active&&runs.length?html`<div part="chart"><lr-lite-chart type="line" .height=${this.chartHeight} .labels=${runs.map(run=>run.label)} .datasets=${[{label:active.label,data:values}]} with-legend aria-label=${active.label}></lr-lite-chart></div>`:nothing}
11
+ ${!this.withoutChart&&active&&runs.length?html`<div part="chart"><lr-lite-chart type="line" .height=${this.chartHeight} .labels=${this.chartInputs(runs,active).labels} .datasets=${this.chartInputs(runs,active).datasets} with-legend aria-label=${active.label}></lr-lite-chart></div>`:nothing}
12
12
  ${this.renderRuns(runs)}
13
13
  ${this.projectedRunsTruncated?html`<p part="limit" role="note">${this.localize("ragEvalDashboardRunsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(runs.length)})}</p>`:nothing}
14
14
  </section>`}}__decorate([property({attribute:!1})],LyraAgentEvalDashboard.prototype,"metrics",void 0),__decorate([property({attribute:!1})],LyraAgentEvalDashboard.prototype,"runs",void 0),__decorate([property({attribute:"metric-id"})],LyraAgentEvalDashboard.prototype,"metricId",void 0),__decorate([property()],LyraAgentEvalDashboard.prototype,"currency",void 0),__decorate([property()],LyraAgentEvalDashboard.prototype,"label",void 0),__decorate([property({attribute:"heading-level"})],LyraAgentEvalDashboard.prototype,"headingLevel",void 0),__decorate([property({type:Boolean,attribute:"without-chart",reflect:!0})],LyraAgentEvalDashboard.prototype,"withoutChart",void 0),__decorate([property({attribute:"chart-height"})],LyraAgentEvalDashboard.prototype,"chartHeight",void 0),__decorate([property({type:Number,attribute:"max-rendered-runs"})],LyraAgentEvalDashboard.prototype,"maxRenderedRuns",void 0);export{LyraAgentEvalDashboard};
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{tag}from"../../../internal/prefix.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{literalSetConverter}from"../../../internal/converters.js";import{snapshotFormValue}from"../tool-param-form/tool-param-snapshot.js";import{styles}from"./agent-question.styles.js";import{agentActionButtonStyles}from"../agent-action-button.styles.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{LYRA_DEFAULT_agentQuestionAccept,LYRA_DEFAULT_agentQuestionDecline,LYRA_DEFAULT_agentQuestionLabel,LYRA_DEFAULT_agentQuestionSubmitted,LYRA_DEFAULT_agentQuestionUnsupported,LYRA_DEFAULT_cancel}from"../../../internal/default-strings.generated.js";const QUESTION_STATUS=literalSetConverter(["pending","submitted"],"pending"),SCHEMA_KEYS=new Set(["type","properties","required","$schema"]),PROPERTY_KEYS=new Set(["type","enum","description","title","default","const","autocomplete","spellcheck","autocapitalize","autoCorrect","inputMode","enterKeyHint","minLength","maxLength","format","minimum","maximum","minItems","maxItems","oneOf","enumNames","items"]);class LyraAgentQuestion extends LyraElement{constructor(){super(...arguments),this.requestId="",this.requester="",this.message="",this.headingLevel="2",this._schema=Object.freeze({type:"object",properties:Object.freeze({})}),this.assignedSchema=this._schema,this.schemaInvalid=!1,this.valueInvalid=!1,this._value=Object.freeze({}),this.assignedValue=this._value,this.valueAssignedInCommit=!1,this.disabled=!1,this._status="pending",this.statusAssignedInCommit=!1,this.isMounting=!0,this.responseDispatching=!1}static{this.defaultStrings={...super.defaultStrings,agentQuestionAccept:LYRA_DEFAULT_agentQuestionAccept,agentQuestionDecline:LYRA_DEFAULT_agentQuestionDecline,agentQuestionLabel:LYRA_DEFAULT_agentQuestionLabel,agentQuestionSubmitted:LYRA_DEFAULT_agentQuestionSubmitted,agentQuestionUnsupported:LYRA_DEFAULT_agentQuestionUnsupported,cancel:LYRA_DEFAULT_cancel}}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-question-input","lr-question-response"])}static{this.styles=[LyraElement.styles,styles,agentActionButtonStyles]}get schema(){return this._schema}set schema(value){if(value===this.assignedSchema)return;this.assignedSchema=value;const previous=this._schema,snapshot=snapshotFormValue(value);this.schemaInvalid=snapshot.invalid||snapshot.truncated,this._schema=snapshot.value,this.requestUpdate("schema",previous)}get value(){return this._value}set value(value){this.valueAssignedInCommit=!0,value!==this.assignedValue&&(this.assignedValue=value,this.setDraft(value))}setDraft(value){const previous=this._value,snapshot=snapshotFormValue(value);this.valueInvalid=snapshot.invalid||snapshot.truncated,this._value=snapshot.value,this.requestUpdate("value",previous)}get status(){return this._status}set status(value){this.statusAssignedInCommit=!0,this.setStatus(QUESTION_STATUS.normalize(value))}setStatus(value){const previous=this._status;this._status=value,this.requestUpdate("status",previous)}willUpdate(changed){super.willUpdate(changed),changed.has("requestId")&&this.hasUpdated&&(this.setDraft(this.valueAssignedInCommit?this.assignedValue:Object.freeze({})),this.statusAssignedInCommit||this.setStatus("pending")),this.valueAssignedInCommit=!1,this.statusAssignedInCommit=!1}connectedCallback(){super.connectedCallback(),this.isMounting=!0,this.announcements=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){this.announcements?.release(),this.announcements=void 0,super.disconnectedCallback()}updated(changed){super.updated(changed),!this.isMounting&&changed.has("status")&&this.status==="submitted"&&this.announcements?.announce(this.localize("agentQuestionSubmitted")),this.isMounting=!1}get supportedSchema(){if(this.schemaInvalid||!this.schema||typeof this.schema!="object"||Array.isArray(this.schema)||Object.keys(this.schema).some(key=>!SCHEMA_KEYS.has(key)))return!1;const properties=this.schema.properties;return!properties||typeof properties!="object"||Array.isArray(properties)?!1:Object.values(properties).every(field=>field&&typeof field=="object"&&!Array.isArray(field)&&Object.keys(field).every(key=>PROPERTY_KEYS.has(key)))}get inactive(){return this.disabled||this.status!=="pending"||typeof this.requestId!="string"||this.requestId.trim()===""}input(event,requestId){event.stopPropagation(),!(this.inactive||requestId!==this.requestId)&&(this.setDraft(event.detail.value),this.emit("lr-question-input",{requestId,value:this.value}))}respond(action,requestId){if(!(this.responseDispatching||this.inactive||requestId!==this.requestId)){this.responseDispatching=!0;try{let content;if(action==="accept"){if(!this.supportedSchema||this.valueInvalid)return;const form=this.renderRoot.querySelector(tag("tool-param-form"));if(!form)return;const schema=this.schema,value=this.value;if(form.schema=schema,form.value=value,!form.reportValidity()||this.inactive||requestId!==this.requestId||this.schema!==schema||this.value!==value)return;const effective=form.effectiveValue;content=Object.fromEntries(Object.keys(schema.properties).filter(key=>Object.prototype.hasOwnProperty.call(effective,key)&&effective[key]!==void 0).map(key=>[key,effective[key]]))}this.setStatus("submitted"),this.emit("lr-question-response",action==="accept"?{requestId,action,content}:{requestId,action})}finally{this.responseDispatching=!1}}}render(){const requestId=this.requestId,label=this.label??this.localize("agentQuestionLabel"),level=resolveHeadingLevel(this.headingLevel??"2");return html`<div part="base" role="group" aria-label=${this.getAttribute("aria-label")??label}>
1
+ import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{tag}from"../../../internal/prefix.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{literalSetConverter}from"../../../internal/converters.js";import{snapshotFormValue}from"../tool-param-form/tool-param-snapshot.js";import{styles}from"./agent-question.styles.js";import{agentActionButtonStyles}from"../agent-action-button.styles.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{LYRA_DEFAULT_agentQuestionAccept,LYRA_DEFAULT_agentQuestionDecline,LYRA_DEFAULT_agentQuestionLabel,LYRA_DEFAULT_agentQuestionSubmitted,LYRA_DEFAULT_agentQuestionUnsupported}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_cancel}from"../../../internal/default-strings/shared.generated.js";const QUESTION_STATUS=literalSetConverter(["pending","submitted"],"pending"),SCHEMA_KEYS=new Set(["type","properties","required","$schema"]),PROPERTY_KEYS=new Set(["type","enum","description","title","default","const","autocomplete","spellcheck","autocapitalize","autoCorrect","inputMode","enterKeyHint","minLength","maxLength","format","minimum","maximum","minItems","maxItems","oneOf","enumNames","items"]);class LyraAgentQuestion extends LyraElement{constructor(){super(...arguments),this.requestId="",this.requester="",this.message="",this.headingLevel="2",this._schema=Object.freeze({type:"object",properties:Object.freeze({})}),this.assignedSchema=this._schema,this.schemaInvalid=!1,this.valueInvalid=!1,this._value=Object.freeze({}),this.assignedValue=this._value,this.valueAssignedInCommit=!1,this.disabled=!1,this._status="pending",this.statusAssignedInCommit=!1,this.isMounting=!0,this.responseDispatching=!1}static{this.defaultStrings={...super.defaultStrings,agentQuestionAccept:LYRA_DEFAULT_agentQuestionAccept,agentQuestionDecline:LYRA_DEFAULT_agentQuestionDecline,agentQuestionLabel:LYRA_DEFAULT_agentQuestionLabel,agentQuestionSubmitted:LYRA_DEFAULT_agentQuestionSubmitted,agentQuestionUnsupported:LYRA_DEFAULT_agentQuestionUnsupported,cancel:LYRA_DEFAULT_cancel}}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-question-input","lr-question-response"])}static{this.styles=[LyraElement.styles,styles,agentActionButtonStyles]}get schema(){return this._schema}set schema(value){if(value===this.assignedSchema)return;this.assignedSchema=value;const previous=this._schema,snapshot=snapshotFormValue(value);this.schemaInvalid=snapshot.invalid||snapshot.truncated,this._schema=snapshot.value,this.requestUpdate("schema",previous)}get value(){return this._value}set value(value){this.valueAssignedInCommit=!0,value!==this.assignedValue&&(this.assignedValue=value,this.setDraft(value))}setDraft(value){const previous=this._value,snapshot=snapshotFormValue(value);this.valueInvalid=snapshot.invalid||snapshot.truncated,this._value=snapshot.value,this.requestUpdate("value",previous)}get status(){return this._status}set status(value){this.statusAssignedInCommit=!0,this.setStatus(QUESTION_STATUS.normalize(value))}setStatus(value){const previous=this._status;this._status=value,this.requestUpdate("status",previous)}willUpdate(changed){super.willUpdate(changed),changed.has("requestId")&&this.hasUpdated&&(this.setDraft(this.valueAssignedInCommit?this.assignedValue:Object.freeze({})),this.statusAssignedInCommit||this.setStatus("pending")),this.valueAssignedInCommit=!1,this.statusAssignedInCommit=!1}connectedCallback(){super.connectedCallback(),this.isMounting=!0,this.announcements=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){this.announcements?.release(),this.announcements=void 0,super.disconnectedCallback()}updated(changed){super.updated(changed),!this.isMounting&&changed.has("status")&&this.status==="submitted"&&this.announcements?.announce(this.localize("agentQuestionSubmitted")),this.isMounting=!1}get supportedSchema(){if(this.schemaInvalid||!this.schema||typeof this.schema!="object"||Array.isArray(this.schema)||Object.keys(this.schema).some(key=>!SCHEMA_KEYS.has(key)))return!1;const properties=this.schema.properties;return!properties||typeof properties!="object"||Array.isArray(properties)?!1:Object.values(properties).every(field=>field&&typeof field=="object"&&!Array.isArray(field)&&Object.keys(field).every(key=>PROPERTY_KEYS.has(key)))}get inactive(){return this.disabled||this.status!=="pending"||typeof this.requestId!="string"||this.requestId.trim()===""}input(event,requestId){event.stopPropagation(),!(this.inactive||requestId!==this.requestId)&&(this.setDraft(event.detail.value),this.emit("lr-question-input",{requestId,value:this.value}))}respond(action,requestId){if(!(this.responseDispatching||this.inactive||requestId!==this.requestId)){this.responseDispatching=!0;try{let content;if(action==="accept"){if(!this.supportedSchema||this.valueInvalid)return;const form=this.renderRoot.querySelector(tag("tool-param-form"));if(!form)return;const schema=this.schema,value=this.value;if(form.schema=schema,form.value=value,!form.reportValidity()||this.inactive||requestId!==this.requestId||this.schema!==schema||this.value!==value)return;const effective=form.effectiveValue;content=Object.fromEntries(Object.keys(schema.properties).filter(key=>Object.prototype.hasOwnProperty.call(effective,key)&&effective[key]!==void 0).map(key=>[key,effective[key]]))}this.setStatus("submitted"),this.emit("lr-question-response",action==="accept"?{requestId,action,content}:{requestId,action})}finally{this.responseDispatching=!1}}}render(){const requestId=this.requestId,label=this.label??this.localize("agentQuestionLabel"),level=resolveHeadingLevel(this.headingLevel??"2");return html`<div part="base" role="group" aria-label=${this.getAttribute("aria-label")??label}>
2
2
  ${label===""?nothing:html`<div part="heading" role=${level?"heading":nothing} aria-level=${level??nothing}>${label}</div>`}
3
3
  ${this.requester?html`<p part="requester">${this.requester}</p>`:nothing}
4
4
  ${this.message?html`<p part="message">${this.message}</p>`:nothing}
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{spinnerIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{formatShortDuration}from"../../../internal/duration.js";import{finiteRange}from"../../../internal/numbers.js";import{srOnly}from"../../../internal/a11y.js";import{AGENT_STATUS_VARIANTS}from"../../../internal/agent-status-variants.js";import{styles}from"./agent-run.styles.js";import{agentActionButtonStyles}from"../agent-action-button.styles.js";import{firstByIdentity}from"../collection-identity.js";import{agentStatusKind,agentStatusMessage}from"../agent-status-presentation.js";import{agentStatusText}from"../../../internal/agent-status-text.js";import{LYRA_DEFAULT_agentRunCurrentStepLabel,LYRA_DEFAULT_agentRunStatusAnnounce,LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput,LYRA_DEFAULT_cancel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning}from"../../../internal/default-strings.generated.js";const TICKING_KINDS=new Set(["running","collecting","waiting-input","waiting-approval"]),TERMINAL_KINDS=new Set(["done","error","cancelled"]),STEP_TO_TASK_STATUS={idle:"pending",running:"running",collecting:"running","waiting-input":"running","waiting-approval":"running",done:"success",error:"error",cancelled:"incomplete"};function toTaskItem(step){const kind=agentStatusKind(step.status);return{id:step.id,label:step.label,status:STEP_TO_TASK_STATUS[kind]??"pending",detail:agentStatusMessage(step.status)}}function runSteps(run){return Array.isArray(run?.steps)?run.steps:[]}class LyraAgentRun extends LyraElement{constructor(){super(...arguments),this.run=null,this.statusLabels={},this.statusVariants={},this.metrics=[],this.withoutCancel=!1,this.withoutRetry=!1,this.size="m",this.frame="card",this.retryAttempt=0,this.hasHeaderSlot=!1,this.hasSummarySlot=!1,this.onHeaderSlotChange=()=>{this.hasHeaderSlot=this.hasSlotted("header")},this.onSummarySlotChange=()=>{this.hasSummarySlot=this.hasSlotted("summary")},this.onCancelClick=()=>{const runId=this.run?.id??"";this.emit("lr-run-cancel",{runId}),this.emit("lr-cancel",{runId})},this.onRetryClick=()=>{this.retryAttempt+=1,this.emit("lr-run-retry",{runId:this.run?.id??"",attempt:this.retryAttempt})}}static{this.defaultStrings={...super.defaultStrings,agentRunCurrentStepLabel:LYRA_DEFAULT_agentRunCurrentStepLabel,agentRunStatusAnnounce:LYRA_DEFAULT_agentRunStatusAnnounce,agentRunStatusCancelled:LYRA_DEFAULT_agentRunStatusCancelled,agentRunStatusCollecting:LYRA_DEFAULT_agentRunStatusCollecting,agentRunStatusDone:LYRA_DEFAULT_agentRunStatusDone,agentRunStatusIdle:LYRA_DEFAULT_agentRunStatusIdle,agentRunStatusQueued:LYRA_DEFAULT_agentRunStatusQueued,agentRunStatusWaitingApproval:LYRA_DEFAULT_agentRunStatusWaitingApproval,agentRunStatusWaitingInput:LYRA_DEFAULT_agentRunStatusWaitingInput,cancel:LYRA_DEFAULT_cancel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["run","statusLabels","statusVariants","metrics"])}static{this.styles=[LyraElement.styles,srOnly,styles,agentActionButtonStyles]}get normalizedMetrics(){return firstByIdentity(Array.isArray(this.metrics)?this.metrics:[],metric=>metric.id)}willUpdate(changed){super.willUpdate(changed),this.seedFirstRenderState(()=>{this.hasHeaderSlot=this.hasSlotted("header"),this.hasSummarySlot=this.hasSlotted("summary")}),changed.has("run")&&this.run?.id!==this.previousRunId&&(this.retryAttempt=0)}hasSlotted(name){return Array.from(this.children).some(element=>element.getAttribute("slot")===name)}updated(changed){super.updated(changed),changed.has("run")&&this.handleRunChange()}handleRunChange(){const runId=this.run?.id,kind=this.runKind;!(runId!==this.previousRunId)&&kind!==void 0&&kind!==this.previousStatusKind&&this.isAttentionKind(kind)&&this.announceStatus(kind),this.previousRunId=runId,this.previousStatusKind=kind}isAttentionKind(kind){return kind==="waiting-input"||kind==="waiting-approval"||TERMINAL_KINDS.has(kind)}announceStatus(kind){const region=this.liveRegion;region&&(region.mode=kind==="error"||kind==="waiting-input"||kind==="waiting-approval"?"assertive":"polite",region.announce(this.localize("agentRunStatusAnnounce",void 0,{status:this.statusLabel(kind)}),{force:!0}))}statusLabel(kind){return this.statusLabels[kind]||agentStatusText(this.localize.bind(this),kind)}get runKind(){return this.run?agentStatusKind(this.run.status):void 0}get currentStep(){const steps=runSteps(this.run);for(let i=steps.length-1;i>=0;i--)if(agentStatusKind(steps[i].status)==="running")return steps[i]}get isTicking(){const kind=this.runKind;return kind!==void 0&&TICKING_KINDS.has(kind)&&Number.isFinite(this.run?.startedAt)}get staticElapsedText(){const run=this.run;if(!run||!TERMINAL_KINDS.has(agentStatusKind(run.status)))return;const startedAt=run.startedAt,endedAt=run.endedAt;if(!(startedAt==null||endedAt==null||!Number.isFinite(startedAt)||!Number.isFinite(endedAt)))return formatShortDuration(this.localize.bind(this),this.effectiveLocale,endedAt-startedAt)}get costText(){const cost=this.run?.costEstimate;if(cost==null||!Number.isFinite(cost))return"";const value=finiteRange(cost,cost,0);return(this.formatCost??(c=>getNumberFormat(this.effectiveLocale,{maximumFractionDigits:4}).format(c)))(value)}get canCancel(){const kind=this.runKind;return!this.withoutCancel&&kind!==void 0&&TICKING_KINDS.has(kind)}get canRetry(){const kind=this.runKind;return!this.withoutRetry&&(kind==="error"||kind==="cancelled")}render(){const run=this.run;if(!run)return html`<div part="base"><lr-empty part="empty" heading=${this.localize("noData")}></lr-empty></div>`;const kind=agentStatusKind(run.status),message=agentStatusMessage(run.status),step=this.currentStep,ticking=this.isTicking,staticElapsed=this.staticElapsedText,cost=this.costText,metrics=this.normalizedMetrics,steps=runSteps(run),hasSummary=!!run.model||cost!==""||metrics.length>0;return html`
1
+ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{spinnerIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{formatShortDuration}from"../../../internal/duration.js";import{finiteRange}from"../../../internal/numbers.js";import{srOnly}from"../../../internal/a11y.js";import{AGENT_STATUS_VARIANTS}from"../../../internal/agent-status-variants.js";import{styles}from"./agent-run.styles.js";import{agentActionButtonStyles}from"../agent-action-button.styles.js";import{firstByIdentity}from"../collection-identity.js";import{agentStatusKind,agentStatusMessage}from"../agent-status-presentation.js";import{agentStatusText}from"../../../internal/agent-status-text.js";import{LYRA_DEFAULT_agentRunCurrentStepLabel,LYRA_DEFAULT_agentRunStatusAnnounce,LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_cancel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning}from"../../../internal/default-strings/shared.generated.js";const TICKING_KINDS=new Set(["running","collecting","waiting-input","waiting-approval"]),TERMINAL_KINDS=new Set(["done","error","cancelled"]),STEP_TO_TASK_STATUS={idle:"pending",running:"running",collecting:"running","waiting-input":"running","waiting-approval":"running",done:"success",error:"error",cancelled:"incomplete"};function toTaskItem(step){const kind=agentStatusKind(step.status);return{id:step.id,label:step.label,status:STEP_TO_TASK_STATUS[kind]??"pending",detail:agentStatusMessage(step.status)}}function runSteps(run){return Array.isArray(run?.steps)?run.steps:[]}class LyraAgentRun extends LyraElement{constructor(){super(...arguments),this.run=null,this.statusLabels={},this.statusVariants={},this.metrics=[],this.withoutCancel=!1,this.withoutRetry=!1,this.size="m",this.frame="card",this.retryAttempt=0,this.hasHeaderSlot=!1,this.hasSummarySlot=!1,this.onHeaderSlotChange=()=>{this.hasHeaderSlot=this.hasSlotted("header")},this.onSummarySlotChange=()=>{this.hasSummarySlot=this.hasSlotted("summary")},this.onCancelClick=()=>{const runId=this.run?.id??"";this.emit("lr-run-cancel",{runId}),this.emit("lr-cancel",{runId})},this.onRetryClick=()=>{this.retryAttempt+=1,this.emit("lr-run-retry",{runId:this.run?.id??"",attempt:this.retryAttempt})}}static{this.defaultStrings={...super.defaultStrings,agentRunCurrentStepLabel:LYRA_DEFAULT_agentRunCurrentStepLabel,agentRunStatusAnnounce:LYRA_DEFAULT_agentRunStatusAnnounce,agentRunStatusCancelled:LYRA_DEFAULT_agentRunStatusCancelled,agentRunStatusCollecting:LYRA_DEFAULT_agentRunStatusCollecting,agentRunStatusDone:LYRA_DEFAULT_agentRunStatusDone,agentRunStatusIdle:LYRA_DEFAULT_agentRunStatusIdle,agentRunStatusQueued:LYRA_DEFAULT_agentRunStatusQueued,agentRunStatusWaitingApproval:LYRA_DEFAULT_agentRunStatusWaitingApproval,agentRunStatusWaitingInput:LYRA_DEFAULT_agentRunStatusWaitingInput,cancel:LYRA_DEFAULT_cancel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["run","statusLabels","statusVariants","metrics"])}static{this.styles=[LyraElement.styles,srOnly,styles,agentActionButtonStyles]}get normalizedMetrics(){return firstByIdentity(Array.isArray(this.metrics)?this.metrics:[],metric=>metric.id)}willUpdate(changed){super.willUpdate(changed),this.seedFirstRenderState(()=>{this.hasHeaderSlot=this.hasSlotted("header"),this.hasSummarySlot=this.hasSlotted("summary")}),changed.has("run")&&this.run?.id!==this.previousRunId&&(this.retryAttempt=0)}hasSlotted(name){return Array.from(this.children).some(element=>element.getAttribute("slot")===name)}updated(changed){super.updated(changed),changed.has("run")&&this.handleRunChange()}handleRunChange(){const runId=this.run?.id,kind=this.runKind;!(runId!==this.previousRunId)&&kind!==void 0&&kind!==this.previousStatusKind&&this.isAttentionKind(kind)&&this.announceStatus(kind),this.previousRunId=runId,this.previousStatusKind=kind}isAttentionKind(kind){return kind==="waiting-input"||kind==="waiting-approval"||TERMINAL_KINDS.has(kind)}announceStatus(kind){const region=this.liveRegion;region&&(region.mode=kind==="error"||kind==="waiting-input"||kind==="waiting-approval"?"assertive":"polite",region.announce(this.localize("agentRunStatusAnnounce",void 0,{status:this.statusLabel(kind)}),{force:!0}))}statusLabel(kind){return this.statusLabels[kind]||agentStatusText(this.localize.bind(this),kind)}get runKind(){return this.run?agentStatusKind(this.run.status):void 0}get currentStep(){const steps=runSteps(this.run);for(let i=steps.length-1;i>=0;i--)if(agentStatusKind(steps[i].status)==="running")return steps[i]}get isTicking(){const kind=this.runKind;return kind!==void 0&&TICKING_KINDS.has(kind)&&Number.isFinite(this.run?.startedAt)}get staticElapsedText(){const run=this.run;if(!run||!TERMINAL_KINDS.has(agentStatusKind(run.status)))return;const startedAt=run.startedAt,endedAt=run.endedAt;if(!(startedAt==null||endedAt==null||!Number.isFinite(startedAt)||!Number.isFinite(endedAt)))return formatShortDuration(this.localize.bind(this),this.effectiveLocale,endedAt-startedAt)}get costText(){const cost=this.run?.costEstimate;if(cost==null||!Number.isFinite(cost))return"";const value=finiteRange(cost,cost,0);return(this.formatCost??(c=>getNumberFormat(this.effectiveLocale,{maximumFractionDigits:4}).format(c)))(value)}get canCancel(){const kind=this.runKind;return!this.withoutCancel&&kind!==void 0&&TICKING_KINDS.has(kind)}get canRetry(){const kind=this.runKind;return!this.withoutRetry&&(kind==="error"||kind==="cancelled")}render(){const run=this.run;if(!run)return html`<div part="base"><lr-empty part="empty" heading=${this.localize("noData")}></lr-empty></div>`;const kind=agentStatusKind(run.status),message=agentStatusMessage(run.status),step=this.currentStep,ticking=this.isTicking,staticElapsed=this.staticElapsedText,cost=this.costText,metrics=this.normalizedMetrics,steps=runSteps(run),hasSummary=!!run.model||cost!==""||metrics.length>0;return html`
2
2
  <div part="base">
3
3
  <div part="header">
4
4
  <slot name="header" @slotchange=${this.onHeaderSlotChange}></slot>