@aceshooting/lyra-ui 29.0.2 → 29.1.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 (521) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +19 -26
  3. package/design-tokens.json +1 -1
  4. package/dist/cli/migrate-wa.mjs +2 -0
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +5 -3
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +4 -3
  7. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
  8. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +21 -5
  9. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +14 -11
  10. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +1 -1
  11. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  12. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +34 -7
  13. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +25 -11
  14. package/dist/components/agent-tools/eval-result/eval-result-source.js +1 -0
  15. package/dist/components/agent-tools/eval-result/eval-result.class.d.ts +31 -11
  16. package/dist/components/agent-tools/eval-result/eval-result.class.js +29 -15
  17. package/dist/components/agent-tools/eval-result/eval-result.styles.js +1 -1
  18. package/dist/components/agent-tools/eval-result/eval-run-result.d.ts +10 -0
  19. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +26 -5
  20. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +16 -6
  21. package/dist/components/agent-tools/span-waterfall/span-waterfall.d.ts +1 -1
  22. package/dist/components/agent-tools/span-waterfall/span-waterfall.js +1 -1
  23. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  24. package/dist/components/agent-tools/task-list/task-list.class.d.ts +29 -6
  25. package/dist/components/agent-tools/task-list/task-list.class.js +13 -7
  26. package/dist/components/agent-tools/task-list/task-list.d.ts +1 -1
  27. package/dist/components/agent-tools/task-list/task-list.js +1 -1
  28. package/dist/components/agent-tools/task-list/task-list.styles.js +1 -1
  29. package/dist/components/agent-tools/terminal/terminal.class.d.ts +9 -5
  30. package/dist/components/agent-tools/terminal/terminal.class.js +8 -8
  31. package/dist/components/agent-tools/test-results/test-results.class.d.ts +16 -4
  32. package/dist/components/agent-tools/test-results/test-results.class.js +15 -6
  33. package/dist/components/agent-tools/test-results/test-results.d.ts +1 -0
  34. package/dist/components/agent-tools/test-results/test-results.js +1 -1
  35. package/dist/components/agent-tools/test-results/test-results.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +7 -4
  37. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +2 -1
  38. package/dist/components/agent-tools/trace-tree/span-projection.js +1 -0
  39. package/dist/components/agent-tools/trace-tree/span-shared.d.ts +29 -0
  40. package/dist/components/agent-tools/trace-tree/span-shared.js +1 -0
  41. package/dist/components/agent-tools/trace-tree/span.d.ts +5 -35
  42. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts +27 -5
  44. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +19 -9
  45. package/dist/components/agent-tools/trace-tree/trace-tree.d.ts +1 -1
  46. package/dist/components/agent-tools/trace-tree/trace-tree.js +1 -1
  47. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  48. package/dist/components/charts/chart/bar-chart.class.d.ts +5 -1
  49. package/dist/components/charts/chart/box-plot.class.d.ts +2 -2
  50. package/dist/components/charts/chart/box-plot.class.js +3 -3
  51. package/dist/components/charts/chart/bubble-chart.class.d.ts +5 -1
  52. package/dist/components/charts/chart/chart-prepared-data.d.ts +9 -0
  53. package/dist/components/charts/chart/chart-prepared-data.js +1 -0
  54. package/dist/components/charts/chart/chart-spatial-data.js +2 -0
  55. package/dist/components/charts/chart/chart-sync.js +1 -1
  56. package/dist/components/charts/chart/chart-table-sampling.js +1 -1
  57. package/dist/components/charts/chart/chart.class.d.ts +56 -6
  58. package/dist/components/charts/chart/chart.class.js +18 -8
  59. package/dist/components/charts/chart/chart.styles.js +1 -1
  60. package/dist/components/charts/chart/doughnut-chart.class.d.ts +5 -1
  61. package/dist/components/charts/chart/histogram-buckets.d.ts +1 -1
  62. package/dist/components/charts/chart/histogram-buckets.js +1 -1
  63. package/dist/components/charts/chart/histogram.class.d.ts +19 -4
  64. package/dist/components/charts/chart/histogram.class.js +1 -1
  65. package/dist/components/charts/chart/line-chart.class.d.ts +5 -1
  66. package/dist/components/charts/chart/lite-chart.class.d.ts +51 -11
  67. package/dist/components/charts/chart/lite-chart.class.js +33 -27
  68. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  69. package/dist/components/charts/chart/pie-chart.class.d.ts +5 -1
  70. package/dist/components/charts/chart/polar-area-chart.class.d.ts +5 -1
  71. package/dist/components/charts/chart/radar-chart.class.d.ts +5 -1
  72. package/dist/components/charts/chart/scatter-chart.class.d.ts +5 -1
  73. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +6 -3
  74. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +6 -5
  75. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +1 -1
  76. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +8 -0
  77. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  78. package/dist/components/conversation/code-block/code-block-base.class.d.ts +5 -3
  79. package/dist/components/conversation/code-block/code-block-base.class.js +1 -1
  80. package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -1
  81. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  82. package/dist/components/conversation/code-block/code-block-shared.d.ts +6 -4
  83. package/dist/components/conversation/code-block/code-block-shared.js +3 -2
  84. package/dist/components/conversation/code-block/code-block.class.d.ts +11 -4
  85. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  86. package/dist/components/conversation/code-block/code-block.d.ts +1 -1
  87. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  88. package/dist/components/conversation/code-block/shiki-types.d.ts +2 -0
  89. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  90. package/dist/components/conversation/markdown/markdown-base.class.d.ts +6 -4
  91. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  92. package/dist/components/conversation/markdown/markdown-code-header.d.ts +2 -2
  93. package/dist/components/conversation/markdown/markdown-code-header.js +1 -1
  94. package/dist/components/conversation/markdown/markdown-core.class.d.ts +8 -3
  95. package/dist/components/conversation/markdown/markdown-progressive.js +2 -2
  96. package/dist/components/conversation/markdown/markdown-shared.d.ts +5 -10
  97. package/dist/components/conversation/markdown/markdown-shared.js +5 -5
  98. package/dist/components/conversation/markdown/markdown-streaming-tail.js +1 -1
  99. package/dist/components/conversation/markdown/markdown.class.d.ts +17 -10
  100. package/dist/components/conversation/markdown/markdown.class.js +1 -1
  101. package/dist/components/conversation/markdown/markdown.styles.js +1 -1
  102. package/dist/components/conversation/model-select/model-select.class.d.ts +4 -3
  103. package/dist/components/conversation/model-select/model-select.class.js +3 -2
  104. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  105. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +2 -1
  106. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  107. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +1 -1
  108. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -2
  109. package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -1
  110. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  111. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +10 -2
  112. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +15 -6
  113. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  114. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +3 -1
  115. package/dist/components/conversation/realtime-session/realtime-session.class.js +2 -1
  116. package/dist/components/conversation/realtime-session/realtime-session.styles.js +1 -1
  117. package/dist/components/conversation/streaming-text/markdown-detection.d.ts +2 -0
  118. package/dist/components/conversation/streaming-text/markdown-detection.js +4 -1
  119. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +6 -2
  120. package/dist/components/conversation/streaming-text/streaming-text-base.class.js +3 -3
  121. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +1 -1
  122. package/dist/components/conversation/streaming-text/streaming-text.class.js +1 -0
  123. package/dist/components/conversation/thread-list/thread-list.class.d.ts +34 -4
  124. package/dist/components/conversation/thread-list/thread-list.class.js +22 -15
  125. package/dist/components/conversation/thread-list/thread-list.d.ts +1 -1
  126. package/dist/components/conversation/thread-list/thread-list.js +1 -1
  127. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  128. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +6 -2
  129. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +3 -2
  130. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  131. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +3 -2
  132. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -2
  133. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  134. package/dist/components/data/calendar/calendar.class.d.ts +5 -2
  135. package/dist/components/data/calendar/calendar.class.js +1 -1
  136. package/dist/components/data/data-grid/data-grid-processing.js +2 -2
  137. package/dist/components/data/data-grid/data-grid.class.d.ts +22 -8
  138. package/dist/components/data/data-grid/data-grid.class.js +20 -19
  139. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  140. package/dist/components/data/document-library/document-library.class.d.ts +31 -4
  141. package/dist/components/data/document-library/document-library.class.js +25 -12
  142. package/dist/components/data/document-library/document-library.styles.js +1 -1
  143. package/dist/components/data/file-tree/file-tree.class.d.ts +30 -6
  144. package/dist/components/data/file-tree/file-tree.class.js +4 -3
  145. package/dist/components/data/file-tree/file-tree.d.ts +1 -0
  146. package/dist/components/data/file-tree/file-tree.js +1 -1
  147. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +31 -6
  148. package/dist/components/data/flow-canvas/flow-canvas.class.js +40 -19
  149. package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
  150. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  151. package/dist/components/data/flow-canvas/flow-source.js +1 -0
  152. package/dist/components/data/flow-canvas/flow-types.d.ts +4 -2
  153. package/dist/components/data/flow-canvas/flow-viewport-index.js +1 -0
  154. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +9 -3
  155. package/dist/components/data/flow-minimap/flow-minimap.class.js +11 -2
  156. package/dist/components/data/flow-minimap/flow-minimap.styles.js +1 -1
  157. package/dist/components/data/funnel/funnel.class.d.ts +7 -3
  158. package/dist/components/data/funnel/funnel.class.js +2 -2
  159. package/dist/components/data/heatmap/calendar-grid.d.ts +1 -1
  160. package/dist/components/data/heatmap/calendar-grid.js +1 -1
  161. package/dist/components/data/heatmap/heatmap-grid-navigation.js +1 -1
  162. package/dist/components/data/heatmap/heatmap-limits.d.ts +1 -1
  163. package/dist/components/data/heatmap/heatmap-matrix-source-controller.js +1 -0
  164. package/dist/components/data/heatmap/heatmap-matrix-source.d.ts +5 -0
  165. package/dist/components/data/heatmap/heatmap-matrix-source.js +1 -0
  166. package/dist/components/data/heatmap/heatmap-scale.d.ts +0 -16
  167. package/dist/components/data/heatmap/heatmap-scale.js +1 -1
  168. package/dist/components/data/heatmap/heatmap.class.d.ts +40 -11
  169. package/dist/components/data/heatmap/heatmap.class.js +26 -6
  170. package/dist/components/data/heatmap/heatmap.styles.js +1 -1
  171. package/dist/components/data/pagination/pagination.class.js +1 -1
  172. package/dist/components/data/sequence-strip/sequence-strip-item.d.ts +17 -0
  173. package/dist/components/data/sequence-strip/sequence-strip-source-controller.js +1 -0
  174. package/dist/components/data/sequence-strip/sequence-strip-source.d.ts +5 -0
  175. package/dist/components/data/sequence-strip/sequence-strip-source.js +1 -0
  176. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +24 -19
  177. package/dist/components/data/sequence-strip/sequence-strip.class.js +23 -4
  178. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  179. package/dist/components/data/sparkline/sparkline.class.d.ts +17 -4
  180. package/dist/components/data/sparkline/sparkline.class.js +3 -3
  181. package/dist/components/data/sparkline/sparkline.styles.js +1 -1
  182. package/dist/components/data/table/table.class.d.ts +14 -10
  183. package/dist/components/data/table/table.class.js +17 -16
  184. package/dist/components/data/timeline/timeline.class.d.ts +5 -2
  185. package/dist/components/data/timeline/timeline.class.js +1 -1
  186. package/dist/components/data/tree/tree-item.class.js +1 -1
  187. package/dist/components/data/tree/tree-owner-controller.js +1 -1
  188. package/dist/components/data/tree/tree.class.d.ts +28 -6
  189. package/dist/components/data/tree/tree.class.js +3 -3
  190. package/dist/components/data/tree/tree.d.ts +1 -0
  191. package/dist/components/data/tree/tree.js +1 -1
  192. package/dist/components/data/word-cloud/word-cloud.class.d.ts +17 -7
  193. package/dist/components/data/word-cloud/word-cloud.class.js +6 -4
  194. package/dist/components/data/word-cloud/word-cloud.styles.js +1 -1
  195. package/dist/components/forms/catalog-picker-base.d.ts +1 -1
  196. package/dist/components/forms/catalog-picker-base.js +6 -6
  197. package/dist/components/forms/catalog-picker-base.styles.js +1 -1
  198. package/dist/components/forms/combobox/combobox.class.d.ts +7 -3
  199. package/dist/components/forms/combobox/combobox.class.js +1 -1
  200. package/dist/components/forms/combobox/option.class.d.ts +4 -2
  201. package/dist/components/forms/combobox/option.class.js +2 -2
  202. package/dist/components/forms/country-picker/country-picker.class.d.ts +3 -1
  203. package/dist/components/forms/country-picker/country-picker.class.js +1 -1
  204. package/dist/components/forms/currency-picker/currency-picker.class.d.ts +2 -0
  205. package/dist/components/forms/currency-picker/currency-picker.class.js +1 -1
  206. package/dist/components/forms/currency-picker/currency-presentation.js +1 -1
  207. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +6 -2
  208. package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -2
  209. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
  210. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +8 -2
  211. package/dist/components/forms/locale-picker/locale-picker.class.js +5 -4
  212. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  213. package/dist/components/forms/select/select.class.d.ts +11 -3
  214. package/dist/components/forms/select/select.class.js +4 -4
  215. package/dist/components/forms/time-zone-picker/time-zone-picker.class.d.ts +2 -0
  216. package/dist/components/forms/time-zone-picker/time-zone-picker.class.js +1 -1
  217. package/dist/components/forms/token-input/token-input.class.d.ts +6 -1
  218. package/dist/components/forms/token-input/token-input.class.js +15 -13
  219. package/dist/components/forms/unit-picker/unit-picker.class.d.ts +2 -0
  220. package/dist/components/forms/unit-picker/unit-picker.class.js +1 -1
  221. package/dist/components/layout/app-rail/app-rail.class.d.ts +1 -1
  222. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  223. package/dist/components/layout/command-palette/command-palette.class.d.ts +5 -2
  224. package/dist/components/layout/command-palette/command-palette.class.js +2 -1
  225. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  226. package/dist/components/layout/menu/menu-item.class.d.ts +2 -2
  227. package/dist/components/layout/menu/menu-item.class.js +2 -2
  228. package/dist/components/layout/menu/menu.class.d.ts +1 -1
  229. package/dist/components/layout/menu/menu.class.js +1 -1
  230. package/dist/components/layout/menubar/menubar.class.d.ts +1 -1
  231. package/dist/components/layout/menubar/menubar.class.js +1 -1
  232. package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -2
  233. package/dist/components/layout/reorder-list/reorder-item.class.js +2 -2
  234. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
  235. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  236. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +13 -9
  237. package/dist/components/layout/virtual-list/virtual-list.class.js +21 -17
  238. package/dist/components/media/av-player/av-cue-index.js +1 -0
  239. package/dist/components/media/av-player/av-cue-source.d.ts +13 -0
  240. package/dist/components/media/av-player/av-cue-source.js +1 -0
  241. package/dist/components/media/av-player/av-metadata.d.ts +2 -2
  242. package/dist/components/media/av-player/av-metadata.js +1 -1
  243. package/dist/components/media/av-player/av-player-cue-source-controller.js +1 -0
  244. package/dist/components/media/av-player/av-player.class.d.ts +34 -12
  245. package/dist/components/media/av-player/av-player.class.js +15 -10
  246. package/dist/components/media/flag/flag.class.js +1 -1
  247. package/dist/components/media/flag/language-map.js +1 -1
  248. package/dist/components/media/lightbox/lightbox-source.js +1 -0
  249. package/dist/components/media/lightbox/lightbox-types.d.ts +15 -0
  250. package/dist/components/media/lightbox/lightbox.class.d.ts +22 -21
  251. package/dist/components/media/lightbox/lightbox.class.js +6 -4
  252. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  253. package/dist/components/media/map/map-geojson-diff.d.ts +6 -6
  254. package/dist/components/media/map/map-geojson-diff.js +1 -1
  255. package/dist/components/media/map/map-loader.d.ts +5 -1
  256. package/dist/components/media/map/map.class.d.ts +24 -6
  257. package/dist/components/media/map/map.class.js +2 -2
  258. package/dist/components/media/map/map.styles.js +1 -1
  259. package/dist/components/media/video-playlist/video-playlist.class.d.ts +2 -1
  260. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  261. package/dist/components/overlays/chip/chip.class.d.ts +1 -1
  262. package/dist/components/overlays/chip/chip.class.js +1 -1
  263. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +30 -8
  264. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +22 -8
  265. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +1 -1
  266. package/dist/components/retrieval/graph/graph-canvas.js +1 -1
  267. package/dist/components/retrieval/graph/graph-source-composition.js +1 -0
  268. package/dist/components/retrieval/graph/graph-source-controller.js +1 -0
  269. package/dist/components/retrieval/graph/graph-spatial-controller.js +2 -2
  270. package/dist/components/retrieval/graph/graph-spatial-model.js +1 -0
  271. package/dist/components/retrieval/graph/graph-spatial.js +1 -1
  272. package/dist/components/retrieval/graph/graph.class.d.ts +31 -6
  273. package/dist/components/retrieval/graph/graph.class.js +26 -5
  274. package/dist/components/retrieval/graph/graph.d.ts +1 -1
  275. package/dist/components/retrieval/graph/graph.js +1 -1
  276. package/dist/components/retrieval/graph/graph.styles.js +1 -1
  277. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +33 -4
  278. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +27 -17
  279. package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts +1 -1
  280. package/dist/components/retrieval/ingestion-queue/ingestion-queue.js +1 -1
  281. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +1 -1
  282. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +27 -4
  283. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +29 -14
  284. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  285. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +17 -3
  286. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +15 -10
  287. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +1 -1
  288. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +24 -5
  289. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +17 -10
  290. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.d.ts +1 -1
  291. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.js +1 -1
  292. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  293. package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
  294. package/dist/components/retrieval/mind-map/mind-map-model.js +1 -0
  295. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +27 -4
  296. package/dist/components/retrieval/mind-map/mind-map.class.js +11 -7
  297. package/dist/components/retrieval/mind-map/mind-map.d.ts +1 -0
  298. package/dist/components/retrieval/mind-map/mind-map.js +1 -1
  299. package/dist/components/retrieval/mind-map/mind-map.styles.js +1 -1
  300. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +24 -2
  301. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +17 -3
  302. package/dist/components/retrieval/neighbor-list/neighbor-list.d.ts +1 -1
  303. package/dist/components/retrieval/neighbor-list/neighbor-list.js +1 -1
  304. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  305. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +8 -4
  306. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +11 -7
  307. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
  308. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +12 -6
  309. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +30 -17
  310. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  311. package/dist/components/retrieval/retrieval-results/retrieval-results-model.js +1 -0
  312. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +46 -5
  313. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +31 -9
  314. package/dist/components/retrieval/retrieval-results/retrieval-results.d.ts +1 -1
  315. package/dist/components/retrieval/retrieval-results/retrieval-results.js +1 -1
  316. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +1 -1
  317. package/dist/components/utility/diff-view/diff-view.class.d.ts +16 -8
  318. package/dist/components/utility/diff-view/diff-view.class.js +3 -2
  319. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  320. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +31 -3
  321. package/dist/components/utility/json-viewer/json-viewer.class.js +13 -4
  322. package/dist/components/utility/json-viewer/json-viewer.d.ts +1 -0
  323. package/dist/components/utility/json-viewer/json-viewer.js +1 -1
  324. package/dist/components/utility/json-viewer/json-viewer.styles.js +1 -1
  325. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +6 -4
  326. package/dist/components/utility/mention-popover/mention-popover.class.js +6 -5
  327. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +34 -7
  328. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +9 -7
  329. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +28 -4
  330. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +12 -11
  331. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +3 -1
  332. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +17 -16
  333. package/dist/components/viewers/geojson-view/geojson-viewer.d.ts +1 -1
  334. package/dist/components/viewers/geojson-view/geojson-viewer.js +1 -1
  335. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +31 -5
  336. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +11 -8
  337. package/dist/components/viewers/table-viewer-shared.js +19 -3
  338. package/dist/components/viewers/viewer-search-limits.js +1 -1
  339. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +35 -3
  340. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +20 -5
  341. package/dist/components/viewers/xml-viewer/xml-viewer.d.ts +1 -1
  342. package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
  343. package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +1 -1
  344. package/dist/countries.js +1 -1
  345. package/dist/data-sources.d.ts +34 -0
  346. package/dist/data-sources.js +1 -0
  347. package/dist/events.d.ts +51 -7
  348. package/dist/framework-types.d.ts +1 -1
  349. package/dist/internal/accessibility-visibility.d.ts +4 -2
  350. package/dist/internal/accessibility-visibility.js +1 -1
  351. package/dist/internal/accessible-text-controller.js +1 -1
  352. package/dist/internal/anchor-target.js +2 -2
  353. package/dist/internal/catalog-picker.d.ts +1 -7
  354. package/dist/internal/catalog-picker.js +1 -1
  355. package/dist/internal/collection-snapshot.js +1 -1
  356. package/dist/internal/default-strings/agent-tools.generated.js +1 -1
  357. package/dist/internal/default-strings/charts.generated.js +1 -1
  358. package/dist/internal/default-strings/conversation.generated.js +1 -1
  359. package/dist/internal/default-strings/data.generated.js +1 -1
  360. package/dist/internal/default-strings/forms.generated.js +1 -1
  361. package/dist/internal/default-strings/layout.generated.js +1 -1
  362. package/dist/internal/default-strings/media.generated.js +1 -1
  363. package/dist/internal/default-strings/retrieval.generated.js +1 -1
  364. package/dist/internal/default-strings/shared.generated.js +1 -1
  365. package/dist/internal/default-strings/utility.generated.js +1 -1
  366. package/dist/internal/delimited-data.js +1 -1
  367. package/dist/internal/fixed-containing-block.js +1 -1
  368. package/dist/internal/flow-scene-envelope.js +1 -0
  369. package/dist/internal/graph-scene-controller.js +1 -0
  370. package/dist/internal/hierarchy-source-controller.js +1 -0
  371. package/dist/internal/hierarchy-source-view.js +29 -0
  372. package/dist/internal/hierarchy-source-view.styles.js +1 -0
  373. package/dist/internal/inherited-attribute-hub.d.ts +6 -0
  374. package/dist/internal/inherited-attribute-hub.js +1 -1
  375. package/dist/internal/intl-cache.js +1 -1
  376. package/dist/internal/keyed-index.js +1 -0
  377. package/dist/internal/localization-types.d.ts +1 -1
  378. package/dist/internal/localization.js +2 -2
  379. package/dist/internal/lyra-element.d.ts +2 -2
  380. package/dist/internal/lyra-element.js +3 -2
  381. package/dist/internal/native-modal-context.js +1 -1
  382. package/dist/internal/option-selection.js +1 -1
  383. package/dist/internal/package-metadata.js +1 -1
  384. package/dist/internal/positioner.js +1 -1
  385. package/dist/internal/resource-loader.d.ts +2 -0
  386. package/dist/internal/resource-loader.js +1 -1
  387. package/dist/internal/scoped-definitions.generated.js +1 -1
  388. package/dist/internal/search-haystack.js +1 -0
  389. package/dist/internal/selection-catalog.d.ts +5 -0
  390. package/dist/internal/selection-catalog.js +1 -1
  391. package/dist/internal/shiki-language-sources.js +1 -0
  392. package/dist/internal/source-page-controller.js +1 -0
  393. package/dist/internal/source-page-scope.js +1 -0
  394. package/dist/internal/source-request-controller.js +1 -0
  395. package/dist/internal/source-window-controller.js +1 -0
  396. package/dist/internal/spatial-source-controller.js +1 -0
  397. package/dist/internal/text-quote.d.ts +2 -6
  398. package/dist/internal/text-quote.js +1 -1
  399. package/dist/internal/theme-watcher.js +1 -1
  400. package/dist/internal/virtual-list-composition.js +1 -0
  401. package/dist/lyra.d.ts +1 -1
  402. package/dist/lyra.js +1 -1
  403. package/dist/testing/interaction-drivers.js +1 -1
  404. package/dist/testing/lyra-tag-event-map.js +1 -1
  405. package/dist/units.js +1 -1
  406. package/dist/utilities/data-preparation.d.ts +56 -0
  407. package/dist/utilities/data-preparation.js +1 -0
  408. package/dist/utilities/data-spatial.d.ts +26 -0
  409. package/dist/utilities/data-spatial.js +1 -0
  410. package/dist/utilities/index.d.ts +1 -1
  411. package/dist/utilities/index.js +1 -1
  412. package/llms/components/lr-activity-feed.md +7 -2
  413. package/llms/components/lr-agent-trace.md +49 -9
  414. package/llms/components/lr-agent-workspace.md +15 -8
  415. package/llms/components/lr-av-player.md +180 -10
  416. package/llms/components/lr-bar-chart.md +1 -1
  417. package/llms/components/lr-box-plot.md +8 -0
  418. package/llms/components/lr-bubble-chart.md +1 -1
  419. package/llms/components/lr-calendar.md +26 -3
  420. package/llms/components/lr-chart.md +310 -23
  421. package/llms/components/lr-chat-viewport.md +6 -0
  422. package/llms/components/lr-code-block-core.md +12 -7
  423. package/llms/components/lr-code-block.md +23 -9
  424. package/llms/components/lr-combobox.md +27 -15
  425. package/llms/components/lr-command-palette.md +16 -3
  426. package/llms/components/lr-country-picker.md +23 -6
  427. package/llms/components/lr-csv-viewer.md +95 -12
  428. package/llms/components/lr-currency-picker.md +23 -3
  429. package/llms/components/lr-data-grid.md +24 -6
  430. package/llms/components/lr-dataset-viewer.md +92 -11
  431. package/llms/components/lr-dialog.md +1 -1
  432. package/llms/components/lr-diff-view.md +19 -6
  433. package/llms/components/lr-document-library.md +60 -5
  434. package/llms/components/lr-doughnut-chart.md +1 -1
  435. package/llms/components/lr-embedding-explorer.md +89 -9
  436. package/llms/components/lr-emoji-picker.md +7 -2
  437. package/llms/components/lr-eval-dataset.md +56 -7
  438. package/llms/components/lr-eval-result.md +89 -4
  439. package/llms/components/lr-export-button.md +1 -1
  440. package/llms/components/lr-file-tree.md +60 -6
  441. package/llms/components/lr-flag.md +5 -2
  442. package/llms/components/lr-flow-canvas.md +152 -14
  443. package/llms/components/lr-flow-minimap.md +32 -4
  444. package/llms/components/lr-funnel.md +14 -0
  445. package/llms/components/lr-geojson-viewer.md +27 -10
  446. package/llms/components/lr-graph.md +43 -7
  447. package/llms/components/lr-heatmap.md +161 -5
  448. package/llms/components/lr-histogram.md +55 -9
  449. package/llms/components/lr-ingestion-queue.md +54 -3
  450. package/llms/components/lr-json-viewer.md +87 -7
  451. package/llms/components/lr-knowledge-base-admin.md +60 -4
  452. package/llms/components/lr-knowledge-base.md +121 -9
  453. package/llms/components/lr-knowledge-graph-explorer.md +106 -11
  454. package/llms/components/lr-lightbox.md +42 -6
  455. package/llms/components/lr-line-chart.md +28 -5
  456. package/llms/components/lr-lite-chart.md +96 -31
  457. package/llms/components/lr-locale-picker.md +6 -4
  458. package/llms/components/lr-map.md +67 -8
  459. package/llms/components/lr-markdown-core.md +10 -5
  460. package/llms/components/lr-markdown.md +23 -6
  461. package/llms/components/lr-mention-popover.md +11 -6
  462. package/llms/components/lr-mind-map.md +91 -10
  463. package/llms/components/lr-model-select.md +8 -4
  464. package/llms/components/lr-model-settings-panel.md +10 -2
  465. package/llms/components/lr-navigation-menu.md +1 -1
  466. package/llms/components/lr-neighbor-list.md +69 -2
  467. package/llms/components/lr-pie-chart.md +1 -1
  468. package/llms/components/lr-polar-area-chart.md +1 -1
  469. package/llms/components/lr-prompt-input.md +9 -2
  470. package/llms/components/lr-prompt-queue.md +11 -3
  471. package/llms/components/lr-radar-chart.md +1 -1
  472. package/llms/components/lr-rag-eval-dashboard.md +9 -2
  473. package/llms/components/lr-realtime-session.md +6 -2
  474. package/llms/components/lr-reorder-list.md +4 -0
  475. package/llms/components/lr-retrieval-compare.md +9 -4
  476. package/llms/components/lr-retrieval-results.md +104 -6
  477. package/llms/components/lr-scatter-chart.md +1 -1
  478. package/llms/components/lr-select.md +20 -10
  479. package/llms/components/lr-sequence-strip.md +92 -2
  480. package/llms/components/lr-span-waterfall.md +78 -8
  481. package/llms/components/lr-sparkline.md +42 -11
  482. package/llms/components/lr-spreadsheet-viewer.md +109 -14
  483. package/llms/components/lr-streaming-text-core.md +4 -2
  484. package/llms/components/lr-streaming-text.md +5 -1
  485. package/llms/components/lr-table.md +96 -115
  486. package/llms/components/lr-task-list.md +93 -9
  487. package/llms/components/lr-terminal.md +9 -0
  488. package/llms/components/lr-test-results.md +77 -3
  489. package/llms/components/lr-thread-list.md +86 -1
  490. package/llms/components/lr-time-zone-picker.md +8 -3
  491. package/llms/components/lr-timeline.md +5 -0
  492. package/llms/components/lr-token-input.md +7 -2
  493. package/llms/components/lr-tool-timeline.md +13 -4
  494. package/llms/components/lr-trace-tree.md +96 -10
  495. package/llms/components/lr-transcript-feed.md +9 -2
  496. package/llms/components/lr-tree.md +87 -15
  497. package/llms/components/lr-unit-picker.md +8 -3
  498. package/llms/components/lr-video-playlist.md +2 -0
  499. package/llms/components/lr-virtual-list.md +17 -8
  500. package/llms/components/lr-voice-picker.md +8 -3
  501. package/llms/components/lr-word-cloud.md +128 -12
  502. package/llms/components/lr-xml-viewer.md +106 -9
  503. package/llms/index.md +1 -1
  504. package/llms/peers.md +1 -1
  505. package/llms/shared/events-and-types.md +725 -264
  506. package/llms/shared/forms-and-accessibility.md +3 -17
  507. package/llms/shared/imports-and-registration.md +3 -17
  508. package/llms/shared/localization-and-rtl.md +0 -2
  509. package/llms/shared/styles-and-tokens.md +27 -36
  510. package/llms/shared/testing-and-utilities.md +4 -5
  511. package/llms/shared.md +770 -349
  512. package/llms.txt +1 -2
  513. package/locales.json +139 -139
  514. package/package.json +13 -4
  515. package/registrations.json +1 -1
  516. package/skills/compose-lyra-interfaces/SKILL.md +6 -8
  517. package/skills/lyra-ui/SKILL.md +20 -51
  518. package/skills/lyra-ui/commands/review.md +16 -33
  519. package/skills/lyra-ui/commands/update.md +6 -5
  520. package/skills/lyra-ui/online-api.md +15 -0
  521. package/skills/lyra-ui/reporting.md +2 -1
@@ -64,7 +64,9 @@ value:string;
64
64
  /** Disable selecting this option. */
65
65
  disabled:boolean;
66
66
  /** Whether this option is currently selected. Parent controls write this live, property-only
67
- * state without changing `defaultSelected` or the declarative reset attribute.
67
+ * state without changing `defaultSelected` or the declarative reset attribute. Consumer writes
68
+ * update this option immediately; select/combobox parent selection and form state settle in
69
+ * the next microtask. Multiple writes share one reconciliation and emit no parent value events.
68
70
  * @default false */
69
71
  get selected():boolean;set selected(next:boolean);
70
72
  /** Declarative/reset selection default supplied by the `selected` attribute. Property writes
@@ -94,6 +96,6 @@ data?:unknown;
94
96
  */
95
97
  get label():string;set label(next:string);
96
98
  /** Accessible text generated from flattened default-slot content, excluding named adornments. */
97
- get defaultLabel():string;private computeDefaultLabel;private readonly labelTextObserver;private observedDefaultLabel;private cachedDefaultLabel?;private readonly handlePointerEnter;private readonly handlePointerLeave;private readonly handleFocusIn;private readonly handleFocusOut;private readonly handleLabelMutation;private isDefaultLabelNode;private labelForwardingSlots;private sourceParentForLabelNode;private isClosedSourceDetailsBranch;private isSourceLabelVisible;private handleLabelSlotChange;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private handleLabelRecords;protected updated(changed:PropertyValues):void;private syncOptionState;
99
+ get defaultLabel():string;private computeDefaultLabel;private readonly labelTextObserver;private observedDefaultLabel;private cachedDefaultLabel?;private readonly handlePointerEnter;private readonly handlePointerLeave;private readonly handleFocusIn;private readonly handleFocusOut;private readonly handleLabelMutation;private isDefaultLabelNode;private labelForwardingSlots;private sourceParentForLabelNode;private isClosedSourceDetailsBranch;private isSourceLabelVisible;private handleLabelSlotChange;private inertAncestorReleases;private bindInertAncestors;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private handleLabelRecords;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private syncOptionState;
98
100
  /** Returns an accessibility-visible label generated from flattened default-slot content. */
99
101
  getTextLabel():string;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-option':LyraOption;}}
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{html,svg}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{AccessibleTextController}from"../../../internal/accessible-text-controller.js";import{setCustomState}from"../../../internal/custom-states.js";import{attachInternalsSafely}from"../../../internal/element-internals.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{isAccessibilitySubtreeExcluded,isAccessibilityVisibilityHidden}from"../../../internal/a11y.js";import{composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{markOptionSelectedDirty,notifyOptionSelectedWrite,RESET_OPTION_SELECTED_FROM_OWNER,SET_OPTION_SELECTED_FROM_OWNER}from"../../../internal/option-selection.js";import{styles}from"./option.styles.js";const GLYPH_VIEW_BOX="0 0 24 24",GLYPH_STROKE_WIDTH="1.75";function checkmarkGlyph(){return svg`
1
+ import{__decorate}from"tslib";import{subscribeInheritedAttributes}from"../../../internal/inherited-attribute-hub.js";import{composedParentElement}from"../../../internal/active-element.js";import{html,svg}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{AccessibleTextController}from"../../../internal/accessible-text-controller.js";import{setCustomState}from"../../../internal/custom-states.js";import{attachInternalsSafely}from"../../../internal/element-internals.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{isAccessibilitySubtreeExcluded,isAccessibilityVisibilityHidden}from"../../../internal/a11y.js";import{composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{markOptionSelectedDirty,notifyOptionSelectedWrite,RESET_OPTION_SELECTED_FROM_OWNER,SET_OPTION_SELECTED_FROM_OWNER}from"../../../internal/option-selection.js";import{styles}from"./option.styles.js";const GLYPH_VIEW_BOX="0 0 24 24",GLYPH_STROKE_WIDTH="1.75";function checkmarkGlyph(){return svg`
2
2
  <svg
3
3
  width="1em"
4
4
  height="1em"
@@ -11,7 +11,7 @@ import{__decorate}from"tslib";import{html,svg}from"lit";import{property}from"lit
11
11
  aria-hidden="true"
12
12
  focusable="false"
13
13
  ><polyline points="5 12.5 10 17.5 19 6.5"></polyline></svg>
14
- `}class LyraOption extends LyraElement{constructor(){super(...arguments),this.slotPresence=new SlotPresenceController(this),this.optionInternals=attachInternalsSafely(this),this.hasHover=!1,this.hasCurrent=!1,this._label="",this.selectedValue=!1,this.defaultSelectedValue=!1,this.selectedDirty=!1,this.value="",this.disabled=!1,this.title="",this.group="",this.searchText="",this.sub="",this.dotColor="",this.labelTextObserver=new AccessibleTextController(this,[],records=>this.handleLabelRecords([...records]),["slot","title"]),this.observedDefaultLabel="",this.handlePointerEnter=()=>{this.hasHover=!0,this.syncOptionState()},this.handlePointerLeave=()=>{this.hasHover=!1,this.syncOptionState()},this.handleFocusIn=()=>{this.hasCurrent=!0,this.syncOptionState()},this.handleFocusOut=()=>{this.hasCurrent=!1,this.syncOptionState()},this.handleLabelMutation=(presentationChanged=!1)=>{const next=this.defaultLabel;next===this.observedDefaultLabel&&!presentationChanged||(this.observedDefaultLabel=next,this.requestUpdate(),this.emit("lr-option-change"))},this.handleLabelSlotChange=event=>{const target=event.target;target?.nodeType!==1||target.localName!=="slot"||target.getRootNode()!==this.renderRoot&&!this.labelForwardingSlots().includes(target)||(this.cachedDefaultLabel=void 0,this.labelTextObserver.bind(),this.handleLabelMutation())}}static{this.styles=[LyraElement.styles,styles]}get selected(){return this.selectedValue}set selected(next){this.setLiveSelected(next,!0),notifyOptionSelectedWrite(this,()=>this.emit("lr-option-change"))}get defaultSelected(){return this.defaultSelectedValue}set defaultSelected(next){const normalized=!!next,old=this.defaultSelectedValue;old!==normalized&&(this.defaultSelectedValue=normalized,this.selectedDirty||this.setLiveSelected(normalized,!1),this.requestUpdate("defaultSelected",old))}setLiveSelected(next,dirty){dirty&&(this.selectedDirty=!0,markOptionSelectedDirty(this,!0));const normalized=!!next,old=this.selectedValue;old!==normalized&&(this.selectedValue=normalized,this.requestUpdate("selected",old))}[SET_OPTION_SELECTED_FROM_OWNER](next){this.selectedDirty||markOptionSelectedDirty(this,!1),this.setLiveSelected(next,!1)}[RESET_OPTION_SELECTED_FROM_OWNER](next){this.selectedDirty=!1,markOptionSelectedDirty(this,!1),this.setLiveSelected(next,!1)}get label(){return this._label.trim()||this.defaultLabel}set label(next){const normalized=String(next??""),old=this._label;old!==normalized&&(this._label=normalized,this.requestUpdate("label",old))}get defaultLabel(){if(!("childNodes"in this))return"";const pending=this.labelTextObserver.takeRecords();if(pending.length){this.cachedDefaultLabel=void 0;const ownerDocument=this.ownerDocument;queueMicrotask(()=>{this.isConnected&&this.ownerDocument===ownerDocument&&this.handleLabelRecords(pending)})}return this.isConnected?this.cachedDefaultLabel??=this.computeDefaultLabel():this.computeDefaultLabel()}computeDefaultLabel(){const roots=Array.from(this.childNodes??[]).filter(node=>this.isDefaultLabelNode(node));return composedAccessibilityText(roots,{requireRendered:!1,shouldPruneNode:node=>!this.contains(node)&&!this.isSourceLabelVisible(node),skipRootAncestorValidation:!0}).replace(/\s+/g," ").trim()}isDefaultLabelNode(node){if(node.nodeType!==1)return!0;const slotName=node.getAttribute("slot");return slotName===null||slotName===""}labelForwardingSlots(){return Array.from(this.querySelectorAll("slot")).filter(slot=>{let top=slot;for(;top.parentNode&&top.parentNode!==this;)top=top.parentNode;return top.parentNode===this&&this.isDefaultLabelNode(top)})}sourceParentForLabelNode(node){if(node.parentElement)return node.parentElement;const root=node.getRootNode();return"host"in root&&root.host.nodeType===1?root.host:null}isClosedSourceDetailsBranch(details,branch){if(details.localName!=="details"||details.hasAttribute("open")||branch===null)return!1;const summary=Array.from(details.children).find(child=>child.localName==="summary");return branch!==summary}isSourceLabelVisible(node){const target=node.nodeType===1?node:this.sourceParentForLabelNode(node);if(!target?.isConnected||isAccessibilitySubtreeExcluded(target)||isAccessibilityVisibilityHidden(target))return!1;let branch=target,ancestor=this.sourceParentForLabelNode(target);for(;ancestor;){if(isAccessibilitySubtreeExcluded(ancestor)||this.isClosedSourceDetailsBranch(ancestor,branch))return!1;branch=ancestor,ancestor=this.sourceParentForLabelNode(ancestor)}return!0}connectedCallback(){super.connectedCallback(),this.addEventListener("pointerenter",this.handlePointerEnter),this.addEventListener("pointerleave",this.handlePointerLeave),this.addEventListener("focusin",this.handleFocusIn),this.addEventListener("focusout",this.handleFocusOut),this.syncOptionState(),this.addEventListener("slotchange",this.handleLabelSlotChange),this.cachedDefaultLabel=void 0,this.observedDefaultLabel=this.defaultLabel}disconnectedCallback(){this.removeEventListener("pointerenter",this.handlePointerEnter),this.removeEventListener("pointerleave",this.handlePointerLeave),this.removeEventListener("focusin",this.handleFocusIn),this.removeEventListener("focusout",this.handleFocusOut),this.removeEventListener("slotchange",this.handleLabelSlotChange),this.hasHover=!1,this.hasCurrent=!1,this.syncOptionState(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.cachedDefaultLabel=void 0,this.labelTextObserver.adopted()}handleLabelRecords(records){this.cachedDefaultLabel=void 0;const presentationChanged=records.some(record=>{if(record.type==="attributes"&&record.attributeName==="inert"||record.type==="attributes"&&record.attributeName==="slot"&&this.contains(record.target))return!0;let node=record.target;for(;node&&node!==this&&node.parentNode!==this;)node=node.parentNode;return node&&node!==this&&!this.isDefaultLabelNode(node)?!0:record.type==="childList"&&record.target===this&&[...record.addedNodes,...record.removedNodes].some(child=>!this.isDefaultLabelNode(child))});this.handleLabelMutation(presentationChanged)}shouldUpdate(changed){return this.hasUpdated&&changed.size===1&&changed.has("label")&&!this.labelTextObserver.hasDrainedRecords()?(queueMicrotask(()=>this.emit("lr-option-change")),!1):super.shouldUpdate(changed)}updated(changed){super.updated(changed),changed.has("disabled")&&this.disabled&&(this.hasCurrent=!1),this.syncOptionState(),(changed.has("value")||changed.has("disabled")||changed.has("group")||changed.has("title")||changed.has("searchText")||changed.has("sub")||changed.has("dotColor")||changed.has("label")||changed.has("defaultSelected")||changed.has("data"))&&this.emit("lr-option-change")}syncOptionState(){this.optionInternals.role="option",this.optionInternals.ariaSelected=this.selected?"true":"false",this.optionInternals.ariaDisabled=this.disabled?"true":"false",setCustomState(this.optionInternals,"current",this.hasCurrent&&!this.disabled),setCustomState(this.optionInternals,"selected",this.selected),setCustomState(this.optionInternals,"disabled",this.disabled),setCustomState(this.optionInternals,"hover",this.hasHover&&!this.disabled)}getTextLabel(){return this.defaultLabel}render(){const hasStart=this.slotPresence.has("start")||this.slotPresence.has("prefix"),hasEnd=this.slotPresence.has("end")||this.slotPresence.has("suffix");return html`
14
+ `}class LyraOption extends LyraElement{constructor(){super(...arguments),this.slotPresence=new SlotPresenceController(this),this.optionInternals=attachInternalsSafely(this),this.hasHover=!1,this.hasCurrent=!1,this._label="",this.selectedValue=!1,this.defaultSelectedValue=!1,this.selectedDirty=!1,this.value="",this.disabled=!1,this.title="",this.group="",this.searchText="",this.sub="",this.dotColor="",this.labelTextObserver=new AccessibleTextController(this,[],records=>this.handleLabelRecords([...records]),["slot","title"],!0,!1,()=>this.labelForwardingSlots().length>0),this.observedDefaultLabel="",this.handlePointerEnter=()=>{this.hasHover=!0,this.syncOptionState()},this.handlePointerLeave=()=>{this.hasHover=!1,this.syncOptionState()},this.handleFocusIn=()=>{this.hasCurrent=!0,this.syncOptionState()},this.handleFocusOut=()=>{this.hasCurrent=!1,this.syncOptionState()},this.handleLabelMutation=(presentationChanged=!1)=>{const next=this.defaultLabel;next===this.observedDefaultLabel&&!presentationChanged||(this.observedDefaultLabel=next,this.requestUpdate(),this.emit("lr-option-change"))},this.handleLabelSlotChange=event=>{const target=event.target;target?.nodeType!==1||target.localName!=="slot"||target.getRootNode()!==this.renderRoot&&!this.labelForwardingSlots().includes(target)||(this.cachedDefaultLabel=void 0,this.labelTextObserver.bind(),this.handleLabelMutation())},this.inertAncestorReleases=[]}static{this.styles=[LyraElement.styles,styles]}get selected(){return this.selectedValue}set selected(next){this.setLiveSelected(next,!0),notifyOptionSelectedWrite(this,()=>this.emit("lr-option-change"))}get defaultSelected(){return this.defaultSelectedValue}set defaultSelected(next){const normalized=!!next,old=this.defaultSelectedValue;old!==normalized&&(this.defaultSelectedValue=normalized,this.selectedDirty||this.setLiveSelected(normalized,!1),this.requestUpdate("defaultSelected",old))}setLiveSelected(next,dirty){dirty&&(this.selectedDirty=!0,markOptionSelectedDirty(this,!0));const normalized=!!next,old=this.selectedValue;old!==normalized&&(this.selectedValue=normalized,this.requestUpdate("selected",old))}[SET_OPTION_SELECTED_FROM_OWNER](next){this.selectedDirty||markOptionSelectedDirty(this,!1),this.setLiveSelected(next,!1)}[RESET_OPTION_SELECTED_FROM_OWNER](next){this.selectedDirty=!1,markOptionSelectedDirty(this,!1),this.setLiveSelected(next,!1)}get label(){return this._label.trim()||this.defaultLabel}set label(next){const normalized=String(next??""),old=this._label;old!==normalized&&(this._label=normalized,this.requestUpdate("label",old))}get defaultLabel(){if(!("childNodes"in this))return"";const pending=this.labelTextObserver.takeRecords();if(pending.length){this.cachedDefaultLabel=void 0;const ownerDocument=this.ownerDocument;queueMicrotask(()=>{this.isConnected&&this.ownerDocument===ownerDocument&&this.handleLabelRecords(pending)})}return this.isConnected?this.cachedDefaultLabel??=this.computeDefaultLabel():this.computeDefaultLabel()}computeDefaultLabel(){const roots=Array.from(this.childNodes??[]).filter(node=>this.isDefaultLabelNode(node));return composedAccessibilityText(roots,{requireRendered:!1,shouldPruneNode:node=>!this.contains(node)&&!this.isSourceLabelVisible(node),skipRootAncestorValidation:!0}).replace(/\s+/g," ").trim()}isDefaultLabelNode(node){if(node.nodeType!==1)return!0;const slotName=node.getAttribute("slot");return slotName===null||slotName===""}labelForwardingSlots(){return Array.from(this.querySelectorAll("slot")).filter(slot=>{let top=slot;for(;top.parentNode&&top.parentNode!==this;)top=top.parentNode;return top.parentNode===this&&this.isDefaultLabelNode(top)})}sourceParentForLabelNode(node){if(node.parentElement)return node.parentElement;const root=node.getRootNode();return"host"in root&&root.host.nodeType===1?root.host:null}isClosedSourceDetailsBranch(details,branch){if(details.localName!=="details"||details.hasAttribute("open")||branch===null)return!1;const summary=Array.from(details.children).find(child=>child.localName==="summary");return branch!==summary}isSourceLabelVisible(node){const target=node.nodeType===1?node:this.sourceParentForLabelNode(node);if(!target?.isConnected||isAccessibilitySubtreeExcluded(target)||isAccessibilityVisibilityHidden(target))return!1;let branch=target,ancestor=this.sourceParentForLabelNode(target);for(;ancestor;){if(isAccessibilitySubtreeExcluded(ancestor)||this.isClosedSourceDetailsBranch(ancestor,branch))return!1;branch=ancestor,ancestor=this.sourceParentForLabelNode(ancestor)}return!0}bindInertAncestors(){for(const release of this.inertAncestorReleases.splice(0))release();const roots=new Map;for(let ancestor=composedParentElement(this);ancestor;ancestor=composedParentElement(ancestor)){const root=ancestor.getRootNode();let elements=roots.get(root);elements||roots.set(root,elements=new Set),elements.add(ancestor)}for(const[root,ancestors]of roots){const release=subscribeInheritedAttributes(root,this.ownerDocument.defaultView?.MutationObserver,{attributes:["inert"],changed:records=>{!this.labelForwardingSlots().length&&records.some(record=>ancestors.has(record.target))&&this.emit("lr-option-change")}});release&&this.inertAncestorReleases.push(release)}}connectedCallback(){super.connectedCallback(),this.addEventListener("pointerenter",this.handlePointerEnter),this.addEventListener("pointerleave",this.handlePointerLeave),this.addEventListener("focusin",this.handleFocusIn),this.addEventListener("focusout",this.handleFocusOut),this.syncOptionState(),this.addEventListener("slotchange",this.handleLabelSlotChange),this.cachedDefaultLabel=void 0,this.observedDefaultLabel=this.defaultLabel,this.bindInertAncestors()}disconnectedCallback(){for(const release of this.inertAncestorReleases.splice(0))release();this.removeEventListener("pointerenter",this.handlePointerEnter),this.removeEventListener("pointerleave",this.handlePointerLeave),this.removeEventListener("focusin",this.handleFocusIn),this.removeEventListener("focusout",this.handleFocusOut),this.removeEventListener("slotchange",this.handleLabelSlotChange),this.hasHover=!1,this.hasCurrent=!1,this.syncOptionState(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.cachedDefaultLabel=void 0,this.labelTextObserver.adopted(),this.isConnected&&this.bindInertAncestors()}handleLabelRecords(records){this.cachedDefaultLabel=void 0;const presentationChanged=records.some(record=>{if(record.type==="attributes"&&record.attributeName==="inert"||record.type==="attributes"&&record.attributeName==="slot"&&this.contains(record.target))return!0;let node=record.target;for(;node&&node!==this&&node.parentNode!==this;)node=node.parentNode;return node&&node!==this&&!this.isDefaultLabelNode(node)?!0:record.type==="childList"&&record.target===this&&[...record.addedNodes,...record.removedNodes].some(child=>!this.isDefaultLabelNode(child))});this.handleLabelMutation(presentationChanged)}shouldUpdate(changed){return this.hasUpdated&&changed.size===1&&changed.has("label")&&!this.labelTextObserver.hasDrainedRecords()?(queueMicrotask(()=>this.emit("lr-option-change")),!1):super.shouldUpdate(changed)}willUpdate(changed){super.willUpdate(changed),this.hasUpdated&&!changed.has("label")&&!changed.has("slot")&&this.labelTextObserver.preserveBindingForNextUpdate()}updated(changed){super.updated(changed),changed.has("disabled")&&this.disabled&&(this.hasCurrent=!1),this.syncOptionState(),(changed.has("value")||changed.has("disabled")||changed.has("group")||changed.has("title")||changed.has("searchText")||changed.has("sub")||changed.has("dotColor")||changed.has("label")||changed.has("defaultSelected")||changed.has("data"))&&this.emit("lr-option-change")}syncOptionState(){this.optionInternals.role="option",this.optionInternals.ariaSelected=this.selected?"true":"false",this.optionInternals.ariaDisabled=this.disabled?"true":"false",setCustomState(this.optionInternals,"current",this.hasCurrent&&!this.disabled),setCustomState(this.optionInternals,"selected",this.selected),setCustomState(this.optionInternals,"disabled",this.disabled),setCustomState(this.optionInternals,"hover",this.hasHover&&!this.disabled)}getTextLabel(){return this.defaultLabel}render(){const hasStart=this.slotPresence.has("start")||this.slotPresence.has("prefix"),hasEnd=this.slotPresence.has("end")||this.slotPresence.has("suffix");return html`
15
15
  <div part="base">
16
16
  <span part="checked-icon" aria-hidden="true" inert ?hidden=${!this.selected}>
17
17
  ${checkmarkGlyph()}
@@ -1,4 +1,4 @@
1
- import{nothing,type TemplateResult}from'lit';import{type SelectionCatalogRow}from'../../../internal/selection-catalog.js';import{LyraCatalogPickerBase,type LyraCatalogPickerChangeDetail,type LyraCatalogPickerEventMap}from'../catalog-picker-base.js';import{type LyraCountryCatalog,type LyraCountryEntry}from'../../../countries.js';export type{LyraCountryCatalog,LyraCountryEntry}from'../../../countries.js';export type LyraCountryChangeDetail=LyraCatalogPickerChangeDetail;export interface LyraCountryPickerEventMap extends LyraCatalogPickerEventMap{}
1
+ import{nothing,type TemplateResult}from'lit';import type{SelectionCatalogRow}from'../../../internal/selection-catalog.js';import{LyraCatalogPickerBase,type LyraCatalogPickerChangeDetail,type LyraCatalogPickerEventMap}from'../catalog-picker-base.js';import{type LyraCountryCatalog,type LyraCountryEntry}from'../../../countries.js';export type{LyraCountryCatalog,LyraCountryEntry}from'../../../countries.js';export type LyraCountryChangeDetail=LyraCatalogPickerChangeDetail;export interface LyraCountryPickerEventMap extends LyraCatalogPickerEventMap{}
2
2
  /**
3
3
  * `<lr-country-picker>` — a form-associated country and territory selector.
4
4
  * Defaults to the pinned 249-code ISO catalog, localized names and decorative emoji flags.
@@ -16,11 +16,13 @@ import{nothing,type TemplateResult}from'lit';import{type SelectionCatalogRow}fro
16
16
  * @csspart select-trigger - The visible trigger or filter frame.
17
17
  * @csspart select-display-input - The committed name or optional filter input.
18
18
  * @csspart select-listbox - The offered countries.
19
+ * @csspart select-option-overflow - Count of rows outside the 1,000-option popup ceiling; searchable mode can filter to them.
19
20
  * @csspart select-option - A country option.
20
21
  * @csspart select-option-sub - The country identifier.
21
22
  * @csspart select-group-label - A caller-provided group heading.
22
23
  * @csspart select-clear-button - The optional clear action.
23
24
  * @csspart flag - Decorative country flag emoji.
25
+ * @csspart limit - Catalog input-loss notice, separate from the popup render-window overflow.
24
26
  * @csspart hint - Field guidance.
25
27
  * @csspart error - Validation guidance.
26
28
  * @event {Event} input - User selection changed the committed value and form state.
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{snapshotSelectionCatalog}from"../../../internal/selection-catalog.js";import{LyraCatalogPickerBase}from"../catalog-picker-base.js";import{COUNTRY_CODES,resolveCountryNames}from"../../../countries.js";import{styles}from"./country-picker.styles.js";import{LyraElement}from"../../../internal/lyra-element.js";import{LYRA_DEFAULT_countryPickerLabel}from"../../../internal/default-strings/forms.generated.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_notInCatalog,LYRA_DEFAULT_select}from"../../../internal/default-strings/shared.generated.js";const defaultEntries=Object.freeze(COUNTRY_CODES.map(code=>Object.freeze({code})));function normalizeCountry(value){const text=typeof value=="string"?value.trim():"";return/^[A-Za-z]{2}$/.test(text)?text.toUpperCase():text}class LyraCountryPicker extends LyraCatalogPickerBase{constructor(){super(...arguments),this.flags=!0}static{this.defaultStrings={...super.defaultStrings,countryPickerLabel:LYRA_DEFAULT_countryPickerLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,notInCatalog:LYRA_DEFAULT_notInCatalog,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get countries(){return this._countries}set countries(value){const previous=this._countries;this._countries=snapshotSelectionCatalog(value,normalizeCountry,code=>/^[A-Z]{2}$/.test(code)),this.updateValidity(),this.requestUpdate("countries",previous)}get entries(){return this._countries??defaultEntries}get pickerLabel(){return this.localize("countryPickerLabel")}normalizeValue(value){return normalizeCountry(value)}resolveRows(){return resolveCountryNames(this.entries,this.effectiveLocale)}renderAdornment(row){if(!this.flags||!/^[A-Z]{2}$/.test(row.code))return nothing;const emoji=String.fromCodePoint(...[...row.code].map(char=>char.charCodeAt(0)+127397));return html`<span part="flag" aria-hidden="true">${emoji}</span>`}}__decorate([property({converter:trueDefaultBooleanConverter})],LyraCountryPicker.prototype,"flags",void 0),__decorate([property({attribute:!1})],LyraCountryPicker.prototype,"countries",null);export{LyraCountryPicker};
1
+ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraCatalogPickerBase}from"../catalog-picker-base.js";import{COUNTRY_CODES,resolveCountryNames,snapshotCountryCatalog}from"../../../countries.js";import{styles}from"./country-picker.styles.js";import{LyraElement}from"../../../internal/lyra-element.js";import{LYRA_DEFAULT_countryPickerLabel}from"../../../internal/default-strings/forms.generated.js";import{LYRA_DEFAULT_catalogPickerInputLimit,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_notInCatalog,LYRA_DEFAULT_select}from"../../../internal/default-strings/shared.generated.js";const defaultEntries=Object.freeze(COUNTRY_CODES.map(code=>Object.freeze({code})));function normalizeCountry(value){const text=typeof value=="string"?value.trim():"";return/^[A-Za-z]{2}$/.test(text)?text.toUpperCase():text}class LyraCountryPicker extends LyraCatalogPickerBase{constructor(){super(...arguments),this.flags=!0}static{this.defaultStrings={...super.defaultStrings,catalogPickerInputLimit:LYRA_DEFAULT_catalogPickerInputLimit,countryPickerLabel:LYRA_DEFAULT_countryPickerLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,notInCatalog:LYRA_DEFAULT_notInCatalog,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get countries(){return this._countries}set countries(value){const previous=this._countries;this._countries=snapshotCountryCatalog(value),this.updateValidity(),this.requestUpdate("countries",previous)}get entries(){return this._countries??defaultEntries}get pickerLabel(){return this.localize("countryPickerLabel")}normalizeValue(value){return normalizeCountry(value)}resolveRows(){return resolveCountryNames(this.entries,this.effectiveLocale)}renderAdornment(row){if(!this.flags||!/^[A-Z]{2}$/.test(row.code))return nothing;const emoji=String.fromCodePoint(...[...row.code].map(char=>char.charCodeAt(0)+127397));return html`<span part="flag" aria-hidden="true">${emoji}</span>`}}__decorate([property({converter:trueDefaultBooleanConverter})],LyraCountryPicker.prototype,"flags",void 0),__decorate([property({attribute:!1})],LyraCountryPicker.prototype,"countries",null);export{LyraCountryPicker};
@@ -27,10 +27,12 @@ import{type SelectionCatalogRow}from'../../../internal/selection-catalog.js';imp
27
27
  * @csspart select-trigger - The select trigger or searchable input container.
28
28
  * @csspart select-display-input - The selected code or editable filter input.
29
29
  * @csspart select-listbox - The currency listbox.
30
+ * @csspart select-option-overflow - Count of rows outside the 1,000-option popup ceiling; searchable mode can filter to them.
30
31
  * @csspart select-option - A currency option.
31
32
  * @csspart select-option-sub - The option descriptive subtext.
32
33
  * @csspart select-group-label - A caller-supplied contiguous group heading.
33
34
  * @csspart select-clear-button - The optional clear action.
35
+ * @csspart limit - Catalog input-loss notice, separate from the popup render-window overflow.
34
36
  * @csspart hint - Field guidance.
35
37
  * @csspart error - Validation guidance.
36
38
  * @event {Event} input - Fired after a user selection updates the committed value and form state.
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{snapshotSelectionCatalog}from"../../../internal/selection-catalog.js";import{LyraCatalogPickerBase}from"../catalog-picker-base.js";import{styles}from"./currency-picker.styles.js";import{DEFAULT_CURRENCY_ENTRIES,normalizeCurrencyValue}from"./currency-catalog.js";import{resolveCurrencyPresentation}from"./currency-presentation.js";import{LYRA_DEFAULT_currencyPickerLabel}from"../../../internal/default-strings/forms.generated.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_notInCatalog,LYRA_DEFAULT_select}from"../../../internal/default-strings/shared.generated.js";class LyraCurrencyPicker extends LyraCatalogPickerBase{static{this.defaultStrings={...super.defaultStrings,currencyPickerLabel:LYRA_DEFAULT_currencyPickerLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,notInCatalog:LYRA_DEFAULT_notInCatalog,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get currencies(){return this._currencies}set currencies(next){const previous=this._currencies;this._currencies=snapshotSelectionCatalog(next,normalizeCurrencyValue,code=>/^[A-Z]{3}$/.test(code)),this.updateValidity(),this.requestUpdate("currencies",previous)}get entries(){return this._currencies??DEFAULT_CURRENCY_ENTRIES}get pickerLabel(){return this.localize("currencyPickerLabel")}normalizeValue(value){return normalizeCurrencyValue(value)}resolveRows(){return resolveCurrencyPresentation(this.entries,this.effectiveLocale)}optionDisplay(row){return{label:row.code,sub:[row.label,row.symbol].filter(text=>!!text).join(" · ")}}}__decorate([property({attribute:!1})],LyraCurrencyPicker.prototype,"currencies",null);export{LyraCurrencyPicker};
1
+ import{__decorate}from"tslib";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{snapshotSelectionCatalog}from"../../../internal/selection-catalog.js";import{LyraCatalogPickerBase}from"../catalog-picker-base.js";import{styles}from"./currency-picker.styles.js";import{DEFAULT_CURRENCY_ENTRIES,normalizeCurrencyValue}from"./currency-catalog.js";import{resolveCurrencyPresentation}from"./currency-presentation.js";import{LYRA_DEFAULT_currencyPickerLabel}from"../../../internal/default-strings/forms.generated.js";import{LYRA_DEFAULT_catalogPickerInputLimit,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_notInCatalog,LYRA_DEFAULT_select}from"../../../internal/default-strings/shared.generated.js";class LyraCurrencyPicker extends LyraCatalogPickerBase{static{this.defaultStrings={...super.defaultStrings,catalogPickerInputLimit:LYRA_DEFAULT_catalogPickerInputLimit,currencyPickerLabel:LYRA_DEFAULT_currencyPickerLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,notInCatalog:LYRA_DEFAULT_notInCatalog,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get currencies(){return this._currencies}set currencies(next){const previous=this._currencies;this._currencies=snapshotSelectionCatalog(next,normalizeCurrencyValue,code=>/^[A-Z]{3}$/.test(code)),this.updateValidity(),this.requestUpdate("currencies",previous)}get entries(){return this._currencies??DEFAULT_CURRENCY_ENTRIES}get pickerLabel(){return this.localize("currencyPickerLabel")}normalizeValue(value){return normalizeCurrencyValue(value)}resolveRows(){return resolveCurrencyPresentation(this.entries,this.effectiveLocale)}optionDisplay(row){return{label:row.code,sub:[row.label,row.symbol].filter(text=>!!text).join(" · ")}}}__decorate([property({attribute:!1})],LyraCurrencyPicker.prototype,"currencies",null);export{LyraCurrencyPicker};
@@ -1 +1 @@
1
- import{getDisplayNames,getNumberFormat}from"../../../internal/intl-cache.js";function resolveSymbol(code,locale,currencyDisplay){try{const part=getNumberFormat(locale,{style:"currency",currency:code,currencyDisplay}).formatToParts(0).find(candidate=>candidate.type==="currency")?.value;return part?.trim()?part:code}catch{return code}}function resolveCurrencyPresentation(entries,locale){const rows=entries.map(entry=>{let localizedName;try{const name=getDisplayNames(locale,{type:"currency",fallback:"code"}).of(entry.code);localizedName=name?.trim()?name:entry.code}catch{localizedName=entry.code}const regularSymbol=resolveSymbol(entry.code,locale,"symbol"),narrowSymbol=resolveSymbol(entry.code,locale,"narrowSymbol"),label=entry.label??localizedName,symbol=entry.symbol??regularSymbol,searchText=[...new Set([entry.code,label,localizedName,symbol,regularSymbol,narrowSymbol])].join(" ");return Object.freeze({code:entry.code,label,symbol,narrowSymbol,disabled:entry.disabled===!0,...entry.group===void 0?{}:{group:entry.group},searchText})});return Object.freeze(rows)}export{resolveCurrencyPresentation};
1
+ import{getDisplayNames,getNumberFormat}from"../../../internal/intl-cache.js";function resolveSymbol(code,locale,currencyDisplay){try{const part=getNumberFormat(locale,{style:"currency",currency:code,currencyDisplay},!1).formatToParts(0).find(candidate=>candidate.type==="currency")?.value;return part?.trim()?part:code}catch{return code}}const presentations=new Map;let nameImplementation=Intl.DisplayNames?.prototype?.of,partsImplementation=Intl.NumberFormat?.prototype?.formatToParts;function presentationFor(code,locale){(nameImplementation!==Intl.DisplayNames?.prototype?.of||partsImplementation!==Intl.NumberFormat?.prototype?.formatToParts)&&(presentations.clear(),nameImplementation=Intl.DisplayNames?.prototype?.of,partsImplementation=Intl.NumberFormat?.prototype?.formatToParts);const key=`${locale}\0${code}`,cached=presentations.get(key);if(cached)return cached;let name=code;try{name=getDisplayNames(locale,{type:"currency",fallback:"code"}).of(code)?.trim()||code}catch{}const result=[name,resolveSymbol(code,locale,"symbol"),resolveSymbol(code,locale,"narrowSymbol")];return presentations.size>=1024&&presentations.delete(presentations.keys().next().value),presentations.set(key,result),result}function resolveCurrencyPresentation(entries,locale){const rows=entries.map(entry=>{const[localizedName,regularSymbol,narrowSymbol]=presentationFor(entry.code,locale),label=entry.label??localizedName,symbol=entry.symbol??regularSymbol,searchText=[...new Set([entry.code,label,localizedName,symbol,regularSymbol,narrowSymbol])].join(" ");return Object.freeze({code:entry.code,label,symbol,narrowSymbol,disabled:entry.disabled===!0,...entry.group===void 0?{}:{group:entry.group},searchText})});return Object.freeze(rows)}export{resolveCurrencyPresentation};
@@ -59,6 +59,8 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
59
59
  * ancestor theme wrapper override the active size tier. A value set directly on the picker still
60
60
  * wins through normal custom-property inheritance.
61
61
  *
62
+ * Admission retains at most 64 groups, 20,000 emoji items total and 64 shortcodes per item. Input loss is disclosed through the limit part.
63
+ *
62
64
  * @customElement lr-emoji-picker
63
65
  * @event input - Native `InputEvent` emitted in the host's current owner realm after a user pick.
64
66
  * @event change - Native commit `Event` emitted in the host's current owner realm with `input`.
@@ -72,6 +74,7 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
72
74
  * @slot label - Custom label content.
73
75
  * @slot hint - Custom hint content.
74
76
  * @slot error - Custom error content.
77
+ * @csspart limit - Localized notice when input admission omits catalog data.
75
78
  * @csspart form-control - The outer wrapper around label, base, error and hint.
76
79
  * @csspart form-control-label - The visible label.
77
80
  * @csspart base - The wrapper around the search input and grid.
@@ -164,7 +167,8 @@ export declare class LyraEmojiPicker extends LyraEmojiPicker_base{static styles:
164
167
  /** The full, ungrouped data set to search/render. Consumer-supplied — this component ships no
165
168
  * emoji data of its own. Leaving the property unset allows the optional convenience loader to
166
169
  * provide defaults; explicitly assigning `[]` opts out and renders only the search input and
167
- * empty state. See `emoji-data-loader.ts` for the loader contract. */
170
+ * empty state. Admission retains at most 64 groups, 20,000 emoji items total, and 64 shortcodes
171
+ * per item. Input loss is disclosed through the limit part. See `emoji-data-loader.ts` for the loader contract. */
168
172
  get groups():readonly EmojiPickerGroup[];set groups(value:readonly EmojiPickerGroup[]);
169
173
  /** Accessible name forwarded from the host to the internal emoji listbox. Omission falls back
170
174
  * to the visible label or localized default; an explicitly empty host attribute stays empty. */
@@ -191,4 +195,4 @@ focus(options?:FocusOptions):void;
191
195
  /** Blurs the currently focused owned search or emoji target, including a nested shadow owner. */
192
196
  blur():void;
193
197
  /** Activates the live search control while the form control is enabled. */
194
- click():void;private readonly gridId;private externalDescriptionLease?;private syncExternalDescription;private releaseExternalDescription;formResetCallback():void;private readonly haystacks;private projectionCache?;private rowCache?;private haystackFor;private projection;private get filteredGroups();private get flatItems();private get isVirtualized();private geometry;private syncGeometryProbe;private bindRenderedGeometryProbe;private observeGeometryProbe;private resetGeometryObserver;private onGeometryResize;private groupLabel;private virtualRows;private optionButtons;private get selectedIndex();private syncSelectedProjection;private columnsPerRow;private setActiveIndex;private onSearchInput;private onClearSearch;private onSearchFocus;private onSearchBlur;private pick;private onNavigationKeyDown;private onGridFocusIn;private onGridScroll;private cancelVirtualScrollFrame;private syncGridObserver;private resetGridObserver;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private restorePendingGridFocus;disconnectedCallback():void;private peerLoadMessage;private announcePeerLoadFailure;adoptedCallback():void;private resetOwnerRealmResources;private renderEmojiButton;private renderVirtualRows;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-emoji-picker':LyraEmojiPicker;}}
198
+ click():void;private readonly gridId;private externalDescriptionLease?;private syncExternalDescription;private releaseExternalDescription;formResetCallback():void;private readonly haystacks;private projectionCache?;private rowCache?;private haystackFor;private projection;private get filteredGroups();private get flatItems();private get isVirtualized();private geometry;private syncGeometryProbe;private bindRenderedGeometryProbe;private observeGeometryProbe;private resetGeometryObserver;private onGeometryResize;private groupLabel;private virtualRows;private optionButtons;private get selectedIndex();private syncSelectedProjection;private columnsPerRow;private setActiveIndex;private onSearchInput;private onClearSearch;private onSearchFocus;private onSearchBlur;private pick;private onNavigationKeyDown;private onGridFocusIn;private onGridScroll;private cancelVirtualScrollFrame;private syncGridObserver;private resetGridObserver;protected willUpdate(changed:PropertyValues):void;private inputLimited;private readonly limitAnnouncements;private limitMounted;protected updated(changed:PropertyValues):void;private restorePendingGridFocus;disconnectedCallback():void;private peerLoadMessage;private announcePeerLoadFailure;adoptedCallback():void;private resetOwnerRealmResources;private renderEmojiButton;private renderVirtualRows;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-emoji-picker':LyraEmojiPicker;}}
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{live}from"lit/directives/live.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated}from"../../../internal/form-associated.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{deepActiveElementIn,shadowFocusTarget}from"../../../internal/active-element.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{dispatchNativeEvent,dispatchNativeInputEvent,relayNativeEvent}from"../../../internal/native-event-relay.js";import{closeIcon}from"../../../internal/icons.js";import{revealRange,revealRow}from"../../../internal/reveal-row.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{styles}from"./emoji-picker.styles.js";import{loadEmojiDataOutcomeCached}from"./emoji-data-loader.js";import{LYRA_DEFAULT_emojiPickerEmpty,LYRA_DEFAULT_emojiPickerGridLabel,LYRA_DEFAULT_emojiPickerGroupActivities,LYRA_DEFAULT_emojiPickerGroupAnimalsNature,LYRA_DEFAULT_emojiPickerGroupComponent,LYRA_DEFAULT_emojiPickerGroupFlags,LYRA_DEFAULT_emojiPickerGroupFoodDrink,LYRA_DEFAULT_emojiPickerGroupObjects,LYRA_DEFAULT_emojiPickerGroupPeopleBody,LYRA_DEFAULT_emojiPickerGroupSmileysEmotion,LYRA_DEFAULT_emojiPickerGroupSymbols,LYRA_DEFAULT_emojiPickerGroupTravelPlaces,LYRA_DEFAULT_emojiPickerGroupUnknown,LYRA_DEFAULT_emojiPickerLoadError,LYRA_DEFAULT_emojiPickerPeerMissing,LYRA_DEFAULT_emojiPickerSearchLabel,LYRA_DEFAULT_emojiPickerSearchPlaceholder}from"../../../internal/default-strings/forms.generated.js";import{LYRA_DEFAULT_clear,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_item,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_progress,LYRA_DEFAULT_restore,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings/shared.generated.js";const VIRTUALIZE_AT=200,ITEM_SIZE_FALLBACK=40,GAP_FALLBACK=2,VIRTUAL_ROW_HEIGHT_FALLBACK=56,MAX_VIRTUAL_COLUMNS=20,BUILT_IN_GROUP_LABEL_KEYS={0:"emojiPickerGroupSmileysEmotion",1:"emojiPickerGroupPeopleBody",2:"emojiPickerGroupComponent",3:"emojiPickerGroupAnimalsNature",4:"emojiPickerGroupFoodDrink",5:"emojiPickerGroupTravelPlaces",6:"emojiPickerGroupActivities",7:"emojiPickerGroupObjects",8:"emojiPickerGroupSymbols",9:"emojiPickerGroupFlags"},MAX_EMOJI_GROUPS=64,MAX_EMOJIS=2e4,MAX_SHORTCODES_PER_EMOJI=64;function snapshotEmojiGroups(source,itemSnapshots,replacements){if(!Array.isArray(source))return Object.freeze([]);const groups=[];let remaining=MAX_EMOJIS;for(let groupIndex=0;groupIndex<Math.min(source.length,MAX_EMOJI_GROUPS)&&remaining>0;groupIndex+=1)try{const rawGroup=source[groupIndex];if(rawGroup===null||typeof rawGroup!="object")continue;const group=rawGroup,key=group.key,label=group.label,rawEmojis=group.emojis;if(typeof key!="string"||typeof label!="string"||!Array.isArray(rawEmojis))continue;const emojis=[],length=Math.min(rawEmojis.length,remaining);for(let itemIndex=0;itemIndex<length;itemIndex+=1)try{const rawItem=rawEmojis[itemIndex];if(rawItem===null||typeof rawItem!="object")continue;const item=rawItem,emoji=item.emoji,name=item.name,rawShortcodes=item.shortcodes;if(typeof emoji!="string"||typeof name!="string"||rawShortcodes!==void 0&&!Array.isArray(rawShortcodes))continue;const shortcodes=rawShortcodes===void 0?void 0:Object.freeze(rawShortcodes.slice(0,MAX_SHORTCODES_PER_EMOJI).filter(entry=>typeof entry=="string")),cached=itemSnapshots.get(rawItem),snapshot=cached?.emoji===emoji&&cached.name===name&&(shortcodes===void 0?cached.shortcodes===void 0:cached.shortcodes!==void 0&&cached.shortcodes.length===shortcodes.length&&shortcodes.every((shortcode,index)=>shortcode===cached.shortcodes?.[index]))?cached:Object.freeze({emoji,name,...shortcodes===void 0?{}:{shortcodes}});cached&&cached!==snapshot&&replacements.set(cached,snapshot),itemSnapshots.set(rawItem,snapshot),emojis.push(snapshot)}catch{}remaining-=emojis.length,groups.push(Object.freeze({key,label,emojis:Object.freeze(emojis)}))}catch{}return Object.freeze(groups)}function probePixels(probe,fallback,allowZero=!1){const computed=probe.ownerDocument.defaultView?.getComputedStyle(probe);if(!computed)return fallback;const px=Number.parseFloat(computed.inlineSize);return!Number.isFinite(px)||px<0?fallback:px>0||allowZero?px:fallback}class EmojiPickerBase extends LyraElement{}class LyraEmojiPicker extends FormAssociated(EmojiPickerBase){constructor(){super(...arguments),this._groups=Object.freeze([]),this.itemSnapshots=new WeakMap,this.builtInGroups=new WeakSet,this.groupsWereSet=!1,this.applyingBuiltInGroups=!1,this.peerErrorAnnouncements=new AnnouncementSinkController(this),this.accessibleLabel="",this.size="m",this.label="",this.hint="",this.errorText="",this.slotPresence=new SlotPresenceController(this),this.touched=!1,this.labelId=nextId("emoji-picker-label"),this.hintId=nextId("emoji-picker-hint"),this.errorId=nextId("emoji-picker-error"),this.loadGroups=loadEmojiDataOutcomeCached,this.retryLoad=()=>{this.peerLoadFailure=void 0,this.builtInGroupsLocale=void 0,this.loadBuiltInGroups()},this.queryText="",this.activeIndex=0,this.virtualScrollTop=0,this.observedGridVirtualized=!1,this.liveGeometryReady=!1,this.ownerRealmGeneration=0,this.gridId=nextId("emoji-picker-grid"),this.haystacks=new WeakMap,this.onGeometryResize=()=>{const previous=this.geometryCache;if(this.geometryCache=void 0,!previous)return;const next=this.geometry();next.itemSize===previous.itemSize&&next.gap===previous.gap&&next.rowHeight===previous.rowHeight||this.requestUpdate()},this.onSearchInput=event=>{event.stopPropagation(),!this.liveDisabled&&(this.pendingGridFocus=void 0,this.queryText=event.target.value,this.activeIndex=0)},this.onClearSearch=()=>{this.liveDisabled||this.queryText===""||(this.pendingGridFocus=void 0,this.queryText="",this.activeIndex=0,this.searchEl?.focus())},this.onSearchFocus=event=>{if(this.liveDisabled){event.stopPropagation();return}relayNativeEvent(this,event)},this.onSearchBlur=event=>{this.liveDisabled||(this.touched=!0),relayNativeEvent(this,event)},this.onNavigationKeyDown=event=>{if(this.liveDisabled||event.isComposing||event.keyCode===229)return;const items=this.flatItems;if(items.length===0)return;const inSearch=event.currentTarget===this.searchEl,forwardKey=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backwardKey=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let target;if(event.key===forwardKey)target=this.activeIndex+1;else if(event.key===backwardKey)target=this.activeIndex-1;else if(event.key==="ArrowDown")target=this.activeIndex+this.columnsPerRow();else if(event.key==="ArrowUp")target=this.activeIndex-this.columnsPerRow();else if(event.key==="Home"&&!inSearch)target=0;else if(event.key==="End"&&!inSearch)target=items.length-1;else if(event.key==="Enter"||event.key===" "&&!inSearch){event.preventDefault();const item=items[this.activeIndex];item&&this.pick(item);return}else return;event.preventDefault(),inSearch&&(this.pendingGridFocus=void 0),this.setActiveIndex(target,!inSearch)},this.onGridFocusIn=event=>{const button=event.target;if(button?.nodeType!==1||button.localName!=="button")return;const option=button,indexed=Number(option.dataset.index),index=Number.isInteger(indexed)?indexed:this.optionButtons().indexOf(option);this.pendingGridFocus||(this.focusedGridItem=this.flatItems[index],index>=0&&index!==this.activeIndex&&this.setActiveIndex(index,!1))},this.onGridScroll=event=>{if(!this.isVirtualized)return;const grid=event.currentTarget;this.virtualScrollTop=grid.scrollTop;const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||this.virtualScrollRaf!==void 0&&this.virtualScrollRafWindow===ownerWindow&&this.virtualScrollRafDocument===ownerDocument)return;this.cancelVirtualScrollFrame();const generation=this.ownerRealmGeneration;let handle=0;handle=ownerWindow.requestAnimationFrame(()=>{this.virtualScrollRaf!==handle||this.virtualScrollRafWindow!==ownerWindow||this.virtualScrollRafDocument!==ownerDocument||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||(this.virtualScrollRaf=void 0,this.virtualScrollRafWindow=void 0,this.virtualScrollRafDocument=void 0,this.requestUpdate())}),this.virtualScrollRaf=handle,this.virtualScrollRafWindow=ownerWindow,this.virtualScrollRafDocument=ownerDocument}}static{this.defaultStrings={...super.defaultStrings,clear:LYRA_DEFAULT_clear,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,emojiPickerEmpty:LYRA_DEFAULT_emojiPickerEmpty,emojiPickerGridLabel:LYRA_DEFAULT_emojiPickerGridLabel,emojiPickerGroupActivities:LYRA_DEFAULT_emojiPickerGroupActivities,emojiPickerGroupAnimalsNature:LYRA_DEFAULT_emojiPickerGroupAnimalsNature,emojiPickerGroupComponent:LYRA_DEFAULT_emojiPickerGroupComponent,emojiPickerGroupFlags:LYRA_DEFAULT_emojiPickerGroupFlags,emojiPickerGroupFoodDrink:LYRA_DEFAULT_emojiPickerGroupFoodDrink,emojiPickerGroupObjects:LYRA_DEFAULT_emojiPickerGroupObjects,emojiPickerGroupPeopleBody:LYRA_DEFAULT_emojiPickerGroupPeopleBody,emojiPickerGroupSmileysEmotion:LYRA_DEFAULT_emojiPickerGroupSmileysEmotion,emojiPickerGroupSymbols:LYRA_DEFAULT_emojiPickerGroupSymbols,emojiPickerGroupTravelPlaces:LYRA_DEFAULT_emojiPickerGroupTravelPlaces,emojiPickerGroupUnknown:LYRA_DEFAULT_emojiPickerGroupUnknown,emojiPickerLoadError:LYRA_DEFAULT_emojiPickerLoadError,emojiPickerPeerMissing:LYRA_DEFAULT_emojiPickerPeerMissing,emojiPickerSearchLabel:LYRA_DEFAULT_emojiPickerSearchLabel,emojiPickerSearchPlaceholder:LYRA_DEFAULT_emojiPickerSearchPlaceholder,fieldRequired:LYRA_DEFAULT_fieldRequired,item:LYRA_DEFAULT_item,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,progress:LYRA_DEFAULT_progress,restore:LYRA_DEFAULT_restore,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get groups(){return this._groups}set groups(value){const old=this._groups,focused=shadowFocusTarget(this),focusedIndex=Number(focused?.dataset?.index);this.pendingGridFocus=typeof focused?.getAttribute=="function"&&focused.getAttribute("part")?.split(/\s+/).includes("emoji")&&Number.isInteger(focusedIndex)?{item:this.focusedGridItem??this.flatItems[focusedIndex],index:focusedIndex}:void 0,this.applyingBuiltInGroups||(this.groupsWereSet=!0),this.peerLoadFailure=void 0,this.builtInGroups=new WeakSet;const replacements=new Map;this._groups=snapshotEmojiGroups(value,this.itemSnapshots,replacements),this.pendingGridFocus?.item&&(this.pendingGridFocus.item=replacements.get(this.pendingGridFocus.item)??this.pendingGridFocus.item),this.requestUpdate("groups",old)}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.syncGeometryProbe(),this.syncExternalDescription()),this.observeGeometryProbe(),this.syncGridObserver(),this.loadBuiltInGroups()}loadBuiltInGroups(){if(this.groupsWereSet)return;const locale=this.effectiveLocale;if(this.builtInGroupsLocale===locale)return;this.builtInGroupsLocale=locale;const ownerDocument=this.ownerDocument,generation=this.ownerRealmGeneration;this.loadGroups(locale).then(loaded=>{if(!(this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.groupsWereSet||this.builtInGroupsLocale!==locale)){if(!Array.isArray(loaded)){this.peerLoadFailure=loaded?.reason??"failed",this.announcePeerLoadFailure(),this.emit("lr-load-error");return}this.applyingBuiltInGroups=!0;try{this.groups=loaded}finally{this.applyingBuiltInGroups=!1}this.builtInGroups=new WeakSet(this._groups)}})}get liveDisabled(){return this.effectiveDisabled||this.matches(":disabled")}focus(options){this.liveDisabled||this.searchEl?.focus(options)}blur(){const active=deepActiveElementIn(this.isConnected?this.shadowRoot:null);active&&typeof active.blur=="function"&&active.blur()}click(){this.liveDisabled||this.searchEl?.click()}syncExternalDescription(){if(!this.isConnected)return;const owner=this.renderRoot.querySelector('[part="grid"]');owner&&(this.externalDescriptionLease?this.externalDescriptionLease.update(owner):this.externalDescriptionLease=acquireResolvedAriaRelationship(this,owner,"aria-describedby"))}releaseExternalDescription(){this.externalDescriptionLease?.release(),this.externalDescriptionLease=void 0}formResetCallback(){super.formResetCallback(),this.touched=!1}haystackFor(item){const locale=this.effectiveLocale;let cached=this.haystacks.get(item);return(cached===void 0||cached.locale!==locale)&&(cached={locale,value:[item.name,...item.shortcodes??[]].join(" ").toLocaleLowerCase(locale)},this.haystacks.set(item,cached)),cached.value}projection(){const locale=this.effectiveLocale,query2=this.queryText.trim().toLocaleLowerCase(locale),cached=this.projectionCache;if(cached?.source===this._groups&&cached.query===query2&&cached.locale===locale)return cached;const groups=query2?this._groups.map(group=>{const filtered={...group,emojis:group.emojis.filter(item=>this.haystackFor(item).includes(query2))};return this.builtInGroups.has(group)&&this.builtInGroups.add(filtered),filtered}).filter(group=>group.emojis.length>0):this._groups,next={source:this._groups,query:query2,locale,groups,items:groups.flatMap(group=>group.emojis)};return this.projectionCache=next,next}get filteredGroups(){return this.projection().groups}get flatItems(){return this.projection().items}get isVirtualized(){return this.flatItems.length>=VIRTUALIZE_AT}geometry(){if(this.geometryCache)return this.geometryCache;const probe=this.geometryProbe;return probe?(this.geometryCache={itemSize:probePixels(probe.item,ITEM_SIZE_FALLBACK),gap:probePixels(probe.gap,GAP_FALLBACK,!0),rowHeight:probePixels(probe.row,VIRTUAL_ROW_HEIGHT_FALLBACK)},this.geometryCache):{itemSize:ITEM_SIZE_FALLBACK,gap:GAP_FALLBACK,rowHeight:VIRTUAL_ROW_HEIGHT_FALLBACK}}syncGeometryProbe(){if(this.geometryProbe||!this.isVirtualized||!this.ownerDocument)return;const makeProbe=name=>{const probe=this.ownerDocument.createElement("div");return probe.dataset.probe=name,probe},root=makeProbe("root");root.setAttribute("aria-hidden","true");const item=makeProbe("item"),gap=makeProbe("gap"),row=makeProbe("row");root.append(item,gap,row),this.renderRoot.append(root),this.geometryProbe={root,item,gap,row},this.geometry(),root.remove(),this.geometryProbe=void 0}bindRenderedGeometryProbe(){const root=this.renderRoot?.querySelector('[data-probe="root"]'),item=root?.querySelector('[data-probe="item"]'),gap=root?.querySelector('[data-probe="gap"]'),row=root?.querySelector('[data-probe="row"]');if(!root||!item||!gap||!row)return;if(this.geometryProbe?.root===root){this.observeGeometryProbe();return}const prior=this.geometryCache??{itemSize:ITEM_SIZE_FALLBACK,gap:GAP_FALLBACK,rowHeight:VIRTUAL_ROW_HEIGHT_FALLBACK};this.geometryProbe={root,item,gap,row},this.geometryCache=void 0;const next=this.geometry();this.liveGeometryReady=!0,this.observeGeometryProbe(),(prior.itemSize!==next.itemSize||prior.gap!==next.gap||prior.rowHeight!==next.rowHeight)&&this.ownerDocument.defaultView?.requestAnimationFrame(()=>{this.isConnected&&this.geometryProbe?.root===root&&this.requestUpdate()})}observeGeometryProbe(){const probe=this.geometryProbe,ownerDocument=this.ownerDocument;if(!probe||!this.isConnected||this.geometryObserver&&this.geometryObserverDocument===ownerDocument&&this.geometryObserverRoot===probe.root)return;this.resetGeometryObserver();const ResizeObserverCtor=ownerDocument.defaultView?.ResizeObserver;if(!ResizeObserverCtor)return;const generation=this.ownerRealmGeneration,observer=new ResizeObserverCtor(()=>{this.geometryObserver!==observer||this.geometryObserverDocument!==ownerDocument||this.geometryObserverRoot!==probe.root||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.onGeometryResize()});this.geometryObserver=observer,this.geometryObserverDocument=ownerDocument,this.geometryObserverRoot=probe.root,observer.observe(probe.item),observer.observe(probe.gap),observer.observe(probe.row)}resetGeometryObserver(){this.geometryObserver?.disconnect(),this.geometryObserver=void 0,this.geometryObserverDocument=void 0,this.geometryObserverRoot=void 0}groupLabel(group){if(!this.builtInGroups.has(group))return group.label;const labelKey=BUILT_IN_GROUP_LABEL_KEYS[group.key];return labelKey?this.localize(labelKey):this.localize("emojiPickerGroupUnknown",void 0,{group:group.key})}virtualRows(){const projection=this.projection(),columns=this.columnsPerRow();if(this.rowCache?.projection===projection&&this.rowCache.columns===columns)return this.rowCache.rows;let index=0;const rows=[];for(const group of projection.groups)for(let offset=0;offset<group.emojis.length;offset+=columns)rows.push({heading:group,group:offset===0?group:void 0,items:group.emojis.slice(offset,offset+columns).map(item=>({item,index:index++}))});return this.rowCache={projection,columns,rows},rows}optionButtons(){return[...this.renderRoot.querySelectorAll('[part="emoji"]')]}get selectedIndex(){return this.value?this.flatItems.findIndex(item=>item.emoji===this.value):-1}syncSelectedProjection(){const selectedIndex=this.selectedIndex;for(const button of this.optionButtons())button.setAttribute("aria-selected",Number(button.dataset.index)===selectedIndex?"true":"false")}columnsPerRow(){if(this.isVirtualized){const width=(this.liveGeometryReady?this.renderRoot?.querySelector('[part="grid"]'):void 0)?.clientWidth??0,{itemSize,gap}=this.geometry();return Math.min(MAX_VIRTUAL_COLUMNS,Math.max(1,Math.floor((Math.max(width,itemSize)+gap)/(itemSize+gap))))}const buttons=this.optionButtons();if(buttons.length===0)return 1;const firstTop=buttons[0].offsetTop;let columns=0;for(const button of buttons){if(button.offsetTop!==firstTop)break;columns+=1}return Math.max(1,columns)}setActiveIndex(next,focusTarget){const buttons=this.optionButtons();if(buttons.length===0&&!this.isVirtualized)return;this.activeIndex=Math.max(0,Math.min(next,this.flatItems.length-1)),focusTarget&&(this.pendingGridFocus={item:this.flatItems[this.activeIndex],index:this.activeIndex});const target=this.isVirtualized?this.renderRoot.querySelector(`[part="emoji"][data-index="${this.activeIndex}"]`):buttons[this.activeIndex],previous=this.renderRoot.querySelector('[part="emoji"][data-active]');previous&&previous!==target&&(previous.tabIndex=-1,previous.removeAttribute("data-active")),target?(target.tabIndex=0,target.setAttribute("data-active",""),this.searchEl?.setAttribute("aria-activedescendant",target.id)):this.isVirtualized&&this.searchEl?.setAttribute("aria-activedescendant",`${this.gridId}-item-${this.activeIndex}`);const grid=this.renderRoot.querySelector('[part="grid"]');if(grid&&this.isVirtualized){const rowIndex=this.virtualRows().findIndex(row=>row.items.some(({index})=>index===this.activeIndex));if(rowIndex>=0){const{rowHeight}=this.geometry(),before=grid.scrollTop;revealRange(grid,rowIndex*rowHeight,rowHeight),grid.scrollTop!==before&&(this.virtualScrollTop=grid.scrollTop,this.requestUpdate())}}else grid&&target&&revealRow(grid,target);focusTarget&&target&&(this.pendingGridFocus=void 0,target.focus())}pick(item){if(this.liveDisabled)return;const detail={value:item.emoji,previousValue:this.value};this.value=item.emoji,this.syncSelectedProjection(),dispatchNativeInputEvent(this),this.emit("lr-input",detail),dispatchNativeEvent(this,"change"),this.emit("lr-change",detail)}cancelVirtualScrollFrame(){this.virtualScrollRaf!==void 0&&this.virtualScrollRafWindow?.cancelAnimationFrame(this.virtualScrollRaf),this.virtualScrollRaf=void 0,this.virtualScrollRafWindow=void 0,this.virtualScrollRafDocument=void 0}syncGridObserver(){const grid=this.renderRoot?.querySelector('[part="grid"]'),virtualized=this.isVirtualized,ownerDocument=this.ownerDocument;if(grid===this.observedGrid&&virtualized===this.observedGridVirtualized&&(!virtualized||this.gridResizeObserverDocument===ownerDocument)||(this.resetGridObserver(),!this.isConnected)||(this.observedGrid=grid??void 0,this.observedGridVirtualized=virtualized,!grid||!virtualized))return;grid.addEventListener("scroll",this.onGridScroll,{passive:!0});const ResizeObserverCtor=ownerDocument.defaultView?.ResizeObserver;if(!ResizeObserverCtor)return;const generation=this.ownerRealmGeneration,observer=new ResizeObserverCtor(()=>{this.gridResizeObserver!==observer||this.gridResizeObserverDocument!==ownerDocument||this.observedGrid!==grid||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.requestUpdate()});this.gridResizeObserver=observer,this.gridResizeObserverDocument=ownerDocument,observer.observe(grid)}resetGridObserver(){this.observedGrid?.removeEventListener("scroll",this.onGridScroll),this.gridResizeObserver?.disconnect(),this.gridResizeObserver=void 0,this.gridResizeObserverDocument=void 0,this.observedGrid=void 0,this.observedGridVirtualized=!1,this.cancelVirtualScrollFrame()}willUpdate(changed){super.willUpdate(changed),this.isVirtualized&&this.geometryProbe&&(this.geometryCache=void 0),this.syncGeometryProbe()}updated(changed){if(super.updated(changed),this.bindRenderedGeometryProbe(),this.syncGridObserver(),this.syncExternalDescription(),this.loadBuiltInGroups(),!changed.has("queryText")&&!changed.has("groups")){this.restorePendingGridFocus();return}const buttons=this.optionButtons();if(buttons.length===0){this.searchEl?.removeAttribute("aria-activedescendant"),this.pendingGridFocus&&(this.pendingGridFocus=void 0,this.searchEl?.focus());return}if(this.pendingGridFocus){const retainedIndex=this.pendingGridFocus.item?this.flatItems.indexOf(this.pendingGridFocus.item):-1;this.activeIndex=retainedIndex>=0?retainedIndex:Math.max(0,Math.min(this.pendingGridFocus.index,this.flatItems.length-1)),this.pendingGridFocus={item:this.flatItems[this.activeIndex],index:this.activeIndex}}else!this.isVirtualized&&this.activeIndex>=buttons.length&&(this.activeIndex=0);this.setActiveIndex(this.activeIndex,!1),this.syncSelectedProjection(),this.restorePendingGridFocus()}restorePendingGridFocus(){if(!this.pendingGridFocus)return;const target=this.renderRoot.querySelector(`[part="emoji"][data-index="${this.activeIndex}"]`);target&&(this.pendingGridFocus=void 0,target.focus())}disconnectedCallback(){this.releaseExternalDescription(),super.disconnectedCallback(),this.resetOwnerRealmResources()}peerLoadMessage(){return this.localize(this.peerLoadFailure==="missing"?"emojiPickerPeerMissing":"emojiPickerLoadError")}announcePeerLoadFailure(){this.isConnected&&this.peerErrorAnnouncements.announceAssertive(this.peerLoadMessage())}adoptedCallback(){super.adoptedCallback(),this.peerErrorAnnouncements.adopted(),this.releaseExternalDescription(),this.resetOwnerRealmResources(),this.isConnected&&this.hasUpdated&&this.syncExternalDescription()}resetOwnerRealmResources(){this.ownerRealmGeneration+=1,this.pendingGridFocus=void 0,this.resetGridObserver(),this.resetGeometryObserver()}renderEmojiButton(item,itemIndex,total,selectedIndex){return html`<button
1
+ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{live}from"lit/directives/live.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated}from"../../../internal/form-associated.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{deepActiveElementIn,shadowFocusTarget}from"../../../internal/active-element.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{dispatchNativeEvent,dispatchNativeInputEvent,relayNativeEvent}from"../../../internal/native-event-relay.js";import{closeIcon}from"../../../internal/icons.js";import{revealRange,revealRow}from"../../../internal/reveal-row.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{styles}from"./emoji-picker.styles.js";import{loadEmojiDataOutcomeCached}from"./emoji-data-loader.js";import{LYRA_DEFAULT_emojiPickerEmpty,LYRA_DEFAULT_emojiPickerGridLabel,LYRA_DEFAULT_emojiPickerGroupActivities,LYRA_DEFAULT_emojiPickerGroupAnimalsNature,LYRA_DEFAULT_emojiPickerGroupComponent,LYRA_DEFAULT_emojiPickerGroupFlags,LYRA_DEFAULT_emojiPickerGroupFoodDrink,LYRA_DEFAULT_emojiPickerGroupObjects,LYRA_DEFAULT_emojiPickerGroupPeopleBody,LYRA_DEFAULT_emojiPickerGroupSmileysEmotion,LYRA_DEFAULT_emojiPickerGroupSymbols,LYRA_DEFAULT_emojiPickerGroupTravelPlaces,LYRA_DEFAULT_emojiPickerGroupUnknown,LYRA_DEFAULT_emojiPickerInputLimit,LYRA_DEFAULT_emojiPickerLoadError,LYRA_DEFAULT_emojiPickerPeerMissing,LYRA_DEFAULT_emojiPickerSearchLabel,LYRA_DEFAULT_emojiPickerSearchPlaceholder}from"../../../internal/default-strings/forms.generated.js";import{LYRA_DEFAULT_clear,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_item,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_progress,LYRA_DEFAULT_restore,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings/shared.generated.js";const VIRTUALIZE_AT=200,ITEM_SIZE_FALLBACK=40,GAP_FALLBACK=2,VIRTUAL_ROW_HEIGHT_FALLBACK=56,MAX_VIRTUAL_COLUMNS=20,BUILT_IN_GROUP_LABEL_KEYS={0:"emojiPickerGroupSmileysEmotion",1:"emojiPickerGroupPeopleBody",2:"emojiPickerGroupComponent",3:"emojiPickerGroupAnimalsNature",4:"emojiPickerGroupFoodDrink",5:"emojiPickerGroupTravelPlaces",6:"emojiPickerGroupActivities",7:"emojiPickerGroupObjects",8:"emojiPickerGroupSymbols",9:"emojiPickerGroupFlags"},MAX_EMOJI_GROUPS=64,MAX_EMOJIS=2e4,MAX_SHORTCODES_PER_EMOJI=64,groupSnapshotLimits=new WeakMap,loadedGroupSnapshots=new WeakMap;function snapshotEmojiGroups(source,itemSnapshots,replacements){if(!Array.isArray(source))return Object.freeze([]);const groups=[];let remaining=MAX_EMOJIS,limited=source.length>MAX_EMOJI_GROUPS;for(let groupIndex=0;groupIndex<Math.min(source.length,MAX_EMOJI_GROUPS)&&remaining>0;groupIndex+=1)try{const rawGroup=source[groupIndex];if(rawGroup===null||typeof rawGroup!="object")continue;const group=rawGroup,key=group.key,label=group.label,rawEmojis=group.emojis;if(typeof key!="string"||typeof label!="string"||!Array.isArray(rawEmojis))continue;rawEmojis.length>remaining&&(limited=!0);const emojis=[],length=Math.min(rawEmojis.length,remaining);for(let itemIndex=0;itemIndex<length;itemIndex+=1)try{const rawItem=rawEmojis[itemIndex];if(rawItem===null||typeof rawItem!="object")continue;const item=rawItem,emoji=item.emoji,name=item.name,rawShortcodes=item.shortcodes;if(typeof emoji!="string"||typeof name!="string"||rawShortcodes!==void 0&&!Array.isArray(rawShortcodes))continue;rawShortcodes!==void 0&&rawShortcodes.length>MAX_SHORTCODES_PER_EMOJI&&(limited=!0);const shortcodes=rawShortcodes===void 0?void 0:Object.freeze(rawShortcodes.slice(0,MAX_SHORTCODES_PER_EMOJI).filter(entry=>typeof entry=="string")),cached=itemSnapshots.get(rawItem),snapshot=cached?.emoji===emoji&&cached.name===name&&(shortcodes===void 0?cached.shortcodes===void 0:cached.shortcodes!==void 0&&cached.shortcodes.length===shortcodes.length&&shortcodes.every((shortcode,index)=>shortcode===cached.shortcodes?.[index]))?cached:Object.freeze({emoji,name,...shortcodes===void 0?{}:{shortcodes}});cached&&cached!==snapshot&&replacements.set(cached,snapshot),itemSnapshots.set(rawItem,snapshot),emojis.push(snapshot)}catch{}remaining-=emojis.length,groups.push(Object.freeze({key,label,emojis:Object.freeze(emojis)}))}catch{}return remaining===0&&groups.length<Math.min(source.length,MAX_EMOJI_GROUPS)&&(limited=!0),groupSnapshotLimits.set(groups,limited),Object.freeze(groups)}function probePixels(probe,fallback,allowZero=!1){const computed=probe.ownerDocument.defaultView?.getComputedStyle(probe);if(!computed)return fallback;const px=Number.parseFloat(computed.inlineSize);return!Number.isFinite(px)||px<0?fallback:px>0||allowZero?px:fallback}class EmojiPickerBase extends LyraElement{}class LyraEmojiPicker extends FormAssociated(EmojiPickerBase){constructor(){super(...arguments),this._groups=Object.freeze([]),this.itemSnapshots=new WeakMap,this.builtInGroups=new WeakSet,this.groupsWereSet=!1,this.applyingBuiltInGroups=!1,this.peerErrorAnnouncements=new AnnouncementSinkController(this),this.accessibleLabel="",this.size="m",this.label="",this.hint="",this.errorText="",this.slotPresence=new SlotPresenceController(this),this.touched=!1,this.labelId=nextId("emoji-picker-label"),this.hintId=nextId("emoji-picker-hint"),this.errorId=nextId("emoji-picker-error"),this.loadGroups=loadEmojiDataOutcomeCached,this.retryLoad=()=>{this.peerLoadFailure=void 0,this.builtInGroupsLocale=void 0,this.loadBuiltInGroups()},this.queryText="",this.activeIndex=0,this.virtualScrollTop=0,this.observedGridVirtualized=!1,this.liveGeometryReady=!1,this.ownerRealmGeneration=0,this.gridId=nextId("emoji-picker-grid"),this.haystacks=new WeakMap,this.onGeometryResize=()=>{const previous=this.geometryCache;if(this.geometryCache=void 0,!previous)return;const next=this.geometry();next.itemSize===previous.itemSize&&next.gap===previous.gap&&next.rowHeight===previous.rowHeight||this.requestUpdate()},this.onSearchInput=event=>{event.stopPropagation(),!this.liveDisabled&&(this.pendingGridFocus=void 0,this.queryText=event.target.value,this.activeIndex=0)},this.onClearSearch=()=>{this.liveDisabled||this.queryText===""||(this.pendingGridFocus=void 0,this.queryText="",this.activeIndex=0,this.searchEl?.focus())},this.onSearchFocus=event=>{if(this.liveDisabled){event.stopPropagation();return}relayNativeEvent(this,event)},this.onSearchBlur=event=>{this.liveDisabled||(this.touched=!0),relayNativeEvent(this,event)},this.onNavigationKeyDown=event=>{if(this.liveDisabled||event.isComposing||event.keyCode===229)return;const items=this.flatItems;if(items.length===0)return;const inSearch=event.currentTarget===this.searchEl,forwardKey=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backwardKey=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let target;if(event.key===forwardKey)target=this.activeIndex+1;else if(event.key===backwardKey)target=this.activeIndex-1;else if(event.key==="ArrowDown")target=this.activeIndex+this.columnsPerRow();else if(event.key==="ArrowUp")target=this.activeIndex-this.columnsPerRow();else if(event.key==="Home"&&!inSearch)target=0;else if(event.key==="End"&&!inSearch)target=items.length-1;else if(event.key==="Enter"||event.key===" "&&!inSearch){event.preventDefault();const item=items[this.activeIndex];item&&this.pick(item);return}else return;event.preventDefault(),inSearch&&(this.pendingGridFocus=void 0),this.setActiveIndex(target,!inSearch)},this.onGridFocusIn=event=>{const button=event.target;if(button?.nodeType!==1||button.localName!=="button")return;const option=button,indexed=Number(option.dataset.index),index=Number.isInteger(indexed)?indexed:this.optionButtons().indexOf(option);this.pendingGridFocus||(this.focusedGridItem=this.flatItems[index],index>=0&&index!==this.activeIndex&&this.setActiveIndex(index,!1))},this.onGridScroll=event=>{if(!this.isVirtualized)return;const grid=event.currentTarget;this.virtualScrollTop=grid.scrollTop;const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||this.virtualScrollRaf!==void 0&&this.virtualScrollRafWindow===ownerWindow&&this.virtualScrollRafDocument===ownerDocument)return;this.cancelVirtualScrollFrame();const generation=this.ownerRealmGeneration;let handle=0;handle=ownerWindow.requestAnimationFrame(()=>{this.virtualScrollRaf!==handle||this.virtualScrollRafWindow!==ownerWindow||this.virtualScrollRafDocument!==ownerDocument||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||(this.virtualScrollRaf=void 0,this.virtualScrollRafWindow=void 0,this.virtualScrollRafDocument=void 0,this.requestUpdate())}),this.virtualScrollRaf=handle,this.virtualScrollRafWindow=ownerWindow,this.virtualScrollRafDocument=ownerDocument},this.inputLimited=!1,this.limitAnnouncements=new AnnouncementSinkController(this),this.limitMounted=!1}static{this.defaultStrings={...super.defaultStrings,clear:LYRA_DEFAULT_clear,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,emojiPickerEmpty:LYRA_DEFAULT_emojiPickerEmpty,emojiPickerGridLabel:LYRA_DEFAULT_emojiPickerGridLabel,emojiPickerGroupActivities:LYRA_DEFAULT_emojiPickerGroupActivities,emojiPickerGroupAnimalsNature:LYRA_DEFAULT_emojiPickerGroupAnimalsNature,emojiPickerGroupComponent:LYRA_DEFAULT_emojiPickerGroupComponent,emojiPickerGroupFlags:LYRA_DEFAULT_emojiPickerGroupFlags,emojiPickerGroupFoodDrink:LYRA_DEFAULT_emojiPickerGroupFoodDrink,emojiPickerGroupObjects:LYRA_DEFAULT_emojiPickerGroupObjects,emojiPickerGroupPeopleBody:LYRA_DEFAULT_emojiPickerGroupPeopleBody,emojiPickerGroupSmileysEmotion:LYRA_DEFAULT_emojiPickerGroupSmileysEmotion,emojiPickerGroupSymbols:LYRA_DEFAULT_emojiPickerGroupSymbols,emojiPickerGroupTravelPlaces:LYRA_DEFAULT_emojiPickerGroupTravelPlaces,emojiPickerGroupUnknown:LYRA_DEFAULT_emojiPickerGroupUnknown,emojiPickerInputLimit:LYRA_DEFAULT_emojiPickerInputLimit,emojiPickerLoadError:LYRA_DEFAULT_emojiPickerLoadError,emojiPickerPeerMissing:LYRA_DEFAULT_emojiPickerPeerMissing,emojiPickerSearchLabel:LYRA_DEFAULT_emojiPickerSearchLabel,emojiPickerSearchPlaceholder:LYRA_DEFAULT_emojiPickerSearchPlaceholder,fieldRequired:LYRA_DEFAULT_fieldRequired,item:LYRA_DEFAULT_item,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,progress:LYRA_DEFAULT_progress,restore:LYRA_DEFAULT_restore,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get groups(){return this._groups}set groups(value){const old=this._groups,focused=shadowFocusTarget(this),focusedIndex=Number(focused?.dataset?.index);this.pendingGridFocus=typeof focused?.getAttribute=="function"&&focused.getAttribute("part")?.split(/\s+/).includes("emoji")&&Number.isInteger(focusedIndex)?{item:this.focusedGridItem??this.flatItems[focusedIndex],index:focusedIndex}:void 0,this.applyingBuiltInGroups||(this.groupsWereSet=!0),this.peerLoadFailure=void 0,this.builtInGroups=new WeakSet;const replacements=new Map,shared=this.applyingBuiltInGroups?loadedGroupSnapshots.get(value):void 0;this._groups=shared??snapshotEmojiGroups(value,this.itemSnapshots,replacements),this.inputLimited=groupSnapshotLimits.get(this._groups)??!1,this.applyingBuiltInGroups&&!shared&&loadedGroupSnapshots.set(value,this._groups),this.pendingGridFocus?.item&&(this.pendingGridFocus.item=replacements.get(this.pendingGridFocus.item)??this.pendingGridFocus.item),this.requestUpdate("groups",old)}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.syncGeometryProbe(),this.syncExternalDescription()),this.observeGeometryProbe(),this.syncGridObserver(),this.loadBuiltInGroups()}loadBuiltInGroups(){if(this.groupsWereSet)return;const locale=this.effectiveLocale;if(this.builtInGroupsLocale===locale)return;this.builtInGroupsLocale=locale;const ownerDocument=this.ownerDocument,generation=this.ownerRealmGeneration;this.loadGroups(locale).then(loaded=>{if(!(this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.groupsWereSet||this.builtInGroupsLocale!==locale)){if(!Array.isArray(loaded)){this.peerLoadFailure=loaded?.reason??"failed",this.announcePeerLoadFailure(),this.emit("lr-load-error");return}this.applyingBuiltInGroups=!0;try{this.groups=loaded}finally{this.applyingBuiltInGroups=!1}this.builtInGroups=new WeakSet(this._groups)}})}get liveDisabled(){return this.effectiveDisabled||this.matches(":disabled")}focus(options){this.liveDisabled||this.searchEl?.focus(options)}blur(){const active=deepActiveElementIn(this.isConnected?this.shadowRoot:null);active&&typeof active.blur=="function"&&active.blur()}click(){this.liveDisabled||this.searchEl?.click()}syncExternalDescription(){if(!this.isConnected)return;const owner=this.renderRoot.querySelector('[part="grid"]');owner&&(this.externalDescriptionLease?this.externalDescriptionLease.update(owner):this.externalDescriptionLease=acquireResolvedAriaRelationship(this,owner,"aria-describedby"))}releaseExternalDescription(){this.externalDescriptionLease?.release(),this.externalDescriptionLease=void 0}formResetCallback(){super.formResetCallback(),this.touched=!1}haystackFor(item){const locale=this.effectiveLocale;let cached=this.haystacks.get(item);return(cached===void 0||cached.locale!==locale)&&(cached={locale,value:[item.name,...item.shortcodes??[]].join(" ").toLocaleLowerCase(locale)},this.haystacks.set(item,cached)),cached.value}projection(){const locale=this.effectiveLocale,query2=this.queryText.trim().toLocaleLowerCase(locale),cached=this.projectionCache;if(cached?.source===this._groups&&cached.query===query2&&cached.locale===locale)return cached;const groups=query2?this._groups.map(group=>{const filtered={...group,emojis:group.emojis.filter(item=>this.haystackFor(item).includes(query2))};return this.builtInGroups.has(group)&&this.builtInGroups.add(filtered),filtered}).filter(group=>group.emojis.length>0):this._groups,next={source:this._groups,query:query2,locale,groups,items:groups.flatMap(group=>group.emojis)};return this.projectionCache=next,next}get filteredGroups(){return this.projection().groups}get flatItems(){return this.projection().items}get isVirtualized(){return this.flatItems.length>=VIRTUALIZE_AT}geometry(){if(this.geometryCache)return this.geometryCache;const probe=this.geometryProbe;return probe?(this.geometryCache={itemSize:probePixels(probe.item,ITEM_SIZE_FALLBACK),gap:probePixels(probe.gap,GAP_FALLBACK,!0),rowHeight:probePixels(probe.row,VIRTUAL_ROW_HEIGHT_FALLBACK)},this.geometryCache):{itemSize:ITEM_SIZE_FALLBACK,gap:GAP_FALLBACK,rowHeight:VIRTUAL_ROW_HEIGHT_FALLBACK}}syncGeometryProbe(){if(this.geometryProbe||!this.isVirtualized||!this.ownerDocument)return;const makeProbe=name=>{const probe=this.ownerDocument.createElement("div");return probe.dataset.probe=name,probe},root=makeProbe("root");root.setAttribute("aria-hidden","true");const item=makeProbe("item"),gap=makeProbe("gap"),row=makeProbe("row");root.append(item,gap,row),this.renderRoot.append(root),this.geometryProbe={root,item,gap,row},this.geometry(),root.remove(),this.geometryProbe=void 0}bindRenderedGeometryProbe(){const root=this.renderRoot?.querySelector('[data-probe="root"]'),item=root?.querySelector('[data-probe="item"]'),gap=root?.querySelector('[data-probe="gap"]'),row=root?.querySelector('[data-probe="row"]');if(!root||!item||!gap||!row)return;if(this.geometryProbe?.root===root){this.observeGeometryProbe();return}const prior=this.geometryCache??{itemSize:ITEM_SIZE_FALLBACK,gap:GAP_FALLBACK,rowHeight:VIRTUAL_ROW_HEIGHT_FALLBACK};this.geometryProbe={root,item,gap,row},this.geometryCache=void 0;const next=this.geometry();this.liveGeometryReady=!0,this.observeGeometryProbe(),(prior.itemSize!==next.itemSize||prior.gap!==next.gap||prior.rowHeight!==next.rowHeight)&&this.ownerDocument.defaultView?.requestAnimationFrame(()=>{this.isConnected&&this.geometryProbe?.root===root&&this.requestUpdate()})}observeGeometryProbe(){const probe=this.geometryProbe,ownerDocument=this.ownerDocument;if(!probe||!this.isConnected||this.geometryObserver&&this.geometryObserverDocument===ownerDocument&&this.geometryObserverRoot===probe.root)return;this.resetGeometryObserver();const ResizeObserverCtor=ownerDocument.defaultView?.ResizeObserver;if(!ResizeObserverCtor)return;const generation=this.ownerRealmGeneration,observer=new ResizeObserverCtor(()=>{this.geometryObserver!==observer||this.geometryObserverDocument!==ownerDocument||this.geometryObserverRoot!==probe.root||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.onGeometryResize()});this.geometryObserver=observer,this.geometryObserverDocument=ownerDocument,this.geometryObserverRoot=probe.root,observer.observe(probe.item),observer.observe(probe.gap),observer.observe(probe.row)}resetGeometryObserver(){this.geometryObserver?.disconnect(),this.geometryObserver=void 0,this.geometryObserverDocument=void 0,this.geometryObserverRoot=void 0}groupLabel(group){if(!this.builtInGroups.has(group))return group.label;const labelKey=BUILT_IN_GROUP_LABEL_KEYS[group.key];return labelKey?this.localize(labelKey):this.localize("emojiPickerGroupUnknown",void 0,{group:group.key})}virtualRows(){const projection=this.projection(),columns=this.columnsPerRow();if(this.rowCache?.projection===projection&&this.rowCache.columns===columns)return this.rowCache.rows;let index=0;const rows=[];for(const group of projection.groups)for(let offset=0;offset<group.emojis.length;offset+=columns)rows.push({heading:group,group:offset===0?group:void 0,items:group.emojis.slice(offset,offset+columns).map(item=>({item,index:index++}))});return this.rowCache={projection,columns,rows},rows}optionButtons(){return[...this.renderRoot.querySelectorAll('[part="emoji"]')]}get selectedIndex(){return this.value?this.flatItems.findIndex(item=>item.emoji===this.value):-1}syncSelectedProjection(){const selectedIndex=this.selectedIndex;for(const button of this.optionButtons())button.setAttribute("aria-selected",Number(button.dataset.index)===selectedIndex?"true":"false")}columnsPerRow(){if(this.isVirtualized){const width=(this.liveGeometryReady?this.renderRoot?.querySelector('[part="grid"]'):void 0)?.clientWidth??0,{itemSize,gap}=this.geometry();return Math.min(MAX_VIRTUAL_COLUMNS,Math.max(1,Math.floor((Math.max(width,itemSize)+gap)/(itemSize+gap))))}const buttons=this.optionButtons();if(buttons.length===0)return 1;const firstTop=buttons[0].offsetTop;let columns=0;for(const button of buttons){if(button.offsetTop!==firstTop)break;columns+=1}return Math.max(1,columns)}setActiveIndex(next,focusTarget){const buttons=this.optionButtons();if(buttons.length===0&&!this.isVirtualized)return;this.activeIndex=Math.max(0,Math.min(next,this.flatItems.length-1)),focusTarget&&(this.pendingGridFocus={item:this.flatItems[this.activeIndex],index:this.activeIndex});const target=this.isVirtualized?this.renderRoot.querySelector(`[part="emoji"][data-index="${this.activeIndex}"]`):buttons[this.activeIndex],previous=this.renderRoot.querySelector('[part="emoji"][data-active]');previous&&previous!==target&&(previous.tabIndex=-1,previous.removeAttribute("data-active")),target?(target.tabIndex=0,target.setAttribute("data-active",""),this.searchEl?.setAttribute("aria-activedescendant",target.id)):this.isVirtualized&&this.searchEl?.setAttribute("aria-activedescendant",`${this.gridId}-item-${this.activeIndex}`);const grid=this.renderRoot.querySelector('[part="grid"]');if(grid&&this.isVirtualized){const rowIndex=this.virtualRows().findIndex(row=>row.items.some(({index})=>index===this.activeIndex));if(rowIndex>=0){const{rowHeight}=this.geometry(),before=grid.scrollTop;revealRange(grid,rowIndex*rowHeight,rowHeight),grid.scrollTop!==before&&(this.virtualScrollTop=grid.scrollTop,this.requestUpdate())}}else grid&&target&&revealRow(grid,target);focusTarget&&target&&(this.pendingGridFocus=void 0,target.focus())}pick(item){if(this.liveDisabled)return;const detail={value:item.emoji,previousValue:this.value};this.value=item.emoji,this.syncSelectedProjection(),dispatchNativeInputEvent(this),this.emit("lr-input",detail),dispatchNativeEvent(this,"change"),this.emit("lr-change",detail)}cancelVirtualScrollFrame(){this.virtualScrollRaf!==void 0&&this.virtualScrollRafWindow?.cancelAnimationFrame(this.virtualScrollRaf),this.virtualScrollRaf=void 0,this.virtualScrollRafWindow=void 0,this.virtualScrollRafDocument=void 0}syncGridObserver(){const grid=this.renderRoot?.querySelector('[part="grid"]'),virtualized=this.isVirtualized,ownerDocument=this.ownerDocument;if(grid===this.observedGrid&&virtualized===this.observedGridVirtualized&&(!virtualized||this.gridResizeObserverDocument===ownerDocument)||(this.resetGridObserver(),!this.isConnected)||(this.observedGrid=grid??void 0,this.observedGridVirtualized=virtualized,!grid||!virtualized))return;grid.addEventListener("scroll",this.onGridScroll,{passive:!0});const ResizeObserverCtor=ownerDocument.defaultView?.ResizeObserver;if(!ResizeObserverCtor)return;const generation=this.ownerRealmGeneration,observer=new ResizeObserverCtor(()=>{this.gridResizeObserver!==observer||this.gridResizeObserverDocument!==ownerDocument||this.observedGrid!==grid||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.requestUpdate()});this.gridResizeObserver=observer,this.gridResizeObserverDocument=ownerDocument,observer.observe(grid)}resetGridObserver(){this.observedGrid?.removeEventListener("scroll",this.onGridScroll),this.gridResizeObserver?.disconnect(),this.gridResizeObserver=void 0,this.gridResizeObserverDocument=void 0,this.observedGrid=void 0,this.observedGridVirtualized=!1,this.cancelVirtualScrollFrame()}willUpdate(changed){super.willUpdate(changed),changed.has("groups")&&(this.geometryCache=void 0),this.syncGeometryProbe()}updated(changed){if(super.updated(changed),this.limitMounted&&changed.has("inputLimited")&&this.inputLimited&&this.limitAnnouncements.announcePolite(this.localize("emojiPickerInputLimit")),this.limitMounted=!0,this.bindRenderedGeometryProbe(),this.syncGridObserver(),this.syncExternalDescription(),this.loadBuiltInGroups(),!changed.has("queryText")&&!changed.has("groups")){this.restorePendingGridFocus();return}const buttons=this.optionButtons();if(buttons.length===0){this.searchEl?.removeAttribute("aria-activedescendant"),this.pendingGridFocus&&(this.pendingGridFocus=void 0,this.searchEl?.focus());return}if(this.pendingGridFocus){const retainedIndex=this.pendingGridFocus.item?this.flatItems.indexOf(this.pendingGridFocus.item):-1;this.activeIndex=retainedIndex>=0?retainedIndex:Math.max(0,Math.min(this.pendingGridFocus.index,this.flatItems.length-1)),this.pendingGridFocus={item:this.flatItems[this.activeIndex],index:this.activeIndex}}else!this.isVirtualized&&this.activeIndex>=buttons.length&&(this.activeIndex=0);this.setActiveIndex(this.activeIndex,!1),this.syncSelectedProjection(),this.restorePendingGridFocus()}restorePendingGridFocus(){if(!this.pendingGridFocus)return;const target=this.renderRoot.querySelector(`[part="emoji"][data-index="${this.activeIndex}"]`);target&&(this.pendingGridFocus=void 0,target.focus())}disconnectedCallback(){this.releaseExternalDescription(),super.disconnectedCallback(),this.resetOwnerRealmResources()}peerLoadMessage(){return this.localize(this.peerLoadFailure==="missing"?"emojiPickerPeerMissing":"emojiPickerLoadError")}announcePeerLoadFailure(){this.isConnected&&this.peerErrorAnnouncements.announceAssertive(this.peerLoadMessage())}adoptedCallback(){super.adoptedCallback(),this.peerErrorAnnouncements.adopted(),this.releaseExternalDescription(),this.resetOwnerRealmResources(),this.isConnected&&this.hasUpdated&&this.syncExternalDescription()}resetOwnerRealmResources(){this.ownerRealmGeneration+=1,this.pendingGridFocus=void 0,this.resetGridObserver(),this.resetGeometryObserver()}renderEmojiButton(item,itemIndex,total,selectedIndex){return html`<button
2
2
  type="button"
3
3
  part="emoji"
4
4
  id=${`${this.gridId}-item-${itemIndex}`}
@@ -30,6 +30,7 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
30
30
  ${this.label}<slot name="label"></slot>
31
31
  </div>
32
32
  <div part="base">
33
+ ${this.inputLimited?html`<p part="limit">${this.localize("emojiPickerInputLimit")}</p>`:nothing}
33
34
  <div part="search-wrapper">
34
35
  <input
35
36
  part="search"
@@ -100,4 +101,4 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
100
101
  <div data-probe="gap"></div>
101
102
  <div data-probe="row"></div>
102
103
  </div>
103
- `}}__decorate([state()],LyraEmojiPicker.prototype,"peerLoadFailure",void 0),__decorate([property({attribute:!1})],LyraEmojiPicker.prototype,"groups",null),__decorate([property({attribute:"aria-label"})],LyraEmojiPicker.prototype,"accessibleLabel",void 0),__decorate([property({attribute:"search-placeholder"})],LyraEmojiPicker.prototype,"searchPlaceholder",void 0),__decorate([property({reflect:!0})],LyraEmojiPicker.prototype,"size",void 0),__decorate([property()],LyraEmojiPicker.prototype,"label",void 0),__decorate([property()],LyraEmojiPicker.prototype,"hint",void 0),__decorate([property({attribute:"error-text"})],LyraEmojiPicker.prototype,"errorText",void 0),__decorate([state()],LyraEmojiPicker.prototype,"touched",void 0),__decorate([state()],LyraEmojiPicker.prototype,"queryText",void 0),__decorate([query('[part="search"]')],LyraEmojiPicker.prototype,"searchEl",void 0);export{LyraEmojiPicker};
104
+ `}}__decorate([state()],LyraEmojiPicker.prototype,"peerLoadFailure",void 0),__decorate([property({attribute:!1})],LyraEmojiPicker.prototype,"groups",null),__decorate([property({attribute:"aria-label"})],LyraEmojiPicker.prototype,"accessibleLabel",void 0),__decorate([property({attribute:"search-placeholder"})],LyraEmojiPicker.prototype,"searchPlaceholder",void 0),__decorate([property({reflect:!0})],LyraEmojiPicker.prototype,"size",void 0),__decorate([property()],LyraEmojiPicker.prototype,"label",void 0),__decorate([property()],LyraEmojiPicker.prototype,"hint",void 0),__decorate([property({attribute:"error-text"})],LyraEmojiPicker.prototype,"errorText",void 0),__decorate([state()],LyraEmojiPicker.prototype,"touched",void 0),__decorate([state()],LyraEmojiPicker.prototype,"queryText",void 0),__decorate([query('[part="search"]')],LyraEmojiPicker.prototype,"searchEl",void 0),__decorate([state()],LyraEmojiPicker.prototype,"inputLimited",void 0);export{LyraEmojiPicker};
@@ -1 +1 @@
1
- import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{formControlTextWrap,formControlFocusHalo,formControlRequiredMarker}from"../../../internal/form-control.styles.js";const styles=css` :host { display: block; inline-size: 100%; --_lr-emoji-picker-item-size-default: var(--lr-icon-button-size); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-lg); --_lr-emoji-picker-gap-default: var(--lr-space-2xs); --_lr-emoji-picker-control-gap-default: var(--lr-space-xs); --_lr-emoji-picker-radius-default: var(--lr-radius); --_lr-emoji-picker-item-radius-default: var(--lr-radius-xs); --_lr-emoji-picker-row-height-default: calc(max(var(--lr-icon-button-size), var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default))) + var(--lr-space-l)); --_lr-form-control-focus-shadow: var(--lr-form-control-focus-shadow, none); } :host([size='2xs']) { --_lr-emoji-picker-item-size-default: var(--lr-size-1-5rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-sm); } :host([size='xs']) { --_lr-emoji-picker-item-size-default: var(--lr-size-1-75rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-md-sm); } :host([size='s']), :host([size='small']) { --_lr-emoji-picker-item-size-default: var(--lr-size-2rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-m); } :host([size='l']), :host([size='large']) { --_lr-emoji-picker-item-size-default: var(--lr-size-3rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-xl); } :host([size='xl']) { --_lr-emoji-picker-item-size-default: var(--lr-size-3-5rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-2xl); } [part='form-control'] { display: flex; flex-direction: column; gap: var(--lr-emoji-picker-control-gap, var(--_lr-emoji-picker-control-gap-default)); } [part='form-control-label'] { color: var(--lr-color-text); font-size: var(--lr-font-size-md-sm); } [part='form-control-label'][hidden], [part='hint'][hidden], [part='error'][hidden] { display: none; } ${formControlRequiredMarker} [part='hint'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='error'] { color: var(--lr-color-danger); font-size: var(--lr-font-size-sm); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-emoji-picker-control-gap, var(--_lr-emoji-picker-control-gap-default)); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-emoji-picker-radius, var(--_lr-emoji-picker-radius-default)); padding: var(--lr-space-s); background: var(--lr-color-surface); } :host(:disabled) [part='base'] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='search']:disabled, [part='emoji']:disabled { cursor: not-allowed; } [part='search-wrapper'] { display: flex; align-items: center; gap: var(--lr-emoji-picker-search-clear-gap, var(--lr-space-xs)); } [part='search'] { flex: 1 1 auto; min-inline-size: 0; min-block-size: var(--lr-emoji-picker-search-min-height, auto); padding-block: var(--lr-emoji-picker-search-padding-block, var(--lr-space-xs)); padding-inline: var(--lr-emoji-picker-search-padding-inline, var(--lr-space-s)); border: var(--lr-border-width-thin) solid var(--lr-emoji-picker-search-border-color, var(--lr-color-border)); border-radius: var(--lr-emoji-picker-item-radius, var(--_lr-emoji-picker-item-radius-default)); background: var(--lr-emoji-picker-search-fill, var(--lr-color-surface)); color: var(--lr-color-text); font: inherit; font-size: var(--lr-emoji-picker-search-font-size, inherit); transition: border-color var(--lr-transition-fast); } [part='search']:focus-visible { ${focusRing} } [part='search']:focus { ${formControlFocusHalo} } [part='search']:hover:not(:disabled) { border-color: var(--lr-emoji-picker-search-hover-border-color, var(--lr-color-brand)); } [part='search']::-webkit-search-cancel-button, [part='search']::-webkit-search-decoration { appearance: none; } [part='search-clear'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; ${iconHitTarget} border: 0; border-radius: var(--lr-emoji-picker-item-radius, var(--_lr-emoji-picker-item-radius-default)); background: transparent; cursor: pointer; color: var(--lr-color-text-quiet); padding: var(--lr-space-xs); font: inherit; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [part='search-clear']:not(:disabled):hover { color: var(--lr-color-text); } [part='search-clear']:not(:disabled):active { color: var(--lr-color-text); background: color-mix( in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part='search-clear']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * var(--lr-focus-ring-width)); } [part='search-clear']:disabled { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='grid'] { position: relative; display: flex; flex-wrap: wrap; gap: var(--lr-emoji-picker-gap, var(--_lr-emoji-picker-gap-default)); max-block-size: var(--lr-size-16rem); overflow-block: auto; overflow-inline: hidden; } [part='grid'] { scrollbar-gutter: var(--lr-theme-scrollbar-gutter, stable); scrollbar-width: var(--lr-theme-scrollbar-width, auto); } [data-probe='root'] { position: absolute; inset-block-start: 0; inset-inline-start: 0; visibility: hidden; pointer-events: none; } [data-probe='item'], [data-probe='gap'], [data-probe='row'] { block-size: 0; } [data-probe='item'] { inline-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); min-inline-size: var(--lr-icon-button-size); } [data-probe='gap'] { inline-size: var(--lr-emoji-picker-gap, var(--_lr-emoji-picker-gap-default)); } [data-probe='row'] { inline-size: var(--lr-emoji-picker-row-height, var(--_lr-emoji-picker-row-height-default)); } [part='virtual-spacer'] { position: relative; inline-size: 100%; min-inline-size: 0; min-block-size: 100%; } [part='virtual-row'] { position: absolute; inset-inline: 0; inset-block-start: 0; min-block-size: var(--lr-emoji-picker-row-height, var(--_lr-emoji-picker-row-height-default)); } [part='virtual-items'] { display: flex; gap: var(--lr-emoji-picker-gap, var(--_lr-emoji-picker-gap-default)); min-block-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); } [part='virtual-label'] { block-size: var(--lr-space-l); } [part='group-label'] { flex-basis: 100%; padding-block: var(--lr-space-2xs); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-xs); font-weight: var(--lr-font-weight-semibold); } [part='emoji'] { display: inline-flex; align-items: center; justify-content: center; inline-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); block-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); ${iconHitTarget} border: none; border-radius: var(--lr-emoji-picker-item-radius, var(--_lr-emoji-picker-item-radius-default)); background: transparent; color: var(--lr-color-text); font-size: var(--lr-emoji-picker-glyph-size, var(--_lr-emoji-picker-glyph-size-default)); cursor: pointer; transition: background-color var(--lr-transition-fast); } [part='emoji']:hover:not(:disabled) { background: var( --lr-emoji-picker-hover-bg, var(--lr-emoji-picker-active-bg, var(--lr-color-brand-quiet)) ); } [part='emoji'][aria-selected='true'] { background: var(--lr-emoji-picker-selected-bg, var(--lr-color-brand-quiet)); color: var(--lr-emoji-picker-selected-color, var(--lr-color-text)); outline: var(--lr-border-width-thin) solid var(--lr-emoji-picker-selected-outline-color, var(--lr-color-brand)); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='emoji'][data-active] { background: var( --lr-emoji-picker-keyboard-active-bg, var(--lr-emoji-picker-active-bg, var(--lr-color-brand-quiet)) ); outline: var(--lr-border-width-thin) dotted var(--lr-emoji-picker-keyboard-active-outline-color, var(--lr-color-brand)); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='emoji']:active:not(:disabled) { background: var( --lr-emoji-picker-pressed-bg, color-mix( in oklab, var(--lr-emoji-picker-hover-bg, var(--lr-emoji-picker-active-bg, var(--lr-color-brand-quiet))), var(--lr-color-mix-partner) var(--lr-color-mix-active) ) ); outline-color: var(--lr-emoji-picker-pressed-outline-color, var(--lr-color-brand)); outline-style: double; } [part='emoji']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='empty'], [part='load-error'] { flex-basis: 100%; padding: var(--lr-space-m); text-align: center; color: var(--lr-color-text-quiet); } [part='load-error'] { color: var(--lr-color-danger); } .group { display: contents; } [part='load-retry'] { justify-self: center; ${iconHitTarget} padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius-button); background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; cursor: pointer; transition: var(--lr-transition-interactive); } [part='load-retry']:where(:hover:not(:disabled)) { background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-text) var(--lr-color-mix-hover)); } [part='load-retry']:where(:active:not(:disabled)) { background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-text) var(--lr-color-mix-active)); } [part='load-retry']:focus-visible { ${focusRing} } [part='load-retry']:where(:disabled) { cursor: default; opacity: var(--lr-opacity-disabled); } [part='form-control'], [part='form-control-label'], [part='hint'], [part='error'] { ${formControlTextWrap} } @media (forced-colors: active) { [part='emoji']:hover:not(:disabled) { outline: var(--lr-border-width-thin) dashed Highlight; outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='emoji'][aria-selected='true'] { color: HighlightText; background: Highlight; outline: var(--lr-border-width-medium) solid Highlight; } [part='emoji'][data-active] { outline: var(--lr-border-width-thin) dotted Highlight; } [part='emoji']:active:not(:disabled) { color: HighlightText; background: Highlight; outline: var(--lr-border-width-medium) double Highlight; } } `;export{styles};
1
+ import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{formControlTextWrap,formControlFocusHalo,formControlRequiredMarker}from"../../../internal/form-control.styles.js";const styles=css` [part='limit'] { margin: 0; padding: var(--lr-space-s); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); overflow-wrap: anywhere; } :host { display: block; inline-size: 100%; --_lr-emoji-picker-item-size-default: var(--lr-icon-button-size); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-lg); --_lr-emoji-picker-gap-default: var(--lr-space-2xs); --_lr-emoji-picker-control-gap-default: var(--lr-space-xs); --_lr-emoji-picker-radius-default: var(--lr-radius); --_lr-emoji-picker-item-radius-default: var(--lr-radius-xs); --_lr-emoji-picker-row-height-default: calc(max(var(--lr-icon-button-size), var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default))) + var(--lr-space-l)); --_lr-form-control-focus-shadow: var(--lr-form-control-focus-shadow, none); } :host([size='2xs']) { --_lr-emoji-picker-item-size-default: var(--lr-size-1-5rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-sm); } :host([size='xs']) { --_lr-emoji-picker-item-size-default: var(--lr-size-1-75rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-md-sm); } :host([size='s']), :host([size='small']) { --_lr-emoji-picker-item-size-default: var(--lr-size-2rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-m); } :host([size='l']), :host([size='large']) { --_lr-emoji-picker-item-size-default: var(--lr-size-3rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-xl); } :host([size='xl']) { --_lr-emoji-picker-item-size-default: var(--lr-size-3-5rem); --_lr-emoji-picker-glyph-size-default: var(--lr-font-size-2xl); } [part='form-control'] { display: flex; flex-direction: column; gap: var(--lr-emoji-picker-control-gap, var(--_lr-emoji-picker-control-gap-default)); } [part='form-control-label'] { color: var(--lr-color-text); font-size: var(--lr-font-size-md-sm); } [part='form-control-label'][hidden], [part='hint'][hidden], [part='error'][hidden] { display: none; } ${formControlRequiredMarker} [part='hint'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='error'] { color: var(--lr-color-danger); font-size: var(--lr-font-size-sm); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-emoji-picker-control-gap, var(--_lr-emoji-picker-control-gap-default)); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-emoji-picker-radius, var(--_lr-emoji-picker-radius-default)); padding: var(--lr-space-s); background: var(--lr-color-surface); } :host(:disabled) [part='base'] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='search']:disabled, [part='emoji']:disabled { cursor: not-allowed; } [part='search-wrapper'] { display: flex; align-items: center; gap: var(--lr-emoji-picker-search-clear-gap, var(--lr-space-xs)); } [part='search'] { flex: 1 1 auto; min-inline-size: 0; min-block-size: var(--lr-emoji-picker-search-min-height, auto); padding-block: var(--lr-emoji-picker-search-padding-block, var(--lr-space-xs)); padding-inline: var(--lr-emoji-picker-search-padding-inline, var(--lr-space-s)); border: var(--lr-border-width-thin) solid var(--lr-emoji-picker-search-border-color, var(--lr-color-border)); border-radius: var(--lr-emoji-picker-item-radius, var(--_lr-emoji-picker-item-radius-default)); background: var(--lr-emoji-picker-search-fill, var(--lr-color-surface)); color: var(--lr-color-text); font: inherit; font-size: var(--lr-emoji-picker-search-font-size, inherit); transition: border-color var(--lr-transition-fast); } [part='search']:focus-visible { ${focusRing} } [part='search']:focus { ${formControlFocusHalo} } [part='search']:hover:not(:disabled) { border-color: var(--lr-emoji-picker-search-hover-border-color, var(--lr-color-brand)); } [part='search']::-webkit-search-cancel-button, [part='search']::-webkit-search-decoration { appearance: none; } [part='search-clear'] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; ${iconHitTarget} border: 0; border-radius: var(--lr-emoji-picker-item-radius, var(--_lr-emoji-picker-item-radius-default)); background: transparent; cursor: pointer; color: var(--lr-color-text-quiet); padding: var(--lr-space-xs); font: inherit; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [part='search-clear']:not(:disabled):hover { color: var(--lr-color-text); } [part='search-clear']:not(:disabled):active { color: var(--lr-color-text); background: color-mix( in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part='search-clear']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * var(--lr-focus-ring-width)); } [part='search-clear']:disabled { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='grid'] { position: relative; display: flex; flex-wrap: wrap; gap: var(--lr-emoji-picker-gap, var(--_lr-emoji-picker-gap-default)); max-block-size: var(--lr-size-16rem); overflow-block: auto; overflow-inline: hidden; } [part='grid'] { scrollbar-gutter: var(--lr-theme-scrollbar-gutter, stable); scrollbar-width: var(--lr-theme-scrollbar-width, auto); } [data-probe='root'] { position: absolute; inset-block-start: 0; inset-inline-start: 0; visibility: hidden; pointer-events: none; } [data-probe='item'], [data-probe='gap'], [data-probe='row'] { block-size: 0; } [data-probe='item'] { inline-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); min-inline-size: var(--lr-icon-button-size); } [data-probe='gap'] { inline-size: var(--lr-emoji-picker-gap, var(--_lr-emoji-picker-gap-default)); } [data-probe='row'] { inline-size: var(--lr-emoji-picker-row-height, var(--_lr-emoji-picker-row-height-default)); } [part='virtual-spacer'] { position: relative; inline-size: 100%; min-inline-size: 0; min-block-size: 100%; } [part='virtual-row'] { position: absolute; inset-inline: 0; inset-block-start: 0; min-block-size: var(--lr-emoji-picker-row-height, var(--_lr-emoji-picker-row-height-default)); } [part='virtual-items'] { display: flex; gap: var(--lr-emoji-picker-gap, var(--_lr-emoji-picker-gap-default)); min-block-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); } [part='virtual-label'] { block-size: var(--lr-space-l); } [part='group-label'] { flex-basis: 100%; padding-block: var(--lr-space-2xs); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-xs); font-weight: var(--lr-font-weight-semibold); } [part='emoji'] { display: inline-flex; align-items: center; justify-content: center; inline-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); block-size: var(--lr-emoji-picker-item-size, var(--_lr-emoji-picker-item-size-default)); ${iconHitTarget} border: none; border-radius: var(--lr-emoji-picker-item-radius, var(--_lr-emoji-picker-item-radius-default)); background: transparent; color: var(--lr-color-text); font-size: var(--lr-emoji-picker-glyph-size, var(--_lr-emoji-picker-glyph-size-default)); cursor: pointer; transition: background-color var(--lr-transition-fast); } [part='emoji']:hover:not(:disabled) { background: var( --lr-emoji-picker-hover-bg, var(--lr-emoji-picker-active-bg, var(--lr-color-brand-quiet)) ); } [part='emoji'][aria-selected='true'] { background: var(--lr-emoji-picker-selected-bg, var(--lr-color-brand-quiet)); color: var(--lr-emoji-picker-selected-color, var(--lr-color-text)); outline: var(--lr-border-width-thin) solid var(--lr-emoji-picker-selected-outline-color, var(--lr-color-brand)); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='emoji'][data-active] { background: var( --lr-emoji-picker-keyboard-active-bg, var(--lr-emoji-picker-active-bg, var(--lr-color-brand-quiet)) ); outline: var(--lr-border-width-thin) dotted var(--lr-emoji-picker-keyboard-active-outline-color, var(--lr-color-brand)); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='emoji']:active:not(:disabled) { background: var( --lr-emoji-picker-pressed-bg, color-mix( in oklab, var(--lr-emoji-picker-hover-bg, var(--lr-emoji-picker-active-bg, var(--lr-color-brand-quiet))), var(--lr-color-mix-partner) var(--lr-color-mix-active) ) ); outline-color: var(--lr-emoji-picker-pressed-outline-color, var(--lr-color-brand)); outline-style: double; } [part='emoji']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='empty'], [part='load-error'] { flex-basis: 100%; padding: var(--lr-space-m); text-align: center; color: var(--lr-color-text-quiet); } [part='load-error'] { color: var(--lr-color-danger); } .group { display: contents; } [part='load-retry'] { justify-self: center; ${iconHitTarget} padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius-button); background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; cursor: pointer; transition: var(--lr-transition-interactive); } [part='load-retry']:where(:hover:not(:disabled)) { background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-text) var(--lr-color-mix-hover)); } [part='load-retry']:where(:active:not(:disabled)) { background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-text) var(--lr-color-mix-active)); } [part='load-retry']:focus-visible { ${focusRing} } [part='load-retry']:where(:disabled) { cursor: default; opacity: var(--lr-opacity-disabled); } [part='form-control'], [part='form-control-label'], [part='hint'], [part='error'] { ${formControlTextWrap} } @media (forced-colors: active) { [part='emoji']:hover:not(:disabled) { outline: var(--lr-border-width-thin) dashed Highlight; outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='emoji'][aria-selected='true'] { color: HighlightText; background: Highlight; outline: var(--lr-border-width-medium) solid Highlight; } [part='emoji'][data-active] { outline: var(--lr-border-width-thin) dotted Highlight; } [part='emoji']:active:not(:disabled) { color: HighlightText; background: Highlight; outline: var(--lr-border-width-medium) double Highlight; } } `;export{styles};
@@ -72,6 +72,8 @@ export interface LyraLocaleChangeDetail{value:string;previousValue:string;direct
72
72
  * relationships track target replacement, missing IDs, removal/reinsertion, reconnect, and adoption.
73
73
  * Removed label/hint/error-text content is safely omitted without changing null property readback.
74
74
  *
75
+ * Explicit locale catalogs retain the first 512 source entries; unset discovery remains live. Input loss is disclosed through the limit part.
76
+ *
75
77
  * @customElement lr-locale-picker
76
78
  * @event lr-change-request - Cancelable before selection, popup, and global locale changes. Same detail as `lr-change`.
77
79
  * @event {Event} input - Native event after an accepted selection commits, before `lr-input`.
@@ -89,6 +91,7 @@ export interface LyraLocaleChangeDetail{value:string;previousValue:string;direct
89
91
  * @slot label - Custom label content.
90
92
  * @slot hint - Custom hint content.
91
93
  * @slot error - Custom error content.
94
+ * @csspart limit - Localized notice when input admission omits catalog data.
92
95
  * @csspart form-control - The outer wrapper around label, trigger, listbox, error and hint.
93
96
  * @csspart form-control-label - The `<label>` element (only rendered — and only contributes to
94
97
  * the accessible name — once `label` is non-empty).
@@ -177,7 +180,10 @@ export declare class LyraLocalePicker extends LyraFormControlElement<LyraLocaleP
177
180
  * Import loadLyraLocale from the optional locale-loader.js entry to load built-in catalogs.
178
181
  * Unset preserves synchronous selection. Failures keep the previous value and offer retry;
179
182
  * an open popup places outside the failure guidance so Retry remains reachable. */
180
- get localeLoader():LyraLocaleLoader|undefined;set localeLoader(next:LyraLocaleLoader|undefined);private _locales?;get locales():LyraLocaleCatalog|undefined;set locales(next:LyraLocaleCatalog|undefined);
183
+ get localeLoader():LyraLocaleLoader|undefined;set localeLoader(next:LyraLocaleLoader|undefined);private _locales?;
184
+ /** Explicit catalogs retain the first 512 source entries and disclose loss through the limit part.
185
+ * Unset uses the live locale registry; an empty array opts out of discovery. */
186
+ get locales():LyraLocaleCatalog|undefined;set locales(next:LyraLocaleCatalog|undefined);
181
187
  /** Omits every `<lr-flag>` -- each row's leading flag and the trigger flag -- for text-only
182
188
  * rows. The composition recipe this component supersedes (`lr-popover` + `lr-flag`) already
183
189
  * pairs a locale switcher with flags by convention, so flags render unless this is set. */
@@ -272,4 +278,4 @@ get effectiveDisabled():boolean;private updateValidity;private refreshLocalizedI
272
278
  *
273
279
  * The message is caller-supplied content, so it is used verbatim and never localized here.
274
280
  */
275
- setCustomValidity(message:string):void;private get normalizedEntries();private entriesCache?;private visibleCache?;private normalizeSearch;private get visibleEntries();private clearSearch;private queueSearchFocus;private get previewTag();private entryFor;private labelFor;private show;private hide;private dismissFromEscape;private onDocPointer;private activatePopupOverlay;private deactivatePopupOverlay;private syncPopup;private settleClosedLayout;protected updated(changed:PropertyValues):void;private commitDispatching;private valueWriteVersion;private loadGeneration;private loadAnnouncements?;private loadingTag?;private loadFailureTag?;private cancelLocaleLoad;private announceLoad;private commit;private retryLocaleLoad;private onTriggerClick;private onTriggerBlur;private onTriggerFocus;private isSearchFocusTransfer;private onSearchInput;private onSearchChange;private onSearchKeyDown;private typeAhead;private setActiveIndex;private queueActiveScroll;private onKeyDown;private onListboxMouseDown;private onListboxClick;private renderRows;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-locale-picker':LyraLocalePicker;}}
281
+ setCustomValidity(message:string):void;private get normalizedEntries();private entriesCache?;private searchKeys?;private visibleCache?;private normalizeSearch;private get visibleEntries();private clearSearch;private queueSearchFocus;private get previewTag();private entryIndex?;private entryFor;private labelFor;private show;private hide;private dismissFromEscape;private onDocPointer;private activatePopupOverlay;private deactivatePopupOverlay;private syncPopup;private settleClosedLayout;private inputLimited;private readonly limitAnnouncements;private limitMounted;protected updated(changed:PropertyValues):void;private commitDispatching;private valueWriteVersion;private loadGeneration;private loadAnnouncements?;private loadingTag?;private loadFailureTag?;private cancelLocaleLoad;private announceLoad;private commit;private retryLocaleLoad;private onTriggerClick;private onTriggerBlur;private onTriggerFocus;private isSearchFocusTransfer;private onSearchInput;private onSearchChange;private onSearchKeyDown;private typeAhead;private setActiveIndex;private queueActiveScroll;private onKeyDown;private onListboxMouseDown;private onListboxClick;private renderRows;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-locale-picker':LyraLocalePicker;}}