@aceshooting/lyra-ui 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +140 -0
- package/README.md +10 -5
- package/custom-elements.json +7947 -860
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts +67 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts.map +1 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +78 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js.map +1 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts +2 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts.map +1 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js +5 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js.map +1 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.d.ts +2 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.d.ts.map +1 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +17 -0
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js.map +1 -0
- package/dist/components/agent-tools/agent-trace/agent-trace.class.js +1 -1
- package/dist/components/agent-tools/agent-trace/agent-trace.class.js.map +1 -1
- package/dist/components/agent-tools/agent-trace/agent-trace.styles.d.ts.map +1 -1
- package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +2 -0
- package/dist/components/agent-tools/agent-trace/agent-trace.styles.js.map +1 -1
- package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +77 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts.map +1 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.class.js +144 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.class.js.map +1 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.d.ts +2 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.d.ts.map +1 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.js +5 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.js.map +1 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.styles.d.ts +2 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.styles.d.ts.map +1 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +96 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.styles.js.map +1 -0
- package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
- package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js.map +1 -1
- package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -0
- package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts.map +1 -1
- package/dist/components/agent-tools/context-inspector/context-inspector.class.js +4 -1
- package/dist/components/agent-tools/context-inspector/context-inspector.class.js.map +1 -1
- package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +1 -1
- package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js.map +1 -1
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts.map +1 -1
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +10 -8
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js.map +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace.class.js.map +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.js +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.js.map +1 -1
- package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts.map +1 -1
- package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +11 -5
- package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js.map +1 -1
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js.map +1 -1
- package/dist/components/agent-tools/tool-result-view/registry.d.ts +38 -1
- package/dist/components/agent-tools/tool-result-view/registry.d.ts.map +1 -1
- package/dist/components/agent-tools/tool-result-view/registry.js.map +1 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +16 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts.map +1 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +32 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js.map +1 -1
- package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts.map +1 -1
- package/dist/components/agent-tools/trace-tree/trace-tree.class.js +21 -10
- package/dist/components/agent-tools/trace-tree/trace-tree.class.js.map +1 -1
- package/dist/components/charts/chart/box-plot.class.d.ts +4 -0
- package/dist/components/charts/chart/box-plot.class.d.ts.map +1 -1
- package/dist/components/charts/chart/box-plot.class.js +43 -11
- package/dist/components/charts/chart/box-plot.class.js.map +1 -1
- package/dist/components/charts/chart/chart-loader.d.ts +39 -0
- package/dist/components/charts/chart/chart-loader.d.ts.map +1 -1
- package/dist/components/charts/chart/chart-loader.js +53 -0
- package/dist/components/charts/chart/chart-loader.js.map +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +113 -10
- package/dist/components/charts/chart/chart.class.d.ts.map +1 -1
- package/dist/components/charts/chart/chart.class.js +293 -20
- package/dist/components/charts/chart/chart.class.js.map +1 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +17 -5
- package/dist/components/charts/chart/lite-chart.class.d.ts.map +1 -1
- package/dist/components/charts/chart/lite-chart.class.js +60 -9
- package/dist/components/charts/chart/lite-chart.class.js.map +1 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +4 -0
- package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts.map +1 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.class.js +17 -4
- package/dist/components/conversation/agent-workspace/agent-workspace.class.js.map +1 -1
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +2 -7
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts.map +1 -1
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +29 -58
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js.map +1 -1
- package/dist/components/conversation/code-block/code-block-core.class.d.ts.map +1 -1
- package/dist/components/conversation/code-block/code-block-core.class.js +12 -1
- package/dist/components/conversation/code-block/code-block-core.class.js.map +1 -1
- package/dist/components/conversation/code-block/code-block.class.d.ts.map +1 -1
- package/dist/components/conversation/code-block/code-block.class.js +3 -0
- package/dist/components/conversation/code-block/code-block.class.js.map +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +7 -0
- package/dist/components/conversation/conversation-item/conversation-item.class.d.ts.map +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.class.js +8 -0
- package/dist/components/conversation/conversation-item/conversation-item.class.js.map +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.styles.d.ts.map +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.styles.js +12 -0
- package/dist/components/conversation/conversation-item/conversation-item.styles.js.map +1 -1
- package/dist/components/conversation/markdown/markdown-core.class.d.ts.map +1 -1
- package/dist/components/conversation/markdown/markdown-core.class.js +2 -1
- package/dist/components/conversation/markdown/markdown-core.class.js.map +1 -1
- package/dist/components/conversation/markdown/markdown.class.d.ts.map +1 -1
- package/dist/components/conversation/markdown/markdown.class.js +2 -1
- package/dist/components/conversation/markdown/markdown.class.js.map +1 -1
- package/dist/components/conversation/message-actions/message-actions.class.d.ts.map +1 -1
- package/dist/components/conversation/message-actions/message-actions.class.js +5 -2
- package/dist/components/conversation/message-actions/message-actions.class.js.map +1 -1
- package/dist/components/conversation/model-select/model-select.class.d.ts +4 -0
- package/dist/components/conversation/model-select/model-select.class.d.ts.map +1 -1
- package/dist/components/conversation/model-select/model-select.class.js +4 -0
- package/dist/components/conversation/model-select/model-select.class.js.map +1 -1
- package/dist/components/conversation/model-select/model-select.styles.d.ts.map +1 -1
- package/dist/components/conversation/model-select/model-select.styles.js +7 -3
- package/dist/components/conversation/model-select/model-select.styles.js.map +1 -1
- package/dist/components/conversation/thread-list/thread-list.class.d.ts +2 -0
- package/dist/components/conversation/thread-list/thread-list.class.d.ts.map +1 -1
- package/dist/components/conversation/thread-list/thread-list.class.js +4 -2
- package/dist/components/conversation/thread-list/thread-list.class.js.map +1 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts +4 -2
- package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts.map +1 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.class.js +4 -2
- package/dist/components/conversation/typing-indicator/typing-indicator.class.js.map +1 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.styles.d.ts.map +1 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +35 -21
- package/dist/components/conversation/typing-indicator/typing-indicator.styles.js.map +1 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.styles.d.ts.map +1 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +2 -0
- package/dist/components/data/graph-query-builder/graph-query-builder.styles.js.map +1 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +1 -6
- package/dist/components/data/heatmap/heatmap.class.d.ts.map +1 -1
- package/dist/components/data/heatmap/heatmap.class.js +118 -136
- package/dist/components/data/heatmap/heatmap.class.js.map +1 -1
- package/dist/components/data/table/table.class.d.ts +27 -0
- package/dist/components/data/table/table.class.d.ts.map +1 -1
- package/dist/components/data/table/table.class.js +67 -2
- package/dist/components/data/table/table.class.js.map +1 -1
- package/dist/components/data/table/table.styles.d.ts.map +1 -1
- package/dist/components/data/table/table.styles.js +17 -2
- package/dist/components/data/table/table.styles.js.map +1 -1
- package/dist/components/data/tree/tree.class.d.ts +16 -1
- package/dist/components/data/tree/tree.class.d.ts.map +1 -1
- package/dist/components/data/tree/tree.class.js.map +1 -1
- package/dist/components/data/word-cloud/word-cloud.class.d.ts +17 -0
- package/dist/components/data/word-cloud/word-cloud.class.d.ts.map +1 -1
- package/dist/components/data/word-cloud/word-cloud.class.js +43 -0
- package/dist/components/data/word-cloud/word-cloud.class.js.map +1 -1
- package/dist/components/data/word-cloud/word-cloud.styles.d.ts.map +1 -1
- package/dist/components/data/word-cloud/word-cloud.styles.js +18 -15
- package/dist/components/data/word-cloud/word-cloud.styles.js.map +1 -1
- package/dist/components/forms/button/button.class.d.ts +51 -7
- package/dist/components/forms/button/button.class.d.ts.map +1 -1
- package/dist/components/forms/button/button.class.js +102 -15
- package/dist/components/forms/button/button.class.js.map +1 -1
- package/dist/components/forms/button/button.styles.d.ts.map +1 -1
- package/dist/components/forms/button/button.styles.js +12 -4
- package/dist/components/forms/button/button.styles.js.map +1 -1
- package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
- package/dist/components/forms/checkbox/checkbox.class.d.ts.map +1 -1
- package/dist/components/forms/checkbox/checkbox.class.js +19 -2
- package/dist/components/forms/checkbox/checkbox.class.js.map +1 -1
- package/dist/components/forms/combobox/combobox.class.d.ts +61 -10
- package/dist/components/forms/combobox/combobox.class.d.ts.map +1 -1
- package/dist/components/forms/combobox/combobox.class.js +62 -17
- package/dist/components/forms/combobox/combobox.class.js.map +1 -1
- package/dist/components/forms/combobox/combobox.styles.d.ts.map +1 -1
- package/dist/components/forms/combobox/combobox.styles.js +7 -3
- package/dist/components/forms/combobox/combobox.styles.js.map +1 -1
- package/dist/components/forms/date-picker/date-input.styles.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.styles.d.ts.map +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.styles.js +4 -5
- package/dist/components/forms/emoji-picker/emoji-picker.styles.js.map +1 -1
- package/dist/components/forms/icon-button/icon-button.class.d.ts +3 -0
- package/dist/components/forms/icon-button/icon-button.class.d.ts.map +1 -1
- package/dist/components/forms/icon-button/icon-button.class.js +3 -0
- package/dist/components/forms/icon-button/icon-button.class.js.map +1 -1
- package/dist/components/forms/icon-button/icon-button.styles.js +2 -2
- package/dist/components/forms/input/input.class.d.ts +25 -1
- package/dist/components/forms/input/input.class.d.ts.map +1 -1
- package/dist/components/forms/input/input.class.js +51 -4
- package/dist/components/forms/input/input.class.js.map +1 -1
- package/dist/components/forms/select/select.class.d.ts +23 -4
- package/dist/components/forms/select/select.class.d.ts.map +1 -1
- package/dist/components/forms/select/select.class.js +24 -8
- package/dist/components/forms/select/select.class.js.map +1 -1
- package/dist/components/forms/select/select.styles.d.ts.map +1 -1
- package/dist/components/forms/select/select.styles.js +8 -3
- package/dist/components/forms/select/select.styles.js.map +1 -1
- package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +16 -0
- package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts.map +1 -1
- package/dist/components/forms/swatch-picker/swatch-picker.class.js +22 -4
- package/dist/components/forms/swatch-picker/swatch-picker.class.js.map +1 -1
- package/dist/components/forms/swatch-picker/swatch-picker.styles.d.ts.map +1 -1
- package/dist/components/forms/swatch-picker/swatch-picker.styles.js +31 -4
- package/dist/components/forms/swatch-picker/swatch-picker.styles.js.map +1 -1
- package/dist/components/forms/textarea/textarea.class.d.ts +30 -0
- package/dist/components/forms/textarea/textarea.class.d.ts.map +1 -1
- package/dist/components/forms/textarea/textarea.class.js +54 -0
- package/dist/components/forms/textarea/textarea.class.js.map +1 -1
- package/dist/components/forms/token-input/token-input.styles.d.ts.map +1 -1
- package/dist/components/forms/token-input/token-input.styles.js +6 -1
- package/dist/components/forms/token-input/token-input.styles.js.map +1 -1
- package/dist/components/layout/app-rail/app-rail.class.d.ts +16 -4
- package/dist/components/layout/app-rail/app-rail.class.d.ts.map +1 -1
- package/dist/components/layout/app-rail/app-rail.class.js +36 -4
- package/dist/components/layout/app-rail/app-rail.class.js.map +1 -1
- package/dist/components/layout/app-rail/app-rail.styles.d.ts.map +1 -1
- package/dist/components/layout/app-rail/app-rail.styles.js +21 -2
- package/dist/components/layout/app-rail/app-rail.styles.js.map +1 -1
- package/dist/components/layout/card/card.class.d.ts +6 -0
- package/dist/components/layout/card/card.class.d.ts.map +1 -1
- package/dist/components/layout/card/card.class.js +9 -1
- package/dist/components/layout/card/card.class.js.map +1 -1
- package/dist/components/layout/dashboard-grid/dashboard-grid.styles.d.ts.map +1 -1
- package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +2 -0
- package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js.map +1 -1
- package/dist/components/layout/segmented/segmented.class.d.ts +10 -1
- package/dist/components/layout/segmented/segmented.class.d.ts.map +1 -1
- package/dist/components/layout/segmented/segmented.class.js +29 -2
- package/dist/components/layout/segmented/segmented.class.js.map +1 -1
- package/dist/components/layout/split/split.class.d.ts +14 -3
- package/dist/components/layout/split/split.class.d.ts.map +1 -1
- package/dist/components/layout/split/split.class.js +65 -35
- package/dist/components/layout/split/split.class.js.map +1 -1
- package/dist/components/layout/widget/widget.class.d.ts +10 -0
- package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
- package/dist/components/layout/widget/widget.class.js +29 -1
- package/dist/components/layout/widget/widget.class.js.map +1 -1
- package/dist/components/media/attachment-chip/attachment-chip.styles.d.ts.map +1 -1
- package/dist/components/media/attachment-chip/attachment-chip.styles.js +7 -8
- package/dist/components/media/attachment-chip/attachment-chip.styles.js.map +1 -1
- package/dist/components/media/file-input/file-input.class.d.ts +16 -1
- package/dist/components/media/file-input/file-input.class.d.ts.map +1 -1
- package/dist/components/media/file-input/file-input.class.js +42 -2
- package/dist/components/media/file-input/file-input.class.js.map +1 -1
- package/dist/components/media/file-input/file-input.styles.d.ts.map +1 -1
- package/dist/components/media/file-input/file-input.styles.js +12 -0
- package/dist/components/media/file-input/file-input.styles.js.map +1 -1
- package/dist/components/media/media-card/media-card.class.d.ts +6 -2
- package/dist/components/media/media-card/media-card.class.d.ts.map +1 -1
- package/dist/components/media/media-card/media-card.class.js +7 -3
- package/dist/components/media/media-card/media-card.class.js.map +1 -1
- package/dist/components/media/qr-code/qr-code.class.d.ts +1 -6
- package/dist/components/media/qr-code/qr-code.class.d.ts.map +1 -1
- package/dist/components/media/qr-code/qr-code.class.js +31 -67
- package/dist/components/media/qr-code/qr-code.class.js.map +1 -1
- package/dist/components/overlays/empty/empty.class.d.ts +3 -0
- package/dist/components/overlays/empty/empty.class.d.ts.map +1 -1
- package/dist/components/overlays/empty/empty.class.js +3 -0
- package/dist/components/overlays/empty/empty.class.js.map +1 -1
- package/dist/components/overlays/empty/empty.styles.d.ts.map +1 -1
- package/dist/components/overlays/empty/empty.styles.js +6 -0
- package/dist/components/overlays/empty/empty.styles.js.map +1 -1
- package/dist/components/overlays/overlay/popover.class.d.ts +9 -0
- package/dist/components/overlays/overlay/popover.class.d.ts.map +1 -1
- package/dist/components/overlays/overlay/popover.class.js +13 -0
- package/dist/components/overlays/overlay/popover.class.js.map +1 -1
- package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts +1 -0
- package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts.map +1 -1
- package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js +11 -5
- package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js.map +1 -1
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +54 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts.map +1 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +147 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js.map +1 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.d.ts +2 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.d.ts.map +1 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.js +5 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.js.map +1 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.d.ts +2 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.d.ts.map +1 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +51 -0
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js.map +1 -0
- package/dist/components/retrieval/graph/graph.class.d.ts +1 -0
- package/dist/components/retrieval/graph/graph.class.d.ts.map +1 -1
- package/dist/components/retrieval/graph/graph.class.js +21 -6
- package/dist/components/retrieval/graph/graph.class.js.map +1 -1
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +73 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts.map +1 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +109 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js.map +1 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts +2 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts.map +1 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js +5 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js.map +1 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts +2 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts.map +1 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +56 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js.map +1 -0
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +1 -0
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts.map +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +12 -4
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js.map +1 -1
- package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts +58 -0
- package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts.map +1 -0
- package/dist/components/retrieval/rag-answer/rag-answer.class.js +110 -0
- package/dist/components/retrieval/rag-answer/rag-answer.class.js.map +1 -0
- package/dist/components/retrieval/rag-answer/rag-answer.d.ts +2 -0
- package/dist/components/retrieval/rag-answer/rag-answer.d.ts.map +1 -0
- package/dist/components/retrieval/rag-answer/rag-answer.js +5 -0
- package/dist/components/retrieval/rag-answer/rag-answer.js.map +1 -0
- package/dist/components/retrieval/rag-answer/rag-answer.styles.d.ts +2 -0
- package/dist/components/retrieval/rag-answer/rag-answer.styles.d.ts.map +1 -0
- package/dist/components/retrieval/rag-answer/rag-answer.styles.js +13 -0
- package/dist/components/retrieval/rag-answer/rag-answer.styles.js.map +1 -0
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts.map +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +6 -3
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.js.map +1 -1
- package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -2
- package/dist/components/utility/diff-view/diff-view.class.d.ts.map +1 -1
- package/dist/components/utility/diff-view/diff-view.class.js +16 -6
- package/dist/components/utility/diff-view/diff-view.class.js.map +1 -1
- package/dist/components/utility/icon/icon.class.d.ts.map +1 -1
- package/dist/components/utility/icon/icon.class.js +5 -0
- package/dist/components/utility/icon/icon.class.js.map +1 -1
- package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +16 -2
- package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts.map +1 -1
- package/dist/components/viewers/archive-viewer/archive-viewer.class.js +14 -4
- package/dist/components/viewers/archive-viewer/archive-viewer.class.js.map +1 -1
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +14 -2
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts.map +1 -1
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +10 -2
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js.map +1 -1
- package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts +14 -2
- package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts.map +1 -1
- package/dist/components/viewers/contact-viewer/contact-viewer.class.js +10 -2
- package/dist/components/viewers/contact-viewer/contact-viewer.class.js.map +1 -1
- package/dist/components/viewers/document-preview/document-preview.class.js +2 -2
- package/dist/components/viewers/document-preview/document-preview.class.js.map +1 -1
- package/dist/components/viewers/document-viewer/document-viewer.class.js +2 -2
- package/dist/components/viewers/document-viewer/document-viewer.class.js.map +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +14 -2
- package/dist/components/viewers/email-viewer/email-viewer.class.d.ts.map +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.js +10 -2
- package/dist/components/viewers/email-viewer/email-viewer.class.js.map +1 -1
- package/dist/components/viewers/geojson-view/geojson-view.class.d.ts +15 -2
- package/dist/components/viewers/geojson-view/geojson-view.class.d.ts.map +1 -1
- package/dist/components/viewers/geojson-view/geojson-view.class.js +13 -2
- package/dist/components/viewers/geojson-view/geojson-view.class.js.map +1 -1
- package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +14 -2
- package/dist/components/viewers/html-viewer/html-viewer.class.d.ts.map +1 -1
- package/dist/components/viewers/html-viewer/html-viewer.class.js +11 -3
- package/dist/components/viewers/html-viewer/html-viewer.class.js.map +1 -1
- package/dist/components/viewers/include/include.class.d.ts +15 -2
- package/dist/components/viewers/include/include.class.d.ts.map +1 -1
- package/dist/components/viewers/include/include.class.js +13 -2
- package/dist/components/viewers/include/include.class.js.map +1 -1
- package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +15 -2
- package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts.map +1 -1
- package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +14 -3
- package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js.map +1 -1
- package/dist/internal/form-associated.d.ts.map +1 -1
- package/dist/internal/form-associated.js +57 -1
- package/dist/internal/form-associated.js.map +1 -1
- package/dist/internal/length-constraints.d.ts +27 -0
- package/dist/internal/length-constraints.d.ts.map +1 -0
- package/dist/internal/length-constraints.js +42 -0
- package/dist/internal/length-constraints.js.map +1 -0
- package/dist/internal/localization.d.ts +1 -1
- package/dist/internal/localization.d.ts.map +1 -1
- package/dist/internal/localization.js +27 -0
- package/dist/internal/localization.js.map +1 -1
- package/dist/internal/persisted-state.d.ts +27 -0
- package/dist/internal/persisted-state.d.ts.map +1 -0
- package/dist/internal/persisted-state.js +57 -0
- package/dist/internal/persisted-state.js.map +1 -0
- package/dist/internal/root-registration-allowlist.d.ts +1 -1
- package/dist/internal/root-registration-allowlist.d.ts.map +1 -1
- package/dist/internal/root-registration-allowlist.js +5 -0
- package/dist/internal/root-registration-allowlist.js.map +1 -1
- package/dist/internal/safe-url.d.ts +13 -2
- package/dist/internal/safe-url.d.ts.map +1 -1
- package/dist/internal/safe-url.js +27 -4
- package/dist/internal/safe-url.js.map +1 -1
- package/dist/internal/text-quote.d.ts +4 -0
- package/dist/internal/text-quote.d.ts.map +1 -1
- package/dist/internal/text-quote.js +21 -0
- package/dist/internal/text-quote.js.map +1 -1
- package/dist/internal/text-viewer-target.d.ts +27 -0
- package/dist/internal/text-viewer-target.d.ts.map +1 -0
- package/dist/internal/text-viewer-target.js +179 -0
- package/dist/internal/text-viewer-target.js.map +1 -0
- package/dist/internal/theme-watcher.d.ts +32 -0
- package/dist/internal/theme-watcher.d.ts.map +1 -0
- package/dist/internal/theme-watcher.js +67 -0
- package/dist/internal/theme-watcher.js.map +1 -0
- package/dist/lyra.d.ts +17 -5
- package/dist/lyra.d.ts.map +1 -1
- package/dist/lyra.js +11 -0
- package/dist/lyra.js.map +1 -1
- package/dist/theme/gemstones.d.ts +22 -0
- package/dist/theme/gemstones.d.ts.map +1 -0
- package/dist/theme/gemstones.js +44 -0
- package/dist/theme/gemstones.js.map +1 -0
- package/dist/theme/theme.d.ts +60 -0
- package/dist/theme/theme.d.ts.map +1 -0
- package/dist/theme/theme.js +132 -0
- package/dist/theme/theme.js.map +1 -0
- package/llms/components/lr-accordion-item.md +1 -0
- package/llms/components/lr-accordion.md +1 -0
- package/llms/components/lr-activity-feed.md +1 -0
- package/llms/components/lr-agent-eval-dashboard.md +29 -0
- package/llms/components/lr-agent-run.md +1 -0
- package/llms/components/lr-agent-trace.md +1 -0
- package/llms/components/lr-agent-workspace.md +1 -0
- package/llms/components/lr-animated-image.md +1 -0
- package/llms/components/lr-animation.md +1 -0
- package/llms/components/lr-app-rail-item.md +8 -2
- package/llms/components/lr-app-rail.md +8 -2
- package/llms/components/lr-approval-queue.md +27 -0
- package/llms/components/lr-archive-viewer.md +9 -3
- package/llms/components/lr-artifact-panel.md +1 -0
- package/llms/components/lr-attachment-chip.md +1 -0
- package/llms/components/lr-attachment-trigger.md +1 -0
- package/llms/components/lr-audio-visualizer.md +1 -0
- package/llms/components/lr-av-player.md +1 -0
- package/llms/components/lr-avatar-group.md +1 -0
- package/llms/components/lr-avatar.md +1 -0
- package/llms/components/lr-badge.md +1 -0
- package/llms/components/lr-bar-chart.md +5 -3
- package/llms/components/lr-box-plot.md +5 -3
- package/llms/components/lr-branch-picker.md +1 -0
- package/llms/components/lr-breadcrumb-item.md +1 -0
- package/llms/components/lr-breadcrumb.md +1 -0
- package/llms/components/lr-browser-frame.md +1 -0
- package/llms/components/lr-bubble-chart.md +5 -3
- package/llms/components/lr-button-group.md +1 -0
- package/llms/components/lr-button.md +29 -3
- package/llms/components/lr-calendar-viewer.md +7 -1
- package/llms/components/lr-calendar.md +1 -0
- package/llms/components/lr-callout.md +1 -0
- package/llms/components/lr-card.md +6 -0
- package/llms/components/lr-carousel-item.md +1 -0
- package/llms/components/lr-carousel.md +1 -0
- package/llms/components/lr-chart.md +50 -14
- package/llms/components/lr-chat-composer.md +1 -0
- package/llms/components/lr-chat-message.md +6 -0
- package/llms/components/lr-chat-viewport.md +1 -0
- package/llms/components/lr-checkbox-group.md +1 -0
- package/llms/components/lr-checkbox.md +5 -0
- package/llms/components/lr-checkpoint.md +1 -0
- package/llms/components/lr-chip-group.md +1 -0
- package/llms/components/lr-chip.md +1 -0
- package/llms/components/lr-chunk-inspector.md +1 -0
- package/llms/components/lr-citation-badge.md +6 -0
- package/llms/components/lr-code-block-core.md +1 -0
- package/llms/components/lr-code-block.md +1 -0
- package/llms/components/lr-code-editor.md +1 -0
- package/llms/components/lr-color-picker.md +1 -0
- package/llms/components/lr-combobox.md +61 -14
- package/llms/components/lr-command-palette.md +1 -0
- package/llms/components/lr-commit-card.md +1 -0
- package/llms/components/lr-community-card.md +1 -0
- package/llms/components/lr-compare-panel.md +1 -0
- package/llms/components/lr-confirm-bar.md +1 -0
- package/llms/components/lr-contact-viewer.md +7 -1
- package/llms/components/lr-context-inspector.md +1 -0
- package/llms/components/lr-context-meter.md +1 -0
- package/llms/components/lr-control-group.md +1 -0
- package/llms/components/lr-conversation-item.md +10 -2
- package/llms/components/lr-copy-button.md +1 -0
- package/llms/components/lr-csv-viewer.md +1 -0
- package/llms/components/lr-dashboard-grid.md +1 -0
- package/llms/components/lr-dataset-viewer.md +1 -0
- package/llms/components/lr-date-input.md +1 -0
- package/llms/components/lr-date-picker.md +1 -0
- package/llms/components/lr-details.md +1 -0
- package/llms/components/lr-dialog.md +1 -0
- package/llms/components/lr-diff-view.md +1 -0
- package/llms/components/lr-divider.md +1 -0
- package/llms/components/lr-dock-panel.md +1 -0
- package/llms/components/lr-document-compare.md +1 -0
- package/llms/components/lr-document-library.md +1 -0
- package/llms/components/lr-document-preview.md +5 -3
- package/llms/components/lr-document-viewer.md +1 -0
- package/llms/components/lr-docx-viewer.md +1 -0
- package/llms/components/lr-doughnut-chart.md +5 -3
- package/llms/components/lr-drawer.md +1 -0
- package/llms/components/lr-drilldown-panel.md +1 -0
- package/llms/components/lr-dropdown-item.md +1 -0
- package/llms/components/lr-dropdown.md +1 -0
- package/llms/components/lr-ebook-viewer.md +1 -0
- package/llms/components/lr-email-viewer.md +7 -1
- package/llms/components/lr-embedding-explorer.md +26 -0
- package/llms/components/lr-emoji-picker.md +1 -0
- package/llms/components/lr-empty.md +4 -1
- package/llms/components/lr-entity-card.md +1 -0
- package/llms/components/lr-entity-chip.md +1 -0
- package/llms/components/lr-entity-dossier.md +1 -0
- package/llms/components/lr-env-list.md +1 -0
- package/llms/components/lr-eval-dataset.md +1 -0
- package/llms/components/lr-eval-result.md +1 -0
- package/llms/components/lr-evaluation-run.md +1 -0
- package/llms/components/lr-export-button.md +1 -0
- package/llms/components/lr-file-icon.md +1 -0
- package/llms/components/lr-file-input.md +14 -1
- package/llms/components/lr-file-tree.md +1 -0
- package/llms/components/lr-filter-bar.md +1 -0
- package/llms/components/lr-flag.md +1 -0
- package/llms/components/lr-flow-canvas.md +1 -0
- package/llms/components/lr-flow-controls.md +1 -0
- package/llms/components/lr-flow-minimap.md +1 -0
- package/llms/components/lr-flow-node.md +1 -0
- package/llms/components/lr-flow-run-overlay.md +1 -0
- package/llms/components/lr-format-bytes.md +1 -0
- package/llms/components/lr-format-date.md +1 -0
- package/llms/components/lr-format-number.md +1 -0
- package/llms/components/lr-gauge.md +1 -0
- package/llms/components/lr-generation-status.md +1 -0
- package/llms/components/lr-geojson-view.md +5 -1
- package/llms/components/lr-graph-legend.md +1 -0
- package/llms/components/lr-graph-query-builder.md +1 -0
- package/llms/components/lr-graph.md +1 -0
- package/llms/components/lr-grounding-summary.md +1 -0
- package/llms/components/lr-handoff-divider.md +1 -0
- package/llms/components/lr-heatmap.md +1 -0
- package/llms/components/lr-highlight-layer.md +1 -0
- package/llms/components/lr-histogram.md +5 -3
- package/llms/components/lr-html-viewer.md +7 -1
- package/llms/components/lr-icon-button.md +10 -4
- package/llms/components/lr-icon.md +1 -0
- package/llms/components/lr-image-comparer.md +1 -0
- package/llms/components/lr-image-viewer.md +1 -0
- package/llms/components/lr-include.md +6 -0
- package/llms/components/lr-ingestion-queue.md +1 -0
- package/llms/components/lr-input.md +21 -1
- package/llms/components/lr-intersection-observer.md +1 -0
- package/llms/components/lr-json-viewer.md +1 -0
- package/llms/components/lr-kbd.md +1 -0
- package/llms/components/lr-knowledge-base-admin.md +30 -0
- package/llms/components/lr-knowledge-base.md +1 -0
- package/llms/components/lr-knowledge-graph-explorer.md +1 -0
- package/llms/components/lr-known-date.md +1 -0
- package/llms/components/lr-lightbox.md +1 -0
- package/llms/components/lr-line-chart.md +5 -3
- package/llms/components/lr-lite-chart.md +20 -2
- package/llms/components/lr-live-region.md +1 -0
- package/llms/components/lr-locale-picker.md +1 -0
- package/llms/components/lr-map.md +1 -0
- package/llms/components/lr-markdown-core.md +1 -0
- package/llms/components/lr-markdown.md +1 -0
- package/llms/components/lr-media-card.md +1 -0
- package/llms/components/lr-memory-panel.md +1 -0
- package/llms/components/lr-mention-popover.md +1 -0
- package/llms/components/lr-menu-item.md +1 -0
- package/llms/components/lr-menu.md +1 -0
- package/llms/components/lr-message-actions.md +1 -0
- package/llms/components/lr-message-feedback.md +1 -0
- package/llms/components/lr-mind-map.md +1 -0
- package/llms/components/lr-model-select.md +8 -1
- package/llms/components/lr-model-settings-panel.md +1 -0
- package/llms/components/lr-mutation-observer.md +1 -0
- package/llms/components/lr-neighbor-list.md +1 -0
- package/llms/components/lr-node-palette.md +1 -0
- package/llms/components/lr-notebook-viewer.md +1 -0
- package/llms/components/lr-number-input.md +5 -3
- package/llms/components/lr-option.md +61 -14
- package/llms/components/lr-page-rail.md +1 -0
- package/llms/components/lr-pagination.md +1 -0
- package/llms/components/lr-path-strip.md +1 -0
- package/llms/components/lr-pdf-viewer.md +1 -0
- package/llms/components/lr-phone-input.md +1 -0
- package/llms/components/lr-pie-chart.md +5 -3
- package/llms/components/lr-playback.md +1 -0
- package/llms/components/lr-polar-area-chart.md +5 -3
- package/llms/components/lr-policy-summary.md +1 -0
- package/llms/components/lr-poll-status.md +1 -0
- package/llms/components/lr-popover.md +4 -0
- package/llms/components/lr-pptx-viewer.md +7 -2
- package/llms/components/lr-progress-bar.md +1 -0
- package/llms/components/lr-progress-ring.md +1 -0
- package/llms/components/lr-provenance-panel.md +1 -0
- package/llms/components/lr-push-to-talk.md +1 -0
- package/llms/components/lr-qr-code.md +1 -0
- package/llms/components/lr-query-builder.md +1 -0
- package/llms/components/lr-radar-chart.md +5 -3
- package/llms/components/lr-radio-group.md +1 -0
- package/llms/components/lr-radio.md +1 -0
- package/llms/components/lr-rag-answer.md +31 -0
- package/llms/components/lr-random-content.md +1 -0
- package/llms/components/lr-rating.md +1 -0
- package/llms/components/lr-relative-time.md +1 -0
- package/llms/components/lr-reorder-item.md +1 -0
- package/llms/components/lr-reorder-list.md +1 -0
- package/llms/components/lr-resize-observer.md +1 -0
- package/llms/components/lr-responsive-panel.md +1 -0
- package/llms/components/lr-result-card.md +1 -0
- package/llms/components/lr-result-field.md +1 -0
- package/llms/components/lr-retrieval-results.md +1 -0
- package/llms/components/lr-retrieval-search.md +1 -0
- package/llms/components/lr-retrieval-trace.md +1 -0
- package/llms/components/lr-rubric-form.md +1 -0
- package/llms/components/lr-scatter-chart.md +5 -3
- package/llms/components/lr-scroller.md +1 -0
- package/llms/components/lr-segmented.md +8 -0
- package/llms/components/lr-select.md +16 -3
- package/llms/components/lr-sequence-strip.md +1 -0
- package/llms/components/lr-skeleton.md +1 -0
- package/llms/components/lr-slider.md +1 -0
- package/llms/components/lr-source-card.md +1 -0
- package/llms/components/lr-source-list.md +1 -0
- package/llms/components/lr-source-picker.md +1 -0
- package/llms/components/lr-span-waterfall.md +1 -0
- package/llms/components/lr-sparkline.md +1 -0
- package/llms/components/lr-spinner.md +1 -0
- package/llms/components/lr-split.md +11 -3
- package/llms/components/lr-spreadsheet-viewer.md +1 -0
- package/llms/components/lr-stack-trace.md +1 -0
- package/llms/components/lr-stat.md +1 -0
- package/llms/components/lr-stepper.md +1 -0
- package/llms/components/lr-stream-status.md +1 -0
- package/llms/components/lr-streaming-text.md +1 -0
- package/llms/components/lr-suggestion-chips.md +1 -0
- package/llms/components/lr-svg-viewer.md +1 -0
- package/llms/components/lr-swatch-picker.md +29 -6
- package/llms/components/lr-switch.md +1 -0
- package/llms/components/lr-table.md +19 -5
- package/llms/components/lr-tabs.md +1 -0
- package/llms/components/lr-tag.md +1 -0
- package/llms/components/lr-task-list.md +1 -0
- package/llms/components/lr-terminal.md +1 -0
- package/llms/components/lr-test-results.md +1 -0
- package/llms/components/lr-textarea.md +20 -0
- package/llms/components/lr-thinking-panel.md +1 -0
- package/llms/components/lr-thread-list.md +2 -1
- package/llms/components/lr-time-input.md +4 -2
- package/llms/components/lr-time-range.md +1 -0
- package/llms/components/lr-timeline-item.md +1 -0
- package/llms/components/lr-timeline.md +1 -0
- package/llms/components/lr-toast-item.md +3 -2
- package/llms/components/lr-toast.md +3 -2
- package/llms/components/lr-token-input.md +1 -0
- package/llms/components/lr-tool-approval-dialog.md +1 -0
- package/llms/components/lr-tool-call-chip.md +6 -0
- package/llms/components/lr-tool-param-form.md +1 -0
- package/llms/components/lr-tool-result-dialog.md +1 -0
- package/llms/components/lr-tool-result-view.md +53 -4
- package/llms/components/lr-tool-select-dialog.md +1 -0
- package/llms/components/lr-tool-timeline.md +1 -0
- package/llms/components/lr-tooltip.md +1 -0
- package/llms/components/lr-tour.md +1 -0
- package/llms/components/lr-trace-tree.md +1 -0
- package/llms/components/lr-transcript-feed.md +1 -0
- package/llms/components/lr-tree-node.md +1 -0
- package/llms/components/lr-tree.md +1 -0
- package/llms/components/lr-typing-indicator.md +13 -8
- package/llms/components/lr-usage-badge.md +1 -0
- package/llms/components/lr-virtual-list.md +1 -0
- package/llms/components/lr-voice-picker.md +1 -0
- package/llms/components/lr-widget-renderer.md +1 -0
- package/llms/components/lr-widget.md +13 -0
- package/llms/components/lr-word-cloud.md +9 -2
- package/llms/components/lr-xml-viewer.md +1 -0
- package/llms/components/lr-zoomable-frame.md +1 -0
- package/llms/index.md +8 -3
- package/llms/peers.md +2 -1
- package/llms/shared.md +88 -0
- package/llms-full.txt +684 -105
- package/llms.txt +2 -2
- package/package.json +20 -2
- package/vscode-css-data.json +176 -1
- package/vscode-html-data.json +551 -23
- package/web-types.json +676 -25
package/llms-full.txt
CHANGED
|
@@ -40,8 +40,8 @@ family and entry point.
|
|
|
40
40
|
- **Charts** — 12 tags in `components/charts/`
|
|
41
41
|
- **Document & file viewers** — 22 tags in `components/viewers/`
|
|
42
42
|
- **Conversation & chat UI** — 28 tags in `components/conversation/`
|
|
43
|
-
- **Agent tooling, tool calls & evaluation** —
|
|
44
|
-
- **Retrieval, knowledge graph & grounding** —
|
|
43
|
+
- **Agent tooling, tool calls & evaluation** — 31 tags in `components/agent-tools/`
|
|
44
|
+
- **Retrieval, knowledge graph & grounding** — 27 tags in `components/retrieval/`
|
|
45
45
|
- **Reference tables** — design tokens (`llms/tokens.md`), optional peers (`llms/peers.md`), `wa-*`/`sl-*` migration (`llms/migration.md`)
|
|
46
46
|
|
|
47
47
|
---
|
|
@@ -240,6 +240,94 @@ dark palette — that fallback applies only where no real `--lr-theme-*` value i
|
|
|
240
240
|
The token layer also sets `:host([hidden]) { display: none !important; }` and an inherited
|
|
241
241
|
`box-sizing: border-box` reset.
|
|
242
242
|
|
|
243
|
+
### Theme mode/accent runtime (`@aceshooting/lyra-ui/theme.js`)
|
|
244
|
+
|
|
245
|
+
Flipping the mode class/attribute above is something every app ends up hand-rolling — persist a
|
|
246
|
+
choice, apply it on load, avoid the flash of wrong theme before the app boots. `theme.js` is that
|
|
247
|
+
runtime, published as its own subpath: **zero dependencies, no Lit, no component imports, and no
|
|
248
|
+
side effects on import**, so an app can persist and apply a theme without pulling the component
|
|
249
|
+
graph into its first-paint bundle.
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
import { setLyraTheme, getLyraTheme } from '@aceshooting/lyra-ui/theme.js';
|
|
253
|
+
|
|
254
|
+
setLyraTheme({ mode: 'dark' }); // unspecified fields keep their current value
|
|
255
|
+
setLyraTheme({ accent: '#7c3aed' }); // mode stays 'dark'
|
|
256
|
+
getLyraTheme(); // → { mode: 'dark', accent: '#7c3aed' }
|
|
257
|
+
setLyraTheme({ mode: 'auto', accent: null }); // clears the override and the accent
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
- **`setLyraTheme({ mode?, accent? })`** persists to `localStorage['lyra-theme']`, applies to
|
|
261
|
+
`document.documentElement`, and dispatches `lr-theme-change` on `window` with
|
|
262
|
+
`detail: { mode, accent }`. Fields you omit keep their current value; pass `null` to clear the
|
|
263
|
+
accent. It **never throws** — when `localStorage` is unavailable (private browsing, quota, a
|
|
264
|
+
sandboxed iframe) it degrades to apply-without-persist, and the "fields you omit keep their
|
|
265
|
+
current value" rule still holds across calls in that state: the merge falls back to the last
|
|
266
|
+
theme applied in this session rather than to the default.
|
|
267
|
+
- **`getLyraTheme()`** returns `{ mode, accent }`, defaulting to `{ mode: 'auto', accent: null }`
|
|
268
|
+
when nothing is stored or the stored value is malformed. Storage is re-read on every call — no
|
|
269
|
+
in-memory cache — so a value written by another tab or a previous session is picked up cold.
|
|
270
|
+
Where storage is unreadable or unwritable it reports the theme last applied, so the return value
|
|
271
|
+
always describes what the document is actually showing and a toggle UI bound to it stays in sync.
|
|
272
|
+
- **`mode`** is `'light' | 'dark' | 'auto'`. `'light'`/`'dark'` set **both `data-lr-theme`** (the
|
|
273
|
+
attribute `theme.css` actually keys its palette blocks on) **and `data-theme`** (the generic
|
|
274
|
+
attribute canvas-rendered components watch, so `lr-chart`/`lr-heatmap`/`lr-qr-code` repaint on
|
|
275
|
+
the switch rather than keeping stale colors — see `llms/components/lr-chart.md`). `'auto'`
|
|
276
|
+
removes both, which means **no override — not "follow the OS"**:
|
|
277
|
+
- **With `theme.css` imported** (the setup this section is nested under), its `:root` block sets
|
|
278
|
+
the full light palette unconditionally and that file ships no `prefers-color-scheme` block, so
|
|
279
|
+
`'auto'` renders **light** whatever the OS is set to.
|
|
280
|
+
- **Without `theme.css`**, no real `--lr-theme-*` value is set, so the token layer's
|
|
281
|
+
`prefers-color-scheme: dark` fallback described above does apply and bare components follow
|
|
282
|
+
the OS.
|
|
283
|
+
|
|
284
|
+
To follow the OS *alongside* `theme.css`, resolve the preference yourself and pass a concrete
|
|
285
|
+
mode — `setLyraTheme` deliberately does no `matchMedia` work of its own:
|
|
286
|
+
```ts
|
|
287
|
+
const os = matchMedia('(prefers-color-scheme: dark)');
|
|
288
|
+
const sync = () => setLyraTheme({ mode: os.matches ? 'dark' : 'light' });
|
|
289
|
+
sync();
|
|
290
|
+
os.addEventListener('change', sync);
|
|
291
|
+
```
|
|
292
|
+
- **`accent`** is written to `--lr-theme-accent` as an inline custom property on the root element.
|
|
293
|
+
This is a **hook for your CSS, not a token the library reads** — no lyra-ui component consumes
|
|
294
|
+
`--lr-theme-accent`. Point the real inputs at it to make it retint anything, **writing one rule
|
|
295
|
+
per mode**:
|
|
296
|
+
```css
|
|
297
|
+
:root { --lr-theme-color-brand-fill-loud: var(--lr-theme-accent, #0969da); }
|
|
298
|
+
.lr-dark,
|
|
299
|
+
[data-lr-theme='dark'] { --lr-theme-color-brand-fill-loud: var(--lr-theme-accent, #4ea0f0); }
|
|
300
|
+
```
|
|
301
|
+
**Each arm's fallback must carry that mode's own value.** A single `:root` rule flattens both
|
|
302
|
+
modes to one color whenever the accent is unset (`accent: null`, the default): `:root` and
|
|
303
|
+
`[data-lr-theme='dark']` have equal specificity and both match `<html>` — the element
|
|
304
|
+
`setLyraTheme` writes `data-lr-theme` onto — so a consumer stylesheet loaded after `theme.css`
|
|
305
|
+
wins the tie on source order and pins the light-mode blue in dark mode. Copy each fallback from
|
|
306
|
+
the matching palette block in `theme.css` (`#0969da` light / `#4ea0f0` dark here).
|
|
307
|
+
|
|
308
|
+
Because that is a `--lr-theme-*` input, it reaches every nested shadow root — see "Where an
|
|
309
|
+
override actually reaches" above for why setting a `--lr-*` token instead would not.
|
|
310
|
+
|
|
311
|
+
**No-flash bootstrap.** `lyraThemeBootstrap` is a self-contained IIFE **string** (not a function),
|
|
312
|
+
meant to be inlined into a `<script>` in `<head>` **before any stylesheet**, so the persisted theme
|
|
313
|
+
is on the root element before first paint. It is a string precisely so this can happen in an
|
|
314
|
+
unbundled `<script>` context without shipping or parsing the module:
|
|
315
|
+
|
|
316
|
+
```html
|
|
317
|
+
<head>
|
|
318
|
+
<script>/* server-inlines lyraThemeBootstrap here */</script>
|
|
319
|
+
<link rel="stylesheet" href="/theme.css" />
|
|
320
|
+
</head>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
It reads the same storage key, applies the same two attributes and `--lr-theme-accent`, and
|
|
324
|
+
swallows any error — malformed storage or a blocked `localStorage` leaves the document untouched
|
|
325
|
+
rather than throwing before your app loads.
|
|
326
|
+
|
|
327
|
+
**This runtime does no color math.** It stores and applies whatever accent string you give it; it
|
|
328
|
+
does not validate the value, compute a palette from it, or check contrast against any surface.
|
|
329
|
+
Verifying that an accent meets WCAG contrast against the light *and* dark palettes is yours.
|
|
330
|
+
|
|
243
331
|
## Localization: `locale`, `strings`, and the locale runtime
|
|
244
332
|
|
|
245
333
|
Every built-in string — button labels, accessible names, descriptions, validation messages, status
|
|
@@ -545,14 +633,21 @@ shared `FormAssociated` mixin — see gotchas).
|
|
|
545
633
|
shown when `maxRender` caps the row list; `{n}` is replaced with the hidden count)
|
|
546
634
|
- `filter: OptionFilter | null = null` (attribute: false — `(option, query) => boolean`; default
|
|
547
635
|
matches `label`/`searchText` case-insensitively; ignored while `source` is set)
|
|
548
|
-
- `source: ComboboxSource | null = null` (attribute: false — `(query: string
|
|
549
|
-
Promise<ComboboxSourceRow[]>`; when set, replaces the light-DOM `<lr-option>`
|
|
550
|
-
lookup, debounced
|
|
551
|
-
|
|
552
|
-
|
|
636
|
+
- `source: ComboboxSource | null = null` (attribute: false — `(query: string, options: { signal:
|
|
637
|
+
AbortSignal }) => Promise<ComboboxSourceRow[]>`; when set, replaces the light-DOM `<lr-option>`
|
|
638
|
+
list with an async lookup, debounced by `sourceDelay` ms after each keystroke and re-run on
|
|
639
|
+
clear/pick. Forward `options.signal` to `fetch(url, { signal })` to cancel the request when a
|
|
640
|
+
newer query supersedes it or the element disconnects. `loadingText` is shown while a call is in
|
|
641
|
+
flight; a stale in-flight call that resolves after a newer one (or after disconnect) is dropped
|
|
642
|
+
via a monotonic token. The `options` parameter is optional in the type, so a legacy
|
|
643
|
+
`(query) => …` source stays assignable.)
|
|
644
|
+
- `sourceDelay: number = 200` (attribute `source-delay` — debounce in ms between the last keystroke
|
|
645
|
+
and the `source` call; `0` fires on every keystroke. Sanitized to a finite non-negative duration,
|
|
646
|
+
falling back to `200` for a non-finite value)
|
|
553
647
|
- `maxRender: number = 200` (attribute `max-render` — caps how many rows render at once, always
|
|
554
648
|
keeping the current selection visible even if it's outside the cap; the excess renders as one
|
|
555
|
-
`overflowText` row instead of being dropped silently
|
|
649
|
+
`overflowText` row instead of being dropped silently. See "Large option lists" below for how to
|
|
650
|
+
size it, and when `source` is the better answer)
|
|
556
651
|
- `value: string | string[]` — a getter/setter: plain `string` in single mode, `string[]` in
|
|
557
652
|
`multiple` mode
|
|
558
653
|
- `selectedRows: ComboboxSourceRow[]` (read-only getter) — structured rows for the current
|
|
@@ -573,11 +668,16 @@ The light-DOM `<lr-option>` path normalizes its supported label/sub/dot/group fi
|
|
|
573
668
|
internal row model.
|
|
574
669
|
|
|
575
670
|
**Events:** typing in the filter exposes the original bubbling/composed, non-cancelable `InputEvent`
|
|
576
|
-
as exactly one host `input` event and does not fire `change`. An actual user
|
|
577
|
-
pointer or keyboard selection, multiple-value toggle, tag/Backspace removal, or
|
|
578
|
-
one bubbling/composed, non-cancelable
|
|
579
|
-
of `change
|
|
580
|
-
|
|
671
|
+
as exactly one host `input` event (no `value` detail) and does not fire `change`. An actual user
|
|
672
|
+
selection mutation — pointer or keyboard selection, multiple-value toggle, tag/Backspace removal, or
|
|
673
|
+
clear — emits exactly one bubbling/composed, non-cancelable `input` `CustomEvent`, immediately
|
|
674
|
+
followed by the same shape of `change`, then a prefixed `lr-change` alias. All three carry
|
|
675
|
+
`detail: { value }` — the new committed selection (a string in single mode, a `string[]` in
|
|
676
|
+
`multiple` mode). `lr-change` mirrors `<lr-checkbox>`'s namespaced alias; subscribe to it when you
|
|
677
|
+
want a `lr-`-prefixed event, or to the native-style `input`/`change` for parity with a native
|
|
678
|
+
control. Re-picking the current single value and programmatic/default/reset/restore writes are
|
|
679
|
+
silent (including on `lr-change`). The clear button emits one `lr-clear` after its
|
|
680
|
+
`input`/`change`/`lr-change` triple.
|
|
581
681
|
`lr-filter` (`detail: { value: string }`) reports the in-progress filter text on every user-driven
|
|
582
682
|
keystroke — the live as-you-typed search string, deliberately *not* `value`, which is the committed
|
|
583
683
|
selection. It is the supported way to read that text; reaching into the shadow root for
|
|
@@ -594,8 +694,8 @@ The internal input's `focus` and `blur` are re-dispatched as bubbling, composed
|
|
|
594
694
|
committed selection and an in-progress filter query, so the button renders whenever either has
|
|
595
695
|
something to clear, and one press clears both:
|
|
596
696
|
|
|
597
|
-
- Clearing a selection emits `input`, then `change`, then `lr-clear` — and, if the
|
|
598
|
-
non-empty, `lr-filter` with an empty `value`.
|
|
697
|
+
- Clearing a selection emits `input`, then `change`, then `lr-change`, then `lr-clear` — and, if the
|
|
698
|
+
query was also non-empty, `lr-filter` with an empty `value`.
|
|
599
699
|
- A **query-only** clear (nothing selected, just typed text) emits `lr-filter` with an empty
|
|
600
700
|
`value` and deliberately **no** `change` and **no** `lr-clear`. There was no selection
|
|
601
701
|
transition to report, so announcing one would be a lie. Don't listen for `lr-clear` to detect
|
|
@@ -605,6 +705,32 @@ something to clear, and one press clears both:
|
|
|
605
705
|
selected label rather than the query, so a stale query alone never surfaces a button offering to
|
|
606
706
|
clear text the user cannot see.
|
|
607
707
|
|
|
708
|
+
**Large option lists: sizing `maxRender`, and why the listbox is not windowed.** Every row that
|
|
709
|
+
survives the filter and fits under `maxRender` is a real DOM element — the listbox renders its rows
|
|
710
|
+
in full rather than recycling a small window of them across a scroll. That is a deliberate
|
|
711
|
+
accessibility constraint, not an omission: the filter input carries `aria-activedescendant`, which
|
|
712
|
+
is an **IDREF**, and an IDREF only resolves within its own tree scope. Moving the rows into the
|
|
713
|
+
library's windowing primitive (`<lr-virtual-list>`) would place them one shadow root deeper than the
|
|
714
|
+
input that has to point at them, where neither the attribute nor its `ariaActiveDescendantElement`
|
|
715
|
+
element-reflection replacement can reach — element reflection resolves same-root or upward only. So
|
|
716
|
+
`<lr-virtual-list>` stays `role="list"`/`role="listitem"` and is the right tool for feeds and
|
|
717
|
+
viewers, not for a listbox whose active row must stay addressable.
|
|
718
|
+
|
|
719
|
+
What that means in practice:
|
|
720
|
+
|
|
721
|
+
- **Up to a few hundred rows, raise `maxRender` and move on.** A few hundred flex rows is an
|
|
722
|
+
unremarkable amount of DOM; a country, currency, or time-zone list (typically 200–450 entries)
|
|
723
|
+
renders comfortably with `max-render` set to cover it. The cap exists to bound pathological
|
|
724
|
+
cases, not to make lists of that size expensive.
|
|
725
|
+
- **Past roughly a thousand rows, reach for `source` instead of a larger cap.** An async source
|
|
726
|
+
narrows the candidate set before it ever becomes DOM, which is a categorically better trade than
|
|
727
|
+
rendering everything and asking the browser to lay it out. Pair it with `sourceDelay` to debounce.
|
|
728
|
+
- **Leave the overflow row doing its job.** When the cap does bite, the excess collapses into one
|
|
729
|
+
`overflowText` row (default `"+{n} more — refine your search"`) rather than disappearing
|
|
730
|
+
silently, and the current selection is always kept visible even when it falls outside the cap.
|
|
731
|
+
Suppressing that row by setting `maxRender` far above the real list size trades a useful "keep
|
|
732
|
+
typing" affordance for layout work no user asked for.
|
|
733
|
+
|
|
608
734
|
**Slots:** default (`<lr-option>` children), `label`, `hint`, `error` (overrides the `errorText`
|
|
609
735
|
attribute when provided), plus two adornment slots:
|
|
610
736
|
- `start` — content at the inline-start of the trigger row, before the selected-value tags and the
|
|
@@ -634,6 +760,14 @@ a hovered or keyboard-active `[part='option']` row — the same per-component in
|
|
|
634
760
|
`lr-select`'s identical `--lr-select-option-active-bg` uses, so a consumer can retheme just this
|
|
635
761
|
row state without hijacking the shared `--lr-color-brand-quiet` token library-wide.
|
|
636
762
|
|
|
763
|
+
The currently-**selected** row (`[part='option'][aria-selected='true']`) has its own matching set:
|
|
764
|
+
`--lr-combobox-option-selected-bg` (default `transparent`), `--lr-combobox-option-selected-border`
|
|
765
|
+
and `--lr-combobox-option-selected-color` (both default `var(--lr-color-brand)`), and
|
|
766
|
+
`--lr-combobox-option-selected-font-weight` (default `var(--lr-font-weight-semibold)`) — the same
|
|
767
|
+
four-token indirection `lr-select`/`lr-model-select` already provide for their own selected row.
|
|
768
|
+
Like the active-bg knob these are inline `var()` fallbacks, not declared on `:host`, so a consumer
|
|
769
|
+
can retheme the selected row without hijacking `--lr-color-brand` library-wide.
|
|
770
|
+
|
|
637
771
|
`--lr-combobox-trigger-height` pins an **exact** input-container height (both floors and caps it),
|
|
638
772
|
for pixel-matching an `<lr-input>` or `<lr-select>` in the same toolbar row. It is **undeclared by
|
|
639
773
|
default**, leaving `--lr-combobox-trigger-min-height` as a floor only and the row free to grow —
|
|
@@ -695,7 +829,7 @@ Session-history/autofill state is stored as a name-independent JSON string array
|
|
|
695
829
|
array restores the selection (single mode keeps its first entry); malformed or wrong-shape state
|
|
696
830
|
restores an empty selection. Restored state wins even when it arrives before the first option
|
|
697
831
|
collection, while `form.reset()` still returns to the declarative selected default. Restoration is
|
|
698
|
-
synchronous and fires no `input`/`change` event.
|
|
832
|
+
synchronous and fires no `input`/`change`/`lr-change` event.
|
|
699
833
|
|
|
700
834
|
**Known gotchas:**
|
|
701
835
|
- `with-clear` remains supported for compatibility, but new code should use the mirrored
|
|
@@ -734,7 +868,8 @@ input: click/Enter/Space/ArrowDown opens it, and there's no typing-to-filter. Op
|
|
|
734
868
|
`<lr-option value>` children — the same element `<lr-combobox>` uses — reconciled the same way
|
|
735
869
|
combobox does, and the popup reuses `internal/positioner.ts` for placement.
|
|
736
870
|
Session-history/autofill restoration assigns the stored string through the same synchronous
|
|
737
|
-
value/form/validity path as a programmatic value write and does not emit `input` or
|
|
871
|
+
value/form/validity path as a programmatic value write and does not emit `input`, `change`, or
|
|
872
|
+
`lr-change`.
|
|
738
873
|
|
|
739
874
|
Single-select only, with no `filter`/`source`/`with-clear`/`max-options-visible`/`empty-text`/
|
|
740
875
|
`max-render`/`multiple` surface — reach for `<lr-combobox>` instead whenever any of those apply.
|
|
@@ -767,8 +902,10 @@ exactly like the multi-option case, until the trigger is actually activated.
|
|
|
767
902
|
- `value: string` — a getter/setter; always a single string (no `multiple` mode)
|
|
768
903
|
|
|
769
904
|
**Events:** `change` (native-style — selection changed), `input` (fired alongside `change` on every
|
|
770
|
-
selection change — a native `<select>` doesn't meaningfully distinguish the two either),
|
|
771
|
-
`lr-
|
|
905
|
+
selection change — a native `<select>` doesn't meaningfully distinguish the two either), and
|
|
906
|
+
`lr-change` (a prefixed compatibility alias fired after both, mirroring `<lr-checkbox>`'s
|
|
907
|
+
`lr-change`). All three carry `detail: { value: string }` (the new selection) and fire only on a
|
|
908
|
+
real change, never on a programmatic `value` write. Plus `lr-show`, `lr-hide`.
|
|
772
909
|
|
|
773
910
|
**Slots:** default (`<lr-option>` children), `label`, `hint`, `error` (overrides the `errorText`
|
|
774
911
|
attribute when provided)
|
|
@@ -820,6 +957,15 @@ ancestor is never shadowed — retheme just this row state without hijacking the
|
|
|
820
957
|
`--lr-color-brand-quiet` token every other component's own hover/active state also reads. Same
|
|
821
958
|
knob `lr-combobox`'s own `--lr-combobox-option-active-bg` provides.
|
|
822
959
|
|
|
960
|
+
The currently-**selected** row (`[part='option'][aria-selected='true']`) has its own matching set:
|
|
961
|
+
`--lr-select-option-selected-bg` (default `transparent`), `--lr-select-option-selected-border` and
|
|
962
|
+
`--lr-select-option-selected-color` (both default `var(--lr-color-brand)`), and
|
|
963
|
+
`--lr-select-option-selected-font-weight` (default `var(--lr-font-weight-semibold)`). Like the
|
|
964
|
+
active-bg knob these are inline `var()` fallbacks, not declared on `:host`, so a consumer can
|
|
965
|
+
retheme the selected row without hijacking `--lr-color-brand` library-wide. Note the shadow-parts
|
|
966
|
+
spec forbids an attribute selector after `::part()` — `::part(option)[aria-selected='true']` is
|
|
967
|
+
invalid CSS and never matches — which is exactly why these tokens exist.
|
|
968
|
+
|
|
823
969
|
**Optional peer deps:** none.
|
|
824
970
|
|
|
825
971
|
```html
|
|
@@ -1105,10 +1251,29 @@ submission/validation/reset via `name`/`value`/`disabled`/`required`/`checkValid
|
|
|
1105
1251
|
| `autocomplete` | `autocomplete` | `string` | `''` | Forwarded to the native `<textarea>`; empty omits the attribute. |
|
|
1106
1252
|
| `inputMode` | `inputmode` | `string` | `''` | Virtual-keyboard input hint forwarded to the native `<textarea>`. |
|
|
1107
1253
|
| `enterKeyHint` | `enterkeyhint` | `string` | `''` | Virtual-keyboard Enter-key hint forwarded to the native `<textarea>`. |
|
|
1254
|
+
| `minlength` | `minlength` | `number \| undefined` | `undefined` | Minimum text length; forwarded to the native `<textarea>` and reported as `validity.tooShort`. |
|
|
1255
|
+
| `maxlength` | `maxlength` | `number \| undefined` | `undefined` | Maximum text length; forwarded to the native `<textarea>` (which also stops typing past it) and reported as `validity.tooLong`. |
|
|
1108
1256
|
| `name` | `name` | `string` | `''` | Form field name. |
|
|
1109
1257
|
| `disabled` | `disabled` | `boolean` | `false` | Disables the control. |
|
|
1110
1258
|
| `required` | `required` | `boolean` | `false` | Participates in native constraint validation. |
|
|
1111
1259
|
|
|
1260
|
+
### Constraint validation
|
|
1261
|
+
|
|
1262
|
+
`validity` reports `valueMissing` (from `required`), `tooShort` (from `minlength`), and `tooLong`
|
|
1263
|
+
(from `maxlength`) — the complete set a native `<textarea>` can produce. Leaving `minlength` and
|
|
1264
|
+
`maxlength` unset constrains nothing, exactly as before they existed.
|
|
1265
|
+
|
|
1266
|
+
Two behaviors are worth knowing, both inherited from the platform and both shared with `lr-input`:
|
|
1267
|
+
|
|
1268
|
+
- **An empty value is never `tooShort`.** Native `minlength` only applies to a non-empty value, so
|
|
1269
|
+
an optional field left blank stays valid; `required` is what rejects empty.
|
|
1270
|
+
- **A script-assigned value is validated too.** The native `tooShort`/`tooLong` flags are raised
|
|
1271
|
+
only for a value the *user* edited, so the component recomputes both from its own `value` and
|
|
1272
|
+
ORs them in — `el.value = <over-length>` reports `tooLong` rather than silently submitting.
|
|
1273
|
+
Lengths count UTF-16 code units, matching the native control (one emoji counts as two).
|
|
1274
|
+
`validationMessage` is the browser's own localized message when the native control flagged the
|
|
1275
|
+
value, and the localized `valueInvalid` string when only the script-value check did.
|
|
1276
|
+
|
|
1112
1277
|
The visible label, hint, and error live in the same shadow tree as the native control, so their
|
|
1113
1278
|
generated ids safely drive the native `<label>`/`aria-describedby` relationships. Name precedence
|
|
1114
1279
|
is `accessibleLabel`/host `aria-label`, visible `label`, `placeholder`, then the localized
|
|
@@ -1181,7 +1346,27 @@ A generic action-button primitive. Renders an internal native `<button>`; `type=
|
|
|
1181
1346
|
`type="reset"` are handled by the component itself via the host's own `closest('form')`, since a
|
|
1182
1347
|
shadow-internal native button doesn't participate in an ancestor form's submission on its own.
|
|
1183
1348
|
|
|
1349
|
+
Set `href` to a safe link URL and the root renders as a real `<a part="base" href=…>` instead — a
|
|
1350
|
+
link styled as a button (e.g. a CTA). Native navigation is then the activation, so the submit/reset
|
|
1351
|
+
handling and `type` have no effect in that mode. A disabled link button (its own `disabled` or an
|
|
1352
|
+
ancestor `<fieldset disabled>`) renders the anchor with `aria-disabled="true"` and **no `href`**, so
|
|
1353
|
+
it is neither focusable nor navigable; an unsafe/unparseable `href` falls back to the native
|
|
1354
|
+
`<button>`.
|
|
1355
|
+
|
|
1184
1356
|
**Properties:**
|
|
1357
|
+
- `href?: string` — when set to a safe link URL (`http:`/`https:`/`blob:`/`mailto:`/relative; see
|
|
1358
|
+
`safeLinkHref`), the root renders as an `<a href=…>` instead of a `<button>`. Setting `download`
|
|
1359
|
+
narrows the allowlist to `http:`/`https:`/`blob:`/relative — `mailto:` names no retrievable bytes,
|
|
1360
|
+
so a `mailto:` href paired with `download` falls back to the native `<button>`. Unset (the default)
|
|
1361
|
+
renders a plain `<button>`, unchanged. `type` (submit/reset) has no effect while the anchor
|
|
1362
|
+
renders. While the button is disabled the anchor is rendered **without** `href` (keeping
|
|
1363
|
+
`aria-disabled="true"`), so a disabled link button cannot navigate. An unsafe/unparseable value
|
|
1364
|
+
falls back to the native `<button>`
|
|
1365
|
+
- `target?: string` — native anchor `target`, used only while `href` resolves to a link. Setting it
|
|
1366
|
+
(e.g. `'_blank'`) automatically derives `rel="noopener noreferrer"` on the anchor; `rel` is never
|
|
1367
|
+
independently settable (reverse-tabnabbing). Ignored in `<button>` mode
|
|
1368
|
+
- `download?: string` — native anchor `download` attribute, used only while `href` resolves to a
|
|
1369
|
+
link. Ignored in `<button>` mode
|
|
1185
1370
|
- `variant: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' = 'neutral'` (reflected)
|
|
1186
1371
|
- `appearance: 'accent' | 'filled' | 'outlined' | 'plain' | 'quiet' | 'link' = 'filled'` (reflected)
|
|
1187
1372
|
— `'accent'` is a
|
|
@@ -1206,15 +1391,17 @@ shadow-internal native button doesn't participate in an ancestor form's submissi
|
|
|
1206
1391
|
The shared `m` size uses `--lr-font-size-m`. The internal button follows the host's inline size through `--lr-button-width` (default
|
|
1207
1392
|
`100%`), and each size tier's `min-block-size` floor is exposed as its own token (see below).
|
|
1208
1393
|
|
|
1209
|
-
**Getters/methods:** `click()`, `focus(options?)`, and `blur()` — forwarded to the internal
|
|
1210
|
-
`<button
|
|
1394
|
+
**Getters/methods:** `click()`, `focus(options?)`, and `blur()` — forwarded to the internal base
|
|
1395
|
+
element (the `<button>`, or the `<a>` in anchor mode); `click()` also runs the component's
|
|
1396
|
+
submit/reset behavior in `<button>` mode.
|
|
1211
1397
|
|
|
1212
1398
|
**Events:** none (a plain native `click` bubbles and composes through the shadow boundary
|
|
1213
1399
|
unmodified; disabled while `disabled` or `loading`).
|
|
1214
1400
|
|
|
1215
1401
|
**Slots:** default (label content), `start` (leading icon/content), `end` (trailing icon/content).
|
|
1216
1402
|
|
|
1217
|
-
**CSS parts:** `base
|
|
1403
|
+
**CSS parts:** `base` (the internal native `<button>`, or an `<a>` when `href` resolves to a safe
|
|
1404
|
+
link), `label`, `start`, `end`, `spinner` (present only while `loading`).
|
|
1218
1405
|
|
|
1219
1406
|
**Themeable custom properties:** `--lr-button-width`, `--lr-button-accent`, `--lr-button-fill`,
|
|
1220
1407
|
`--lr-button-on-fill`, `--lr-button-border` (each swapped by the active `variant`, default
|
|
@@ -1242,6 +1429,9 @@ and the per-`size`
|
|
|
1242
1429
|
and any slotted content) and `--lr-button-radius` (default `--lr-radius`, the corner radius) are
|
|
1243
1430
|
both retunable without a `::part(base)` rule but — unlike the four size knobs below — do not vary
|
|
1244
1431
|
by `size` tier; `appearance="link"` ignores `--lr-button-radius` (it renders with zero radius).
|
|
1432
|
+
`--lr-button-shadow` is **undeclared by default**, so `box-shadow` falls back to `none` —
|
|
1433
|
+
byte-identical to before this property existed — set it to add a drop shadow (e.g. an
|
|
1434
|
+
elevated/floating action button) without a `::part(base)` rule.
|
|
1245
1435
|
|
|
1246
1436
|
**Retuning one `size` tier's geometry, without a `::part(base)` rule.** Four more properties carry
|
|
1247
1437
|
the active tier's geometry, and every `:host([size='…'])` rule does nothing but re-assign them — no
|
|
@@ -1286,9 +1476,8 @@ box no matter what tier or override is in play.
|
|
|
1286
1476
|
|
|
1287
1477
|
## `lr-icon-button`
|
|
1288
1478
|
|
|
1289
|
-
An accessible icon-only action button — a native `<button>`
|
|
1290
|
-
|
|
1291
|
-
form the way a native button does, but the element itself contributes no form value.
|
|
1479
|
+
An accessible icon-only action button — a form-associated custom element with a native `<button>`
|
|
1480
|
+
inside. Its `type="submit"`/`"reset"` behavior is forwarded to the ancestor form by the component.
|
|
1292
1481
|
|
|
1293
1482
|
**Properties:**
|
|
1294
1483
|
- `icon: string = ''` — an `lr-icon` glyph name (see `llms/components/lr-icon.md`)
|
|
@@ -1339,7 +1528,13 @@ that several other components size their icon-only controls against), so overrid
|
|
|
1339
1528
|
above 24px — see `llms/shared.md`. `--lr-icon-button-radius` (default `--lr-radius`) is the
|
|
1340
1529
|
`[part='button']` corner radius, retunable without a `::part(button)` rule — the same
|
|
1341
1530
|
`--lr-button-radius` pattern; `lr-icon-button` has no `size` tiers, so there is no per-tier gap
|
|
1342
|
-
counterpart to it.
|
|
1531
|
+
counterpart to it. `--lr-icon-button-background` (default `transparent`) tints the
|
|
1532
|
+
`[part='button']` background, `--lr-icon-button-background-hover` (default `--lr-color-surface`)
|
|
1533
|
+
its hover-state background, and `--lr-icon-button-color` (default `inherit`) its icon/text color —
|
|
1534
|
+
the same per-component indirection `lr-button`'s `--lr-button-fill`/`--lr-button-on-fill` provide,
|
|
1535
|
+
letting you tint a single button without a `::part(button)` rule. Left unset, each falls back to
|
|
1536
|
+
today's value, so rendering is unchanged. There is deliberately no border-color token:
|
|
1537
|
+
`[part='button']` sets `border: 0`, so a border color could never render.
|
|
1343
1538
|
|
|
1344
1539
|
## `lr-input`
|
|
1345
1540
|
|
|
@@ -1373,6 +1568,13 @@ form-associated via the same `FormAssociated` mixin as `lr-textarea`. Ships the
|
|
|
1373
1568
|
non-numeric bound only survives a direct property assignment; the declared type also admits a
|
|
1374
1569
|
string so a subclass can narrow the attribute parsing to its own native type's literal form —
|
|
1375
1570
|
`lr-time-input` does exactly that. Inert for the other types
|
|
1571
|
+
- `minlength?: number` / `maxlength?: number` (attributes `minlength`/`maxlength`) — text-length
|
|
1572
|
+
bounds forwarded to the native input and reported as `validity.tooShort`/`validity.tooLong`.
|
|
1573
|
+
Apply to the text-bearing types (`text`, `search`, `email`, `password`); the platform ignores
|
|
1574
|
+
both on `type="number"`/`type="time"`, and so does this component
|
|
1575
|
+
- `pattern?: string` (attribute `pattern`) — a regular expression the value must match in full,
|
|
1576
|
+
forwarded to the native input and reported as `validity.patternMismatch`. Anchored to the whole
|
|
1577
|
+
value by the platform, so no `^`/`$` is needed; an empty value never violates it
|
|
1376
1578
|
- `passwordVisible: boolean = false` (attribute `password-visible` — `type="password"` only)
|
|
1377
1579
|
- `name`/`disabled`/`required` (from `FormAssociated`)
|
|
1378
1580
|
|
|
@@ -1447,7 +1649,19 @@ Several controls expose the same pair: a per-`size` `*-min-height` **floor**, an
|
|
|
1447
1649
|
**Known gotchas:**
|
|
1448
1650
|
- `type="email"`/`type="number"` delegate constraint validation to the internal native `<input>`'s
|
|
1449
1651
|
own browser-computed `validity` (format/range/step), bridged into this element's own
|
|
1450
|
-
`ElementInternals` — not a second hand-rolled regex check.
|
|
1652
|
+
`ElementInternals` — not a second hand-rolled regex check. The same bridge carries
|
|
1653
|
+
`minlength`/`maxlength`/`pattern`, so `validity` reports the full native set: `valueMissing`,
|
|
1654
|
+
`typeMismatch`, `rangeUnderflow`, `rangeOverflow`, `stepMismatch`, `tooShort`, `tooLong`,
|
|
1655
|
+
`patternMismatch`, and `badInput`.
|
|
1656
|
+
- **`tooShort`/`tooLong` also fire for a value assigned from script.** The native flags are raised
|
|
1657
|
+
only for a value the *user* edited, so the component recomputes both from its own `value` and ORs
|
|
1658
|
+
them in; `el.value = <over-length>` reports `tooLong` rather than silently submitting. Lengths
|
|
1659
|
+
count UTF-16 code units, matching the native control (one emoji counts as two). `patternMismatch`
|
|
1660
|
+
needs no such handling — the platform applies `pattern` to script-assigned values already.
|
|
1661
|
+
`validationMessage` is the browser's own localized message when the native input flagged the
|
|
1662
|
+
value, and the localized `valueInvalid` string when only the script-value check did.
|
|
1663
|
+
- An empty value is never `tooShort` and never a `patternMismatch` — both native constraints skip
|
|
1664
|
+
the empty string, and `required` is what rejects it.
|
|
1451
1665
|
- `type="password"` always renders the `password-toggle` button; there is no separate opt-out.
|
|
1452
1666
|
|
|
1453
1667
|
## `lr-number-input`
|
|
@@ -1459,8 +1673,8 @@ A migration-friendly numeric alias of `lr-input` — a subclass whose constructo
|
|
|
1459
1673
|
**Properties:** `size` (`2xs`…`xl`), `placeholder`, `readonly`, `label`, `hint`, `errorText`
|
|
1460
1674
|
(`error-text`), `accessibleLabel` (`aria-label`), `autocomplete`, `spellcheck`, `autocapitalize`,
|
|
1461
1675
|
`autoCorrect` (`autocorrect`), `inputMode` (`inputmode`), `enterKeyHint` (`enterkeyhint`), and
|
|
1462
|
-
`min`/`max`/`step` (the native numeric constraint validation). `clearable
|
|
1463
|
-
(`password-visible`) are inherited but inert — see gotchas.
|
|
1676
|
+
`min`/`max`/`step` (the native numeric constraint validation). `clearable`, `passwordVisible`
|
|
1677
|
+
(`password-visible`), and `minlength`/`maxlength`/`pattern` are inherited but inert — see gotchas.
|
|
1464
1678
|
|
|
1465
1679
|
**Events:** `input`/`change` (native-style, composed), `lr-input`/`lr-change`
|
|
1466
1680
|
(`detail: { value }`), `focus`/`blur` (re-dispatched bubbling + composed from the internal native
|
|
@@ -1482,7 +1696,8 @@ vary by `size` at all).
|
|
|
1482
1696
|
**Known gotchas:**
|
|
1483
1697
|
- `clearable`/`clear-button`/`lr-clear` are inert: the clear action only renders for
|
|
1484
1698
|
`type="text"`/`"search"`. `password-visible`/`password-toggle` are likewise inert, since the
|
|
1485
|
-
toggle only renders for `type="password"`.
|
|
1699
|
+
toggle only renders for `type="password"`. `minlength`/`maxlength`/`pattern` are inert too — the
|
|
1700
|
+
platform ignores all three on `type="number"`; use `min`/`max`/`step` instead.
|
|
1486
1701
|
- `type` is re-forced to `number` on every connect, but a later `el.type = 'text'` on a connected
|
|
1487
1702
|
element is not reverted — use `lr-input` when the type has to change.
|
|
1488
1703
|
|
|
@@ -1495,8 +1710,9 @@ re-typed `min`/`max` pair (below); every other property, event, slot and part is
|
|
|
1495
1710
|
**Properties:** `size` (`2xs`…`xl`), `placeholder`, `readonly`, `label`, `hint`, `errorText`
|
|
1496
1711
|
(`error-text`), `accessibleLabel` (`aria-label`), `autocomplete`, `spellcheck`, `autocapitalize`,
|
|
1497
1712
|
`autoCorrect` (`autocorrect`), `inputMode` (`inputmode`), and `enterKeyHint` (`enterkeyhint`).
|
|
1498
|
-
`clearable
|
|
1499
|
-
`lr-number-input
|
|
1713
|
+
`clearable`, `passwordVisible` (`password-visible`), and `minlength`/`maxlength`/`pattern` are
|
|
1714
|
+
inherited but inert, exactly as on `lr-number-input` — the platform ignores all three length/pattern
|
|
1715
|
+
constraints on `type="time"` as well.
|
|
1500
1716
|
|
|
1501
1717
|
`step` is forwarded verbatim to the native time input, where it means seconds (`step="1"` reveals
|
|
1502
1718
|
the seconds field, `'any'` disables step validation).
|
|
@@ -1838,16 +2054,18 @@ named colors, the shape apps otherwise hand-roll as a row of round accent-color
|
|
|
1838
2054
|
|
|
1839
2055
|
**Properties:**
|
|
1840
2056
|
- `options: SwatchOption[] = []` (attribute: false) — `SwatchOption { value: string; color: string;
|
|
1841
|
-
label: string; icon?: unknown }`; `color` is any CSS color string used as
|
|
1842
|
-
is each swatch's accessible name and `title`. `icon` is an optional
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
`<lr-segmented>`'s `SegmentedItem.icon`.
|
|
2057
|
+
label: string; icon?: unknown; gemstone?: GemstoneKey }`; `color` is any CSS color string used as
|
|
2058
|
+
the swatch fill, `label` is each swatch's accessible name and `title`. `icon` is an optional
|
|
2059
|
+
custom shape rendered *instead of* the plain filled circle; `gemstone` selects the canonical
|
|
2060
|
+
faceted glyph when `mode="gemstone"`. An explicit `icon` wins over `gemstone`.
|
|
1846
2061
|
- `value: string | null = null` — the currently selected option's `value` (controlled); `null`
|
|
1847
2062
|
leaves nothing selected while keeping the first swatch tabbable.
|
|
1848
2063
|
- `size: '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' = 'm'` (reflected — scales the swatch hit-area and
|
|
1849
2064
|
fill diameter proportionally, hit-area floored at 24px; not pixel-matched to `lr-input`'s
|
|
1850
2065
|
row-height scale)
|
|
2066
|
+
- `mode: 'swatch' | 'gemstone' = 'swatch'` (reflected) — `swatch` preserves the plain-circle
|
|
2067
|
+
default. `gemstone` renders the shared glyph for options carrying a `gemstone` key and enables
|
|
2068
|
+
the selected glow/shine defaults.
|
|
1851
2069
|
- `label: string = ''` — accessible name copied to the internal `role="radiogroup"`; when empty, a
|
|
1852
2070
|
host-level `aria-label` is used as a fallback.
|
|
1853
2071
|
|
|
@@ -1876,7 +2094,9 @@ for a looping brighten-and-settle pulse on the selected swatch. It drives a sepa
|
|
|
1876
2094
|
works identically for a fill and an icon; disabled outright under `prefers-reduced-motion: reduce`,
|
|
1877
2095
|
which also drops the hover/selection scale transition), `--lr-swatch-picker-hit-size` (hit-area
|
|
1878
2096
|
size, swapped per `size` tier), `--lr-swatch-picker-fill-size` (visible fill/icon diameter, swapped
|
|
1879
|
-
per `size` tier)
|
|
2097
|
+
per `size` tier), `--lr-swatch-picker-gemstone-selected-blur` (default `--lr-size-0-5rem` in
|
|
2098
|
+
gemstone mode), `--lr-swatch-picker-gemstone-shine-duration` (default `1.8s` in gemstone mode);
|
|
2099
|
+
plus shared tokens — `--lr-color-border`/`-brand`, `--lr-space-xs`,
|
|
1880
2100
|
`--lr-border-width-thin`/`-thick`, `--lr-radius`, `--lr-transition-fast`, `--lr-focus-ring-*`,
|
|
1881
2101
|
and the per-tier `--lr-size-*` tokens.
|
|
1882
2102
|
|
|
@@ -1896,6 +2116,24 @@ and the per-tier `--lr-size-*` tokens.
|
|
|
1896
2116
|
</script>
|
|
1897
2117
|
```
|
|
1898
2118
|
|
|
2119
|
+
For the shared gemstone accent mode, import the side-effect-free palette/glyph helper. The
|
|
2120
|
+
consumer still owns localized labels, display order, and the initial value:
|
|
2121
|
+
|
|
2122
|
+
```ts
|
|
2123
|
+
import '@aceshooting/lyra-ui/components/forms/swatch-picker/swatch-picker.js';
|
|
2124
|
+
import { GEMSTONES } from '@aceshooting/lyra-ui/theme/gemstones.js';
|
|
2125
|
+
|
|
2126
|
+
const order = ['emerald', 'ruby', 'sapphire', 'hematite'] as const;
|
|
2127
|
+
picker.mode = 'gemstone';
|
|
2128
|
+
picker.options = order.map((key) => ({
|
|
2129
|
+
value: key,
|
|
2130
|
+
color: GEMSTONES[key].fill,
|
|
2131
|
+
label: translateGemstone(key),
|
|
2132
|
+
gemstone: key,
|
|
2133
|
+
}));
|
|
2134
|
+
picker.value = 'ruby';
|
|
2135
|
+
```
|
|
2136
|
+
|
|
1899
2137
|
**Known gotchas:**
|
|
1900
2138
|
- arrow-key navigation cycles (past the last swatch wraps to the first, and vice versa) rather than
|
|
1901
2139
|
clamping, and self-selects on move — arrow-navigating to a swatch immediately updates `value` and
|
|
@@ -1940,6 +2178,10 @@ silent. Internal `focus`/`blur` are re-dispatched as bubbling, composed host eve
|
|
|
1940
2178
|
same as clicking a native checkbox's associated `<label>`. If left empty, set `aria-label` on the
|
|
1941
2179
|
host so the control still has an accessible name.
|
|
1942
2180
|
|
|
2181
|
+
Host `aria-describedby` is forwarded to the internal `role="checkbox"`, so an externally-owned
|
|
2182
|
+
description can be associated with one checkbox inside a group. The attribute is omitted from the
|
|
2183
|
+
internal role when unset and tracks host attribute changes.
|
|
2184
|
+
|
|
1943
2185
|
**CSS parts:** `base` (the whole interactive control, `role="checkbox"`), `box` (the small square
|
|
1944
2186
|
showing the checkmark/indeterminate dash), `checkmark` (the checkmark or indeterminate-dash glyph),
|
|
1945
2187
|
`label` (wrapper around the default slot)
|
|
@@ -2871,6 +3113,9 @@ own "consumer computes/renders" contract rather than assuming addition.
|
|
|
2871
3113
|
button's label once they've been revealed)
|
|
2872
3114
|
- `showAllColumns: boolean = false` (attribute `show-all-columns`, reflected) — forces responsive
|
|
2873
3115
|
priority columns visible and is updated by the built-in reveal button
|
|
3116
|
+
- `storageKey?: string` (attribute `storage-key`) — when set, persists `showAllColumns` to
|
|
3117
|
+
`localStorage` (namespaced as `lr-table:${storageKey}`) and restores it on the next mount. Unset
|
|
3118
|
+
(the default) touches storage not at all. Mirrors `lr-app-rail`'s identical `storage-key` pattern
|
|
2874
3119
|
- `heatTintScale?: { min?: number; max?: number }` (attribute: false) — overrides the auto-derived
|
|
2875
3120
|
heat-tint domain (min/max of every `heatValue` result across every currently-rendered row —
|
|
2876
3121
|
post-sort, pre-pagination, the same rows `footer(rows)` already sees). Unset (the default) computes
|
|
@@ -2939,6 +3184,11 @@ element *or on any ancestor* and still reach the rule that reads it. It exists b
|
|
|
2939
3184
|
forbids an attribute selector after `::part()` — `::part(row)[aria-selected='true']` is invalid CSS —
|
|
2940
3185
|
so the only prior lever for restyling the selected row was overriding the library-wide
|
|
2941
3186
|
`--lr-color-brand-quiet` token, which repaints everything else reading it.
|
|
3187
|
+
`--lr-table-header-sorted-bg` (default `transparent`) and `--lr-table-header-sorted-color` (default
|
|
3188
|
+
`inherit`) restyle the **currently-sorted** column's header cell (`[aria-sort]` other than `none`).
|
|
3189
|
+
Same shape and rationale as `--lr-table-row-selected-bg`: inline `var()` fallbacks, not on `:host`,
|
|
3190
|
+
because `::part(header-cell)[aria-sort]` is invalid CSS. The `sort-icon` part styles only the
|
|
3191
|
+
chevron; these tokens style the header cell itself.
|
|
2942
3192
|
`--lr-table-sticky-offset` (default `0`) is measured and written inline per column by the component
|
|
2943
3193
|
so multiple `sticky` columns stack instead of overlapping; it is a read-out, not a knob you set.
|
|
2944
3194
|
`--lr-table-heat-t` is likewise component-written (each `[data-heat]` cell's position on the ramp).
|
|
@@ -2964,11 +3214,16 @@ so multiple `sticky` columns stack instead of overlapping; it is a read-out, not
|
|
|
2964
3214
|
- only single-row selection is modeled (`selectedKey: string | number | null`);
|
|
2965
3215
|
there's no bulk-select/checkbox-column API — you must hand-roll a checkbox column entirely inside
|
|
2966
3216
|
a `cell()` callback if you need multi-select.
|
|
2967
|
-
-
|
|
2968
|
-
|
|
2969
|
-
`this.getAttribute('aria-label')` at render time
|
|
2970
|
-
|
|
2971
|
-
|
|
3217
|
+
- `accessibleLabel: string = ''` (attribute `accessible-label`) — a typed accessible name for the
|
|
3218
|
+
`<table role="grid">`. A plain `aria-label` HTML attribute on the host is also forwarded (read via
|
|
3219
|
+
`this.getAttribute('aria-label')` at render time) and serves as a fallback when `accessibleLabel`
|
|
3220
|
+
is unset. Consumer-supplied text, so neither is run through `this.localize()`.
|
|
3221
|
+
- `caption: string = ''` — an optional visible `<caption>` (exposed as the `caption` CSS part). When
|
|
3222
|
+
no `accessibleLabel`/host `aria-label` is present the caption also names the grid via
|
|
3223
|
+
`aria-labelledby`.
|
|
3224
|
+
- A grid with **none** of `accessibleLabel`, host `aria-label`, or `caption` logs a one-time
|
|
3225
|
+
`console.warn` on first render (dev signal) — an unnamed grid is an accessibility defect that
|
|
3226
|
+
otherwise renders silently.
|
|
2972
3227
|
- Full roving-tabindex grid keyboard pattern (one `tabindex="0"` stop among header cells, one among
|
|
2973
3228
|
body rows) — Left/Right/Home/End move within the header row, Up/Down/Home/End move within the
|
|
2974
3229
|
body, Down from the header enters the body's roving stop and Up from the body's first row returns
|
|
@@ -3179,6 +3434,12 @@ visually-hidden `[part="live-region"]` (`role="status" aria-live="polite"`) anno
|
|
|
3179
3434
|
90° for denser packing
|
|
3180
3435
|
- `palette?: string[]` (attribute: false) — custom categorical colors, cycled by word index (or by
|
|
3181
3436
|
`group`); defaults to the `--lr-word-cloud-color-1..8` tokens
|
|
3437
|
+
- `legend: WordCloudLegendItem[] = []` (attribute: false) — optional named `{ label, color }`
|
|
3438
|
+
entries for explaining explicit `words[].color`/group color overrides; when omitted, the
|
|
3439
|
+
component derives entries from grouped and explicitly colored words
|
|
3440
|
+
- `showLegend: boolean = false` (attribute `show-legend`, reflected) — renders the supplied or
|
|
3441
|
+
derived legend below the cloud; the color key is an accessible list and does not change word
|
|
3442
|
+
activation or palette selection
|
|
3182
3443
|
|
|
3183
3444
|
**Methods:** `refreshTheme(): void` — forces a relayout so the `--lr-font` custom property is
|
|
3184
3445
|
re-read from computed style (font-family affects the canvas text measurement layout depends on);
|
|
@@ -3192,8 +3453,8 @@ the currently-focused word — a no-op if nothing is focused yet)
|
|
|
3192
3453
|
|
|
3193
3454
|
**CSS parts:** `base`, `svg`, `word` (each `<text>`), `focus-ring` (the rect around the roving-focus
|
|
3194
3455
|
cursor's word), `live-region` (visually-hidden `role="status" aria-live="polite"` announcement text),
|
|
3195
|
-
`
|
|
3196
|
-
|
|
3456
|
+
`legend`/`legend-item`/`legend-swatch`/`legend-label` (the optional static color key), and `empty`
|
|
3457
|
+
(the no-data placeholder)
|
|
3197
3458
|
|
|
3198
3459
|
**Themeable custom properties:** `--lr-word-cloud-color-1`, `--lr-word-cloud-color-2`,
|
|
3199
3460
|
`--lr-word-cloud-color-3`, `--lr-word-cloud-color-4`, `--lr-word-cloud-color-5`,
|
|
@@ -4321,9 +4582,16 @@ auto-inserted between each adjacent pair.
|
|
|
4321
4582
|
**Properties:**
|
|
4322
4583
|
- `sizes: number[] = []` (attribute: false — percentages per panel, auto-computed equally if
|
|
4323
4584
|
omitted/mismatched)
|
|
4324
|
-
- `defaultSizes: number[] = []` (attribute: false) — initialization-only fallback: a
|
|
4325
|
-
`storageKey` layout wins first; otherwise a valid `defaultSizes` wins over equal
|
|
4326
|
-
Later reassignment never overwrites live drag/persisted state — set it once, at
|
|
4585
|
+
- `defaultSizes: (number | string)[] = []` (attribute: false) — initialization-only fallback: a
|
|
4586
|
+
valid restored `storageKey` layout wins first; otherwise a valid `defaultSizes` wins over equal
|
|
4587
|
+
distribution. Later reassignment never overwrites live drag/persisted state — set it once, at
|
|
4588
|
+
mount. Each entry is either a plain **number** (percent-of-container, validated unchanged: a
|
|
4589
|
+
pure-number array that does not sum to ~100, e.g. `[30, 60]`, is still rejected and falls through
|
|
4590
|
+
to the equal split) or a CSS **length string** (`'200px'`, `'20%'`, `'3rem'`). When at least one
|
|
4591
|
+
entry is a length string, every entry is resolved against the measured container (numbers as
|
|
4592
|
+
percent-of-container, `%` as-is, `px`/`rem`/`em` via the shared length resolver) and then
|
|
4593
|
+
normalized to percentages before the same validation applies — so `['200px', '300px']` on a 500px
|
|
4594
|
+
container initializes to `[40, 60]`.
|
|
4327
4595
|
- `min: number = 10` (min % per panel)
|
|
4328
4596
|
- `orientation: 'horizontal'|'vertical' = 'horizontal'` (reflected) — the axis used at/above
|
|
4329
4597
|
`orientationBreakpoint` (or always, when that's unset).
|
|
@@ -4567,6 +4835,10 @@ position) survives the transition.
|
|
|
4567
4835
|
view externally; also updated internally when a view toggle is clicked.
|
|
4568
4836
|
- `accessibleLabel: string = ''` (attribute `aria-label`) — overrides the label-derived fullscreen
|
|
4569
4837
|
dialog name.
|
|
4838
|
+
- `storageKey?: string` (attribute `storage-key`) — when set, persists `collapsed` to `localStorage`
|
|
4839
|
+
under `lr-widget:${storageKey}` and restores it on the next mount (mirrors `lr-app-rail`'s/
|
|
4840
|
+
`lr-table`'s identical `storage-key` pattern). Without a `storageKey` there is no persistence and
|
|
4841
|
+
storage is never touched — listen for `lr-collapse-change` and persist the state yourself.
|
|
4570
4842
|
|
|
4571
4843
|
**Events:** `lr-collapse-change` (`detail: { collapsed }`, the new state), `lr-fullscreen-change`
|
|
4572
4844
|
(`detail: { fullscreen }` — also fired when fullscreen is exited via Escape or a backdrop click, not
|
|
@@ -4629,6 +4901,9 @@ space for a persistent sidebar/toolbar that should stay visible instead of being
|
|
|
4629
4901
|
fullscreen panel/backdrop — it overrides the default `var(--lr-space-l)` inset on every side for
|
|
4630
4902
|
both `[part="base"]` and `[part="backdrop"]`. Set `compact` for tighter header/body padding.
|
|
4631
4903
|
|
|
4904
|
+
The collapse-button `aria-label` is localized via its own `widgetCollapse` (default `'Collapse
|
|
4905
|
+
panel'`) and `widgetExpand` (default `'Expand panel'`) keys.
|
|
4906
|
+
|
|
4632
4907
|
**Known gotchas:**
|
|
4633
4908
|
- a reconnect that preserves the same element instance (e.g. a drag-and-drop reparent) resumes its
|
|
4634
4909
|
shared overlay registration and re-acquires the scroll lock if `fullscreen` was still `true`
|
|
@@ -4636,6 +4911,11 @@ both `[part="base"]` and `[part="backdrop"]`. Set `compact` for tighter header/b
|
|
|
4636
4911
|
between, so `willUpdate()` alone wouldn't otherwise notice.
|
|
4637
4912
|
- `collapsed` hides the body via `hidden` rather than an animated height transition — collapsing is
|
|
4638
4913
|
instant, not a slide.
|
|
4914
|
+
- prior to this release the collapse-button `aria-label` was localized through `lr-dock-panel`'s
|
|
4915
|
+
own `dockPanelCollapse`/`dockPanelExpand` keys (a borrowed, differently-named pair). A locale
|
|
4916
|
+
registered against those keys specifically to target `lr-widget`'s collapse button should move
|
|
4917
|
+
to `widgetCollapse`/`widgetExpand`; the default English strings are unchanged, and `lr-dock-panel`
|
|
4918
|
+
itself is unaffected.
|
|
4639
4919
|
|
|
4640
4920
|
---
|
|
4641
4921
|
|
|
@@ -5102,6 +5382,13 @@ labeled options, rendered as a button row" is ubiquitous settings/filter-panel U
|
|
|
5102
5382
|
**Events:** `lr-change` (`detail: { value }`) — fired when the selected value changes via click or
|
|
5103
5383
|
keyboard.
|
|
5104
5384
|
|
|
5385
|
+
**Methods:**
|
|
5386
|
+
- `scrollToValue(value: string): void` — scroll the segment with the given `value` into view within
|
|
5387
|
+
the (possibly overflowing) track, without changing the selection. Honors
|
|
5388
|
+
`prefers-reduced-motion` (falls back to `behavior: 'auto'`). This runs automatically when `value`
|
|
5389
|
+
is changed programmatically (keyboard navigation already reveals the focused segment on its own),
|
|
5390
|
+
so you only need to call it for the "reveal without selecting" case.
|
|
5391
|
+
|
|
5105
5392
|
**Slots:** none.
|
|
5106
5393
|
|
|
5107
5394
|
**CSS parts:** `base` (the `role="radiogroup"` root), `segment` (a single `role="radio"` button),
|
|
@@ -5408,8 +5695,10 @@ content is never duplicated.
|
|
|
5408
5695
|
|
|
5409
5696
|
Opting in to `resizable` adds a continuously draggable width for the `'full'` state: a
|
|
5410
5697
|
`[part="resizer"]` handle (pointer-drag and Left/Right-arrow keyboard stepping, RTL-aware) clamped to
|
|
5411
|
-
`[minRailWidthPx, maxRailWidthPx]
|
|
5412
|
-
|
|
5698
|
+
`[minRailWidthPx, maxRailWidthPx]`. Set `storageKey` (attribute `storage-key`) to persist `open` and
|
|
5699
|
+
`railWidthPx` to `localStorage` under `lr-app-rail:${storageKey}` and restore them on the next mount
|
|
5700
|
+
(mirrors `lr-split`'s `storage-key`; `mode` is breakpoint-derived and never persisted). Without a
|
|
5701
|
+
`storageKey` there is no persistence — listen for `lr-rail-resize` and persist `widthPx` yourself.
|
|
5413
5702
|
`preferredMode` separately lets a host manually prefer `'full'`/`'icon-only'` for the non-mobile
|
|
5414
5703
|
breakpoint axis (e.g. a user's own collapse toggle) while `mobile-breakpoint` continues to be tracked
|
|
5415
5704
|
automatically regardless — it's only consulted while `mode` isn't force-pinned via the `mode`
|
|
@@ -5454,6 +5743,9 @@ accessor itself, which still takes full priority.
|
|
|
5454
5743
|
- `railWidthPx?: number` (attribute `rail-width-px`) — the rail's current width in px while
|
|
5455
5744
|
`resizable`; settable/gettable directly. Unset defers to `--lr-app-rail-width`'s own resolved
|
|
5456
5745
|
width.
|
|
5746
|
+
- `storageKey?: string` (attribute `storage-key`) — when set, persists `open` and `railWidthPx` to
|
|
5747
|
+
`localStorage` under `lr-app-rail:${storageKey}` and restores them on the next mount. `mode` is
|
|
5748
|
+
breakpoint-derived and never persisted. Unset means no persistence.
|
|
5457
5749
|
- `minRailWidthPx: number = 190` (attribute `min-rail-width-px`) — minimum `railWidthPx` a
|
|
5458
5750
|
drag/keyboard resize can reach.
|
|
5459
5751
|
- `maxRailWidthPx: number = 440` (attribute `max-rail-width-px`) — maximum `railWidthPx` a
|
|
@@ -6047,6 +6339,11 @@ to `<wa-card>`'s contract, staying slot-compatible with `lr-result-card` where t
|
|
|
6047
6339
|
reproduces a plain static card: no `tabindex`, no listeners, no events.
|
|
6048
6340
|
- `href?: string` — when set, the card's root renders as a real `<a href=...>` instead of a `<div>`,
|
|
6049
6341
|
for a whole-card link (e.g. a wide CTA tile). Unset (the default) renders a plain `<div>`.
|
|
6342
|
+
- `target?: string` — native anchor target, applied only while `href` resolves to a link. Setting it
|
|
6343
|
+
to `'_blank'` (or any other target) automatically derives `rel="noopener noreferrer"` on the
|
|
6344
|
+
rendered anchor; there is deliberately **no** separately-settable `rel` property, so a consumer
|
|
6345
|
+
can't forget it and leave the opened page holding a `window.opener` back-reference
|
|
6346
|
+
(reverse-tabnabbing). Unset (the default) emits neither `target` nor `rel`.
|
|
6050
6347
|
|
|
6051
6348
|
**Events:** `lr-card-activate` (no detail) — the whole card was activated, by click or by
|
|
6052
6349
|
Enter/Space while `[part='base']` has focus. Only fired while `interactive` is set **without**
|
|
@@ -6338,7 +6635,7 @@ From the `toaster` controller — the ergonomic entry point, no manual `<lr-toas
|
|
|
6338
6635
|
needed:
|
|
6339
6636
|
|
|
6340
6637
|
```ts
|
|
6341
|
-
import { toast } from '@aceshooting/lyra-ui';
|
|
6638
|
+
import { toast } from '@aceshooting/lyra-ui/components/overlays/toast/toaster.js';
|
|
6342
6639
|
|
|
6343
6640
|
toast('Saved');
|
|
6344
6641
|
toast({ message: 'Deleted', variant: 'danger', action: { label: 'Undo', onClick: (item) => {/*...*/} } });
|
|
@@ -6353,7 +6650,7 @@ at another, since `placement` is a per-call option rather than a single global r
|
|
|
6353
6650
|
|
|
6354
6651
|
```html
|
|
6355
6652
|
<script type="module">
|
|
6356
|
-
import { toast } from '@aceshooting/lyra-ui';
|
|
6653
|
+
import { toast } from '@aceshooting/lyra-ui/components/overlays/toast/toaster.js';
|
|
6357
6654
|
document.getElementById('save-btn').addEventListener('click', () => toast('Saved!'));
|
|
6358
6655
|
</script>
|
|
6359
6656
|
```
|
|
@@ -6401,7 +6698,9 @@ the existing `flex-start` cross-axis and `start` text alignment, and `center` ce
|
|
|
6401
6698
|
`--lr-empty-compact-padding` (default `--lr-space-xs` — padding used in compact mode),
|
|
6402
6699
|
`--lr-empty-compact-gap` (default `--lr-space-2xs` — gap between the icon, heading, and description
|
|
6403
6700
|
in compact mode; the non-compact layout's gap stays the plain shared `--lr-space-s` token, not
|
|
6404
|
-
independently themeable),
|
|
6701
|
+
independently themeable), `--lr-empty-compact-font-size` (compact mode only; unset by default with
|
|
6702
|
+
**no fallback value** — the compact heading keeps its ordinary inherited font size until a
|
|
6703
|
+
consumer explicitly sets this token), plus shared tokens (`--lr-space-xs/-s/-l`,
|
|
6405
6704
|
`--lr-color-text-quiet/-border/-text`).
|
|
6406
6705
|
|
|
6407
6706
|
**Optional peer deps:** none.
|
|
@@ -6918,6 +7217,9 @@ near the virtual point) when one is available to give it something to observe; o
|
|
|
6918
7217
|
the anchor point moves on its own (e.g. a graph pan/zoom tick), re-call `showAt()` with fresh
|
|
6919
7218
|
coordinates to re-anchor — the popover stays open across such a call. A popover that never calls
|
|
6920
7219
|
`showAt()` behaves exactly as before.
|
|
7220
|
+
`hide(options?: { focusTrigger?: boolean })` programmatically closes the popover; pass
|
|
7221
|
+
`{ focusTrigger: true }` to return focus to the slotted trigger (as Escape does), or omit it to
|
|
7222
|
+
close without moving focus (as a bare `el.open = false` does). No-op when already closed.
|
|
6921
7223
|
**Events:** `lr-show`, `lr-hide`. **Slots:** `trigger`, default content. **CSS parts:** `trigger`,
|
|
6922
7224
|
`popup`, `content`. **Themeable custom properties:** `--lr-overlay-max-inline-size` (default
|
|
6923
7225
|
`--lr-size-20rem` — maximum inline size of the popup).
|
|
@@ -8475,12 +8777,24 @@ accepted), `'size'` from `maxFileSize`, or `'directory'` for a dropped folder. `
|
|
|
8475
8777
|
when the semantic dropzone (the actual keyboard-focusable element, not the hidden native `<input>`)
|
|
8476
8778
|
gains/loses focus.
|
|
8477
8779
|
|
|
8780
|
+
Each rejected file also renders as its own line in the visible `[part="rejection"]` alert, naming
|
|
8781
|
+
the file and the reason via one of four locale keys: `fileInputRejectedType` (default
|
|
8782
|
+
`'{filename}: this file type is not accepted.'`), `fileInputRejectedSize` (default
|
|
8783
|
+
`'{filename}: this file is too large.'`), `fileInputRejectedCount` (default `'{filename}: only one
|
|
8784
|
+
file can be selected at a time.'`), and — for `'directory'` — the pre-existing
|
|
8785
|
+
`fileInputFolderRejected` (default `'Folders are not accepted here.'`, reused verbatim, so it has no
|
|
8786
|
+
`{filename}` placeholder). The filename is interpolated as caller-supplied data, never localized
|
|
8787
|
+
itself. The region is cleared (and unrendered) as soon as a subsequent selection rejects nothing.
|
|
8788
|
+
|
|
8478
8789
|
**Slots:** default slot — custom dropzone content, overrides the `label` attribute text when
|
|
8479
8790
|
provided. The accessible name always comes from `label` regardless, so icon-only slot content still
|
|
8480
8791
|
announces correctly.
|
|
8481
8792
|
|
|
8482
8793
|
**CSS parts:** `base`, `input`, `status` (a visually-hidden `role="status" aria-live="polite"`
|
|
8483
|
-
element carrying the drag accept/reject announcement)
|
|
8794
|
+
element carrying the drag accept/reject announcement and the aggregate accepted/rejected count),
|
|
8795
|
+
`rejection` (a **visible** `role="alert"` region, rendered only while a rejection exists, listing
|
|
8796
|
+
each currently-rejected file next to a per-reason message — in addition to, never in place of, the
|
|
8797
|
+
sr-only `status` summary above)
|
|
8484
8798
|
|
|
8485
8799
|
**Themeable custom properties:** `--lr-file-input-compact-padding` (default `var(--lr-space-s)`) —
|
|
8486
8800
|
`[part='base']`'s padding while `compact`; `--lr-file-input-compact-gap` (default
|
|
@@ -9393,15 +9707,27 @@ Chart.js wrapper every other `lr-*-chart` tag subclasses; supports both a simpli
|
|
|
9393
9707
|
- `labels: string[] = []` (attribute: false)
|
|
9394
9708
|
- `datasets: Series[] = []` (attribute: false) — `Series { label: string; data?: (number|null)[];
|
|
9395
9709
|
points?: {x,y,label?}[]; color?: string|string[]; fill?: boolean; width?: number; dash?: boolean;
|
|
9396
|
-
noTooltip?: boolean; axis?: 'y'|'y2'; pointColors?: string[]; pointRadius?: number;
|
|
9397
|
-
'line'|'bar' }`
|
|
9710
|
+
noTooltip?: boolean; axis?: 'y'|'y2'; pointColors?: string[]; pointRadius?: number|number[];
|
|
9711
|
+
segmentColors?: string[]; type?: 'line'|'bar' }`
|
|
9712
|
+
- `pointRadius` takes a single number (applied to every point) **or** an array matching `data`'s
|
|
9713
|
+
length that sizes each point independently — passed straight through to Chart.js, which
|
|
9714
|
+
supports both natively. Useful for emphasizing a single outlier or the latest reading without
|
|
9715
|
+
splitting the series in two.
|
|
9716
|
+
- `segmentColors` colors each *segment* (the line drawn between two consecutive points) by the
|
|
9717
|
+
segment's **starting** point index, so `['red', 'green']` over 3 points paints the first
|
|
9718
|
+
segment red and the second green; a shorter array cycles. Wired to Chart.js's
|
|
9719
|
+
`segment.borderColor` scriptable option, so it is only meaningful for line-type series.
|
|
9720
|
+
Typical use is threshold/anomaly banding along one line. A series that omits it (or passes an
|
|
9721
|
+
empty array) emits no `segment` key at all, leaving line rendering exactly as before.
|
|
9398
9722
|
- `legend: boolean = false`
|
|
9399
9723
|
- `legendPosition: LyraChartLegendPosition = 'top'` (attribute `legend-position`) — places the
|
|
9400
9724
|
legend at `top`, `right`, `bottom`, or `left`; `auto` chooses right above 480px and bottom below
|
|
9401
9725
|
that allocation width
|
|
9402
|
-
- `valueFormatter?: LyraChartValueFormatter` (attribute: false) — formats numeric
|
|
9403
|
-
and legend values; the callback receives the value and `'tick'`, `'tooltip'`, or
|
|
9404
|
-
context
|
|
9726
|
+
- `valueFormatter?: LyraChartValueFormatter` (attribute: false) — formats numeric (value-axis)
|
|
9727
|
+
tick, tooltip, and legend values; the callback receives the value and `'tick'`, `'tooltip'`, or
|
|
9728
|
+
`'legend'` context. Never runs against the categorical x-axis's own labels (line/bar's `labels`
|
|
9729
|
+
strings) — Chart.js's category scale passes the tick index to `ticks.callback`, not the label
|
|
9730
|
+
text
|
|
9405
9731
|
- `area: boolean = false`
|
|
9406
9732
|
- `zoom: boolean = false` — wheel/drag/pinch zoom on the `x` axis only (pan disabled, and the zoom
|
|
9407
9733
|
range is limited to the original data extent); shows the `reset-zoom-button` while zoomed
|
|
@@ -9415,6 +9741,16 @@ Chart.js wrapper every other `lr-*-chart` tag subclasses; supports both a simpli
|
|
|
9415
9741
|
- `stacked: boolean = false` — stacks the `x`/`y`(/`y2`) scale entries `buildScales()` returns; only
|
|
9416
9742
|
meaningful for `bar`/`line` types (scatter/bubble's linear `x` scale and the radial `r` scale used
|
|
9417
9743
|
by radar/polar-area are out of scope)
|
|
9744
|
+
- `dataLabels: boolean = false` (attribute `data-labels`) — draws each point's value on the chart via
|
|
9745
|
+
the optional `chartjs-plugin-datalabels` peer (see `peers.md`). Unset (the default) leaves labels
|
|
9746
|
+
off; because the plugin is registered **per chart instance** (not globally), a `<lr-chart
|
|
9747
|
+
data-labels>` never affects any other chart on the page. If the peer is not installed the chart
|
|
9748
|
+
still renders and the attribute is inert, with one `console.warn`. The screen-reader equivalent is
|
|
9749
|
+
the always-present accessible data table (`show-data-table` makes it visible) — labels are a
|
|
9750
|
+
purely visual, canvas-only addition and add no new a11y surface.
|
|
9751
|
+
- `stackTotals: boolean = false` (attribute `stack-totals`) — with `stacked` (bar/line only), draws
|
|
9752
|
+
the per-category stack total above each stack, via the same `chartjs-plugin-datalabels` peer.
|
|
9753
|
+
Null/undefined points are skipped; a category whose every value is null shows no total (not `0`)
|
|
9418
9754
|
- `config?: Partial<ChartConfiguration>` (attribute: false) — deep-merged over the generated
|
|
9419
9755
|
config; any nested key wins without clobbering sibling generated keys. This is the raw Chart.js
|
|
9420
9756
|
escape hatch, so a caller-supplied `config.type` is passed through rather than normalized.
|
|
@@ -9427,11 +9763,25 @@ Chart.js wrapper every other `lr-*-chart` tag subclasses; supports both a simpli
|
|
|
9427
9763
|
- `chartArea: LyraChartArea | undefined` (readonly) — current Chart.js chart-area geometry in
|
|
9428
9764
|
canvas-local coordinates (`top`, `left`, `right`, `bottom`, `width`, `height`), when a chart is
|
|
9429
9765
|
drawn
|
|
9430
|
-
|
|
9431
|
-
|
|
9432
|
-
|
|
9433
|
-
|
|
9434
|
-
`
|
|
9766
|
+
- `appendData(label, values, maxPoints?)` — appends one aligned numeric category and optionally
|
|
9767
|
+
keeps only the newest `maxPoints`; point-based scatter/bubble series are left unchanged
|
|
9768
|
+
|
|
9769
|
+
**Methods:** `resetZoom()` (reset any active zoom/pan to the original view), `refreshTheme()`, and
|
|
9770
|
+
`exportData('csv' | 'png')` (returns a spreadsheet-safe CSV snapshot or the current PNG data URL
|
|
9771
|
+
when Chart.js is loaded)
|
|
9772
|
+
(forces a redraw so the `--lr-chart-*` tokens below are re-read from the current computed style. A
|
|
9773
|
+
built-in `ThemeWatcher` now calls this automatically when `prefers-color-scheme` flips or an
|
|
9774
|
+
ancestor's `class`/`style`/`data-theme`/`data-color-scheme` attribute mutates — the most common
|
|
9775
|
+
theme-toggle mechanisms — so a consumer rarely needs to call it by hand; it remains public as the
|
|
9776
|
+
escape hatch for theme changes those signals can't observe)
|
|
9777
|
+
|
|
9778
|
+
`seriesPalette(): string[]` resolves the categorical series ramp (`--lr-color-chart-1..8`) through
|
|
9779
|
+
`getComputedStyle` and returns the concrete, theme-aware colors — the exact same values the chart
|
|
9780
|
+
hands any series that sets no `color` of its own. Call it to color chart-adjacent UI (custom
|
|
9781
|
+
legends, KPI tiles, annotations fed through the raw `config` passthrough) from one source of truth
|
|
9782
|
+
instead of hand-resolving `--lr-color-chart-N` and drifting out of sync when the theme flips.
|
|
9783
|
+
Returns a fresh array each call (safe to mutate), and falls back to the light-mode literals only
|
|
9784
|
+
when the custom properties can't be resolved at all (e.g. a detached host).
|
|
9435
9785
|
|
|
9436
9786
|
**Events:** `lr-zoom` (`detail: { zoomed: boolean }`, fired on zoom-complete and on
|
|
9437
9787
|
`resetZoom()`), `lr-point-click` (fired when a click lands on, or nearest to — intersect-only —
|
|
@@ -9477,10 +9827,9 @@ subset actually used.
|
|
|
9477
9827
|
property values fall back to `line`. Each typed `lr-*-chart` subclass (e.g.
|
|
9478
9828
|
`llms/components/lr-bar-chart.md`) locks its *own* `type` via a real prototype accessor — a
|
|
9479
9829
|
genuine runtime lock, not just a compile-time default.
|
|
9480
|
-
-
|
|
9481
|
-
|
|
9482
|
-
|
|
9483
|
-
`--lr-chart-*` tokens above.
|
|
9830
|
+
- a built-in `ThemeWatcher` auto-retheme an already-drawn chart when `prefers-color-scheme` flips or
|
|
9831
|
+
an ancestor's `class`/`style`/`data-theme`/`data-color-scheme` attribute mutates (coalesced to one
|
|
9832
|
+
redraw). `refreshTheme()` stays public for out-of-band theme changes those signals can't observe.
|
|
9484
9833
|
- generated `scales` are keyed off the *effective* type (`config.type` ?? `type`, see
|
|
9485
9834
|
`effectiveType()`) and are type-appropriate: no scale at all for `type="pie"`/`"doughnut"` (true of
|
|
9486
9835
|
`<lr-chart type="pie">` directly, not just the `lr-pie-chart`/`lr-doughnut-chart` subclasses),
|
|
@@ -9585,16 +9934,24 @@ passthrough). Not a subclass of `LyraChart`.
|
|
|
9585
9934
|
every bar/segment at that index, across every dataset — e.g. to highlight a whole selected week's
|
|
9586
9935
|
column in a stacked chart. Empty (the default) reproduces the exact existing output: no bar
|
|
9587
9936
|
carries `data-selected`. This component takes no opinion on what the highlight looks like, only
|
|
9588
|
-
which bars it applies to — style
|
|
9937
|
+
which bars it applies to — style the highlight via the `--lr-lite-chart-selected-outline-color`
|
|
9938
|
+
custom property (documented below). Note `::part(bar)[data-selected]` is **invalid CSS** — Shadow
|
|
9939
|
+
Parts forbids an attribute selector after `::part()` — so it silently never matches; the outline
|
|
9940
|
+
is painted inside the shadow root and exposed through that token instead.
|
|
9589
9941
|
- `minBarHeight?: number` (attribute `min-bar-height`) — optional minimum visible bar height for
|
|
9590
9942
|
small non-zero values
|
|
9591
9943
|
- `accessibleLabel?: string` (attribute `accessible-label`) — SVG accessible-name override; a host
|
|
9592
9944
|
`aria-label` wins
|
|
9945
|
+
- `appendData(label, values, maxPoints?)` — appends one aligned category and optionally trims the
|
|
9946
|
+
oldest categories
|
|
9593
9947
|
|
|
9594
9948
|
**Events:** `lr-point-click` — fired when a bar/point is activated (click, or Enter/Space while
|
|
9595
9949
|
focused). `detail: { datasetIndex: number, index: number, label: string | undefined, value: number
|
|
9596
9950
|
| null }` — same shape as `lr-chart`'s `lr-point-click`.
|
|
9597
9951
|
|
|
9952
|
+
**Methods:** `exportData('csv' | 'svg')` returns a spreadsheet-safe CSV snapshot or the current SVG
|
|
9953
|
+
markup. The method does not download a file; pair it with `lr-export-button` for download UX.
|
|
9954
|
+
|
|
9598
9955
|
The axis gutter/title and y-axis labels mirror to logical start under RTL. Built-in mark summaries
|
|
9599
9956
|
are complete localized templates and format values with `effectiveLocale`.
|
|
9600
9957
|
|
|
@@ -9609,7 +9966,16 @@ fresh, small SVG render is cheaper and more correct than a lossy cache.
|
|
|
9609
9966
|
`data-selected` when its category index is in `selectedIndex`), `line`, `point`, `legend`,
|
|
9610
9967
|
`legend-item`, `legend-swatch`, `legend-text` (extra per-item text after the series label,
|
|
9611
9968
|
rendered only when `legendText` is set), `live-region` (the current mark announcement for keyboard
|
|
9612
|
-
users), `data-list` (a visually hidden list of all plotted data points)
|
|
9969
|
+
users), `data-list` (a visually hidden list of all plotted data points — single-series only),
|
|
9970
|
+
`data-table` (a visually hidden category×series data table, rendered instead of `data-list` when
|
|
9971
|
+
there is more than one dataset).
|
|
9972
|
+
|
|
9973
|
+
**Screen-reader data alternative:** a single dataset renders the flat `data-list` (one `<li>` per
|
|
9974
|
+
plotted point, matching the roving-tabindex mark order). More than one dataset instead renders a
|
|
9975
|
+
`data-table` — a category-labelled `<caption>` (the shared localized `chartData` string), one
|
|
9976
|
+
`<th scope="col">` per series (plus a leading `chartCategory` corner header), and one
|
|
9977
|
+
`<th scope="row">` per category label with its per-series values in the body — so a screen-reader
|
|
9978
|
+
user hears the values grouped by series rather than one flattened N×M sequence.
|
|
9613
9979
|
|
|
9614
9980
|
**Themeable custom properties:** `--lr-chart-height` (same host-level property as `lr-chart`);
|
|
9615
9981
|
`--lr-chart-grid-color`, `--lr-chart-tick-color`, `--lr-chart-legend-color` — same token
|
|
@@ -9664,7 +10030,8 @@ of every entry in these lists.**
|
|
|
9664
10030
|
|
|
9665
10031
|
**Properties:** `labels`, `datasets`, `legend`, `legendPosition` (attribute `legend-position`),
|
|
9666
10032
|
`valueFormatter`, `area`, `zoom`, `height`, `xLabel` (`x-label`), `yLabel` (`y-label`), `y2Label`
|
|
9667
|
-
(`y2-label`), `beginAtZero` (`begin-at-zero`), `horizontal`, `stacked`, `
|
|
10033
|
+
(`y2-label`), `beginAtZero` (`begin-at-zero`), `horizontal`, `stacked`, `dataLabels`
|
|
10034
|
+
(`data-labels`), `stackTotals` (`stack-totals`), `config`, `accessibleLabel`
|
|
9668
10035
|
(`accessible-label`), `accessibleDescription` (`accessible-description`), `showDataTable`
|
|
9669
10036
|
(`show-data-table`), `chartArea` (readonly). `type` is the only member that differs: read-only,
|
|
9670
10037
|
locked to this tag's value.
|
|
@@ -9685,7 +10052,7 @@ dependency fails to load — see `llms/components/lr-chart.md`).
|
|
|
9685
10052
|
`--lr-chart-tooltip-text`.
|
|
9686
10053
|
|
|
9687
10054
|
**Optional peer deps:** same as `lr-chart` — `chart.js`, plus `chartjs-plugin-zoom` only once
|
|
9688
|
-
`zoom` is set.
|
|
10055
|
+
`zoom` is set, and `chartjs-plugin-datalabels` only once `data-labels`/`stack-totals` is set.
|
|
9689
10056
|
|
|
9690
10057
|
```html
|
|
9691
10058
|
<lr-bar-chart legend></lr-bar-chart>
|
|
@@ -9729,8 +10096,9 @@ Bins `values` into `bins` equal-width buckets and renders as a bar chart (extend
|
|
|
9729
10096
|
- All other `LyraChart` properties are inherited and usable: `legend`, `legendPosition` (attribute
|
|
9730
10097
|
`legend-position`), `valueFormatter`, `area`, `zoom`, `config`, `height`, `xLabel` (`x-label`),
|
|
9731
10098
|
`yLabel` (`y-label`), `y2Label` (`y2-label`), `beginAtZero` (`begin-at-zero`), `horizontal`,
|
|
9732
|
-
`stacked`, `
|
|
9733
|
-
(`accessible-
|
|
10099
|
+
`stacked`, `dataLabels` (`data-labels`), `stackTotals` (`stack-totals`), `accessibleLabel`
|
|
10100
|
+
(`accessible-label`), `accessibleDescription` (`accessible-description`), `showDataTable`
|
|
10101
|
+
(`show-data-table`), `chartArea` (readonly).
|
|
9734
10102
|
|
|
9735
10103
|
**Methods:** `resetZoom()`, `refreshTheme()` — both inherited.
|
|
9736
10104
|
|
|
@@ -9794,7 +10162,8 @@ browser). Does **not** extend `LyraChart` — a deliberately bespoke API.
|
|
|
9794
10162
|
|
|
9795
10163
|
**Slots:** `data-table` — an optional consumer-provided accessible table alternative.
|
|
9796
10164
|
|
|
9797
|
-
**CSS parts:** `base`, `canvas`, `description`, `data-table`
|
|
10165
|
+
**CSS parts:** `base`, `canvas`, `description`, `data-table`, `error` (`role="alert"` message shown
|
|
10166
|
+
instead of `canvas` when the optional box-plot peer fails to load)
|
|
9798
10167
|
|
|
9799
10168
|
**Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
|
|
9800
10169
|
`--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
|
|
@@ -9821,10 +10190,19 @@ independently of the base `chart-loader.ts`).
|
|
|
9821
10190
|
logical start in RTL, canvas tooltip/axis colors are token-driven, and animation is disabled
|
|
9822
10191
|
under reduced motion.
|
|
9823
10192
|
- If `@sgratzl/chartjs-chart-boxplot` fails to load, the component warns to the console and
|
|
9824
|
-
|
|
10193
|
+
fails closed with a localized `role="alert"` error part rather than leaving a blank canvas.
|
|
9825
10194
|
|
|
9826
10195
|
---
|
|
9827
10196
|
|
|
10197
|
+
## Chart streaming and export
|
|
10198
|
+
|
|
10199
|
+
`lr-lite-chart` and `lr-chart` expose additive imperative helpers for live dashboards:
|
|
10200
|
+
`appendData(label, values, maxPoints?)` appends one aligned category and optionally trims the oldest
|
|
10201
|
+
points. `lr-lite-chart.exportData('csv' | 'svg')` returns a spreadsheet-safe CSV snapshot or the
|
|
10202
|
+
current SVG markup. `lr-chart.exportData('csv' | 'png')` returns a CSV snapshot or Chart.js's current
|
|
10203
|
+
PNG data URL when the optional peer is loaded. These helpers do not download files; compose them
|
|
10204
|
+
with `lr-export-button` so the host owns filenames and download policy.
|
|
10205
|
+
|
|
9828
10206
|
# Document & file viewers (`components/viewers/`)
|
|
9829
10207
|
|
|
9830
10208
|
## `lr-document-preview`
|
|
@@ -9992,9 +10370,10 @@ available, the region becomes a standard `role="progressbar"` instead, self-desc
|
|
|
9992
10370
|
just via two different mechanisms depending on timing.
|
|
9993
10371
|
- `download-link` (and thus `lr-download`) only renders/fires when `src` is set — a generic-fallback
|
|
9994
10372
|
state with no `src` shows only the file glyph and message, with no download affordance at all.
|
|
9995
|
-
- `download-link` also never renders for a `data:` URL, even though `data:` is accepted
|
|
9996
|
-
sinks
|
|
9997
|
-
in the
|
|
10373
|
+
- `download-link` also never renders for a `data:` or `mailto:` URL, even though `data:` is accepted
|
|
10374
|
+
for text/image sinks and `mailto:` is accepted for navigation anchors elsewhere in the library — a
|
|
10375
|
+
`src="data:..."` document renders/fetches fine but falls back to no download affordance in the
|
|
10376
|
+
generic state, and a `mailto:` names no retrievable bytes so it cannot be a download target at all.
|
|
9998
10377
|
- A `src` that fails its sink's URL-safety check does **not** raise `lr-render-error` — that event is
|
|
9999
10378
|
reserved for a `fetch()` that was actually attempted and failed at the network layer; an unsafe/
|
|
10000
10379
|
malformed `src` is silently treated as unusable instead (a rendered `[part="error"]` message for
|
|
@@ -10144,7 +10523,12 @@ Remote resources are capped at 25 MB; exceeding it surfaces the localized
|
|
|
10144
10523
|
|
|
10145
10524
|
**Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. `foldQuotes:
|
|
10146
10525
|
boolean = false` (attribute `fold-quotes`) — collapses trailing quoted-reply text/HTML behind a
|
|
10147
|
-
localized show/hide toggle. `false` (the default) preserves the full body rendering.
|
|
10526
|
+
localized show/hide toggle. `false` (the default) preserves the full body rendering. A host
|
|
10527
|
+
`aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
|
|
10528
|
+
`anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
|
|
10529
|
+
|
|
10530
|
+
**Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
|
|
10531
|
+
`scrollToAnchor()` operate on rendered message text and emit the shared search/anchor events.
|
|
10148
10532
|
|
|
10149
10533
|
**Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
|
|
10150
10534
|
`lr-attachment-open` — `detail: { attachment: { filename, mimeType, content? } }`, `content` a
|
|
@@ -10174,7 +10558,12 @@ contract: an absent `postal-mime` renders `[part="error"]` with the localized
|
|
|
10174
10558
|
Fetches and parses `.ics` calendars with the optional `ical.js` peer and renders each VEVENT as
|
|
10175
10559
|
plain text, including its title, start/end time, location, and description. No HTML is injected.
|
|
10176
10560
|
|
|
10177
|
-
**Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings.
|
|
10561
|
+
**Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. A host
|
|
10562
|
+
`aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
|
|
10563
|
+
`anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
|
|
10564
|
+
|
|
10565
|
+
**Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
|
|
10566
|
+
`scrollToAnchor()` operate on rendered event text and emit `lr-search-change`/`lr-anchor-result`.
|
|
10178
10567
|
|
|
10179
10568
|
**Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
|
|
10180
10569
|
|
|
@@ -10198,12 +10587,17 @@ read straight from JSZip's local file header (`uncompressedSize`) when available
|
|
|
10198
10587
|
fully decompressing only the rare entry missing that header field. The list composes
|
|
10199
10588
|
`<lr-virtual-list>` for large archives.
|
|
10200
10589
|
|
|
10201
|
-
**Properties:** `src` and `name` are strings —
|
|
10202
|
-
|
|
10590
|
+
**Properties:** `src` and `name` are strings — a host-level `aria-label` takes precedence over
|
|
10591
|
+
`name` when naming the `role="region"` listing. The viewer also exposes the shared text-viewer
|
|
10592
|
+
contract: `highlights`, `activeHighlightId`, `anchor`, and `anchorKinds` (`['text-quote', 'fragment']`).
|
|
10593
|
+
|
|
10594
|
+
**Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, and `clearSearch()` provide
|
|
10595
|
+
case-insensitive text search over rendered entry names; `scrollToAnchor()` resolves text-quote and
|
|
10596
|
+
fragment anchors and emits `lr-anchor-result`.
|
|
10203
10597
|
|
|
10204
10598
|
**Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
|
|
10205
10599
|
|
|
10206
|
-
**CSS parts:** `base`, `entry`, `entry-icon`, `entry-name`, `entry-name-dir`, `entry-size`,
|
|
10600
|
+
**CSS parts:** `base`, `body`, `entry`, `entry-icon`, `entry-name`, `entry-name-dir`, `entry-size`,
|
|
10207
10601
|
`spinner`, and `error`. A directory row's name element carries both `entry-name` and
|
|
10208
10602
|
`entry-name-dir` (a part list), so `::part(entry-name-dir)` selects only directory names while
|
|
10209
10603
|
`::part(entry-name)` still selects every name. Entry rows are rendered into the embedded
|
|
@@ -10276,10 +10670,14 @@ Best-effort client-side PPTX viewer backed by the optional `@aiden0z/pptx-render
|
|
|
10276
10670
|
localized fidelity notice is always visible because animations, equations, embedded objects,
|
|
10277
10671
|
speaker notes, and several advanced effects are not rendered.
|
|
10278
10672
|
|
|
10279
|
-
**Properties:** `src`, `name`, and `label` are strings. A host `aria-label`
|
|
10280
|
-
|
|
10673
|
+
**Properties:** `src`, `name`, and `label` are strings. A host `aria-label` takes precedence over
|
|
10674
|
+
`label` and `name`. `highlights`, `activeHighlightId`, `anchor`, and `anchorKinds`
|
|
10675
|
+
(`['text-quote', 'fragment']`) provide the shared text-viewer contract when the renderer exposes
|
|
10676
|
+
DOM text.
|
|
10281
10677
|
|
|
10282
10678
|
**Methods:** `goToSlide(index)` returns a promise and navigates the mounted presentation.
|
|
10679
|
+
`search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and `scrollToAnchor()` are
|
|
10680
|
+
available for renderer output that exposes DOM text.
|
|
10283
10681
|
|
|
10284
10682
|
**Events:** `lr-load` (`detail: { slideCount }`), `lr-slide-change` (`detail: { index, count }`),
|
|
10285
10683
|
and `lr-render-error` with `detail.error`.
|
|
@@ -10343,7 +10741,12 @@ Remote resources are capped at 25 MB; exceeding it surfaces the localized
|
|
|
10343
10741
|
Fetches an HTML document, sanitizes it with the optional `dompurify` peer, and renders the safe markup
|
|
10344
10742
|
inside a bounded, scrollable body.
|
|
10345
10743
|
|
|
10346
|
-
**Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings.
|
|
10744
|
+
**Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. A host
|
|
10745
|
+
`aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
|
|
10746
|
+
`anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
|
|
10747
|
+
|
|
10748
|
+
**Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
|
|
10749
|
+
`scrollToAnchor()` operate on sanitized HTML text and emit the shared search/anchor events.
|
|
10347
10750
|
|
|
10348
10751
|
**Events:** `lr-render-error` with `detail.error` when fetching or sanitizing fails.
|
|
10349
10752
|
|
|
@@ -10419,7 +10822,12 @@ label when `FN` is absent).
|
|
|
10419
10822
|
Remote resources are capped at 25 MB; exceeding it surfaces the localized
|
|
10420
10823
|
`documentPreviewResourceTooLarge` message instead of the contacts.
|
|
10421
10824
|
|
|
10422
|
-
**Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings.
|
|
10825
|
+
**Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. A host
|
|
10826
|
+
`aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
|
|
10827
|
+
`anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
|
|
10828
|
+
|
|
10829
|
+
**Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
|
|
10830
|
+
`scrollToAnchor()` operate on rendered contact text and emit the shared search/anchor events.
|
|
10423
10831
|
|
|
10424
10832
|
**Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
|
|
10425
10833
|
|
|
@@ -10635,6 +11043,11 @@ removed once it settles either way. Build error UI from `lr-include-error`.
|
|
|
10635
11043
|
letting `fetch()` throw. `no-cors` is accepted for enum completeness but always yields an opaque
|
|
10636
11044
|
response (`status` `0`, unreadable body) — a Fetch API limitation, not a bug here.
|
|
10637
11045
|
|
|
11046
|
+
The shared text-viewer contract is also available for the sanitized light-DOM fragment:
|
|
11047
|
+
`highlights`, `activeHighlightId`, `anchor`, and `anchorKinds` (`['text-quote', 'fragment']`).
|
|
11048
|
+
`search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and `scrollToAnchor()`
|
|
11049
|
+
operate on the included text.
|
|
11050
|
+
|
|
10638
11051
|
**Events:**
|
|
10639
11052
|
- `lr-load` — `detail: { src }` — the fragment was sanitized and written into the light DOM.
|
|
10640
11053
|
- `lr-include-error` — `detail: { status, reason, error? }`. `reason` is a `LyraIncludeErrorReason`:
|
|
@@ -10878,7 +11291,10 @@ collapsed-depth="2">` of the raw value instead of the map.
|
|
|
10878
11291
|
|
|
10879
11292
|
**Properties:** `src: string = ''` — URL to fetch and parse. `name: string = ''` — accessible label,
|
|
10880
11293
|
used as `<lr-map>`'s `label` and the root's `aria-label` (falling back to the localized
|
|
10881
|
-
`geojsonViewLabel` when unset).
|
|
11294
|
+
`geojsonViewLabel` when unset). A host `aria-label` takes precedence over `name`. The shared
|
|
11295
|
+
text-viewer contract adds `highlights`, `activeHighlightId`, `anchor`, and
|
|
11296
|
+
`anchorKinds` (`['text-quote', 'fragment']`), plus `search()`, `searchNext()`, `searchPrevious()`,
|
|
11297
|
+
`clearSearch()`, and `scrollToAnchor()` for rendered feature metadata and status text.
|
|
10882
11298
|
|
|
10883
11299
|
**Events:** `lr-render-error` — `detail: { error }` — fetch, parse, or shape-validation failure.
|
|
10884
11300
|
|
|
@@ -11240,6 +11656,11 @@ streaming-indicator pulse animation's cycle, the same shared compound token
|
|
|
11240
11656
|
background already maps to that same token, override `[part=bubble]`'s background explicitly (e.g.
|
|
11241
11657
|
via `::part(bubble)`) so message bubbles stay visually distinct from the surrounding panel.
|
|
11242
11658
|
|
|
11659
|
+
> Retheming a bubble from outside `<lr-chat-message>` (e.g. per-thread or per-role colors)?
|
|
11660
|
+
> Set `--lr-theme-*` on the ancestor wrapper, not `--lr-*` directly — see `llms/shared.md`'s
|
|
11661
|
+
> "Theming and design tokens" section for why a `--lr-*` override on a wrapper only reaches that
|
|
11662
|
+
> wrapper's *direct* children, not a nested `<lr-*>` host's shadow DOM.
|
|
11663
|
+
|
|
11243
11664
|
**Optional peer deps:** none. Internally renders a `<lr-live-region>` (a first-party sibling
|
|
11244
11665
|
component, auto-imported alongside this one, not an npm peer) for the status-transition
|
|
11245
11666
|
announcements described below.
|
|
@@ -11313,10 +11734,13 @@ variant), `cursor` (the blinking bar in the `cursor` variant)
|
|
|
11313
11734
|
`size="sm"`), `--lr-typing-gap` (default `0.25rem`, `0.1875rem` at `size="sm"`),
|
|
11314
11735
|
`--lr-typing-cursor-width` (default `0.125rem`, `0.09375rem` at `size="sm"`),
|
|
11315
11736
|
`--lr-typing-cursor-height` (default `1em`, unaffected by `size`),
|
|
11316
|
-
`--lr-typing-dot-stagger-1` (default `600ms`, second dot),
|
|
11317
|
-
`--lr-typing-
|
|
11318
|
-
|
|
11319
|
-
animation cycle.
|
|
11737
|
+
`--lr-typing-dot-stagger-1` (default `600ms`, second dot), `--lr-typing-dot-stagger-2` (default
|
|
11738
|
+
`1200ms`, third dot), and `--lr-typing-duration` (default `var(--lr-transition-ambient)`, i.e.
|
|
11739
|
+
`1.8s ease-in-out`) — the compound duration/timing-function token every variant uses as its
|
|
11740
|
+
animation cycle. `--lr-typing-duration` is a dedicated alias: it defaults to the library-wide
|
|
11741
|
+
`--lr-transition-ambient` token (shared by every other ambient-looping component), but overriding
|
|
11742
|
+
it retimes only this component, leaving `--lr-transition-ambient` itself — and anything else keyed
|
|
11743
|
+
off it — untouched.
|
|
11320
11744
|
|
|
11321
11745
|
**Optional peer deps:** none.
|
|
11322
11746
|
|
|
@@ -11325,7 +11749,7 @@ animation cycle.
|
|
|
11325
11749
|
<lr-typing-indicator variant="pulse" size="sm"></lr-typing-indicator>
|
|
11326
11750
|
<lr-typing-indicator variant="cursor"></lr-typing-indicator>
|
|
11327
11751
|
<lr-typing-indicator
|
|
11328
|
-
style="--lr-
|
|
11752
|
+
style="--lr-typing-duration: 900ms ease-in-out; --lr-typing-dot-stagger-1: 300ms; --lr-typing-dot-stagger-2: 600ms"
|
|
11329
11753
|
></lr-typing-indicator>
|
|
11330
11754
|
```
|
|
11331
11755
|
|
|
@@ -11344,9 +11768,10 @@ decorative; `label` is the entire accessible content, nothing narrates individua
|
|
|
11344
11768
|
state (`opacity: 1`, no transform, `animation: none !important`) rather than freezing on whatever
|
|
11345
11769
|
frame the animation happened to be on — notably relevant for `cursor`, which would otherwise risk
|
|
11346
11770
|
freezing on its invisible ("off") blink half.
|
|
11347
|
-
- `--lr-
|
|
11348
|
-
with `calc()`. When retiming it,
|
|
11349
|
-
default one-third/two-thirds dot
|
|
11771
|
+
- `--lr-typing-duration` (like the `--lr-transition-ambient` token it aliases by default) is a
|
|
11772
|
+
compound `duration timing-function` value and cannot be divided with `calc()`. When retiming it,
|
|
11773
|
+
override both stagger properties alongside it to preserve the default one-third/two-thirds dot
|
|
11774
|
+
phasing, as shown above.
|
|
11350
11775
|
- `size="sm"` shrinks the dot size, gap, and cursor width, but **not** `--lr-typing-cursor-height`
|
|
11351
11776
|
(still `1em` at any size) — the cursor bar's height is meant to track surrounding text size via
|
|
11352
11777
|
`1em`, not the component's own `size` property.
|
|
@@ -11674,8 +12099,8 @@ in-place rename `<input>`'s own `focus`, for the same reason as `blur`)
|
|
|
11674
12099
|
|
|
11675
12100
|
`leading`/`content`/`excerpt`/`meta` must all stay non-focusable — see the `role="button"` note below.
|
|
11676
12101
|
|
|
11677
|
-
**CSS parts:** `base`, `
|
|
11678
|
-
`timestamp`, `actions`
|
|
12102
|
+
**CSS parts:** `base`, `active-indicator` (decorative, rendered only while `active`), `option`,
|
|
12103
|
+
`content`, `title`, `title-input`, `rename-button`, `excerpt`, `timestamp`, `actions`
|
|
11679
12104
|
|
|
11680
12105
|
**Themeable custom properties:** `--lr-conversation-item-active-bg` (default
|
|
11681
12106
|
`var(--lr-color-brand-quiet)`) — the row's background while `active`. `--lr-conversation-item-active-color`
|
|
@@ -11694,6 +12119,13 @@ the default active background; keep any override at 4.5:1 or better against it.
|
|
|
11694
12119
|
custom active background needs its own title color set alongside them, or the title drops below
|
|
11695
12120
|
contrast while the excerpt stays legible.
|
|
11696
12121
|
|
|
12122
|
+
`--lr-conversation-item-active-indicator-color` (default `var(--lr-color-brand)`) controls the
|
|
12123
|
+
decorative `active-indicator` part's color. `--lr-conversation-item-active-indicator-width`
|
|
12124
|
+
(default `var(--lr-size-2px)`) controls its inline width. `--lr-conversation-item-active-indicator-inset-inline`
|
|
12125
|
+
(default `0 auto`) controls its logical inline insets; set `auto 0` to move the indicator to
|
|
12126
|
+
inline-end. The indicator is `aria-hidden`, occupies the full row block-size, and is absent while
|
|
12127
|
+
the row is inactive.
|
|
12128
|
+
|
|
11697
12129
|
`--lr-conversation-item-compact-padding` (default `var(--lr-space-xs) var(--lr-space-s)`) —
|
|
11698
12130
|
`[part='base']`'s padding while `compact`. `--lr-conversation-item-compact-gap` (default
|
|
11699
12131
|
`var(--lr-space-2xs)`) — `[part='base']`'s gap while `compact`. Like the active-state pair, both are
|
|
@@ -11875,7 +12307,13 @@ decorative box size (clamped against `--lr-icon-button-size` via `min()`). All f
|
|
|
11875
12307
|
uses — so `size` is the primary lever; override the cssprop directly only to retune a single tier or
|
|
11876
12308
|
step outside the scale entirely. `--lr-model-select-option-active-bg` (default
|
|
11877
12309
|
`var(--lr-color-brand-quiet)`) — background of a hovered or keyboard-active `[part="option"]` row;
|
|
11878
|
-
declared as a `var()` fallback at the point of use, not on `:host`, so it isn't tied to `size`.
|
|
12310
|
+
declared as a `var()` fallback at the point of use, not on `:host`, so it isn't tied to `size`. The
|
|
12311
|
+
selected row (`[part="option"][aria-selected="true"]`) has the matching set
|
|
12312
|
+
`--lr-model-select-option-selected-bg` (default `transparent`),
|
|
12313
|
+
`--lr-model-select-option-selected-border` and `--lr-model-select-option-selected-color` (both
|
|
12314
|
+
`var(--lr-color-brand)`), and `--lr-model-select-option-selected-font-weight`
|
|
12315
|
+
(`var(--lr-font-weight-semibold)`), all inline `var()` fallbacks so the selected row is rethemeable
|
|
12316
|
+
without hijacking `--lr-color-brand`. Plus
|
|
11879
12317
|
shared tokens — `--lr-space-xs/-s`, `--lr-color-border/-surface/-brand/-brand-quiet/-text-quiet`,
|
|
11880
12318
|
`--lr-radius`, `--lr-shadow`, `--lr-focus-ring-width/-color/-offset`, `--lr-icon-button-size`,
|
|
11881
12319
|
`--lr-transition-fast`, `--lr-opacity-disabled`.
|
|
@@ -12884,7 +13322,7 @@ reach callback-rendered descendants through these parts). `row-excerpt` wraps `r
|
|
|
12884
13322
|
output, which is slotted into the row item's own `excerpt` slot.
|
|
12885
13323
|
|
|
12886
13324
|
Data mode additionally forwards each row `<lr-conversation-item>`'s own parts under a `row-item-`
|
|
12887
|
-
prefix: `row-item-base`, `row-item-option`, `row-item-leading`, `row-item-content`,
|
|
13325
|
+
prefix: `row-item-base`, `row-item-active-indicator`, `row-item-option`, `row-item-leading`, `row-item-content`,
|
|
12888
13326
|
`row-item-title`, `row-item-title-input`, `row-item-rename-button`, `row-item-excerpt`,
|
|
12889
13327
|
`row-item-meta`, `row-item-timestamp`, `row-item-actions`.
|
|
12890
13328
|
|
|
@@ -13300,6 +13738,11 @@ referenced: `--lr-color-text-quiet`, `--lr-color-surface`, `--lr-color-border`,
|
|
|
13300
13738
|
`--lr-space-xs/-s/-m`, `--lr-radius`, `--lr-shadow`, `--lr-focus-ring-*`,
|
|
13301
13739
|
`--lr-transition-fast`.
|
|
13302
13740
|
|
|
13741
|
+
> Retheming a chip from outside `<lr-tool-call-chip>` (e.g. per-tool or per-status colors)?
|
|
13742
|
+
> Set `--lr-theme-*` on the ancestor wrapper, not `--lr-*` directly — see `llms/shared.md`'s
|
|
13743
|
+
> "Theming and design tokens" section for why a `--lr-*` override on a wrapper only reaches that
|
|
13744
|
+
> wrapper's *direct* children, not a nested `<lr-*>` host's shadow DOM.
|
|
13745
|
+
|
|
13303
13746
|
**Optional peer deps:** none.
|
|
13304
13747
|
|
|
13305
13748
|
```html
|
|
@@ -13366,6 +13809,13 @@ shell around it.
|
|
|
13366
13809
|
- `copyable: boolean = false` (reflected) — shows a copy-to-clipboard affordance alongside the
|
|
13367
13810
|
fallback view, for either `fallback` kind: forwarded to `<lr-json-viewer>`'s own `copyable` for
|
|
13368
13811
|
`"json"`, or a `<lr-copy-button>` rendered next to the text for `"text"`.
|
|
13812
|
+
- `status: 'pending'|'running'|'success'|'error'|'denied' = 'success'` (reflected) — the outcome of
|
|
13813
|
+
the currently-rendered result, as reported by the matched renderer's own `context.reportStatus()`
|
|
13814
|
+
(see below). Reset to `'success'` immediately before every `render()` call, so a renderer that
|
|
13815
|
+
never calls `reportStatus` — including every pre-existing 2-arg renderer written before this
|
|
13816
|
+
property existed — leaves it at that default, and a later renderer that stays quiet doesn't
|
|
13817
|
+
inherit a stale outcome left behind by a previous one. Same status vocabulary as
|
|
13818
|
+
`<lr-tool-result-dialog>`/`<lr-tool-call-chip>`.
|
|
13369
13819
|
|
|
13370
13820
|
**Events:** `lr-render-error` (`detail: { toolName: string; error: unknown }`) — fired immediately
|
|
13371
13821
|
before falling back to `<lr-json-viewer>`, whether because no renderer matched, a candidate
|
|
@@ -13408,10 +13858,16 @@ this same module-level registry unless a given `<lr-tool-result-view>`'s `regist
|
|
|
13408
13858
|
set to a different `Map` instance.
|
|
13409
13859
|
|
|
13410
13860
|
**`ToolRendererDefinition`** — the shape of one registered renderer:
|
|
13411
|
-
- `render?: (result: unknown, args: unknown) => unknown` — renders the
|
|
13412
|
-
produced it) as UI. Typed as `unknown` rather than Lit's
|
|
13413
|
-
value works (a plain string, a DOM node, an array of
|
|
13414
|
-
Lit import and don't need this module to add one
|
|
13861
|
+
- `render?: (result: unknown, args: unknown, context: ToolRenderContext) => unknown` — renders the
|
|
13862
|
+
result (and the args that produced it) as UI. Typed as `unknown` rather than Lit's
|
|
13863
|
+
`TemplateResult` so any lit-html-renderable value works (a plain string, a DOM node, an array of
|
|
13864
|
+
templates) — consumers already own their own Lit import and don't need this module to add one.
|
|
13865
|
+
The 3rd `context` argument is additive: it's the *last* positional parameter, so a pre-existing
|
|
13866
|
+
2-arg `render(result, args)` function stays assignable to this type unchanged — JS/TS function
|
|
13867
|
+
assignability allows an implementation with fewer parameters than its declared type. Use
|
|
13868
|
+
`context.reportStatus(status)` (see `ToolRenderContext` below) to signal a non-throwing outcome
|
|
13869
|
+
— e.g. an application-level failure the renderer still drew real UI for — instead of throwing,
|
|
13870
|
+
which discards that UI for the `<lr-json-viewer>` fallback instead
|
|
13415
13871
|
- `matches?: (payload: unknown) => boolean` — facade/shape-based dispatch predicate, consulted only
|
|
13416
13872
|
when no exact `toolName` key matches (see dispatch order below); only ever consulted *before*
|
|
13417
13873
|
`load` resolves when supplied inline at registration time — a definition that needs shape-based
|
|
@@ -13424,6 +13880,27 @@ set to a different `Map` instance.
|
|
|
13424
13880
|
object, so `load: () => import('./my-renderer.js')` works unmodified when that module's default
|
|
13425
13881
|
export is itself a `ToolRendererDefinition`
|
|
13426
13882
|
|
|
13883
|
+
**`ToolRenderContext`** — the shape of `render()`'s 3rd argument:
|
|
13884
|
+
- `reportStatus: (status: ToolResultStatus) => void` — reports this render's outcome without
|
|
13885
|
+
throwing. `ToolResultStatus` is `'pending' | 'running' | 'success' | 'error' | 'denied'`, the same
|
|
13886
|
+
union `<lr-tool-result-dialog>`/`<lr-tool-call-chip>` use, re-exported from this module. Calling
|
|
13887
|
+
it is entirely optional: a renderer that never calls it leaves `<lr-tool-result-view>`'s `status`
|
|
13888
|
+
property at its default, `'success'`. This threads through the lazy `load()` path exactly the
|
|
13889
|
+
same way — a `render()` resolved via `load()` receives the same 3rd `context` argument as one
|
|
13890
|
+
registered directly.
|
|
13891
|
+
|
|
13892
|
+
```ts
|
|
13893
|
+
registerToolRenderer('run_query', {
|
|
13894
|
+
render: (result, _args, context) => {
|
|
13895
|
+
if ((result as { rows?: unknown[] })?.rows === undefined) {
|
|
13896
|
+
context.reportStatus('error');
|
|
13897
|
+
return html`<p class="query-error">The query returned no result set.</p>`;
|
|
13898
|
+
}
|
|
13899
|
+
return html`<query-result-table .rows=${(result as { rows: unknown[] }).rows}></query-result-table>`;
|
|
13900
|
+
},
|
|
13901
|
+
});
|
|
13902
|
+
```
|
|
13903
|
+
|
|
13427
13904
|
**Exports:**
|
|
13428
13905
|
- `registerToolRenderer(name: string, def: ToolRendererDefinition): void` — registers (or
|
|
13429
13906
|
overwrites) the renderer for `name` in the module-level default registry
|
|
@@ -13483,6 +13960,20 @@ registerToolRenderer('web_search', {
|
|
|
13483
13960
|
- `matches` is a linear scan over every registered definition's `matches` in registration order; it
|
|
13484
13961
|
only runs when the exact-name lookup misses, so tool names with a direct registration never pay
|
|
13485
13962
|
that scan cost
|
|
13963
|
+
- `status` is reset to `'success'` immediately before every `render()` call, not merely at
|
|
13964
|
+
construction — a renderer that reported `'error'` on one result does not leave that status
|
|
13965
|
+
behind once dispatch moves on to a different (quiet) renderer; a `reportStatus()` call that
|
|
13966
|
+
arrives asynchronously after a *newer* resolve has already started (a stale promise the previous
|
|
13967
|
+
render kicked off) is detected via the same generation counter as the `load()` staleness guard
|
|
13968
|
+
and discarded rather than clobbering the newer status
|
|
13969
|
+
- **don't type a custom renderer against a hand-rolled, over-generic function signature** (e.g.
|
|
13970
|
+
`render: (...args: any[]) => unknown`, or a locally-declared narrower alias then cast to
|
|
13971
|
+
`ToolRendererDefinition`) — write the registration as a plain object literal (as in every example
|
|
13972
|
+
above) or annotate it as `ToolRendererDefinition` directly, so TypeScript checks the actual
|
|
13973
|
+
current `render`/`matches`/`load` shape, including the `context: ToolRenderContext` 3rd
|
|
13974
|
+
parameter and the exact `ToolResultStatus` string union `reportStatus` accepts. A loosened/`any`
|
|
13975
|
+
signature type-checks either way but silently gives up the compiler's ability to catch a typo'd
|
|
13976
|
+
status string or a dropped `context` parameter
|
|
13486
13977
|
- `fallback` implements exactly two kinds, `"json"` and `"text"`; any *other* value silently behaves
|
|
13487
13978
|
as `"json"`, as does `"text"` whenever `result` isn't a string. Only `"text"` renders
|
|
13488
13979
|
`[part="fallback-text"]`/`[part="fallback-copy"]`
|
|
@@ -15064,6 +15555,38 @@ retinted independently; `--lr-tool-timeline-pending-approval-border-color` (defa
|
|
|
15064
15555
|
`var(--lr-color-warning)`) — color of the entry body's leading border while that entry's
|
|
15065
15556
|
`data-pending-approval` is `"true"`.
|
|
15066
15557
|
|
|
15558
|
+
## `lr-agent-eval-dashboard`
|
|
15559
|
+
|
|
15560
|
+
Controlled evaluation overview with metric cards, a dependency-free trend chart, and run-status
|
|
15561
|
+
history. It never launches or scores evaluations.
|
|
15562
|
+
|
|
15563
|
+
**Properties:** `metrics: AgentEvaluationMetric[] = []` (attribute: false), where each metric is
|
|
15564
|
+
`{ id, label, value, format?: 'number' | 'percent' | 'milliseconds' | 'currency' }`; `runs:
|
|
15565
|
+
AgentEvaluationDashboardRun[] = []` (attribute: false), where each run is `{ id, label, status,
|
|
15566
|
+
metrics?: Record<string, number> }`; `metricId: string = ''`; `label: string = ''`; `showChart:
|
|
15567
|
+
boolean = true`; `chartHeight: string = '220px'`.
|
|
15568
|
+
|
|
15569
|
+
**Events:** `lr-metric-change` (`{ metricId }`, reserved for host-controlled metric selectors) and
|
|
15570
|
+
`lr-run-select` (`{ runId }`).
|
|
15571
|
+
|
|
15572
|
+
**CSS parts:** `base`, `heading`, `metrics`, `metric`, `chart`, `runs`, `runs-heading`, `run`,
|
|
15573
|
+
`run-label`, `run-meta`, `run-status`, `empty`.
|
|
15574
|
+
|
|
15575
|
+
## `lr-approval-queue`
|
|
15576
|
+
|
|
15577
|
+
Keyboard-accessible queue of pending tool calls backed by one reusable `lr-tool-approval-dialog`.
|
|
15578
|
+
It never executes tools or persists decisions.
|
|
15579
|
+
|
|
15580
|
+
**Properties:** `requests: ToolApprovalRequest[] = []` (attribute: false), where each request is
|
|
15581
|
+
`{ id, toolName, args, status?: 'pending' | 'approved' | 'denied' }`; `selectedId: string = ''`;
|
|
15582
|
+
`open: boolean = false`; `editable: boolean = true`; `label: string = ''`.
|
|
15583
|
+
|
|
15584
|
+
**Events:** `lr-approval-select` (`{ invocationId }`), `lr-approval-decision` (`{ invocationId,
|
|
15585
|
+
approved, args? }`), and `lr-approval-close` (`{ invocationId, reason }`).
|
|
15586
|
+
|
|
15587
|
+
**CSS parts:** `base`, `heading-row`, `heading`, `count`, `list`, `request`, `request-info`,
|
|
15588
|
+
`tool-name`, `request-id`, `status`, `empty`.
|
|
15589
|
+
|
|
15067
15590
|
# Retrieval, knowledge graph & grounding (`components/retrieval/`)
|
|
15068
15591
|
|
|
15069
15592
|
## `lr-graph`
|
|
@@ -15939,6 +16462,11 @@ directly — set instead by the `:host([status=...])` rules), plus shared tokens
|
|
|
15939
16462
|
`--lr-color-surface`, `--lr-color-border`, `--lr-shadow`, `--lr-space-s`/`-m`,
|
|
15940
16463
|
`--lr-transition-fast`, `--lr-focus-ring-*`.
|
|
15941
16464
|
|
|
16465
|
+
> Retheming a badge from outside `<lr-citation-badge>` (e.g. per-source or per-confidence colors)?
|
|
16466
|
+
> Set `--lr-theme-*` on the ancestor wrapper, not `--lr-*` directly — see `llms/shared.md`'s
|
|
16467
|
+
> "Theming and design tokens" section for why a `--lr-*` override on a wrapper only reaches that
|
|
16468
|
+
> wrapper's *direct* children, not a nested `<lr-*>` host's shadow DOM.
|
|
16469
|
+
|
|
15942
16470
|
**Optional peer deps:** none.
|
|
15943
16471
|
|
|
15944
16472
|
```html
|
|
@@ -16687,3 +17215,54 @@ falls back to that token, so rendering is unchanged. Plus shared tokens otherwis
|
|
|
16687
17215
|
**Known gotchas:**
|
|
16688
17216
|
- Every stage starts collapsed; expansion state is internal `@state` keyed by stage id, not a
|
|
16689
17217
|
controlled property.
|
|
17218
|
+
|
|
17219
|
+
## `lr-rag-answer`
|
|
17220
|
+
|
|
17221
|
+
Controlled grounded-answer surface combining sanitized Markdown, citation badges, grounding
|
|
17222
|
+
assessment, and expandable source previews. It performs no model call, retrieval, citation parsing,
|
|
17223
|
+
or source fetching.
|
|
17224
|
+
|
|
17225
|
+
**Properties:** `answer: string = ''`; `citations: Citation[] = []` (attribute: false);
|
|
17226
|
+
`sources: DocumentRef[] = []` (attribute: false); `assessment: GroundingAssessment | null = null`
|
|
17227
|
+
(attribute: false); `loading: boolean = false`; `error: string = ''`; `showSources: boolean = true`;
|
|
17228
|
+
`label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`).
|
|
17229
|
+
|
|
17230
|
+
**Events:** `lr-citation-select` (`{ citation }`) and `lr-retry`.
|
|
17231
|
+
|
|
17232
|
+
**Slots:** `answer` replaces the data-driven Markdown body; `sources` replaces the data-driven
|
|
17233
|
+
source list.
|
|
17234
|
+
|
|
17235
|
+
**CSS parts:** `base`, `answer`, `loading`, `error`, `retry`, `grounding`, `citations`,
|
|
17236
|
+
`citation-list`, `sources`, `source-list`, `section-heading`.
|
|
17237
|
+
|
|
17238
|
+
## `lr-embedding-explorer`
|
|
17239
|
+
|
|
17240
|
+
Dependency-free accessible 2D embedding projection viewer. Coordinates are projected by the host;
|
|
17241
|
+
the component only normalizes them into SVG, colors optional clusters, and emits selection events.
|
|
17242
|
+
|
|
17243
|
+
**Properties:** `points: EmbeddingPoint[] = []` (attribute: false), where each point is `{ id, x,
|
|
17244
|
+
y, label?, sourceId?, cluster? }`; `selectedId: string = ''`; `height: string = '360px'`;
|
|
17245
|
+
`accessibleLabel: string | null = null` (attribute `aria-label`). Non-finite coordinates are
|
|
17246
|
+
omitted.
|
|
17247
|
+
|
|
17248
|
+
**Events:** `lr-point-select` (`{ point }`), activated by click or Enter/Space.
|
|
17249
|
+
|
|
17250
|
+
**CSS parts:** `base`, `plot`, `point`, `empty`.
|
|
17251
|
+
|
|
17252
|
+
## `lr-knowledge-base-admin`
|
|
17253
|
+
|
|
17254
|
+
Tabbed operations shell composing `lr-knowledge-base` and `lr-ingestion-queue`. It forwards source
|
|
17255
|
+
and ingestion actions under namespaced events; host-owned controls such as chunking, embedding,
|
|
17256
|
+
permissions, and connector settings go in the `settings` slot.
|
|
17257
|
+
|
|
17258
|
+
**Properties:** `sources: KnowledgeSource[] = []` (attribute: false); `ingestionItems:
|
|
17259
|
+
IngestionQueueItem[] = []` (attribute: false); `activeTab: 'sources' | 'ingestion' = 'sources'`;
|
|
17260
|
+
`label: string = ''`; `hideIngestion: boolean = false`.
|
|
17261
|
+
|
|
17262
|
+
**Events:** `lr-tab-change` (`{ tab }`), `lr-source-create`, `lr-source-sync`, `lr-source-pause`,
|
|
17263
|
+
`lr-source-delete`, `lr-ingestion-retry`, and `lr-ingestion-cancel` (the latter four preserve the
|
|
17264
|
+
correlated ids/details from their composed primitives).
|
|
17265
|
+
|
|
17266
|
+
**Slots:** `settings` — host-owned KB configuration controls.
|
|
17267
|
+
|
|
17268
|
+
**CSS parts:** `base`, `heading`, `tabs`, `tab`, `panel`, `settings`.
|