@aceshooting/lyra-ui 26.0.0 → 27.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 (1475) hide show
  1. package/CHANGELOG.md +63 -675
  2. package/README.md +281 -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/init-agents.mjs +40 -0
  9. package/dist/cli/is-main-module.mjs +1 -0
  10. package/dist/cli/lyra-rename-ledger.mjs +1 -1
  11. package/dist/cli/lyra-ui.mjs +11 -0
  12. package/dist/cli/migrate-wa.mjs +4 -2
  13. package/dist/cli/migration-contract.json +1 -1
  14. package/dist/cli/migration-renames.mjs +1 -1
  15. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts +1 -1
  16. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +2 -2
  17. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  18. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts +2 -2
  19. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  20. package/dist/components/agent-tools/connector-manager/connector-manager.class.d.ts +4 -2
  21. package/dist/components/agent-tools/connector-manager/connector-manager.class.js +6 -3
  22. package/dist/components/agent-tools/connector-manager/connector-manager.d.ts +1 -1
  23. package/dist/components/agent-tools/connector-manager/connector-manager.js +1 -1
  24. package/dist/components/agent-tools/connector-manager/connector-manager.styles.js +1 -1
  25. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +2 -2
  26. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +6 -6
  27. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +8 -33
  28. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +27 -4
  29. package/dist/components/agent-tools/eval-dataset/eval-dataset.d.ts +1 -1
  30. package/dist/components/agent-tools/eval-dataset/eval-dataset.js +1 -1
  31. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +1 -1
  32. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +1 -1
  33. package/dist/components/agent-tools/permission-grant/permission-grant.class.d.ts +4 -2
  34. package/dist/components/agent-tools/permission-grant/permission-grant.class.js +6 -3
  35. package/dist/components/agent-tools/permission-grant/permission-grant.d.ts +1 -1
  36. package/dist/components/agent-tools/permission-grant/permission-grant.js +1 -1
  37. package/dist/components/agent-tools/permission-grant/permission-grant.styles.js +1 -1
  38. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  39. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +2 -2
  40. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +3 -1
  41. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +1 -1
  42. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
  43. package/dist/components/agent-tools/task-list/task-list.class.d.ts +2 -2
  44. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  45. package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -1
  46. package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
  47. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts +15 -9
  48. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  49. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.d.ts +2 -2
  50. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.js +1 -1
  51. package/dist/components/agent-tools/tool-call-block/tool-call-block.styles.js +1 -1
  52. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -7
  53. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +1 -1
  54. package/dist/components/agent-tools/tool-param-form/tool-param-constraints.js +1 -1
  55. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +3 -5
  56. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
  57. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts +2 -5
  58. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  59. package/dist/components/agent-tools/tool-result-view/registry.d.ts +4 -12
  60. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +2 -2
  61. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  62. package/dist/components/agent-tools/tool-status.d.ts +7 -0
  63. package/dist/components/agent-tools/tool-status.styles.js +1 -0
  64. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  65. package/dist/components/agent-tools/tool-timeline/tool-timeline.d.ts +1 -1
  66. package/dist/components/agent-tools/tool-timeline/tool-timeline.js +1 -1
  67. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +2 -2
  68. package/dist/components/charts/chart/box-plot.class.d.ts +1 -1
  69. package/dist/components/charts/chart/box-plot.class.js +1 -1
  70. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  71. package/dist/components/charts/chart/chart-surface-shared.js +1 -0
  72. package/dist/components/charts/chart/chart-surface.styles.js +1 -1
  73. package/dist/components/charts/chart/chart-table-sampling.js +1 -1
  74. package/dist/components/charts/chart/chart.class.d.ts +2 -2
  75. package/dist/components/charts/chart/chart.class.js +2 -2
  76. package/dist/components/charts/chart/chart.styles.js +1 -1
  77. package/dist/components/charts/chart/histogram.class.js +1 -1
  78. package/dist/components/charts/chart/lite-chart.class.d.ts +1 -1
  79. package/dist/components/charts/chart/lite-chart.class.js +4 -4
  80. package/dist/components/conversation/catalog-picker-element.d.ts +28 -13
  81. package/dist/components/conversation/catalog-picker-element.js +1 -1
  82. package/dist/components/conversation/catalog-picker-trigger.styles.js +1 -0
  83. package/dist/components/conversation/chat-message/chat-message.class.js +1 -1
  84. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  85. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +1 -1
  86. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  87. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  88. package/dist/components/conversation/conversation-item/conversation-item.class.js +1 -1
  89. package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
  90. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  91. package/dist/components/conversation/markdown/markdown-code-header.js +1 -1
  92. package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
  93. package/dist/components/conversation/model-select/model-select.class.d.ts +7 -34
  94. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  95. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  96. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +7 -2
  97. package/dist/components/conversation/prompt-input/prompt-input.class.js +5 -2
  98. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  99. package/dist/components/conversation/realtime-session/realtime-session.class.js +1 -1
  100. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  101. package/dist/components/conversation/stream-status/stream-status.class.js +1 -1
  102. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +10 -27
  103. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  104. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  105. package/dist/components/data/condition-builder/condition-builder.class.js +1 -1
  106. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  107. package/dist/components/data/document-library/document-library.class.d.ts +2 -2
  108. package/dist/components/data/document-library/document-library.class.js +2 -2
  109. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +3 -3
  110. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
  111. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  112. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +1 -1
  113. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  114. package/dist/components/data/table/table.class.d.ts +10 -195
  115. package/dist/components/data/table/table.class.js +2 -2
  116. package/dist/components/data/table/table.styles.js +1 -1
  117. package/dist/components/data/timeline/timeline.class.js +1 -1
  118. package/dist/components/data/tree/tree.class.js +1 -1
  119. package/dist/components/forms/button/button.class.d.ts +3 -3
  120. package/dist/components/forms/button/button.class.js +1 -1
  121. package/dist/components/forms/catalog-picker-base.js +1 -1
  122. package/dist/components/forms/checkbox/checkbox.class.d.ts +13 -34
  123. package/dist/components/forms/checkbox/checkbox.class.js +3 -3
  124. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +3 -3
  125. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  126. package/dist/components/forms/code-editor/code-editor.class.js +1 -1
  127. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  128. package/dist/components/forms/combobox/combobox.class.d.ts +6 -6
  129. package/dist/components/forms/combobox/combobox.class.js +3 -2
  130. package/dist/components/forms/combobox/option.class.d.ts +3 -0
  131. package/dist/components/forms/combobox/option.class.js +2 -2
  132. package/dist/components/forms/date-picker/date-input.class.d.ts +10 -11
  133. package/dist/components/forms/date-picker/date-input.class.js +4 -3
  134. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  135. package/dist/components/forms/date-picker/date-picker.class.d.ts +6 -0
  136. package/dist/components/forms/date-picker/date-picker.class.js +1 -1
  137. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  138. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  139. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  140. package/dist/components/forms/input/input.styles.js +1 -1
  141. package/dist/components/forms/input/time-input.class.d.ts +1 -1
  142. package/dist/components/forms/input/time-input.class.js +1 -1
  143. package/dist/components/forms/input/time-input.styles.js +1 -1
  144. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +5 -5
  145. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  146. package/dist/components/forms/otp-input/otp-input.class.js +1 -0
  147. package/dist/components/forms/phone-input/phone-input.class.d.ts +7 -9
  148. package/dist/components/forms/phone-input/phone-input.class.js +6 -5
  149. package/dist/components/forms/phone-input/phone-input.styles.js +1 -1
  150. package/dist/components/forms/radio/radio-group.class.d.ts +4 -4
  151. package/dist/components/forms/radio/radio-group.class.js +1 -1
  152. package/dist/components/forms/radio/radio.class.d.ts +11 -19
  153. package/dist/components/forms/radio/radio.class.js +2 -2
  154. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +3 -5
  155. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  156. package/dist/components/forms/select/select.class.d.ts +5 -7
  157. package/dist/components/forms/select/select.class.js +3 -2
  158. package/dist/components/forms/slider/slider.class.d.ts +3 -3
  159. package/dist/components/forms/slider/slider.class.js +1 -1
  160. package/dist/components/forms/slider/slider.styles.js +1 -1
  161. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  162. package/dist/components/forms/switch/switch.class.d.ts +11 -36
  163. package/dist/components/forms/switch/switch.class.js +2 -2
  164. package/dist/components/forms/textarea/textarea.class.js +1 -0
  165. package/dist/components/forms/textarea/textarea.styles.js +1 -1
  166. package/dist/components/forms/time-range/time-range.class.d.ts +5 -3
  167. package/dist/components/forms/time-range/time-range.class.js +1 -1
  168. package/dist/components/forms/time-range/time-range.styles.js +1 -1
  169. package/dist/components/forms/toggle-group/toggle-group.class.d.ts +2 -2
  170. package/dist/components/forms/toggle-group/toggle-group.class.js +1 -1
  171. package/dist/components/forms/token-input/token-input.class.d.ts +3 -3
  172. package/dist/components/forms/token-input/token-input.class.js +1 -1
  173. package/dist/components/layout/app-rail/app-rail-item.class.js +1 -1
  174. package/dist/components/layout/app-rail/app-rail.class.d.ts +2 -2
  175. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  176. package/dist/components/layout/breadcrumb/breadcrumb-item.class.js +1 -1
  177. package/dist/components/layout/card/card.class.js +1 -1
  178. package/dist/components/layout/carousel/carousel.class.js +1 -1
  179. package/dist/components/layout/command-palette/command-palette.class.d.ts +6 -2
  180. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  181. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  182. package/dist/components/layout/details/accordion.class.js +1 -1
  183. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +1 -1
  184. package/dist/components/layout/dock-panel/dock-panel.class.js +1 -1
  185. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
  186. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -2
  187. package/dist/components/layout/filter-bar/filter-bar.class.js +18 -15
  188. package/dist/components/layout/filter-bar/filter-bar.styles.js +1 -1
  189. package/dist/components/layout/menu/menu.class.d.ts +1 -1
  190. package/dist/components/layout/menu/menu.class.js +1 -1
  191. package/dist/components/layout/multi-split/multi-split.class.d.ts +1 -1
  192. package/dist/components/layout/multi-split/multi-split.class.js +1 -1
  193. package/dist/components/layout/navigation-menu-item/navigation-menu-item.class.js +1 -1
  194. package/dist/components/layout/page/page.class.d.ts +1 -1
  195. package/dist/components/layout/page/page.class.js +1 -1
  196. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts +1 -1
  197. package/dist/components/layout/responsive-panel/responsive-panel.class.js +1 -1
  198. package/dist/components/layout/scroller/scroller.class.js +1 -1
  199. package/dist/components/layout/segmented/segmented.class.js +1 -1
  200. package/dist/components/layout/stepper/stepper.class.js +2 -2
  201. package/dist/components/layout/tab-group/tab-group.class.js +1 -1
  202. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +1 -1
  203. package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
  204. package/dist/components/layout/widget/widget.class.d.ts +1 -1
  205. package/dist/components/layout/widget/widget.class.js +3 -3
  206. package/dist/components/media/drop-zone/drop-zone.class.d.ts +10 -0
  207. package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
  208. package/dist/components/media/file-input/file-input.class.d.ts +3 -3
  209. package/dist/components/media/file-input/file-input.class.js +2 -2
  210. package/dist/components/media/file-input/file-intake.d.ts +5 -1
  211. package/dist/components/media/file-input/file-intake.js +1 -1
  212. package/dist/components/media/flag/flag.class.js +1 -1
  213. package/dist/components/media/image-viewer/image-viewer.styles.js +1 -1
  214. package/dist/components/media/lightbox/lightbox.class.js +1 -1
  215. package/dist/components/media/map/map.class.js +2 -2
  216. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  217. package/dist/components/media/qr-code/qr-code.class.js +1 -1
  218. package/dist/components/media/video/video.class.js +3 -3
  219. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  220. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +2 -2
  221. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +1 -1
  222. package/dist/components/overlays/alert/alert.class.d.ts +3 -3
  223. package/dist/components/overlays/alert/alert.class.js +1 -1
  224. package/dist/components/overlays/badge/badge.class.d.ts +2 -2
  225. package/dist/components/overlays/badge/badge.class.js +1 -1
  226. package/dist/components/overlays/badge/tag.class.d.ts +3 -1
  227. package/dist/components/overlays/badge/tag.class.js +3 -2
  228. package/dist/components/overlays/badge/tag.styles.js +1 -1
  229. package/dist/components/overlays/callout/callout.class.d.ts +2 -2
  230. package/dist/components/overlays/callout/callout.class.js +1 -1
  231. package/dist/components/overlays/chip/chip.class.d.ts +4 -2
  232. package/dist/components/overlays/chip/chip.class.js +2 -2
  233. package/dist/components/overlays/dialog/dialog.class.d.ts +1 -1
  234. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  235. package/dist/components/overlays/overlay/overlay-shared.d.ts +9 -0
  236. package/dist/components/overlays/overlay/overlay-shared.js +1 -1
  237. package/dist/components/overlays/overlay/popover.class.d.ts +2 -2
  238. package/dist/components/overlays/overlay/popover.class.js +1 -1
  239. package/dist/components/overlays/overlay/tooltip.class.d.ts +1 -1
  240. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  241. package/dist/components/overlays/progress/progress-bar.class.d.ts +5 -22
  242. package/dist/components/overlays/progress/progress-bar.class.js +4 -4
  243. package/dist/components/overlays/progress/progress-base.d.ts +25 -0
  244. package/dist/components/overlays/progress/progress-base.js +1 -0
  245. package/dist/components/overlays/progress/progress-ring.class.d.ts +3 -24
  246. package/dist/components/overlays/progress/progress-ring.class.js +4 -4
  247. package/dist/components/overlays/rating/rating.class.d.ts +3 -3
  248. package/dist/components/overlays/rating/rating.class.js +1 -1
  249. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts +4 -2
  250. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js +4 -4
  251. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +1 -1
  252. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +1 -1
  253. package/dist/components/retrieval/graph/graph-canvas.js +1 -1
  254. package/dist/components/retrieval/graph/graph-model.js +1 -1
  255. package/dist/components/retrieval/graph/graph.class.d.ts +1 -3
  256. package/dist/components/retrieval/graph/graph.class.js +1 -1
  257. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +1 -1
  258. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +2 -2
  259. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +1 -1
  260. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +2 -2
  261. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +1 -1
  262. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +1 -0
  263. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  264. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -2
  265. package/dist/components/retrieval/memory-panel/memory-panel.class.js +2 -2
  266. package/dist/components/retrieval/memory-panel/memory-panel.styles.js +1 -1
  267. package/dist/components/retrieval/node-palette/node-palette.class.js +1 -1
  268. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  269. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +1 -1
  270. package/dist/components/retrieval/research-progress/research-progress.class.d.ts +5 -1
  271. package/dist/components/retrieval/research-progress/research-progress.class.js +3 -3
  272. package/dist/components/retrieval/research-progress/research-progress.d.ts +1 -1
  273. package/dist/components/retrieval/research-progress/research-progress.js +1 -1
  274. package/dist/components/retrieval/research-progress/research-progress.styles.js +1 -1
  275. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +6 -2
  276. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +2 -2
  277. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  278. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +2 -2
  279. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +3 -2
  280. package/dist/components/retrieval/retrieval-search/retrieval-search.class.js +3 -3
  281. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts +6 -2
  282. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +2 -2
  283. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +1 -1
  284. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  285. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  286. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  287. package/dist/components/utility/export-button/export-button.class.d.ts +1 -1
  288. package/dist/components/utility/export-button/export-button.class.js +1 -1
  289. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  290. package/dist/components/utility/json-viewer/json-viewer.class.js +2 -2
  291. package/dist/components/utility/known-date/known-date.class.js +1 -1
  292. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  293. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  294. package/dist/components/utility/random-content/random-content.class.d.ts +1 -1
  295. package/dist/components/utility/random-content/random-content.class.js +1 -1
  296. package/dist/components/utility/tour/tour.class.d.ts +1 -1
  297. package/dist/components/utility/tour/tour.class.js +1 -1
  298. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  299. package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +1 -1
  300. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +3 -1
  301. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +1 -1
  302. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts +3 -1
  303. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +1 -1
  304. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +2 -2
  305. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +4 -18
  306. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +1 -1
  307. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +2 -2
  308. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +4 -18
  309. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +1 -1
  310. package/dist/components/viewers/document-preview/document-preview.class.d.ts +1 -1
  311. package/dist/components/viewers/document-preview/document-preview.class.js +3 -16
  312. package/dist/components/viewers/document-viewer/ooxml-part-guard.js +1 -0
  313. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  314. package/dist/components/viewers/docx-viewer/docx-resource-guard.js +1 -1
  315. package/dist/components/viewers/docx-viewer/docx-viewer.class.d.ts +3 -3
  316. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +3 -3
  317. package/dist/components/viewers/ebook-viewer/ebook-loader.js +1 -1
  318. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +1 -1
  319. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +2 -1
  320. package/dist/components/viewers/ebook-viewer/epub-resource-guard.js +1 -1
  321. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  322. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  323. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +1 -4
  324. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +1 -1
  325. package/dist/components/viewers/highlight-layer/highlight-layer.class.js +1 -1
  326. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +3 -1
  327. package/dist/components/viewers/html-viewer/html-viewer.class.js +1 -1
  328. package/dist/components/viewers/html-viewer/html-viewer.styles.js +1 -1
  329. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  330. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +1 -1
  331. package/dist/components/viewers/page-rail/page-rail.class.js +2 -2
  332. package/dist/components/viewers/passive-markup.js +1 -1
  333. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  334. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +2 -2
  335. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
  336. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  337. package/dist/components/viewers/pptx-viewer/pptx-resource-guard.js +1 -1
  338. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +1 -1
  339. package/dist/components/viewers/region-highlight-layer.js +15 -2
  340. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +2 -2
  341. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +4 -18
  342. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +1 -1
  343. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +1 -1
  344. package/dist/components/viewers/svg-viewer/svg-viewer.class.js +2 -15
  345. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +1 -1
  346. package/dist/components/viewers/table-viewer-shared.js +15 -1
  347. package/dist/components/viewers/table-viewer-shared.styles.js +1 -0
  348. package/dist/events.d.ts +19 -18
  349. package/dist/framework-types.d.ts +1 -1
  350. package/dist/internal/accessibility-visibility.d.ts +3 -1
  351. package/dist/internal/accessibility-visibility.js +1 -1
  352. package/dist/internal/accessible-text-controller.js +1 -1
  353. package/dist/internal/active-element.d.ts +11 -0
  354. package/dist/internal/active-element.js +1 -1
  355. package/dist/internal/adjacent-runs.js +1 -1
  356. package/dist/internal/approval-wait-until.d.ts +7 -0
  357. package/dist/internal/approval-wait-until.js +1 -0
  358. package/dist/internal/aria-controls.js +1 -1
  359. package/dist/internal/catalog-picker.d.ts +2 -2
  360. package/dist/internal/catalog-picker.js +1 -1
  361. package/dist/internal/composed-tree.d.ts +18 -0
  362. package/dist/internal/composed-tree.js +1 -1
  363. package/dist/internal/copy-feedback.js +1 -0
  364. package/dist/internal/css-length.js +1 -1
  365. package/dist/internal/css-motion-time.js +1 -1
  366. package/dist/internal/css-number.js +1 -0
  367. package/dist/internal/default-strings.generated.js +1 -1
  368. package/dist/internal/deferred-focus-return.d.ts +33 -0
  369. package/dist/internal/deferred-focus-return.js +1 -1
  370. package/dist/internal/fixed-containing-block.js +1 -1
  371. package/dist/internal/form-associated.d.ts +38 -2
  372. package/dist/internal/form-associated.js +1 -1
  373. package/dist/internal/form-control-element.d.ts +13 -0
  374. package/dist/internal/form-control-element.js +1 -0
  375. package/dist/internal/form-control.styles.js +1 -1
  376. package/dist/internal/inherited-attribute-hub.js +1 -1
  377. package/dist/internal/locale-loaders.generated.js +1 -1
  378. package/dist/internal/localization-types.d.ts +1 -1
  379. package/dist/internal/localization.js +1 -1
  380. package/dist/internal/modal-surface-controller.js +1 -1
  381. package/dist/internal/object-guards.js +1 -1
  382. package/dist/internal/optional-peer-capabilities.d.ts +3 -1
  383. package/dist/internal/optional-peer-capabilities.js +1 -1
  384. package/dist/internal/orientation-breakpoint.js +1 -1
  385. package/dist/internal/overlay-manager.d.ts +6 -1
  386. package/dist/internal/overlay-manager.js +1 -1
  387. package/dist/internal/overlay-stack.d.ts +7 -3
  388. package/dist/internal/overlay-stack.js +1 -1
  389. package/dist/internal/package-metadata.js +1 -1
  390. package/dist/internal/persisted-restore.js +1 -1
  391. package/dist/internal/popup-controller.js +1 -0
  392. package/dist/internal/rendered-tree-traversal.d.ts +3 -1
  393. package/dist/internal/rendered-tree-traversal.js +1 -1
  394. package/dist/internal/retry-forwarder.js +1 -0
  395. package/dist/internal/roving-toolbar.js +1 -1
  396. package/dist/internal/scoped-definitions.generated.js +1 -1
  397. package/dist/internal/score-tiers.d.ts +4 -0
  398. package/dist/internal/score-tiers.js +1 -0
  399. package/dist/internal/semantic-variant.d.ts +7 -0
  400. package/dist/internal/semantic-variant.js +1 -0
  401. package/dist/internal/shared-unions.d.ts +1 -1
  402. package/dist/internal/viewer-search.js +1 -1
  403. package/dist/lyra.d.ts +1 -1
  404. package/dist/testing/happy-dom-shims.d.ts +18 -0
  405. package/dist/testing/happy-dom-shims.js +1 -1
  406. package/dist/testing/index.d.ts +1 -1
  407. package/dist/testing/index.js +1 -1
  408. package/llms/components/lr-accordion-item.md +1 -1
  409. package/llms/components/lr-accordion.md +1 -1
  410. package/llms/components/lr-alert.md +2 -2
  411. package/llms/components/lr-app-rail-group.md +1 -1
  412. package/llms/components/lr-app-rail-item.md +1 -1
  413. package/llms/components/lr-app-rail.md +1 -1
  414. package/llms/components/lr-attachment-chip.md +1 -10
  415. package/llms/components/lr-attachment-trigger.md +0 -10
  416. package/llms/components/lr-avatar.md +4 -8
  417. package/llms/components/lr-badge.md +16 -20
  418. package/llms/components/lr-box-plot.md +1 -1
  419. package/llms/components/lr-breadcrumb-item.md +1 -1
  420. package/llms/components/lr-breadcrumb.md +1 -1
  421. package/llms/components/lr-button-group.md +1 -1
  422. package/llms/components/lr-button.md +1 -1
  423. package/llms/components/lr-calendar.md +1 -1
  424. package/llms/components/lr-callout.md +3 -13
  425. package/llms/components/lr-card.md +1 -1
  426. package/llms/components/lr-carousel-item.md +1 -1
  427. package/llms/components/lr-carousel.md +1 -1
  428. package/llms/components/lr-chart.md +5 -7
  429. package/llms/components/lr-checkbox-group.md +1 -1
  430. package/llms/components/lr-checkbox.md +2 -1
  431. package/llms/components/lr-chip.md +3 -17
  432. package/llms/components/lr-chunk-inspector.md +2 -1
  433. package/llms/components/lr-citation-badge.md +2 -2
  434. package/llms/components/lr-code-block.md +0 -10
  435. package/llms/components/lr-code-editor.md +1 -1
  436. package/llms/components/lr-color-picker.md +1 -1
  437. package/llms/components/lr-combobox.md +6 -3
  438. package/llms/components/lr-command-palette.md +5 -2
  439. package/llms/components/lr-commit-card.md +1 -3
  440. package/llms/components/lr-condition-builder.md +1 -1
  441. package/llms/components/lr-confirm-bar.md +7 -13
  442. package/llms/components/lr-connector-manager.md +3 -1
  443. package/llms/components/lr-context-inspector.md +1 -1
  444. package/llms/components/lr-context-meter.md +1 -1
  445. package/llms/components/lr-control-group.md +1 -1
  446. package/llms/components/lr-copy-button.md +8 -10
  447. package/llms/components/lr-country-picker.md +1 -1
  448. package/llms/components/lr-currency-picker.md +1 -1
  449. package/llms/components/lr-dashboard-grid.md +1 -1
  450. package/llms/components/lr-data-grid.md +1 -1
  451. package/llms/components/lr-date-input.md +1 -1
  452. package/llms/components/lr-date-picker.md +11 -4
  453. package/llms/components/lr-details.md +1 -1
  454. package/llms/components/lr-dialog.md +8 -31
  455. package/llms/components/lr-diff-view.md +1 -1
  456. package/llms/components/lr-divider.md +1 -1
  457. package/llms/components/lr-dock-panel.md +1 -1
  458. package/llms/components/lr-document-library.md +1 -1
  459. package/llms/components/lr-drawer.md +1 -13
  460. package/llms/components/lr-drilldown-panel.md +1 -1
  461. package/llms/components/lr-drop-zone.md +4 -0
  462. package/llms/components/lr-dropdown-item.md +1 -1
  463. package/llms/components/lr-ebook-viewer.md +4 -3
  464. package/llms/components/lr-emoji-picker.md +1 -1
  465. package/llms/components/lr-entity-chip.md +2 -2
  466. package/llms/components/lr-env-list.md +1 -1
  467. package/llms/components/lr-eval-dataset.md +4 -19
  468. package/llms/components/lr-export-button.md +3 -3
  469. package/llms/components/lr-file-icon.md +0 -5
  470. package/llms/components/lr-file-input.md +3 -5
  471. package/llms/components/lr-file-tree.md +1 -1
  472. package/llms/components/lr-filter-bar.md +5 -1
  473. package/llms/components/lr-flag.md +1 -2
  474. package/llms/components/lr-flow-canvas.md +1 -1
  475. package/llms/components/lr-flow-controls.md +1 -1
  476. package/llms/components/lr-flow-minimap.md +2 -2
  477. package/llms/components/lr-flow-node.md +1 -1
  478. package/llms/components/lr-flow-run-status.md +1 -1
  479. package/llms/components/lr-format-bytes.md +2 -3
  480. package/llms/components/lr-format-date.md +2 -3
  481. package/llms/components/lr-format-number.md +1 -1
  482. package/llms/components/lr-funnel.md +1 -1
  483. package/llms/components/lr-gauge.md +1 -1
  484. package/llms/components/lr-generation-metrics.md +1 -1
  485. package/llms/components/lr-graph-query-builder.md +1 -1
  486. package/llms/components/lr-heatmap.md +1 -1
  487. package/llms/components/lr-icon-button.md +1 -1
  488. package/llms/components/lr-icon.md +1 -1
  489. package/llms/components/lr-input.md +1 -1
  490. package/llms/components/lr-intersection-observer.md +1 -1
  491. package/llms/components/lr-json-viewer.md +1 -1
  492. package/llms/components/lr-knowledge-graph-explorer.md +2 -2
  493. package/llms/components/lr-known-date.md +1 -1
  494. package/llms/components/lr-lite-chart.md +3 -4
  495. package/llms/components/lr-live-region.md +1 -1
  496. package/llms/components/lr-locale-picker.md +1 -1
  497. package/llms/components/lr-map.md +1 -3
  498. package/llms/components/lr-media-card.md +1 -10
  499. package/llms/components/lr-memory-panel.md +2 -0
  500. package/llms/components/lr-mention-popover.md +3 -3
  501. package/llms/components/lr-menu-item.md +1 -1
  502. package/llms/components/lr-menu-label.md +1 -1
  503. package/llms/components/lr-menu.md +1 -1
  504. package/llms/components/lr-menubar-item.md +1 -1
  505. package/llms/components/lr-menubar.md +1 -1
  506. package/llms/components/lr-message-actions.md +1 -11
  507. package/llms/components/lr-message-parts.md +3 -5
  508. package/llms/components/lr-model-select.md +2 -4
  509. package/llms/components/lr-multi-split.md +1 -1
  510. package/llms/components/lr-mutation-observer.md +2 -2
  511. package/llms/components/lr-native-time-input.md +1 -1
  512. package/llms/components/lr-navigation-menu-item.md +1 -1
  513. package/llms/components/lr-navigation-menu.md +1 -1
  514. package/llms/components/lr-number-input.md +1 -1
  515. package/llms/components/lr-option.md +1 -1
  516. package/llms/components/lr-otp-input.md +1 -1
  517. package/llms/components/lr-page.md +1 -1
  518. package/llms/components/lr-pagination.md +1 -1
  519. package/llms/components/lr-pan-zoom.md +1 -3
  520. package/llms/components/lr-permission-grant.md +3 -1
  521. package/llms/components/lr-phone-input.md +7 -5
  522. package/llms/components/lr-poll-status.md +1 -1
  523. package/llms/components/lr-popover.md +5 -9
  524. package/llms/components/lr-popup.md +1 -3
  525. package/llms/components/lr-progress-bar.md +2 -1
  526. package/llms/components/lr-progress-ring.md +4 -8
  527. package/llms/components/lr-prompt-input.md +3 -1
  528. package/llms/components/lr-prompt-studio.md +4 -4
  529. package/llms/components/lr-radio-button.md +2 -2
  530. package/llms/components/lr-radio-group.md +1 -1
  531. package/llms/components/lr-radio.md +3 -2
  532. package/llms/components/lr-random-content.md +1 -1
  533. package/llms/components/lr-rating.md +2 -3
  534. package/llms/components/lr-relative-time.md +2 -3
  535. package/llms/components/lr-reorder-item.md +1 -1
  536. package/llms/components/lr-reorder-list.md +1 -1
  537. package/llms/components/lr-research-progress.md +2 -0
  538. package/llms/components/lr-resize-observer.md +1 -1
  539. package/llms/components/lr-responsive-panel.md +1 -1
  540. package/llms/components/lr-retrieval-compare.md +2 -0
  541. package/llms/components/lr-retrieval-trace.md +2 -0
  542. package/llms/components/lr-rubric-form.md +1 -1
  543. package/llms/components/lr-scroller.md +1 -1
  544. package/llms/components/lr-segmented.md +1 -1
  545. package/llms/components/lr-select.md +1 -1
  546. package/llms/components/lr-sequence-playback.md +1 -2
  547. package/llms/components/lr-sequence-strip.md +1 -1
  548. package/llms/components/lr-signature-pad.md +1 -1
  549. package/llms/components/lr-skeleton.md +2 -4
  550. package/llms/components/lr-slider.md +1 -1
  551. package/llms/components/lr-sparkline.md +1 -1
  552. package/llms/components/lr-split-panel.md +1 -1
  553. package/llms/components/lr-stat.md +1 -1
  554. package/llms/components/lr-stepper.md +1 -1
  555. package/llms/components/lr-swatch-picker.md +1 -1
  556. package/llms/components/lr-switch.md +2 -1
  557. package/llms/components/lr-tab-group.md +1 -1
  558. package/llms/components/lr-tab-panel.md +1 -1
  559. package/llms/components/lr-tab.md +1 -1
  560. package/llms/components/lr-table.md +3 -3
  561. package/llms/components/lr-task-list.md +3 -3
  562. package/llms/components/lr-test-results.md +2 -4
  563. package/llms/components/lr-textarea.md +1 -1
  564. package/llms/components/lr-time-input.md +1 -1
  565. package/llms/components/lr-time-range.md +5 -4
  566. package/llms/components/lr-time-zone-picker.md +1 -1
  567. package/llms/components/lr-timeline-item.md +1 -1
  568. package/llms/components/lr-timeline.md +1 -1
  569. package/llms/components/lr-toggle-group.md +1 -1
  570. package/llms/components/lr-toggle.md +1 -1
  571. package/llms/components/lr-token-input.md +1 -1
  572. package/llms/components/lr-tool-approval-dialog.md +12 -10
  573. package/llms/components/lr-tool-call-block.md +1 -1
  574. package/llms/components/lr-tool-call-chip.md +1 -3
  575. package/llms/components/lr-tool-result-view.md +3 -3
  576. package/llms/components/lr-tool-timeline.md +2 -2
  577. package/llms/components/lr-tooltip.md +8 -11
  578. package/llms/components/lr-tour.md +2 -2
  579. package/llms/components/lr-tree-item.md +1 -1
  580. package/llms/components/lr-tree.md +1 -1
  581. package/llms/components/lr-unit-picker.md +1 -1
  582. package/llms/components/lr-usage-badge.md +1 -3
  583. package/llms/components/lr-video.md +1 -2
  584. package/llms/components/lr-virtual-list.md +1 -1
  585. package/llms/components/lr-visually-hidden.md +1 -1
  586. package/llms/components/lr-voice-picker.md +1 -1
  587. package/llms/components/lr-widget.md +1 -1
  588. package/llms/components/lr-word-cloud.md +1 -1
  589. package/llms/components/lr-zoomable-frame.md +1 -6
  590. package/llms/migration.md +96 -2
  591. package/llms/peers.md +3 -2
  592. package/llms/shared/ai-and-peers.md +2 -2
  593. package/llms/shared/events-and-types.md +4 -1
  594. package/llms/shared/imports-and-registration.md +2 -2
  595. package/llms/shared/localization-and-rtl.md +18 -18
  596. package/llms/shared/styles-and-tokens.md +1 -1
  597. package/llms/shared/testing-and-utilities.md +44 -43
  598. package/llms/shared.md +71 -67
  599. package/llms.txt +14 -12
  600. package/locales.json +1002 -1002
  601. package/package.json +16 -6879
  602. package/registrations.json +1 -1
  603. package/skills/compose-lyra-interfaces/SKILL.md +60 -0
  604. package/skills/compose-lyra-interfaces/agents/openai.yaml +4 -0
  605. package/skills/compose-lyra-interfaces/references/composition-patterns.md +77 -0
  606. package/skills/lyra-ui/SKILL.md +145 -0
  607. package/skills/lyra-ui/commands/frontend.md +37 -0
  608. package/skills/lyra-ui/commands/migrate.md +44 -0
  609. package/skills/lyra-ui/commands/new-component.md +19 -0
  610. package/skills/lyra-ui/commands/review.md +247 -0
  611. package/skills/lyra-ui/commands/update.md +30 -0
  612. package/skills/lyra-ui/reporting.md +137 -0
  613. package/custom-elements.json +0 -1
  614. package/dist/internal/side-effect-only.d.ts +0 -1
  615. package/dist/translations/am/agent-tools.js +0 -1
  616. package/dist/translations/am/charts.js +0 -1
  617. package/dist/translations/am/conversation.js +0 -1
  618. package/dist/translations/am/data.js +0 -1
  619. package/dist/translations/am/forms.js +0 -1
  620. package/dist/translations/am/layout.js +0 -1
  621. package/dist/translations/am/media.js +0 -1
  622. package/dist/translations/am/overlays.js +0 -1
  623. package/dist/translations/am/retrieval.js +0 -1
  624. package/dist/translations/am/shared.js +0 -1
  625. package/dist/translations/am/utility.js +0 -1
  626. package/dist/translations/am/viewers.js +0 -5
  627. package/dist/translations/am.js +0 -1
  628. package/dist/translations/ar/agent-tools.js +0 -1
  629. package/dist/translations/ar/charts.js +0 -1
  630. package/dist/translations/ar/conversation.js +0 -1
  631. package/dist/translations/ar/data.js +0 -1
  632. package/dist/translations/ar/forms.js +0 -1
  633. package/dist/translations/ar/layout.js +0 -1
  634. package/dist/translations/ar/media.js +0 -1
  635. package/dist/translations/ar/overlays.js +0 -1
  636. package/dist/translations/ar/retrieval.js +0 -1
  637. package/dist/translations/ar/shared.js +0 -1
  638. package/dist/translations/ar/utility.js +0 -1
  639. package/dist/translations/ar/viewers.js +0 -5
  640. package/dist/translations/ar.js +0 -1
  641. package/dist/translations/bho/agent-tools.js +0 -1
  642. package/dist/translations/bho/charts.js +0 -1
  643. package/dist/translations/bho/conversation.js +0 -1
  644. package/dist/translations/bho/data.js +0 -1
  645. package/dist/translations/bho/forms.js +0 -1
  646. package/dist/translations/bho/layout.js +0 -1
  647. package/dist/translations/bho/media.js +0 -1
  648. package/dist/translations/bho/overlays.js +0 -1
  649. package/dist/translations/bho/retrieval.js +0 -1
  650. package/dist/translations/bho/shared.js +0 -1
  651. package/dist/translations/bho/utility.js +0 -1
  652. package/dist/translations/bho/viewers.js +0 -5
  653. package/dist/translations/bho.js +0 -1
  654. package/dist/translations/bn/agent-tools.js +0 -1
  655. package/dist/translations/bn/charts.js +0 -1
  656. package/dist/translations/bn/conversation.js +0 -1
  657. package/dist/translations/bn/data.js +0 -1
  658. package/dist/translations/bn/forms.js +0 -1
  659. package/dist/translations/bn/layout.js +0 -1
  660. package/dist/translations/bn/media.js +0 -1
  661. package/dist/translations/bn/overlays.js +0 -1
  662. package/dist/translations/bn/retrieval.js +0 -1
  663. package/dist/translations/bn/shared.js +0 -1
  664. package/dist/translations/bn/utility.js +0 -1
  665. package/dist/translations/bn/viewers.js +0 -5
  666. package/dist/translations/bn.js +0 -1
  667. package/dist/translations/cs/agent-tools.js +0 -1
  668. package/dist/translations/cs/charts.js +0 -1
  669. package/dist/translations/cs/conversation.js +0 -1
  670. package/dist/translations/cs/data.js +0 -1
  671. package/dist/translations/cs/forms.js +0 -1
  672. package/dist/translations/cs/layout.js +0 -1
  673. package/dist/translations/cs/media.js +0 -1
  674. package/dist/translations/cs/overlays.js +0 -1
  675. package/dist/translations/cs/retrieval.js +0 -1
  676. package/dist/translations/cs/shared.js +0 -1
  677. package/dist/translations/cs/utility.js +0 -1
  678. package/dist/translations/cs/viewers.js +0 -5
  679. package/dist/translations/cs.js +0 -1
  680. package/dist/translations/da/agent-tools.js +0 -1
  681. package/dist/translations/da/charts.js +0 -1
  682. package/dist/translations/da/conversation.js +0 -1
  683. package/dist/translations/da/data.js +0 -1
  684. package/dist/translations/da/forms.js +0 -1
  685. package/dist/translations/da/layout.js +0 -1
  686. package/dist/translations/da/media.js +0 -1
  687. package/dist/translations/da/overlays.js +0 -1
  688. package/dist/translations/da/retrieval.js +0 -1
  689. package/dist/translations/da/shared.js +0 -1
  690. package/dist/translations/da/utility.js +0 -1
  691. package/dist/translations/da/viewers.js +0 -5
  692. package/dist/translations/da.js +0 -1
  693. package/dist/translations/de/agent-tools.js +0 -1
  694. package/dist/translations/de/charts.js +0 -1
  695. package/dist/translations/de/conversation.js +0 -1
  696. package/dist/translations/de/data.js +0 -1
  697. package/dist/translations/de/forms.js +0 -1
  698. package/dist/translations/de/layout.js +0 -1
  699. package/dist/translations/de/media.js +0 -1
  700. package/dist/translations/de/overlays.js +0 -1
  701. package/dist/translations/de/retrieval.js +0 -1
  702. package/dist/translations/de/shared.js +0 -1
  703. package/dist/translations/de/utility.js +0 -1
  704. package/dist/translations/de/viewers.js +0 -5
  705. package/dist/translations/de-CH/agent-tools.js +0 -1
  706. package/dist/translations/de-CH/charts.js +0 -1
  707. package/dist/translations/de-CH/conversation.js +0 -1
  708. package/dist/translations/de-CH/data.js +0 -1
  709. package/dist/translations/de-CH/forms.js +0 -1
  710. package/dist/translations/de-CH/layout.js +0 -1
  711. package/dist/translations/de-CH/media.js +0 -1
  712. package/dist/translations/de-CH/overlays.js +0 -1
  713. package/dist/translations/de-CH/retrieval.js +0 -1
  714. package/dist/translations/de-CH/shared.js +0 -1
  715. package/dist/translations/de-CH/utility.js +0 -1
  716. package/dist/translations/de-CH/viewers.js +0 -1
  717. package/dist/translations/de-CH.js +0 -1
  718. package/dist/translations/de.js +0 -1
  719. package/dist/translations/el/agent-tools.js +0 -1
  720. package/dist/translations/el/charts.js +0 -1
  721. package/dist/translations/el/conversation.js +0 -1
  722. package/dist/translations/el/data.js +0 -1
  723. package/dist/translations/el/forms.js +0 -1
  724. package/dist/translations/el/layout.js +0 -1
  725. package/dist/translations/el/media.js +0 -1
  726. package/dist/translations/el/overlays.js +0 -1
  727. package/dist/translations/el/retrieval.js +0 -1
  728. package/dist/translations/el/shared.js +0 -1
  729. package/dist/translations/el/utility.js +0 -1
  730. package/dist/translations/el/viewers.js +0 -5
  731. package/dist/translations/el.js +0 -1
  732. package/dist/translations/es/agent-tools.js +0 -1
  733. package/dist/translations/es/charts.js +0 -1
  734. package/dist/translations/es/conversation.js +0 -1
  735. package/dist/translations/es/data.js +0 -1
  736. package/dist/translations/es/forms.js +0 -1
  737. package/dist/translations/es/layout.js +0 -1
  738. package/dist/translations/es/media.js +0 -1
  739. package/dist/translations/es/overlays.js +0 -1
  740. package/dist/translations/es/retrieval.js +0 -1
  741. package/dist/translations/es/shared.js +0 -1
  742. package/dist/translations/es/utility.js +0 -1
  743. package/dist/translations/es/viewers.js +0 -5
  744. package/dist/translations/es.js +0 -1
  745. package/dist/translations/fa/agent-tools.js +0 -1
  746. package/dist/translations/fa/charts.js +0 -1
  747. package/dist/translations/fa/conversation.js +0 -1
  748. package/dist/translations/fa/data.js +0 -1
  749. package/dist/translations/fa/forms.js +0 -1
  750. package/dist/translations/fa/layout.js +0 -1
  751. package/dist/translations/fa/media.js +0 -1
  752. package/dist/translations/fa/overlays.js +0 -1
  753. package/dist/translations/fa/retrieval.js +0 -1
  754. package/dist/translations/fa/shared.js +0 -1
  755. package/dist/translations/fa/utility.js +0 -1
  756. package/dist/translations/fa/viewers.js +0 -5
  757. package/dist/translations/fa-AF/agent-tools.js +0 -1
  758. package/dist/translations/fa-AF/charts.js +0 -1
  759. package/dist/translations/fa-AF/conversation.js +0 -1
  760. package/dist/translations/fa-AF/data.js +0 -1
  761. package/dist/translations/fa-AF/forms.js +0 -1
  762. package/dist/translations/fa-AF/layout.js +0 -1
  763. package/dist/translations/fa-AF/media.js +0 -1
  764. package/dist/translations/fa-AF/overlays.js +0 -1
  765. package/dist/translations/fa-AF/retrieval.js +0 -1
  766. package/dist/translations/fa-AF/shared.js +0 -1
  767. package/dist/translations/fa-AF/utility.js +0 -1
  768. package/dist/translations/fa-AF/viewers.js +0 -5
  769. package/dist/translations/fa-AF.js +0 -1
  770. package/dist/translations/fa.js +0 -1
  771. package/dist/translations/fi/agent-tools.js +0 -1
  772. package/dist/translations/fi/charts.js +0 -1
  773. package/dist/translations/fi/conversation.js +0 -1
  774. package/dist/translations/fi/data.js +0 -1
  775. package/dist/translations/fi/forms.js +0 -1
  776. package/dist/translations/fi/layout.js +0 -1
  777. package/dist/translations/fi/media.js +0 -1
  778. package/dist/translations/fi/overlays.js +0 -1
  779. package/dist/translations/fi/retrieval.js +0 -1
  780. package/dist/translations/fi/shared.js +0 -1
  781. package/dist/translations/fi/utility.js +0 -1
  782. package/dist/translations/fi/viewers.js +0 -5
  783. package/dist/translations/fi.js +0 -1
  784. package/dist/translations/fr/agent-tools.js +0 -1
  785. package/dist/translations/fr/charts.js +0 -1
  786. package/dist/translations/fr/conversation.js +0 -1
  787. package/dist/translations/fr/data.js +0 -1
  788. package/dist/translations/fr/forms.js +0 -1
  789. package/dist/translations/fr/layout.js +0 -1
  790. package/dist/translations/fr/media.js +0 -1
  791. package/dist/translations/fr/overlays.js +0 -1
  792. package/dist/translations/fr/retrieval.js +0 -1
  793. package/dist/translations/fr/shared.js +0 -1
  794. package/dist/translations/fr/utility.js +0 -1
  795. package/dist/translations/fr/viewers.js +0 -5
  796. package/dist/translations/fr.js +0 -1
  797. package/dist/translations/gu/agent-tools.js +0 -1
  798. package/dist/translations/gu/charts.js +0 -1
  799. package/dist/translations/gu/conversation.js +0 -1
  800. package/dist/translations/gu/data.js +0 -1
  801. package/dist/translations/gu/forms.js +0 -1
  802. package/dist/translations/gu/layout.js +0 -1
  803. package/dist/translations/gu/media.js +0 -1
  804. package/dist/translations/gu/overlays.js +0 -1
  805. package/dist/translations/gu/retrieval.js +0 -1
  806. package/dist/translations/gu/shared.js +0 -1
  807. package/dist/translations/gu/utility.js +0 -1
  808. package/dist/translations/gu/viewers.js +0 -5
  809. package/dist/translations/gu.js +0 -1
  810. package/dist/translations/ha/agent-tools.js +0 -1
  811. package/dist/translations/ha/charts.js +0 -1
  812. package/dist/translations/ha/conversation.js +0 -1
  813. package/dist/translations/ha/data.js +0 -1
  814. package/dist/translations/ha/forms.js +0 -1
  815. package/dist/translations/ha/layout.js +0 -1
  816. package/dist/translations/ha/media.js +0 -1
  817. package/dist/translations/ha/overlays.js +0 -1
  818. package/dist/translations/ha/retrieval.js +0 -1
  819. package/dist/translations/ha/shared.js +0 -1
  820. package/dist/translations/ha/utility.js +0 -1
  821. package/dist/translations/ha/viewers.js +0 -5
  822. package/dist/translations/ha.js +0 -1
  823. package/dist/translations/he/agent-tools.js +0 -1
  824. package/dist/translations/he/charts.js +0 -1
  825. package/dist/translations/he/conversation.js +0 -1
  826. package/dist/translations/he/data.js +0 -1
  827. package/dist/translations/he/forms.js +0 -1
  828. package/dist/translations/he/layout.js +0 -1
  829. package/dist/translations/he/media.js +0 -1
  830. package/dist/translations/he/overlays.js +0 -1
  831. package/dist/translations/he/retrieval.js +0 -1
  832. package/dist/translations/he/shared.js +0 -1
  833. package/dist/translations/he/utility.js +0 -1
  834. package/dist/translations/he/viewers.js +0 -5
  835. package/dist/translations/he.js +0 -1
  836. package/dist/translations/hi/agent-tools.js +0 -1
  837. package/dist/translations/hi/charts.js +0 -1
  838. package/dist/translations/hi/conversation.js +0 -1
  839. package/dist/translations/hi/data.js +0 -1
  840. package/dist/translations/hi/forms.js +0 -1
  841. package/dist/translations/hi/layout.js +0 -1
  842. package/dist/translations/hi/media.js +0 -1
  843. package/dist/translations/hi/overlays.js +0 -1
  844. package/dist/translations/hi/retrieval.js +0 -1
  845. package/dist/translations/hi/shared.js +0 -1
  846. package/dist/translations/hi/utility.js +0 -1
  847. package/dist/translations/hi/viewers.js +0 -5
  848. package/dist/translations/hi.js +0 -1
  849. package/dist/translations/hr/agent-tools.js +0 -1
  850. package/dist/translations/hr/charts.js +0 -1
  851. package/dist/translations/hr/conversation.js +0 -1
  852. package/dist/translations/hr/data.js +0 -1
  853. package/dist/translations/hr/forms.js +0 -1
  854. package/dist/translations/hr/layout.js +0 -1
  855. package/dist/translations/hr/media.js +0 -1
  856. package/dist/translations/hr/overlays.js +0 -1
  857. package/dist/translations/hr/retrieval.js +0 -1
  858. package/dist/translations/hr/shared.js +0 -1
  859. package/dist/translations/hr/utility.js +0 -1
  860. package/dist/translations/hr/viewers.js +0 -5
  861. package/dist/translations/hr.js +0 -1
  862. package/dist/translations/hu/agent-tools.js +0 -1
  863. package/dist/translations/hu/charts.js +0 -1
  864. package/dist/translations/hu/conversation.js +0 -1
  865. package/dist/translations/hu/data.js +0 -1
  866. package/dist/translations/hu/forms.js +0 -1
  867. package/dist/translations/hu/layout.js +0 -1
  868. package/dist/translations/hu/media.js +0 -1
  869. package/dist/translations/hu/overlays.js +0 -1
  870. package/dist/translations/hu/retrieval.js +0 -1
  871. package/dist/translations/hu/shared.js +0 -1
  872. package/dist/translations/hu/utility.js +0 -1
  873. package/dist/translations/hu/viewers.js +0 -5
  874. package/dist/translations/hu.js +0 -1
  875. package/dist/translations/id/agent-tools.js +0 -1
  876. package/dist/translations/id/charts.js +0 -1
  877. package/dist/translations/id/conversation.js +0 -1
  878. package/dist/translations/id/data.js +0 -1
  879. package/dist/translations/id/forms.js +0 -1
  880. package/dist/translations/id/layout.js +0 -1
  881. package/dist/translations/id/media.js +0 -1
  882. package/dist/translations/id/overlays.js +0 -1
  883. package/dist/translations/id/retrieval.js +0 -1
  884. package/dist/translations/id/shared.js +0 -1
  885. package/dist/translations/id/utility.js +0 -1
  886. package/dist/translations/id/viewers.js +0 -5
  887. package/dist/translations/id.js +0 -1
  888. package/dist/translations/ig/agent-tools.js +0 -1
  889. package/dist/translations/ig/charts.js +0 -1
  890. package/dist/translations/ig/conversation.js +0 -1
  891. package/dist/translations/ig/data.js +0 -1
  892. package/dist/translations/ig/forms.js +0 -1
  893. package/dist/translations/ig/layout.js +0 -1
  894. package/dist/translations/ig/media.js +0 -1
  895. package/dist/translations/ig/overlays.js +0 -1
  896. package/dist/translations/ig/retrieval.js +0 -1
  897. package/dist/translations/ig/shared.js +0 -1
  898. package/dist/translations/ig/utility.js +0 -1
  899. package/dist/translations/ig/viewers.js +0 -5
  900. package/dist/translations/ig.js +0 -1
  901. package/dist/translations/it/agent-tools.js +0 -1
  902. package/dist/translations/it/charts.js +0 -1
  903. package/dist/translations/it/conversation.js +0 -1
  904. package/dist/translations/it/data.js +0 -1
  905. package/dist/translations/it/forms.js +0 -1
  906. package/dist/translations/it/layout.js +0 -1
  907. package/dist/translations/it/media.js +0 -1
  908. package/dist/translations/it/overlays.js +0 -1
  909. package/dist/translations/it/retrieval.js +0 -1
  910. package/dist/translations/it/shared.js +0 -1
  911. package/dist/translations/it/utility.js +0 -1
  912. package/dist/translations/it/viewers.js +0 -5
  913. package/dist/translations/it.js +0 -1
  914. package/dist/translations/ja/agent-tools.js +0 -1
  915. package/dist/translations/ja/charts.js +0 -1
  916. package/dist/translations/ja/conversation.js +0 -1
  917. package/dist/translations/ja/data.js +0 -1
  918. package/dist/translations/ja/forms.js +0 -1
  919. package/dist/translations/ja/layout.js +0 -1
  920. package/dist/translations/ja/media.js +0 -1
  921. package/dist/translations/ja/overlays.js +0 -1
  922. package/dist/translations/ja/retrieval.js +0 -1
  923. package/dist/translations/ja/shared.js +0 -1
  924. package/dist/translations/ja/utility.js +0 -1
  925. package/dist/translations/ja/viewers.js +0 -4
  926. package/dist/translations/ja.js +0 -1
  927. package/dist/translations/jv/agent-tools.js +0 -1
  928. package/dist/translations/jv/charts.js +0 -1
  929. package/dist/translations/jv/conversation.js +0 -1
  930. package/dist/translations/jv/data.js +0 -1
  931. package/dist/translations/jv/forms.js +0 -1
  932. package/dist/translations/jv/layout.js +0 -1
  933. package/dist/translations/jv/media.js +0 -1
  934. package/dist/translations/jv/overlays.js +0 -1
  935. package/dist/translations/jv/retrieval.js +0 -1
  936. package/dist/translations/jv/shared.js +0 -1
  937. package/dist/translations/jv/utility.js +0 -1
  938. package/dist/translations/jv/viewers.js +0 -5
  939. package/dist/translations/jv.js +0 -1
  940. package/dist/translations/kk/agent-tools.js +0 -1
  941. package/dist/translations/kk/charts.js +0 -1
  942. package/dist/translations/kk/conversation.js +0 -1
  943. package/dist/translations/kk/data.js +0 -1
  944. package/dist/translations/kk/forms.js +0 -1
  945. package/dist/translations/kk/layout.js +0 -1
  946. package/dist/translations/kk/media.js +0 -1
  947. package/dist/translations/kk/overlays.js +0 -1
  948. package/dist/translations/kk/retrieval.js +0 -1
  949. package/dist/translations/kk/shared.js +0 -1
  950. package/dist/translations/kk/utility.js +0 -1
  951. package/dist/translations/kk/viewers.js +0 -5
  952. package/dist/translations/kk.js +0 -1
  953. package/dist/translations/kn/agent-tools.js +0 -1
  954. package/dist/translations/kn/charts.js +0 -1
  955. package/dist/translations/kn/conversation.js +0 -1
  956. package/dist/translations/kn/data.js +0 -1
  957. package/dist/translations/kn/forms.js +0 -1
  958. package/dist/translations/kn/layout.js +0 -1
  959. package/dist/translations/kn/media.js +0 -1
  960. package/dist/translations/kn/overlays.js +0 -1
  961. package/dist/translations/kn/retrieval.js +0 -1
  962. package/dist/translations/kn/shared.js +0 -1
  963. package/dist/translations/kn/utility.js +0 -1
  964. package/dist/translations/kn/viewers.js +0 -5
  965. package/dist/translations/kn.js +0 -1
  966. package/dist/translations/ko/agent-tools.js +0 -1
  967. package/dist/translations/ko/charts.js +0 -1
  968. package/dist/translations/ko/conversation.js +0 -1
  969. package/dist/translations/ko/data.js +0 -1
  970. package/dist/translations/ko/forms.js +0 -1
  971. package/dist/translations/ko/layout.js +0 -1
  972. package/dist/translations/ko/media.js +0 -1
  973. package/dist/translations/ko/overlays.js +0 -1
  974. package/dist/translations/ko/retrieval.js +0 -1
  975. package/dist/translations/ko/shared.js +0 -1
  976. package/dist/translations/ko/utility.js +0 -1
  977. package/dist/translations/ko/viewers.js +0 -5
  978. package/dist/translations/ko.js +0 -1
  979. package/dist/translations/ln/agent-tools.js +0 -1
  980. package/dist/translations/ln/charts.js +0 -1
  981. package/dist/translations/ln/conversation.js +0 -1
  982. package/dist/translations/ln/data.js +0 -1
  983. package/dist/translations/ln/forms.js +0 -1
  984. package/dist/translations/ln/layout.js +0 -1
  985. package/dist/translations/ln/media.js +0 -1
  986. package/dist/translations/ln/overlays.js +0 -1
  987. package/dist/translations/ln/retrieval.js +0 -1
  988. package/dist/translations/ln/shared.js +0 -1
  989. package/dist/translations/ln/utility.js +0 -1
  990. package/dist/translations/ln/viewers.js +0 -5
  991. package/dist/translations/ln.js +0 -1
  992. package/dist/translations/ml/agent-tools.js +0 -1
  993. package/dist/translations/ml/charts.js +0 -1
  994. package/dist/translations/ml/conversation.js +0 -1
  995. package/dist/translations/ml/data.js +0 -1
  996. package/dist/translations/ml/forms.js +0 -1
  997. package/dist/translations/ml/layout.js +0 -1
  998. package/dist/translations/ml/media.js +0 -1
  999. package/dist/translations/ml/overlays.js +0 -1
  1000. package/dist/translations/ml/retrieval.js +0 -1
  1001. package/dist/translations/ml/shared.js +0 -1
  1002. package/dist/translations/ml/utility.js +0 -1
  1003. package/dist/translations/ml/viewers.js +0 -5
  1004. package/dist/translations/ml.js +0 -1
  1005. package/dist/translations/mr/agent-tools.js +0 -1
  1006. package/dist/translations/mr/charts.js +0 -1
  1007. package/dist/translations/mr/conversation.js +0 -1
  1008. package/dist/translations/mr/data.js +0 -1
  1009. package/dist/translations/mr/forms.js +0 -1
  1010. package/dist/translations/mr/layout.js +0 -1
  1011. package/dist/translations/mr/media.js +0 -1
  1012. package/dist/translations/mr/overlays.js +0 -1
  1013. package/dist/translations/mr/retrieval.js +0 -1
  1014. package/dist/translations/mr/shared.js +0 -1
  1015. package/dist/translations/mr/utility.js +0 -1
  1016. package/dist/translations/mr/viewers.js +0 -5
  1017. package/dist/translations/mr.js +0 -1
  1018. package/dist/translations/ms/agent-tools.js +0 -1
  1019. package/dist/translations/ms/charts.js +0 -1
  1020. package/dist/translations/ms/conversation.js +0 -1
  1021. package/dist/translations/ms/data.js +0 -1
  1022. package/dist/translations/ms/forms.js +0 -1
  1023. package/dist/translations/ms/layout.js +0 -1
  1024. package/dist/translations/ms/media.js +0 -1
  1025. package/dist/translations/ms/overlays.js +0 -1
  1026. package/dist/translations/ms/retrieval.js +0 -1
  1027. package/dist/translations/ms/shared.js +0 -1
  1028. package/dist/translations/ms/utility.js +0 -1
  1029. package/dist/translations/ms/viewers.js +0 -5
  1030. package/dist/translations/ms.js +0 -1
  1031. package/dist/translations/my/agent-tools.js +0 -1
  1032. package/dist/translations/my/charts.js +0 -1
  1033. package/dist/translations/my/conversation.js +0 -1
  1034. package/dist/translations/my/data.js +0 -1
  1035. package/dist/translations/my/forms.js +0 -1
  1036. package/dist/translations/my/layout.js +0 -1
  1037. package/dist/translations/my/media.js +0 -1
  1038. package/dist/translations/my/overlays.js +0 -1
  1039. package/dist/translations/my/retrieval.js +0 -1
  1040. package/dist/translations/my/shared.js +0 -1
  1041. package/dist/translations/my/utility.js +0 -1
  1042. package/dist/translations/my/viewers.js +0 -5
  1043. package/dist/translations/my.js +0 -1
  1044. package/dist/translations/nb/agent-tools.js +0 -1
  1045. package/dist/translations/nb/charts.js +0 -1
  1046. package/dist/translations/nb/conversation.js +0 -1
  1047. package/dist/translations/nb/data.js +0 -1
  1048. package/dist/translations/nb/forms.js +0 -1
  1049. package/dist/translations/nb/layout.js +0 -1
  1050. package/dist/translations/nb/media.js +0 -1
  1051. package/dist/translations/nb/overlays.js +0 -1
  1052. package/dist/translations/nb/retrieval.js +0 -1
  1053. package/dist/translations/nb/shared.js +0 -1
  1054. package/dist/translations/nb/utility.js +0 -1
  1055. package/dist/translations/nb/viewers.js +0 -5
  1056. package/dist/translations/nb.js +0 -1
  1057. package/dist/translations/ne/agent-tools.js +0 -1
  1058. package/dist/translations/ne/charts.js +0 -1
  1059. package/dist/translations/ne/conversation.js +0 -1
  1060. package/dist/translations/ne/data.js +0 -1
  1061. package/dist/translations/ne/forms.js +0 -1
  1062. package/dist/translations/ne/layout.js +0 -1
  1063. package/dist/translations/ne/media.js +0 -1
  1064. package/dist/translations/ne/overlays.js +0 -1
  1065. package/dist/translations/ne/retrieval.js +0 -1
  1066. package/dist/translations/ne/shared.js +0 -1
  1067. package/dist/translations/ne/utility.js +0 -1
  1068. package/dist/translations/ne/viewers.js +0 -5
  1069. package/dist/translations/ne.js +0 -1
  1070. package/dist/translations/nl/agent-tools.js +0 -1
  1071. package/dist/translations/nl/charts.js +0 -1
  1072. package/dist/translations/nl/conversation.js +0 -1
  1073. package/dist/translations/nl/data.js +0 -1
  1074. package/dist/translations/nl/forms.js +0 -1
  1075. package/dist/translations/nl/layout.js +0 -1
  1076. package/dist/translations/nl/media.js +0 -1
  1077. package/dist/translations/nl/overlays.js +0 -1
  1078. package/dist/translations/nl/retrieval.js +0 -1
  1079. package/dist/translations/nl/shared.js +0 -1
  1080. package/dist/translations/nl/utility.js +0 -1
  1081. package/dist/translations/nl/viewers.js +0 -5
  1082. package/dist/translations/nl.js +0 -1
  1083. package/dist/translations/nn/agent-tools.js +0 -1
  1084. package/dist/translations/nn/charts.js +0 -1
  1085. package/dist/translations/nn/conversation.js +0 -1
  1086. package/dist/translations/nn/data.js +0 -1
  1087. package/dist/translations/nn/forms.js +0 -1
  1088. package/dist/translations/nn/layout.js +0 -1
  1089. package/dist/translations/nn/media.js +0 -1
  1090. package/dist/translations/nn/overlays.js +0 -1
  1091. package/dist/translations/nn/retrieval.js +0 -1
  1092. package/dist/translations/nn/shared.js +0 -1
  1093. package/dist/translations/nn/utility.js +0 -1
  1094. package/dist/translations/nn/viewers.js +0 -5
  1095. package/dist/translations/nn.js +0 -1
  1096. package/dist/translations/om/agent-tools.js +0 -1
  1097. package/dist/translations/om/charts.js +0 -1
  1098. package/dist/translations/om/conversation.js +0 -1
  1099. package/dist/translations/om/data.js +0 -1
  1100. package/dist/translations/om/forms.js +0 -1
  1101. package/dist/translations/om/layout.js +0 -1
  1102. package/dist/translations/om/media.js +0 -1
  1103. package/dist/translations/om/overlays.js +0 -1
  1104. package/dist/translations/om/retrieval.js +0 -1
  1105. package/dist/translations/om/shared.js +0 -1
  1106. package/dist/translations/om/utility.js +0 -1
  1107. package/dist/translations/om/viewers.js +0 -5
  1108. package/dist/translations/om.js +0 -1
  1109. package/dist/translations/or/agent-tools.js +0 -1
  1110. package/dist/translations/or/charts.js +0 -1
  1111. package/dist/translations/or/conversation.js +0 -1
  1112. package/dist/translations/or/data.js +0 -1
  1113. package/dist/translations/or/forms.js +0 -1
  1114. package/dist/translations/or/layout.js +0 -1
  1115. package/dist/translations/or/media.js +0 -1
  1116. package/dist/translations/or/overlays.js +0 -1
  1117. package/dist/translations/or/retrieval.js +0 -1
  1118. package/dist/translations/or/shared.js +0 -1
  1119. package/dist/translations/or/utility.js +0 -1
  1120. package/dist/translations/or/viewers.js +0 -5
  1121. package/dist/translations/or.js +0 -1
  1122. package/dist/translations/pa/agent-tools.js +0 -1
  1123. package/dist/translations/pa/charts.js +0 -1
  1124. package/dist/translations/pa/conversation.js +0 -1
  1125. package/dist/translations/pa/data.js +0 -1
  1126. package/dist/translations/pa/forms.js +0 -1
  1127. package/dist/translations/pa/layout.js +0 -1
  1128. package/dist/translations/pa/media.js +0 -1
  1129. package/dist/translations/pa/overlays.js +0 -1
  1130. package/dist/translations/pa/retrieval.js +0 -1
  1131. package/dist/translations/pa/shared.js +0 -1
  1132. package/dist/translations/pa/utility.js +0 -1
  1133. package/dist/translations/pa/viewers.js +0 -5
  1134. package/dist/translations/pa.js +0 -1
  1135. package/dist/translations/pcm/agent-tools.js +0 -1
  1136. package/dist/translations/pcm/charts.js +0 -1
  1137. package/dist/translations/pcm/conversation.js +0 -1
  1138. package/dist/translations/pcm/data.js +0 -1
  1139. package/dist/translations/pcm/forms.js +0 -1
  1140. package/dist/translations/pcm/layout.js +0 -1
  1141. package/dist/translations/pcm/media.js +0 -1
  1142. package/dist/translations/pcm/overlays.js +0 -1
  1143. package/dist/translations/pcm/retrieval.js +0 -1
  1144. package/dist/translations/pcm/shared.js +0 -1
  1145. package/dist/translations/pcm/utility.js +0 -1
  1146. package/dist/translations/pcm/viewers.js +0 -5
  1147. package/dist/translations/pcm.js +0 -1
  1148. package/dist/translations/pl/agent-tools.js +0 -1
  1149. package/dist/translations/pl/charts.js +0 -1
  1150. package/dist/translations/pl/conversation.js +0 -1
  1151. package/dist/translations/pl/data.js +0 -1
  1152. package/dist/translations/pl/forms.js +0 -1
  1153. package/dist/translations/pl/layout.js +0 -1
  1154. package/dist/translations/pl/media.js +0 -1
  1155. package/dist/translations/pl/overlays.js +0 -1
  1156. package/dist/translations/pl/retrieval.js +0 -1
  1157. package/dist/translations/pl/shared.js +0 -1
  1158. package/dist/translations/pl/utility.js +0 -1
  1159. package/dist/translations/pl/viewers.js +0 -5
  1160. package/dist/translations/pl.js +0 -1
  1161. package/dist/translations/pnb/agent-tools.js +0 -1
  1162. package/dist/translations/pnb/charts.js +0 -1
  1163. package/dist/translations/pnb/conversation.js +0 -1
  1164. package/dist/translations/pnb/data.js +0 -1
  1165. package/dist/translations/pnb/forms.js +0 -1
  1166. package/dist/translations/pnb/layout.js +0 -1
  1167. package/dist/translations/pnb/media.js +0 -1
  1168. package/dist/translations/pnb/overlays.js +0 -1
  1169. package/dist/translations/pnb/retrieval.js +0 -1
  1170. package/dist/translations/pnb/shared.js +0 -1
  1171. package/dist/translations/pnb/utility.js +0 -1
  1172. package/dist/translations/pnb/viewers.js +0 -5
  1173. package/dist/translations/pnb.js +0 -1
  1174. package/dist/translations/ps/agent-tools.js +0 -1
  1175. package/dist/translations/ps/charts.js +0 -1
  1176. package/dist/translations/ps/conversation.js +0 -1
  1177. package/dist/translations/ps/data.js +0 -1
  1178. package/dist/translations/ps/forms.js +0 -1
  1179. package/dist/translations/ps/layout.js +0 -1
  1180. package/dist/translations/ps/media.js +0 -1
  1181. package/dist/translations/ps/overlays.js +0 -1
  1182. package/dist/translations/ps/retrieval.js +0 -1
  1183. package/dist/translations/ps/shared.js +0 -1
  1184. package/dist/translations/ps/utility.js +0 -1
  1185. package/dist/translations/ps/viewers.js +0 -5
  1186. package/dist/translations/ps.js +0 -1
  1187. package/dist/translations/pt-BR/agent-tools.js +0 -1
  1188. package/dist/translations/pt-BR/charts.js +0 -1
  1189. package/dist/translations/pt-BR/conversation.js +0 -1
  1190. package/dist/translations/pt-BR/data.js +0 -1
  1191. package/dist/translations/pt-BR/forms.js +0 -1
  1192. package/dist/translations/pt-BR/layout.js +0 -1
  1193. package/dist/translations/pt-BR/media.js +0 -1
  1194. package/dist/translations/pt-BR/overlays.js +0 -1
  1195. package/dist/translations/pt-BR/retrieval.js +0 -1
  1196. package/dist/translations/pt-BR/shared.js +0 -1
  1197. package/dist/translations/pt-BR/utility.js +0 -1
  1198. package/dist/translations/pt-BR/viewers.js +0 -5
  1199. package/dist/translations/pt-BR.js +0 -1
  1200. package/dist/translations/pt-PT/agent-tools.js +0 -1
  1201. package/dist/translations/pt-PT/charts.js +0 -1
  1202. package/dist/translations/pt-PT/conversation.js +0 -1
  1203. package/dist/translations/pt-PT/data.js +0 -1
  1204. package/dist/translations/pt-PT/forms.js +0 -1
  1205. package/dist/translations/pt-PT/layout.js +0 -1
  1206. package/dist/translations/pt-PT/media.js +0 -1
  1207. package/dist/translations/pt-PT/overlays.js +0 -1
  1208. package/dist/translations/pt-PT/retrieval.js +0 -1
  1209. package/dist/translations/pt-PT/shared.js +0 -1
  1210. package/dist/translations/pt-PT/utility.js +0 -1
  1211. package/dist/translations/pt-PT/viewers.js +0 -5
  1212. package/dist/translations/pt-PT.js +0 -1
  1213. package/dist/translations/ro/agent-tools.js +0 -1
  1214. package/dist/translations/ro/charts.js +0 -1
  1215. package/dist/translations/ro/conversation.js +0 -1
  1216. package/dist/translations/ro/data.js +0 -1
  1217. package/dist/translations/ro/forms.js +0 -1
  1218. package/dist/translations/ro/layout.js +0 -1
  1219. package/dist/translations/ro/media.js +0 -1
  1220. package/dist/translations/ro/overlays.js +0 -1
  1221. package/dist/translations/ro/retrieval.js +0 -1
  1222. package/dist/translations/ro/shared.js +0 -1
  1223. package/dist/translations/ro/utility.js +0 -1
  1224. package/dist/translations/ro/viewers.js +0 -5
  1225. package/dist/translations/ro.js +0 -1
  1226. package/dist/translations/ru/agent-tools.js +0 -1
  1227. package/dist/translations/ru/charts.js +0 -1
  1228. package/dist/translations/ru/conversation.js +0 -1
  1229. package/dist/translations/ru/data.js +0 -1
  1230. package/dist/translations/ru/forms.js +0 -1
  1231. package/dist/translations/ru/layout.js +0 -1
  1232. package/dist/translations/ru/media.js +0 -1
  1233. package/dist/translations/ru/overlays.js +0 -1
  1234. package/dist/translations/ru/retrieval.js +0 -1
  1235. package/dist/translations/ru/shared.js +0 -1
  1236. package/dist/translations/ru/utility.js +0 -1
  1237. package/dist/translations/ru/viewers.js +0 -5
  1238. package/dist/translations/ru.js +0 -1
  1239. package/dist/translations/sd/agent-tools.js +0 -1
  1240. package/dist/translations/sd/charts.js +0 -1
  1241. package/dist/translations/sd/conversation.js +0 -1
  1242. package/dist/translations/sd/data.js +0 -1
  1243. package/dist/translations/sd/forms.js +0 -1
  1244. package/dist/translations/sd/layout.js +0 -1
  1245. package/dist/translations/sd/media.js +0 -1
  1246. package/dist/translations/sd/overlays.js +0 -1
  1247. package/dist/translations/sd/retrieval.js +0 -1
  1248. package/dist/translations/sd/shared.js +0 -1
  1249. package/dist/translations/sd/utility.js +0 -1
  1250. package/dist/translations/sd/viewers.js +0 -5
  1251. package/dist/translations/sd.js +0 -1
  1252. package/dist/translations/sl/agent-tools.js +0 -1
  1253. package/dist/translations/sl/charts.js +0 -1
  1254. package/dist/translations/sl/conversation.js +0 -1
  1255. package/dist/translations/sl/data.js +0 -1
  1256. package/dist/translations/sl/forms.js +0 -1
  1257. package/dist/translations/sl/layout.js +0 -1
  1258. package/dist/translations/sl/media.js +0 -1
  1259. package/dist/translations/sl/overlays.js +0 -1
  1260. package/dist/translations/sl/retrieval.js +0 -1
  1261. package/dist/translations/sl/shared.js +0 -1
  1262. package/dist/translations/sl/utility.js +0 -1
  1263. package/dist/translations/sl/viewers.js +0 -5
  1264. package/dist/translations/sl.js +0 -1
  1265. package/dist/translations/su/agent-tools.js +0 -1
  1266. package/dist/translations/su/charts.js +0 -1
  1267. package/dist/translations/su/conversation.js +0 -1
  1268. package/dist/translations/su/data.js +0 -1
  1269. package/dist/translations/su/forms.js +0 -1
  1270. package/dist/translations/su/layout.js +0 -1
  1271. package/dist/translations/su/media.js +0 -1
  1272. package/dist/translations/su/overlays.js +0 -1
  1273. package/dist/translations/su/retrieval.js +0 -1
  1274. package/dist/translations/su/shared.js +0 -1
  1275. package/dist/translations/su/utility.js +0 -1
  1276. package/dist/translations/su/viewers.js +0 -5
  1277. package/dist/translations/su.js +0 -1
  1278. package/dist/translations/sv/agent-tools.js +0 -1
  1279. package/dist/translations/sv/charts.js +0 -1
  1280. package/dist/translations/sv/conversation.js +0 -1
  1281. package/dist/translations/sv/data.js +0 -1
  1282. package/dist/translations/sv/forms.js +0 -1
  1283. package/dist/translations/sv/layout.js +0 -1
  1284. package/dist/translations/sv/media.js +0 -1
  1285. package/dist/translations/sv/overlays.js +0 -1
  1286. package/dist/translations/sv/retrieval.js +0 -1
  1287. package/dist/translations/sv/shared.js +0 -1
  1288. package/dist/translations/sv/utility.js +0 -1
  1289. package/dist/translations/sv/viewers.js +0 -5
  1290. package/dist/translations/sv.js +0 -1
  1291. package/dist/translations/sw/agent-tools.js +0 -1
  1292. package/dist/translations/sw/charts.js +0 -1
  1293. package/dist/translations/sw/conversation.js +0 -1
  1294. package/dist/translations/sw/data.js +0 -1
  1295. package/dist/translations/sw/forms.js +0 -1
  1296. package/dist/translations/sw/layout.js +0 -1
  1297. package/dist/translations/sw/media.js +0 -1
  1298. package/dist/translations/sw/overlays.js +0 -1
  1299. package/dist/translations/sw/retrieval.js +0 -1
  1300. package/dist/translations/sw/shared.js +0 -1
  1301. package/dist/translations/sw/utility.js +0 -1
  1302. package/dist/translations/sw/viewers.js +0 -5
  1303. package/dist/translations/sw.js +0 -1
  1304. package/dist/translations/ta/agent-tools.js +0 -1
  1305. package/dist/translations/ta/charts.js +0 -1
  1306. package/dist/translations/ta/conversation.js +0 -1
  1307. package/dist/translations/ta/data.js +0 -1
  1308. package/dist/translations/ta/forms.js +0 -1
  1309. package/dist/translations/ta/layout.js +0 -1
  1310. package/dist/translations/ta/media.js +0 -1
  1311. package/dist/translations/ta/overlays.js +0 -1
  1312. package/dist/translations/ta/retrieval.js +0 -1
  1313. package/dist/translations/ta/shared.js +0 -1
  1314. package/dist/translations/ta/utility.js +0 -1
  1315. package/dist/translations/ta/viewers.js +0 -5
  1316. package/dist/translations/ta.js +0 -1
  1317. package/dist/translations/te/agent-tools.js +0 -1
  1318. package/dist/translations/te/charts.js +0 -1
  1319. package/dist/translations/te/conversation.js +0 -1
  1320. package/dist/translations/te/data.js +0 -1
  1321. package/dist/translations/te/forms.js +0 -1
  1322. package/dist/translations/te/layout.js +0 -1
  1323. package/dist/translations/te/media.js +0 -1
  1324. package/dist/translations/te/overlays.js +0 -1
  1325. package/dist/translations/te/retrieval.js +0 -1
  1326. package/dist/translations/te/shared.js +0 -1
  1327. package/dist/translations/te/utility.js +0 -1
  1328. package/dist/translations/te/viewers.js +0 -5
  1329. package/dist/translations/te.js +0 -1
  1330. package/dist/translations/th/agent-tools.js +0 -1
  1331. package/dist/translations/th/charts.js +0 -1
  1332. package/dist/translations/th/conversation.js +0 -1
  1333. package/dist/translations/th/data.js +0 -1
  1334. package/dist/translations/th/forms.js +0 -1
  1335. package/dist/translations/th/layout.js +0 -1
  1336. package/dist/translations/th/media.js +0 -1
  1337. package/dist/translations/th/overlays.js +0 -1
  1338. package/dist/translations/th/retrieval.js +0 -1
  1339. package/dist/translations/th/shared.js +0 -1
  1340. package/dist/translations/th/utility.js +0 -1
  1341. package/dist/translations/th/viewers.js +0 -5
  1342. package/dist/translations/th.js +0 -1
  1343. package/dist/translations/tl/agent-tools.js +0 -1
  1344. package/dist/translations/tl/charts.js +0 -1
  1345. package/dist/translations/tl/conversation.js +0 -1
  1346. package/dist/translations/tl/data.js +0 -1
  1347. package/dist/translations/tl/forms.js +0 -1
  1348. package/dist/translations/tl/layout.js +0 -1
  1349. package/dist/translations/tl/media.js +0 -1
  1350. package/dist/translations/tl/overlays.js +0 -1
  1351. package/dist/translations/tl/retrieval.js +0 -1
  1352. package/dist/translations/tl/shared.js +0 -1
  1353. package/dist/translations/tl/utility.js +0 -1
  1354. package/dist/translations/tl/viewers.js +0 -5
  1355. package/dist/translations/tl.js +0 -1
  1356. package/dist/translations/tr/agent-tools.js +0 -1
  1357. package/dist/translations/tr/charts.js +0 -1
  1358. package/dist/translations/tr/conversation.js +0 -1
  1359. package/dist/translations/tr/data.js +0 -1
  1360. package/dist/translations/tr/forms.js +0 -1
  1361. package/dist/translations/tr/layout.js +0 -1
  1362. package/dist/translations/tr/media.js +0 -1
  1363. package/dist/translations/tr/overlays.js +0 -1
  1364. package/dist/translations/tr/retrieval.js +0 -1
  1365. package/dist/translations/tr/shared.js +0 -1
  1366. package/dist/translations/tr/utility.js +0 -1
  1367. package/dist/translations/tr/viewers.js +0 -5
  1368. package/dist/translations/tr.js +0 -1
  1369. package/dist/translations/uk/agent-tools.js +0 -1
  1370. package/dist/translations/uk/charts.js +0 -1
  1371. package/dist/translations/uk/conversation.js +0 -1
  1372. package/dist/translations/uk/data.js +0 -1
  1373. package/dist/translations/uk/forms.js +0 -1
  1374. package/dist/translations/uk/layout.js +0 -1
  1375. package/dist/translations/uk/media.js +0 -1
  1376. package/dist/translations/uk/overlays.js +0 -1
  1377. package/dist/translations/uk/retrieval.js +0 -1
  1378. package/dist/translations/uk/shared.js +0 -1
  1379. package/dist/translations/uk/utility.js +0 -1
  1380. package/dist/translations/uk/viewers.js +0 -5
  1381. package/dist/translations/uk.js +0 -1
  1382. package/dist/translations/ur/agent-tools.js +0 -1
  1383. package/dist/translations/ur/charts.js +0 -1
  1384. package/dist/translations/ur/conversation.js +0 -1
  1385. package/dist/translations/ur/data.js +0 -1
  1386. package/dist/translations/ur/forms.js +0 -1
  1387. package/dist/translations/ur/layout.js +0 -1
  1388. package/dist/translations/ur/media.js +0 -1
  1389. package/dist/translations/ur/overlays.js +0 -1
  1390. package/dist/translations/ur/retrieval.js +0 -1
  1391. package/dist/translations/ur/shared.js +0 -1
  1392. package/dist/translations/ur/utility.js +0 -1
  1393. package/dist/translations/ur/viewers.js +0 -5
  1394. package/dist/translations/ur.js +0 -1
  1395. package/dist/translations/uz/agent-tools.js +0 -1
  1396. package/dist/translations/uz/charts.js +0 -1
  1397. package/dist/translations/uz/conversation.js +0 -1
  1398. package/dist/translations/uz/data.js +0 -1
  1399. package/dist/translations/uz/forms.js +0 -1
  1400. package/dist/translations/uz/layout.js +0 -1
  1401. package/dist/translations/uz/media.js +0 -1
  1402. package/dist/translations/uz/overlays.js +0 -1
  1403. package/dist/translations/uz/retrieval.js +0 -1
  1404. package/dist/translations/uz/shared.js +0 -1
  1405. package/dist/translations/uz/utility.js +0 -1
  1406. package/dist/translations/uz/viewers.js +0 -5
  1407. package/dist/translations/uz.js +0 -1
  1408. package/dist/translations/vi/agent-tools.js +0 -1
  1409. package/dist/translations/vi/charts.js +0 -1
  1410. package/dist/translations/vi/conversation.js +0 -1
  1411. package/dist/translations/vi/data.js +0 -1
  1412. package/dist/translations/vi/forms.js +0 -1
  1413. package/dist/translations/vi/layout.js +0 -1
  1414. package/dist/translations/vi/media.js +0 -1
  1415. package/dist/translations/vi/overlays.js +0 -1
  1416. package/dist/translations/vi/retrieval.js +0 -1
  1417. package/dist/translations/vi/shared.js +0 -1
  1418. package/dist/translations/vi/utility.js +0 -1
  1419. package/dist/translations/vi/viewers.js +0 -5
  1420. package/dist/translations/vi.js +0 -1
  1421. package/dist/translations/yo/agent-tools.js +0 -1
  1422. package/dist/translations/yo/charts.js +0 -1
  1423. package/dist/translations/yo/conversation.js +0 -1
  1424. package/dist/translations/yo/data.js +0 -1
  1425. package/dist/translations/yo/forms.js +0 -1
  1426. package/dist/translations/yo/layout.js +0 -1
  1427. package/dist/translations/yo/media.js +0 -1
  1428. package/dist/translations/yo/overlays.js +0 -1
  1429. package/dist/translations/yo/retrieval.js +0 -1
  1430. package/dist/translations/yo/shared.js +0 -1
  1431. package/dist/translations/yo/utility.js +0 -1
  1432. package/dist/translations/yo/viewers.js +0 -5
  1433. package/dist/translations/yo.js +0 -1
  1434. package/dist/translations/zh-CN/agent-tools.js +0 -1
  1435. package/dist/translations/zh-CN/charts.js +0 -1
  1436. package/dist/translations/zh-CN/conversation.js +0 -1
  1437. package/dist/translations/zh-CN/data.js +0 -1
  1438. package/dist/translations/zh-CN/forms.js +0 -1
  1439. package/dist/translations/zh-CN/layout.js +0 -1
  1440. package/dist/translations/zh-CN/media.js +0 -1
  1441. package/dist/translations/zh-CN/overlays.js +0 -1
  1442. package/dist/translations/zh-CN/retrieval.js +0 -1
  1443. package/dist/translations/zh-CN/shared.js +0 -1
  1444. package/dist/translations/zh-CN/utility.js +0 -1
  1445. package/dist/translations/zh-CN/viewers.js +0 -5
  1446. package/dist/translations/zh-CN.js +0 -1
  1447. package/dist/translations/zh-TW/agent-tools.js +0 -1
  1448. package/dist/translations/zh-TW/charts.js +0 -1
  1449. package/dist/translations/zh-TW/conversation.js +0 -1
  1450. package/dist/translations/zh-TW/data.js +0 -1
  1451. package/dist/translations/zh-TW/forms.js +0 -1
  1452. package/dist/translations/zh-TW/layout.js +0 -1
  1453. package/dist/translations/zh-TW/media.js +0 -1
  1454. package/dist/translations/zh-TW/overlays.js +0 -1
  1455. package/dist/translations/zh-TW/retrieval.js +0 -1
  1456. package/dist/translations/zh-TW/shared.js +0 -1
  1457. package/dist/translations/zh-TW/utility.js +0 -1
  1458. package/dist/translations/zh-TW/viewers.js +0 -5
  1459. package/dist/translations/zh-TW.js +0 -1
  1460. package/dist/translations/zu/agent-tools.js +0 -1
  1461. package/dist/translations/zu/charts.js +0 -1
  1462. package/dist/translations/zu/conversation.js +0 -1
  1463. package/dist/translations/zu/data.js +0 -1
  1464. package/dist/translations/zu/forms.js +0 -1
  1465. package/dist/translations/zu/layout.js +0 -1
  1466. package/dist/translations/zu/media.js +0 -1
  1467. package/dist/translations/zu/overlays.js +0 -1
  1468. package/dist/translations/zu/retrieval.js +0 -1
  1469. package/dist/translations/zu/shared.js +0 -1
  1470. package/dist/translations/zu/utility.js +0 -1
  1471. package/dist/translations/zu/viewers.js +0 -5
  1472. package/dist/translations/zu.js +0 -1
  1473. package/vscode-css-data.json +0 -1
  1474. package/vscode-html-data.json +0 -1
  1475. package/web-types.json +0 -1
@@ -0,0 +1,40 @@
1
+ import{cpSync,existsSync,lstatSync,mkdirSync,readFileSync,readdirSync,readlinkSync,realpathSync,rmSync,symlinkSync,writeFileSync}from"node:fs";import path from"node:path";import{createInterface}from"node:readline";import{fileURLToPath}from"node:url";import{AGENTS,AGENT_IDS,UNIVERSAL_SKILL_DIR,detectCaller}from"./agent-registry.mjs";const BLOCK_START="<!-- lyra-ui:start -->",BLOCK_END="<!-- lyra-ui:end -->",MANAGED_MARKER=".lyra-ui-managed",PACKAGE_NAME="@aceshooting/lyra-ui",INSTRUCTION_BLOCK=[BLOCK_START,"## Lyra UI (@aceshooting/lyra-ui)","","Before writing or reviewing any `lr-*` markup, use the `lyra-ui` skill (if your agent loads skills)","or read `node_modules/@aceshooting/lyra-ui/llms.txt`; never guess attributes, slots, events or","imports. One component: `node_modules/@aceshooting/lyra-ui/llms/components/<tag>.md`. Page and","layout design: the `compose-lyra-interfaces` skill. Refresh with `npx lyra-ui init-agents`.",BLOCK_END].join(`
2
+ `),agentList=AGENTS.map(agent=>agent.id).join(","),AGENTS_MD_NOTE="AGENTS.md now carries the pointer block.",HELP=`Usage: lyra-ui init-agents [options]
3
+
4
+ AI coding agents: run \`npx lyra-ui init-agents\` (add \`--agent <name>\` if you are not auto-detected) to
5
+ install the Lyra UI skill for yourself. It prints what was installed (absolute paths) and what to do
6
+ next so the skill loads; add \`--json\` for a machine-readable result.
7
+
8
+ Sets up AI coding agents (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub Copilot, Amp,
9
+ Windsurf, ...) for this project: installs the Lyra UI skills bundled in
10
+ node_modules/${PACKAGE_NAME}/skills/ and adds or refreshes a short block between ${BLOCK_START}
11
+ and ${BLOCK_END} in AGENTS.md (created if missing; read by most agents) and CLAUDE.md (only if it
12
+ exists and does not import AGENTS.md). Safe to re-run; content outside the block and unrelated skill
13
+ directories are never modified.
14
+
15
+ The shared ${UNIVERSAL_SKILL_DIR}/ directory is always installed. Agents that read another
16
+ directory (today: Claude Code, .claude/skills) get a link to it. Which agents, in order: --agent(s);
17
+ the invoking agent, detected from its documented environment (Claude Code, Gemini CLI); agents
18
+ detected from project config; in a terminal without any of those, a prompt for humans.
19
+
20
+ Options:
21
+ --agent, --agents <list> ${agentList}, or "all"; overrides everything else
22
+ --yes, -y never prompt; use the invoking or detected agents
23
+ --json print one JSON object instead of text
24
+ --copy copy the skills instead of symlinking them to node_modules (a symlink
25
+ follows package upgrades; a copy is committable and refreshed by re-running)
26
+ --link convert a previously managed copy back to a symlink
27
+ --dry-run, -n print what would change and write nothing
28
+ --force replace an existing skill directory that this tool did not create
29
+ --dir <path> project directory (default: the current directory)
30
+ --help, -h show this message
31
+ `;function parseArguments(argv){const options={agents:void 0,yes:!1,json:!1,mode:void 0,dryRun:!1,force:!1,dir:void 0,help:!1};for(let index=0;index<argv.length;index+=1){const argument=argv[index],[flag,inline]=argument.startsWith("--")?argument.split(/=(.*)/su,2):[argument],value=()=>{const next=inline??argv[++index];if(next===void 0||next.startsWith("--"))throw new Error(`${flag} needs a value`);return next};if(flag==="--help"||flag==="-h")options.help=!0;else if(flag==="--dry-run"||flag==="-n")options.dryRun=!0;else if(flag==="--force")options.force=!0;else if(flag==="--yes"||flag==="-y")options.yes=!0;else if(flag==="--json")options.json=!0;else if(flag==="--copy")options.mode="copy";else if(flag==="--link")options.mode="link";else if(flag==="--dir")options.dir=value();else if(flag==="--agents"||flag==="--agent"){const names=[...new Set(value().split(",").map(name=>name.trim().toLowerCase()).filter(Boolean))],unknown=names.filter(name=>name!=="all"&&!AGENT_IDS.includes(name));if(unknown.length>0||names.length===0)throw new Error(`${flag} accepts ${AGENT_IDS.join(", ")} or all; got "${unknown.join(",")}"`);options.agents=names.includes("all")?[...AGENT_IDS]:names}else throw new Error(`unknown option ${argument}`)}return options}function detectAgents(projectDir){return AGENTS.filter(agent=>agent.detect.some(entry=>existsSync(path.join(projectDir,entry)))).map(agent=>agent.id)}function applySelectionInput(input,selected){const text=input.trim().toLowerCase();if(text==="")return{selected:[...selected],done:!0};if(text==="a"||text==="all")return{selected:[...AGENT_IDS],done:!1};if(text==="n"||text==="none")return{selected:[],done:!1};const next=new Set(selected);for(const token of text.split(/[\s,]+/u).filter(Boolean)){const number=Number(token),id=Number.isInteger(number)?AGENT_IDS[number-1]:AGENT_IDS.find(candidate=>candidate===token);if(!id)return{selected:[...selected],done:!1,error:`"${token}" is not a listed number or agent`};next.has(id)?next.delete(id):next.add(id)}return{selected:AGENT_IDS.filter(id=>next.has(id)),done:!1}}function renderSelection(selected){const lines=[`Which AI coding agents should be set up? ${UNIVERSAL_SKILL_DIR}/ (shared) is always installed.`];return AGENTS.forEach((agent,index)=>{const where=agent.ownSkillDir?`needs ${agent.ownSkillDir}/`:`reads ${UNIVERSAL_SKILL_DIR}/`;lines.push(` ${String(index+1).padStart(2)}. [${selected.includes(agent.id)?"x":" "}] ${agent.name} (${where})`)}),lines.push('Type numbers to toggle (e.g. "1 3"), a = all, n = none, Enter = confirm.'),lines.join(`
32
+ `)}async function promptForAgents(initial,input,output){const rl=createInterface({input,output}),queue=[];let waiter=null,closed=!1;rl.on("line",line=>{if(waiter){const resolve=waiter;waiter=null,resolve(line)}else queue.push(line)}),rl.on("close",()=>{closed=!0,waiter&&waiter(null)});const nextLine=()=>new Promise(resolve=>{queue.length>0?resolve(queue.shift()):closed?resolve(null):waiter=resolve});let selected=[...initial];try{for(;;){output.write(`${renderSelection(selected)}
33
+ > `);const answer=await nextLine();if(answer===null)return selected;const result=applySelectionInput(answer,selected);if(selected=result.selected,result.error&&output.write(`${result.error}
34
+ `),result.done)return selected}}finally{rl.close()}}function findPackageRoot(fromDirectory){let directory=fromDirectory;for(;;){const manifest=path.join(directory,"package.json");if(existsSync(manifest))try{if(JSON.parse(readFileSync(manifest,"utf8")).name===PACKAGE_NAME)return directory}catch{}const parent=path.dirname(directory);if(parent===directory)return;directory=parent}}function listFiles(directory,prefix=""){return readdirSync(directory,{withFileTypes:!0}).flatMap(entry=>{const relative=prefix?`${prefix}/${entry.name}`:entry.name;return entry.isDirectory()?listFiles(path.join(directory,entry.name),relative):[relative]}).sort()}function sameTree(left,right){const leftFiles=listFiles(left).filter(file=>file!==MANAGED_MARKER),rightFiles=listFiles(right).filter(file=>file!==MANAGED_MARKER);return leftFiles.length===rightFiles.length&&leftFiles.every((file,index)=>file===rightFiles[index]&&readFileSync(path.join(left,file)).equals(readFileSync(path.join(right,file))))}const exists=target=>{try{return lstatSync(target),!0}catch{return!1}};function bundledSkills(packageRoot){const skillsRoot=path.join(packageRoot,"skills");return existsSync(skillsRoot)?readdirSync(skillsRoot,{withFileTypes:!0}).filter(entry=>entry.isDirectory()&&existsSync(path.join(skillsRoot,entry.name,"SKILL.md"))).map(entry=>entry.name).sort():[]}function stablePackageRoot(projectDir,packageRoot){let directory=projectDir;for(;;){const candidate=path.join(directory,"node_modules",...PACKAGE_NAME.split("/"));try{if(realpathSync(candidate)===realpathSync(packageRoot))return candidate}catch{}const parent=path.dirname(directory);if(parent===directory)return packageRoot;directory=parent}}function applyInstructionBlock(original){const eol=original.includes(`\r
35
+ `)?`\r
36
+ `:`
37
+ `,block=INSTRUCTION_BLOCK.replaceAll(`
38
+ `,eol),start=original.indexOf(BLOCK_START);if(start!==-1){const endMarker=original.indexOf(BLOCK_END,start);if(endMarker===-1)return{error:`${BLOCK_START} has no matching ${BLOCK_END}`};const end=endMarker+BLOCK_END.length;return{text:original.slice(0,start)+block+original.slice(end)}}if(original.includes(BLOCK_END))return{error:`${BLOCK_END} without ${BLOCK_START}`};if(original.trim()==="")return{text:block+eol};const separator=original.endsWith(eol+eol)?"":original.endsWith(eol)?eol:eol+eol;return{text:original+separator+block+eol}}async function runInitAgents(argv,environment={}){const out=environment.stdout??(line=>console.log(line)),err=environment.stderr??(line=>console.error(line));let options;try{options=parseArguments(argv)}catch(error){return err(`lyra-ui init-agents: ${error.message}
39
+
40
+ ${HELP}`),2}if(options.help)return out(HELP),0;const packageRoot=environment.packageRoot??findPackageRoot(path.dirname(fileURLToPath(import.meta.url))),skills=packageRoot?bundledSkills(packageRoot):[];if(!packageRoot||skills.length===0)return err(`lyra-ui init-agents: no bundled skills found${packageRoot?` in ${path.join(packageRoot,"skills")}`:""}.`),1;const projectDir=path.resolve(environment.cwd??process.cwd(),options.dir??".");if(!existsSync(projectDir)||!lstatSync(projectDir).isDirectory())return err(`lyra-ui init-agents: ${projectDir} is not a directory.`),1;const detected=detectAgents(projectDir),caller=detectCaller(environment.env??process.env),input=environment.input??process.stdin,output=environment.output??process.stdout,interactive=options.agents===void 0&&caller===void 0&&!options.yes&&!options.json&&!!input.isTTY&&!!output.isTTY;let selectedIds,source;options.agents?[selectedIds,source]=[options.agents,"flag"]:caller?[selectedIds,source]=[[caller],"caller"]:interactive?[selectedIds,source]=[await promptForAgents(detected,input,output),"prompt"]:[selectedIds,source]=[detected,"detected"];const selected=AGENTS.filter(agent=>selectedIds.includes(agent.id)),ownDirectories=selected.filter(agent=>agent.ownSkillDir),linkSource=stablePackageRoot(projectDir,packageRoot),platform=environment.platform??process.platform,dry=options.dryRun,rel=target=>path.relative(projectDir,target).split(path.sep).join("/")||".",records=[];let failed=!1;const report=(status,text)=>{const[first,...rest]=text.split(" ");records.push({status,path:path.join(projectDir,first.replace(/:$/u,"")),detail:rest.join(" ")||void 0,error:status==="error"?text:void 0})},named=agents=>agents.map(agent=>agent.name).join(", ")||"none",sourceLabel={flag:"from --agents",caller:"invoking agent detected",prompt:"selected",detected:"detected in the project"}[source];for(const skill of skills){const bundled=path.join(packageRoot,"skills",skill),canonical=path.join(projectDir,UNIVERSAL_SKILL_DIR,skill),targets=[{target:canonical,label:rel(canonical),canonical:!0,linkTarget:path.relative(path.dirname(canonical),path.join(linkSource,"skills",skill)).split(path.sep).join("/")},...ownDirectories.map(agent=>{const target=path.join(projectDir,agent.ownSkillDir,skill);return{target,label:rel(target),canonical:!1,linkTarget:path.relative(path.dirname(target),canonical).split(path.sep).join("/")}})];for(const entry of targets)try{installSkill({...entry,bundled,options,platform,dry,report})}catch(error){failed=!0,report("error",`${entry.label}: ${error.message}`)}}for(const name of["AGENTS.md","CLAUDE.md"]){const target=path.join(projectDir,name);try{const present=existsSync(target);if(!present&&name==="CLAUDE.md")continue;const original=present?readFileSync(target,"utf8"):"";if(name==="CLAUDE.md"&&/^@AGENTS\.md\s*$/mu.test(original)){report("skipped","CLAUDE.md (imports AGENTS.md, which carries the block)");continue}const next2=applyInstructionBlock(original);next2.error?(failed=!0,report("error",`${name}: ${next2.error}; fix the markers by hand and re-run`)):next2.text===original?report("unchanged",`${name} (block up to date)`):(dry||writeFileSync(target,next2.text),report(present?original.includes(BLOCK_START)?"updated":"added":"created",`${name} (${present?"pointer block":"with pointer block"})`))}catch(error){failed=!0,report("error",`${name}: ${error.message}`)}}const dangling=!dry&&records.some(record=>record.status==="linked")&&!existsSync(path.join(projectDir,"node_modules",...PACKAGE_NAME.split("/"))),next=[];if(!failed){const targets=selected.length>0?selected:[];for(const agent of targets)next.push(`${agent.name}: ${agent.reload}.`);targets.length===0&&next.push(`Agents reading ${UNIVERSAL_SKILL_DIR}/ (Codex, OpenCode, Cursor, Gemini CLI, GitHub Copilot, Amp, Windsurf) pick the skill up on their next session; ${AGENTS_MD_NOTE}`),dangling&&next.push("Skills link into node_modules: run your package manager's install first, or re-run with --copy."),source!=="flag"&&next.push(`Not you? Re-run with --agent <${AGENT_IDS.join("|")}> or --agents all.`)}const code=failed?1:0;if(options.json)return out(JSON.stringify({ok:!failed,dryRun:dry,projectDir,agents:{source,caller:caller??null,selected:selected.map(agent=>agent.id),detected},changes:records.map(({status,path:target,detail,error})=>({status,path:target,...detail?{detail}:{},...error?{error}:{}})),next},null,2)),code;const shown=record=>interactive?rel(record.path):record.path;out(`${dry?"lyra-ui init-agents (dry run, nothing written)":"lyra-ui init-agents"} in ${projectDir}`),out(`Agents: ${UNIVERSAL_SKILL_DIR}/ (shared) + ${named(selected)} (${sourceLabel})`);for(const record of records)out(` ${record.status.padEnd(10)}${shown(record)}${record.detail?` ${record.detail}`:""}`);if(!failed&&(out(dry?"Dry run: nothing was written; run without --dry-run to apply.":"Done."),next.length>0)){out("Next:");for(const line of next)out(` - ${line}`)}return code}function installSkill({target,bundled,linkTarget,label,canonical,options,platform,dry,report}){const wantsCopy=canonical&&options.mode==="copy"||platform==="win32",present=exists(target),stat=present?lstatSync(target):void 0;let managedCopy=!1;if(stat?.isSymbolicLink()){const current=readlinkSync(target).split(path.sep).join("/");if(!(/@aceshooting\/lyra-ui\/skills\//u.test(current)||current===linkTarget||/(?:^|\/)\.agents\/skills\/[^/]+$/u.test(current))&&!options.force){report("skipped",`${label} (symlink to ${current} is not managed by lyra-ui; use --force to replace)`);return}if(!wantsCopy&&current===linkTarget){report("unchanged",`${label} -> ${linkTarget}`);return}}else if(stat?.isDirectory()){if(managedCopy=existsSync(path.join(target,MANAGED_MARKER)),!managedCopy&&!options.force){report("skipped",`${label} (existing directory not created by lyra-ui; use --force to replace)`);return}if(managedCopy&&options.mode!=="link"){if(sameTree(bundled,target)){report("unchanged",`${label} (copy up to date)`);return}dry||copySkill(bundled,target),report("updated",`${label} (copy refreshed)`);return}}else if(present&&!options.force){report("skipped",`${label} (exists and is not a directory; use --force to replace)`);return}const status=present?"updated":"created";if(dry){report(status,`${label} ${wantsCopy?"(copy)":`-> ${linkTarget}`}`);return}if(present&&rmSync(target,{recursive:!0,force:!0}),mkdirSync(path.dirname(target),{recursive:!0}),wantsCopy){copySkill(bundled,target),report(status,`${label} (copy${platform==="win32"&&options.mode!=="copy"?", symlinks skipped on Windows":""})`);return}try{symlinkSync(linkTarget,target,"dir"),report(status==="created"?"linked":"relinked",`${label} -> ${linkTarget}`)}catch(error){copySkill(bundled,target),report(status,`${label} (copy; symlink failed: ${error.code??error.message})`)}}function copySkill(source,target){rmSync(target,{recursive:!0,force:!0}),cpSync(source,target,{recursive:!0}),writeFileSync(path.join(target,MANAGED_MARKER),"Managed by `npx lyra-ui init-agents`; re-run it to refresh this copy.\n")}export{BLOCK_END,BLOCK_START,INSTRUCTION_BLOCK,MANAGED_MARKER,applyInstructionBlock,applySelectionInput,bundledSkills,detectAgents,findPackageRoot,parseArguments,runInitAgents};
@@ -0,0 +1 @@
1
+ import{realpathSync}from"node:fs";import{fileURLToPath}from"node:url";function isMainModule(moduleUrl,invokedPath=process.argv[1]){if(!invokedPath)return!1;try{return realpathSync(invokedPath)===realpathSync(fileURLToPath(moduleUrl))}catch{return!1}}export{isMainModule};
@@ -1 +1 @@
1
- const LYRA_RENAME_LEDGER_SCHEMA_VERSION=1,UNRELEASED_VERSION="unreleased",LYRA_RENAME_PROFILES=Object.freeze([Object.freeze({origin:"lyra-v21",fromMajor:21,toMajor:22,aliasRemovalMajor:23}),Object.freeze({origin:"lyra-v22",fromMajor:22,toMajor:23,aliasRemovalMajor:24}),Object.freeze({origin:"lyra-v25",fromMajor:25,toMajor:26,aliasRemovalMajor:28})]),LYRA_RENAME_ORIGINS=Object.freeze(LYRA_RENAME_PROFILES.map(profile=>profile.origin)),RENAME_KINDS=Object.freeze(["attribute","property","event","part","css-property","slot"]),REVIEW_KINDS=Object.freeze(["component","attribute","property","event","slot","part","css-property","css-state","method"]),EXPOSURE_KINDS=Object.freeze(["event","part","css-property"]),SURFACE_SECTIONS=Object.freeze({attribute:"attributes",property:"properties",event:"events",part:"parts","css-property":"cssProperties",slot:"slots","css-state":"cssStates",method:"methods"}),TAG_PATTERN=/^lr-[a-z0-9]+(?:-[a-z0-9]+)*$/,ELEMENT_PATTERN=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,JS_IDENTIFIER_PATTERN=/^[A-Za-z_$][\w$]*$/,VERSION_PATTERN=/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/,NAME_PATTERNS=Object.freeze({component:TAG_PATTERN,attribute:/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,property:JS_IDENTIFIER_PATTERN,method:JS_IDENTIFIER_PATTERN,event:/^lr-[a-z0-9]+(?:-[a-z0-9]+)*$/,part:/^[A-Za-z0-9_-]+$/,slot:/^(?:[A-Za-z0-9_-]+)?$/,"css-property":/^--[A-Za-z0-9_-]+$/,"css-state":/^[a-z][a-z0-9-]*$/}),MODULE_REVIEW_KINDS=["entry-point","stylesheet","function","type","constant","class","window-event","root-attribute"],MODULE_PATH_PATTERN=/^\.\/[A-Za-z0-9_./-]+\.(?:js|css)$/,moduleReviewKey=entry=>[entry.kind,entry.module??"",entry.name].join("\0"),PROFILE_LIST_KEYS=["renames","defaults","detailChanges","detailFields","propertyChanges","retiredEvents","reviews","slotContent","moduleReviews"],AUTHORED_PROFILE_KEYS=["origin","fromMajor","toMajor","aliasRemovalMajor",...PROFILE_LIST_KEYS],PROJECTED_PROFILE_KEYS=[...AUTHORED_PROFILE_KEYS,"exposure"];function isPlainObject(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)}function unknownKeys(value,allowed){return Object.keys(value).filter(key=>!allowed.includes(key))}function compareText(left,right){return left<right?-1:left>right?1:0}function parseVersion(version){const match=VERSION_PATTERN.exec(String(version??""));return match?match.slice(1,4).map(Number):null}function compareVersions(left,right){const a=parseVersion(left),b=parseVersion(right);if(!a||!b)return null;for(let index=0;index<3;index+=1)if(a[index]!==b[index])return a[index]-b[index];return 0}function majorOf(version){return parseVersion(version)?.[0]??null}function emptyRenameLedger(){return{schemaVersion:1,profiles:LYRA_RENAME_PROFILES.map(header=>({...header,...Object.fromEntries(PROFILE_LIST_KEYS.filter(list=>list!=="detailFields").map(list=>[list,[]]))}))}}function emptyRenameProjection(){return{schemaVersion:1,profiles:emptyRenameLedger().profiles.map(profile=>({...profile,exposure:Object.fromEntries(EXPOSURE_KINDS.map(kind=>[kind,{}]))}))}}function entryLabel(origin,list,entry){return list==="moduleReviews"?`${origin}: module review ${entry?.kind} ${entry?.module??""} ${entry?.name}`:list==="renames"?`${origin}: rename ${entry?.tag} ${entry?.kind} ${entry?.from}`:list==="defaults"?`${origin}: default ${entry?.tag} ${entry?.attribute}`:list==="retiredEvents"?`${origin}: retired event ${entry?.tag} ${entry?.event}`:list==="detailChanges"?`${origin}: detail change ${entry?.tag} ${entry?.event}`:list==="detailFields"?`${origin}: detail field ${entry?.tag} ${entry?.event} ${entry?.detailType}.${entry?.field}`:list==="propertyChanges"?`${origin}: property change ${entry?.tag} ${entry?.property}`:list==="slotContent"?`${origin}: slot content ${entry?.tag} ${JSON.stringify(entry?.slot??null)}`:`${origin}: review ${entry?.tag} ${entry?.kind} ${JSON.stringify(entry?.name??null)}`}function sortKey(list,entry){return list==="moduleReviews"?moduleReviewKey(entry):list==="renames"?[entry.tag,entry.kind,entry.from].join("\0"):list==="defaults"?[entry.tag,entry.attribute].join("\0"):list==="detailChanges"||list==="retiredEvents"?[entry.tag,entry.event].join("\0"):list==="detailFields"?[entry.tag,entry.event,entry.module,entry.detailType,entry.field].join("\0"):list==="propertyChanges"?[entry.tag,entry.property].join("\0"):list==="slotContent"?[entry.tag,entry.slot].join("\0"):[entry.tag,entry.kind,entry.name].join("\0")}function validateName(findings,label,kind,field,value){return typeof value!="string"||!NAME_PATTERNS[kind]?.test(value)?(findings.push(`${label}: ${field} must be a valid ${kind} name, got ${JSON.stringify(value)}`),!1):!0}function validateProjectedSince(findings,label,entry,projected){projected&&entry.since!==UNRELEASED_VERSION&&!parseVersion(entry.since)&&findings.push(`${label}: since must be a version or ${JSON.stringify(UNRELEASED_VERSION)}`)}function validateRemovedIn(findings,label,entry){Object.hasOwn(entry,"removedIn")&&(!parseVersion(entry.removedIn)||compareVersions(entry.removedIn,entry.removalNotBefore)<0)&&findings.push(`${label}: removedIn must be a version at or after removalNotBefore`)}function validateModuleReviewEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["kind","module","name",...projected?["replacement","since","removalNotBefore","removedIn"]:[]]);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),MODULE_REVIEW_KINDS.includes(entry.kind)||findings.push(`${label}: unsupported module review kind ${entry.kind}`),entry.kind==="entry-point"||entry.kind==="stylesheet")Object.hasOwn(entry,"module")&&findings.push(`${label}: path reviews use name, not module`),typeof entry.name!="string"||!MODULE_PATH_PATTERN.test(entry.name)||entry.name.includes("..")?findings.push(`${label}: name must be a package subpath`):entry.name.endsWith(".css")!==(entry.kind==="stylesheet")&&findings.push(`${label}: stylesheet reviews must name CSS; entry-point reviews must name JavaScript`);else{entry.module!=="."&&(typeof entry.module!="string"||!MODULE_PATH_PATTERN.test(entry.module)||!entry.module.endsWith(".js")||entry.module.includes(".."))&&findings.push(`${label}: module must be a JavaScript package subpath`);const pattern=entry.kind==="window-event"?NAME_PATTERNS.event:entry.kind==="root-attribute"?/^data-lr-[a-z0-9-]+$/:JS_IDENTIFIER_PATTERN;(typeof entry.name!="string"||!pattern.test(entry.name))&&findings.push(`${label}: invalid module review name`)}projected&&((typeof entry.replacement!="string"||!entry.replacement.trim())&&findings.push(`${label}: replacement text missing`),parseVersion(entry.removalNotBefore)||findings.push(`${label}: removalNotBefore must be a version`),validateRemovedIn(findings,label,entry)),validateProjectedSince(findings,label,entry,projected)}function validateRenameEntry(findings,label,entry,projected){const allowed=["tag","kind","from","to","polarity",...projected?["since","reflects"]:[]],unknown=unknownKeys(entry,allowed);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),!RENAME_KINDS.includes(entry.kind)){findings.push(`${label}: kind must be one of ${RENAME_KINDS.join(", ")}`);return}const validFrom=validateName(findings,label,entry.kind,"from",entry.from),validTo=validateName(findings,label,entry.kind,"to",entry.to);validFrom&&validTo&&entry.from===entry.to&&findings.push(`${label}: from and to must differ`),entry.kind==="slot"&&(entry.from===""||entry.to==="")&&findings.push(`${label}: the default slot can be reviewed but not renamed`),Object.hasOwn(entry,"polarity")&&(entry.polarity!=="inverted"&&findings.push(`${label}: polarity may only be "inverted"`),entry.kind!=="attribute"&&entry.kind!=="property"&&findings.push(`${label}: only attribute and property renames can invert polarity`)),validateProjectedSince(findings,label,entry,projected),projected&&Object.hasOwn(entry,"reflects")!==(entry.kind==="attribute")&&findings.push(`${label}: reflects is recorded for attribute renames only`),projected&&entry.kind==="attribute"&&typeof entry.reflects!="boolean"&&findings.push(`${label}: reflects must be a boolean`)}function validateDefaultEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","attribute","value",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"attribute","attribute",entry.attribute),Object.hasOwn(entry,"value")?typeof entry.value!="string"&&entry.value!==!0&&!(typeof entry.value=="number"&&Number.isFinite(entry.value))&&findings.push(`${label}: value must be a string, a finite number, or true (presence)`):findings.push(`${label}: needs a value`),validateProjectedSince(findings,label,entry,projected)}function validateSummary(findings,label,summary){(typeof summary!="string"||summary.trim().length<16||/\n/.test(summary))&&findings.push(`${label}: summary must be a single-line description of the change`)}function validateDetailEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","event","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"event","event",entry.event),validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validateDetailFieldEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","event","module","detailType","field","relation","replacement","role","notice","removalNotBefore","observedIn","removedIn"]);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"event","event",entry.event),(typeof entry.module!="string"||!/^(?:layout|conversation)\/[a-z0-9-]+\/[a-z0-9-]+(?:\.class|-shared)\.ts$/u.test(entry.module))&&findings.push(`${label}: module must be a canonical layout or conversation detail source path`),(typeof entry.detailType!="string"||!JS_IDENTIFIER_PATTERN.test(entry.detailType))&&findings.push(`${label}: detailType must be an exported type name`),(typeof entry.field!="string"||!JS_IDENTIFIER_PATTERN.test(entry.field))&&findings.push(`${label}: field must be a property name`),["equal","inverse"].includes(entry.relation)||findings.push(`${label}: relation must be equal or inverse`),entry.replacement!=="expanded"&&findings.push(`${label}: replacement must be expanded`),(!["request","settled"].includes(entry.role)||typeof entry.event!="string"||entry.role==="request"!==entry.event.endsWith("-request"))&&findings.push(`${label}: role must match whether the event is a request event`),(typeof entry.notice!="string"||!/^\/\*\*[\s\S]*@deprecated\b[\s\S]*\*\/$/u.test(entry.notice))&&findings.push(`${label}: notice must preserve the exact deprecation JSDoc`),entry.removalNotBefore!=="23.0.0"&&findings.push(`${label}: removalNotBefore must preserve the declared 23.0.0 floor`),entry.observedIn!=="22.0.0"&&findings.push(`${label}: observedIn must name the earliest verified packed observation, 22.0.0`),projected&&typeof entry.observedIn=="string"&&!parseVersion(entry.observedIn)&&findings.push(`${label}: observedIn must be a semantic version`),entry.removedIn!==void 0&&entry.removedIn!=="24.0.0"&&findings.push(`${label}: removedIn requires the separately authorized actual 24.0.0 retirement`),entry.removedIn!==void 0){const removal=parseVersion(entry.removedIn),floor=parseVersion(entry.removalNotBefore),observed=parseVersion(entry.observedIn);(!removal||!floor||!observed||removal[0]<floor[0]+1||removal[0]<observed[0]+2)&&findings.push(`${label}: removedIn must clear the declared floor and a full intervening published major`)}}function validateRetiredEventEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","event","replacement","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"event","event",entry.event),validateName(findings,label,"event","replacement",entry.replacement),entry.event===entry.replacement&&findings.push(`${label}: replacement must differ from the retired event`),validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validatePropertyChangeEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","property","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"property","property",entry.property),validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validateSlotContentEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","slot","report","allow","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"slot","slot",entry.slot);const lists=["report","allow"].filter(key=>Object.hasOwn(entry,key));if(lists.length!==1)findings.push(`${label}: needs exactly one of report (elements to report) or allow (the only elements kept)`);else{const elements=entry[lists[0]];(!Array.isArray(elements)||!elements.length||!elements.every(element=>typeof element=="string"&&ELEMENT_PATTERN.test(element))||JSON.stringify(elements)!==JSON.stringify([...new Set(elements)].sort(compareText)))&&findings.push(`${label}: ${lists[0]} must be a sorted, unique list of lowercase element names`)}validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validateReviewEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,projected?["tag","kind","name","replacement","removalNotBefore","since","removedIn"]:["tag","kind","name"]);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),!REVIEW_KINDS.includes(entry.kind)){findings.push(`${label}: kind must be one of ${REVIEW_KINDS.join(", ")}`);return}validateName(findings,label,entry.kind,"name",entry.name)&&entry.kind==="component"&&entry.name!==entry.tag&&findings.push(`${label}: a component review must name its own tag`),projected&&((typeof entry.replacement!="string"||!entry.replacement)&&findings.push(`${label}: replacement text missing`),majorOf(entry.removalNotBefore)===null&&findings.push(`${label}: removalNotBefore must be a version`),validateRemovedIn(findings,label,entry)),validateProjectedSince(findings,label,entry,projected)}function requiredExposure(profile){const required=new Map(EXPOSURE_KINDS.map(kind=>[kind,new Map])),need=(kind,name,tag)=>{if(!required.has(kind))return;const tags=required.get(kind).get(name)??new Set;tag&&tags.add(tag),required.get(kind).set(name,tags)};for(const entry of profile.renames??[])need(entry.kind,entry.from,entry.tag),need(entry.kind,entry.to,entry.tag);for(const entry of profile.reviews??[])need(entry.kind,entry.name,entry.tag);for(const entry of profile.detailChanges??[])need("event",entry.event,entry.tag);for(const entry of profile.retiredEvents??[])need("event",entry.event,null),need("event",entry.replacement,entry.tag);for(const entry of profile.propertyChanges??[])need("property",entry.property,entry.tag);return required}function validateExposure(findings,profile){const origin=profile.origin;if(!isPlainObject(profile.exposure)){findings.push(`${origin}: exposure must be an object`);return}const unknown=unknownKeys(profile.exposure,EXPOSURE_KINDS);unknown.length&&findings.push(`${origin}: exposure has unknown kind(s) ${unknown.join(", ")}`);const required=requiredExposure(profile);for(const kind of EXPOSURE_KINDS){const recorded=profile.exposure[kind];if(!isPlainObject(recorded)){findings.push(`${origin}: exposure.${kind} must be an object`);continue}for(const[name,tags]of Object.entries(recorded))required.get(kind).has(name)||findings.push(`${origin}: exposure.${kind} records unreferenced name ${name}`),(!Array.isArray(tags)||!tags.every(tag=>typeof tag=="string"&&TAG_PATTERN.test(tag))||JSON.stringify(tags)!==JSON.stringify([...new Set(tags)].sort(compareText)))&&findings.push(`${origin}: exposure.${kind}.${name} must be a sorted, unique tag list`);for(const[name,tags]of required.get(kind)){if(!Object.hasOwn(recorded,name)){findings.push(`${origin}: exposure.${kind}.${name} is missing`);continue}const recordedTags=new Set(recorded[name]??[]);for(const tag of tags)recordedTags.has(tag)||findings.push(`${origin}: exposure.${kind}.${name} must include ${tag}`)}}}function validateRenameLedgerShape(ledger,{projected=!1,historicalReleaseMajor=null}={}){const findings=[];if(!isPlainObject(ledger))return["rename ledger must be an object"];const unknownTop=unknownKeys(ledger,projected?["schemaVersion","profiles"]:["$comment","schemaVersion","profiles"]);if(unknownTop.length&&findings.push(`rename ledger has unknown key(s) ${unknownTop.join(", ")}`),ledger.schemaVersion!==1&&findings.push("rename ledger schemaVersion must be 1"),!Array.isArray(ledger.profiles))return[...findings,"rename ledger profiles must be an array"];const origins=ledger.profiles.map(profile=>profile?.origin),expectedOrigins=Number.isInteger(historicalReleaseMajor)&&historicalReleaseMajor>=22&&historicalReleaseMajor<26&&JSON.stringify(origins)===JSON.stringify(LYRA_RENAME_ORIGINS.slice(0,2))?LYRA_RENAME_ORIGINS.slice(0,2):LYRA_RENAME_ORIGINS;JSON.stringify(origins)!==JSON.stringify(expectedOrigins)&&findings.push(`rename ledger profiles must be exactly ${expectedOrigins.join(", ")} in that order`);for(const profile of ledger.profiles){if(!isPlainObject(profile)){findings.push("rename ledger profiles must be objects");continue}const origin=String(profile.origin),unknown=unknownKeys(profile,projected?PROJECTED_PROFILE_KEYS:AUTHORED_PROFILE_KEYS);unknown.length&&findings.push(`${origin}: unknown key(s) ${unknown.join(", ")}`);const header=LYRA_RENAME_PROFILES.find(candidate=>candidate.origin===profile.origin);if(header)for(const field of["fromMajor","toMajor","aliasRemovalMajor"])profile[field]!==header[field]&&findings.push(`${origin}: ${field} must be ${header[field]}`);for(const list of PROFILE_LIST_KEYS){if(["propertyChanges","retiredEvents","detailFields"].includes(list)&&profile[list]===void 0)continue;if(!Array.isArray(profile[list])){findings.push(`${origin}: ${list} must be an array`);continue}const seen=new Set,keys=[];for(const entry of profile[list]){const label=entryLabel(origin,list,entry);if(!isPlainObject(entry)){findings.push(`${origin}: ${list} entries must be objects`);continue}list!=="moduleReviews"&&(typeof entry.tag!="string"||!TAG_PATTERN.test(entry.tag))&&findings.push(`${label}: tag must be an lr-* element name`),list==="moduleReviews"?(validateModuleReviewEntry(findings,label,entry,projected),projected&&majorOf(entry.removalNotBefore)!==profile.aliasRemovalMajor&&findings.push(`${label}: removalNotBefore must match the profile's aliasRemovalMajor`)):list==="renames"?validateRenameEntry(findings,label,entry,projected):list==="defaults"?validateDefaultEntry(findings,label,entry,projected):list==="detailChanges"?validateDetailEntry(findings,label,entry,projected):list==="detailFields"?validateDetailFieldEntry(findings,label,entry,projected):list==="retiredEvents"?(validateRetiredEventEntry(findings,label,entry,projected),projected&&entry.since!==`${profile.toMajor}.0.0`&&findings.push(`${label}: since must match the target major release`)):list==="propertyChanges"?validatePropertyChangeEntry(findings,label,entry,projected):list==="slotContent"?validateSlotContentEntry(findings,label,entry,projected):validateReviewEntry(findings,label,entry,projected);const key=sortKey(list,entry);seen.has(key)&&findings.push(`${label}: duplicate entry`),seen.add(key),keys.push(key)}JSON.stringify(keys)!==JSON.stringify([...keys].sort(compareText))&&findings.push(`${origin}: ${list} must be sorted by ${list==="moduleReviews"?"kind, module and name":"tag and name"}`)}if(!Array.isArray(profile.renames)||!Array.isArray(profile.reviews))continue;const sources=new Map;for(const entry of profile.renames){const names=sources.get(entry.kind)??new Set;names.add(entry.from),sources.set(entry.kind,names)}for(const entry of profile.renames)sources.get(entry.kind)?.has(entry.to)&&findings.push(`${entryLabel(origin,"renames",entry)}: target ${entry.to} is itself renamed; rename directly to the final name`);const renamed=new Set(profile.renames.map(entry=>`${entry.tag}\0${entry.kind}\0${entry.from}`));for(const entry of profile.reviews)renamed.has(`${entry.tag}\0${entry.kind}\0${entry.name}`)&&findings.push(`${entryLabel(origin,"reviews",entry)}: a member is either renamed or reviewed, not both`);projected&&validateExposure(findings,profile)}if(ledger.profiles.length>=2){const historicalFields=ledger.profiles[0]?.detailFields,nextFields=ledger.profiles[1]?.detailFields;(Array.isArray(historicalFields)||Array.isArray(nextFields))&&JSON.stringify(historicalFields??[])!==JSON.stringify(nextFields??[])&&findings.push("lyra-v21 and lyra-v22 detailFields must preserve the same verified field exposures")}return findings}function componentMap(inventory){return new Map((inventory?.components??[]).map(component=>[component.tag,component]))}function surfaceEntry(component,kind,name){return(component?.surface?.[SURFACE_SECTIONS[kind]]??[]).find(entry=>entry.name===name)??null}function hasCurrentSuccessor(component,kind,name){const seen=new Set;for(;;){const key=`${kind}\0${name}`;if(seen.has(key))return!1;seen.add(key);const member=surfaceEntry(component,kind,name);if(!member)return!1;if(!member.deprecated)return!0;const replacement=deprecationRecordFor(component,kind,name)?.replacement;if(!replacement||replacement.kind==="component"||replacement.kind==="host-css-property")return!1;kind=replacement.kind,name=replacement.name}}function deprecationRecords(component){const records=[...component?.maturity?.deprecations??[]],componentRecord=component?.maturity?.deprecated;return isPlainObject(componentRecord)&&!records.some(record=>record.kind==="component")&&records.push(componentRecord),records}function deprecationRecordFor(component,kind,name){const records=deprecationRecords(component);if(kind==="component")return records.find(record=>record.kind==="component")??null;const direct=records.find(record=>record.kind===kind&&record.name===name);return direct||kind!=="attribute"?direct??null:records.find(record=>record.kind==="property"&&record.attribute===name)??null}function historicalMember(context,tag,kind,name){const key=JSON.stringify(["member",tag,kind,name]);return context?.records?.[key]??context?.records?.[context?.aliases?.[key]]??null}function historicalSourceComponent(context,tag,record=null){const historical=record??historicalMember(context,tag,"component",tag);return historical?.state!=="retired"?null:historical.sourceComponent??context?.sourceComponents?.[tag]??null}function historicalExport(context,entry){return context?.records?.[JSON.stringify(["export",entry.kind,entry.module??null,entry.name])]??null}function ownerFor(components,context,tag){const current=components.get(tag);return current||historicalSourceComponent(context,tag)}function policyFor(component,context,tag,kind,name){return deprecationRecordFor(component,kind,name)??historicalMember(context,tag,kind,name)?.policy??null}function replacementOwner(components,context,tag,kind,name){const historical=historicalMember(context,tag,kind,name);return components.get(historical?.state==="retired"?historical.replacementOwner:tag)}function replacementMatches(component,kind,record,to){const replacement=record?.replacement;return isPlainObject(replacement)?replacement.kind===kind&&replacement.name===to?!0:kind==="attribute"&&replacement.kind==="property"?surfaceEntry(component,"property",replacement.name)?.attribute===to:!1:!1}function isBooleanMember(entry){return String(entry?.type??"").split("|").map(part=>part.trim()).includes("boolean")}function exposingTags(inventory,kind,name){return(inventory?.components??[]).filter(component=>surfaceEntry(component,kind,name)).map(component=>component.tag).sort(compareText)}const UNMIRRORED_CLASSIFICATIONS=new Set(["conceptual-only","unsupported"]);function mirroredMembers(inventory){const upstreamComponents=new Map;for(const ecosystem of Object.values(inventory?.upstreams??{}))for(const component of ecosystem?.components??[])upstreamComponents.set(component.tag,component);const mirrored=new Map;for(const mapping of inventory?.mappings??[]){if(!mapping?.targetTag||UNMIRRORED_CLASSIFICATIONS.has(mapping.classification))continue;const upstream=upstreamComponents.get(mapping.upstreamTag);for(const[kind,section]of Object.entries(SURFACE_SECTIONS)){const rewrites=mapping.rewrites?.[section]??[],renamedAway=new Set(rewrites.map(rule=>rule?.from)),names=[...rewrites.map(rule=>rule?.to).filter(name=>typeof name=="string"),...(upstream?.surface?.[section]??[]).map(entry=>entry.name).filter(name=>!renamedAway.has(name))];for(const name of names){const key=`${mapping.targetTag}\0${kind}\0${name}`;mirrored.has(key)||mirrored.set(key,mapping.upstreamTag)}}}return mirrored}function validateRenameLedger(ledger,{inventory,exportDeprecations=[],requireCoverage=!1,sharedTokens=null,compatibilityContext=null,historicalReleaseMajor=null}){const findings=validateRenameLedgerShape(ledger,{historicalReleaseMajor});if(findings.length)return findings;const components=componentMap(inventory);if(!Array.isArray(exportDeprecations))return["exportDeprecations must be an array"];if(!exportDeprecations.every(isPlainObject))return["exportDeprecations entries must be objects"];const moduleRecords=new Map(exportDeprecations.map(record=>[moduleReviewKey(record),record]));moduleRecords.size!==exportDeprecations.length&&findings.push("exportDeprecations contains duplicate module records");const mirrored=mirroredMembers(inventory),mirrorOf=(tag,kind,name)=>mirrored.get(`${tag}\0${kind}\0${name}`)??null;for(const profile of ledger.profiles){const origin=profile.origin,covered=new Set,release=`${profile.toMajor}.0.0`,removalMajorMatches=record=>majorOf(record?.removalNotBefore)===profile.aliasRemovalMajor,checkRecordWindow=(label,record)=>{if(removalMajorMatches(record)||findings.push(`${label}: its deprecation record must set removalNotBefore to ${profile.aliasRemovalMajor}.0.0`),record?.since===UNRELEASED_VERSION)return;const since=compareVersions(record?.since,release);(since===null||since>0)&&findings.push(`${label}: its deprecation record must start no later than ${release} (since ${JSON.stringify(record?.since)})`)},checkLyraOnly=(label,tag,kind,name)=>{const upstream=mirrorOf(tag,kind,name);upstream&&findings.push(`${label}: ${name} mirrors ${upstream}; mirrored names never change`)},checkSharedToken=(label,kind,name)=>{kind==="css-property"&&sharedTokens?.has(name)&&findings.push(`${label}: ${name} is a canonical design token, not a component-owned custom property`)},presenceDefaults=new Set(ledger.profiles.filter(candidate=>candidate.toMajor<=profile.toMajor).flatMap(candidate=>candidate.defaults).filter(entry=>entry.value===!0).map(entry=>`${entry.tag}\0${entry.attribute}`)),inversionCompanions=new Set;for(const entry of profile.detailFields??[]){const label=entryLabel(origin,"detailFields",entry),component=ownerFor(components,compatibilityContext,entry.tag);component?surfaceEntry(component,"event",entry.event)||findings.push(`${label}: the event is not dispatched by ${entry.tag}`):findings.push(`${label}: component is not in the inventory`)}for(const entry of profile.renames){const label=entryLabel(origin,"renames",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}covered.add(`${entry.tag}\0${entry.kind}\0${entry.from}`),checkLyraOnly(label,entry.tag,entry.kind,entry.from),checkSharedToken(label,entry.kind,entry.from),checkSharedToken(label,entry.kind,entry.to);const historical=historicalMember(compatibilityContext,entry.tag,entry.kind,entry.from),retired=historical?.state==="retired",from=surfaceEntry(retired?historicalSourceComponent(compatibilityContext,entry.tag,historical):component,entry.kind,entry.from),targetOwner=replacementOwner(components,compatibilityContext,entry.tag,entry.kind,entry.from),to=surfaceEntry(targetOwner,entry.kind,entry.to);from?from.deprecated||findings.push(`${label}: the alias ${entry.from} is not marked deprecated in the manifest`):findings.push(`${label}: the deprecated alias ${entry.from} is not on the public surface`),to?to.deprecated&&!(retired&&hasCurrentSuccessor(targetOwner,entry.kind,entry.to))&&findings.push(`${label}: the canonical name ${entry.to} is itself deprecated`):findings.push(`${label}: the canonical name ${entry.to} is not on the public surface`);const record=policyFor(component,compatibilityContext,entry.tag,entry.kind,entry.from);if(record?(checkRecordWindow(label,record),replacementMatches(targetOwner,entry.kind,record,entry.to)||findings.push(`${label}: its deprecation record names a different replacement than ${entry.to}`)):findings.push(`${label}: no deprecation record retires ${entry.from}`),(entry.kind==="attribute"||entry.kind==="property")&&from&&to&&isBooleanMember(from)&&isBooleanMember(to)){const toAttribute=entry.kind==="attribute"?entry.to:to.attribute,preservesPresence=!!toAttribute&&presenceDefaults.has(`${entry.tag}\0${toAttribute}`);entry.polarity==="inverted"?(to.default===!0&&findings.push(`${label}: an inverted rename must target a boolean that defaults to false`),from.default!==!0&&toAttribute&&inversionCompanions.add(`${entry.tag}\0${toAttribute}`),from.default!==!0&&!preservesPresence&&findings.push(`${label}: ${entry.from} defaults to false, so the inverted rename needs a defaults entry inserting ${toAttribute??entry.to} where both are absent`)):from.default===!0&&to.default!==!0&&!preservesPresence&&findings.push(`${label}: ${entry.from} defaults to true and ${entry.to} to false; declare "polarity": "inverted" or preserve the default with a defaults entry`)}else entry.polarity==="inverted"&&from&&to&&findings.push(`${label}: an inverted rename must retire a boolean for a boolean`)}for(const entry of profile.reviews){const label=entryLabel(origin,"reviews",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}covered.add(`${entry.tag}\0${entry.kind}\0${entry.name}`),entry.kind!=="component"&&checkLyraOnly(label,entry.tag,entry.kind,entry.name),checkSharedToken(label,entry.kind,entry.name);const record=policyFor(component,compatibilityContext,entry.tag,entry.kind,entry.name);record?checkRecordWindow(label,record):findings.push(`${label}: no deprecation record retires ${JSON.stringify(entry.name)}`)}for(const entry of profile.detailChanges){const label=entryLabel(origin,"detailChanges",entry),component=ownerFor(components,compatibilityContext,entry.tag);component?surfaceEntry(component,"event",entry.event)?checkLyraOnly(label,entry.tag,"event",entry.event):findings.push(`${label}: the event is not dispatched by ${entry.tag}`):findings.push(`${label}: component is not in the inventory`)}for(const entry of profile.retiredEvents??[]){const label=entryLabel(origin,"retiredEvents",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component)findings.push(`${label}: component is not in the inventory`);else{surfaceEntry(component,"event",entry.event)&&findings.push(`${label}: retired event is still dispatched by ${entry.tag}`),deprecationRecordFor(component,"event",entry.event)&&findings.push(`${label}: a retired event must not keep a current deprecation record`);const target=surfaceEntry(component,"event",entry.replacement);(!target||target.deprecated)&&findings.push(`${label}: replacement is not a current event on ${entry.tag}`),checkLyraOnly(label,entry.tag,"event",entry.event)}}for(const entry of profile.propertyChanges??[]){const label=entryLabel(origin,"propertyChanges",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component)findings.push(`${label}: component is not in the inventory`);else{const historical=historicalMember(compatibilityContext,entry.tag,"property",entry.property),propertyOwner=historical?.state==="retired"?historical.sourceComponent??historicalSourceComponent(compatibilityContext,entry.tag,historical):component;surfaceEntry(propertyOwner,"property",entry.property)?checkLyraOnly(label,entry.tag,"property",entry.property):findings.push(`${label}: the property is not on the public surface`)}}for(const entry of profile.slotContent){const label=entryLabel(origin,"slotContent",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}surfaceEntry(component,"slot",entry.slot)||findings.push(`${label}: the slot is not on the public surface`);const record=policyFor(component,compatibilityContext,entry.tag,"slot-content",entry.slot);record&&(covered.add(`${entry.tag}\0slot-content\0${entry.slot}`),Array.isArray(record.permittedContent)&&JSON.stringify(entry.allow??null)!==JSON.stringify(record.permittedContent)&&findings.push(`${label}: its deprecation record permits ${record.permittedContent.join(", ")}; allow must list exactly those elements`))}for(const entry of profile.defaults){const label=entryLabel(origin,"defaults",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}const attribute=surfaceEntry(component,"attribute",entry.attribute);if(!attribute){findings.push(`${label}: the attribute is not on the public surface`);continue}inversionCompanions.has(`${entry.tag}\0${entry.attribute}`)||checkLyraOnly(label,entry.tag,"attribute",entry.attribute),entry.value===!0&&!isBooleanMember(attribute)&&findings.push(`${label}: presence insertion requires a boolean attribute`),attribute.hasDefault&&String(attribute.default)===String(entry.value)&&findings.push(`${label}: the value equals the current default, so there is nothing to preserve`)}const coveredModules=new Set;for(const entry of profile.moduleReviews){const label=entryLabel(origin,"moduleReviews",entry),key=moduleReviewKey(entry);coveredModules.add(key);const record=moduleRecords.get(key)??historicalExport(compatibilityContext,entry)?.policy;record?(checkRecordWindow(label,record),!record.replacement?.usage&&!record.replacement?.name&&findings.push(`${label}: canonical replacement is missing`)):findings.push(`${label}: no canonical exportDeprecations record`)}if(!requireCoverage)continue;for(const record of[...exportDeprecations,...Object.values(compatibilityContext?.records??{}).filter(entry=>entry.state==="retired"&&entry.key.scope==="export").map(entry=>entry.policy)])removalMajorMatches(record)&&!coveredModules.has(moduleReviewKey(record))&&findings.push(`${origin}: ${record.kind} ${record.module??""} ${record.name} is removed in ${profile.aliasRemovalMajor}.0.0 but has no moduleReviews entry`);const coverageOwners=new Map((inventory?.components??[]).map(component=>[component.tag,deprecationRecords(component)]));for(const entry of Object.values(compatibilityContext?.records??{}))entry.state!=="retired"||entry.key.scope!=="member"||coverageOwners.set(entry.key.tag,[...coverageOwners.get(entry.key.tag)??[],entry.policy]);for(const[tag,records]of coverageOwners){const component={tag};for(const record of records){if(!removalMajorMatches(record))continue;const keys=[[record.kind,record.kind==="component"?component.tag:record.name]];record.kind==="property"&&record.attribute&&keys.push(["attribute",record.attribute]);for(const[kind,name]of keys)kind!=="component"&&mirrorOf(component.tag,kind,name)||covered.has(`${component.tag}\0${kind}\0${name}`)||findings.push(`${origin}: ${component.tag} ${kind} ${JSON.stringify(name)} is removed in ${profile.aliasRemovalMajor}.0.0 but has no ${kind==="slot-content"?"slotContent":"rename or review"} entry`)}}}return[...new Set(findings)]}function projectRenameLedger(ledger,inventory,{exportDeprecations=[],compatibilityContext=null,historicalReleaseMajor=null}={}){const findings=validateRenameLedger(ledger,{inventory,exportDeprecations,compatibilityContext,historicalReleaseMajor});if(findings.length)throw new Error(`Invalid Lyra rename ledger: ${findings.join("; ")}`);const components=componentMap(inventory),moduleRecords=new Map(exportDeprecations.map(record=>[moduleReviewKey(record),record])),projection={schemaVersion:1,profiles:ledger.profiles.map(profile=>{const release=`${profile.toMajor}.0.0`,exposure=Object.fromEntries(EXPOSURE_KINDS.map(kind=>[kind,{}]));for(const[kind,names]of requiredExposure(profile))for(const name of[...names.keys()].sort(compareText))exposure[kind][name]=[...new Set([...exposingTags(inventory,kind,name),...compatibilityContext?.exposure?.[kind]?.[name]??[]])].sort(compareText);const recordFor=(entry,kind,name)=>policyFor(components.get(entry.tag),compatibilityContext,entry.tag,kind,name);return{origin:profile.origin,fromMajor:profile.fromMajor,toMajor:profile.toMajor,aliasRemovalMajor:profile.aliasRemovalMajor,renames:profile.renames.map(entry=>{const target=surfaceEntry(replacementOwner(components,compatibilityContext,entry.tag,entry.kind,entry.from),entry.kind,entry.to),attribute=entry.kind==="attribute"?entry.to:target?.attribute,preservesDefault=entry.polarity==="inverted"&&profile.defaults.some(rule=>rule.tag===entry.tag&&rule.attribute===attribute),since=recordFor(entry,entry.kind,entry.from).since,beforeRelease=since===UNRELEASED_VERSION||compareVersions(since,release)<0;return{...structuredClone(entry),since:preservesDefault&&beforeRelease?release:since,...entry.kind==="attribute"?{reflects:!!target?.reflects}:{}}}),defaults:profile.defaults.map(entry=>({...structuredClone(entry),since:release})),retiredEvents:(profile.retiredEvents??[]).map(entry=>({...structuredClone(entry),since:release})),detailChanges:profile.detailChanges.map(entry=>({...structuredClone(entry),since:release})),...Array.isArray(profile.detailFields)?{detailFields:profile.detailFields.map(entry=>structuredClone(entry))}:{},propertyChanges:(profile.propertyChanges??[]).map(entry=>({...structuredClone(entry),since:release})),reviews:profile.reviews.map(entry=>{const record=recordFor(entry,entry.kind,entry.name),retired=historicalMember(compatibilityContext,entry.tag,entry.kind,entry.name);return{...structuredClone(entry),replacement:String(record.replacement?.usage||record.replacement?.name),...retired?.state==="retired"?{removedIn:retired.removedIn}:{},removalNotBefore:record.removalNotBefore,since:record.since}}),slotContent:profile.slotContent.map(entry=>({...structuredClone(entry),since:release})),moduleReviews:profile.moduleReviews.map(entry=>{const retired=historicalExport(compatibilityContext,entry),record=moduleRecords.get(moduleReviewKey(entry))??retired?.policy;return{...structuredClone(entry),replacement:String(record.replacement.usage||record.replacement.name),...retired?.state==="retired"?{removedIn:retired.removedIn}:{},since:record.since,removalNotBefore:record.removalNotBefore}}),exposure}})},shapeFindings=validateRenameLedgerShape(projection,{projected:!0,historicalReleaseMajor});if(shapeFindings.length)throw new Error(`Invalid Lyra rename projection: ${shapeFindings.join("; ")}`);return projection}function indexBy(entries,keyOf){const index=new Map;for(const entry of entries){const key=keyOf(entry),list=index.get(key)??[];list.push(entry),index.set(key,list)}return index}const ownerKey=(tag,kind,name)=>`${tag}\0${kind}\0${name}`,nameKey=(kind,name)=>`${kind}\0${name}`;function createRenameProfiles(projection,{lyraVersion=null}={}){const findings=validateRenameLedgerShape(projection,{projected:!0});if(findings.length)throw new Error(`Invalid Lyra rename projection: ${findings.join("; ")}`);if(lyraVersion!==null&&!parseVersion(lyraVersion))throw new Error(`Invalid Lyra version: ${lyraVersion}`);const profiles=new Map,availableAcrossProfiles=entry=>lyraVersion===null||entry.since!==UNRELEASED_VERSION&&compareVersions(entry.since,lyraVersion)<=0,allRenames=projection.profiles.flatMap(profile=>profile.renames).filter(availableAcrossProfiles),allDefaults=projection.profiles.flatMap(profile=>profile.defaults).filter(availableAcrossProfiles);for(const full of projection.profiles){const skipped=[],available=list=>(full[list]??[]).filter(entry=>{if(lyraVersion===null)return!0;const availableFrom=list==="detailFields"?entry.observedIn:entry.since;return availableFrom!==UNRELEASED_VERSION&&compareVersions(availableFrom,lyraVersion)<=0?!0:(skipped.push({list,...entry}),!1)}).map(entry=>{if(!entry.removedIn||lyraVersion===null||compareVersions(lyraVersion,entry.removedIn)>=0)return entry;const{removedIn,...beforeRemoval}=entry;return beforeRemoval}),data={...full,...Object.fromEntries(PROFILE_LIST_KEYS.map(list=>[list,available(list)]))},renamesByOwner=new Map(data.renames.map(entry=>[ownerKey(entry.tag,entry.kind,entry.from),entry])),renamesByName=indexBy(data.renames,entry=>nameKey(entry.kind,entry.from)),renamesByTarget=indexBy(data.renames,entry=>nameKey(entry.kind,entry.to)),reviewsByOwner=new Map(data.reviews.map(entry=>[ownerKey(entry.tag,entry.kind,entry.name),entry])),reviewsByName=indexBy(data.reviews,entry=>nameKey(entry.kind,entry.name)),detailsByOwner=new Map(data.detailChanges.map(entry=>[ownerKey(entry.tag,"event",entry.event),entry])),detailsByName=indexBy(data.detailChanges,entry=>entry.event),fieldsByOwnerEvent=new Map((data.detailFields??[]).map(entry=>[ownerKey(entry.tag,"event",entry.event),entry])),fieldsByEvent=indexBy(data.detailFields??[],entry=>entry.event),retiredByOwner=new Map(data.retiredEvents.map(entry=>[ownerKey(entry.tag,"event",entry.event),entry])),retiredByName=indexBy(data.retiredEvents,entry=>entry.event),propertiesByOwner=new Map(data.propertyChanges.map(entry=>[ownerKey(entry.tag,"property",entry.property),entry])),exposure=new Map(EXPOSURE_KINDS.map(kind=>[kind,new Map(Object.entries(data.exposure[kind]).map(([name,tags2])=>[name,new Set(tags2)]))])),defaultsByTag=indexBy(data.defaults,entry=>entry.tag),slotContentByTag=indexBy(data.slotContent,entry=>entry.tag),tags=new Set([...data.renames,...data.reviews,...data.detailChanges,...data.detailFields??[],...data.retiredEvents,...data.propertyChanges,...data.defaults,...data.slotContent].map(entry=>entry.tag)),renamesNamed=(kind,name)=>renamesByName.get(nameKey(kind,name))??[],exposersOf=(kind,name)=>exposure.get(kind)?.get(name)??new Set,movers=(kind,from,to)=>new Set(renamesNamed(kind,from).filter(entry=>entry.to===to&&!entry.polarity).map(entry=>entry.tag)),subset=(left,right)=>[...left].every(tag=>right.has(tag));profiles.set(data.origin,{origin:data.origin,fromMajor:data.fromMajor,toMajor:data.toMajor,aliasRemovalMajor:data.aliasRemovalMajor,data,skipped,tags,isEmpty:tags.size===0&&data.moduleReviews.length===0,renameFor:(tag,kind,name)=>renamesByOwner.get(ownerKey(tag,kind,name))??null,renamesNamed,renamesOnto:(kind,name)=>renamesByTarget.get(nameKey(kind,name))??[],reviewFor:(tag,kind,name)=>reviewsByOwner.get(ownerKey(tag,kind,name))??null,reviewsNamed:(kind,name)=>reviewsByName.get(nameKey(kind,name))??[],detailFor:(tag,event)=>detailsByOwner.get(ownerKey(tag,"event",event))??null,detailsNamed:event=>detailsByName.get(event)??[],detailFieldFor:(tag,event)=>fieldsByOwnerEvent.get(ownerKey(tag,"event",event))??null,detailFieldsNamed:event=>fieldsByEvent.get(event)??[],retiredEventFor:(tag,event)=>retiredByOwner.get(ownerKey(tag,"event",event))??null,retiredEventsNamed:event=>retiredByName.get(event)??[],propertyChangeFor:(tag,property)=>propertiesByOwner.get(ownerKey(tag,"property",property))??null,defaultsFor:tag=>defaultsByTag.get(tag)??[],preservedDefaultsFor:tag=>allDefaults.filter(entry=>entry.tag===tag),defaultAliasesFor:(tag,attribute)=>{const aliases=new Set([attribute]);for(const rename of allRenames)rename.tag!==tag||rename.kind!=="attribute"||(rename.from===attribute&&aliases.add(rename.to),rename.to===attribute&&aliases.add(rename.from));return[...aliases]},slotContentFor:tag=>slotContentByTag.get(tag)??[],exposes:(kind,name,tag)=>!!tag&&exposersOf(kind,name).has(tag),exposers:(kind,name)=>[...exposersOf(kind,name)],targetKeepers(kind,from,to){const moving=movers(kind,from,to);return[...exposersOf(kind,to)].filter(tag=>!moving.has(tag))},sourceKeepers(kind,from,to){const moving=movers(kind,from,to);return[...exposersOf(kind,from)].filter(tag=>!moving.has(tag))},isGlobal(kind,from){const entries=renamesNamed(kind,from);if(!entries.length||entries.some(entry=>entry.polarity))return!1;const targets=new Set(entries.map(entry=>entry.to));if(targets.size!==1)return!1;const[to]=targets,moving=movers(kind,from,to);return exposersOf(kind,from).size>0&&subset(exposersOf(kind,from),moving)&&subset(exposersOf(kind,to),moving)},gainedOwners(kind,name){const onto=(renamesByTarget.get(nameKey(kind,name))??[]).filter(entry=>!entry.polarity);if(!onto.length)return[];const gained=new Set(onto.map(entry=>entry.tag));return[...exposersOf(kind,name)].filter(tag=>!gained.has(tag)).length?[...gained].sort(compareText):[]}})}return profiles}export{LYRA_RENAME_ORIGINS,compareVersions,createRenameProfiles,emptyRenameLedger,emptyRenameProjection,mirroredMembers,projectRenameLedger,validateRenameLedger,validateRenameLedgerShape};
1
+ const LYRA_RENAME_LEDGER_SCHEMA_VERSION=1,UNRELEASED_VERSION="unreleased",LYRA_RENAME_PROFILES=Object.freeze([Object.freeze({origin:"lyra-v21",fromMajor:21,toMajor:22,aliasRemovalMajor:23}),Object.freeze({origin:"lyra-v22",fromMajor:22,toMajor:23,aliasRemovalMajor:24}),Object.freeze({origin:"lyra-v25",fromMajor:25,toMajor:26,aliasRemovalMajor:28}),Object.freeze({origin:"lyra-v26",fromMajor:26,toMajor:27,aliasRemovalMajor:29})]),LYRA_RENAME_ORIGINS=Object.freeze(LYRA_RENAME_PROFILES.map(profile=>profile.origin)),RENAME_KINDS=Object.freeze(["attribute","property","event","part","css-property","slot"]),REVIEW_KINDS=Object.freeze(["component","attribute","property","event","slot","part","css-property","css-state","method"]),EXPOSURE_KINDS=Object.freeze(["event","part","css-property"]),SURFACE_SECTIONS=Object.freeze({attribute:"attributes",property:"properties",event:"events",part:"parts","css-property":"cssProperties",slot:"slots","css-state":"cssStates",method:"methods"}),TAG_PATTERN=/^lr-[a-z0-9]+(?:-[a-z0-9]+)*$/,ELEMENT_PATTERN=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,JS_IDENTIFIER_PATTERN=/^[A-Za-z_$][\w$]*$/,VERSION_PATTERN=/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/,NAME_PATTERNS=Object.freeze({component:TAG_PATTERN,attribute:/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,property:JS_IDENTIFIER_PATTERN,method:JS_IDENTIFIER_PATTERN,event:/^lr-[a-z0-9]+(?:-[a-z0-9]+)*$/,part:/^[A-Za-z0-9_-]+$/,slot:/^(?:[A-Za-z0-9_-]+)?$/,"css-property":/^--[A-Za-z0-9_-]+$/,"css-state":/^[a-z][a-z0-9-]*$/}),MODULE_REVIEW_KINDS=["entry-point","stylesheet","function","type","constant","class","window-event","root-attribute"],MODULE_PATH_PATTERN=/^\.\/[A-Za-z0-9_./-]+\.(?:js|css)$/,moduleReviewKey=entry=>[entry.kind,entry.module??"",entry.name].join("\0"),PROFILE_LIST_KEYS=["renames","defaults","detailChanges","detailFields","propertyChanges","retiredEvents","reviews","slotContent","moduleReviews","globals"],OPTIONAL_PROFILE_LISTS=["propertyChanges","retiredEvents","detailFields","globals"],AUTHORED_PROFILE_KEYS=["origin","fromMajor","toMajor","aliasRemovalMajor",...PROFILE_LIST_KEYS],GLOBAL_KINDS=Object.freeze(["module","export","locale-key","css-property","part"]),PACKAGE_SPECIFIER_PATTERN=/^@aceshooting\/lyra-[a-z]+(?:\/[A-Za-z0-9_./-]*)?$/,PROJECTED_PROFILE_KEYS=[...AUTHORED_PROFILE_KEYS,"exposure"];function isPlainObject(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)}function unknownKeys(value,allowed){return Object.keys(value).filter(key=>!allowed.includes(key))}function compareText(left,right){return left<right?-1:left>right?1:0}function parseVersion(version){const match=VERSION_PATTERN.exec(String(version??""));return match?match.slice(1,4).map(Number):null}function compareVersions(left,right){const a=parseVersion(left),b=parseVersion(right);if(!a||!b)return null;for(let index=0;index<3;index+=1)if(a[index]!==b[index])return a[index]-b[index];return 0}function majorOf(version){return parseVersion(version)?.[0]??null}function emptyRenameLedger(){return{schemaVersion:1,profiles:LYRA_RENAME_PROFILES.map(header=>({...header,...Object.fromEntries(PROFILE_LIST_KEYS.filter(list=>!["detailFields","globals"].includes(list)).map(list=>[list,[]]))}))}}function emptyRenameProjection(){return{schemaVersion:1,profiles:emptyRenameLedger().profiles.map(profile=>({...profile,exposure:Object.fromEntries(EXPOSURE_KINDS.map(kind=>[kind,{}]))}))}}function entryLabel(origin,list,entry){return list==="globals"?`${origin}: global ${entry?.kind} ${entry?.from}`:list==="moduleReviews"?`${origin}: module review ${entry?.kind} ${entry?.module??""} ${entry?.name}`:list==="renames"?`${origin}: rename ${entry?.tag} ${entry?.kind} ${entry?.from}`:list==="defaults"?`${origin}: default ${entry?.tag} ${entry?.attribute}`:list==="retiredEvents"?`${origin}: retired event ${entry?.tag} ${entry?.event}`:list==="detailChanges"?`${origin}: detail change ${entry?.tag} ${entry?.event}`:list==="detailFields"?`${origin}: detail field ${entry?.tag} ${entry?.event} ${entry?.detailType}.${entry?.field}`:list==="propertyChanges"?`${origin}: property change ${entry?.tag} ${entry?.property}`:list==="slotContent"?`${origin}: slot content ${entry?.tag} ${JSON.stringify(entry?.slot??null)}`:`${origin}: review ${entry?.tag} ${entry?.kind} ${JSON.stringify(entry?.name??null)}`}function sortKey(list,entry){return list==="moduleReviews"?moduleReviewKey(entry):list==="globals"?[entry.kind,entry.from,entry.tag??""].join("\0"):list==="renames"?[entry.tag,entry.kind,entry.from].join("\0"):list==="defaults"?[entry.tag,entry.attribute].join("\0"):list==="detailChanges"||list==="retiredEvents"?[entry.tag,entry.event].join("\0"):list==="detailFields"?[entry.tag,entry.event,entry.module,entry.detailType,entry.field].join("\0"):list==="propertyChanges"?[entry.tag,entry.property].join("\0"):list==="slotContent"?[entry.tag,entry.slot].join("\0"):[entry.tag,entry.kind,entry.name].join("\0")}function validateName(findings,label,kind,field,value){return typeof value!="string"||!NAME_PATTERNS[kind]?.test(value)?(findings.push(`${label}: ${field} must be a valid ${kind} name, got ${JSON.stringify(value)}`),!1):!0}function validateProjectedSince(findings,label,entry,projected){projected&&entry.since!==UNRELEASED_VERSION&&!parseVersion(entry.since)&&findings.push(`${label}: since must be a version or ${JSON.stringify(UNRELEASED_VERSION)}`)}function validateRemovedIn(findings,label,entry){Object.hasOwn(entry,"removedIn")&&(!parseVersion(entry.removedIn)||compareVersions(entry.removedIn,entry.removalNotBefore)<0)&&findings.push(`${label}: removedIn must be a version at or after removalNotBefore`)}function validateModuleReviewEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["kind","module","name",...projected?["replacement","since","removalNotBefore","removedIn"]:[]]);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),MODULE_REVIEW_KINDS.includes(entry.kind)||findings.push(`${label}: unsupported module review kind ${entry.kind}`),entry.kind==="entry-point"||entry.kind==="stylesheet")Object.hasOwn(entry,"module")&&findings.push(`${label}: path reviews use name, not module`),typeof entry.name!="string"||!MODULE_PATH_PATTERN.test(entry.name)||entry.name.includes("..")?findings.push(`${label}: name must be a package subpath`):entry.name.endsWith(".css")!==(entry.kind==="stylesheet")&&findings.push(`${label}: stylesheet reviews must name CSS; entry-point reviews must name JavaScript`);else{entry.module!=="."&&(typeof entry.module!="string"||!MODULE_PATH_PATTERN.test(entry.module)||!entry.module.endsWith(".js")||entry.module.includes(".."))&&findings.push(`${label}: module must be a JavaScript package subpath`);const pattern=entry.kind==="window-event"?NAME_PATTERNS.event:entry.kind==="root-attribute"?/^data-lr-[a-z0-9-]+$/:JS_IDENTIFIER_PATTERN;(typeof entry.name!="string"||!pattern.test(entry.name))&&findings.push(`${label}: invalid module review name`)}projected&&((typeof entry.replacement!="string"||!entry.replacement.trim())&&findings.push(`${label}: replacement text missing`),parseVersion(entry.removalNotBefore)||findings.push(`${label}: removalNotBefore must be a version`),validateRemovedIn(findings,label,entry)),validateProjectedSince(findings,label,entry,projected)}function validateGlobalEntry(findings,label,entry){const unknown=unknownKeys(entry,["kind","from","to","module","prefix","except","tag","summary","since"]);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),!GLOBAL_KINDS.includes(entry.kind)){findings.push(`${label}: kind must be one of ${GLOBAL_KINDS.join(", ")}`);return}(typeof entry.summary!="string"||!entry.summary.trim())&&findings.push(`${label}: summary text missing`),parseVersion(entry.since)||findings.push(`${label}: since must be a version`);const optional=entry.kind==="locale-key";if(entry.kind==="module"){const valid=value=>typeof value=="string"&&PACKAGE_SPECIFIER_PATTERN.test(value)&&!value.includes("..");if(valid(entry.from)||findings.push(`${label}: from must be an @aceshooting package specifier`),valid(entry.to)||findings.push(`${label}: to must be an @aceshooting package specifier`),valid(entry.from)&&entry.from===entry.to&&findings.push(`${label}: from and to must differ`),Object.hasOwn(entry,"module")&&findings.push(`${label}: module entries do not take a module`),Object.hasOwn(entry,"prefix")&&entry.prefix!==!0&&findings.push(`${label}: prefix may only be true`),entry.prefix===!0&&!(entry.from?.endsWith("/")&&entry.to?.endsWith("/"))&&findings.push(`${label}: a prefix entry's from and to must end with a slash`),Object.hasOwn(entry,"except")){const exceptions=entry.except;entry.prefix!==!0||!Array.isArray(exceptions)||!exceptions.length||!exceptions.every(value=>typeof value=="string"&&value.startsWith(entry.from)&&value.endsWith("/"))?findings.push(`${label}: except needs prefix and a list of slash-terminated prefixes below from`):JSON.stringify(exceptions)!==JSON.stringify([...exceptions].sort(compareText))&&findings.push(`${label}: except must be sorted`)}return}if(entry.kind==="css-property"||entry.kind==="part"){(typeof entry.to!="string"||!entry.to.trim())&&findings.push(`${label}: to must name the replacement`),(Object.hasOwn(entry,"module")||Object.hasOwn(entry,"except"))&&findings.push(`${label}: ${entry.kind} entries take no module or except`),entry.kind==="part"?((typeof entry.tag!="string"||!TAG_PATTERN.test(entry.tag))&&findings.push(`${label}: tag must be an lr-* element name`),Object.hasOwn(entry,"prefix")&&findings.push(`${label}: prefix applies to custom properties only`),validateName(findings,label,"part","from",entry.from)):(Object.hasOwn(entry,"tag")&&findings.push(`${label}: custom properties are not tag-owned`),validateName(findings,label,"css-property","from",entry.from),Object.hasOwn(entry,"prefix")&&(entry.prefix!==!0||!entry.from.endsWith("-"))&&findings.push(`${label}: a prefix needs prefix: true and a name ending in a hyphen`));return}for(const field of["prefix","except","tag"])Object.hasOwn(entry,field)&&findings.push(`${label}: ${field} applies to module, part and custom property entries only`);(typeof entry.from!="string"||!JS_IDENTIFIER_PATTERN.test(entry.from))&&findings.push(`${label}: from must be an identifier`),(typeof entry.to!="string"||!JS_IDENTIFIER_PATTERN.test(entry.to))&&findings.push(`${label}: to must be an identifier`),entry.from===entry.to&&findings.push(`${label}: from and to must differ`),entry.kind==="export"&&entry.module!=="."&&findings.push(`${label}: an export entry needs module "." (the package root)`),optional&&Object.hasOwn(entry,"module")&&findings.push(`${label}: locale keys do not take a module`)}function validateRenameEntry(findings,label,entry,projected){const allowed=["tag","kind","from","to","polarity",...projected?["since","reflects"]:[]],unknown=unknownKeys(entry,allowed);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),!RENAME_KINDS.includes(entry.kind)){findings.push(`${label}: kind must be one of ${RENAME_KINDS.join(", ")}`);return}const validFrom=validateName(findings,label,entry.kind,"from",entry.from),validTo=validateName(findings,label,entry.kind,"to",entry.to);validFrom&&validTo&&entry.from===entry.to&&findings.push(`${label}: from and to must differ`),entry.kind==="slot"&&(entry.from===""||entry.to==="")&&findings.push(`${label}: the default slot can be reviewed but not renamed`),Object.hasOwn(entry,"polarity")&&(entry.polarity!=="inverted"&&findings.push(`${label}: polarity may only be "inverted"`),entry.kind!=="attribute"&&entry.kind!=="property"&&findings.push(`${label}: only attribute and property renames can invert polarity`)),validateProjectedSince(findings,label,entry,projected),projected&&Object.hasOwn(entry,"reflects")!==(entry.kind==="attribute")&&findings.push(`${label}: reflects is recorded for attribute renames only`),projected&&entry.kind==="attribute"&&typeof entry.reflects!="boolean"&&findings.push(`${label}: reflects must be a boolean`)}function validateDefaultEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","attribute","value",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"attribute","attribute",entry.attribute),Object.hasOwn(entry,"value")?typeof entry.value!="string"&&entry.value!==!0&&!(typeof entry.value=="number"&&Number.isFinite(entry.value))&&findings.push(`${label}: value must be a string, a finite number, or true (presence)`):findings.push(`${label}: needs a value`),validateProjectedSince(findings,label,entry,projected)}function validateSummary(findings,label,summary){(typeof summary!="string"||summary.trim().length<16||/\n/.test(summary))&&findings.push(`${label}: summary must be a single-line description of the change`)}function validateDetailEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","event","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"event","event",entry.event),validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validateDetailFieldEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","event","module","detailType","field","relation","replacement","role","notice","removalNotBefore","observedIn","removedIn"]);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"event","event",entry.event),(typeof entry.module!="string"||!/^(?:layout|conversation)\/[a-z0-9-]+\/[a-z0-9-]+(?:\.class|-shared)\.ts$/u.test(entry.module))&&findings.push(`${label}: module must be a canonical layout or conversation detail source path`),(typeof entry.detailType!="string"||!JS_IDENTIFIER_PATTERN.test(entry.detailType))&&findings.push(`${label}: detailType must be an exported type name`),(typeof entry.field!="string"||!JS_IDENTIFIER_PATTERN.test(entry.field))&&findings.push(`${label}: field must be a property name`),["equal","inverse"].includes(entry.relation)||findings.push(`${label}: relation must be equal or inverse`),entry.replacement!=="expanded"&&findings.push(`${label}: replacement must be expanded`),(!["request","settled"].includes(entry.role)||typeof entry.event!="string"||entry.role==="request"!==entry.event.endsWith("-request"))&&findings.push(`${label}: role must match whether the event is a request event`),(typeof entry.notice!="string"||!/^\/\*\*[\s\S]*@deprecated\b[\s\S]*\*\/$/u.test(entry.notice))&&findings.push(`${label}: notice must preserve the exact deprecation JSDoc`),entry.removalNotBefore!=="23.0.0"&&findings.push(`${label}: removalNotBefore must preserve the declared 23.0.0 floor`),entry.observedIn!=="22.0.0"&&findings.push(`${label}: observedIn must name the earliest verified packed observation, 22.0.0`),projected&&typeof entry.observedIn=="string"&&!parseVersion(entry.observedIn)&&findings.push(`${label}: observedIn must be a semantic version`),entry.removedIn!==void 0&&entry.removedIn!=="24.0.0"&&findings.push(`${label}: removedIn requires the separately authorized actual 24.0.0 retirement`),entry.removedIn!==void 0){const removal=parseVersion(entry.removedIn),floor=parseVersion(entry.removalNotBefore),observed=parseVersion(entry.observedIn);(!removal||!floor||!observed||removal[0]<floor[0]+1||removal[0]<observed[0]+2)&&findings.push(`${label}: removedIn must clear the declared floor and a full intervening published major`)}}function validateRetiredEventEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","event","replacement","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"event","event",entry.event),validateName(findings,label,"event","replacement",entry.replacement),entry.event===entry.replacement&&findings.push(`${label}: replacement must differ from the retired event`),validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validatePropertyChangeEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","property","former","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"property","property",entry.property),Object.hasOwn(entry,"former")&&validateName(findings,label,"property","former",entry.former)&&entry.former===entry.property&&findings.push(`${label}: former must differ from property`),validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validateSlotContentEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,["tag","slot","report","allow","summary",...projected?["since"]:[]]);unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),validateName(findings,label,"slot","slot",entry.slot);const lists=["report","allow"].filter(key=>Object.hasOwn(entry,key));if(lists.length!==1)findings.push(`${label}: needs exactly one of report (elements to report) or allow (the only elements kept)`);else{const elements=entry[lists[0]];(!Array.isArray(elements)||!elements.length||!elements.every(element=>typeof element=="string"&&ELEMENT_PATTERN.test(element))||JSON.stringify(elements)!==JSON.stringify([...new Set(elements)].sort(compareText)))&&findings.push(`${label}: ${lists[0]} must be a sorted, unique list of lowercase element names`)}validateSummary(findings,label,entry.summary),validateProjectedSince(findings,label,entry,projected)}function validateReviewEntry(findings,label,entry,projected){const unknown=unknownKeys(entry,projected?["tag","kind","name","replacement","removalNotBefore","since","removedIn"]:["tag","kind","name"]);if(unknown.length&&findings.push(`${label}: unknown key(s) ${unknown.join(", ")}`),!REVIEW_KINDS.includes(entry.kind)){findings.push(`${label}: kind must be one of ${REVIEW_KINDS.join(", ")}`);return}validateName(findings,label,entry.kind,"name",entry.name)&&entry.kind==="component"&&entry.name!==entry.tag&&findings.push(`${label}: a component review must name its own tag`),projected&&((typeof entry.replacement!="string"||!entry.replacement)&&findings.push(`${label}: replacement text missing`),majorOf(entry.removalNotBefore)===null&&findings.push(`${label}: removalNotBefore must be a version`),validateRemovedIn(findings,label,entry)),validateProjectedSince(findings,label,entry,projected)}function requiredExposure(profile){const required=new Map(EXPOSURE_KINDS.map(kind=>[kind,new Map])),need=(kind,name,tag)=>{if(!required.has(kind))return;const tags=required.get(kind).get(name)??new Set;tag&&tags.add(tag),required.get(kind).set(name,tags)};for(const entry of profile.renames??[])need(entry.kind,entry.from,entry.tag),need(entry.kind,entry.to,entry.tag);for(const entry of profile.reviews??[])need(entry.kind,entry.name,entry.tag);for(const entry of profile.detailChanges??[])need("event",entry.event,entry.tag);for(const entry of profile.retiredEvents??[])need("event",entry.event,null),need("event",entry.replacement,entry.tag);for(const entry of profile.propertyChanges??[])need("property",entry.property,entry.tag);return required}function validateExposure(findings,profile){const origin=profile.origin;if(!isPlainObject(profile.exposure)){findings.push(`${origin}: exposure must be an object`);return}const unknown=unknownKeys(profile.exposure,EXPOSURE_KINDS);unknown.length&&findings.push(`${origin}: exposure has unknown kind(s) ${unknown.join(", ")}`);const required=requiredExposure(profile);for(const kind of EXPOSURE_KINDS){const recorded=profile.exposure[kind];if(!isPlainObject(recorded)){findings.push(`${origin}: exposure.${kind} must be an object`);continue}for(const[name,tags]of Object.entries(recorded))required.get(kind).has(name)||findings.push(`${origin}: exposure.${kind} records unreferenced name ${name}`),(!Array.isArray(tags)||!tags.every(tag=>typeof tag=="string"&&TAG_PATTERN.test(tag))||JSON.stringify(tags)!==JSON.stringify([...new Set(tags)].sort(compareText)))&&findings.push(`${origin}: exposure.${kind}.${name} must be a sorted, unique tag list`);for(const[name,tags]of required.get(kind)){if(!Object.hasOwn(recorded,name)){findings.push(`${origin}: exposure.${kind}.${name} is missing`);continue}const recordedTags=new Set(recorded[name]??[]);for(const tag of tags)recordedTags.has(tag)||findings.push(`${origin}: exposure.${kind}.${name} must include ${tag}`)}}}function validateRenameLedgerShape(ledger,{projected=!1,historicalReleaseMajor=null}={}){const findings=[];if(!isPlainObject(ledger))return["rename ledger must be an object"];const unknownTop=unknownKeys(ledger,projected?["schemaVersion","profiles"]:["$comment","schemaVersion","profiles"]);if(unknownTop.length&&findings.push(`rename ledger has unknown key(s) ${unknownTop.join(", ")}`),ledger.schemaVersion!==1&&findings.push("rename ledger schemaVersion must be 1"),!Array.isArray(ledger.profiles))return[...findings,"rename ledger profiles must be an array"];const origins=ledger.profiles.map(profile=>profile?.origin),historicalCount=!Number.isInteger(historicalReleaseMajor)||historicalReleaseMajor<22?0:historicalReleaseMajor<26?2:historicalReleaseMajor<27?3:0,expectedOrigins=historicalCount&&JSON.stringify(origins)===JSON.stringify(LYRA_RENAME_ORIGINS.slice(0,historicalCount))?LYRA_RENAME_ORIGINS.slice(0,historicalCount):LYRA_RENAME_ORIGINS;JSON.stringify(origins)!==JSON.stringify(expectedOrigins)&&findings.push(`rename ledger profiles must be exactly ${expectedOrigins.join(", ")} in that order`);for(const profile of ledger.profiles){if(!isPlainObject(profile)){findings.push("rename ledger profiles must be objects");continue}const origin=String(profile.origin),unknown=unknownKeys(profile,projected?PROJECTED_PROFILE_KEYS:AUTHORED_PROFILE_KEYS);unknown.length&&findings.push(`${origin}: unknown key(s) ${unknown.join(", ")}`);const header=LYRA_RENAME_PROFILES.find(candidate=>candidate.origin===profile.origin);if(header)for(const field of["fromMajor","toMajor","aliasRemovalMajor"])profile[field]!==header[field]&&findings.push(`${origin}: ${field} must be ${header[field]}`);for(const list of PROFILE_LIST_KEYS){if(OPTIONAL_PROFILE_LISTS.includes(list)&&profile[list]===void 0)continue;if(!Array.isArray(profile[list])){findings.push(`${origin}: ${list} must be an array`);continue}const seen=new Set,keys=[];for(const entry of profile[list]){const label=entryLabel(origin,list,entry);if(!isPlainObject(entry)){findings.push(`${origin}: ${list} entries must be objects`);continue}list!=="moduleReviews"&&list!=="globals"&&(typeof entry.tag!="string"||!TAG_PATTERN.test(entry.tag))&&findings.push(`${label}: tag must be an lr-* element name`),list==="globals"?validateGlobalEntry(findings,label,entry):list==="moduleReviews"?(validateModuleReviewEntry(findings,label,entry,projected),projected&&majorOf(entry.removalNotBefore)!==profile.aliasRemovalMajor&&findings.push(`${label}: removalNotBefore must match the profile's aliasRemovalMajor`)):list==="renames"?validateRenameEntry(findings,label,entry,projected):list==="defaults"?validateDefaultEntry(findings,label,entry,projected):list==="detailChanges"?validateDetailEntry(findings,label,entry,projected):list==="detailFields"?validateDetailFieldEntry(findings,label,entry,projected):list==="retiredEvents"?(validateRetiredEventEntry(findings,label,entry,projected),projected&&entry.since!==`${profile.toMajor}.0.0`&&findings.push(`${label}: since must match the target major release`)):list==="propertyChanges"?validatePropertyChangeEntry(findings,label,entry,projected):list==="slotContent"?validateSlotContentEntry(findings,label,entry,projected):validateReviewEntry(findings,label,entry,projected);const key=sortKey(list,entry);seen.has(key)&&findings.push(`${label}: duplicate entry`),seen.add(key),keys.push(key)}JSON.stringify(keys)!==JSON.stringify([...keys].sort(compareText))&&findings.push(`${origin}: ${list} must be sorted by ${list==="moduleReviews"?"kind, module and name":list==="globals"?"kind and name":"tag and name"}`)}if(!Array.isArray(profile.renames)||!Array.isArray(profile.reviews))continue;const sources=new Map;for(const entry of profile.renames){const names=sources.get(entry.kind)??new Set;names.add(entry.from),sources.set(entry.kind,names)}for(const entry of profile.renames)sources.get(entry.kind)?.has(entry.to)&&findings.push(`${entryLabel(origin,"renames",entry)}: target ${entry.to} is itself renamed; rename directly to the final name`);const renamed=new Set(profile.renames.map(entry=>`${entry.tag}\0${entry.kind}\0${entry.from}`));for(const entry of profile.reviews)renamed.has(`${entry.tag}\0${entry.kind}\0${entry.name}`)&&findings.push(`${entryLabel(origin,"reviews",entry)}: a member is either renamed or reviewed, not both`);projected&&validateExposure(findings,profile)}if(ledger.profiles.length>=2){const historicalFields=ledger.profiles[0]?.detailFields,nextFields=ledger.profiles[1]?.detailFields;(Array.isArray(historicalFields)||Array.isArray(nextFields))&&JSON.stringify(historicalFields??[])!==JSON.stringify(nextFields??[])&&findings.push("lyra-v21 and lyra-v22 detailFields must preserve the same verified field exposures")}return findings}function componentMap(inventory){return new Map((inventory?.components??[]).map(component=>[component.tag,component]))}function surfaceEntry(component,kind,name){return(component?.surface?.[SURFACE_SECTIONS[kind]]??[]).find(entry=>entry.name===name)??null}function hasCurrentSuccessor(component,kind,name){const seen=new Set;for(;;){const key=`${kind}\0${name}`;if(seen.has(key))return!1;seen.add(key);const member=surfaceEntry(component,kind,name);if(!member)return!1;if(!member.deprecated)return!0;const replacement=deprecationRecordFor(component,kind,name)?.replacement;if(!replacement||replacement.kind==="component"||replacement.kind==="host-css-property")return!1;kind=replacement.kind,name=replacement.name}}function deprecationRecords(component){const records=[...component?.maturity?.deprecations??[]],componentRecord=component?.maturity?.deprecated;return isPlainObject(componentRecord)&&!records.some(record=>record.kind==="component")&&records.push(componentRecord),records}function deprecationRecordFor(component,kind,name){const records=deprecationRecords(component);if(kind==="component")return records.find(record=>record.kind==="component")??null;const direct=records.find(record=>record.kind===kind&&record.name===name);return direct||kind!=="attribute"?direct??null:records.find(record=>record.kind==="property"&&record.attribute===name)??null}function historicalMember(context,tag,kind,name){const key=JSON.stringify(["member",tag,kind,name]);return context?.records?.[key]??context?.records?.[context?.aliases?.[key]]??null}function historicalSourceComponent(context,tag,record=null){const historical=record??historicalMember(context,tag,"component",tag);return historical?.state!=="retired"?null:historical.sourceComponent??context?.sourceComponents?.[tag]??null}function historicalExport(context,entry){return context?.records?.[JSON.stringify(["export",entry.kind,entry.module??null,entry.name])]??null}function ownerFor(components,context,tag){const current=components.get(tag);return current||historicalSourceComponent(context,tag)}function policyFor(component,context,tag,kind,name){return deprecationRecordFor(component,kind,name)??historicalMember(context,tag,kind,name)?.policy??null}function replacementOwner(components,context,tag,kind,name){const historical=historicalMember(context,tag,kind,name);return components.get(historical?.state==="retired"?historical.replacementOwner:tag)}function replacementMatches(component,kind,record,to){const replacement=record?.replacement;return isPlainObject(replacement)?replacement.kind===kind&&replacement.name===to?!0:kind==="attribute"&&replacement.kind==="property"?surfaceEntry(component,"property",replacement.name)?.attribute===to:!1:!1}function isBooleanMember(entry){return String(entry?.type??"").split("|").map(part=>part.trim()).includes("boolean")}function exposingTags(inventory,kind,name){return(inventory?.components??[]).filter(component=>surfaceEntry(component,kind,name)).map(component=>component.tag).sort(compareText)}const UNMIRRORED_CLASSIFICATIONS=new Set(["conceptual-only","unsupported"]);function mirroredMembers(inventory){const upstreamComponents=new Map;for(const ecosystem of Object.values(inventory?.upstreams??{}))for(const component of ecosystem?.components??[])upstreamComponents.set(component.tag,component);const mirrored=new Map;for(const mapping of inventory?.mappings??[]){if(!mapping?.targetTag||UNMIRRORED_CLASSIFICATIONS.has(mapping.classification))continue;const upstream=upstreamComponents.get(mapping.upstreamTag);for(const[kind,section]of Object.entries(SURFACE_SECTIONS)){const rewrites=mapping.rewrites?.[section]??[],renamedAway=new Set(rewrites.map(rule=>rule?.from)),names=[...rewrites.map(rule=>rule?.to).filter(name=>typeof name=="string"),...(upstream?.surface?.[section]??[]).map(entry=>entry.name).filter(name=>!renamedAway.has(name))];for(const name of names){const key=`${mapping.targetTag}\0${kind}\0${name}`;mirrored.has(key)||mirrored.set(key,mapping.upstreamTag)}}}return mirrored}function validateRenameLedger(ledger,{inventory,exportDeprecations=[],requireCoverage=!1,sharedTokens=null,compatibilityContext=null,historicalReleaseMajor=null}){const findings=validateRenameLedgerShape(ledger,{historicalReleaseMajor});if(findings.length)return findings;const components=componentMap(inventory);if(!Array.isArray(exportDeprecations))return["exportDeprecations must be an array"];if(!exportDeprecations.every(isPlainObject))return["exportDeprecations entries must be objects"];const moduleRecords=new Map(exportDeprecations.map(record=>[moduleReviewKey(record),record]));moduleRecords.size!==exportDeprecations.length&&findings.push("exportDeprecations contains duplicate module records");const mirrored=mirroredMembers(inventory),mirrorOf=(tag,kind,name)=>mirrored.get(`${tag}\0${kind}\0${name}`)??null;for(const profile of ledger.profiles){const origin=profile.origin,covered=new Set,release=`${profile.toMajor}.0.0`,removalMajorMatches=record=>majorOf(record?.removalNotBefore)===profile.aliasRemovalMajor,checkRecordWindow=(label,record)=>{if(removalMajorMatches(record)||findings.push(`${label}: its deprecation record must set removalNotBefore to ${profile.aliasRemovalMajor}.0.0`),record?.since===UNRELEASED_VERSION)return;const since=compareVersions(record?.since,release);(since===null||since>0)&&findings.push(`${label}: its deprecation record must start no later than ${release} (since ${JSON.stringify(record?.since)})`)},checkLyraOnly=(label,tag,kind,name)=>{const upstream=mirrorOf(tag,kind,name);upstream&&findings.push(`${label}: ${name} mirrors ${upstream}; mirrored names never change`)},checkSharedToken=(label,kind,name)=>{kind==="css-property"&&sharedTokens?.has(name)&&findings.push(`${label}: ${name} is a canonical design token, not a component-owned custom property`)},presenceDefaults=new Set(ledger.profiles.filter(candidate=>candidate.toMajor<=profile.toMajor).flatMap(candidate=>candidate.defaults).filter(entry=>entry.value===!0).map(entry=>`${entry.tag}\0${entry.attribute}`)),inversionCompanions=new Set;for(const entry of profile.detailFields??[]){const label=entryLabel(origin,"detailFields",entry),component=ownerFor(components,compatibilityContext,entry.tag);component?surfaceEntry(component,"event",entry.event)||findings.push(`${label}: the event is not dispatched by ${entry.tag}`):findings.push(`${label}: component is not in the inventory`)}for(const entry of profile.renames){const label=entryLabel(origin,"renames",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}covered.add(`${entry.tag}\0${entry.kind}\0${entry.from}`),checkLyraOnly(label,entry.tag,entry.kind,entry.from),checkSharedToken(label,entry.kind,entry.from),checkSharedToken(label,entry.kind,entry.to);const historical=historicalMember(compatibilityContext,entry.tag,entry.kind,entry.from),retired=historical?.state==="retired",from=surfaceEntry(retired?historicalSourceComponent(compatibilityContext,entry.tag,historical):component,entry.kind,entry.from),targetOwner=replacementOwner(components,compatibilityContext,entry.tag,entry.kind,entry.from),to=surfaceEntry(targetOwner,entry.kind,entry.to);from?from.deprecated||findings.push(`${label}: the alias ${entry.from} is not marked deprecated in the manifest`):findings.push(`${label}: the deprecated alias ${entry.from} is not on the public surface`),to?to.deprecated&&!(retired&&hasCurrentSuccessor(targetOwner,entry.kind,entry.to))&&findings.push(`${label}: the canonical name ${entry.to} is itself deprecated`):findings.push(`${label}: the canonical name ${entry.to} is not on the public surface`);const record=policyFor(component,compatibilityContext,entry.tag,entry.kind,entry.from);if(record?(checkRecordWindow(label,record),replacementMatches(targetOwner,entry.kind,record,entry.to)||findings.push(`${label}: its deprecation record names a different replacement than ${entry.to}`)):findings.push(`${label}: no deprecation record retires ${entry.from}`),(entry.kind==="attribute"||entry.kind==="property")&&from&&to&&isBooleanMember(from)&&isBooleanMember(to)){const toAttribute=entry.kind==="attribute"?entry.to:to.attribute,preservesPresence=!!toAttribute&&presenceDefaults.has(`${entry.tag}\0${toAttribute}`);entry.polarity==="inverted"?(to.default===!0&&findings.push(`${label}: an inverted rename must target a boolean that defaults to false`),from.default!==!0&&toAttribute&&inversionCompanions.add(`${entry.tag}\0${toAttribute}`),from.default!==!0&&!preservesPresence&&findings.push(`${label}: ${entry.from} defaults to false, so the inverted rename needs a defaults entry inserting ${toAttribute??entry.to} where both are absent`)):from.default===!0&&to.default!==!0&&!preservesPresence&&findings.push(`${label}: ${entry.from} defaults to true and ${entry.to} to false; declare "polarity": "inverted" or preserve the default with a defaults entry`)}else entry.polarity==="inverted"&&from&&to&&findings.push(`${label}: an inverted rename must retire a boolean for a boolean`)}for(const entry of profile.reviews){const label=entryLabel(origin,"reviews",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}covered.add(`${entry.tag}\0${entry.kind}\0${entry.name}`),entry.kind!=="component"&&checkLyraOnly(label,entry.tag,entry.kind,entry.name),checkSharedToken(label,entry.kind,entry.name);const record=policyFor(component,compatibilityContext,entry.tag,entry.kind,entry.name);record?checkRecordWindow(label,record):findings.push(`${label}: no deprecation record retires ${JSON.stringify(entry.name)}`)}for(const entry of profile.detailChanges){const label=entryLabel(origin,"detailChanges",entry),component=ownerFor(components,compatibilityContext,entry.tag);component?surfaceEntry(component,"event",entry.event)?checkLyraOnly(label,entry.tag,"event",entry.event):findings.push(`${label}: the event is not dispatched by ${entry.tag}`):findings.push(`${label}: component is not in the inventory`)}for(const entry of profile.retiredEvents??[]){const label=entryLabel(origin,"retiredEvents",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component)findings.push(`${label}: component is not in the inventory`);else{surfaceEntry(component,"event",entry.event)&&findings.push(`${label}: retired event is still dispatched by ${entry.tag}`),deprecationRecordFor(component,"event",entry.event)&&findings.push(`${label}: a retired event must not keep a current deprecation record`);const target=surfaceEntry(component,"event",entry.replacement);(!target||target.deprecated)&&findings.push(`${label}: replacement is not a current event on ${entry.tag}`),checkLyraOnly(label,entry.tag,"event",entry.event)}}for(const entry of profile.propertyChanges??[]){const label=entryLabel(origin,"propertyChanges",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component)findings.push(`${label}: component is not in the inventory`);else{const historical=historicalMember(compatibilityContext,entry.tag,"property",entry.property),propertyOwner=historical?.state==="retired"?historical.sourceComponent??historicalSourceComponent(compatibilityContext,entry.tag,historical):component;surfaceEntry(propertyOwner,"property",entry.property)?checkLyraOnly(label,entry.tag,"property",entry.property):findings.push(`${label}: the property is not on the public surface`),entry.former&&surfaceEntry(propertyOwner,"property",entry.former)&&findings.push(`${label}: the former property name is still on the public surface`)}}for(const entry of profile.slotContent){const label=entryLabel(origin,"slotContent",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}surfaceEntry(component,"slot",entry.slot)||findings.push(`${label}: the slot is not on the public surface`);const record=policyFor(component,compatibilityContext,entry.tag,"slot-content",entry.slot);record&&(covered.add(`${entry.tag}\0slot-content\0${entry.slot}`),Array.isArray(record.permittedContent)&&JSON.stringify(entry.allow??null)!==JSON.stringify(record.permittedContent)&&findings.push(`${label}: its deprecation record permits ${record.permittedContent.join(", ")}; allow must list exactly those elements`))}for(const entry of profile.defaults){const label=entryLabel(origin,"defaults",entry),component=ownerFor(components,compatibilityContext,entry.tag);if(!component){findings.push(`${label}: component is not in the inventory`);continue}const attribute=surfaceEntry(component,"attribute",entry.attribute);if(!attribute){findings.push(`${label}: the attribute is not on the public surface`);continue}inversionCompanions.has(`${entry.tag}\0${entry.attribute}`)||checkLyraOnly(label,entry.tag,"attribute",entry.attribute),entry.value===!0&&!isBooleanMember(attribute)&&findings.push(`${label}: presence insertion requires a boolean attribute`),attribute.hasDefault&&String(attribute.default)===String(entry.value)&&findings.push(`${label}: the value equals the current default, so there is nothing to preserve`)}for(const entry of profile.globals??[]){const label=entryLabel(origin,"globals",entry);if(entry.kind==="part"){const component=ownerFor(components,compatibilityContext,entry.tag);component?surfaceEntry(component,"part",entry.from)||findings.push(`${label}: the part is not on the public surface`):findings.push(`${label}: component is not in the inventory`)}else entry.kind==="css-property"&&[...components.values()].some(component=>(component.surface?.cssProperties??[]).some(property=>entry.prefix?property.name.startsWith(entry.from):property.name===entry.from))&&findings.push(`${label}: a component still exposes the custom property`)}const coveredModules=new Set;for(const entry of profile.moduleReviews){const label=entryLabel(origin,"moduleReviews",entry),key=moduleReviewKey(entry);coveredModules.add(key);const record=moduleRecords.get(key)??historicalExport(compatibilityContext,entry)?.policy;record?(checkRecordWindow(label,record),!record.replacement?.usage&&!record.replacement?.name&&findings.push(`${label}: canonical replacement is missing`)):findings.push(`${label}: no canonical exportDeprecations record`)}if(!requireCoverage)continue;for(const record of[...exportDeprecations,...Object.values(compatibilityContext?.records??{}).filter(entry=>entry.state==="retired"&&entry.key.scope==="export").map(entry=>entry.policy)])removalMajorMatches(record)&&!coveredModules.has(moduleReviewKey(record))&&findings.push(`${origin}: ${record.kind} ${record.module??""} ${record.name} is removed in ${profile.aliasRemovalMajor}.0.0 but has no moduleReviews entry`);const coverageOwners=new Map((inventory?.components??[]).map(component=>[component.tag,deprecationRecords(component)]));for(const entry of Object.values(compatibilityContext?.records??{}))entry.state!=="retired"||entry.key.scope!=="member"||coverageOwners.set(entry.key.tag,[...coverageOwners.get(entry.key.tag)??[],entry.policy]);for(const[tag,records]of coverageOwners){const component={tag};for(const record of records){if(!removalMajorMatches(record))continue;const keys=[[record.kind,record.kind==="component"?component.tag:record.name]];record.kind==="property"&&record.attribute&&keys.push(["attribute",record.attribute]);for(const[kind,name]of keys)kind!=="component"&&mirrorOf(component.tag,kind,name)||covered.has(`${component.tag}\0${kind}\0${name}`)||findings.push(`${origin}: ${component.tag} ${kind} ${JSON.stringify(name)} is removed in ${profile.aliasRemovalMajor}.0.0 but has no ${kind==="slot-content"?"slotContent":"rename or review"} entry`)}}}return[...new Set(findings)]}function projectRenameLedger(ledger,inventory,{exportDeprecations=[],compatibilityContext=null,historicalReleaseMajor=null}={}){const findings=validateRenameLedger(ledger,{inventory,exportDeprecations,compatibilityContext,historicalReleaseMajor});if(findings.length)throw new Error(`Invalid Lyra rename ledger: ${findings.join("; ")}`);const components=componentMap(inventory),moduleRecords=new Map(exportDeprecations.map(record=>[moduleReviewKey(record),record])),projection={schemaVersion:1,profiles:ledger.profiles.map(profile=>{const release=`${profile.toMajor}.0.0`,exposure=Object.fromEntries(EXPOSURE_KINDS.map(kind=>[kind,{}]));for(const[kind,names]of requiredExposure(profile))for(const name of[...names.keys()].sort(compareText))exposure[kind][name]=[...new Set([...exposingTags(inventory,kind,name),...compatibilityContext?.exposure?.[kind]?.[name]??[]])].sort(compareText);const recordFor=(entry,kind,name)=>policyFor(components.get(entry.tag),compatibilityContext,entry.tag,kind,name);return{origin:profile.origin,fromMajor:profile.fromMajor,toMajor:profile.toMajor,aliasRemovalMajor:profile.aliasRemovalMajor,renames:profile.renames.map(entry=>{const target=surfaceEntry(replacementOwner(components,compatibilityContext,entry.tag,entry.kind,entry.from),entry.kind,entry.to),attribute=entry.kind==="attribute"?entry.to:target?.attribute,preservesDefault=entry.polarity==="inverted"&&profile.defaults.some(rule=>rule.tag===entry.tag&&rule.attribute===attribute),since=recordFor(entry,entry.kind,entry.from).since,beforeRelease=since===UNRELEASED_VERSION||compareVersions(since,release)<0;return{...structuredClone(entry),since:preservesDefault&&beforeRelease?release:since,...entry.kind==="attribute"?{reflects:!!target?.reflects}:{}}}),defaults:profile.defaults.map(entry=>({...structuredClone(entry),since:release})),retiredEvents:(profile.retiredEvents??[]).map(entry=>({...structuredClone(entry),since:release})),detailChanges:profile.detailChanges.map(entry=>({...structuredClone(entry),since:release})),...Array.isArray(profile.detailFields)?{detailFields:profile.detailFields.map(entry=>structuredClone(entry))}:{},propertyChanges:(profile.propertyChanges??[]).map(entry=>({...structuredClone(entry),since:release})),...Array.isArray(profile.globals)?{globals:profile.globals.map(entry=>structuredClone(entry))}:{},reviews:profile.reviews.map(entry=>{const record=recordFor(entry,entry.kind,entry.name),retired=historicalMember(compatibilityContext,entry.tag,entry.kind,entry.name);return{...structuredClone(entry),replacement:String(record.replacement?.usage||record.replacement?.name),...retired?.state==="retired"?{removedIn:retired.removedIn}:{},removalNotBefore:record.removalNotBefore,since:record.since}}),slotContent:profile.slotContent.map(entry=>({...structuredClone(entry),since:release})),moduleReviews:profile.moduleReviews.map(entry=>{const retired=historicalExport(compatibilityContext,entry),record=moduleRecords.get(moduleReviewKey(entry))??retired?.policy;return{...structuredClone(entry),replacement:String(record.replacement.usage||record.replacement.name),...retired?.state==="retired"?{removedIn:retired.removedIn}:{},since:record.since,removalNotBefore:record.removalNotBefore}}),exposure}})},shapeFindings=validateRenameLedgerShape(projection,{projected:!0,historicalReleaseMajor});if(shapeFindings.length)throw new Error(`Invalid Lyra rename projection: ${shapeFindings.join("; ")}`);return projection}function indexBy(entries,keyOf){const index=new Map;for(const entry of entries){const key=keyOf(entry),list=index.get(key)??[];list.push(entry),index.set(key,list)}return index}const ownerKey=(tag,kind,name)=>`${tag}\0${kind}\0${name}`,nameKey=(kind,name)=>`${kind}\0${name}`;function createRenameProfiles(projection,{lyraVersion=null}={}){const findings=validateRenameLedgerShape(projection,{projected:!0});if(findings.length)throw new Error(`Invalid Lyra rename projection: ${findings.join("; ")}`);if(lyraVersion!==null&&!parseVersion(lyraVersion))throw new Error(`Invalid Lyra version: ${lyraVersion}`);const profiles=new Map,availableAcrossProfiles=entry=>lyraVersion===null||entry.since!==UNRELEASED_VERSION&&compareVersions(entry.since,lyraVersion)<=0,allRenames=projection.profiles.flatMap(profile=>profile.renames).filter(availableAcrossProfiles),allDefaults=projection.profiles.flatMap(profile=>profile.defaults).filter(availableAcrossProfiles);for(const full of projection.profiles){const skipped=[],available=list=>(full[list]??[]).filter(entry=>{if(lyraVersion===null)return!0;const availableFrom=list==="detailFields"?entry.observedIn:entry.since;return availableFrom!==UNRELEASED_VERSION&&compareVersions(availableFrom,lyraVersion)<=0?!0:(skipped.push({list,...entry}),!1)}).map(entry=>{if(!entry.removedIn||lyraVersion===null||compareVersions(lyraVersion,entry.removedIn)>=0)return entry;const{removedIn,...beforeRemoval}=entry;return beforeRemoval}),data={...full,...Object.fromEntries(PROFILE_LIST_KEYS.map(list=>[list,available(list)]))},renamesByOwner=new Map(data.renames.map(entry=>[ownerKey(entry.tag,entry.kind,entry.from),entry])),renamesByName=indexBy(data.renames,entry=>nameKey(entry.kind,entry.from)),renamesByTarget=indexBy(data.renames,entry=>nameKey(entry.kind,entry.to)),reviewsByOwner=new Map(data.reviews.map(entry=>[ownerKey(entry.tag,entry.kind,entry.name),entry])),reviewsByName=indexBy(data.reviews,entry=>nameKey(entry.kind,entry.name)),detailsByOwner=new Map(data.detailChanges.map(entry=>[ownerKey(entry.tag,"event",entry.event),entry])),detailsByName=indexBy(data.detailChanges,entry=>entry.event),fieldsByOwnerEvent=new Map((data.detailFields??[]).map(entry=>[ownerKey(entry.tag,"event",entry.event),entry])),fieldsByEvent=indexBy(data.detailFields??[],entry=>entry.event),retiredByOwner=new Map(data.retiredEvents.map(entry=>[ownerKey(entry.tag,"event",entry.event),entry])),retiredByName=indexBy(data.retiredEvents,entry=>entry.event),propertiesByOwner=new Map(data.propertyChanges.flatMap(entry=>[entry.property,...entry.former?[entry.former]:[]].map(name=>[ownerKey(entry.tag,"property",name),entry]))),exposure=new Map(EXPOSURE_KINDS.map(kind=>[kind,new Map(Object.entries(data.exposure[kind]).map(([name,tags2])=>[name,new Set(tags2)]))])),defaultsByTag=indexBy(data.defaults,entry=>entry.tag),slotContentByTag=indexBy(data.slotContent,entry=>entry.tag),tags=new Set([...data.renames,...data.reviews,...data.detailChanges,...data.detailFields??[],...data.retiredEvents,...data.propertyChanges,...data.defaults,...data.slotContent].map(entry=>entry.tag)),renamesNamed=(kind,name)=>renamesByName.get(nameKey(kind,name))??[],exposersOf=(kind,name)=>exposure.get(kind)?.get(name)??new Set,movers=(kind,from,to)=>new Set(renamesNamed(kind,from).filter(entry=>entry.to===to&&!entry.polarity).map(entry=>entry.tag)),subset=(left,right)=>[...left].every(tag=>right.has(tag));profiles.set(data.origin,{origin:data.origin,fromMajor:data.fromMajor,toMajor:data.toMajor,aliasRemovalMajor:data.aliasRemovalMajor,data,skipped,tags,isEmpty:tags.size===0&&data.moduleReviews.length===0&&data.globals.length===0,renameFor:(tag,kind,name)=>renamesByOwner.get(ownerKey(tag,kind,name))??null,renamesNamed,renamesOnto:(kind,name)=>renamesByTarget.get(nameKey(kind,name))??[],reviewFor:(tag,kind,name)=>reviewsByOwner.get(ownerKey(tag,kind,name))??null,reviewsNamed:(kind,name)=>reviewsByName.get(nameKey(kind,name))??[],detailFor:(tag,event)=>detailsByOwner.get(ownerKey(tag,"event",event))??null,detailsNamed:event=>detailsByName.get(event)??[],detailFieldFor:(tag,event)=>fieldsByOwnerEvent.get(ownerKey(tag,"event",event))??null,detailFieldsNamed:event=>fieldsByEvent.get(event)??[],retiredEventFor:(tag,event)=>retiredByOwner.get(ownerKey(tag,"event",event))??null,retiredEventsNamed:event=>retiredByName.get(event)??[],propertyChangeFor:(tag,property)=>propertiesByOwner.get(ownerKey(tag,"property",property))??null,defaultsFor:tag=>defaultsByTag.get(tag)??[],preservedDefaultsFor:tag=>allDefaults.filter(entry=>entry.tag===tag),defaultAliasesFor:(tag,attribute)=>{const aliases=new Set([attribute]);for(const rename of allRenames)rename.tag!==tag||rename.kind!=="attribute"||(rename.from===attribute&&aliases.add(rename.to),rename.to===attribute&&aliases.add(rename.from));return[...aliases]},slotContentFor:tag=>slotContentByTag.get(tag)??[],exposes:(kind,name,tag)=>!!tag&&exposersOf(kind,name).has(tag),exposers:(kind,name)=>[...exposersOf(kind,name)],targetKeepers(kind,from,to){const moving=movers(kind,from,to);return[...exposersOf(kind,to)].filter(tag=>!moving.has(tag))},sourceKeepers(kind,from,to){const moving=movers(kind,from,to);return[...exposersOf(kind,from)].filter(tag=>!moving.has(tag))},isGlobal(kind,from){const entries=renamesNamed(kind,from);if(!entries.length||entries.some(entry=>entry.polarity))return!1;const targets=new Set(entries.map(entry=>entry.to));if(targets.size!==1)return!1;const[to]=targets,moving=movers(kind,from,to);return exposersOf(kind,from).size>0&&subset(exposersOf(kind,from),moving)&&subset(exposersOf(kind,to),moving)},gainedOwners(kind,name){const onto=(renamesByTarget.get(nameKey(kind,name))??[]).filter(entry=>!entry.polarity);if(!onto.length)return[];const gained=new Set(onto.map(entry=>entry.tag));return[...exposersOf(kind,name)].filter(tag=>!gained.has(tag)).length?[...gained].sort(compareText):[]}})}return profiles}export{LYRA_RENAME_ORIGINS,compareVersions,createRenameProfiles,emptyRenameLedger,emptyRenameProjection,mirroredMembers,projectRenameLedger,validateRenameLedger,validateRenameLedgerShape};
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import{spawnSync}from"node:child_process";import{fileURLToPath}from"node:url";import{runInitAgents}from"./init-agents.mjs";import{isMainModule}from"./is-main-module.mjs";const USAGE=`Usage: lyra-ui <command> [options]
3
+
4
+ Commands:
5
+ init-agents set up AI coding agents (Claude Code, Codex, OpenCode, ...) with the Lyra UI skills
6
+ migrate-wa rename Web Awesome / Shoelace usage to lr-* (same as lyra-ui-migrate)
7
+
8
+ Run \`lyra-ui <command> --help\` for a command's options.
9
+ `;async function runLyraUi(argv){const[command,...rest]=argv;return command==="init-agents"?await runInitAgents(rest):command==="migrate-wa"?spawnSync(process.execPath,[fileURLToPath(new URL("./migrate-wa.mjs",import.meta.url)),...rest],{stdio:"inherit"}).status??1:command===void 0||command==="--help"||command==="-h"?(console.log(USAGE),command===void 0?2:0):(console.error(`lyra-ui: unknown command "${command}"
10
+
11
+ ${USAGE}`),2)}isMainModule(import.meta.url)&&(process.exitCode=await runLyraUi(process.argv.slice(2)));export{runLyraUi};
@@ -18,14 +18,16 @@ deprecated Lyra 21 member names
18
18
  change what a site reaches, preserves changed defaults, and reports everything else, including
19
19
  listeners of events whose detail changed. --origin=lyra-v22 reports deprecated theme APIs,
20
20
  stylesheets, window events and root attributes; review their replacement semantics explicitly.
21
- Lyra profiles never rewrite tags or imports. Run a Lyra profile with the CLI of the installed
22
- release, after upgrading.
21
+ --origin=lyra-v26 moves the package specifiers and root-barrel types that Lyra 27 relocated,
22
+ reports removed localization keys. Lyra profiles never rewrite
23
+ tags. Run a Lyra profile with the CLI of the installed release, after upgrading.
23
24
 
24
25
  --dry-run, -n report changes without writing source files
25
26
  --check exit nonzero when rewrites or warnings remain; never write source files
26
27
  --diff print a unified diff of the changes instead of writing source files
27
28
  --origin=lyra-v21 migrate names and defaults that change from Lyra 21 to Lyra 22
28
29
  --origin=lyra-v22 review Lyra 22 module contracts retained through Lyra 23
30
+ --origin=lyra-v26 move specifiers and types relocated in Lyra 27, report removed locale keys
29
31
  --lyra-version=x.y.z apply only rename entries available in this release (default: the
30
32
  @aceshooting/lyra-ui installed under the working directory, when found)
31
33
  --report=path write the stable JSON migration report