@aceshooting/lyra-ui 19.0.1 → 20.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +14 -4
  5. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
  6. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +1 -0
  7. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +4 -3
  8. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +1 -1
  9. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts +3 -1
  10. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -0
  11. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +4 -3
  12. package/dist/components/agent-tools/context-inspector/context-inspector.styles.js +1 -1
  13. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +1 -1
  14. package/dist/components/agent-tools/eval-result/eval-result.class.js +1 -1
  15. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts +1 -0
  16. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +4 -3
  17. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js +1 -1
  18. package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts +1 -0
  19. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +4 -3
  20. package/dist/components/agent-tools/policy-summary/policy-summary.styles.js +1 -1
  21. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +1 -1
  22. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +10 -1
  23. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +3 -3
  24. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  25. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +6 -3
  26. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  27. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +14 -3
  28. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  29. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +12 -2
  30. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -1
  31. package/dist/components/charts/chart/box-plot.class.d.ts +15 -3
  32. package/dist/components/charts/chart/box-plot.class.js +3 -3
  33. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  34. package/dist/components/charts/chart/chart.class.d.ts +23 -5
  35. package/dist/components/charts/chart/chart.class.js +2 -2
  36. package/dist/components/charts/chart/chart.styles.js +1 -1
  37. package/dist/components/charts/chart/lite-chart.class.js +1 -1
  38. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  39. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +4 -2
  40. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  41. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  42. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  43. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +4 -3
  44. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  45. package/dist/components/conversation/code-block/code-block-core.class.d.ts +6 -11
  46. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  47. package/dist/components/conversation/code-block/code-block-shared.d.ts +29 -1
  48. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  49. package/dist/components/conversation/code-block/code-block.class.d.ts +6 -11
  50. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  51. package/dist/components/conversation/markdown/markdown-shared.js +2 -2
  52. package/dist/components/conversation/message-actions/message-actions.class.d.ts +4 -2
  53. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  54. package/dist/components/conversation/message-parts/message-parts.class.d.ts +17 -2
  55. package/dist/components/conversation/model-select/model-select.class.js +1 -0
  56. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  57. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +5 -1
  58. package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -2
  59. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +6 -1
  60. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +2 -2
  61. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +5 -1
  62. package/dist/components/conversation/realtime-session/realtime-session.class.js +1 -1
  63. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +5 -1
  64. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  65. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +13 -2
  66. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -3
  67. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  68. package/dist/components/data/calendar/calendar.class.d.ts +9 -0
  69. package/dist/components/data/calendar/calendar.class.js +2 -2
  70. package/dist/components/data/calendar/calendar.styles.js +1 -1
  71. package/dist/components/data/condition-builder/condition-builder.class.d.ts +5 -1
  72. package/dist/components/data/context-meter/context-meter.class.d.ts +4 -0
  73. package/dist/components/data/context-meter/context-meter.styles.js +1 -1
  74. package/dist/components/data/data-grid/data-grid.class.d.ts +8 -2
  75. package/dist/components/data/data-grid/data-grid.class.js +1 -2
  76. package/dist/components/data/flow-node/flow-node.class.d.ts +7 -4
  77. package/dist/components/data/flow-node/flow-node.styles.js +1 -1
  78. package/dist/components/data/funnel/funnel.class.d.ts +5 -0
  79. package/dist/components/data/funnel/funnel.class.js +4 -3
  80. package/dist/components/data/funnel/funnel.styles.js +1 -1
  81. package/dist/components/data/gauge/gauge.class.d.ts +12 -1
  82. package/dist/components/data/gauge/gauge.styles.js +1 -1
  83. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +50 -13
  84. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +2 -2
  85. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  86. package/dist/components/data/heatmap/heatmap.class.d.ts +27 -9
  87. package/dist/components/data/heatmap/heatmap.class.js +5 -3
  88. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +2 -0
  89. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  90. package/dist/components/data/table/table.class.d.ts +8 -0
  91. package/dist/components/data/table/table.class.js +2 -1
  92. package/dist/components/data/tree/tree.class.d.ts +20 -1
  93. package/dist/components/data/tree/tree.class.js +1 -1
  94. package/dist/components/data/word-cloud/word-cloud.class.d.ts +4 -1
  95. package/dist/components/data/word-cloud/word-cloud.class.js +2 -2
  96. package/dist/components/forms/button/button.class.js +1 -1
  97. package/dist/components/forms/checkbox/checkbox.class.d.ts +11 -8
  98. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  99. package/dist/components/forms/checkbox/checkbox.styles.js +1 -1
  100. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +2 -2
  101. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  102. package/dist/components/forms/code-editor/code-editor.class.d.ts +2 -0
  103. package/dist/components/forms/code-editor/code-editor.class.js +1 -1
  104. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  105. package/dist/components/forms/color-picker/color-picker.class.d.ts +11 -1
  106. package/dist/components/forms/color-picker/color-picker.class.js +4 -3
  107. package/dist/components/forms/combobox/combobox.class.d.ts +67 -18
  108. package/dist/components/forms/combobox/combobox.class.js +7 -6
  109. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  110. package/dist/components/forms/date-picker/date-input.class.d.ts +22 -2
  111. package/dist/components/forms/date-picker/date-input.class.js +4 -2
  112. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  113. package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +18 -4
  114. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  115. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +18 -4
  116. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  117. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
  118. package/dist/components/forms/icon-button/icon-button.class.d.ts +1 -1
  119. package/dist/components/forms/input/time-input.class.d.ts +11 -1
  120. package/dist/components/forms/input/time-input.class.js +4 -3
  121. package/dist/components/forms/input/time-input.styles.js +1 -1
  122. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  123. package/dist/components/forms/locale-picker/locale-picker.class.js +3 -2
  124. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  125. package/dist/components/forms/otp-input/otp-input.class.d.ts +13 -5
  126. package/dist/components/forms/otp-input/otp-input.class.js +2 -2
  127. package/dist/components/forms/otp-input/otp-input.styles.js +1 -1
  128. package/dist/components/forms/phone-input/phone-input.class.d.ts +10 -3
  129. package/dist/components/forms/phone-input/phone-input.class.js +6 -2
  130. package/dist/components/forms/phone-input/phone-input.styles.js +1 -1
  131. package/dist/components/forms/radio/radio-group.class.d.ts +1 -1
  132. package/dist/components/forms/radio/radio-group.class.js +2 -2
  133. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +9 -1
  134. package/dist/components/forms/rubric-form/rubric-form.class.js +5 -3
  135. package/dist/components/forms/select/select.class.d.ts +4 -0
  136. package/dist/components/forms/select/select.styles.js +1 -1
  137. package/dist/components/forms/slider/slider.class.d.ts +5 -1
  138. package/dist/components/forms/slider/slider.class.js +3 -3
  139. package/dist/components/forms/switch/switch.class.d.ts +6 -5
  140. package/dist/components/forms/switch/switch.class.js +1 -1
  141. package/dist/components/forms/time-range/time-range.class.d.ts +2 -2
  142. package/dist/components/forms/token-input/token-input.class.d.ts +13 -3
  143. package/dist/components/forms/token-input/token-input.class.js +3 -1
  144. package/dist/components/layout/carousel/carousel.class.d.ts +4 -1
  145. package/dist/components/layout/carousel/carousel.class.js +1 -1
  146. package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -2
  147. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  148. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  149. package/dist/components/layout/details/accordion.class.js +1 -1
  150. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +10 -7
  151. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -2
  152. package/dist/components/layout/dock-panel/dock-panel.styles.js +1 -1
  153. package/dist/components/layout/menu/menu.class.d.ts +13 -3
  154. package/dist/components/layout/menu/menu.class.js +4 -3
  155. package/dist/components/layout/menu/menu.styles.js +1 -1
  156. package/dist/components/layout/page/page.class.d.ts +7 -1
  157. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
  158. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  159. package/dist/components/layout/segmented/segmented.class.d.ts +2 -0
  160. package/dist/components/layout/segmented/segmented.styles.js +1 -1
  161. package/dist/components/layout/virtual-list/virtual-list.styles.js +1 -1
  162. package/dist/components/layout/widget/widget.class.d.ts +15 -2
  163. package/dist/components/layout/widget/widget.class.js +1 -1
  164. package/dist/components/layout/widget/widget.styles.js +1 -1
  165. package/dist/components/media/avatar/avatar.class.d.ts +4 -0
  166. package/dist/components/media/avatar/avatar.styles.js +1 -1
  167. package/dist/components/media/avatar-group/avatar-group.class.d.ts +8 -1
  168. package/dist/components/media/avatar-group/avatar-group.styles.js +1 -1
  169. package/dist/components/media/drop-zone/drop-zone.class.d.ts +10 -4
  170. package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
  171. package/dist/components/media/drop-zone/drop-zone.styles.js +1 -1
  172. package/dist/components/media/flag/flag.class.js +1 -1
  173. package/dist/components/media/map/map.class.d.ts +19 -5
  174. package/dist/components/media/map/map.class.js +3 -3
  175. package/dist/components/media/video-playlist/video-playlist.class.d.ts +6 -3
  176. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  177. package/dist/components/overlays/callout/callout.class.d.ts +4 -1
  178. package/dist/components/overlays/dialog/dialog.class.d.ts +4 -1
  179. package/dist/components/overlays/overlay/overlay.styles.js +1 -1
  180. package/dist/components/overlays/overlay/popover.class.d.ts +9 -1
  181. package/dist/components/overlays/overlay/popover.class.js +3 -2
  182. package/dist/components/overlays/overlay/tooltip.class.d.ts +14 -4
  183. package/dist/components/overlays/overlay/tooltip.class.js +3 -2
  184. package/dist/components/overlays/popup/popup.class.d.ts +15 -1
  185. package/dist/components/overlays/popup/popup.class.js +3 -3
  186. package/dist/components/overlays/popup/popup.styles.js +1 -1
  187. package/dist/components/overlays/progress/progress-bar.class.d.ts +2 -0
  188. package/dist/components/overlays/progress/progress.styles.js +1 -1
  189. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +4 -2
  190. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  191. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +4 -0
  192. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +4 -3
  193. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +1 -1
  194. package/dist/components/retrieval/community-card/community-card.class.d.ts +6 -1
  195. package/dist/components/retrieval/community-card/community-card.styles.js +1 -1
  196. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +9 -1
  197. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +4 -3
  198. package/dist/components/retrieval/entity-card/entity-card.styles.js +1 -1
  199. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +4 -2
  200. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  201. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +2 -2
  202. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +18 -4
  203. package/dist/components/retrieval/graph-legend/graph-legend.class.js +2 -2
  204. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +7 -0
  205. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +4 -3
  206. package/dist/components/retrieval/grounding-summary/grounding-summary.styles.js +1 -1
  207. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -0
  208. package/dist/components/retrieval/memory-panel/memory-panel.class.js +4 -3
  209. package/dist/components/retrieval/memory-panel/memory-panel.styles.js +1 -1
  210. package/dist/components/retrieval/mind-map/mind-map-layout.d.ts +17 -1
  211. package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
  212. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +8 -1
  213. package/dist/components/retrieval/mind-map/mind-map.class.js +3 -2
  214. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +5 -0
  215. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +6 -5
  216. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
  217. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +5 -5
  218. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  219. package/dist/components/retrieval/source-list/source-list.class.d.ts +21 -2
  220. package/dist/components/retrieval/source-list/source-list.class.js +2 -2
  221. package/dist/components/retrieval/source-list/source-list.styles.js +1 -1
  222. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +3 -1
  223. package/dist/components/retrieval/source-picker/source-picker.class.js +2 -2
  224. package/dist/components/utility/diff-view/diff-view.class.d.ts +105 -8
  225. package/dist/components/utility/diff-view/diff-view.class.js +21 -5
  226. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  227. package/dist/components/utility/export-button/export-button.class.d.ts +26 -2
  228. package/dist/components/utility/export-button/export-button.class.js +4 -2
  229. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  230. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +19 -1
  231. package/dist/components/utility/mention-popover/mention-popover.class.js +3 -2
  232. package/dist/components/utility/mention-popover/mention-popover.styles.js +1 -1
  233. package/dist/components/utility/tour/tour.class.d.ts +1 -3
  234. package/dist/components/utility/tour/tour.class.js +1 -1
  235. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +20 -3
  236. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  237. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  238. package/dist/components/viewers/geojson-view/geojson-view.styles.js +1 -1
  239. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +5 -0
  240. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +6 -3
  241. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +7 -1
  242. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +1 -1
  243. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +7 -1
  244. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +1 -1
  245. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +5 -0
  246. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
  247. package/dist/custom-elements-jsx.d.ts +1 -1
  248. package/dist/events.d.ts +79 -30
  249. package/dist/internal/accessibility-visibility.js +1 -1
  250. package/dist/internal/aria-reflection.js +1 -1
  251. package/dist/internal/catalog-picker.d.ts +14 -3
  252. package/dist/internal/catalog-picker.js +1 -1
  253. package/dist/internal/default-strings.generated.d.ts +1 -1
  254. package/dist/internal/default-strings.generated.js +2 -2
  255. package/dist/internal/localization-types.d.ts +1 -1
  256. package/dist/internal/localization.js +2 -2
  257. package/dist/internal/lyra-element.d.ts +17 -0
  258. package/dist/internal/lyra-element.js +2 -2
  259. package/dist/internal/package-metadata.d.ts +1 -1
  260. package/dist/internal/package-metadata.js +1 -1
  261. package/dist/svelte.d.ts +1 -1
  262. package/dist/testing/lyra-tag-event-map.js +1 -1
  263. package/dist/translations/ar/agent-tools.js +1 -1
  264. package/dist/translations/ar/data.js +1 -1
  265. package/dist/translations/ar/retrieval.js +1 -1
  266. package/dist/translations/ar/shared.js +1 -1
  267. package/dist/translations/ar/viewers.js +1 -1
  268. package/dist/translations/de/agent-tools.js +1 -1
  269. package/dist/translations/de/data.js +1 -1
  270. package/dist/translations/de/retrieval.js +1 -1
  271. package/dist/translations/de/shared.js +1 -1
  272. package/dist/translations/de/viewers.js +1 -1
  273. package/dist/translations/es/agent-tools.js +1 -1
  274. package/dist/translations/es/data.js +1 -1
  275. package/dist/translations/es/retrieval.js +1 -1
  276. package/dist/translations/es/shared.js +1 -1
  277. package/dist/translations/es/viewers.js +1 -1
  278. package/dist/translations/fa/agent-tools.js +1 -1
  279. package/dist/translations/fa/data.js +1 -1
  280. package/dist/translations/fa/retrieval.js +1 -1
  281. package/dist/translations/fa/shared.js +1 -1
  282. package/dist/translations/fa/viewers.js +1 -1
  283. package/dist/translations/fr/agent-tools.js +1 -1
  284. package/dist/translations/fr/data.js +1 -1
  285. package/dist/translations/fr/retrieval.js +1 -1
  286. package/dist/translations/fr/shared.js +1 -1
  287. package/dist/translations/fr/viewers.js +1 -1
  288. package/dist/translations/he/agent-tools.js +1 -1
  289. package/dist/translations/he/data.js +1 -1
  290. package/dist/translations/he/retrieval.js +1 -1
  291. package/dist/translations/he/shared.js +1 -1
  292. package/dist/translations/he/viewers.js +1 -1
  293. package/dist/translations/it/agent-tools.js +1 -1
  294. package/dist/translations/it/data.js +1 -1
  295. package/dist/translations/it/retrieval.js +1 -1
  296. package/dist/translations/it/shared.js +1 -1
  297. package/dist/translations/it/viewers.js +1 -1
  298. package/dist/translations/ja/agent-tools.js +1 -1
  299. package/dist/translations/ja/data.js +1 -1
  300. package/dist/translations/ja/retrieval.js +1 -1
  301. package/dist/translations/ja/shared.js +1 -1
  302. package/dist/translations/ja/viewers.js +1 -1
  303. package/dist/translations/pt-BR/agent-tools.js +1 -1
  304. package/dist/translations/pt-BR/data.js +1 -1
  305. package/dist/translations/pt-BR/retrieval.js +1 -1
  306. package/dist/translations/pt-BR/shared.js +1 -1
  307. package/dist/translations/pt-BR/viewers.js +1 -1
  308. package/dist/translations/ro/agent-tools.js +1 -1
  309. package/dist/translations/ro/data.js +1 -1
  310. package/dist/translations/ro/retrieval.js +1 -1
  311. package/dist/translations/ro/shared.js +1 -1
  312. package/dist/translations/ro/viewers.js +1 -1
  313. package/dist/translations/ru/agent-tools.js +1 -1
  314. package/dist/translations/ru/data.js +1 -1
  315. package/dist/translations/ru/retrieval.js +1 -1
  316. package/dist/translations/ru/shared.js +1 -1
  317. package/dist/translations/ru/viewers.js +1 -1
  318. package/dist/translations/zh-CN/agent-tools.js +1 -1
  319. package/dist/translations/zh-CN/data.js +1 -1
  320. package/dist/translations/zh-CN/retrieval.js +1 -1
  321. package/dist/translations/zh-CN/shared.js +1 -1
  322. package/dist/translations/zh-CN/viewers.js +1 -1
  323. package/dist/vue.d.ts +1 -1
  324. package/llms/components/lr-activity-feed.md +20 -9
  325. package/llms/components/lr-approval-queue.md +3 -2
  326. package/llms/components/lr-archive-viewer.md +8 -1
  327. package/llms/components/lr-artifact-panel.md +3 -1
  328. package/llms/components/lr-audio-visualizer.md +3 -1
  329. package/llms/components/lr-avatar-group.md +13 -6
  330. package/llms/components/lr-avatar.md +6 -2
  331. package/llms/components/lr-bar-chart.md +6 -3
  332. package/llms/components/lr-box-plot.md +6 -2
  333. package/llms/components/lr-branch-picker.md +3 -1
  334. package/llms/components/lr-bubble-chart.md +6 -3
  335. package/llms/components/lr-calendar.md +10 -3
  336. package/llms/components/lr-carousel.md +4 -2
  337. package/llms/components/lr-chart.md +12 -4
  338. package/llms/components/lr-chat-viewport.md +3 -2
  339. package/llms/components/lr-checkbox.md +8 -5
  340. package/llms/components/lr-citation-badge.md +2 -0
  341. package/llms/components/lr-claim-evidence.md +6 -2
  342. package/llms/components/lr-code-editor.md +3 -1
  343. package/llms/components/lr-color-picker.md +20 -8
  344. package/llms/components/lr-combobox.md +26 -3
  345. package/llms/components/lr-command-palette.md +6 -3
  346. package/llms/components/lr-community-card.md +7 -4
  347. package/llms/components/lr-context-inspector.md +3 -2
  348. package/llms/components/lr-context-meter.md +13 -5
  349. package/llms/components/lr-data-grid.md +2 -0
  350. package/llms/components/lr-date-input.md +12 -3
  351. package/llms/components/lr-date-picker.md +11 -2
  352. package/llms/components/lr-diff-view.md +46 -5
  353. package/llms/components/lr-doughnut-chart.md +6 -3
  354. package/llms/components/lr-drop-zone.md +7 -3
  355. package/llms/components/lr-embedding-explorer.md +8 -2
  356. package/llms/components/lr-emoji-picker.md +5 -1
  357. package/llms/components/lr-entity-chip.md +2 -0
  358. package/llms/components/lr-eval-run.md +3 -2
  359. package/llms/components/lr-export-button.md +5 -2
  360. package/llms/components/lr-flow-node.md +7 -4
  361. package/llms/components/lr-funnel.md +7 -2
  362. package/llms/components/lr-gauge.md +7 -2
  363. package/llms/components/lr-geojson-view.md +10 -2
  364. package/llms/components/lr-geojson-viewer.md +10 -2
  365. package/llms/components/lr-graph-legend.md +6 -3
  366. package/llms/components/lr-graph-query-builder.md +21 -11
  367. package/llms/components/lr-grounding-summary.md +8 -2
  368. package/llms/components/lr-heatmap.md +5 -2
  369. package/llms/components/lr-histogram.md +4 -2
  370. package/llms/components/lr-json-schema-viewer.md +7 -5
  371. package/llms/components/lr-line-chart.md +6 -3
  372. package/llms/components/lr-locale-picker.md +4 -1
  373. package/llms/components/lr-map.md +5 -3
  374. package/llms/components/lr-memory-panel.md +6 -2
  375. package/llms/components/lr-mention-popover.md +7 -4
  376. package/llms/components/lr-message-actions.md +3 -1
  377. package/llms/components/lr-message-parts.md +8 -2
  378. package/llms/components/lr-mind-map.md +11 -2
  379. package/llms/components/lr-option.md +25 -2
  380. package/llms/components/lr-otp-input.md +3 -1
  381. package/llms/components/lr-phone-input.md +9 -5
  382. package/llms/components/lr-pie-chart.md +6 -3
  383. package/llms/components/lr-polar-area-chart.md +6 -3
  384. package/llms/components/lr-policy-summary.md +3 -2
  385. package/llms/components/lr-progress-bar.md +4 -1
  386. package/llms/components/lr-prompt-input.md +4 -1
  387. package/llms/components/lr-prompt-queue.md +5 -2
  388. package/llms/components/lr-radar-chart.md +6 -3
  389. package/llms/components/lr-rag-eval-dashboard.md +7 -2
  390. package/llms/components/lr-realtime-session.md +3 -1
  391. package/llms/components/lr-rubric-form.md +6 -1
  392. package/llms/components/lr-scatter-chart.md +6 -3
  393. package/llms/components/lr-segmented.md +3 -1
  394. package/llms/components/lr-select.md +7 -1
  395. package/llms/components/lr-selection-toolbar.md +4 -1
  396. package/llms/components/lr-sequence-strip.md +7 -3
  397. package/llms/components/lr-source-card.md +16 -1
  398. package/llms/components/lr-source-list.md +17 -2
  399. package/llms/components/lr-source-picker.md +3 -1
  400. package/llms/components/lr-subagent-panel.md +6 -3
  401. package/llms/components/lr-switch.md +4 -3
  402. package/llms/components/lr-table.md +6 -1
  403. package/llms/components/lr-thinking-panel.md +8 -5
  404. package/llms/components/lr-token-input.md +15 -1
  405. package/llms/components/lr-tool-call-chip.md +2 -0
  406. package/llms/components/lr-tool-param-form.md +15 -4
  407. package/llms/components/lr-tooltip.md +8 -4
  408. package/llms/components/lr-trace-tree.md +7 -4
  409. package/llms/components/lr-video-playlist.md +7 -5
  410. package/llms/components/lr-voice-picker.md +7 -4
  411. package/llms/components/lr-widget.md +15 -2
  412. package/llms/migration.md +4 -4
  413. package/llms-full.txt +552 -159
  414. package/package.json +11 -9
  415. package/registrations.json +1 -1
  416. package/vscode-css-data.json +1 -1
  417. package/vscode-html-data.json +1 -1
  418. package/web-types.json +1 -1
@@ -1,6 +1,6 @@
1
1
  var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated,isBarredFromValidation}from"../../../internal/form-associated.js";import{SET_ANCHORED_VALIDITY}from"../../../internal/anchored-validity.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{finiteInteger,finiteNumber}from"../../../internal/numbers.js";import{activeElementIn}from"../../../internal/active-element.js";import{styles}from"./code-editor.styles.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{sanitizeCssResize}from"../../../internal/safe-css.js";import{autocorrectConverter,normalizeAutocorrect}from"../../../internal/converters.js";import{lengthViolations}from"../../../internal/length-constraints.js";import{dispatchNativeInputEvent,relayNativeEvent}from"../../../internal/native-event-relay.js";import{LYRA_DEFAULT_codeEditorLabel,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_valueInvalid}from"../../../internal/default-strings.generated.js";class LyraCodeEditorBase extends LyraElement{}class LyraCodeEditor extends FormAssociated(LyraCodeEditorBase){constructor(){super(...arguments),this.language="",this.lineNumbers=!0,this._tabSize=2,this.tabSizeAssigned=!1,this.label="",this.hint="",this.errorText="",this.placeholder="",this.readonly=!1,this._rows=4,this.cols=20,this.resize="both",this.size="m",this.wrapValue="off",this.spellcheck=!1,this.autofocus=!1,this.title="",this.autocapitalize="off",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.autocorrectValue=!1,this.accessibleLabel="",this.touched=!1,this.hasLabelSlot=!1,this.hasHintSlot=!1,this.hasErrorSlot=!1,this.gutterWindowStart=0,this.caretOffset=0,this.onInput=event=>{if(this.liveDisabled){event.stopPropagation();return}this.value=event.target.value,this.syncCaretOffset(),this.fitToContent(),relayNativeEvent(this,event),this.emit("lr-input",{value:this.value})},this.onChange=event=>{if(this.liveDisabled){event.stopPropagation();return}this.value=event.target.value,relayNativeEvent(this,event),this.emit("lr-change",{value:this.value})},this.onFocus=event=>{if(this.liveDisabled){event.stopPropagation();return}const textarea=event.target;queueMicrotask(()=>{this.isConnected&&this.textarea===textarea&&activeElementIn(this.shadowRoot)===textarea&&this.syncCaretOffset()}),relayNativeEvent(this,event)},this.onBlur=event=>{this.liveDisabled||(this.touched=!0),this.tabBypassArmed=!1,relayNativeEvent(this,event)},this.tabBypassArmed=!1,this.onKeyDown=event=>{if(!this.liveDisabled){if(event.key==="Escape"){this.tabBypassArmed=!0;return}if(event.key==="Tab"){if(event.shiftKey)return;if(this.tabBypassArmed){this.tabBypassArmed=!1;return}if(this.readonly)return;event.preventDefault();const target=event.target,start=target.selectionStart;target.setRangeText(" ".repeat(this.indentWidth),start,target.selectionEnd,"end"),this.value=target.value,dispatchNativeInputEvent(this,{data:" ".repeat(this.indentWidth),inputType:"insertText"}),this.emit("lr-input",{value:this.value});return}this.tabBypassArmed=!1}},this.onCaretChange=()=>{this.syncCaretOffset()},this.onLabelSlotChange=e=>{this.hasLabelSlot=e.target.assignedElements({flatten:!0}).length>0},this.onHintSlotChange=e=>{this.hasHintSlot=e.target.assignedElements({flatten:!0}).length>0},this.onErrorSlotChange=e=>{this.hasErrorSlot=e.target.assignedElements({flatten:!0}).length>0},this.onEditorScroll=()=>{if(this.syncGutterInlinePosition(),!this.lineNumbers||!this.editor||!this.textarea)return;const computed=this.ownerDocument.defaultView?.getComputedStyle(this.textarea),lineHeight=computed?Number.parseFloat(computed.lineHeight):Number.NaN;if(!Number.isFinite(lineHeight)||lineHeight<=0)return;let firstVisible=Math.floor(this.editor.scrollTop/lineHeight);if(this.wrapsText){const offsets=this.lineStarts();let low=0,high=offsets.length-1;for(;low<high;){const middle=Math.ceil((low+high)/2);this.wrappedLineOffset(offsets[middle])<=this.editor.scrollTop?low=middle:high=middle-1}firstVisible=low}const next=Math.max(0,firstVisible-20);next!==this.gutterWindowStart&&(this.gutterWindowStart=next)}}static{this.defaultStrings={...super.defaultStrings,codeEditorLabel:LYRA_DEFAULT_codeEditorLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,valueInvalid:LYRA_DEFAULT_valueInvalid}}static{this.styles=[LyraElement.styles,styles]}get tabSize(){return this._tabSize}set tabSize(value){const old=this._tabSize;this.tabSizeAssigned=value!=null,this._tabSize=finiteInteger(value,2,1,16),this.requestUpdate("tabSize",old)}get indentWidth(){if(this.tabSizeAssigned||!this.textarea)return this._tabSize;const resolved=getComputedStyle(this.textarea).tabSize.trim();return/^\d+(?:\.\d+)?$/.test(resolved)?finiteInteger(Number(resolved),this._tabSize,1,16):this._tabSize}get rows(){return this._rows}set rows(next){const previous=this._rows;this._rows=finiteInteger(next,4,1),this.requestUpdate("rows",previous)}get minlength(){return this._minlength}set minlength(next){const previous=this._minlength;this._minlength=next!==void 0&&Number.isFinite(next)&&next>=0?finiteInteger(next,0,0):void 0,this.requestUpdate("minlength",previous)}get maxlength(){return this._maxlength}set maxlength(next){const previous=this._maxlength;this._maxlength=next!==void 0&&Number.isFinite(next)&&next>=0?finiteInteger(next,0,0):void 0,this.requestUpdate("maxlength",previous)}get wrap(){return this.wrapValue}set wrap(next){const old=this.wrapValue;this.wrapValue=next==="soft"||next==="hard"?next:"off",this.syncSubmissionValue(),this.requestUpdate("wrap",old)}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}get inputmode(){return this.inputMode}set inputmode(next){this.inputMode=next??""}get enterkeyhint(){return this.enterKeyHint}set enterkeyhint(next){this.enterKeyHint=next??""}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.syncExternalDescription(),this.observeTextGeometry())}disconnectedCallback(){this.textGeometryObserver?.disconnect(),this.textGeometryObserver=void 0,this.releaseExternalDescription(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseExternalDescription(),this.textGeometryObserver?.disconnect(),this.textGeometryObserver=void 0,this.isConnected&&this.hasUpdated&&(this.syncExternalDescription(),this.observeTextGeometry())}syncExternalDescription(){if(!this.isConnected)return;const owner=this.textarea;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}get value(){return super.value}set value(next){super.value=this.normalizeLineEndings(next),this.syncSubmissionValue()}get defaultValue(){return super.defaultValue}set defaultValue(next){super.defaultValue=this.normalizeLineEndings(next),this.syncSubmissionValue()}normalizeLineEndings(value){return String(value??"").replace(/\r\n?/g,`
2
2
  `)}submissionValue(){if(this.wrap!=="hard")return this.value;const view=this.ownerDocument?.defaultView;if(!view?.FormData)return this.value;const form=this.ownerDocument.createElement("form"),textarea=this.ownerDocument.createElement("textarea");textarea.name="value",textarea.wrap="hard",textarea.cols=finiteInteger(this.cols,20,1,1e6),textarea.value=this.value,form.append(textarea),(this.isConnected?this.ownerDocument.body:null)?.append(form);try{const serialized=new view.FormData(form).get("value");return typeof serialized=="string"?serialized:this.value}catch{return this.value}finally{form.remove()}}syncSubmissionValue(){this.internals&&this.internals.setFormValue(this.submissionValue(),this.value)}get input(){return this.textarea??null}get liveDisabled(){return this.effectiveDisabled||this.matches(":disabled")}click(){this.liveDisabled||this.textarea?.click()}focus(options){this.liveDisabled||this.textarea?.focus(options)}blur(){this.textarea?.blur()}select(){this.textarea?.select(),this.syncCaretOffset()}get selectionStart(){return this.textarea?.selectionStart??null}set selectionStart(value){this.textarea&&(this.textarea.selectionStart=value??0,this.syncCaretOffset())}get selectionEnd(){return this.textarea?.selectionEnd??null}set selectionEnd(value){this.textarea&&(this.textarea.selectionEnd=value??0,this.syncCaretOffset())}get selectionDirection(){return this.textarea?.selectionDirection??null}set selectionDirection(value){this.textarea&&(this.textarea.selectionDirection=value??"none",this.syncCaretOffset())}setSelectionRange(start,end,direction){this.textarea?.setSelectionRange(start,end,direction),this.syncCaretOffset()}setRangeText(replacement,start,end,selectionMode){const textarea=this.textarea;textarea&&(textarea.setRangeText(replacement,start??textarea.selectionStart,end??textarea.selectionEnd,selectionMode),this.value=textarea.value,this.syncCaretOffset(),this.fitToContent())}scrollPosition(position){const editor=this.editor;if(editor){if(position===void 0)return{top:editor.scrollTop,left:editor.scrollLeft};position.top!==void 0&&(editor.scrollTop=finiteNumber(position.top,editor.scrollTop)),position.left!==void 0&&(editor.scrollLeft=finiteNumber(position.left,editor.scrollLeft)),this.syncGutterInlinePosition()}}syncCaretOffset(){const textarea=this.textarea;if(!textarea)return;const next=finiteInteger(textarea.selectionEnd,0,0,this.value.length);if(next===this.caretOffset){this.scrollCaretIntoView();return}this.caretOffset=next}scrollCaretIntoView(){const editor=this.editor,marker=this.caretMeasure;if(!editor||!marker)return;const frame=editor.getBoundingClientRect();let caret=marker.getBoundingClientRect(),text=marker.nextSibling;for(;text&&(text.nodeType!==3||!text.textContent);)text=text.nextSibling;if(text){const range=this.ownerDocument.createRange();range.setStart(text,0),text.textContent?.startsWith(`
3
- `)?range.setEnd(text,1):range.collapse(!0);const measured=range.getBoundingClientRect();measured.height>0&&(caret=measured)}const gutterWidth=this.gutter?.getBoundingClientRect().width??0,viewportLeft=frame.left+editor.clientLeft,viewportTop=frame.top+editor.clientTop,textLeft=viewportLeft+(this.effectiveDirection==="rtl"?0:gutterWidth),textRight=viewportLeft+editor.clientWidth-(this.effectiveDirection==="rtl"?gutterWidth:0),viewportBottom=viewportTop+editor.clientHeight,left=caret.left<textLeft?caret.left-textLeft:caret.right>textRight?caret.right-textRight:0,top=caret.top<viewportTop?caret.top-viewportTop:caret.bottom>viewportBottom?caret.bottom-viewportBottom:0;left===0&&top===0||(editor.scrollBy({left:finiteNumber(left,0),top:finiteNumber(top,0)}),this.syncGutterInlinePosition())}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasLabelSlot=Array.from(this.children??[]).some(el=>el.getAttribute("slot")==="label"),this.hasHintSlot=Array.from(this.children??[]).some(el=>el.getAttribute("slot")==="hint"),this.hasErrorSlot=Array.from(this.children??[]).some(el=>el.getAttribute("slot")==="error"))}updated(changed){super.updated(changed),this.syncExternalDescription(),this.textarea&&this.textarea.value!==this.value&&(this.textarea.value=this.value),(changed.has("touched")||changed.has("required")||changed.has("value")||changed.has("minlength")||changed.has("maxlength")||changed.has("readonly"))&&(this.updateValidity(),this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid)),(changed.has("wrap")||changed.has("cols"))&&this.syncSubmissionValue(),(changed.has("resize")||changed.has("value")||changed.has("rows")||changed.has("cols"))&&this.fitToContent(),this.syncGutterInlinePosition(),this.observeTextGeometry(),this.syncGutterGeometry(),(changed.has("caretOffset")||changed.has("value"))&&this.scrollCaretIntoView()}updateValidity(){if(isBarredFromValidation(this,this.internals)){this[SET_ANCHORED_VALIDITY]({});return}if(this.required&&this.value===""){this[SET_ANCHORED_VALIDITY]({valueMissing:!0},this.localize("fieldRequired"));return}const native=this.textarea;native&&native.value!==this.value&&(native.value=this.value);const own=lengthViolations(this.value,this.minlength,this.maxlength),tooShort=!!native?.validity.tooShort||own.tooShort,tooLong=!!native?.validity.tooLong||own.tooLong;this[SET_ANCHORED_VALIDITY](tooShort||tooLong?{tooShort,tooLong}:{},tooShort||tooLong?native?.validationMessage||this.localize("valueInvalid"):"")}countLines(){if(!this.lineNumbers)return 0;let count=1;for(let index=0;index<this.value.length;index++)this.value.charCodeAt(index)===10&&count++;return count}syncGutterInlinePosition(){const editor=this.editor,gutter=this.gutter;!editor||!gutter||gutter.style.setProperty("--_lr-code-editor-gutter-scroll-translation",`${finiteNumber(editor.scrollLeft,0)}px`)}get wrapsText(){return this.wrap==="soft"||this.wrap==="hard"}lineStarts(){if(this.wrappedLineStarts?.value===this.value)return this.wrappedLineStarts.offsets;const offsets=[0];for(let index=0;index<this.value.length;index++)this.value.charCodeAt(index)===10&&offsets.push(index+1);return this.wrappedLineStarts={value:this.value,offsets},offsets}wrappedLineOffset(offset){const measure=this.renderRoot.querySelector(".editor-measure");if(!measure)return 0;const nodes=Array.from(measure.childNodes).filter(node=>node.nodeType===3),range=this.ownerDocument.createRange(),first=nodes.find(node=>(node.textContent?.length??0)>0);if(!first)return 0;range.setStart(first,0),range.setEnd(first,1);const firstTop=range.getBoundingClientRect().top;let remaining=offset;for(const node of nodes){const length=node.textContent?.length??0;if(remaining<length)return range.setStart(node,remaining),range.setEnd(node,remaining+1),range.getBoundingClientRect().top-firstTop;remaining-=length}return 0}syncGutterGeometry(){if(!this.lineNumbers)return;const lines=this.renderRoot.querySelectorAll(".gutter-line"),start=Math.min(this.gutterWindowStart,Math.max(0,this.countLines()-1)),offsets=this.wrapsText?this.lineStarts():void 0,positions=offsets?Array.from(lines,(_line,index)=>this.wrappedLineOffset(offsets[start+index]??0)):void 0,height=this.renderRoot.querySelector(".editor-measure")?.getBoundingClientRect().height;height!==void 0&&this.gutter?.style.setProperty("block-size",`${height}px`),lines.forEach((line,index)=>{line.style.insetBlockStart=positions?`${positions[index]}px`:`calc(var(--lr-code-editor-line-height, var(--_lr-code-editor-line-height)) * ${start+index}em)`})}observeTextGeometry(){if(!this.lineNumbers||!this.isConnected){this.textGeometryObserver?.disconnect(),this.textGeometryObserver=void 0;return}if(this.textGeometryObserver)return;const measure=this.renderRoot.querySelector(".editor-measure"),ownerDocument=this.ownerDocument,Observer=ownerDocument.defaultView?.ResizeObserver;if(!measure||!Observer)return;const observer=new Observer(()=>{!this.isConnected||this.ownerDocument!==ownerDocument||this.textGeometryObserver!==observer||(this.onEditorScroll(),this.syncGutterGeometry())});this.textGeometryObserver=observer,observer.observe(measure)}gutterRows(lineCount){const start=Math.min(this.gutterWindowStart,Math.max(0,lineCount-1)),end=Math.min(lineCount,start+200),rows=Array.from({length:end-start},(_value,offset)=>{const index=start+offset;return html`<span
3
+ `)?range.setEnd(text,1):range.collapse(!0);const measured=range.getBoundingClientRect();measured.height>0&&(caret=measured)}const gutterWidth=this.gutter?.getBoundingClientRect().width??0,viewportLeft=frame.left+editor.clientLeft,viewportTop=frame.top+editor.clientTop,textLeft=viewportLeft+(this.effectiveDirection==="rtl"?0:gutterWidth),textRight=viewportLeft+editor.clientWidth-(this.effectiveDirection==="rtl"?gutterWidth:0),viewportBottom=viewportTop+editor.clientHeight,left=caret.left<textLeft?caret.left-textLeft:caret.right>textRight?caret.right-textRight:0,top=caret.top<viewportTop?caret.top-viewportTop:caret.bottom>viewportBottom?caret.bottom-viewportBottom:0;left===0&&top===0||(editor.scrollBy({left:finiteNumber(left,0),top:finiteNumber(top,0)}),this.syncGutterInlinePosition())}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||this.seedFirstRenderState(()=>{this.hasLabelSlot=Array.from(this.children??[]).some(el=>el.getAttribute("slot")==="label"),this.hasHintSlot=Array.from(this.children??[]).some(el=>el.getAttribute("slot")==="hint"),this.hasErrorSlot=Array.from(this.children??[]).some(el=>el.getAttribute("slot")==="error")})}updated(changed){super.updated(changed),this.syncExternalDescription(),this.textarea&&this.textarea.value!==this.value&&(this.textarea.value=this.value),(changed.has("touched")||changed.has("required")||changed.has("value")||changed.has("minlength")||changed.has("maxlength")||changed.has("readonly"))&&(this.updateValidity(),this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid)),(changed.has("wrap")||changed.has("cols"))&&this.syncSubmissionValue(),(changed.has("resize")||changed.has("value")||changed.has("rows")||changed.has("cols"))&&this.fitToContent(),this.syncGutterInlinePosition(),this.observeTextGeometry(),this.syncGutterGeometry(),(changed.has("caretOffset")||changed.has("value"))&&this.scrollCaretIntoView()}updateValidity(){if(isBarredFromValidation(this,this.internals)){this[SET_ANCHORED_VALIDITY]({});return}if(this.required&&this.value===""){this[SET_ANCHORED_VALIDITY]({valueMissing:!0},this.localize("fieldRequired"));return}const native=this.textarea;native&&native.value!==this.value&&(native.value=this.value);const own=lengthViolations(this.value,this.minlength,this.maxlength),tooShort=!!native?.validity.tooShort||own.tooShort,tooLong=!!native?.validity.tooLong||own.tooLong;this[SET_ANCHORED_VALIDITY](tooShort||tooLong?{tooShort,tooLong}:{},tooShort||tooLong?native?.validationMessage||this.localize("valueInvalid"):"")}countLines(){if(!this.lineNumbers)return 0;let count=1;for(let index=0;index<this.value.length;index++)this.value.charCodeAt(index)===10&&count++;return count}syncGutterInlinePosition(){const editor=this.editor,gutter=this.gutter;!editor||!gutter||gutter.style.setProperty("--_lr-code-editor-gutter-scroll-translation",`${finiteNumber(editor.scrollLeft,0)}px`)}get wrapsText(){return this.wrap==="soft"||this.wrap==="hard"}lineStarts(){if(this.wrappedLineStarts?.value===this.value)return this.wrappedLineStarts.offsets;const offsets=[0];for(let index=0;index<this.value.length;index++)this.value.charCodeAt(index)===10&&offsets.push(index+1);return this.wrappedLineStarts={value:this.value,offsets},offsets}wrappedLineOffset(offset){const measure=this.renderRoot.querySelector(".editor-measure");if(!measure)return 0;const nodes=Array.from(measure.childNodes).filter(node=>node.nodeType===3),range=this.ownerDocument.createRange(),first=nodes.find(node=>(node.textContent?.length??0)>0);if(!first)return 0;range.setStart(first,0),range.setEnd(first,1);const firstTop=range.getBoundingClientRect().top;let remaining=offset;for(const node of nodes){const length=node.textContent?.length??0;if(remaining<length)return range.setStart(node,remaining),range.setEnd(node,remaining+1),range.getBoundingClientRect().top-firstTop;remaining-=length}return 0}syncGutterGeometry(){if(!this.lineNumbers)return;const lines=this.renderRoot.querySelectorAll(".gutter-line"),start=Math.min(this.gutterWindowStart,Math.max(0,this.countLines()-1)),offsets=this.wrapsText?this.lineStarts():void 0,positions=offsets?Array.from(lines,(_line,index)=>this.wrappedLineOffset(offsets[start+index]??0)):void 0,height=this.renderRoot.querySelector(".editor-measure")?.getBoundingClientRect().height;height!==void 0&&this.gutter?.style.setProperty("block-size",`${height}px`),lines.forEach((line,index)=>{line.style.insetBlockStart=positions?`${positions[index]}px`:`calc(var(--lr-code-editor-line-height, var(--_lr-code-editor-line-height)) * ${start+index}em)`})}observeTextGeometry(){if(!this.lineNumbers||!this.isConnected){this.textGeometryObserver?.disconnect(),this.textGeometryObserver=void 0;return}if(this.textGeometryObserver)return;const measure=this.renderRoot.querySelector(".editor-measure"),ownerDocument=this.ownerDocument,Observer=ownerDocument.defaultView?.ResizeObserver;if(!measure||!Observer)return;const observer=new Observer(()=>{!this.isConnected||this.ownerDocument!==ownerDocument||this.textGeometryObserver!==observer||(this.onEditorScroll(),this.syncGutterGeometry())});this.textGeometryObserver=observer,observer.observe(measure)}gutterRows(lineCount){const start=Math.min(this.gutterWindowStart,Math.max(0,lineCount-1)),end=Math.min(lineCount,start+200),rows=Array.from({length:end-start},(_value,offset)=>{const index=start+offset;return html`<span
4
4
  class="gutter-line"
5
5
  style=${styleMap({insetBlockStart:`calc(var(--lr-code-editor-line-height, var(--_lr-code-editor-line-height)) * ${index}em)`})}
6
6
  >${index+1}</span
@@ -1 +1 @@
1
- import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";const styles=css` :host { display: block; block-size: 100%; --_lr-code-editor-min-block-size: var(--lr-size-8rem); --_lr-code-editor-padding: var(--lr-space-s); --_lr-code-editor-font-size: var(--lr-font-size-m); --_lr-code-editor-line-height: 1.5; --_lr-code-editor-tab-size: 2; } :host([size='2xs']) { --_lr-code-editor-min-block-size: var(--lr-size-4rem); --_lr-code-editor-padding: var(--lr-space-2xs); --_lr-code-editor-font-size: var(--lr-font-size-2xs); } :host([size='xs']) { --_lr-code-editor-min-block-size: var(--lr-size-5rem); --_lr-code-editor-padding: var(--lr-space-xs); --_lr-code-editor-font-size: var(--lr-font-size-xs); } :host([size='s']), :host([size='small']) { --_lr-code-editor-min-block-size: var(--lr-size-6rem); --_lr-code-editor-padding: var(--lr-size-0-375rem); --_lr-code-editor-font-size: var(--lr-font-size-sm); } :host([size='medium']) { --_lr-code-editor-min-block-size: var(--lr-size-8rem); --_lr-code-editor-padding: var(--lr-space-s); --_lr-code-editor-font-size: var(--lr-font-size-m); } :host([size='l']), :host([size='large']) { --_lr-code-editor-min-block-size: var(--lr-size-10rem); --_lr-code-editor-padding: var(--lr-space-m); --_lr-code-editor-font-size: var(--lr-font-size-lg); } :host([size='xl']) { --_lr-code-editor-min-block-size: var(--lr-size-12rem); --_lr-code-editor-padding: var(--lr-space-l); --_lr-code-editor-font-size: var(--lr-font-size-xl); } [part='form-control'] { display: flex; flex-direction: column; block-size: 100%; gap: var(--lr-space-xs); } [part~='label'] { color: var(--lr-color-text); font-weight: var(--lr-font-weight-semibold); } ${formControlRequiredMarker} [part='editor'] { display: grid; flex: 1 1 auto; grid-template-columns: auto minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); block-size: 100%; contain: size; contain-intrinsic-block-size: var( --lr-code-editor-min-block-size, var(--_lr-code-editor-min-block-size) ); overflow: auto; scrollbar-width: var(--lr-theme-scrollbar-width, auto); scrollbar-gutter: var(--lr-theme-scrollbar-gutter, auto); min-block-size: var( --lr-code-editor-min-block-size, var(--_lr-code-editor-min-block-size) ); border: var(--lr-border-width-thin) solid var(--lr-code-editor-border, var(--lr-color-border)); border-radius: var(--lr-radius); background: var(--lr-code-editor-fill, var(--lr-color-surface)); transition: border-color var(--lr-transition-fast); } [part='gutter'] { box-sizing: border-box; grid-area: 1 / 1; min-block-size: 100%; align-self: start; position: relative; transform: translateX( var(--_lr-code-editor-gutter-scroll-translation, 0) ); z-index: var(--lr-layer-content); padding: var(--lr-code-editor-padding, var(--_lr-code-editor-padding)) var(--lr-space-xs); border-inline-end: var(--lr-border-width-thin) solid var(--lr-color-border); background: var(--lr-color-surface); color: var(--lr-color-text-quiet); text-align: end; white-space: pre; user-select: none; font: inherit; font-family: var(--lr-font-mono); font-size: var( --lr-code-editor-font-size, var(--_lr-code-editor-font-size) ); line-height: var( --lr-code-editor-line-height, var(--_lr-code-editor-line-height) ); } .editor-content { grid-area: 1 / 2; position: relative; align-self: start; box-sizing: border-box; inline-size: max-content; min-inline-size: 100%; block-size: 100%; min-block-size: 0; } :host(:not([resize='auto'])) .editor-content { block-size: max-content; min-block-size: 100%; } .editor-measure { display: block; box-sizing: border-box; inline-size: max-content; block-size: max-content; min-inline-size: 100%; padding: var(--lr-code-editor-padding, var(--_lr-code-editor-padding)); color: transparent; font: inherit; font-family: var(--lr-font-mono); font-size: var( --lr-code-editor-font-size, var(--_lr-code-editor-font-size) ); line-height: var( --lr-code-editor-line-height, var(--_lr-code-editor-line-height) ); tab-size: var(--lr-code-editor-tab-size, var(--_lr-code-editor-tab-size)); white-space: pre; pointer-events: none; user-select: none; opacity: 0; } .editor-content:where([data-wrap='soft'], [data-wrap='hard']) { inline-size: 100%; block-size: max-content; min-block-size: 100%; } .editor-measure:where([data-wrap='soft'], [data-wrap='hard']) { inline-size: 100%; overflow-wrap: anywhere; white-space: pre-wrap; } .editor-caret-measure { display: inline-block; inline-size: 0; block-size: var(--lr-size-1em); } .gutter-measure { visibility: hidden; } .gutter-window { position: absolute; inset-block-start: var( --lr-code-editor-padding, var(--_lr-code-editor-padding) ); inset-inline: var(--lr-space-xs); display: block; } .gutter-line { position: absolute; inset-inline: 0; } [part='textarea'] { display: block; position: absolute; inset: 0; box-sizing: border-box; inline-size: 100%; min-inline-size: 0; block-size: 100%; min-block-size: 0; overflow: hidden; padding: var(--lr-code-editor-padding, var(--_lr-code-editor-padding)); resize: both; border: 0; outline: 0; background: transparent; color: var(--lr-color-text); font: inherit; font-family: var(--lr-font-mono); font-size: var( --lr-code-editor-font-size, var(--_lr-code-editor-font-size) ); line-height: var( --lr-code-editor-line-height, var(--_lr-code-editor-line-height) ); tab-size: var(--lr-code-editor-tab-size, var(--_lr-code-editor-tab-size)); } [part='textarea']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='textarea']::placeholder { color: var(--lr-color-text-quiet); } :host(:not(:disabled)) [part='editor']:hover { border-color: var(--lr-code-editor-hover-border, var(--lr-color-brand)); } [part='hint'], [part='error'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='error'] { color: var(--lr-color-danger); } :host([data-invalid]) [part='editor'] { border-color: var(--lr-code-editor-invalid-border, var(--lr-color-danger)); } :host(:disabled) { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='form-control'], [part~='form-control-label'], [part='hint'], [part='error'] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; } `;export{styles};
1
+ import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";const styles=css` :host { display: block; block-size: 100%; --_lr-code-editor-min-block-size: var(--lr-size-8rem); --_lr-code-editor-padding: var(--lr-space-s); --_lr-code-editor-font-size: var(--lr-font-size-m); --_lr-code-editor-line-height: 1.5; --_lr-code-editor-tab-size: 2; } :host([size='2xs']) { --_lr-code-editor-min-block-size: var(--lr-size-4rem); --_lr-code-editor-padding: var(--lr-space-2xs); --_lr-code-editor-font-size: var(--lr-font-size-2xs); } :host([size='xs']) { --_lr-code-editor-min-block-size: var(--lr-size-5rem); --_lr-code-editor-padding: var(--lr-space-xs); --_lr-code-editor-font-size: var(--lr-font-size-xs); } :host([size='s']), :host([size='small']) { --_lr-code-editor-min-block-size: var(--lr-size-6rem); --_lr-code-editor-padding: var(--lr-size-0-375rem); --_lr-code-editor-font-size: var(--lr-font-size-sm); } :host([size='medium']) { --_lr-code-editor-min-block-size: var(--lr-size-8rem); --_lr-code-editor-padding: var(--lr-space-s); --_lr-code-editor-font-size: var(--lr-font-size-m); } :host([size='l']), :host([size='large']) { --_lr-code-editor-min-block-size: var(--lr-size-10rem); --_lr-code-editor-padding: var(--lr-space-m); --_lr-code-editor-font-size: var(--lr-font-size-lg); } :host([size='xl']) { --_lr-code-editor-min-block-size: var(--lr-size-12rem); --_lr-code-editor-padding: var(--lr-space-l); --_lr-code-editor-font-size: var(--lr-font-size-xl); } [part='form-control'] { display: flex; flex-direction: column; block-size: 100%; gap: var(--lr-space-xs); } [part~='label'] { color: var(--lr-color-text); font-weight: var(--lr-font-weight-semibold); } ${formControlRequiredMarker} [part='editor'] { display: grid; flex: 1 1 auto; grid-template-columns: auto minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); block-size: 100%; contain: size; contain-intrinsic-block-size: var( --lr-code-editor-min-block-size, var(--_lr-code-editor-min-block-size) ); overflow: auto; scrollbar-width: var(--lr-theme-scrollbar-width, auto); scrollbar-gutter: var(--lr-theme-scrollbar-gutter, auto); min-block-size: var( --lr-code-editor-min-block-size, var(--_lr-code-editor-min-block-size) ); border: var(--lr-border-width-thin) solid var(--lr-code-editor-border, var(--lr-color-border)); border-radius: var(--lr-code-editor-radius, var(--lr-radius)); background: var(--lr-code-editor-fill, var(--lr-color-surface)); transition: border-color var(--lr-transition-fast); } [part='gutter'] { box-sizing: border-box; grid-area: 1 / 1; min-block-size: 100%; align-self: start; position: relative; transform: translateX( var(--_lr-code-editor-gutter-scroll-translation, 0) ); z-index: var(--lr-layer-content); padding: var(--lr-code-editor-padding, var(--_lr-code-editor-padding)) var(--lr-space-xs); border-inline-end: var(--lr-border-width-thin) solid var(--lr-color-border); background: var(--lr-color-surface); color: var(--lr-color-text-quiet); text-align: end; white-space: pre; user-select: none; font: inherit; font-family: var(--lr-font-mono); font-size: var( --lr-code-editor-font-size, var(--_lr-code-editor-font-size) ); line-height: var( --lr-code-editor-line-height, var(--_lr-code-editor-line-height) ); } .editor-content { grid-area: 1 / 2; position: relative; align-self: start; box-sizing: border-box; inline-size: max-content; min-inline-size: 100%; block-size: 100%; min-block-size: 0; } :host(:not([resize='auto'])) .editor-content { block-size: max-content; min-block-size: 100%; } .editor-measure { display: block; box-sizing: border-box; inline-size: max-content; block-size: max-content; min-inline-size: 100%; padding: var(--lr-code-editor-padding, var(--_lr-code-editor-padding)); color: transparent; font: inherit; font-family: var(--lr-font-mono); font-size: var( --lr-code-editor-font-size, var(--_lr-code-editor-font-size) ); line-height: var( --lr-code-editor-line-height, var(--_lr-code-editor-line-height) ); tab-size: var(--lr-code-editor-tab-size, var(--_lr-code-editor-tab-size)); white-space: pre; pointer-events: none; user-select: none; opacity: 0; } .editor-content:where([data-wrap='soft'], [data-wrap='hard']) { inline-size: 100%; block-size: max-content; min-block-size: 100%; } .editor-measure:where([data-wrap='soft'], [data-wrap='hard']) { inline-size: 100%; overflow-wrap: anywhere; white-space: pre-wrap; } .editor-caret-measure { display: inline-block; inline-size: 0; block-size: var(--lr-size-1em); } .gutter-measure { visibility: hidden; } .gutter-window { position: absolute; inset-block-start: var( --lr-code-editor-padding, var(--_lr-code-editor-padding) ); inset-inline: var(--lr-space-xs); display: block; } .gutter-line { position: absolute; inset-inline: 0; } [part='textarea'] { display: block; position: absolute; inset: 0; box-sizing: border-box; inline-size: 100%; min-inline-size: 0; block-size: 100%; min-block-size: 0; overflow: hidden; padding: var(--lr-code-editor-padding, var(--_lr-code-editor-padding)); resize: both; border: 0; outline: 0; background: transparent; color: var(--lr-color-text); font: inherit; font-family: var(--lr-font-mono); font-size: var( --lr-code-editor-font-size, var(--_lr-code-editor-font-size) ); line-height: var( --lr-code-editor-line-height, var(--_lr-code-editor-line-height) ); tab-size: var(--lr-code-editor-tab-size, var(--_lr-code-editor-tab-size)); } [part='textarea']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(var(--lr-focus-ring-offset) * -1); } [part='textarea']::placeholder { color: var(--lr-color-text-quiet); } :host(:not(:disabled)) [part='editor']:hover { border-color: var(--lr-code-editor-hover-border, var(--lr-color-brand)); } [part='hint'], [part='error'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='error'] { color: var(--lr-color-danger); } :host([data-invalid]) [part='editor'] { border-color: var(--lr-code-editor-invalid-border, var(--lr-color-danger)); } :host(:disabled) { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part='form-control'], [part~='form-control-label'], [part='hint'], [part='error'] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; } `;export{styles};
@@ -8,7 +8,11 @@ export interface LyraColorPickerSwatch{color:string;label?:string;
8
8
  * `disabled`/`effectiveDisabled` -- this swatch alone stays inert even while every other swatch
9
9
  * remains pickable. Omitted or `false` renders the swatch exactly as before this field existed.
10
10
  */
11
- disabled?:boolean;}export interface LyraColorPickerEventMap{'lr-invalid':CustomEvent<null>;'lr-input':CustomEvent<null>;input:InputEvent;change:Event;blur:FocusEvent;focus:FocusEvent;'lr-change':CustomEvent<{value:string;}>;'lr-show':CustomEvent<null>;'lr-after-show':CustomEvent<null>;'lr-hide':CustomEvent<null>;'lr-after-hide':CustomEvent<null>;}declare class ColorPickerBase extends LyraElement<LyraColorPickerEventMap>{}declare const LyraColorPicker_base:typeof ColorPickerBase&(new(...args:any[])=>import("../../../lyra.js").FormAssociatedInterface<string> &import("../../../internal/form-associated.js").FormAssociatedSubclassInterface<string>);
11
+ disabled?:boolean;
12
+ /** Optional decorative custom shape rendered in place of the plain filled circle -- e.g. a gem
13
+ * or a status glyph. Its rendered subtree is inert and aria-hidden, matching
14
+ * `<lr-swatch-picker>`'s identical `SwatchPickerItem.icon` field. */
15
+ icon?:unknown;}export interface LyraColorPickerEventMap{'lr-invalid':CustomEvent<null>;'lr-input':CustomEvent<null>;input:InputEvent;change:Event;blur:FocusEvent;focus:FocusEvent;'lr-change':CustomEvent<{value:string;}>;'lr-show':CustomEvent<null>;'lr-after-show':CustomEvent<null>;'lr-hide':CustomEvent<null>;'lr-after-hide':CustomEvent<null>;}declare class ColorPickerBase extends LyraElement<LyraColorPickerEventMap>{}declare const LyraColorPicker_base:typeof ColorPickerBase&(new(...args:any[])=>import("../../../lyra.js").FormAssociatedInterface<string> &import("../../../internal/form-associated.js").FormAssociatedSubclassInterface<string>);
12
16
  /**
13
17
  * `<lr-color-picker>` — a form-associated colour picker: a compact swatch trigger that opens a
14
18
  * popover with a saturation/brightness grid, a hue slider, an optional alpha slider, a text field
@@ -188,6 +192,12 @@ static get validators():LyraFormValidator<LyraColorPicker>[];static styles:impor
188
192
  withLabel:boolean;
189
193
  /** Server-rendering hint that the `hint` slot is populated before client slot observation. */
190
194
  withHint:boolean;errorText:string;accessibleLabel:string;
195
+ /** Forwards native read-only behavior to the internal value field and blocks every other
196
+ * value-committing affordance (the popup panel opening, the saturation/hue/opacity handles,
197
+ * palette swatches, the eyedropper, and Enter/blur-driven text commits) while leaving the
198
+ * control focusable, its value selectable/copyable, and its current value submitted with the
199
+ * form -- mirroring `lr-input`'s `readonly`. */
200
+ readonly:boolean;
191
201
  /** Visible-swatch size — the library-wide `2xs`–`xl` ladder shared with `lr-input`/`lr-select`.
192
202
  * The interactive trigger retains the shared `--lr-icon-button-size` minimum target even when
193
203
  * the visible swatch is denser. The Web Awesome / Shoelace spellings `small`/`medium`/`large`
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{live}from"lit/directives/live.js";import{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated}from"../../../internal/form-associated.js";import{hostAriaLabel,nextId,srOnly}from"../../../internal/a11y.js";import{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{isRtl,rtlAwarePlacement}from"../../../internal/rtl.js";import{optionalLiteralSetConverter}from"../../../internal/converters.js";import{resolveEffectivePositioningStrategy}from"../../../internal/positioning-strategy.js";import{activateNonmodalOverlay,composedContains}from"../../../internal/nonmodal-overlay-manager.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteRange}from"../../../internal/numbers.js";import{activeElementIn}from"../../../internal/active-element.js";import{acquireNativeControlDescription}from"../../../internal/native-control-description.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{eyeIcon}from"../../../internal/icons.js";import{dispatchNativeEvent,dispatchNativeInputEvent}from"../../../internal/native-event-relay.js";import{cssColor,formatColor,hsva,parseColor,sameColor,withAlphaFormat}from"./color-core.js";import{sizes}from"../../../internal/sizes.styles.js";import{styles}from"./color-picker.styles.js";import{currentValidityValidator}from"../form-validator.js";import{LYRA_DEFAULT_colorPicker,LYRA_DEFAULT_colorPickerCurrentValue,LYRA_DEFAULT_colorPickerEyeDropper,LYRA_DEFAULT_colorPickerHue,LYRA_DEFAULT_colorPickerHueValue,LYRA_DEFAULT_colorPickerOpacity,LYRA_DEFAULT_colorPickerOpacityValue,LYRA_DEFAULT_colorPickerSaturationBrightness,LYRA_DEFAULT_colorPickerSaturationBrightnessValue,LYRA_DEFAULT_colorPickerSwatch,LYRA_DEFAULT_colorPickerSwatches,LYRA_DEFAULT_colorPickerToggleFormat,LYRA_DEFAULT_colorPickerValueField,LYRA_DEFAULT_fieldRequired}from"../../../internal/default-strings.generated.js";const POSITIONING_STRATEGY=optionalLiteralSetConverter(["absolute","fixed"]),SMALL_STEP=1,LARGE_STEP_MULTIPLIER=10,FORMAT_CYCLE=["hex","rgb","hsl","hsv"],MAX_COLOR_PICKER_SWATCHES=1e4,EMPTY_COLOR_PICKER_SWATCHES=Object.freeze([]);function projectColorPickerSwatches(value){try{if(typeof value=="string")return Object.freeze(value.split(";").slice(0,MAX_COLOR_PICKER_SWATCHES).flatMap(entry=>{const color=entry.trim();return color?[Object.freeze({color})]:[]}));if(!Array.isArray(value))return EMPTY_COLOR_PICKER_SWATCHES;const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return EMPTY_COLOR_PICKER_SWATCHES;const swatches=[];for(let index=0;index<Math.min(length.value,MAX_COLOR_PICKER_SWATCHES);index+=1){const entry=getOwnDataDescriptor(value,String(index));if(entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR)continue;if(typeof entry.value=="string"){const color2=entry.value.trim();color2&&swatches.push(Object.freeze({color:color2}));continue}if(entry.value===null||typeof entry.value!="object"||Array.isArray(entry.value))continue;const color=getOwnDataDescriptor(entry.value,"color"),label=getOwnDataDescriptor(entry.value,"label"),disabled=getOwnDataDescriptor(entry.value,"disabled");if(color===MISSING_OWN_DATA_DESCRIPTOR||color===UNSAFE_OWN_DATA_DESCRIPTOR||typeof color.value!="string"||color.value.trim()==="")continue;const labelValue=label===MISSING_OWN_DATA_DESCRIPTOR||label===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:typeof label.value=="string"&&label.value.trim()?label.value:void 0,disabledValue=disabled===MISSING_OWN_DATA_DESCRIPTOR||disabled===UNSAFE_OWN_DATA_DESCRIPTOR||typeof disabled.value!="boolean"?void 0:disabled.value;swatches.push(Object.freeze({color:color.value.trim(),...labelValue===void 0?{}:{label:labelValue},...disabledValue===void 0?{}:{disabled:disabledValue}}))}return Object.freeze(swatches)}catch{return EMPTY_COLOR_PICKER_SWATCHES}}function eyeDropperConstructor(ownerWindow){return ownerWindow?.EyeDropper}function isNodeValue(value){if(value===null||typeof value!="object")return!1;const candidate=value;return typeof candidate.nodeType=="number"&&typeof candidate.getRootNode=="function"}function isElementValue(value){return!isNodeValue(value)||value.nodeType!==1?!1:typeof value.matches=="function"}class ColorPickerBase extends LyraElement{}class LyraColorPicker extends FormAssociated(ColorPickerBase){static{this.defaultStrings={...super.defaultStrings,colorPicker:LYRA_DEFAULT_colorPicker,colorPickerCurrentValue:LYRA_DEFAULT_colorPickerCurrentValue,colorPickerEyeDropper:LYRA_DEFAULT_colorPickerEyeDropper,colorPickerHue:LYRA_DEFAULT_colorPickerHue,colorPickerHueValue:LYRA_DEFAULT_colorPickerHueValue,colorPickerOpacity:LYRA_DEFAULT_colorPickerOpacity,colorPickerOpacityValue:LYRA_DEFAULT_colorPickerOpacityValue,colorPickerSaturationBrightness:LYRA_DEFAULT_colorPickerSaturationBrightness,colorPickerSaturationBrightnessValue:LYRA_DEFAULT_colorPickerSaturationBrightnessValue,colorPickerSwatch:LYRA_DEFAULT_colorPickerSwatch,colorPickerSwatches:LYRA_DEFAULT_colorPickerSwatches,colorPickerToggleFormat:LYRA_DEFAULT_colorPickerToggleFormat,colorPickerValueField:LYRA_DEFAULT_colorPickerValueField,fieldRequired:LYRA_DEFAULT_fieldRequired}}static get validators(){return[currentValidityValidator("required","disabled","value")]}static{this.styles=[LyraElement.styles,srOnly,sizes,styles]}get positioningStrategy(){return this._positioningStrategy??"absolute"}set positioningStrategy(next){const normalized=POSITIONING_STRATEGY.normalize(next)??"absolute",old=this.positioningStrategy;this._positioningStrategy=normalized,normalized!==old&&(this.requestUpdate("positioningStrategy",old),old==="fixed"!=(normalized==="fixed")&&this.requestUpdate("hoist",old==="fixed"))}get hoist(){return this.positioningStrategy==="fixed"}set hoist(next){this.positioningStrategy=next?"fixed":"absolute"}get open(){return this._open}set open(next){const normalized=!!next&&!this.effectiveDisabled;if(normalized!==this._open){if(!this.hasRenderedOnce||!this.isConnected){this.applyOpenState(normalized);return}if(this.emit(normalized?"lr-show":"lr-hide",null,{cancelable:!0}).defaultPrevented){this.toggleAttribute("open",this._open);return}this.applyOpenState(normalized)}}applyOpenState(next){const old=this._open;this._open=next,this.requestUpdate("open",old)}get liveDisabled(){return this.effectiveDisabled||typeof this.matches=="function"&&this.matches(":disabled")}syncExternalDescription(){const target=this.isConnected?this.triggerEl():null;if(!target){this.releaseExternalDescription();return}this.externalDescriptionLease?this.externalDescriptionLease.update(target):this.externalDescriptionLease=acquireNativeControlDescription(this,target,()=>this.localDescriptionIds)}releaseExternalDescription(){this.externalDescriptionLease?.release(),this.externalDescriptionLease=void 0}constructor(){super(),this.label="",this.hint="",this.withLabel=!1,this.withHint=!1,this.errorText="",this.accessibleLabel="",this.size="m",this.format="hex",this.opacity=!1,this.uppercase=!1,this.swatches="",this.withoutFormatToggle=!1,this.noFormatToggle=!1,this.inline=!1,this.placement="bottom-start",this._open=!1,this.hasLabel=!1,this.hasHint=!1,this.hasError=!1,this.hasEyeDropper=!1,this.color=hsva(0,0,0,1),this.valueNeedsParse=!1,this.localDescriptionIds="",this.hintId=nextId("color-picker-hint"),this.errorId=nextId("color-picker-error"),this.labelId=nextId("color-picker-label"),this.valueTextId=nextId("color-picker-value"),this.triggerId=nextId("color-picker-trigger"),this.panelId=nextId("color-picker-panel"),this.dragChanged=!1,this.keyboardChanged=!1,this.restoreFocusOnClose=!0,this.eyeDropperGeneration=0,this.suppressDisconnectedClose=!1,this.pendingPlacementEffects=0,this.interactionGeneration=0,this.hasRenderedOnce=!1,this.projectedSwatches=EMPTY_COLOR_PICKER_SWATCHES,this.onDocumentPointerDown=event=>{const target=event.composedPath()[0];if(!(isElementValue(target)&&composedContains(this,target))){if(this.overlayHandle?.isActive()){this.overlayHandle.dismissBackdrop();return}this.restoreFocusOnClose=!1,this.hide()}},this.onTriggerClick=()=>{this.effectiveDisabled||(this.open=!this.open)},this.onPointerMove=event=>{if(this.drag?.pointerId===event.pointerId){if(this.effectiveDisabled){this.cancelDrag();return}this.applyPointer(event)}},this.onPointerUp=event=>{if(this.drag?.pointerId!==event.pointerId)return;if(this.effectiveDisabled){this.cancelDrag();return}this.applyPointer(event);const changed=this.dragChanged;this.endDrag(),changed&&this.emitCommit()},this.onPointerCancel=event=>{this.drag?.pointerId===event.pointerId&&this.cancelDrag()},this.onGridKeyDown=event=>{if(this.effectiveDisabled)return;const step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1),inline=this.inlineStep(event);let next;inline!==null?next=hsva(this.color.h,this.color.s+inline,this.color.v,this.color.a):event.key==="ArrowUp"?next=hsva(this.color.h,this.color.s,this.color.v+step,this.color.a):event.key==="ArrowDown"?next=hsva(this.color.h,this.color.s,this.color.v-step,this.color.a):event.key==="Home"?next=hsva(this.color.h,0,this.color.v,this.color.a):event.key==="End"&&(next=hsva(this.color.h,100,this.color.v,this.color.a)),next&&(event.preventDefault(),this.applyKeyboardColor(next))},this.onHueKeyDown=event=>{if(this.effectiveDisabled)return;const step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1),inline=this.inlineStep(event);let hue;inline!==null?hue=this.color.h+inline:event.key==="ArrowUp"?hue=this.color.h+step:event.key==="ArrowDown"?hue=this.color.h-step:event.key==="Home"?hue=0:event.key==="End"&&(hue=360),hue!==void 0&&(event.preventDefault(),this.applyKeyboardColor(hsva(finiteRange(hue,0,0,360),this.color.s,this.color.v,this.color.a)))},this.onAlphaKeyDown=event=>{if(this.effectiveDisabled)return;const step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1)/100,inline=this.inlineStep(event);let alpha;inline!==null?alpha=this.color.a+inline/100:event.key==="ArrowUp"?alpha=this.color.a+step:event.key==="ArrowDown"?alpha=this.color.a-step:event.key==="Home"?alpha=0:event.key==="End"&&(alpha=1),alpha!==void 0&&(event.preventDefault(),this.applyKeyboardColor(hsva(this.color.h,this.color.s,this.color.v,alpha)))},this.onControlKeyUp=()=>{this.keyboardChanged&&(this.keyboardChanged=!1,this.emitCommit())},this.onFieldInput=event=>{if(event.stopPropagation(),this.liveDisabled){this.pendingInput=void 0,this.requestUpdate();return}this.pendingInput=event.target.value},this.onFieldChange=event=>{event.stopPropagation();const field=event.target;if(this.liveDisabled){this.pendingInput=void 0,this.requestUpdate();return}const parsed=parseColor(field.value);parsed&&this.commitColor(parsed),this.pendingInput=void 0,this.requestUpdate()},this.onFieldKeyDown=event=>{this.liveDisabled||event.key==="Enter"&&(event.preventDefault(),this.onFieldChange(event))},this.onFormatClick=()=>{if(this.liveDisabled)return;const index=FORMAT_CYCLE.indexOf(this.format);this.format=FORMAT_CYCLE[(index+1)%FORMAT_CYCLE.length]},this.onEyeDropperClick=()=>{const ownerWindow=this.ownerDocument.defaultView;if(!this.isConnected||!ownerWindow)return;const Constructor=eyeDropperConstructor(ownerWindow);if(!Constructor||this.effectiveDisabled)return;this.cancelEyeDropper();const generation=this.eyeDropperGeneration,controller=new ownerWindow.AbortController;this.eyeDropperAbort=controller,new Constructor().open({signal:controller.signal}).then(result=>{if(controller.signal.aborted||generation!==this.eyeDropperGeneration||!this.isConnected||this.ownerDocument.defaultView!==ownerWindow||this.effectiveDisabled)return;const parsed=parseColor(result?.sRGBHex??"");parsed&&this.commitColor(this.opacity?hsva(parsed.h,parsed.s,parsed.v,this.color.a):parsed)}).catch(()=>{}).finally(()=>{generation===this.eyeDropperGeneration&&(this.eyeDropperAbort=void 0)})},this.onControlFocus=event=>{event.stopPropagation();const previous=event.relatedTarget;isNodeValue(previous)&&this.renderRoot.contains(previous)||relayNativeEvent(this,event)},this.onControlBlur=event=>{event.stopPropagation();const next=event.relatedTarget;isNodeValue(next)&&this.renderRoot.contains(next)||(relayNativeEvent(this,event),this.requestUpdate())},this.controlFocusListener={capture:!0,handleEvent:event=>this.onControlFocus(event)},this.controlBlurListener={capture:!0,handleEvent:event=>this.onControlBlur(event)},this.onSlotChange=event=>{const slot=event.target,assigned=Array.from(this.children).some(el=>el.getAttribute("slot")===slot.name);slot.name==="label"&&(this.hasLabel=assigned),slot.name==="hint"&&(this.hasHint=assigned),slot.name==="error"&&(this.hasError=assigned)},this.addEventListener("focusout",()=>this.requestUpdate())}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.syncExternalDescription();const seedEnvironmentState=()=>{const hasSlot=name=>Array.from(this.children).some(el=>el.getAttribute("slot")===name);this.hasLabel=hasSlot("label"),this.hasHint=hasSlot("hint"),this.hasError=hasSlot("error"),this.hasEyeDropper=!!eyeDropperConstructor(this.ownerDocument.defaultView)};this.hasUpdated?seedEnvironmentState():this.seedFirstRenderState(seedEnvironmentState)}disconnectedCallback(){this.releaseExternalDescription(),this.suppressDisconnectedClose=this.open,this.open=!1,this.teardownOverlay(!1),this.cancelEyeDropper(),this.interactionGeneration+=1,this.keyboardChanged=!1,this.cancelDrag(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseExternalDescription(),this.isConnected&&this.hasUpdated&&this.syncExternalDescription(),this.cancelDrag(),this.cancelEyeDropper()}get value(){return super.value}set value(next){this.endDrag(),super.value=next??"",this.valueNeedsParse=!0}willUpdate(changed){super.willUpdate(changed);const formatChanged=changed.has("format")||changed.has("opacity")||changed.has("uppercase");if(formatChanged&&this.cancelDrag(),this.liveDisabled&&(this.open&&this.applyOpenState(!1),this.pendingInput=void 0,this.keyboardChanged=!1,this.cancelDrag()),!this.valueNeedsParse&&!formatChanged)return;const shouldReserialize=formatChanged;if(this.valueNeedsParse){this.valueNeedsParse=!1;const parsed=parseColor(super.value);if(parsed){this.color=parsed,this.writeSerializedValue();return}}shouldReserialize&&parseColor(super.value)!==null&&this.writeSerializedValue()}updated(changed){if(super.updated(changed),this.syncExternalDescription(),changed.has("open")){const suppressClose=!this.open&&this.suppressDisconnectedClose;this.suppressDisconnectedClose=!1;const announceOpen=this.open&&this.hasRenderedOnce&&this.isConnected;this.open&&!this.inline?(this.pendingPlacementEffects=announceOpen?3:2,this.activatePanel()):(this.pendingPlacementEffects=0,this.teardownOverlay(this.restoreFocusOnClose),this.pendingInput=void 0),this.hasRenderedOnce&&this.isConnected&&!suppressClose&&(this.open&&this.inline?this.emit("lr-after-show"):this.open||this.emit("lr-after-hide"))}else if(changed.has("inline"))if(this.inline){this.teardownOverlay(),this.panelEl()?.style.removeProperty("position");const announceOpen=(this.pendingPlacementEffects&1)!==0;this.pendingPlacementEffects=0,announceOpen&&this.emit("lr-after-show")}else this.open&&this.activatePanel();else this.open&&!this.inline&&(changed.has("placement")||changed.has("size")||changed.has("positioningStrategy"))&&this.positionPanel();this.hasRenderedOnce=!0}show(){this.open=!0}hide(){this.open=!1}getFormattedValue(format="hex"){return formatColor(this.color,format,this.uppercase)}getHexString(hue,saturation,brightness,alpha=100){const normalizedAlpha=finiteRange(alpha,100,0,100);return formatColor(hsva(hue,saturation,brightness,normalizedAlpha/100),normalizedAlpha<100?"hexa":"hex",this.uppercase)}click(){this.effectiveDisabled||(this.inline?this.renderRoot?.querySelector('[part~="input"]')?.click():this.triggerEl()?.click())}focus(options){this.effectiveDisabled||(this.inline?this.renderRoot?.querySelector('[part~="grid-handle"]')?.focus(options):this.triggerEl()?.focus(options))}blur(){const active=activeElementIn(this.shadowRoot);active&&typeof active.blur=="function"&&active.blur()}reportValidity(){const valid=super.reportValidity();return this.requestUpdate(),valid}setCustomValidity(message){super.setCustomValidity(message),this.requestUpdate()}resetValidity(){super.resetValidity(),this.requestUpdate()}activeFormat(){return withAlphaFormat(this.format,this.opacity)}writeSerializedValue(){const serialized=formatColor(this.color,this.activeFormat(),this.uppercase);return serialized===super.value?!1:(super.value=serialized,!0)}applyColor(next){next.h===this.color.h&&next.s===this.color.s&&next.v===this.color.v&&next.a===this.color.a||(this.color=next);const changed=this.writeSerializedValue();return changed&&(dispatchNativeInputEvent(this),this.emit("lr-input")),changed}emitCommit(){dispatchNativeEvent(this,"change"),this.emit("lr-change",{value:this.value})}commitColor(next){const changed=this.applyColor(next);return changed&&this.emitCommit(),changed}normalizedSwatches(){const source=this.swatches;return source!==this.swatchSource&&(this.swatchSource=source,this.projectedSwatches=projectColorPickerSwatches(source)),this.projectedSwatches}triggerEl(){return this.renderRoot?.querySelector('[part~="trigger"]')}panelEl(){return this.renderRoot?.querySelector('[part~="panel"]')}positionPanel(){this.cleanupPositioner?.(),this.cleanupPositioner=void 0;const anchor=this.triggerEl(),panel=this.panelEl();if(!anchor||!panel)return;const handle=place(anchor,panel,{placement:rtlAwarePlacement(this.placement,this),strategy:resolveEffectivePositioningStrategy(this,this._positioningStrategy,"absolute")});this.cleanupPositioner=handle,handle.ready.then(positioned=>{if(this.cleanupPositioner!==handle||!this.open||this.inline||!this.isConnected)return;if(!positioned){this.pendingPlacementEffects=0,this.suppressDisconnectedClose=!0,this.applyOpenState(!1);return}const effects=this.pendingPlacementEffects;this.pendingPlacementEffects=0,effects&2&&this.overlayHandle?.focusInitial(),effects&1&&this.emit("lr-after-show")})}activatePanel(){!this.isConnected||this.inline||(this.pendingPlacementEffects|=2,this.positionPanel(),this.restoreFocusOnClose=!0,this.overlayHandle=activateNonmodalOverlay({host:this,panel:()=>this.panelEl(),onEscape:()=>this.hide(),onBackdrop:()=>{this.restoreFocusOnClose=!1,this.hide(),this.open&&(this.restoreFocusOnClose=!0)},restoreFocusTo:this.triggerEl()}),this.lightDismissDocument=this.ownerDocument,this.lightDismissDocument.addEventListener("pointerdown",this.onDocumentPointerDown,!0))}teardownOverlay(restoreFocus=!0){this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.overlayHandle?.deactivate({restoreFocus}),this.overlayHandle=void 0,this.lightDismissDocument?.removeEventListener("pointerdown",this.onDocumentPointerDown,!0),this.lightDismissDocument=void 0,this.restoreFocusOnClose=!0}beginDrag(event,track,box){const dragWindow=box.ownerDocument.defaultView;if(!this.isConnected||!dragWindow||this.effectiveDisabled||this.drag!==void 0||event.pointerType==="mouse"&&event.button!==0)return;const rect=box.getBoundingClientRect();this.drag={pointerId:event.pointerId,track,rect,rtl:isRtl(this),startColor:{...this.color},startValue:this.captureLiveValueCheckpoint()},this.dragChanged=!1;try{box.setPointerCapture(event.pointerId)}catch{}this.dragWindow=dragWindow,dragWindow.addEventListener("pointermove",this.onPointerMove),dragWindow.addEventListener("pointerup",this.onPointerUp),dragWindow.addEventListener("pointercancel",this.onPointerCancel),dragWindow.addEventListener("lostpointercapture",this.onPointerCancel),this.applyPointer(event)}applyPointer(event){const drag=this.drag;if(!drag)return;const{rect,rtl,track}=drag,rawX=rect.width===0?0:(event.clientX-rect.left)/rect.width,ratioX=finiteRange(rtl?1-rawX:rawX,0,0,1);let next;if(track==="grid"){const rawY=rect.height===0?0:(event.clientY-rect.top)/rect.height,ratioY=finiteRange(rawY,0,0,1);next=hsva(this.color.h,ratioX*100,(1-ratioY)*100,this.color.a)}else track==="hue"?next=hsva(ratioX*360,this.color.s,this.color.v,this.color.a):next=hsva(this.color.h,this.color.s,this.color.v,ratioX);this.dragChanged=this.applyColor(next)||this.dragChanged}cancelDrag(){const drag=this.drag;drag&&(this.endDrag(),this.color=drag.startColor,this.restoreLiveValueCheckpoint(drag.startValue),this.valueNeedsParse=!1)}endDrag(){this.drag=void 0,this.dragChanged=!1;const dragWindow=this.dragWindow;this.dragWindow=void 0,dragWindow?.removeEventListener("pointermove",this.onPointerMove),dragWindow?.removeEventListener("pointerup",this.onPointerUp),dragWindow?.removeEventListener("pointercancel",this.onPointerCancel),dragWindow?.removeEventListener("lostpointercapture",this.onPointerCancel)}inlineStep(event){const rtl=isRtl(this),forward=rtl?"ArrowLeft":"ArrowRight",backward=rtl?"ArrowRight":"ArrowLeft",step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1);return event.key===forward?step:event.key===backward?-step:null}applyKeyboardColor(next){const generation=this.interactionGeneration,changed=this.applyColor(next);generation===this.interactionGeneration&&(this.keyboardChanged=changed||this.keyboardChanged)}onSwatchClick(swatch){if(this.liveDisabled||swatch.disabled)return;const parsed=parseColor(swatch.color);parsed&&this.commitColor(this.opacity?parsed:hsva(parsed.h,parsed.s,parsed.v,1))}cancelEyeDropper(){this.eyeDropperGeneration+=1,this.eyeDropperAbort?.abort(),this.eyeDropperAbort=void 0}formatNumber(value){return getNumberFormat(this.effectiveLocale,{maximumFractionDigits:0}).format(value)}renderGrid(){const saturation=Math.round(this.color.s),brightness=Math.round(this.color.v);return html`<div
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{live}from"lit/directives/live.js";import{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated}from"../../../internal/form-associated.js";import{hostAriaLabel,nextId,srOnly}from"../../../internal/a11y.js";import{renderInertPresentation}from"../../../internal/inert-presentation.js";import{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{isRtl,rtlAwarePlacement}from"../../../internal/rtl.js";import{optionalLiteralSetConverter}from"../../../internal/converters.js";import{resolveEffectivePositioningStrategy}from"../../../internal/positioning-strategy.js";import{activateNonmodalOverlay,composedContains}from"../../../internal/nonmodal-overlay-manager.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteRange}from"../../../internal/numbers.js";import{activeElementIn}from"../../../internal/active-element.js";import{acquireNativeControlDescription}from"../../../internal/native-control-description.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{eyeIcon}from"../../../internal/icons.js";import{dispatchNativeEvent,dispatchNativeInputEvent}from"../../../internal/native-event-relay.js";import{cssColor,formatColor,hsva,parseColor,sameColor,withAlphaFormat}from"./color-core.js";import{sizes}from"../../../internal/sizes.styles.js";import{styles}from"./color-picker.styles.js";import{currentValidityValidator}from"../form-validator.js";import{LYRA_DEFAULT_colorPicker,LYRA_DEFAULT_colorPickerCurrentValue,LYRA_DEFAULT_colorPickerEyeDropper,LYRA_DEFAULT_colorPickerHue,LYRA_DEFAULT_colorPickerHueValue,LYRA_DEFAULT_colorPickerOpacity,LYRA_DEFAULT_colorPickerOpacityValue,LYRA_DEFAULT_colorPickerSaturationBrightness,LYRA_DEFAULT_colorPickerSaturationBrightnessValue,LYRA_DEFAULT_colorPickerSwatch,LYRA_DEFAULT_colorPickerSwatches,LYRA_DEFAULT_colorPickerToggleFormat,LYRA_DEFAULT_colorPickerValueField,LYRA_DEFAULT_fieldRequired}from"../../../internal/default-strings.generated.js";const POSITIONING_STRATEGY=optionalLiteralSetConverter(["absolute","fixed"]),SMALL_STEP=1,LARGE_STEP_MULTIPLIER=10,FORMAT_CYCLE=["hex","rgb","hsl","hsv"],MAX_COLOR_PICKER_SWATCHES=1e4,EMPTY_COLOR_PICKER_SWATCHES=Object.freeze([]);function projectColorPickerSwatches(value){try{if(typeof value=="string")return Object.freeze(value.split(";").slice(0,MAX_COLOR_PICKER_SWATCHES).flatMap(entry=>{const color=entry.trim();return color?[Object.freeze({color})]:[]}));if(!Array.isArray(value))return EMPTY_COLOR_PICKER_SWATCHES;const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return EMPTY_COLOR_PICKER_SWATCHES;const swatches=[];for(let index=0;index<Math.min(length.value,MAX_COLOR_PICKER_SWATCHES);index+=1){const entry=getOwnDataDescriptor(value,String(index));if(entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR)continue;if(typeof entry.value=="string"){const color2=entry.value.trim();color2&&swatches.push(Object.freeze({color:color2}));continue}if(entry.value===null||typeof entry.value!="object"||Array.isArray(entry.value))continue;const color=getOwnDataDescriptor(entry.value,"color"),label=getOwnDataDescriptor(entry.value,"label"),disabled=getOwnDataDescriptor(entry.value,"disabled"),icon=getOwnDataDescriptor(entry.value,"icon");if(color===MISSING_OWN_DATA_DESCRIPTOR||color===UNSAFE_OWN_DATA_DESCRIPTOR||typeof color.value!="string"||color.value.trim()==="")continue;const labelValue=label===MISSING_OWN_DATA_DESCRIPTOR||label===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:typeof label.value=="string"&&label.value.trim()?label.value:void 0,disabledValue=disabled===MISSING_OWN_DATA_DESCRIPTOR||disabled===UNSAFE_OWN_DATA_DESCRIPTOR||typeof disabled.value!="boolean"?void 0:disabled.value,iconValue=icon===MISSING_OWN_DATA_DESCRIPTOR||icon===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:icon.value;swatches.push(Object.freeze({color:color.value.trim(),...labelValue===void 0?{}:{label:labelValue},...disabledValue===void 0?{}:{disabled:disabledValue},...iconValue===void 0?{}:{icon:iconValue}}))}return Object.freeze(swatches)}catch{return EMPTY_COLOR_PICKER_SWATCHES}}function eyeDropperConstructor(ownerWindow){return ownerWindow?.EyeDropper}function isNodeValue(value){if(value===null||typeof value!="object")return!1;const candidate=value;return typeof candidate.nodeType=="number"&&typeof candidate.getRootNode=="function"}function isElementValue(value){return!isNodeValue(value)||value.nodeType!==1?!1:typeof value.matches=="function"}class ColorPickerBase extends LyraElement{}class LyraColorPicker extends FormAssociated(ColorPickerBase){static{this.defaultStrings={...super.defaultStrings,colorPicker:LYRA_DEFAULT_colorPicker,colorPickerCurrentValue:LYRA_DEFAULT_colorPickerCurrentValue,colorPickerEyeDropper:LYRA_DEFAULT_colorPickerEyeDropper,colorPickerHue:LYRA_DEFAULT_colorPickerHue,colorPickerHueValue:LYRA_DEFAULT_colorPickerHueValue,colorPickerOpacity:LYRA_DEFAULT_colorPickerOpacity,colorPickerOpacityValue:LYRA_DEFAULT_colorPickerOpacityValue,colorPickerSaturationBrightness:LYRA_DEFAULT_colorPickerSaturationBrightness,colorPickerSaturationBrightnessValue:LYRA_DEFAULT_colorPickerSaturationBrightnessValue,colorPickerSwatch:LYRA_DEFAULT_colorPickerSwatch,colorPickerSwatches:LYRA_DEFAULT_colorPickerSwatches,colorPickerToggleFormat:LYRA_DEFAULT_colorPickerToggleFormat,colorPickerValueField:LYRA_DEFAULT_colorPickerValueField,fieldRequired:LYRA_DEFAULT_fieldRequired}}static get validators(){return[currentValidityValidator("required","disabled","readonly","value")]}static{this.styles=[LyraElement.styles,srOnly,sizes,styles]}get positioningStrategy(){return this._positioningStrategy??"absolute"}set positioningStrategy(next){const normalized=POSITIONING_STRATEGY.normalize(next)??"absolute",old=this.positioningStrategy;this._positioningStrategy=normalized,normalized!==old&&(this.requestUpdate("positioningStrategy",old),old==="fixed"!=(normalized==="fixed")&&this.requestUpdate("hoist",old==="fixed"))}get hoist(){return this.positioningStrategy==="fixed"}set hoist(next){this.positioningStrategy=next?"fixed":"absolute"}get open(){return this._open}set open(next){const normalized=!!next&&!this.effectiveDisabled&&!this.readonly;if(normalized!==this._open){if(!this.hasRenderedOnce||!this.isConnected){this.applyOpenState(normalized);return}if(this.emit(normalized?"lr-show":"lr-hide",null,{cancelable:!0}).defaultPrevented){this.toggleAttribute("open",this._open);return}this.applyOpenState(normalized)}}applyOpenState(next){const old=this._open;this._open=next,this.requestUpdate("open",old)}get liveDisabled(){return this.effectiveDisabled||typeof this.matches=="function"&&this.matches(":disabled")}syncExternalDescription(){const target=this.isConnected?this.triggerEl():null;if(!target){this.releaseExternalDescription();return}this.externalDescriptionLease?this.externalDescriptionLease.update(target):this.externalDescriptionLease=acquireNativeControlDescription(this,target,()=>this.localDescriptionIds)}releaseExternalDescription(){this.externalDescriptionLease?.release(),this.externalDescriptionLease=void 0}constructor(){super(),this.label="",this.hint="",this.withLabel=!1,this.withHint=!1,this.errorText="",this.accessibleLabel="",this.readonly=!1,this.size="m",this.format="hex",this.opacity=!1,this.uppercase=!1,this.swatches="",this.withoutFormatToggle=!1,this.noFormatToggle=!1,this.inline=!1,this.placement="bottom-start",this._open=!1,this.hasLabel=!1,this.hasHint=!1,this.hasError=!1,this.hasEyeDropper=!1,this.color=hsva(0,0,0,1),this.valueNeedsParse=!1,this.localDescriptionIds="",this.hintId=nextId("color-picker-hint"),this.errorId=nextId("color-picker-error"),this.labelId=nextId("color-picker-label"),this.valueTextId=nextId("color-picker-value"),this.triggerId=nextId("color-picker-trigger"),this.panelId=nextId("color-picker-panel"),this.dragChanged=!1,this.keyboardChanged=!1,this.restoreFocusOnClose=!0,this.eyeDropperGeneration=0,this.suppressDisconnectedClose=!1,this.pendingPlacementEffects=0,this.interactionGeneration=0,this.hasRenderedOnce=!1,this.projectedSwatches=EMPTY_COLOR_PICKER_SWATCHES,this.onDocumentPointerDown=event=>{const target=event.composedPath()[0];if(!(isElementValue(target)&&composedContains(this,target))){if(this.overlayHandle?.isActive()){this.overlayHandle.dismissBackdrop();return}this.restoreFocusOnClose=!1,this.hide()}},this.onTriggerClick=()=>{this.effectiveDisabled||(this.open=!this.open)},this.onPointerMove=event=>{if(this.drag?.pointerId===event.pointerId){if(this.effectiveDisabled||this.readonly){this.cancelDrag();return}this.applyPointer(event)}},this.onPointerUp=event=>{if(this.drag?.pointerId!==event.pointerId)return;if(this.effectiveDisabled||this.readonly){this.cancelDrag();return}this.applyPointer(event);const changed=this.dragChanged;this.endDrag(),changed&&this.emitCommit()},this.onPointerCancel=event=>{this.drag?.pointerId===event.pointerId&&this.cancelDrag()},this.onGridKeyDown=event=>{if(this.effectiveDisabled||this.readonly)return;const step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1),inline=this.inlineStep(event);let next;inline!==null?next=hsva(this.color.h,this.color.s+inline,this.color.v,this.color.a):event.key==="ArrowUp"?next=hsva(this.color.h,this.color.s,this.color.v+step,this.color.a):event.key==="ArrowDown"?next=hsva(this.color.h,this.color.s,this.color.v-step,this.color.a):event.key==="Home"?next=hsva(this.color.h,0,this.color.v,this.color.a):event.key==="End"&&(next=hsva(this.color.h,100,this.color.v,this.color.a)),next&&(event.preventDefault(),this.applyKeyboardColor(next))},this.onHueKeyDown=event=>{if(this.effectiveDisabled||this.readonly)return;const step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1),inline=this.inlineStep(event);let hue;inline!==null?hue=this.color.h+inline:event.key==="ArrowUp"?hue=this.color.h+step:event.key==="ArrowDown"?hue=this.color.h-step:event.key==="Home"?hue=0:event.key==="End"&&(hue=360),hue!==void 0&&(event.preventDefault(),this.applyKeyboardColor(hsva(finiteRange(hue,0,0,360),this.color.s,this.color.v,this.color.a)))},this.onAlphaKeyDown=event=>{if(this.effectiveDisabled||this.readonly)return;const step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1)/100,inline=this.inlineStep(event);let alpha;inline!==null?alpha=this.color.a+inline/100:event.key==="ArrowUp"?alpha=this.color.a+step:event.key==="ArrowDown"?alpha=this.color.a-step:event.key==="Home"?alpha=0:event.key==="End"&&(alpha=1),alpha!==void 0&&(event.preventDefault(),this.applyKeyboardColor(hsva(this.color.h,this.color.s,this.color.v,alpha)))},this.onControlKeyUp=()=>{this.keyboardChanged&&(this.keyboardChanged=!1,this.emitCommit())},this.onFieldInput=event=>{if(event.stopPropagation(),this.liveDisabled||this.readonly){this.pendingInput=void 0,this.requestUpdate();return}this.pendingInput=event.target.value},this.onFieldChange=event=>{event.stopPropagation();const field=event.target;if(this.liveDisabled||this.readonly){this.pendingInput=void 0,this.requestUpdate();return}const parsed=parseColor(field.value);parsed&&this.commitColor(parsed),this.pendingInput=void 0,this.requestUpdate()},this.onFieldKeyDown=event=>{this.liveDisabled||this.readonly||event.key==="Enter"&&(event.preventDefault(),this.onFieldChange(event))},this.onFormatClick=()=>{if(this.liveDisabled)return;const index=FORMAT_CYCLE.indexOf(this.format);this.format=FORMAT_CYCLE[(index+1)%FORMAT_CYCLE.length]},this.onEyeDropperClick=()=>{const ownerWindow=this.ownerDocument.defaultView;if(!this.isConnected||!ownerWindow)return;const Constructor=eyeDropperConstructor(ownerWindow);if(!Constructor||this.effectiveDisabled||this.readonly)return;this.cancelEyeDropper();const generation=this.eyeDropperGeneration,controller=new ownerWindow.AbortController;this.eyeDropperAbort=controller,new Constructor().open({signal:controller.signal}).then(result=>{if(controller.signal.aborted||generation!==this.eyeDropperGeneration||!this.isConnected||this.ownerDocument.defaultView!==ownerWindow||this.effectiveDisabled||this.readonly)return;const parsed=parseColor(result?.sRGBHex??"");parsed&&this.commitColor(this.opacity?hsva(parsed.h,parsed.s,parsed.v,this.color.a):parsed)}).catch(()=>{}).finally(()=>{generation===this.eyeDropperGeneration&&(this.eyeDropperAbort=void 0)})},this.onControlFocus=event=>{event.stopPropagation();const previous=event.relatedTarget;isNodeValue(previous)&&this.renderRoot.contains(previous)||relayNativeEvent(this,event)},this.onControlBlur=event=>{event.stopPropagation();const next=event.relatedTarget;isNodeValue(next)&&this.renderRoot.contains(next)||(relayNativeEvent(this,event),this.requestUpdate())},this.controlFocusListener={capture:!0,handleEvent:event=>this.onControlFocus(event)},this.controlBlurListener={capture:!0,handleEvent:event=>this.onControlBlur(event)},this.onSlotChange=event=>{const slot=event.target,assigned=Array.from(this.children).some(el=>el.getAttribute("slot")===slot.name);slot.name==="label"&&(this.hasLabel=assigned),slot.name==="hint"&&(this.hasHint=assigned),slot.name==="error"&&(this.hasError=assigned)},this.addEventListener("focusout",()=>this.requestUpdate())}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.syncExternalDescription();const seedEnvironmentState=()=>{const hasSlot=name=>Array.from(this.children).some(el=>el.getAttribute("slot")===name);this.hasLabel=hasSlot("label"),this.hasHint=hasSlot("hint"),this.hasError=hasSlot("error"),this.hasEyeDropper=!!eyeDropperConstructor(this.ownerDocument.defaultView)};this.hasUpdated?seedEnvironmentState():this.seedFirstRenderState(seedEnvironmentState)}disconnectedCallback(){this.releaseExternalDescription(),this.suppressDisconnectedClose=this.open,this.open=!1,this.teardownOverlay(!1),this.cancelEyeDropper(),this.interactionGeneration+=1,this.keyboardChanged=!1,this.cancelDrag(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseExternalDescription(),this.isConnected&&this.hasUpdated&&this.syncExternalDescription(),this.cancelDrag(),this.cancelEyeDropper()}get value(){return super.value}set value(next){this.endDrag(),super.value=next??"",this.valueNeedsParse=!0}willUpdate(changed){super.willUpdate(changed);const formatChanged=changed.has("format")||changed.has("opacity")||changed.has("uppercase");if(formatChanged&&this.cancelDrag(),(this.liveDisabled||this.readonly)&&(this.open&&this.applyOpenState(!1),this.pendingInput=void 0,this.keyboardChanged=!1,this.cancelDrag()),!this.valueNeedsParse&&!formatChanged)return;const shouldReserialize=formatChanged;if(this.valueNeedsParse){this.valueNeedsParse=!1;const parsed=parseColor(super.value);if(parsed){this.color=parsed,this.writeSerializedValue();return}}shouldReserialize&&parseColor(super.value)!==null&&this.writeSerializedValue()}updated(changed){if(super.updated(changed),this.syncExternalDescription(),changed.has("readonly")&&this.checkValidity(),changed.has("open")){const suppressClose=!this.open&&this.suppressDisconnectedClose;this.suppressDisconnectedClose=!1;const announceOpen=this.open&&this.hasRenderedOnce&&this.isConnected;this.open&&!this.inline?(this.pendingPlacementEffects=announceOpen?3:2,this.activatePanel()):(this.pendingPlacementEffects=0,this.teardownOverlay(this.restoreFocusOnClose),this.pendingInput=void 0),this.hasRenderedOnce&&this.isConnected&&!suppressClose&&(this.open&&this.inline?this.emit("lr-after-show"):this.open||this.emit("lr-after-hide"))}else if(changed.has("inline"))if(this.inline){this.teardownOverlay(),this.panelEl()?.style.removeProperty("position");const announceOpen=(this.pendingPlacementEffects&1)!==0;this.pendingPlacementEffects=0,announceOpen&&this.emit("lr-after-show")}else this.open&&this.activatePanel();else this.open&&!this.inline&&(changed.has("placement")||changed.has("size")||changed.has("positioningStrategy"))&&this.positionPanel();this.hasRenderedOnce=!0}show(){this.open=!0}hide(){this.open=!1}getFormattedValue(format="hex"){return formatColor(this.color,format,this.uppercase)}getHexString(hue,saturation,brightness,alpha=100){const normalizedAlpha=finiteRange(alpha,100,0,100);return formatColor(hsva(hue,saturation,brightness,normalizedAlpha/100),normalizedAlpha<100?"hexa":"hex",this.uppercase)}click(){this.effectiveDisabled||(this.inline?this.renderRoot?.querySelector('[part~="input"]')?.click():this.triggerEl()?.click())}focus(options){this.effectiveDisabled||(this.inline?this.renderRoot?.querySelector('[part~="grid-handle"]')?.focus(options):this.triggerEl()?.focus(options))}blur(){const active=activeElementIn(this.shadowRoot);active&&typeof active.blur=="function"&&active.blur()}reportValidity(){const valid=super.reportValidity();return this.requestUpdate(),valid}setCustomValidity(message){super.setCustomValidity(message),this.requestUpdate()}resetValidity(){super.resetValidity(),this.requestUpdate()}activeFormat(){return withAlphaFormat(this.format,this.opacity)}writeSerializedValue(){const serialized=formatColor(this.color,this.activeFormat(),this.uppercase);return serialized===super.value?!1:(super.value=serialized,!0)}applyColor(next){next.h===this.color.h&&next.s===this.color.s&&next.v===this.color.v&&next.a===this.color.a||(this.color=next);const changed=this.writeSerializedValue();return changed&&(dispatchNativeInputEvent(this),this.emit("lr-input")),changed}emitCommit(){dispatchNativeEvent(this,"change"),this.emit("lr-change",{value:this.value})}commitColor(next){const changed=this.applyColor(next);return changed&&this.emitCommit(),changed}normalizedSwatches(){const source=this.swatches;return source!==this.swatchSource&&(this.swatchSource=source,this.projectedSwatches=projectColorPickerSwatches(source)),this.projectedSwatches}triggerEl(){return this.renderRoot?.querySelector('[part~="trigger"]')}panelEl(){return this.renderRoot?.querySelector('[part~="panel"]')}positionPanel(){this.cleanupPositioner?.(),this.cleanupPositioner=void 0;const anchor=this.triggerEl(),panel=this.panelEl();if(!anchor||!panel)return;const handle=place(anchor,panel,{placement:rtlAwarePlacement(this.placement,this),strategy:resolveEffectivePositioningStrategy(this,this._positioningStrategy,"absolute")});this.cleanupPositioner=handle,handle.ready.then(positioned=>{if(this.cleanupPositioner!==handle||!this.open||this.inline||!this.isConnected)return;if(!positioned){this.pendingPlacementEffects=0,this.suppressDisconnectedClose=!0,this.applyOpenState(!1);return}const effects=this.pendingPlacementEffects;this.pendingPlacementEffects=0,effects&2&&this.overlayHandle?.focusInitial(),effects&1&&this.emit("lr-after-show")})}activatePanel(){!this.isConnected||this.inline||(this.pendingPlacementEffects|=2,this.positionPanel(),this.restoreFocusOnClose=!0,this.overlayHandle=activateNonmodalOverlay({host:this,panel:()=>this.panelEl(),onEscape:()=>this.hide(),onBackdrop:()=>{this.restoreFocusOnClose=!1,this.hide(),this.open&&(this.restoreFocusOnClose=!0)},restoreFocusTo:this.triggerEl()}),this.lightDismissDocument=this.ownerDocument,this.lightDismissDocument.addEventListener("pointerdown",this.onDocumentPointerDown,!0))}teardownOverlay(restoreFocus=!0){this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.overlayHandle?.deactivate({restoreFocus}),this.overlayHandle=void 0,this.lightDismissDocument?.removeEventListener("pointerdown",this.onDocumentPointerDown,!0),this.lightDismissDocument=void 0,this.restoreFocusOnClose=!0}beginDrag(event,track,box){const dragWindow=box.ownerDocument.defaultView;if(!this.isConnected||!dragWindow||this.effectiveDisabled||this.readonly||this.drag!==void 0||event.pointerType==="mouse"&&event.button!==0)return;const rect=box.getBoundingClientRect();this.drag={pointerId:event.pointerId,track,rect,rtl:isRtl(this),startColor:{...this.color},startValue:this.captureLiveValueCheckpoint()},this.dragChanged=!1;try{box.setPointerCapture(event.pointerId)}catch{}this.dragWindow=dragWindow,dragWindow.addEventListener("pointermove",this.onPointerMove),dragWindow.addEventListener("pointerup",this.onPointerUp),dragWindow.addEventListener("pointercancel",this.onPointerCancel),dragWindow.addEventListener("lostpointercapture",this.onPointerCancel),this.applyPointer(event)}applyPointer(event){const drag=this.drag;if(!drag)return;const{rect,rtl,track}=drag,rawX=rect.width===0?0:(event.clientX-rect.left)/rect.width,ratioX=finiteRange(rtl?1-rawX:rawX,0,0,1);let next;if(track==="grid"){const rawY=rect.height===0?0:(event.clientY-rect.top)/rect.height,ratioY=finiteRange(rawY,0,0,1);next=hsva(this.color.h,ratioX*100,(1-ratioY)*100,this.color.a)}else track==="hue"?next=hsva(ratioX*360,this.color.s,this.color.v,this.color.a):next=hsva(this.color.h,this.color.s,this.color.v,ratioX);this.dragChanged=this.applyColor(next)||this.dragChanged}cancelDrag(){const drag=this.drag;drag&&(this.endDrag(),this.color=drag.startColor,this.restoreLiveValueCheckpoint(drag.startValue),this.valueNeedsParse=!1)}endDrag(){this.drag=void 0,this.dragChanged=!1;const dragWindow=this.dragWindow;this.dragWindow=void 0,dragWindow?.removeEventListener("pointermove",this.onPointerMove),dragWindow?.removeEventListener("pointerup",this.onPointerUp),dragWindow?.removeEventListener("pointercancel",this.onPointerCancel),dragWindow?.removeEventListener("lostpointercapture",this.onPointerCancel)}inlineStep(event){const rtl=isRtl(this),forward=rtl?"ArrowLeft":"ArrowRight",backward=rtl?"ArrowRight":"ArrowLeft",step=SMALL_STEP*(event.shiftKey?LARGE_STEP_MULTIPLIER:1);return event.key===forward?step:event.key===backward?-step:null}applyKeyboardColor(next){const generation=this.interactionGeneration,changed=this.applyColor(next);generation===this.interactionGeneration&&(this.keyboardChanged=changed||this.keyboardChanged)}onSwatchClick(swatch){if(this.liveDisabled||this.readonly||swatch.disabled)return;const parsed=parseColor(swatch.color);parsed&&this.commitColor(this.opacity?parsed:hsva(parsed.h,parsed.s,parsed.v,1))}cancelEyeDropper(){this.eyeDropperGeneration+=1,this.eyeDropperAbort?.abort(),this.eyeDropperAbort=void 0}formatNumber(value){return getNumberFormat(this.effectiveLocale,{maximumFractionDigits:0}).format(value)}renderGrid(){const saturation=Math.round(this.color.s),brightness=Math.round(this.color.v);return html`<div
2
2
  part="grid"
3
3
  style=${styleMap({"--lr-color-picker-grid-hue":cssColor(hsva(this.color.h,100,100,1))})}
4
4
  @pointerdown=${event=>this.beginDrag(event,"grid",event.currentTarget)}
@@ -72,7 +72,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
72
72
  ?disabled=${this.effectiveDisabled||entry.disabled===!0}
73
73
  style=${styleMap(parsed?{"--lr-color-picker-swatch-color":cssColor(parsed)}:{})}
74
74
  @click=${()=>this.onSwatchClick(entry)}
75
- ></button>
75
+ >${entry.icon==null?nothing:renderInertPresentation(entry.icon,{part:"swatch-icon"})}</button>
76
76
  `})}
77
77
  </div>`}renderPanel(name,labelledBy,describedBy,invalid){const entries=this.normalizedSwatches(),fieldValue=this.pendingInput??this.getFormattedValue(this.activeFormat());return html`<div
78
78
  id=${this.panelId}
@@ -104,6 +104,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
104
104
  aria-required=${this.required?"true":"false"}
105
105
  aria-invalid=${invalid?"true":"false"}
106
106
  ?disabled=${this.effectiveDisabled}
107
+ ?readonly=${this.readonly}
107
108
  @input=${this.onFieldInput}
108
109
  @change=${this.onFieldChange}
109
110
  @keydown=${this.onFieldKeyDown}
@@ -167,4 +168,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
167
168
  <div id=${this.hintId} part="hint" ?hidden=${!hasHint}
168
169
  >${this.hint}<slot name="hint" @slotchange=${this.onSlotChange}></slot
169
170
  ></div>
170
- </div>`}}__decorate([property()],LyraColorPicker.prototype,"label",void 0),__decorate([property()],LyraColorPicker.prototype,"hint",void 0),__decorate([property({type:Boolean,attribute:"with-label",reflect:!0})],LyraColorPicker.prototype,"withLabel",void 0),__decorate([property({type:Boolean,attribute:"with-hint",reflect:!0})],LyraColorPicker.prototype,"withHint",void 0),__decorate([property({attribute:"error-text"})],LyraColorPicker.prototype,"errorText",void 0),__decorate([property({attribute:"aria-label"})],LyraColorPicker.prototype,"accessibleLabel",void 0),__decorate([property({reflect:!0})],LyraColorPicker.prototype,"size",void 0),__decorate([property()],LyraColorPicker.prototype,"format",void 0),__decorate([property({type:Boolean})],LyraColorPicker.prototype,"opacity",void 0),__decorate([property({type:Boolean})],LyraColorPicker.prototype,"uppercase",void 0),__decorate([property()],LyraColorPicker.prototype,"swatches",void 0),__decorate([property({type:Boolean,attribute:"without-format-toggle"})],LyraColorPicker.prototype,"withoutFormatToggle",void 0),__decorate([property({type:Boolean,attribute:"no-format-toggle",reflect:!0})],LyraColorPicker.prototype,"noFormatToggle",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraColorPicker.prototype,"inline",void 0),__decorate([property({attribute:"positioning-strategy",reflect:!0,converter:POSITIONING_STRATEGY})],LyraColorPicker.prototype,"positioningStrategy",null),__decorate([property({type:Boolean,reflect:!0})],LyraColorPicker.prototype,"hoist",null),__decorate([property({reflect:!0})],LyraColorPicker.prototype,"placement",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraColorPicker.prototype,"open",null),__decorate([state()],LyraColorPicker.prototype,"hasLabel",void 0),__decorate([state()],LyraColorPicker.prototype,"hasHint",void 0),__decorate([state()],LyraColorPicker.prototype,"hasError",void 0),__decorate([state()],LyraColorPicker.prototype,"hasEyeDropper",void 0),__decorate([state()],LyraColorPicker.prototype,"color",void 0);export{LyraColorPicker};
171
+ </div>`}}__decorate([property()],LyraColorPicker.prototype,"label",void 0),__decorate([property()],LyraColorPicker.prototype,"hint",void 0),__decorate([property({type:Boolean,attribute:"with-label",reflect:!0})],LyraColorPicker.prototype,"withLabel",void 0),__decorate([property({type:Boolean,attribute:"with-hint",reflect:!0})],LyraColorPicker.prototype,"withHint",void 0),__decorate([property({attribute:"error-text"})],LyraColorPicker.prototype,"errorText",void 0),__decorate([property({attribute:"aria-label"})],LyraColorPicker.prototype,"accessibleLabel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraColorPicker.prototype,"readonly",void 0),__decorate([property({reflect:!0})],LyraColorPicker.prototype,"size",void 0),__decorate([property()],LyraColorPicker.prototype,"format",void 0),__decorate([property({type:Boolean})],LyraColorPicker.prototype,"opacity",void 0),__decorate([property({type:Boolean})],LyraColorPicker.prototype,"uppercase",void 0),__decorate([property()],LyraColorPicker.prototype,"swatches",void 0),__decorate([property({type:Boolean,attribute:"without-format-toggle"})],LyraColorPicker.prototype,"withoutFormatToggle",void 0),__decorate([property({type:Boolean,attribute:"no-format-toggle",reflect:!0})],LyraColorPicker.prototype,"noFormatToggle",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraColorPicker.prototype,"inline",void 0),__decorate([property({attribute:"positioning-strategy",reflect:!0,converter:POSITIONING_STRATEGY})],LyraColorPicker.prototype,"positioningStrategy",null),__decorate([property({type:Boolean,reflect:!0})],LyraColorPicker.prototype,"hoist",null),__decorate([property({reflect:!0})],LyraColorPicker.prototype,"placement",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraColorPicker.prototype,"open",null),__decorate([state()],LyraColorPicker.prototype,"hasLabel",void 0),__decorate([state()],LyraColorPicker.prototype,"hasHint",void 0),__decorate([state()],LyraColorPicker.prototype,"hasError",void 0),__decorate([state()],LyraColorPicker.prototype,"hasEyeDropper",void 0),__decorate([state()],LyraColorPicker.prototype,"color",void 0);export{LyraColorPicker};
@@ -1,4 +1,4 @@
1
- import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement,type LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import type{LyraSize}from'../../../internal/variants.js';import type{LyraSelectionDirection}from'../../../internal/shared-unions.js';import type{LyraOption}from'./option.class.js';import'./option.class.js';import type{PlaceStrategy,PlaceSync}from'../../../internal/positioner.js';import{type FormOwnerValue}from'../../../internal/form-associated.js';import type{LyraPickerDetailValue,LyraPickerValue}from'../../../internal/picker-value.js';export type OptionFilter=(option:LyraOption,query:string)=>boolean;export type LyraComboboxPlacement='top'|'bottom';export type LyraComboboxTagRenderer=(option:LyraOption,index:number)=>unknown;
1
+ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement,type LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import type{LyraAppearance,LyraSize}from'../../../internal/variants.js';import type{LyraSelectionDirection}from'../../../internal/shared-unions.js';import type{LyraOption}from'./option.class.js';import'./option.class.js';import type{PlaceStrategy,PlaceSync}from'../../../internal/positioner.js';import{type FormOwnerValue}from'../../../internal/form-associated.js';import type{LyraPickerDetailValue,LyraPickerValue}from'../../../internal/picker-value.js';export type OptionFilter=(option:LyraOption,query:string)=>boolean;export type LyraComboboxPlacement='top'|'bottom';export type LyraComboboxTagRenderer=(option:LyraOption,index:number)=>unknown;
2
2
  /** What a `validators` entry may return: nothing/`true` passes, a string is the message, `false` is
3
3
  * a generic failure, and an object of {@linkcode ValidityStateFlags} names the flags to raise. */
4
4
  export type LyraComboboxValidatorResult=void|boolean|string|ValidityStateFlags;
@@ -86,11 +86,12 @@ export type LyraComboboxChangeEvent<Multiple extends boolean=boolean> =LyraCombo
86
86
  * a typo) still commits rather than being dropped, but renders with a dashed/italic
87
87
  * `[part='unknown-value']` badge instead of silently passing the raw string off as an ordinary
88
88
  * label -- see `isUnknownValue()`. Suppressed while an async `source` fetch has never yet resolved
89
- * for this element, and never shown for an `allowCustomValue` commit, which is a sanctioned
90
- * unmatched value, not a stale one. Over that same unresolved window the raw value itself is
91
- * withheld too -- the trigger (and any `multiple`-mode tag for the same value) shows the
92
- * `loadingText` placeholder instead of the raw string, since it is not yet knowable whether the
93
- * value is even unmatched.
89
+ * for this element, or while the public `loading` property is set (for a consumer mounting
90
+ * `<lr-option>` children asynchronously itself, with no `source` involved), and never shown for an
91
+ * `allowCustomValue` commit, which is a sanctioned unmatched value, not a stale one. Over that same
92
+ * unresolved window the raw value itself is withheld too -- the trigger (and any `multiple`-mode
93
+ * tag for the same value) shows the `loadingText` placeholder instead of the raw string, since it
94
+ * is not yet knowable whether the value is even unmatched.
94
95
  *
95
96
  * @customElement lr-combobox
96
97
  * @slot - `<lr-option>` elements.
@@ -211,6 +212,8 @@ export type LyraComboboxChangeEvent<Multiple extends boolean=boolean> =LyraCombo
211
212
  * @csspart retry-button - The retry control inside the failed-load state.
212
213
  * @csspart hint - The hint message.
213
214
  * @cssprop --lr-combobox-trigger-padding - Padding inside the input container.
215
+ * @cssprop [--lr-combobox-text-color=inherit] - Trigger text color. Defaults to the inherited text
216
+ * color, and to `--lr-color-on-brand` under `appearance="accent"`.
214
217
  * @cssprop [--lr-combobox-trigger-min-height=var(--lr-form-control-height)] - Minimum
215
218
  * input-container block size. Reads the shared form-control height ladder, so retuning
216
219
  * `--lr-theme-form-control-height-*` moves this control and every sibling field together.
@@ -225,6 +228,10 @@ export type LyraComboboxChangeEvent<Multiple extends boolean=boolean> =LyraCombo
225
228
  * shared form-control size ladder.
226
229
  * @cssprop --lr-combobox-tag-padding - Selected-tag padding.
227
230
  * @cssprop --lr-combobox-tag-font-size - Selected-tag text size.
231
+ * @cssprop [--lr-combobox-tag-bg=var(--lr-color-brand-quiet)] - Selected-tag background. Scoped
232
+ * independently of every other use of the shared `--lr-color-brand-quiet` token in this file.
233
+ * @cssprop [--lr-combobox-tag-color=var(--lr-color-text)] - Selected-tag text color.
234
+ * @cssprop [--lr-combobox-tag-radius=var(--lr-radius)] - Selected-tag corner radius.
228
235
  * @cssprop [--lr-combobox-unknown-value-border-style=dashed] - Border style of a `multiple`-mode
229
236
  * tag whose committed value matches no current option/row.
230
237
  * @cssprop [--lr-combobox-unknown-value-border-color=var(--lr-color-border)] - Border color of the
@@ -306,8 +313,8 @@ export declare class LyraCombobox<Multiple extends boolean=boolean>extends LyraE
306
313
  /** `data` carries opaque per-row caller payload -- preserve each item's identity through the
307
314
  * frozen event envelope instead of recursively cloning unknown data, the same policy
308
315
  * `<lr-prompt-queue>`'s `lr-queue-change` detail uses for its own `items`. */
309
- protected static readonly identityEventDetailCollectionItems:Readonly<{'lr-change':readonly string[];input:readonly string[];change:readonly string[];}>;static formAssociated:boolean;static styles:import("lit").CSSResultGroup[];static properties:{customError:{attribute:string;reflect:boolean;noAccessor:boolean;};multiple:{type:BooleanConstructor;reflect:boolean;noAccessor:boolean;};disabled:{type:BooleanConstructor;reflect:boolean;noAccessor:boolean;};required:{type:BooleanConstructor;reflect:boolean;noAccessor:boolean;};value:{noAccessor:boolean;};name:{reflect:boolean;noAccessor:boolean;converter:import("lit").ComplexAttributeConverter<string,unknown>;};maxOptionsVisible:{type:NumberConstructor;attribute:string;noAccessor:boolean;};maxRender:{type:NumberConstructor;attribute:string;noAccessor:boolean;};sourceDelay:{type:NumberConstructor;attribute:string;noAccessor:boolean;};};placeholder:string;label:string;hint:string;errorText:string;
310
- /** Whether the listbox is open. Effectively disabled controls reject direct reopen attempts,
316
+ protected static readonly identityEventDetailCollectionItems:Readonly<{'lr-change':readonly string[];input:readonly string[];change:readonly string[];}>;static formAssociated:boolean;static styles:import("lit").CSSResultGroup[];static properties:{customError:{attribute:string;reflect:boolean;noAccessor:boolean;};multiple:{type:BooleanConstructor;reflect:boolean;noAccessor:boolean;};disabled:{type:BooleanConstructor;reflect:boolean;noAccessor:boolean;};required:{type:BooleanConstructor;reflect:boolean;noAccessor:boolean;};readonly:{type:BooleanConstructor;reflect:boolean;noAccessor:boolean;};value:{noAccessor:boolean;};name:{reflect:boolean;noAccessor:boolean;converter:import("lit").ComplexAttributeConverter<string,unknown>;};maxOptionsVisible:{type:NumberConstructor;attribute:string;noAccessor:boolean;};maxRender:{type:NumberConstructor;attribute:string;noAccessor:boolean;};sourceDelay:{type:NumberConstructor;attribute:string;noAccessor:boolean;};};placeholder:string;label:string;hint:string;errorText:string;
317
+ /** Whether the listbox is open. Disabled or readonly controls reject direct reopen attempts,
311
318
  * including a synchronous fieldset cascade. */
312
319
  get open():boolean;set open(next:boolean);
313
320
  /** Allows a nonmatching query to be created as a new option through the cancelable `lr-create`
@@ -336,12 +343,35 @@ showUnknownOption:boolean;
336
343
  * tag, and the synthetic listbox row -- and is used only while the value is genuinely unmatched,
337
344
  * so it can never override a real option's own label. A blank return falls back to the raw
338
345
  * value, exactly as no hook at all would. Caller-supplied text: it is not localized here. Not
339
- * consulted while an async `source` fetch has never yet resolved for this element -- the value
340
- * is not yet known to be unmatched at all, so `loadingText` renders instead (see `isUnknownValue()`).
346
+ * consulted while an async `source` fetch has never yet resolved for this element, or while
347
+ * `loading` is `true` -- the value is not yet known to be unmatched at all, so `loadingText`
348
+ * renders instead (see `isUnknownValue()`).
341
349
  */
342
350
  getUnknownLabel?:(value:string)=>string;
343
- /** Visual treatment shared with other Lyra form controls. */
344
- appearance:'filled'|'outlined'|'filled-outlined';
351
+ /**
352
+ * Whether a committed value's real label may still be pending -- e.g. the `<lr-option>` catalog
353
+ * behind it is still being fetched/mounted asynchronously (with no `source` involved) and simply
354
+ * hasn't arrived yet. Mirrors `<lr-select>`'s own `loading` property. While `true`, a committed
355
+ * value that currently matches no option/row (the same condition `isUnknownValue()` tests)
356
+ * renders the localized `loadingText` placeholder in the trigger label or the relevant `multiple`
357
+ * tag instead of the raw value, and is not flagged with the dashed/italic
358
+ * `notInCatalog`/`[part='unknown-value']` badge a genuinely unmatched value gets -- "not yet
359
+ * resolved" is a different state from "known to be missing". The open listbox shows the same
360
+ * loading row a `source` fetch in flight shows. Independent of `source`'s own async lifecycle:
361
+ * either condition alone is enough to suppress the unknown-value presentation. Never mutates
362
+ * `value`/`selectedOptions` itself, and does not itself disable the trigger. Reflected so
363
+ * `:host([loading])` is available as a styling hook.
364
+ * @default false
365
+ */
366
+ loading:boolean;private _appearance;
367
+ /**
368
+ * Visual treatment shared with other Lyra form controls -- the full five-value `LyraAppearance`
369
+ * vocabulary, matching `<lr-select>`'s trigger (its nearest sibling, sharing `<lr-option>`
370
+ * children). A raw attribute/property write outside this set, including a typo, clamps to the
371
+ * `'outlined'` default rather than silently rendering unstyled.
372
+ * @default 'outlined'
373
+ */
374
+ get appearance():LyraAppearance;set appearance(next:LyraAppearance);
345
375
  /** Preferred vertical side for the floating listbox. */
346
376
  placement:LyraComboboxPlacement;
347
377
  /**
@@ -432,7 +462,10 @@ get inputmode():string;set inputmode(next:string);get enterkeyhint():string;set
432
462
  get inputValue():string;set inputValue(next:string);private query;
433
463
  /** Public `inputValue` and `setRangeText()` writes remain visible while closed; stale user filter
434
464
  * text left behind by a direct `open = false` write does not. */
435
- private explicitInputValue;private activeIndex;private options;private touched;private validityRevision;private validatorAttributeObserver?;private readonly slotPresence;private loading;
465
+ private explicitInputValue;private activeIndex;private options;private touched;private validityRevision;private validatorAttributeObserver?;private readonly slotPresence;
466
+ /** True while a `source` fetch is actively in flight. Distinct from the public {@link loading}
467
+ * property, which a consumer sets directly; combined with it wherever a loading state is read. */
468
+ private sourceLoading;
436
469
  /**
437
470
  * True while the last `source` call rejected and the popup shows the retry state instead of rows.
438
471
  *
@@ -472,7 +505,7 @@ private pendingSelectedRowValues?;private _rowsByValue;private internals;private
472
505
  customError:string|null;private _fieldsetDisabled;private listId;private inputId;private cleanup?;private listboxPositioned;private positioningGeneration;private positioningReady;private resolvePositioningReady?;private overlayHandle?;private restoreFocusOnClose;private restoringOverlayFocus;private pointerListenerDocument?;private pointerListener?;private listboxHidden;private _isFirstUpdate;private openVetoed;
473
506
  /** Set only by `hide()`. Cleanup is applied in `willUpdate()` after `lr-hide` accepts the close,
474
507
  * so a veto remains an atomic no-op for the query, active row, and async result set. */
475
- private closeCleanupPending;private transitionToken;private transitionWaiters;private _selected;private singleSelectedOption?;private readonly sourceOptionsByRow;private _valueDirty;private _multiple;private _disabled;private _required;private _defaultSelected;private _defaultCaptured;private _restoredStateActive;private _name;private validationTargetOverride?;
508
+ private closeCleanupPending;private transitionToken;private transitionWaiters;private _selected;private singleSelectedOption?;private readonly sourceOptionsByRow;private _valueDirty;private _multiple;private _disabled;private _required;private _readonly;private _defaultSelected;private _defaultCaptured;private _restoredStateActive;private _name;private validationTargetOverride?;
476
509
  /**
477
510
  * Bounds the popup to roughly this many option rows, leaving the rest reachable by scrolling.
478
511
  *
@@ -519,6 +552,13 @@ get disabled():boolean;set disabled(next:boolean);
519
552
  /** Requires at least one committed selection.
520
553
  * @default false */
521
554
  get required():boolean;set required(next:boolean);
555
+ /** Forwards native read-only behavior to the internal filter input: the committed value stays
556
+ * fixed and still submits with the form, the control remains focusable, selectable and
557
+ * copyable, but no popup opens and no edit -- typed, picked, or a tag/clear-button removal --
558
+ * can change it. Mirrors `<lr-input>`'s own `readonly`; bars constraint validation exactly like
559
+ * `disabled` -- see `isBarredFromValidation()`.
560
+ * @default false */
561
+ get readonly():boolean;set readonly(next:boolean);
522
562
  /** The selected value(s): a string in single mode, a string[] in `multiple` mode.
523
563
  *
524
564
  * Assigning `undefined` or `null` clears the selection -- the documented "unset" contract.
@@ -641,9 +681,11 @@ private collectOptionsFromSlot;private refreshOptionDefaults;private optionRefre
641
681
  * Suppressed entirely until a `source` combobox's async fetch has settled at least once (see
642
682
  * `sourceEverSettled`): from mount through the debounce delay and the in-flight call itself,
643
683
  * simply hasn't had a chance to populate `asyncRows` yet, which is "not yet known", not
644
- * "genuinely unknown" -- `loading` alone would miss the debounce-delay span before the request
645
- * even starts, which is exactly the window `labelFor()`'s own loading-placeholder fallback needs
646
- * this to agree with.
684
+ * "genuinely unknown" -- the private `sourceLoading` flag alone would miss the debounce-delay
685
+ * span before the request even starts, which is exactly the window `labelFor()`'s own
686
+ * loading-placeholder fallback needs this to agree with. Also suppressed while the public
687
+ * `loading` property is `true`, for a consumer mounting `<lr-option>` children asynchronously
688
+ * itself with no `source` involved -- see `loading`.
647
689
  *
648
690
  * Checked against the same four sources as `labelFor()`, but as a plain existence test rather
649
691
  * than a label lookup, so a real match with a deliberately blank label is never misreported as
@@ -751,7 +793,14 @@ private assignValue;
751
793
  /** Runs the cancelable option-creation contract, then performs its default append/select behavior. */
752
794
  private createOption;
753
795
  /** Commits arbitrary text in the single-select custom-value mode without adding an option. */
754
- private commitCustomValue;private pickRow;private removeValue;
796
+ private commitCustomValue;private pickRow;
797
+ /**
798
+ * Removes exactly the occurrence at `index`, never every row sharing its public string value --
799
+ * `multiple` mode's committed `value` can legitimately hold a repeated string (the `value`
800
+ * setter never dedupes), and `shownTags` renders one tag per occurrence, so a value-keyed removal
801
+ * would delete every duplicate in one click. Mirrors `<lr-select>`'s `removeValueAt()`.
802
+ */
803
+ private removeValueAt;
755
804
  /**
756
805
  * The clear button clears both axes the control owns — the committed selection and the
757
806
  * in-progress filter text — but each announces only its own change. A query-only clear must stay